Files
BeWoPlaner/BeWo/ViewModel/GkvAbrechnungVM.cs

441 lines
12 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Windows;
using System.Windows.Threading;
using BeWo.Core;
using BeWo.ServiceProxy;
using BeWo.Validation;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.GkvAbrechnung;
using BS.Shared.Extensions;
using BS.Shared.Interface;
using BS.Shared.ReportRequests;
using DevExpress.Mvvm;
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> _Protokolle;
public GkvAbrechnungVM(GkvAbrechnungDC pDC) : base(pDC, !pDC.Oid.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 (AreDifferent(_ErstelltAm, value))
{
_ErstelltAm = value;
StoreDirtyInformation(AreDifferent(DataContract.ErstelltAm, value), nameof(ErstelltAm));
FirePropertyChanged(nameof(ErstelltAm));
FirePropertyChanged(nameof(ErstelltAmDate));
}
}
}
public DateTime ErstelltAmDate => ErstelltAm.Date;
public long? GkvAbrechnungOid
{
get { return this._GkvAbrechnungOid; }
set
{
if (this.AreDifferent(this._GkvAbrechnungOid, value))
{
this._GkvAbrechnungOid = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Oid, 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.Version, 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));
FirePropertyChanged(nameof(IsBezahltEditEnabled));
}
}
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> Protokolle
{
get { return _Protokolle; }
set
{
_Protokolle = value;
FirePropertyChanged(nameof(Protokolle));
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 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?.Date;
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 IEnumerable<IGkvTransferProtokoll> TransferProtokolle => Protokolle;
public IGkvTransferProtokoll LastTransferProtokoll => Protokolle?.LastOrDefault();
public bool IsFormularEnabled => LastTransferProtokoll is object ;
public bool IsUrbelegeEditEnabled => LastTransferProtokoll is object;
public bool IsBezahltEditEnabled => UrbelegeGesendet;
public GkvAbrechnungReportRequest ReportRequest
=> new GkvAbrechnungReportRequest(DataContract.Oid.Value, false);
public string ReportLink
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest.GetUrlPathString();
public GkvAbrechnungReportRequest ReportRequest2
=> new GkvAbrechnungReportRequest(DataContract.Oid.Value, true);
public string ReportLink2
=> BeWoApp.SiteOfOrigin + "/ReportView.aspx" + ReportRequest2.GetUrlPathString();
public void FirePropertyIsReady2CreateChanged()
=> FirePropertyChanged(nameof(IsReady2Create));
public bool IsReady2Create
=> InvoiceBases?.Where(x => x.IsChecked).Any() ?? false;
public override void UpdateByDataContract(GkvAbrechnungDC pDataContract)
{
GkvAbrechnungVersion = pDataContract.Version;
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.Oid;
_GkvAbrechnungVersion = pDataContract.Version;
_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)
{
_Protokolle = new List<GkvTransferProtokollDC>(pDataContract.Protokolle);
}
_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.Oid = _GkvAbrechnungOid;
pDataContract.Version = _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.Protokolle = _Protokolle?.ToList();
return pDataContract;
}
}
}