204 lines
7.6 KiB
C#
204 lines
7.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
|
|
using BeWo.Validation;
|
|
using BeWo.ViewModel.ListViewModel;
|
|
|
|
using BS.Shared;
|
|
using BS.Shared.Core;
|
|
using BS.Shared.DataContracts;
|
|
using BS.Shared.Extensions;
|
|
using DevExpress.Xpf.Editors.Helpers;
|
|
|
|
namespace BeWo.ViewModel
|
|
{
|
|
public class BargeldkassenVM : AbstractDCMapperVM<BargeldkassenDC>
|
|
{
|
|
public static string PropertyName_Kassenname = "Kassenname";
|
|
public static string PropertyName_ObjectOid = "ObjectOid";
|
|
public static string PropertyName_ObjectTid = "ObjectTid";
|
|
public static string PropertyName_Bargeldtransaktionen = "Bargeldtransaktionen";
|
|
public static string PropertyName_Auszahlungsintervall = "Auszahlungsintervall";
|
|
public static string PropertyName_Kassenbestand = "Kassenbestand";
|
|
|
|
private string _Kassenname;
|
|
private long? _ObjectOid;
|
|
private TableID _ObjectTid;
|
|
private BargeldtransaktionsListVM _Bargeldtransaktionen;
|
|
private EnumValue<Auszahlungsintervall> _Auszahlungsintervall;
|
|
private decimal? _Anfangsbestand;
|
|
private DateTime? _Stichtag;
|
|
|
|
public BargeldkassenVM(BargeldkassenDC pDC) : base(pDC, pDC.BargeldkassenOid == null) { }
|
|
|
|
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
|
|
public string Kassenname
|
|
{
|
|
get { return _Kassenname; }
|
|
|
|
set
|
|
{
|
|
if (AreDifferent(_Kassenname, value))
|
|
{
|
|
_Kassenname = value;
|
|
StoreDirtyInformation(AreDifferent(DataContract.Kassenname, value), PropertyName_Kassenname);
|
|
FirePropertyChanged(PropertyName_Kassenname);
|
|
}
|
|
}
|
|
}
|
|
|
|
public long? ObjectOid
|
|
{
|
|
get { return _ObjectOid; }
|
|
|
|
set
|
|
{
|
|
if (AreDifferent(_ObjectOid, value))
|
|
{
|
|
_ObjectOid = value;
|
|
StoreDirtyInformation(AreDifferent(DataContract.ObjectOid, value), PropertyName_ObjectOid);
|
|
FirePropertyChanged(PropertyName_ObjectOid);
|
|
}
|
|
}
|
|
}
|
|
|
|
public TableID ObjectTid
|
|
{
|
|
get { return _ObjectTid; }
|
|
|
|
set
|
|
{
|
|
if (AreDifferent(_ObjectTid, value))
|
|
{
|
|
_ObjectTid = value;
|
|
StoreDirtyInformation(AreDifferent(DataContract.ObjectTid, value), PropertyName_ObjectTid);
|
|
FirePropertyChanged(PropertyName_ObjectTid);
|
|
}
|
|
}
|
|
}
|
|
|
|
public decimal? Anfangsbestand
|
|
{
|
|
get { return _Anfangsbestand; }
|
|
|
|
set
|
|
{
|
|
if (AreDifferent(_Anfangsbestand, value))
|
|
{
|
|
_Anfangsbestand = value;
|
|
StoreDirtyInformation(AreDifferent(DataContract.ObjectTid, value), nameof(Anfangsbestand));
|
|
FirePropertyChanged(nameof(Anfangsbestand));
|
|
}
|
|
}
|
|
}
|
|
|
|
public BargeldtransaktionsListVM Bargeldtransaktionen
|
|
{
|
|
get { return _Bargeldtransaktionen; }
|
|
|
|
set
|
|
{
|
|
_Bargeldtransaktionen = value;
|
|
|
|
FirePropertyChanged(PropertyName_Bargeldtransaktionen);
|
|
}
|
|
}
|
|
|
|
public DateTime? Stichtag
|
|
{
|
|
get { return _Stichtag; }
|
|
|
|
set
|
|
{
|
|
_Stichtag = value;
|
|
|
|
FirePropertyChanged(PropertyName_Kassenbestand);
|
|
}
|
|
}
|
|
|
|
public decimal Kassenbestand
|
|
{
|
|
get
|
|
{
|
|
//var kassenbestand = Bargeldtransaktionen.VMList.OrderByDescending(o => o.Zahlungreturn kassenbestand != null ? kassenbestand.Transaktionskassenbestand.Value : 0m;sdatum).ThenByDescending(t => t.DataContract.BargeldtransaktionOid).FirstOrDefault();
|
|
//return kassenbestand != null ? kassenbestand.Transaktionskassenbestand.Value : 0m;
|
|
var ein =
|
|
Bargeldtransaktionen.VMList.Where(t => t.Zahlungstyp.Enum == Zahlungstyp.Einzahlung && (!Stichtag.HasValue || t.Zahlungsdatum <= Stichtag.Value)).Sum(t => t.Betrag) ??
|
|
0m;
|
|
var aus =
|
|
Bargeldtransaktionen.VMList.Where(t => t.Zahlungstyp.Enum == Zahlungstyp.Auszahlung && (!Stichtag.HasValue || t.Zahlungsdatum <= Stichtag.Value)).Sum(t => t.Betrag) ??
|
|
0m;
|
|
|
|
return (Anfangsbestand ?? 0m) + ein - aus;
|
|
}
|
|
}
|
|
|
|
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
|
|
public EnumValue<Auszahlungsintervall> Auszahlungsintervall
|
|
{
|
|
get { return _Auszahlungsintervall; }
|
|
set
|
|
{
|
|
if (AreDifferent(_Auszahlungsintervall, value))
|
|
{
|
|
_Auszahlungsintervall = value;
|
|
StoreDirtyInformation(AreDifferent(DataContract.Auszahlungsintervall, value), PropertyName_Auszahlungsintervall);
|
|
FirePropertyChanged(PropertyName_Auszahlungsintervall);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void RecalculateTransaktionsbestaende()
|
|
{
|
|
var liste = Bargeldtransaktionen.VMList.OrderBy(o => o.Zahlungsdatum).ThenBy(t => t.DataContract.BargeldtransaktionOid);
|
|
|
|
liste.DoForEach(f => f.Transaktionskassenbestand = 0);
|
|
|
|
var vorherige = liste.FirstOrDefault();
|
|
|
|
if (vorherige != null)
|
|
{
|
|
vorherige.Transaktionskassenbestand = Anfangsbestand ?? 0;
|
|
|
|
foreach (var transaktion in liste)
|
|
{
|
|
transaktion.Transaktionskassenbestand = vorherige.Transaktionskassenbestand + transaktion.Betrag*(transaktion.Zahlungstyp.Enum == Zahlungstyp.Auszahlung ? -1 : 1);
|
|
vorherige = transaktion;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override void InitByDataContract(BargeldkassenDC pDataContract)
|
|
{
|
|
if (!IsNew)
|
|
{
|
|
_Kassenname = pDataContract.Kassenname;
|
|
_ObjectOid = pDataContract.ObjectOid;
|
|
_ObjectTid = pDataContract.ObjectTid;
|
|
_Auszahlungsintervall = new EnumValue<Auszahlungsintervall>(pDataContract.Auszahlungsintervall, EnumTranslations.AllTranslations[pDataContract.Auszahlungsintervall]);
|
|
_Anfangsbestand = pDataContract.Anfangsbestand ?? 0;
|
|
}
|
|
|
|
Bargeldtransaktionen = VMFactory.CreateBargeldtransaktionsListVM(pDataContract.Bargeldtransaktionen ?? (pDataContract.Bargeldtransaktionen = new List<BargeldtransaktionDC>()));
|
|
}
|
|
|
|
protected override BargeldkassenDC MapToDataContract(BargeldkassenDC pDataContract, bool doCommit)
|
|
{
|
|
pDataContract.Kassenname = _Kassenname;
|
|
pDataContract.ObjectOid = _ObjectOid;
|
|
pDataContract.ObjectTid = _ObjectTid;
|
|
pDataContract.Auszahlungsintervall = _Auszahlungsintervall.Enum;
|
|
pDataContract.Anfangsbestand = _Anfangsbestand;
|
|
|
|
pDataContract.Bargeldtransaktionen = _Bargeldtransaktionen.CopyToDCList(doCommit);
|
|
|
|
return pDataContract;
|
|
}
|
|
|
|
public override string ToString()
|
|
{
|
|
return Kassenname;
|
|
}
|
|
}
|
|
} |