Files
VIKING-WORKERS/PrzeksiegowanieKoszty/DekretacjaPrzelomMiesiecy.cs
T
2026-06-08 14:25:13 +02:00

161 lines
7.3 KiB
C#

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<ElementOpisuEwidencji> listaElemOpisu = dok.OpisAnalityczny
.ToArray<ElementOpisuEwidencji>()
.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<ElementOpisuEwidencji>();
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;
}
}
}