SupplierPurchaseOrderPanel.xaml.cs 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Linq.Expressions;
  6. using System.Windows;
  7. using System.Windows.Controls;
  8. using System.Windows.Input;
  9. using Comal.Classes;
  10. using InABox.Configuration;
  11. using InABox.Core;
  12. using InABox.DynamicGrid;
  13. using InABox.WPF;
  14. using InABox.Wpf;
  15. using Syncfusion.UI.Xaml.Charts;
  16. namespace PRSDesktop;
  17. /// <summary>
  18. /// Interaction logic for SupplierPurchaseOrderPanel.xaml
  19. /// </summary>
  20. public partial class SupplierPurchaseOrderPanel : UserControl, IPanel<PurchaseOrder>
  21. {
  22. private PurchaseScreenSettings settings;
  23. public SupplierPurchaseOrderPanel()
  24. {
  25. InitializeComponent();
  26. Orders.HiddenColumns.Add(x => x.SupplierLink.ID);
  27. Orders.HiddenColumns.Add(x => x.PONumber);
  28. Orders.HiddenColumns.Add(x => x.SupplierLink.Code);
  29. Orders.HiddenColumns.Add(x => x.SupplierLink.Name);
  30. Orders.HiddenColumns.Add(x => x.Description);
  31. Orders.HiddenColumns.Add(x => x.IssuedDate);
  32. Orders.HiddenColumns.Add(x => x.IssuedBy.Name);
  33. Orders.HiddenColumns.Add(x => x.DueDate);
  34. Orders.HiddenColumns.Add(x => x.ClosedDate);
  35. /*Orders.OnBeforeSelection += cancel =>
  36. {
  37. if (_orders is not null && _orders.Any(x => x.IsChanged()))
  38. {
  39. CheckSaved(cancel);
  40. }
  41. };*/
  42. Orders.OnSelectItem += (o, e) =>
  43. {
  44. if(SplitPanel.View != DynamicSplitPanelView.Master)
  45. {
  46. ReloadOrders();
  47. }
  48. };
  49. }
  50. public bool IsReady { get; set; }
  51. public event DataModelUpdateEvent? OnUpdateDataModel;
  52. public Dictionary<string, object[]> Selected()
  53. {
  54. return new Dictionary<string, object[]> { { typeof(PurchaseOrder).EntityName(), Orders.SelectedRows } };
  55. }
  56. public void CreateToolbarButtons(IPanelHost host)
  57. {
  58. AccountsSetupActions.Standard(host);
  59. AccountsSetupActions.PurchaseOrderCategories(host);
  60. PostUtils.CreateToolbarButtons(host,
  61. () => (DataModel(Selection.Selected) as IDataModel<PurchaseOrder>)!,
  62. () => Orders.Refresh(false, true),
  63. true);
  64. }
  65. string IDataModelSource.SectionName => SectionName;
  66. public static string SectionName => "Purchase Orders";
  67. public DataModel DataModel(Selection selection)
  68. {
  69. var ids = Orders.ExtractValues(x => x.ID, selection).ToArray();
  70. return DataModel(ids);
  71. }
  72. public static DataModel DataModel(Guid[] poIDs)
  73. {
  74. return new BaseDataModel<PurchaseOrder>(new Filter<PurchaseOrder>(x => x.ID).InList(poIDs));
  75. }
  76. public void Refresh()
  77. {
  78. if (CheckSaved())
  79. {
  80. Orders.Refresh(false, true);
  81. SetChanged(false);
  82. }
  83. }
  84. public void Setup()
  85. {
  86. settings = new UserConfiguration<PurchaseScreenSettings>().Load();
  87. SplitPanel.View = settings.ViewType == ScreenViewType.Register ? DynamicSplitPanelView.Master :
  88. settings.ViewType == ScreenViewType.Details ? DynamicSplitPanelView.Detail : DynamicSplitPanelView.Combined;
  89. SplitPanel.AnchorWidth = Math.Max(20,settings.AnchorWidth);
  90. Orders.ColumnsTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  91. Orders.Refresh(true, false);
  92. PurchaseOrder.SetLayoutType<VerticalDynamicEditorGridLayout>();
  93. }
  94. private void CheckSaved(CancelEventArgs cancel)
  95. {
  96. if(_orders is null || !_orders.Any(x => x.IsChanged()))
  97. {
  98. return;
  99. }
  100. var result = MessageBox.Show("You have an unsaved Purchase Order; do you wish to save these changes?", "Save Changes?", MessageBoxButton.YesNoCancel);
  101. if (result == MessageBoxResult.Yes)
  102. {
  103. PurchaseOrder.SaveItem(cancel);
  104. if (!cancel.Cancel)
  105. {
  106. MessageBox.Show("Purchase Order saved.");
  107. }
  108. }
  109. else if (result == MessageBoxResult.Cancel)
  110. {
  111. cancel.Cancel = true;
  112. }
  113. }
  114. private bool CheckSaved()
  115. {
  116. var cancel = new CancelEventArgs();
  117. CheckSaved(cancel);
  118. return !cancel.Cancel;
  119. }
  120. public void Shutdown(CancelEventArgs? cancel)
  121. {
  122. if(cancel is not null)
  123. {
  124. CheckSaved(cancel);
  125. }
  126. }
  127. public void Heartbeat(TimeSpan time)
  128. {
  129. }
  130. // private void LoadOrder(CoreRow row)
  131. // {
  132. // Number.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.PONumber);
  133. //
  134. // SupplierCode.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Code);
  135. // SupplierName.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.SupplierLink.Name);
  136. //
  137. // Description.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.Description);
  138. //
  139. // Issued.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.IssuedDate));
  140. // IssuedBy.Text = row == null ? "" : row.Get<PurchaseOrder, string>(x => x.IssuedBy.Name);
  141. //
  142. // DueDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.DueDate));
  143. // ClosedDate.Text = row == null ? "" : CheckDate(row.Get<PurchaseOrder, DateTime>(x => x.ClosedDate));
  144. // }
  145. // private string CheckDate(DateTime date)
  146. // {
  147. // return date.IsEmpty() ? "" : date.ToShortDateString();
  148. // }
  149. //
  150. // private void LoadLookups<T>(MultiQuery query, List<Tuple<Guid, string>> lookups, Expression<Func<T, string>> display) where T : Entity
  151. // {
  152. // var table = query.Get<T>();
  153. // foreach (var row in table.Rows)
  154. // lookups.Add(new Tuple<Guid, string>(row.Get<T, Guid>(c => c.ID), row.Get(display)));
  155. // }
  156. //
  157. // private void CategoryList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  158. // {
  159. // if (!IsReady)
  160. // return;
  161. //
  162. // Orders.SelectedCategory = (Guid)CategoryList.SelectedValue;
  163. //
  164. // settings.SelectedCategory = Orders.SelectedCategory;
  165. // new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  166. //
  167. // Refresh();
  168. // }
  169. //
  170. // private void StatusList_SelectionChanged(object sender, SelectionChangedEventArgs e)
  171. // {
  172. // if (!IsReady)
  173. // return;
  174. //
  175. // Orders.ShowAll = StatusList.SelectedIndex == 1;
  176. //
  177. // settings.ShowAll = Orders.ShowAll;
  178. // new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  179. //
  180. // Refresh();
  181. // }
  182. //
  183. // private void Search_KeyUp(object sender, KeyEventArgs e)
  184. // {
  185. // }
  186. //
  187. private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
  188. {
  189. settings.ViewType = SplitPanel.View == DynamicSplitPanelView.Master ? ScreenViewType.Register :
  190. SplitPanel.View == DynamicSplitPanelView.Detail ? ScreenViewType.Details : ScreenViewType.Combined;
  191. settings.AnchorWidth = SplitPanel.AnchorWidth;
  192. var newTag = settings.ViewType == ScreenViewType.Register ? settings.ViewType.ToString() : "";
  193. if (Orders.ColumnsTag != newTag)
  194. {
  195. Orders.ColumnsTag = newTag;
  196. Orders.Refresh(true, true);
  197. }
  198. new UserConfiguration<PurchaseScreenSettings>().Save(settings);
  199. }
  200. private PurchaseOrder[]? _orders = null;
  201. private void ReloadOrders()
  202. {
  203. if (Orders.SelectedRows?.Any() == true)
  204. {
  205. _orders = Orders.LoadOrders(Orders.SelectedRows);
  206. Orders.InitialiseEditorForm(PurchaseOrder, _orders);
  207. PurchaseOrder.Visibility = Visibility.Visible;
  208. }
  209. else
  210. {
  211. _orders = null;
  212. PurchaseOrder.Visibility = Visibility.Hidden;
  213. }
  214. }
  215. private void SetChanged(bool changed)
  216. {
  217. bChanged = changed;
  218. Orders.IsEnabled = !changed;
  219. PurchaseOrder.HideButtons = !changed;
  220. }
  221. private void PurchaseOrder_OnOK()
  222. {
  223. using (new WaitCursor())
  224. {
  225. var cancel = new System.ComponentModel.CancelEventArgs();
  226. PurchaseOrder.SaveItem(cancel);
  227. Orders.Refresh(false, true);
  228. if (!cancel.Cancel)
  229. {
  230. ReloadOrders();
  231. SetChanged(false);
  232. }
  233. }
  234. }
  235. private void PurchaseOrder_OnCancel()
  236. {
  237. ReloadOrders();
  238. SetChanged(false);
  239. }
  240. private bool bChanged = false;
  241. private void PurchaseOrder_OnOnChanged(object? sender, EventArgs e)
  242. {
  243. SetChanged(true);
  244. }
  245. }