SupplierPurchaseOrderPanel.xaml.cs 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using System.Windows.Controls;
  6. using System.Windows.Input;
  7. using Comal.Classes;
  8. using InABox.Configuration;
  9. using InABox.Core;
  10. using InABox.DynamicGrid;
  11. namespace PRSDesktop
  12. {
  13. /// <summary>
  14. /// Interaction logic for SupplierPurchaseOrderPanel.xaml
  15. /// </summary>
  16. public partial class SupplierPurchaseOrderPanel : UserControl, IPanel<PurchaseOrder>
  17. {
  18. private readonly List<Tuple<Guid, string>> _categories = new();
  19. private PurchaseScreenSettings settings;
  20. public SupplierPurchaseOrderPanel()
  21. {
  22. InitializeComponent();
  23. Orders.HiddenColumns.Add(x => x.SupplierLink.ID);
  24. Orders.HiddenColumns.Add(x => x.PONumber);
  25. Orders.HiddenColumns.Add(x => x.SupplierLink.Code);
  26. Orders.HiddenColumns.Add(x => x.SupplierLink.Name);
  27. Orders.HiddenColumns.Add(x => x.Notes);
  28. Orders.HiddenColumns.Add(x => x.IssuedDate);
  29. Orders.HiddenColumns.Add(x => x.IssuedBy.Name);
  30. Orders.HiddenColumns.Add(x => x.DueDate);
  31. Orders.HiddenColumns.Add(x => x.ClosedDate);
  32. Orders.OnSelectItem += (o, e) =>
  33. {
  34. var row = e.Rows?.FirstOrDefault();
  35. Items.OrderID = row != null ? row.Get<PurchaseOrder, Guid>(x => x.ID) : CoreUtils.FullGuid;
  36. Items.SupplierID = row != null ? row.Get<PurchaseOrder, Guid>(x => x.SupplierLink.ID) : CoreUtils.FullGuid;
  37. Items.Closed = row != null ? !row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate).IsEmpty() : true; LoadOrder(row);
  38. Items.Refresh(false, true);
  39. };
  40. }
  41. public bool IsReady { get; set; }
  42. public event DataModelUpdateEvent OnUpdateDataModel;
  43. public Dictionary<string, object[]> Selected()
  44. {
  45. return new Dictionary<string, object[]> { { typeof(PurchaseOrder).EntityName(), Orders.SelectedRows } };
  46. }
  47. public void CreateToolbarButtons(IPanelHost host)
  48. {
  49. //
  50. }
  51. public string SectionName => "Purchase Orders";
  52. public DataModel DataModel(Selection selection)
  53. {
  54. var ids = Orders.ExtractValues(x => x.ID, selection).ToArray();
  55. return new BaseDataModel<PurchaseOrder>(new Filter<PurchaseOrder>(x => x.ID).InList(ids));
  56. }
  57. public void Refresh()
  58. {
  59. Orders.Refresh(false, true);
  60. }
  61. public void Setup()
  62. {
  63. settings = new UserConfiguration<PurchaseScreenSettings>().Load();
  64. SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master :
  65. settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined;
  66. SplitPanel.MasterWidth = settings.PurchaseColumnWidth;
  67. StatusList.SelectedIndex = settings.ShowAll ? 1 : 0;
  68. StatusList.SelectionChanged += StatusList_SelectionChanged;
  69. _categories.Add(new Tuple<Guid, string>(CoreUtils.FullGuid, "All Categories"));
  70. var query = new MultiQuery();
  71. query.Add(
  72. LookupFactory.DefineFilter<PurchaseOrderCategory>(),
  73. LookupFactory.DefineColumns<PurchaseOrderCategory>(),
  74. LookupFactory.DefineSort<PurchaseOrderCategory>()
  75. );
  76. query.Query();
  77. LoadLookups<PurchaseOrderCategory>(query, _categories, x => x.Description);
  78. CategoryList.ItemsSource = _categories;
  79. CategoryList.SelectedValue =
  80. _categories.Any(x => x.Item1 == settings.SelectedCategory) ? settings.SelectedCategory : CoreUtils.FullGuid;
  81. Orders.SelectedCategory = (Guid)CategoryList.SelectedValue;
  82. CategoryList.SelectionChanged += CategoryList_SelectionChanged;
  83. Orders.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  84. Orders.Refresh(true, false);
  85. Items.Refresh(true, false);
  86. }
  87. public void Shutdown()
  88. {
  89. }
  90. public void Heartbeat(TimeSpan time)
  91. {
  92. }
  93. private void LoadOrder(CoreRow row)
  94. {
  95. Number.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.PONumber);
  96. SupplierCode.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Code);
  97. SupplierName.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Name);
  98. Description.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.Notes);
  99. Issued.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.IssuedDate));
  100. IssuedBy.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.IssuedBy.Name);
  101. DueDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.DueDate));
  102. ClosedDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate));
  103. }
  104. private string CheckDate(DateTime date)
  105. {
  106. return date.IsEmpty() ? "" : date.ToShortDateString();
  107. }
  108. private void LoadLookups<T>(MultiQuery query, List<Tuple<Guid, string>> lookups, Expression<Func<T, string>> display) where T : Entity
  109. {
  110. var table = query.Get<T>();
  111. foreach (var row in table.Rows)
  112. lookups.Add(new Tuple<Guid, string>(row.Get<T, Guid>(c => c.ID), row.Get(display)));
  113. }
  114. private void CategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  115. {
  116. if (!IsReady)
  117. return;
  118. Orders.SelectedCategory = (Guid)CategoryList.SelectedValue;
  119. settings.SelectedCategory = Orders.SelectedCategory;
  120. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  121. Refresh();
  122. }
  123. private void StatusList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  124. {
  125. if (!IsReady)
  126. return;
  127. Orders.ShowAll = StatusList.SelectedIndex == 1;
  128. settings.ShowAll = Orders.ShowAll;
  129. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  130. Refresh();
  131. }
  132. private void Search_KeyUp(object sender, KeyEventArgs e)
  133. {
  134. }
  135. private void SplitPanel_OnChanged(object sender, DynamicSplitPanelChangedArgs e)
  136. {
  137. settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register :
  138. SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined;
  139. settings.PurchaseColumnWidth = SplitPanel.MasterWidth;
  140. var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  141. if (Orders.ColumnsTag != newTag)
  142. {
  143. Orders.ColumnsTag = newTag;
  144. Orders.Refresh(true, true);
  145. }
  146. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  147. }
  148. }
  149. }