Files
BeWoPlaner/BeWo/ViewModel/ServiceDescriptionVM.cs

408 lines
11 KiB
C#

using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using BS.Shared;
using BS.Shared.Core;
using BS.Shared.DataContracts;
using BeWo.Validation;
using BeWo.ViewModel.ListViewModel;
namespace BeWo.ViewModel
{
public class ServiceDescriptionVM : AbstractDCMapperVM<ServiceDescriptionDC>
{
public static string PropertyName_CategoryName = "CategoryName";
public static string PropertyName_IsDeleteable = "IsDeleteable";
public static string PropertyName_Name = "Name";
public static string PropertyName_ServiceCategory = "ServiceCategory";
public static string PropertyName_Position = "Position";
public static string PropertyName_BillableAmount = "BillableAmount";
public static string PropertyName_AccountingInterval = "AccountingInterval";
public static string PropertyName_Unit = "Unit";
public static string PropertyName_ScopeType = "ScopeType";
public static string PropertyName_CostRatePeriods = "CostRatePeriods";
public static string PropertyName_CurrentAmount = "CurrentAmount";
public static string PropertyName_IsDefault = "IsDefault";
public static string PropertyName_DoNotCheckOverlapping = "DoNotCheckOverlapping";
public static string PropertyName_ProzentAbrechenbar = "ProzentAbrechenbar";
public static string PropertyName_ProzentBudget = "ProzentBudget";
public static string PropertyName_ProzentStundenkonto = "ProzentStundenkonto";
private string _CategoryName;
private bool _IsDeleteable = true;
private string _Name;
private int _Position;
private decimal _BillableAmount;
private bool _IsDefault;
private bool _DoNotCheckOverlapping;
private ServiceUnit _Unit;
private AccountingIntervalType? _AccountingInterval;
private ServiceCategoryDC _ServiceCategory;
private ScopeTypeId _ScopeType;
private CostRatePeriodListVM _CostRatePeriods;
private decimal? _ProzentAbrechenbar;
private decimal? _ProzentBudget;
private decimal? _ProzentStundenkonto;
public ServiceDescriptionVM(ServiceDescriptionDC pDataContract)
: base(pDataContract, pDataContract.ServiceDescriptionOid == null)
{
}
public string CategoryName
{
get { return _CategoryName; }
set
{
if (AreDifferent(_CategoryName, value))
{
_CategoryName = value;
StoreDirtyInformation(AreDifferent(DataContract.CategoryName, value), PropertyName_CategoryName);
FirePropertyChanged(PropertyName_CategoryName);
}
}
}
public bool IsDeleteable
{
get { return _IsDeleteable; }
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public string Name
{
get { return _Name; }
set
{
if (AreDifferent(_Name, value))
{
_Name = value;
StoreDirtyInformation(AreDifferent(DataContract.Name, value), PropertyName_Name);
FirePropertyChanged(PropertyName_Name);
}
}
}
[Validation(ValidationRule = ValidationRules.NotNullOrStringEmpty)]
public ServiceCategoryDC ServiceCategory
{
get { return _ServiceCategory; }
set
{
if (AreDifferent(_ServiceCategory, value))
{
_ServiceCategory = value;
CategoryName = value != null ? value.Name : string.Empty;
FirePropertyChanged(PropertyName_ServiceCategory);
}
}
}
public int Position
{
get { return _Position; }
set
{
if (AreDifferent(_Position, value))
{
_Position = value;
StoreDirtyInformation(AreDifferent(DataContract.Position, value), PropertyName_Position);
FirePropertyChanged(PropertyName_Position);
}
}
}
public decimal BillableAmount
{
get { return _BillableAmount; }
set
{
if (AreDifferent(_BillableAmount, value))
{
_BillableAmount = value;
StoreDirtyInformation(AreDifferent(DataContract.BillableAmount, value), PropertyName_BillableAmount);
FirePropertyChanged(PropertyName_BillableAmount);
}
}
}
public AccountingIntervalType? AccountingInterval
{
get { return _AccountingInterval; }
set
{
if (AreDifferent(_AccountingInterval, value))
{
_AccountingInterval = value;
StoreDirtyInformation(AreDifferent(DataContract.AccountingInterval, value), PropertyName_AccountingInterval);
FirePropertyChanged(PropertyName_AccountingInterval);
}
}
}
public ServiceUnit Unit
{
get { return _Unit; }
set
{
if (AreDifferent(_Unit, value))
{
_Unit = value;
StoreDirtyInformation(AreDifferent(DataContract.Unit, value), PropertyName_Unit);
FirePropertyChanged(PropertyName_Unit);
}
}
}
public ScopeTypeId ScopeType
{
get { return _ScopeType; }
set
{
if (AreDifferent(_ScopeType, value))
{
_ScopeType = value;
StoreDirtyInformation(AreDifferent(DataContract.ScopeType, value), PropertyName_ScopeType);
FirePropertyChanged(PropertyName_ScopeType);
}
}
}
public decimal? ProzentAbrechenbar
{
get { return this._ProzentAbrechenbar; }
set
{
if (this.AreDifferent(this._ProzentAbrechenbar, value))
{
this._ProzentAbrechenbar = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.ProzentAbrechnung, value), PropertyName_ProzentAbrechenbar);
this.FirePropertyChanged(PropertyName_ProzentAbrechenbar);
}
}
}
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 CostRatePeriodListVM CostRatePeriods
{
get { return _CostRatePeriods; }
set
{
if (AreDifferent(_CostRatePeriods, value))
{
_CostRatePeriods = value;
if (!_AccountingInterval.HasValue && _CostRatePeriods != null && _CostRatePeriods.VMList.Count > 0)
AccountingInterval = AccountingIntervalType.Hourly;
FirePropertyChanged(PropertyName_CostRatePeriods);
}
}
}
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 bool DoNotCheckOverlapping
{
get { return this._DoNotCheckOverlapping; }
set
{
if (this.AreDifferent(this._DoNotCheckOverlapping, value))
{
this._DoNotCheckOverlapping = value;
this.StoreDirtyInformation(this.AreDifferent(this.DataContract.IsDefault, value), PropertyName_DoNotCheckOverlapping);
this.FirePropertyChanged(PropertyName_DoNotCheckOverlapping);
}
}
}
public CostRatePeriodVM CurrentAmount
{
get { return CostRatePeriods.GetCurrentlyValidRate(CostRatePeriodType.AmountOfMoney); }
}
public override bool IsDirty
{
get
{
if (_CostRatePeriods == null)
{
return false;
}
return base.IsDirty || _CostRatePeriods.IsDirty;
}
}
protected override void InitByDataContract(ServiceDescriptionDC pDataContract)
{
if (!IsNew)
{
_Name = pDataContract.Name;
_CategoryName = pDataContract.CategoryName;
_ServiceCategory = pDataContract.Category;
_IsDeleteable = !pDataContract.IsSystemEntry;
_Position = pDataContract.Position;
_BillableAmount = pDataContract.BillableAmount;
_AccountingInterval = pDataContract.AccountingInterval;
_Unit = pDataContract.Unit;
_ScopeType = pDataContract.ScopeType;
_ProzentAbrechenbar = pDataContract.ProzentAbrechnung;
_ProzentBudget = pDataContract.ProzentBudget;
_ProzentStundenkonto = pDataContract.ProzentStundenkonto;
_IsDefault = pDataContract.IsDefault;
_DoNotCheckOverlapping = pDataContract.DoNotCheckOverlapping;
}
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
});
}
});
_CostRatePeriods = new CostRatePeriodListVM(pDataContract.CostRatePeriods);
_CostRatePeriods.VMList.ListChanged += (s, e) =>
{
if (e.ListChangedType != ListChangedType.ItemChanged)
{
FirePropertyChanged(PropertyName_CostRatePeriods);
}
FirePropertyChanged(PropertyName_CurrentAmount);
};
}
protected override ServiceDescriptionDC MapToDataContract(ServiceDescriptionDC pDataContract, bool doCommit)
{
pDataContract.Name = _Name;
pDataContract.ScopeType = _ScopeType;
pDataContract.IsDefault = _IsDefault;
if (_ServiceCategory != null)
{
pDataContract.CategoryName = _ServiceCategory.Name;
pDataContract.Category = _ServiceCategory;
pDataContract.Position = _Position;
pDataContract.BillableAmount = _BillableAmount;
pDataContract.AccountingInterval = _AccountingInterval;
pDataContract.Unit = _Unit;
pDataContract.DoNotCheckOverlapping = _DoNotCheckOverlapping;
pDataContract.ProzentAbrechnung = _ProzentAbrechenbar;
pDataContract.ProzentBudget = _ProzentBudget;
pDataContract.ProzentStundenkonto = _ProzentStundenkonto;
}
pDataContract.CostRatePeriods = new List<CostRatePeriodDC>();
List<CostRatePeriodDC> crpList = _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;
}
}
}