Files
BeWoPlaner/BeWo/ViewModel/ServiceCategoryVM.cs
Christian f3cc657a00 cb
2023-01-17 00:12:33 +01:00

389 lines
13 KiB
C#

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using BS.Shared;
using BS.Shared.Core;
using BeWo.Validation;
using BS.Shared.DataContracts;
using BeWo.ViewModel.ListViewModel;
namespace BeWo.ViewModel
{
public class ServiceCategoryVM : AbstractDCMapperVM<ServiceCategoryDC>
{
public static string PropertyName_Abbreviation = "Abbreviation";
public static string PropertyName_IsBillable = "IsBillable";
public static string PropertyName_OhneHilfeplan = "OhneHilfeplan";
public static string PropertyName_IsDeleteable = "IsDeleteable";
public static string PropertyName_Name = "Name";
public static string PropertyName_Percentage = "Percentage";
public static string PropertyName_ProzentBudget = "ProzentBudget";
public static string PropertyName_ProzentStundenkonto = "ProzentStundenkonto";
public static string PropertyName_Position = "Position";
public static string PropertyName_BillableAmount = "BillableAmount";
public static string PropertyName_AccountingInterval = "AccountingInterval";
public static string PropertyName_ScopeType = "ScopeType";
public static string PropertyName_CostRatePeriods = "CostRatePeriods";
public static string PropertyName_CurrentAmount = "CurrentAmount";
public static string PropertyName_IsDefault = "IsDefault";
private string _Abbreviation;
private bool _IsBillable;
private AccountingvisibilityType? _OhneHilfeplan;
private bool _IsDeleteable = true;
private string _Name;
private decimal _Percentage;
private decimal? _ProzentBudget;
private decimal? _ProzentStundenkonto;
private int _Position;
private decimal _BillableAmount;
private bool _IsDefault;
private AccountingIntervalType? _AccountingInterval;
private ScopeTypeId _ScopeType;
private CostRatePeriodListVM _CostRatePeriods;
public ServiceCategoryVM(ServiceCategoryDC pDataContract) : base(pDataContract, pDataContract.ServiceCategoryOid == null)
{
}
public string Abbreviation
{
get { return this._Abbreviation; }
set
{
if (this.AreDifferent(this._Abbreviation, value))
{
this._Abbreviation = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Abbreviation, value), PropertyName_Abbreviation);
this.FirePropertyChanged(PropertyName_Abbreviation);
}
}
}
public bool IsBillable
{
get { return this._IsBillable; }
set
{
if (this.AreDifferent(this._IsBillable, value))
{
this._IsBillable = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsBillable, value), PropertyName_IsBillable);
this.FirePropertyChanged(PropertyName_IsBillable);
}
}
}
public AccountingvisibilityType? OhneHilfeplan
{
get { return this._OhneHilfeplan; }
set
{
if (this.AreDifferent(this._OhneHilfeplan, value))
{
this._OhneHilfeplan = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.OhneHilfeplan, value), PropertyName_OhneHilfeplan);
this.FirePropertyChanged(PropertyName_OhneHilfeplan);
}
}
}
public bool IsDeleteable
{
get { return this._IsDeleteable; }
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Name
{
get { return this._Name; }
set
{
if (this.AreDifferent(this._Name, value))
{
this._Name = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Name, value), PropertyName_Name);
this.FirePropertyChanged(PropertyName_Name);
}
}
}
public decimal Percentage
{
get { return this._Percentage; }
set
{
if (this.AreDifferent(this._Percentage, value))
{
this._Percentage = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Percentage, value), PropertyName_Percentage);
this.FirePropertyChanged(PropertyName_Percentage);
}
}
}
public decimal? ProzentBudget
{
get { return this._ProzentBudget; }
set
{
if (this.AreDifferent(this._ProzentBudget, value))
{
this._ProzentBudget = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ProzentBudget, value), PropertyName_ProzentBudget);
this.FirePropertyChanged(PropertyName_ProzentBudget);
}
}
}
public decimal? ProzentStundenkonto
{
get { return this._ProzentStundenkonto; }
set
{
if (this.AreDifferent(this._ProzentStundenkonto, value))
{
this._ProzentStundenkonto = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ProzentStundenkonto, value), PropertyName_ProzentStundenkonto);
this.FirePropertyChanged(PropertyName_ProzentStundenkonto);
}
}
}
public int Position
{
get { return this._Position; }
set
{
if (this.AreDifferent(this._Position, value))
{
this._Position = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.Position, value), PropertyName_Position);
this.FirePropertyChanged(PropertyName_Position);
}
}
}
public decimal BillableAmount
{
get { return this._BillableAmount; }
set
{
if (this.AreDifferent(this._BillableAmount, value))
{
this._BillableAmount = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.BillableAmount, value), PropertyName_BillableAmount);
this.FirePropertyChanged(PropertyName_BillableAmount);
}
}
}
public bool IsDefault
{
get { return this._IsDefault; }
set
{
if (this.AreDifferent(this._IsDefault, value))
{
this._IsDefault = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsDefault, value), PropertyName_IsDefault);
this.FirePropertyChanged(PropertyName_IsDefault);
}
}
}
public AccountingIntervalType? AccountingInterval
{
get { return this._AccountingInterval; }
set
{
if (this.AreDifferent(this._AccountingInterval, value))
{
this._AccountingInterval = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.AccountingInterval, value), PropertyName_AccountingInterval);
this.FirePropertyChanged(PropertyName_AccountingInterval);
}
}
}
public ScopeTypeId ScopeType
{
get { return this._ScopeType; }
set
{
if (this.AreDifferent(this._ScopeType, value))
{
this._ScopeType = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ScopeType, value), PropertyName_ScopeType);
this.FirePropertyChanged(PropertyName_ScopeType);
}
}
}
public CostRatePeriodListVM CostRatePeriods
{
get { return this._CostRatePeriods; }
set
{
if (this.AreDifferent(this._CostRatePeriods, value))
{
this._CostRatePeriods = value;
if (!_AccountingInterval.HasValue && this._CostRatePeriods != null && this._CostRatePeriods.VMList.Count > 0)
AccountingInterval = AccountingIntervalType.Hourly;
IsBillable = true;
this.FirePropertyChanged(PropertyName_CostRatePeriods);
}
}
}
public CostRatePeriodVM CurrentAmount
{
get { return CostRatePeriods.GetCurrentlyValidRate(CostRatePeriodType.AmountOfMoney); }
}
public override bool IsDirty
{
get
{
if (this._CostRatePeriods == null)
{
return false;
}
return base.IsDirty || this._CostRatePeriods.IsDirty;
}
}
protected override void InitByDataContract(ServiceCategoryDC pDataContract)
{
if (!this.IsNew)
{
this._Name = pDataContract.Name;
this._Abbreviation = pDataContract.Abbreviation;
this._Percentage = pDataContract.Percentage;
this._ProzentBudget = pDataContract.ProzentBudget;
this._ProzentStundenkonto = pDataContract.ProzentStundenkonto;
this._IsBillable = pDataContract.IsBillable;
this._OhneHilfeplan = pDataContract.OhneHilfeplan;
this._IsDeleteable = !pDataContract.IsSystemEntry;
this._Position = pDataContract.Position;
this._BillableAmount = pDataContract.BillableAmount;
this._AccountingInterval = pDataContract.AccountingInterval;
this._ScopeType = pDataContract.ScopeType;
this._IsDefault = pDataContract.IsDefault;
}
else
{
this._Percentage = 100m;
}
if (_OhneHilfeplan == null)
{
_OhneHilfeplan = AccountingvisibilityType.Beides;
}
if (pDataContract.CostRatePeriods == null)
{
pDataContract.CostRatePeriods = new List<CostRatePeriodDC>();
}
Utils.GetAllEnumValues<CostRatePeriodType>().ToList().ForEach(
t =>
{
if (t == CostRatePeriodType.AmountOfMoney && !pDataContract.CostRatePeriods.Exists(i => i.CostRateType == t))
{
pDataContract.CostRatePeriods.Add(
new CostRatePeriodDC
{
CostRateType = t
});
}
});
this._CostRatePeriods = new CostRatePeriodListVM(pDataContract.CostRatePeriods);
this._CostRatePeriods.VMList.ListChanged += (s, e) =>
{
if (e.ListChangedType != ListChangedType.ItemChanged)
{
this.FirePropertyChanged(PropertyName_CostRatePeriods);
}
this.FirePropertyChanged(PropertyName_CurrentAmount);
};
}
protected override ServiceCategoryDC MapToDataContract(ServiceCategoryDC pDataContract, bool doCommit)
{
pDataContract.Name = this._Name;
pDataContract.Abbreviation = this._Abbreviation;
pDataContract.IsBillable = this._IsBillable;
pDataContract.OhneHilfeplan = this._OhneHilfeplan;
pDataContract.Percentage = this._Percentage;
pDataContract.ProzentStundenkonto = this._ProzentStundenkonto;
pDataContract.ProzentBudget = this._ProzentBudget;
pDataContract.Position = this._Position;
pDataContract.BillableAmount = this._BillableAmount;
pDataContract.AccountingInterval = this._AccountingInterval;
pDataContract.ScopeType = this._ScopeType;
pDataContract.IsDefault = this._IsDefault;
pDataContract.CostRatePeriods = new List<CostRatePeriodDC>();
List<CostRatePeriodDC> crpList = this._CostRatePeriods.CopyToDCList(doCommit);
foreach (var costRatePeriodDc in crpList)
{
if (costRatePeriodDc.CostRateValue.HasValue && costRatePeriodDc.CostRateValue.Value > 0)
pDataContract.CostRatePeriods.Add(costRatePeriodDc);
}
if (pDataContract.CostRatePeriods.Count == 0)
pDataContract.AccountingInterval = null;
return pDataContract;
}
}
}