CustomerReceipts.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Windows.Controls;
  6. using Comal.Classes;
  7. using InABox.Configuration;
  8. using InABox.Core;
  9. using InABox.DynamicGrid;
  10. using InABox.WPF;
  11. namespace PRSDesktop;
  12. public class ReceiptGridSettings : IUserConfigurationSettings
  13. {
  14. public CoreFilterDefinition CurrentFilter { get; set; }
  15. }
  16. public class CustomerReceipts : DynamicDataGrid<Receipt>, IPanel<Receipt>
  17. {
  18. //private bool Outstanding = true;
  19. private ReceiptGridSettings _settings;
  20. public CustomerReceipts()
  21. {
  22. //AddButton("Show All", PRSDesktop.Resources.view.AsBitmapImage(), ToggleView);
  23. OnBeforeSave += BeforeSave;
  24. }
  25. protected override void DoReconfigure(FluentList<DynamicGridOption> options)
  26. {
  27. base.DoReconfigure(options);
  28. options.AddRange(DynamicGridOption.RecordCount, DynamicGridOption.FilterRows, DynamicGridOption.SelectColumns, DynamicGridOption.MultiSelect);
  29. }
  30. protected override void Init()
  31. {
  32. base.Init();
  33. _settings = new UserConfiguration<ReceiptGridSettings>().Load();
  34. SelectFilter(_settings.CurrentFilter, false);
  35. }
  36. public bool IsReady { get; set; }
  37. public event DataModelUpdateEvent OnUpdateDataModel;
  38. public void CreateToolbarButtons(IPanelHost host)
  39. {
  40. //
  41. }
  42. public Dictionary<string, object[]> Selected()
  43. {
  44. return new Dictionary<string, object[]> { { typeof(Receipt).EntityName(), SelectedRows } };
  45. }
  46. public string SectionName => "Customer Receipts";
  47. public DataModel DataModel(Selection selection)
  48. {
  49. var ids = ExtractValues(x => x.ID, selection).ToArray();
  50. return new BaseDataModel<Receipt>(new Filter<Receipt>(x => x.ID).InList(ids));
  51. }
  52. public void Refresh()
  53. {
  54. Refresh(false, true);
  55. }
  56. public void Setup()
  57. {
  58. Refresh(true, false);
  59. }
  60. public void Shutdown(CancelEventArgs? cancel)
  61. {
  62. }
  63. public void Heartbeat(TimeSpan time)
  64. {
  65. }
  66. private void BeforeSave(IDynamicEditorForm editor, BaseObject[] items)
  67. {
  68. var receipt = items?.FirstOrDefault() as Receipt;
  69. if (receipt == null)
  70. return;
  71. if (!string.IsNullOrWhiteSpace(receipt.Notes))
  72. return;
  73. var page =
  74. editor.Pages.FirstOrDefault(x => x is DynamicManyToManyGrid<InvoiceReceipt, Receipt>) as DynamicManyToManyGrid<InvoiceReceipt, Receipt>;
  75. if (page != null)
  76. {
  77. var numbers = page.Data.Rows.Select(r => r.Get<InvoiceReceipt, int>(c => c.InvoiceLink.Number)).ToArray();
  78. receipt.Notes = string.Format("Invoice{0} {1}", numbers.Length > 1 ? "s" : "", string.Join(", ", numbers));
  79. }
  80. }
  81. protected override void FilterSelected(CoreFilterDefinition filter)
  82. {
  83. base.FilterSelected(filter);
  84. _settings.CurrentFilter = filter;
  85. new UserConfiguration<ReceiptGridSettings>().Save(_settings);
  86. }
  87. }