using Soneta.Business; using Soneta.Business.App; using Soneta.Core; using Soneta.Kasa; using Soneta.Ksiega; using Soneta.Types; using System; using System.Collections.Generic; using System.Linq; namespace FX2_SP_WORKERS.PrzeksiegowanieKoszty { public static class DekretacjaPrzelomMiesiecy { public static Dekret Dekretuj(KsiegaModule km, PKEwidencja pkk, DokEwidencji dok, OkresObrachunkowy okres, Context context) { //Pobieranie elementów opisu analitycznego, które mają inny miesiąc niż dokument ewidencji List listaElemOpisu = dok.OpisAnalityczny .ToArray() .Where(x => x.Data.Month != dok.DataEwidencji.Month) .OrderBy(x => x.ID) .ToList(); //Znalezenie najwcześniejszej daty w elementach opisu analitycznego Date minDataElementu = listaElemOpisu.Min(x => x.Data); string nazwaBazy = ((Login)context[typeof(Login)]).Database.Name.Trim().ToUpper(); //Bazy, dla których jest włączona obsługa segmentu 5 string[] listaBaz = { "FLOTA VIKINGA" }; //Ustawienie okresu obrachunkowego zgodnego z najwcześniejszą datą elementu opisu analitycznego if (okres.Symbol != minDataElementu.Year.ToString()) okres = km.OkresyObrach.WgSymbolu[minDataElementu.Year.ToString()]; string flotaPrefix = nazwaBazy == "FLOTA VIKINGA" ? "001-" : ""; #region Tworzenie dekretu Dekret dekretDodatk = new Dekret(okres, pkk); pkk.Dekrety.BaseTable.AddRow(dekretDodatk); dekretDodatk.Opis = pkk.Opis; dekretDodatk.Data = minDataElementu; //Tworzenie zapisów dekretu foreach (ElementOpisuEwidencji elem in listaElemOpisu) { dekretDodatk.Data = elem.Data; KontoBase konto345 = km.Konta.WgOkres[okres].FirstOrDefault(x => x.AccessRight == AccessRights.Granted && x.Symbol == elem.Symbol); Currency kwotaDodatkowa = Currency.Zero; Currency razemOA = Currency.Zero; if ((elem.Ewidencja.Definicja.Symbol == "ZPIMP" || elem.Ewidencja.Definicja.Symbol == "ZIMP")) { Platnosc platnosc = (Platnosc)elem.Ewidencja.Platnosci.GetFirst(); { kwotaDodatkowa = new Currency(elem.Kwota.Value * (decimal)platnosc.Kurs); } } Currency kwotaZapisu = dok.Definicja.Symbol is "ZIMP" or "ZPIMP" ? kwotaDodatkowa : elem.Kwota; //Sprawdzenie czy dla danej bazy jest włączona obsługa segmentu 5 bool isEnabled = listaBaz.Any(x => x.Trim().ToUpper() == ((Login)context[typeof(Login)]).Database.Name.Trim().ToUpper()); string segm5 = (elem.Features["KS_segm5"].ToString().Trim() != string.Empty && isEnabled) ? "-" + elem.Features["KS_segm5"].ToString().Trim() : ""; switch (elem.Wymiar) { case ".": string symbolKonta5 = elem.CentrumKosztow.Features["Piatka"].ToString() + "-" + flotaPrefix + elem.Symbol.Substring(4, elem.Symbol.Length - 4) + segm5; symbolKonta5 = nazwaBazy == "VIKING POINT" ? elem.CentrumKosztow.Features["Piatka"].ToString() + "-" + elem.Symbol.Substring(1) : symbolKonta5; KontoBase kontowWn1 = km.Konta.WgOkres[okres].FirstOrDefault(x => x.AccessRight == AccessRights.Granted && x.Symbol == symbolKonta5); if (kontowWn1 is not null) { Zapis zap1 = new Zapis(dekretDodatk); km.ZapisyKsiegowe.AddRow(zap1); zap1.Konto = kontowWn1; zap1.WinienOperacji = kwotaZapisu; zap1.Opis = elem.Opis + " " + dok.Opis; zap1.Features["KS_Centrum Kosztow"] = Centrum(elem, dok, okres); zap1.Features["KS_Czworka"] = Czworka(elem, okres); } KontoBase kontoMa2 = km.Konta.WgOkres[okres].FirstOrDefault(x => x.AccessRight == AccessRights.Granted && x.Symbol == "490"); if (kontoMa2 is not null) { Zapis zap2 = new Zapis(dekretDodatk); km.ZapisyKsiegowe.AddRow(zap2); zap2.Konto = kontoMa2; zap2.MaOperacji = kwotaZapisu; zap2.Opis = elem.Opis + " " + dok.Opis; } if (konto345 is not null) { Zapis zap3 = new Zapis(dekretDodatk); km.ZapisyKsiegowe.AddRow(zap3); zap3.Konto = konto345; zap3.WinienOperacji = kwotaZapisu; zap3.Opis = elem.Opis + " " + dok.Opis; } break; case "Konto Wn": if (konto345 is not null) { Zapis zap4 = new Zapis(dekretDodatk); km.ZapisyKsiegowe.AddRow(zap4); zap4.Konto = konto345; zap4.WinienOperacji = kwotaZapisu; zap4.Opis = elem.Opis + " " + dok.Opis; } break; case "Konto Ma": if (konto345 is not null) { Zapis zap5 = new Zapis(dekretDodatk); km.ZapisyKsiegowe.AddRow(zap5); zap5.Konto = konto345; zap5.MaOperacji = kwotaZapisu; zap5.Opis = elem.Opis + " " + dok.Opis; } break; } } return dekretDodatk; #endregion Tworzenie dekretu } private static KontoBase Czworka(ElementOpisuEwidencji Kontekst, OkresObrachunkowy okres) { KsiegaModule km = KsiegaModule.GetInstance(Kontekst.Session); KontoBase kb = km.Konta.WgOkres[okres].FirstOrDefault(x => x.AccessRight == AccessRights.Granted && x.Symbol == Kontekst.Symbol.ToString()); return kb; } private static int i = 0; private static CentrumKosztow Centrum(ElementOpisuEwidencji Kontekst, DokEwidencji Ewidencja, OkresObrachunkowy okres) { ElementOpisuEwidencji[] elementy = Ewidencja.OpisAnalityczny.ToArray(); if (Czworka(Kontekst, okres) is not null && elementy.Count() > i) { ElementOpisuEwidencji elemCentrum = elementy[i]; i++; if (elemCentrum is not null) return elemCentrum.CentrumKosztow; } return null; } } }