Migracja z NAS do Gitea
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user