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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
using Soneta.Business;
|
||||
using Soneta.Business.App;
|
||||
using Soneta.Core;
|
||||
using Soneta.CRM;
|
||||
using Soneta.EwidencjaVat;
|
||||
using Soneta.Handel;
|
||||
using Soneta.Tools;
|
||||
using Soneta.Types;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
|
||||
namespace FX2_SP_WORKERS.PrzeksięgowanieProwizje
|
||||
{
|
||||
internal class PrzeksiegowanieParams : ContextBase
|
||||
{
|
||||
private List<Kontrahent> listaPointow = new List<Kontrahent>();
|
||||
private DokEwidencji dok = null;
|
||||
private List<DefinicjaDokumentu> listaDefPK = new List<DefinicjaDokumentu>();
|
||||
private string[] listaBazSprzedaz = { "WSCHODNI FRONT", "PAN VIKING" };
|
||||
public PrzeksiegowanieParams(Context context) : base(context)
|
||||
{
|
||||
dok = (DokEwidencji)context[typeof(DokEwidencji)];
|
||||
|
||||
//Ustawianie definicji PK
|
||||
listaDefPK = CoreModule.GetInstance(Context).DefDokumentow.WgTypu[TypDokumentu.PKEwidencja].ToList();
|
||||
defPK = CoreModule.GetInstance(Context).DefDokumentow.WgSymbolu["PROW"];
|
||||
|
||||
if (defPK is null)
|
||||
defPK = listaDefPK.FirstOrDefault();
|
||||
|
||||
//Ustawianie listy sprzedaży detalicznej
|
||||
listaPointow = CRMModule.GetInstance(Context).Kontrahenci.WgNazwy
|
||||
.Where(x => x.AccessRight is not AccessRights.Denied && x.Nazwa.ToLower().StartsWith("sprzedaż detaliczna"))
|
||||
.ToList();
|
||||
|
||||
//Ustawianie daty przeksięgowania
|
||||
dataPrzyksiegowania = dok.DataEwidencji;
|
||||
|
||||
if (dok.Typ == TypDokumentu.SprzedażEwidencja)
|
||||
if (dok.Dokument is null || dok.Dokument is not DokumentHandlowy)
|
||||
sumaRaportu = ((SprzedazEwidencja)dok).VAT_Brutto.Value;
|
||||
else
|
||||
sumaRaportu = ((DokumentHandlowy)dok.Dokument).Suma.Brutto;
|
||||
}
|
||||
|
||||
private DefinicjaDokumentu defPK = null;
|
||||
|
||||
[Caption("Definicja PK"), Priority(1), DefaultWidth(25)]
|
||||
public DefinicjaDokumentu DefPK
|
||||
{
|
||||
get => defPK;
|
||||
set
|
||||
{
|
||||
if (value is not null)
|
||||
{
|
||||
defPK = value;
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
public object GetListDefPK()
|
||||
{
|
||||
return listaDefPK;
|
||||
}
|
||||
|
||||
private decimal sumaRaportu = 0;
|
||||
|
||||
[Caption("Suma raportu płatności"), Priority(2), DefaultWidth(25)]
|
||||
public decimal SumaRaportu
|
||||
{
|
||||
get => sumaRaportu;
|
||||
set
|
||||
{
|
||||
sumaRaportu = value;
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
public bool IsReadOnlySumaRaportu()
|
||||
{
|
||||
return dok.Typ == TypDokumentu.SprzedażEwidencja;
|
||||
}
|
||||
|
||||
public Kontrahent punktPointa = null;
|
||||
|
||||
[Caption("Punkt Pointa"), Priority(3), DefaultWidth(25)]
|
||||
public Kontrahent PunktPointaWschodni
|
||||
{
|
||||
get => punktPointa;
|
||||
set
|
||||
{
|
||||
punktPointa = value;
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsVisiblePunktPointaWschodni()
|
||||
{
|
||||
return dok.Typ != TypDokumentu.SprzedażEwidencja && listaBazSprzedaz.Contains(((Login)Context[typeof(Login)]).Database.Name.Trim().ToUpper());
|
||||
}
|
||||
public object GetListPunktPointaWschodni()
|
||||
{
|
||||
return listaPointow;
|
||||
}
|
||||
|
||||
[Caption("Punkt Pointa"), Priority(3), DefaultWidth(25)]
|
||||
public Kontrahent[] PunktPointa
|
||||
{
|
||||
get => punktPointaSprzedazList;
|
||||
set
|
||||
{
|
||||
punktPointaSprzedazList = value;
|
||||
|
||||
if (value.Any())
|
||||
punktPointa = value.FirstOrDefault();
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsVisiblePunktPointa()
|
||||
{
|
||||
return dok.Typ != TypDokumentu.SprzedażEwidencja && !listaBazSprzedaz.Contains(((Login)Context[typeof(Login)]).Database.Name.Trim().ToUpper());
|
||||
}
|
||||
|
||||
private Kontrahent[] punktPointaSprzedazList = null;
|
||||
|
||||
[Caption("Kontrahent"), Priority(3), DefaultWidth(25)]
|
||||
public Kontrahent[] PunktPointaSprzedaz
|
||||
{
|
||||
get => punktPointaSprzedazList;
|
||||
set
|
||||
{
|
||||
punktPointaSprzedazList = value;
|
||||
|
||||
if (value.Any())
|
||||
punktPointa = value.FirstOrDefault();
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
public bool IsVisiblePunktPointaSprzedaz()
|
||||
{
|
||||
return dok.Typ == TypDokumentu.SprzedażEwidencja;
|
||||
}
|
||||
|
||||
private Date dataPrzyksiegowania;
|
||||
|
||||
[Caption("Data przyksięowania"), Priority(4), DefaultWidth(15), Required]
|
||||
public Date DataPrzyksiegowania
|
||||
{
|
||||
get => dataPrzyksiegowania;
|
||||
set
|
||||
{
|
||||
dataPrzyksiegowania = value;
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
private string kontoKsiegowania = "202";
|
||||
private string[] listaKontoKsiegowania = { "202", "204" };
|
||||
|
||||
[Caption("Księgowanie na konto"), Priority(5), DefaultWidth(15)]
|
||||
public string KontoKsiegowania
|
||||
{
|
||||
get => kontoKsiegowania;
|
||||
set
|
||||
{
|
||||
if(listaKontoKsiegowania.Contains(value))
|
||||
kontoKsiegowania = value;
|
||||
|
||||
OnChanged(EventArgs.Empty);
|
||||
}
|
||||
}
|
||||
public object GetListKontoKsiegowania()
|
||||
{
|
||||
return listaKontoKsiegowania;
|
||||
}
|
||||
|
||||
public bool IsReadOnlyKontoKsiegowania()
|
||||
{
|
||||
return ((Login)Context[typeof(Login)]).Database.Name.Trim().ToUpper() != "PAN VIKING";
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user