yavsc/BookAStar/BookAStar/ViewModels/BillingLineViewModel.cs

173 lines
4.7 KiB
C#
Raw Normal View History

2016-09-29 04:54:14 +02:00
using BookAStar.Interfaces;
using BookAStar.Model.Workflow;
using System;
using System.Globalization;
2016-10-03 18:34:14 +02:00
using System.Windows.Input;
using Xamarin.Forms;
2016-09-29 04:54:14 +02:00
using XLabs.Forms.Mvvm;
namespace BookAStar.ViewModels
{
2016-10-02 19:39:22 +02:00
public class BillingLineViewModel : ViewModel, IBillingLine
2016-09-29 04:54:14 +02:00
{
2016-10-03 18:34:14 +02:00
BillingLine data;
public BillingLineViewModel( BillingLine data)
2016-09-29 04:54:14 +02:00
{
2016-10-03 18:34:14 +02:00
this.data = (data == null) ? new BillingLine() : data;
// sets durationValue & unit
Duration = data.Duration;
2016-09-29 04:54:14 +02:00
}
protected int count;
public int Count
{
get
{
return data.Count;
2016-09-29 04:54:14 +02:00
}
set
{
SetProperty<int>(ref count, value, "Count");
data.Count = count;
2016-09-29 04:54:14 +02:00
}
}
protected string description;
public string Description
{
get
{
return data.Description;
2016-09-29 04:54:14 +02:00
}
set
{
SetProperty<string>(ref description, value, "Description");
data.Description = value;
2016-09-29 04:54:14 +02:00
}
}
2016-10-07 18:14:28 +02:00
public decimal UnitaryCost
{
get
{
return data.UnitaryCost;
}
set
{
SetProperty<decimal>(ref unitaryCost, value, "UnitaryCost");
data.UnitaryCost = value;
UnitaryCostText = value.ToString(unitCostFormat, CultureInfo.InvariantCulture);
}
}
protected int durationValue;
public int DurationValue
2016-09-29 04:54:14 +02:00
{
get
{
return durationValue;
}
set
{
SetProperty<int>(ref durationValue, value, "DurationValue");
data.Duration = this.Duration;
2016-09-29 04:54:14 +02:00
}
}
2016-09-29 04:54:14 +02:00
public enum DurationUnits:int
{
Jours=0,
Heures=1,
Minutes=2
}
private DurationUnits durationUnit;
public DurationUnits DurationUnit
{
get {
return durationUnit;
}
2016-09-29 04:54:14 +02:00
set
{
SetProperty<DurationUnits>(ref durationUnit, value, "DurationUnit");
data.Duration = this.Duration;
2016-09-29 04:54:14 +02:00
}
}
protected decimal unitaryCost;
public static readonly string unitCostFormat = "0,.00";
2016-10-07 15:24:00 +02:00
string unitaryCostText;
public string UnitaryCostText
2016-09-29 04:54:14 +02:00
{
get
{
2016-10-07 15:24:00 +02:00
return unitaryCostText;
2016-09-29 04:54:14 +02:00
}
set
{
2016-10-07 15:24:00 +02:00
if (unitaryCostText != value)
{
2016-10-07 15:24:00 +02:00
try
{
data.UnitaryCost = decimal.Parse(value, CultureInfo.InvariantCulture);
}
catch (Exception)
{
// TODO Error model
// UI should shoud entry as wearing a wrong value
// thanks to its `Behaviors`
}
}
2016-10-07 15:24:00 +02:00
SetProperty<string>(ref unitaryCostText, value, "UnitaryCostText");
2016-09-29 04:54:14 +02:00
}
}
bool invalidCost;
public bool InvalidCost
{
get { return invalidCost; }
}
public ICommand ValidateCommand { set; get; }
public TimeSpan Duration
{
get
{
switch (DurationUnit)
{
case DurationUnits.Heures:
return new TimeSpan(DurationValue, 0, 0);
case DurationUnits.Jours:
return new TimeSpan(DurationValue*24, 0, 0);
case DurationUnits.Minutes:
return new TimeSpan(0, DurationValue, 0);
// Assert(false); since all units are treated bellow
default:
return new TimeSpan(0, 0, DurationValue);
}
}
2016-10-03 18:34:14 +02:00
set
{
double days = value.TotalDays;
if (days >= 1.0)
{
DurationValue = (int) days;
DurationUnit = DurationUnits.Jours;
return;
}
double hours = value.TotalHours;
if (hours >= 1.0)
{
DurationValue = (int) hours;
DurationUnit = DurationUnits.Jours;
return;
}
DurationValue = (int) value.TotalMinutes;
DurationUnit = DurationUnits.Minutes;
}
}
2016-10-07 15:24:00 +02:00
2016-09-29 04:54:14 +02:00
}
}