using System; using System.Linq; using System.Windows; using System.Windows.Controls; using Comal.Classes; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using PRS.Shared; using PRSDesktop.Utils; namespace PRSDesktop { internal class InvoiceLineGrid : DynamicDataGrid { protected override void Init() { base.Init(); AddButton("Calculate", PRSDesktop.Resources.costcentre.AsBitmapImage(), CalculateLines); } protected override void DoReconfigure(FluentList options) { base.DoReconfigure(options); options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.AddRows, DynamicGridOption.DeleteRows, DynamicGridOption.EditRows, DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect); } public Invoice Invoice { get; set; } private bool CalculateLines(Button sender, CoreRow[] rows) { InvoiceCalculationSelector selector = new InvoiceCalculationSelector() { TimeCalculation = InvoiceTimeCalculation.Activity, MaterialCalculation = InvoiceMaterialCalculation.Product }; if (selector.ShowDialog() == true) { var time = selector.TimeCalculation; var materials = selector.MaterialCalculation; Progress.ShowModal("Calculating Invoice", progress => InvoiceUtilities.GenerateInvoiceLines(Invoice.ID, time, materials, progress)); return true; } MessageBox.Show("Please Select or Create an Invoice First!"); return false; } protected override void Reload(Filters criteria, Columns columns, ref SortOrder? sort, Action action) { criteria.Add(new Filter(x => x.InvoiceLink.ID).IsEqualTo(Invoice.ID)); base.Reload(criteria, columns, ref sort, action); } public override InvoiceLine CreateItem() { var result = base.CreateItem(); result.InvoiceLink.ID = Invoice.ID; result.InvoiceLink.Synchronise(Invoice.ID); return result; } } }