Files
yavsc/BookAStar/BookAStar/Pages/EstimatePages/EditEstimatePage.xaml.cs
2017-01-18 13:12:12 +01:00

129 lines
4.5 KiB
C#

using System;
using Xamarin.Forms;
namespace BookAStar.Pages
{
using Data;
using EstimatePages;
using Model.Workflow;
using ViewModels.EstimateAndBilling;
using ViewModels.Signing;
public partial class EditEstimatePage : ContentPage
{
public EditEstimateViewModel Model
{
get
{
return (EditEstimateViewModel)BindingContext;
}
}
public EditEstimatePage(EditEstimateViewModel model)
{
BindingContext = model;
Model.CheckCommand = new Action<Estimate, ViewModels.Validation.ModelState>(
(e, m) =>
{
foreach (var line in model.Bill)
{
line.Check();
if (!line.ViewModelState.IsValid)
model.ViewModelState.AddError("Bill", "invalid line");
}
});
InitializeComponent();
Model.Check();
}
protected override void OnBindingContextChanged()
{
base.OnBindingContextChanged();
((EditEstimateViewModel)BindingContext).PropertyChanged += EditEstimatePage_PropertyChanged;
}
private void EditEstimatePage_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
DataManager.Instance.EstimationCache.SaveEntity();
}
protected override void OnSizeAllocated(double width, double height)
{
if (width > height)
{
biAnVaLayout.Orientation = StackOrientation.Horizontal;
}
else
{
biAnVaLayout.Orientation = StackOrientation.Vertical;
}
base.OnSizeAllocated(width, height);
}
protected void OnNewCommanLine(object sender, EventArgs e)
{
var com = new BillingLine() { Count = 1, UnitaryCost = 0.01m };
var bill = ((EditEstimateViewModel)BindingContext).Bill;
var lineView = new BillingLineViewModel(com)
{ ValidateCommand = new Command(() => {
bill.Add(new BillingLineViewModel(com));
DataManager.Instance.EstimationCache.SaveEntity();
})};
App.NavigationService.NavigateTo<EditBillingLinePage>(
true, lineView );
}
protected void OnEditLine(object sender, ItemTappedEventArgs e)
{
var line = (BillingLineViewModel)e.Item;
var evm = ((EditEstimateViewModel)BindingContext);
// update the validation command, that
// was creating a new line in the bill at creation time,
// now one only wants to update the line
line.ValidateCommand = new Command(() =>
{
evm.Check();
DataManager.Instance.EstimationCache.SaveEntity();
});
// and setup a removal command, that was not expected at creation time
line.RemoveCommand = new Command(() =>
{
evm.Bill.Remove(line);
evm.Check();
DataManager.Instance.EstimationCache.SaveEntity();
});
App.NavigationService.NavigateTo<EditBillingLinePage>(
true, line );
BillListView.SelectedItem = null;
}
protected async void OnEstimateValidated(object sender, EventArgs e)
{
var thisPage = this;
var evm = (EditEstimateViewModel) BindingContext;
var cmd = new Command<bool>( async (validated) =>
{
if (validated) {
DataManager.Instance.EstimationCache.Remove(evm);
DataManager.Instance.EstimationCache.SaveEntity();
}
await thisPage.Navigation.PopAsync();
});
var response = await App.DisplayActionSheet(
Strings.SignOrNot, Strings.DonotsignEstimate,
Strings.CancelValidation, new string[] { Strings.Sign });
if (response == Strings.Sign)
{
App.NavigationService.NavigateTo<EstimateSigningPage>(true,
new EstimateSigningViewModel(evm.Data) { ValidationCommand = cmd,
IsProviderView = true });
}
else if (response == Strings.CancelValidation)
return;
else cmd.Execute(true);
}
}
}