InvoiceLineGrid.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Controls;
  5. using Comal.Classes;
  6. using InABox.Core;
  7. using InABox.DynamicGrid;
  8. using InABox.WPF;
  9. using PRS.Shared;
  10. using PRSDesktop.Utils;
  11. namespace PRSDesktop
  12. {
  13. internal class InvoiceLineGrid : DynamicDataGrid<InvoiceLine>
  14. {
  15. protected override void Init()
  16. {
  17. base.Init();
  18. AddButton("Calculate", PRSDesktop.Resources.costcentre.AsBitmapImage(), CalculateLines);
  19. }
  20. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  21. {
  22. base.DoReconfigure(options);
  23. options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.AddRows, DynamicGridOption.DeleteRows, DynamicGridOption.EditRows,
  24. DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect);
  25. }
  26. public Invoice Invoice { get; set; }
  27. private bool CalculateLines(Button sender, CoreRow[] rows)
  28. {
  29. InvoiceCalculationSelector selector = new InvoiceCalculationSelector()
  30. {
  31. TimeCalculation = InvoiceTimeCalculation.Activity,
  32. MaterialCalculation = InvoiceMaterialCalculation.Product
  33. };
  34. if (selector.ShowDialog() == true)
  35. {
  36. var time = selector.TimeCalculation;
  37. var materials = selector.MaterialCalculation;
  38. Progress.ShowModal("Calculating Invoice", progress => InvoiceUtilities.GenerateInvoiceLines(Invoice.ID, time, materials, progress));
  39. return true;
  40. }
  41. MessageBox.Show("Please Select or Create an Invoice First!");
  42. return false;
  43. }
  44. protected override void Reload(Filters<InvoiceLine> criteria, Columns<InvoiceLine> columns, ref SortOrder<InvoiceLine> sort,
  45. Action<CoreTable, Exception> action)
  46. {
  47. criteria.Add(new Filter<InvoiceLine>(x => x.InvoiceLink.ID).IsEqualTo(Invoice.ID));
  48. base.Reload(criteria, columns, ref sort, action);
  49. }
  50. protected override InvoiceLine CreateItem()
  51. {
  52. var result = base.CreateItem();
  53. result.InvoiceLink.ID = Invoice.ID;
  54. result.InvoiceLink.Synchronise(Invoice.ID);
  55. return result;
  56. }
  57. }
  58. }