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 { #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 _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 SortItems { get { var list = new List(); 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 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(); 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 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(); // 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 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 } }