SupplierPurchaseOrderPanel.xaml.cs 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193
  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. if (settings.ShowAll)
  65. Orders.ShowAll = true;
  66. SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master :
  67. settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined;
  68. SplitPanel.AnchorWidth = settings.AnchorWidth;
  69. StatusList.SelectedIndex = settings.ShowAll ? 1 : 0;
  70. StatusList.SelectionChanged += StatusList_SelectionChanged;
  71. _categories.Add(new Tuple<Guid, string>(CoreUtils.FullGuid, "All Categories"));
  72. var query = new MultiQuery();
  73. query.Add(
  74. LookupFactory.DefineFilter<PurchaseOrderCategory>(),
  75. LookupFactory.DefineColumns<PurchaseOrderCategory>(),
  76. LookupFactory.DefineSort<PurchaseOrderCategory>()
  77. );
  78. query.Query();
  79. LoadLookups<PurchaseOrderCategory>(query, _categories, x => x.Description);
  80. CategoryList.ItemsSource = _categories;
  81. CategoryList.SelectedValue =
  82. _categories.Any(x => x.Item1 == settings.SelectedCategory) ? settings.SelectedCategory : CoreUtils.FullGuid;
  83. Orders.SelectedCategory = (Guid)CategoryList.SelectedValue;
  84. CategoryList.SelectionChanged += CategoryList_SelectionChanged;
  85. Orders.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  86. Orders.Refresh(true, false);
  87. Items.Refresh(true, false);
  88. }
  89. public void Shutdown()
  90. {
  91. }
  92. public void Heartbeat(TimeSpan time)
  93. {
  94. }
  95. private void LoadOrder(CoreRow row)
  96. {
  97. Number.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.PONumber);
  98. SupplierCode.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Code);
  99. SupplierName.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Name);
  100. Description.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.Notes);
  101. Issued.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.IssuedDate));
  102. IssuedBy.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.IssuedBy.Name);
  103. DueDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.DueDate));
  104. ClosedDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate));
  105. }
  106. private string CheckDate(DateTime date)
  107. {
  108. return date.IsEmpty() ? "" : date.ToShortDateString();
  109. }
  110. private void LoadLookups<T>(MultiQuery query, List<Tuple<Guid, string>> lookups, Expression<Func<T, string>> display) where T : Entity
  111. {
  112. var table = query.Get<T>();
  113. foreach (var row in table.Rows)
  114. lookups.Add(new Tuple<Guid, string>(row.Get<T, Guid>(c => c.ID), row.Get(display)));
  115. }
  116. private void CategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  117. {
  118. if (!IsReady)
  119. return;
  120. Orders.SelectedCategory = (Guid)CategoryList.SelectedValue;
  121. settings.SelectedCategory = Orders.SelectedCategory;
  122. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  123. Refresh();
  124. }
  125. private void StatusList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  126. {
  127. if (!IsReady)
  128. return;
  129. Orders.ShowAll = StatusList.SelectedIndex == 1;
  130. settings.ShowAll = Orders.ShowAll;
  131. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  132. Refresh();
  133. }
  134. private void Search_KeyUp(object sender, KeyEventArgs e)
  135. {
  136. }
  137. private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
  138. {
  139. settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register :
  140. SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined;
  141. settings.AnchorWidth = SplitPanel.AnchorWidth;
  142. var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  143. if (Orders.ColumnsTag != newTag)
  144. {
  145. Orders.ColumnsTag = newTag;
  146. Orders.Refresh(true, true);
  147. }
  148. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  149. }
  150. }
  151. }