Migracja z NAS do Gitea

This commit is contained in:
2026-06-08 14:25:13 +02:00
commit e2fc5f8ce4
59 changed files with 16205 additions and 0 deletions
@@ -0,0 +1,296 @@
using Soneta.Business;
using Soneta.Business.App;
using Soneta.Business.UI;
using Soneta.Core;
using Soneta.Handel;
using Soneta.Kasa;
using Soneta.Ksiega;
using Soneta.Tools;
using Soneta.Types;
using System;
using System.Linq;
namespace FX2_SP_WORKERS.PrzeksięgowanieProwizje
{
internal static class PrzeksiegowanieFun
{
public static object Start(Context context, PrzeksiegowanieParams parametry)
{
DokEwidencji dok = (DokEwidencji)context[typeof(DokEwidencji)];
//Warunki kluczowe
if (dok == null || (DokEwidencji)dok.Features["PrzeksiegowanyDokument"] is not null)
return null;
string tanoshiiPrefix = ((Login)context[typeof(Login)]).Database.Name.Trim().ToUpper() == "TANOSHII" ? "001-" : "";
KsiegaModule km = KsiegaModule.GetInstance(context.Session);
CoreModule cm = CoreModule.GetInstance(context.Session);
OkresObrachunkowy okres = km.OkresyObrach.WgSymbolu[parametry.DataPrzyksiegowania.Year.ToString()];
string syntetyczne201203 = parametry.KontoKsiegowania == "202" ? "201" : "203";
KontoBase syntkonto201203 = FindKonto(km, syntetyczne201203, okres);
KontoBase syntkonto201 = FindKonto(km, "201", okres);
#region Sprawdzanie warunków wstępnych
Progress(0m, "Sprawdzanie warunków wstępnych");
try
{
if (parametry.DefPK is null)
throw new InvalidOperationException("Nie wybrano definicji dokumentu PK.");
if (parametry.PunktPointaWschodni is null)
throw new InvalidOperationException(dok.Typ == TypDokumentu.SprzedażEwidencja ? "Nie wybrano kontrahenta." : "Nie wybrano punktu POINT.");
if (!dok.Dekrety.Any)
throw new InvalidOperationException("Dokument nie posiada dekretów.");
if (dok.Typ == TypDokumentu.ZakupEwidencja && !((Dekret)dok.Dekrety.GetFirst()).Zapisy.Any(x => x.Konto.AccessRight != AccessRights.Denied && x.Konto.Symbol.StartsWith($"{parametry.KontoKsiegowania}-{tanoshiiPrefix}")))
throw new InvalidOperationException($"Dokument nie posiada dekretu z zapisem na koncie {parametry.KontoKsiegowania}");
if (syntkonto201203 is null)
throw new InvalidOperationException($"Brak syntetycznego konta {syntetyczne201203} w planie kont.");
if (syntkonto201 is null)
throw new InvalidOperationException($"Brak syntetycznego konta 201 w planie kont.");
if (okres is null)
throw new InvalidOperationException("Brak okresu obrachunkowego dla roku dokumentu.");
}
catch (Exception ex)
{
return Error("Przeksięgowanie - błąd warunków wstępnych", ex);
}
#endregion Sprawdzanie warunków wstępnych
using (ITransaction tran = context.Session.Logout(true))
{
#region Tworzenie dokumentu PK ewidencji
Progress(0.20m, "Tworzenie dokumentu PK");
PKEwidencja pkk;
try
{
pkk = new PKEwidencja();
cm.DokEwidencja.AddRow(pkk);
pkk.Definicja = parametry.DefPK;
pkk.Podmiot = dok.Podmiot;
pkk.NumerDokumentu = dok.Numer.Pelny;
pkk.Opis = dok.Opis;
pkk.Wartosc = parametry.SumaRaportu;
pkk.Features["PrzeksiegowanyDokument"] = dok;
pkk.DataEwidencji = pkk.DataOperacji = pkk.DataWplywu = parametry.DataPrzyksiegowania;
if (pkk.Dokument is not DokumentHandlowy)
pkk.DataDokumentu = parametry.DataPrzyksiegowania;
}
catch (Exception ex)
{
return Error("Przeksięgowanie - błąd tworzenia dokumentu PK", ex);
}
#endregion Tworzenie dokumentu PK ewidencji
#region Tworzenie dekretu
Progress(0.40m, "Tworzenie dekretu dokumentu PK");
Dekret dekretPK;
ZapisKsiegowy zapis202Dok;
string konto202_204 = $"{parametry.KontoKsiegowania}-{tanoshiiPrefix}{dok.Podmiot.Kod}";
try
{
zapis202Dok = ((Dekret)dok.Dekrety.GetFirst()).Zapisy
.FirstOrDefault(x => x.Konto.AccessRight != AccessRights.Denied && x.Konto.Symbol == konto202_204);
dekretPK = new Dekret(okres, pkk);
pkk.Dekrety.BaseTable.AddRow(dekretPK);
dekretPK.Opis = pkk.Opis;
dekretPK.Data = parametry.DataPrzyksiegowania;
}
catch (Exception ex)
{
return Error("Przeksięgowanie - błąd tworzenia dekretu PK", ex);
}
#endregion Tworzenie dekretu
#region Tworzenie zapisów dekretu
Progress(0.60m, "Tworzenie zapisów dekretu dokumentu PK");
Zapis zapis202 = null;
Zapis zapis201Ma = null;
Zapis zapis201Winien = null;
Zapis zapis201PMa = null;
Zapis zapis201PWinien = null;
try
{
KontoBase konto201F = FindKonto(km, $"{syntetyczne201203}-{tanoshiiPrefix}{dok.Podmiot.Kod}", okres);
KontoBase konto201P = FindKonto(km, $"201-{tanoshiiPrefix}{parametry.PunktPointaWschodni.Kod}", okres);
if (konto201F is null)
throw new InvalidOperationException($"Brak konta {syntetyczne201203}-{tanoshiiPrefix}{dok.Podmiot.Kod} w planie kont. ({dok.Podmiot.Nazwa})");
if (konto201P is null)
throw new InvalidOperationException($"Brak konta 201-{tanoshiiPrefix}{parametry.PunktPointaWschodni.Kod} w planie kont. ({parametry.PunktPointaWschodni.Nazwa})");
if (dok.Typ == TypDokumentu.ZakupEwidencja)
{
KontoBase konto202F = km.Konta.WgOkres[okres][new FieldCondition.Equal("Symbol", konto202_204)].FirstOrDefault(x => x.AccessRight != AccessRights.Denied);
if (konto202F is null)
throw new System.InvalidOperationException($"Brak konta {parametry.KontoKsiegowania}-" + tanoshiiPrefix + dok.Podmiot.Kod + " w planie kont. ( " + dok.Podmiot.Nazwa + " )");
//Dodanie zapisu na koncie 202F
zapis202 = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis202);
zapis202.Konto = konto202F;
zapis202.WinienOperacji = zapis202Dok.MaOperacji;
zapis202.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis202.Opis = pkk.Opis;
if (zapis202.WinienOperacji.Symbol != "PLN")
zapis202.Kurs = zapis202Dok.Kurs;
//Dodanie zapisu na koncie 201F Ma
zapis201Ma = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis201Ma);
zapis201Ma.Konto = konto201F;
zapis201Ma.MaOperacji = zapis202Dok.MaOperacji;
zapis201Ma.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis201Ma.Opis = pkk.Opis;
if (zapis201Ma.MaOperacji.Symbol != "PLN")
zapis201Ma.Kurs = zapis202Dok.Kurs;
//Dodanie zapisu na koncie 201F Winien
zapis201Winien = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis201Winien);
zapis201Winien.Konto = konto201F;
zapis201Winien.WinienOperacji = new Currency(parametry.SumaRaportu);
zapis201Winien.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis201Winien.Opis = pkk.Opis;
//Dodanie zapisu na koncie 201P Ma
zapis201PMa = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis201PMa);
zapis201PMa.Konto = konto201P;
zapis201PMa.MaOperacji = new Currency(parametry.SumaRaportu);
zapis201PMa.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis201PMa.Opis = pkk.Opis;
}
else if (dok.Typ == TypDokumentu.SprzedażEwidencja)
{
//Dodanie zapisu na koncie 201F Ma
zapis201Ma = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis201Ma);
zapis201Ma.Konto = konto201F;
zapis201Ma.MaOperacji = new Currency(parametry.SumaRaportu);
zapis201Ma.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis201Ma.Opis = pkk.Opis;
//Dodanie zapisu na koncie 201P Winien
zapis201PWinien = new Zapis(dekretPK);
km.ZapisyKsiegowe.AddRow(zapis201PWinien);
zapis201PWinien.Konto = konto201P;
zapis201PWinien.WinienOperacji = new Currency(parametry.SumaRaportu);
zapis201PWinien.DataPodatkowa = parametry.DataPrzyksiegowania;
zapis201PWinien.Opis = pkk.Opis;
}
}
catch (Exception ex)
{
return Error("Przeksięgowanie - błąd tworzenia zapisów dekretu PK", ex);
}
#endregion Tworzenie zapisów dekretu
#region Tworzenie należności i zobowiązań
Progress(0.80m, "Tworzenie płatności dokumentu PK");
try
{
if (dok.Typ == TypDokumentu.ZakupEwidencja)
{
Zapis[] zapisyDoPlatnosci = { zapis202, zapis201Ma, zapis201Winien, zapis201PMa };
UtworzPlatnosci(zapisyDoPlatnosci, pkk);
}
else if (dok.Typ == TypDokumentu.SprzedażEwidencja)
{
Zapis[] zapisyDoPlatnosci = { zapis201Ma, zapis201PWinien };
UtworzPlatnosci(zapisyDoPlatnosci, pkk);
}
//Przeniesienie do bufora i z powrotem aby platnosci sie zatwierdzily
pkk.Stan = StanEwidencji.Bufor;
pkk.Stan = StanEwidencji.Predekretowany;
}
catch (Exception ex)
{
return Error("Przeksięgowanie - błąd tworzenia płatności dekretu PK", ex);
}
#endregion Tworzenie należności i zobowiązań
Progress(1.00m, "Finalizowanie procesu");
dok.Features["PrzeksiegowanyDokument"] = pkk;
tran.CommitUI();
}
return new MessageBoxInformation("Przeksięgowanie")
{
Type = MessageBoxInformationType.Information,
Text = "Proces wykonany pomyślnie",
OKHandler = () => null
};
}
public static bool Visible(Context cx)
{
DokEwidencji dok = (DokEwidencji)cx[typeof(DokEwidencji)];
return dok.Typ is TypDokumentu.ZakupEwidencja or TypDokumentu.SprzedażEwidencja;
}
public static bool Enabled(Context cx)
{
DokEwidencji dok = (DokEwidencji)cx[typeof(DokEwidencji)];
return (dok.Stan == StanEwidencji.Predekretowany && (DokEwidencji)dok.Features["PrzeksiegowanyDokument"] is null);
}
private static MessageBoxInformation Error(string title, Exception ex) => new(title)
{
Type = MessageBoxInformationType.Error,
Text = ex.Message,
OKHandler = () => null
};
private static void Progress(decimal percent, string message)
{
TraceInfo.SetProgressBar(new Percent(percent));
TraceInfo.WriteProgress($"{(int)percent * 100}% {message}");
}
private static KontoBase FindKonto(KsiegaModule km, string symbol, OkresObrachunkowy okres)
{
return km.Konta.WgOkres[okres].FirstOrDefault(x => x.AccessRight != AccessRights.Denied && x.Symbol == symbol);
}
private static void UtworzPlatnosci(Zapis[] zapisy, PKEwidencja pkk)
{
UtworzPlatnoscZZapisuWorker platnoscZZapisuWorker = new UtworzPlatnoscZZapisuWorker();
foreach (Zapis z in zapisy)
{
platnoscZZapisuWorker.Zapis = z;
platnoscZZapisuWorker.Utworz();
z.ElementKsiegowalny = pkk.Platnosci.ToArray<Platnosc>()
.OrderBy(x => x.ID)
.LastOrDefault();
}
}
}
}