137 lines
5.4 KiB
C#
137 lines
5.4 KiB
C#
using Soneta.Business;
|
|
using Soneta.Business.App;
|
|
using Soneta.Business.UI;
|
|
using Soneta.Core;
|
|
using Soneta.Ksiega;
|
|
using Soneta.Tools;
|
|
using Soneta.Types;
|
|
using System;
|
|
using System.Linq;
|
|
|
|
namespace FX2_SP_WORKERS.PrzeksiegowanieKoszty
|
|
{
|
|
internal static class PrzeksiegowanieKosztyFun
|
|
{
|
|
public static object Start(Context context, PrzeksiegowanieKosztyParams parametry)
|
|
{
|
|
if (parametry.DefPK is null)
|
|
throw new InvalidOperationException("Nie wybrano definicji dokumentu PK.");
|
|
|
|
DokEwidencji dok = (DokEwidencji)context[typeof(DokEwidencji)];
|
|
KsiegaModule km = KsiegaModule.GetInstance(context.Session);
|
|
CoreModule cm = CoreModule.GetInstance(context.Session);
|
|
OkresObrachunkowy okres = km.OkresyObrach.WgSymbolu[dok.DataEwidencji.Year.ToString()];
|
|
|
|
using (ITransaction tran = context.Session.Logout(true))
|
|
{
|
|
#region Tworzenie dokumentu PK ewidencji
|
|
|
|
Progress(0.33m, "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.Features["PrzeksiegowanyDokumentKoszty"] = dok;
|
|
if (dok.Typ == TypDokumentu.ZakupEwidencja && dok.OpisAnalityczny.ToArray<ElementOpisuEwidencji>()
|
|
.Any(x => x.Data.Month != dok.DataEwidencji.Month))
|
|
pkk.DataEwidencji = pkk.DataDokumentu = pkk.DataOperacji = pkk.DataWplywu = dok.OpisAnalityczny.ToArray<ElementOpisuEwidencji>()
|
|
.Where(x => x.Data.Month != dok.DataEwidencji.Month)
|
|
.OrderBy(x => x.ID)
|
|
.Min(x => x.Data);
|
|
else
|
|
pkk.DataEwidencji = pkk.DataDokumentu = pkk.DataOperacji = pkk.DataWplywu = dok.DataEwidencji;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Error("Przeksięgowanie - błąd tworzenia dokumentu PK", ex);
|
|
}
|
|
|
|
#endregion Tworzenie dokumentu PK ewidencji
|
|
|
|
#region Dekretacja ze względu na różny miesiąc elementów opisu analitycznego
|
|
|
|
if (dok.Typ == TypDokumentu.ZakupEwidencja && dok.OpisAnalityczny.ToArray<ElementOpisuEwidencji>()
|
|
.Any(x => x.Data.Month != dok.DataEwidencji.Month))
|
|
{
|
|
try
|
|
{
|
|
Progress(0.66m, "Tworzenie dekretu ze względu na różny miesiąc elementów opisu analitycznego.");
|
|
Dekret dekr = DekretacjaPrzelomMiesiecy.Dekretuj(km, pkk, dok, okres, context);
|
|
|
|
pkk.Stan = StanEwidencji.Bufor;
|
|
pkk.Wartosc = dekr.KwotaOperacjiGospodarczej;
|
|
pkk.Stan = StanEwidencji.Predekretowany;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
return Error("Przeksięgowanie - błąd tworzenia dekretu", ex);
|
|
}
|
|
}
|
|
Progress(1.00m, "Finalizowanie procesu");
|
|
dok.Features["PrzeksiegowanyDokumentKoszty"] = pkk;
|
|
tran.CommitUI();
|
|
}
|
|
|
|
#endregion Dekretacja ze względu na różny miesiąc elementów opisu analitycznego
|
|
|
|
return new MessageBoxInformation("Przeksięgowanie kosztów")
|
|
{
|
|
Type = MessageBoxInformationType.Information,
|
|
Text = "Proces wykonany pomyślnie",
|
|
OKHandler = () => null
|
|
};
|
|
}
|
|
|
|
private static readonly string[] listaBazSQL =
|
|
{
|
|
//DEV
|
|
"DEV WSCHODNI FRONT",
|
|
|
|
//PRODUKCJA
|
|
"WSCHODNI FRONT",
|
|
"PAN VIKING",
|
|
"TANOSHII",
|
|
"FLOTA VIKINGA",
|
|
"VIKING POINT",
|
|
"VIKING SOFTWARE",
|
|
|
|
//TESTY
|
|
"TEST WSCHODNI FRONT"
|
|
};
|
|
|
|
public static bool Visible(Context cx)
|
|
{
|
|
DokEwidencji dok = (DokEwidencji)cx[typeof(DokEwidencji)];
|
|
|
|
return dok.Typ is TypDokumentu.ZakupEwidencja or TypDokumentu.SprzedażEwidencja &&
|
|
listaBazSQL.Any(x => x.Trim().ToUpper() == ((Login)cx[typeof(Login)]).Database.Name.Trim().ToUpper());
|
|
}
|
|
|
|
public static bool Enabled(Context cx)
|
|
{
|
|
DokEwidencji dok = (DokEwidencji)cx[typeof(DokEwidencji)];
|
|
|
|
return (dok.Stan == StanEwidencji.Predekretowany && (DokEwidencji)dok.Features["PrzeksiegowanyDokumentKoszty"] 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}");
|
|
}
|
|
}
|
|
} |