Files
BeWoPlaner/BeWo/ViewModel/GkvAbrechnungVM.cs
Rene Evertz 99df9b6960 Model/Changes_2024_10_31 ALLE GKV TABELLEN.txt aktualisiert
-> Bei neu Ausliefern, vorher alte Tabellen Droppen

-> App8 zu App5 Kommunikation

und mehr!
2024-10-31 15:38:24 +01:00

462 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Threading;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions;
using BS.Shared.Interface;
using DevExpress.Xpf.Core;
namespace BeWo.ViewModel
{
public class GkvAbrechnungVM : AbstractDCMapperVM<GkvAbrechnungDC>, IGkvAbrechnung
{
public static string PropertyName_AbrechnungsZeitraumStart = "AbrechnungsZeitraumStart";
public static string PropertyName_AbrechnungsZeitraumEnde = "AbrechnungsZeitraumEnde";
public static string PropertyName_ErstelltAm = "ErstelltAm";
private long? _GkvAbrechnungOid;
private long? _GkvAbrechnungVersion;
private string _Notice;
private DateTime? _AbrechnungsZeitraumStart;
private DateTime? _AbrechnungsZeitraumEnde;
private DateTime _ErstelltAm;
private decimal _Betrag;
private bool _Bezahlt;
private bool _UrbelegeGesendet;
private GkvVerfahrensstufe _Verfahrensstufe;
internal bool _IsChecked;
private bool _IsReady2Send;
private string _SendTooltip;
private List<InvoiceBaseVM> _InvoiceBases2;
private BindingList<InvoiceBaseVM> _InvoiceBases;
private OrganisationDC _Organisation;
private List<GkvTransferProtokollDC> _TransferProtokolle;
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.GkvAbrechnungOid.HasValue)
{
_InvoiceBases = new BindingList<InvoiceBaseVM>();
}
#region
public string AbrechnungsZeitraum => $"{AbrechnungsZeitraumStart.Value.ToShortDateString()} - {AbrechnungsZeitraumEnde.Value.ToShortDateString()}";
public DateTime? AbrechnungsZeitraumStart
{
get { return this._AbrechnungsZeitraumStart; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumStart, value))
{
this._AbrechnungsZeitraumStart = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumStart, value), PropertyName_AbrechnungsZeitraumStart);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumStart);
// RE893748923
// var day = value.Value.Day;
// AbrechnungsZeitraumEnde = value.Value.AddDays(1 - day).AddMonths(1).AddDays(-1);
}
}
}
public DateTime? AbrechnungsZeitraumEnde
{
get { return this._AbrechnungsZeitraumEnde; }
set
{
if (this.AreDifferent(this._AbrechnungsZeitraumEnde, value))
{
this._AbrechnungsZeitraumEnde = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AbrechnungsZeitraumEnde, value), PropertyName_AbrechnungsZeitraumEnde);
this.FirePropertyChanged(PropertyName_AbrechnungsZeitraumEnde);
}
}
}
public DateTime ErstelltAm
{
get { return this._ErstelltAm; }
set
{
if (this.AreDifferent(this._ErstelltAm, value))
{
this._ErstelltAm = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ErstelltAm, value), nameof(ErstelltAm));
this.FirePropertyChanged(nameof(ErstelltAm));
}
}
}
public long? GkvAbrechnungOid
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungOid, value))
{
this._GkvAbrechnungOid = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungOid, value), nameof(GkvAbrechnungOid));
this.FirePropertyChanged(nameof(GkvAbrechnungOid));
}
}
}
public long? GkvAbrechnungVersion
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungVersion, value))
{
this._GkvAbrechnungVersion = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.GkvAbrechnungVersion, value), nameof(GkvAbrechnungVersion));
this.FirePropertyChanged(nameof(GkvAbrechnungVersion));
}
}
}
public string Notice
{
get { return this._Notice; }
set
{
if (this.AreDifferent(this._Notice, value))
{
this._Notice = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Notice, value), nameof(Notice));
this.FirePropertyChanged(nameof(Notice));
}
}
}
public decimal Betrag
{
get { return this._Betrag; }
set
{
if (this.AreDifferent(this._Betrag, value))
{
this._Betrag = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Betrag, value), nameof(Betrag));
this.FirePropertyChanged(nameof(Betrag));
}
}
}
public bool Bezahlt
{
get { return _Bezahlt; }
set
{
if (AreDifferent(this._Bezahlt, value))
{
_Bezahlt = value;
StoreDirtyInformation(AreDifferent(DataContract.Bezahlt, value), nameof(Bezahlt));
FirePropertyChanged(nameof(Bezahlt));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
}
}
}
public bool UrbelegeGesendet
{
get { return _UrbelegeGesendet; }
set
{
if (!AreDifferent(_UrbelegeGesendet, value))
return;
_UrbelegeGesendet = value;
StoreDirtyInformation(AreDifferent(DataContract.UrbelegeGesendet, value), nameof(UrbelegeGesendet));
FirePropertyChanged(nameof(UrbelegeGesendet));
FirePropertyChanged(nameof(GkvState));
}
}
public GkvState GkvState
{
get { return this.GetState(); }
}
public bool IsChecked
{
get { return _IsChecked; }
set
{
if (AreDifferent(_IsChecked, value))
{
_IsChecked = value;
FirePropertyChanged(nameof(IsChecked));
}
}
}
public List<InvoiceBaseVM> InvoiceBases2
{
get { return _InvoiceBases2; }
set { _InvoiceBases2 = value; }
}
public BindingList<InvoiceBaseVM> InvoiceBases
{
get { return _InvoiceBases; }
set { _InvoiceBases = value; }
}
public List<GkvTransferProtokollDC> TransferProtokolle
{
get { return _TransferProtokolle; }
set
{
_TransferProtokolle = value;
FirePropertyChanged(nameof(TransferProtokolle));
FirePropertyChanged(nameof(GkvState));
FirePropertyChanged(nameof(Fehlermeldung));
FirePropertyChanged(nameof(LastTransferDateTime));
}
}
public OrganisationDC Organisation
{
get { return this._Organisation; }
set
{
if (this.AreDifferent(this._Organisation, value))
{
this._Organisation = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Organisation, value), nameof(Organisation));
this.FirePropertyChanged(nameof(Organisation));
}
}
}
public GkvVerfahrensstufe Verfahrensstufe
{
get { return this._Verfahrensstufe; }
set
{
if (this.AreDifferent(this._Verfahrensstufe, value))
{
this._Verfahrensstufe = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Verfahrensstufe, value), nameof(Verfahrensstufe));
this.FirePropertyChanged(nameof(Verfahrensstufe));
}
}
}
public int VerfahrensstufeInt
{
get { return (int)Verfahrensstufe; }
set
{
if (!AreDifferent(this.VerfahrensstufeInt, value))
return;
Verfahrensstufe = (GkvVerfahrensstufe)value;
//FirePropertyChanged(nameof(VerfahrensstufeInt));
}
}
#endregion
public IGkvTransferProtokoll LastTransferProtokoll => TransferProtokolle?.LastOrDefault();
public string RecipientString
{
get
{
if (_InvoiceBases2 != null && _InvoiceBases2.Any())
{
return _InvoiceBases2.First().RecipientString;
}
return string.Empty;
}
}
public string Fehlermeldung
{
get
{
if (!(LastTransferProtokoll is GkvTransferProtokollDC last))
return null;
if (string.IsNullOrWhiteSpace(last.Fehlernachricht))
return null;
if (string.IsNullOrWhiteSpace(last.Fehlertitel))
return last.Fehlernachricht;
return $"{last.Fehlertitel}: {last.Fehlernachricht}";
}
}
public DateTime? LastTransferDateTime
{
get
{
if (LastTransferProtokoll is GkvTransferProtokollDC last)
return last.ErstelltAm;
return null;
}
}
public bool IsReady2Send
{
get { return _IsReady2Send; }
set
{
if (!AreDifferent(IsReady2Send, value))
return;
_IsReady2Send = value;
FirePropertyChanged(nameof(IsReady2Send));
}
}
public string SendTooltip
{
get { return _SendTooltip; }
set
{
if (!AreDifferent(SendTooltip, value))
return;
_SendTooltip = value;
FirePropertyChanged(nameof(SendTooltip));
}
}
public void FirePropertyIsReady2CreateChanged()
=> FirePropertyChanged(nameof(IsReady2Create));
public bool IsReady2Create
=> InvoiceBases?.Where(x => x.IsChecked).Any() ?? false;
public void UpdateByDataContract(GkvAbrechnungDC pDataContract)
{
GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
Notice = pDataContract.Notice;
Betrag = pDataContract.Betrag;
Bezahlt = pDataContract.Bezahlt;
if (pDataContract.InvoiceBases != null)
{
InvoiceBases2 = pDataContract.InvoiceBases.Select(x => new InvoiceBaseVM(x, true)).ToList();
InvoiceBases = new BindingList<InvoiceBaseVM>(InvoiceBases2);
}
}
protected override void InitByDataContract(GkvAbrechnungDC pDataContract)
{
_AbrechnungsZeitraumStart = pDataContract.AbrechnungsZeitraumStart;
_AbrechnungsZeitraumEnde = pDataContract.AbrechnungsZeitraumEnde;
_ErstelltAm = pDataContract.ErstelltAm;
_GkvAbrechnungOid = pDataContract.GkvAbrechnungOid;
_GkvAbrechnungVersion = pDataContract.GkvAbrechnungVersion;
_Notice = pDataContract.Notice;
_Betrag = pDataContract.Betrag;
_Bezahlt = pDataContract.Bezahlt;
_UrbelegeGesendet = pDataContract.UrbelegeGesendet;
_Verfahrensstufe = pDataContract.Verfahrensstufe;
if (pDataContract.InvoiceBases != null)
{
_InvoiceBases2 = pDataContract.InvoiceBases.Select(x => new InvoiceBaseVM(x, true)).ToList();
_InvoiceBases = new BindingList<InvoiceBaseVM>(_InvoiceBases2);
}
if (pDataContract.TransferProtokolle != null)
{
_TransferProtokolle = new List<GkvTransferProtokollDC>(pDataContract.TransferProtokolle);
}
_Organisation = pDataContract.Organisation;
_IsReady2Send = pDataContract.IsReady2Send;
_SendTooltip = pDataContract.SendTooltip;
}
protected override GkvAbrechnungDC MapToDataContract(GkvAbrechnungDC pDataContract, bool doCommit)
{
pDataContract.AbrechnungsZeitraumStart = _AbrechnungsZeitraumStart;
pDataContract.AbrechnungsZeitraumEnde = _AbrechnungsZeitraumEnde;
pDataContract.ErstelltAm = _ErstelltAm;
pDataContract.GkvAbrechnungOid = _GkvAbrechnungOid;
pDataContract.GkvAbrechnungVersion = _GkvAbrechnungVersion;
pDataContract.Notice = _Notice;
pDataContract.Betrag = _Betrag;
pDataContract.Bezahlt = _Bezahlt;
pDataContract.UrbelegeGesendet = _UrbelegeGesendet;
pDataContract.Verfahrensstufe = _Verfahrensstufe;
if (_InvoiceBases != null && _InvoiceBases.Any())
pDataContract.InvoiceBases = _InvoiceBases.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
else if (_InvoiceBases2 != null && _InvoiceBases2.Any())
pDataContract.InvoiceBases = _InvoiceBases2.Where(x => x.IsChecked).Select(vm => vm.CommitToDataContract()).ToList();
pDataContract.Organisation = _Organisation;
pDataContract.TransferProtokolle = _TransferProtokolle?.ToList();
return pDataContract;
}
public void SendGkvAbrechnung()
{
var req = new GkvAbrechnungSendRequestDC();
req.GkvAbrechnungOid = GkvAbrechnungOid.Value;
ServiceFacade.DoAccountingServiceAsync(s => s.SendNewGkvAbrechnung(req),
cb => Application.Current.Dispatch(() => Update(cb)), true);
}
public void Update(GkvAbrechnungSendResponseDC cb)
{
var dc = cb.GkvAbrechnungDC;
if (dc is null)
{
MessageBox.Show(Application.Current.MainWindow, "Unerwarteter Übertragungsfehler");
return;
}
GkvAbrechnungVersion = dc.GkvAbrechnungVersion;
TransferProtokolle = dc.TransferProtokolle.ToList();
IsReady2Send = dc.IsReady2Send;
SendTooltip = dc.SendTooltip;
var protokoll = cb.TransferProtokoll;
if (protokoll.ResultType == GkvTransferResultType.FailSoft)
{
MessageBox.Show(Application.Current.MainWindow, protokoll.Fehlernachricht, protokoll.Fehlertitel);
}
else if (protokoll.ResultType == GkvTransferResultType.FailFatal)
{
BeWoApp.ShowError(protokoll.Fehlertitel + ": " + protokoll.Fehlernachricht, null, false, false);
}
else
{
MessageBox.Show(Application.Current.MainWindow, "Ihre Sendung wurde korrekt übertragen");
}
}
}
}