Files
BeWoPlaner/BeWo/ViewModel/SupportConceptCostBearerRelVM.cs

765 lines
26 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using BeWo.Core;
using BeWo.Validation;
using BeWo.ViewModel.ListViewModel;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BS.Shared.DataContracts.Compact;
using BS.Shared.Extensions;
namespace BeWo.ViewModel
{
public class SupportConceptCostBearerRelVM : AbstractDCMapperVM<SupportConceptCostBearerRelDC>
{
#region Constants and Fields
public static string PropertyName_ApprovalPeriodList = "ApprovalPeriodList";
public static string PropertyName_ApprovedEndDate = "ApprovedEndDate";
// public static string PropertyName_ApprovedFLS = "ApprovedFLS";
// public static string PropertyName_ApprovedFLSTotal = "ApprovedFLSTotal";
public static string PropertyName_ApprovedStartDate = "ApprovedStartDate";
public static string PropertyName_CostBearer = "CostBearer";
public static string PropertyName_CostBearerContactPerson = "CostBearerContactPerson";
public static string PropertyName_CostBearerString = "CostBearerString";
public static string PropertyName_CustomerReferenceNumber = "CustomerReferenceNumber";
public static string PropertyName_AuswahlBezeichnung = "AuswahlBezeichnung";
public static string PropertyName_KontoHilfeplan = "KontoHilfeplan";
public static string PropertyName_KostenstelleHilfeplan = "KostenstelleHilfeplan";
public static string PropertyName_HourlyRate = "HourlyRate";
public static string PropertyName_MonthlyPayment = "MonthlyPayment";
public static string PropertyName_Notice = "Notice";
public static string PropertyName_RateFactor = "RateFactor";
public static string PropertyName_RequestedEndDate = "RequestedEndDate";
public static string PropertyName_RequestedStartDate = "RequestedStartDate";
private SupportConceptApprovalPeriodListVM _ApprovalPeriodList;
private DateTime? _ApprovedEndDate;
// private decimal? _ApprovedFLS;
// private decimal? _ApprovedFLSTotal;
private DateTime? _ApprovedStartDate;
private CompactOrganisationDC _CostBearer;
private CompactPersonDC _CostBearerContactPerson;
// private decimal _RateFactor = 0m;
private string _CustomerReferenceNumber;
private string _AuswahlBezeichnung;
private string _KontoHilfeplan;
private string _KostenstelleHilfeplan;
private decimal? _MonthlyPayment;
private string _Notice;
private DateTime? _RequestedEndDate;
private DateTime? _RequestedStartDate;
private ObservableSortCollection<BudgetDC> _Budgets;
#endregion
#region Constructors and Destructors
public SupportConceptCostBearerRelVM(SupportConceptCostBearerRelDC pDC)
: base(pDC, pDC.CostBearer2SupportConceptOid == null)
{
//_Budgets = budgets;
}
#endregion
#region Properties
public SupportConceptApprovalPeriodListVM ApprovalPeriodList
{
get
{
return this._ApprovalPeriodList;
}
set
{
if (this.AreDifferent(this._ApprovalPeriodList, value))
{
this._ApprovalPeriodList = value;
// StoreDirtyInformation(AreDifferent(DataContract.ApprovalPeriodList, value), PropertyName_ApprovalPeriodList);
this.FirePropertyChanged(PropertyName_ApprovalPeriodList);
}
}
}
public List<String> SortItems
{
get
{
var list = new List<String>();
list.Add("aufsteigend");
list.Add("absteigend");
return list;
}
}
public int SelectedSortIndex
{
get
{
return BeWoApp.AppSettings.LastBewilligungSortOrder;
}
set
{
BeWoApp.AppSettings.LastBewilligungSortOrder = value;
this.FirePropertyChanged("SelectedSortIndex");
this.FirePropertyChanged("SortedVMList");
}
}
public BindingList<SupportConceptApprovalPeriodVM> SortedVMList
{
get
{
var list = this.ApprovalPeriodList.VMList;
if (list.Count > 1)
{
//Entferne die Items aus der Originalliste und füge sie später wieder hinzu, sonst aktualisiert sich die View nicht:-(
var copyList = new BindingList<SupportConceptApprovalPeriodVM>();
foreach (var item in list)
{
copyList.Add(item);
}
list.Clear();
if (SelectedSortIndex == 0)
{
copyList.Sort((a, b) => a.StartDate.HasValue ? a.StartDate.Value.CompareTo(b.StartDate) : 0);
}
else
{
copyList.Sort((a, b) => b.StartDate.HasValue ? b.StartDate.Value.CompareTo(a.StartDate) : 0);
}
foreach (var item in copyList)
{
list.Add(item);
}
}
return list;
}
}
//public ObservableCollection<SupportConceptApprovalPeriodVM> SortedVMList
//{
// get
// {
// var list = this.ApprovalPeriodList.VMList;
// if (SelectedSortIndex == 0)
// {
// list.Sort((a, b) => a.StartDate.HasValue ? a.StartDate.Value.CompareTo(b.StartDate) : 0);
// }
// else
// {
// list.Sort((a, b) => b.StartDate.HasValue ? b.StartDate.Value.CompareTo(a.StartDate) : 0);
// }
// var sortedlist = new ObservableCollection<SupportConceptApprovalPeriodVM>();
// sortedlist.AddRange(list);
// return sortedlist;
// }
//}
// public decimal RateFactor
// {
// get { return _RateFactor; }
// set
// {
// if (base.AreDifferent(_RateFactor, value))
// {
// _RateFactor = value;
// StoreDirtyInformation(AreDifferent(DataContract.RateFactor, value), PropertyName_RateFactor);
// FirePropertyChanged(PropertyName_RateFactor);
// }
// }
// }
public DateTime? ApprovedEndDate
{
get
{
return this._ApprovedEndDate;
}
set
{
if (this.AreDifferent(this._ApprovedEndDate, value))
{
if (value != null)
{
//if (this.ApprovedStartDate == null)
//{
// this._ApprovedStartDate = value.Value.AddYears(-1);
// this.FirePropertyChanged(PropertyName_ApprovedStartDate);
//}
//if (this.RequestedStartDate == null)
//{
// this._RequestedStartDate = value.Value.AddYears(-1);
// this.FirePropertyChanged(PropertyName_RequestedStartDate);
//}
//if (this.RequestedEndDate == null)
//{
// this._RequestedEndDate = value;
// this.FirePropertyChanged(PropertyName_RequestedEndDate);
//}
}
this._ApprovedEndDate = value;
this.CheckApprovalPeriods();
SetApprovalPeriodDefaultDate();
CheckApprovalPeriodDates();
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ApprovedEndDate, value), PropertyName_ApprovedEndDate);
this.FirePropertyChanged(PropertyName_ApprovedEndDate);
}
}
}
// public decimal? ApprovedFLS
// {
// get { return BeWoWpfUtils.GetDecimalValueWithMaxDecimal(this._ApprovedFLS, -1); }
// set
// {
// if (this.AreDifferent(this._ApprovedFLS, value))
// {
// this._ApprovedFLS = value;
// this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ApprovedFLS, value), PropertyName_ApprovedFLS);
// this.FirePropertyChanged(PropertyName_ApprovedFLS);
// }
// }
// }
// public decimal? ApprovedFLSTotal
// {
// get { return BeWoWpfUtils.GetDecimalValueWithMaxDecimal(this._ApprovedFLSTotal, -1); }
// set
// {
// if (this.AreDifferent(this._ApprovedFLSTotal, value))
// {
// this._ApprovedFLSTotal = value;
// this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ApprovedFLSTotal, value), PropertyName_ApprovedFLSTotal);
// this.FirePropertyChanged(PropertyName_ApprovedFLSTotal);
// }
// }
// }
public DateTime? ApprovedStartDate
{
get
{
return this._ApprovedStartDate;
}
set
{
if (this.AreDifferent(this._ApprovedStartDate, value))
{
if (value != null && value > DateTime.Now.AddYears(-3) && value < DateTime.Now.AddYears(3))
{
//if (this.ApprovedEndDate == null)
//{
// this._ApprovedEndDate = value.Value.AddYears(1).AddDays(-1);
// this.FirePropertyChanged(PropertyName_ApprovedEndDate);
//}
//if (this.RequestedStartDate == null)
//{
// this._RequestedStartDate = value;
// this.FirePropertyChanged(PropertyName_RequestedStartDate);
//}
// if (this.RequestedEndDate == null)
// {
// this._RequestedEndDate = value.Value.AddYears(1).AddDays(-1);
// this.FirePropertyChanged(PropertyName_RequestedEndDate);
// }
}
this._ApprovedStartDate = value;
this.CheckApprovalPeriods();
SetApprovalPeriodDefaultDate();
CheckApprovalPeriodDates();
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ApprovedStartDate, value), PropertyName_ApprovedStartDate);
this.FirePropertyChanged(PropertyName_ApprovedStartDate);
}
}
}
public CompactOrganisationDC CostBearer
{
get
{
return this._CostBearer;
}
set
{
if (this.AreDifferent(this._CostBearer, value))
{
this._CostBearer = value;
var cp = new CostRatePeriodListVM(this._CostBearer.CostRatePeriods).GetCurrentlyValidRate(CostRatePeriodType.MinutesPerServiceUnit);
if (cp != null)
{
foreach (var i in this.ApprovalPeriodList.VMList)
{
i.ServiceUnitName = cp.UnitName;
}
}
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.CostBearer, value), PropertyName_CostBearer);
this.FirePropertyChanged(PropertyName_CostBearer);
this.FirePropertyChanged(PropertyName_CostBearerString);
}
}
}
public CompactPersonDC CostBearerContactPerson
{
get
{
return this._CostBearerContactPerson;
}
set
{
if (this.AreDifferent(this._CostBearerContactPerson, value))
{
this._CostBearerContactPerson = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.CostBearerContactPerson, value), PropertyName_CostBearerContactPerson);
this.FirePropertyChanged(PropertyName_CostBearerContactPerson);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string CostBearerString
{
get
{
return this._CostBearer.ToStringNullCheck();
}
// Validation Workaround
set { }
}
public string CustomerReferenceNumber
{
get
{
return this._CustomerReferenceNumber;
}
set
{
if (this.AreDifferent(this._CustomerReferenceNumber, value))
{
this._CustomerReferenceNumber = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.CustomerReferenceNumber, value), PropertyName_CustomerReferenceNumber);
this.FirePropertyChanged(PropertyName_CustomerReferenceNumber);
}
}
}
public string AuswahlBezeichnung
{
get
{
return this._AuswahlBezeichnung;
}
set
{
if (this.AreDifferent(this._AuswahlBezeichnung, value))
{
this._AuswahlBezeichnung = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AuswahlBezeichnung, value), PropertyName_AuswahlBezeichnung);
this.FirePropertyChanged(PropertyName_AuswahlBezeichnung);
}
}
}
public string KontoHilfeplan
{
get
{
return this._KontoHilfeplan;
}
set
{
if (this.AreDifferent(this._KontoHilfeplan, value))
{
this._KontoHilfeplan = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.KontoHilfeplan, value), PropertyName_KontoHilfeplan);
this.FirePropertyChanged(PropertyName_KontoHilfeplan);
}
}
}
public string KostenstelleHilfeplan
{
get
{
return this._KostenstelleHilfeplan;
}
set
{
if (this.AreDifferent(this._KostenstelleHilfeplan, value))
{
this._KostenstelleHilfeplan = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.KostenstelleHilfeplan, value), PropertyName_KostenstelleHilfeplan);
this.FirePropertyChanged(PropertyName_KostenstelleHilfeplan);
}
}
}
public override bool IsDirty
{
get
{
if (this.ApprovalPeriodList == null)
{
return false;
}
return base.IsDirty || this.ApprovalPeriodList.IsDirty;
}
}
public decimal? MonthlyPayment
{
get
{
return BeWoWpfUtils.GetDecimalValue(this._MonthlyPayment, 2);
}
set
{
if (this.AreDifferent(this._MonthlyPayment, value))
{
this._MonthlyPayment = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.MonthlyPayment, value), PropertyName_MonthlyPayment);
this.FirePropertyChanged(PropertyName_MonthlyPayment);
}
}
}
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), PropertyName_Notice);
this.FirePropertyChanged(PropertyName_Notice);
}
}
}
public DateTime? RequestedEndDate
{
get
{
return this._RequestedEndDate;
}
set
{
if (this.AreDifferent(this._RequestedEndDate, value))
{
if (value != null)
{
if (this.RequestedStartDate == null)
{
this._RequestedStartDate = value.Value.AddYears(-1);
this.FirePropertyChanged(PropertyName_RequestedStartDate);
}
}
this._RequestedEndDate = value;
SetApprovalPeriodDefaultDate();
CheckApprovalPeriodDates();
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.RequestedEndDate, value), PropertyName_RequestedEndDate);
this.FirePropertyChanged(PropertyName_RequestedEndDate);
}
}
}
public DateTime? RequestedStartDate
{
get
{
return this._RequestedStartDate;
}
set
{
if (this.AreDifferent(this._RequestedStartDate, value))
{
if (value != null)
{
if (this.RequestedEndDate == null)
{
if (value > DateTime.Now.AddYears(-3) && value < DateTime.Now.AddYears(3))
{
this._RequestedEndDate = value.Value.AddYears(1).AddDays(-1);
this.FirePropertyChanged(PropertyName_RequestedEndDate);
}
}
}
this._RequestedStartDate = value;
SetApprovalPeriodDefaultDate();
CheckApprovalPeriodDates();
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.RequestedStartDate, value), PropertyName_RequestedStartDate);
this.FirePropertyChanged(PropertyName_RequestedStartDate);
}
}
}
public DateTime? EndDate
{
get
{
DateTime? end = this.ApprovedEndDate;
if (end == null)
{
end = this.RequestedEndDate;
}
return end;
}
}
public DateTime? StartDate
{
get
{
DateTime? start = this.ApprovedStartDate;
if (start == null)
{
start = this.RequestedStartDate;
}
return start;
}
}
public ObservableSortCollection<BudgetDC> Budgets
{
get { return _Budgets; }
set
{
_Budgets = value;
foreach (var item in ApprovalPeriodList.VMList)
{
item.Budgets = value;
}
}
}
#endregion
#region Methods
private void SetApprovalPeriodDefaultDate()
{
if (ApprovalPeriodList != null && ApprovalPeriodList.VMList.Count == 1)
{
foreach (var item in ApprovalPeriodList.VMList)
{
if (!item.StartDate.HasValue)
{
item.StartDate = this.StartDate;
}
if (!item.EndDate.HasValue)
{
item.EndDate = this.EndDate;
}
}
}
}
private void CheckApprovalPeriodDates()
{
if (ApprovalPeriodList != null)
{
if (ApprovalPeriodList.VMList.Count == 1)
{
foreach (var item in ApprovalPeriodList.VMList)
{
if (this.ApprovedStartDate.HasValue)
{
item.StartDate = this.ApprovedStartDate;
}
else if (this.RequestedStartDate.HasValue)
{
item.StartDate = this.RequestedStartDate;
}
if (this.ApprovedEndDate.HasValue)
{
item.EndDate = this.ApprovedEndDate;
}
else if (this.RequestedEndDate.HasValue)
{
item.EndDate = this.RequestedEndDate;
}
}
}
else
{
if (!BeWoApp.AppSettings.DontUpdateApprovalPeriodDates)
{
foreach (var ap in ApprovalPeriodList.VMList)
{
if (!ap.StartDate.HasValue || ap.StartDate < this.StartDate)
{
ap.StartDate = this.StartDate;
}
if (!ap.EndDate.HasValue || ap.EndDate > this.EndDate)
{
ap.EndDate = this.EndDate;
}
}
}
}
}
}
protected override void InitByDataContract(SupportConceptCostBearerRelDC pDataContract)
{
this.ApprovalPeriodList = new SupportConceptApprovalPeriodListVM(pDataContract.ApprovalPeriodList, Budgets);
//if (!this.IsNew)
//{
this._ApprovedEndDate = pDataContract.ApprovedEndDate;
// this._ApprovedFLS = pDataContract.ApprovedFLS;
this._MonthlyPayment = pDataContract.MonthlyPayment;
// this._ApprovedFLSTotal = pDataContract.ApprovedFLSTotal;
this._ApprovedStartDate = pDataContract.ApprovedStartDate;
this.CostBearer = pDataContract.CostBearer;
this._CustomerReferenceNumber = pDataContract.CustomerReferenceNumber;
this._AuswahlBezeichnung = pDataContract.AuswahlBezeichnung;
this.KontoHilfeplan = pDataContract.KontoHilfeplan;
this.KostenstelleHilfeplan = pDataContract.KostenstelleHilfeplan;
// _HourlyRate = pDataContract.HourlyRate;
this._Notice = pDataContract.Notice;
this._RequestedEndDate = pDataContract.RequestedEndDate;
this._RequestedStartDate = pDataContract.RequestedStartDate;
this._CostBearerContactPerson = pDataContract.CostBearerContactPerson;
// _RateFactor = pDataContract.RateFactor;
//}
}
protected override SupportConceptCostBearerRelDC MapToDataContract(SupportConceptCostBearerRelDC pDataContract, bool doCommit)
{
pDataContract.ApprovedEndDate = this._ApprovedEndDate;
// pDataContract.ApprovedFLS = this._ApprovedFLS;
// pDataContract.ApprovedFLSTotal = this._ApprovedFLSTotal;
pDataContract.MonthlyPayment = this._MonthlyPayment;
pDataContract.ApprovedStartDate = this._ApprovedStartDate;
pDataContract.CostBearer = this._CostBearer;
pDataContract.CustomerReferenceNumber = this._CustomerReferenceNumber;
pDataContract.AuswahlBezeichnung = this._AuswahlBezeichnung;
pDataContract.CostBearerContactPerson = this._CostBearerContactPerson;
// DataContract.HourlyRate = _HourlyRate;
pDataContract.Notice = this._Notice;
pDataContract.KontoHilfeplan = this.KontoHilfeplan;
pDataContract.KostenstelleHilfeplan = this.KostenstelleHilfeplan;
// DataContract.RateFactor = _RateFactor;
pDataContract.RequestedStartDate = this._RequestedStartDate;
pDataContract.RequestedEndDate = this._RequestedEndDate;
pDataContract.ApprovalPeriodList = this.ApprovalPeriodList.CopyToDCList(doCommit);
return pDataContract;
}
private void CheckApprovalPeriods()
{
if (this.ApprovalPeriodList.VMList.Count == 0 && this._ApprovedEndDate.HasValue && this._ApprovedStartDate.HasValue)
{
this.ApprovalPeriodList.VMList.Add(new SupportConceptApprovalPeriodVM(
new SupportConceptApprovalPeriodDC
{
StartDate = this._ApprovedStartDate,
EndDate = this._ApprovedEndDate,
}));
}
}
#endregion
}
}