470 lines
13 KiB
C#
470 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 BS.Shared.ReportRequests;
|
|
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 bool IsFormularEnabled => LastTransferProtokoll is object;
|
|
|
|
public GkvAbrechnungReportRequest ReportRequest
|
|
=> new GkvAbrechnungReportRequest(DataContract.GkvAbrechnungOid.Value);
|
|
public string ReportLink
|
|
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest.GetUrlPathString();
|
|
|
|
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");
|
|
}
|
|
}
|
|
}
|
|
} |