StockMovementPanel.xaml.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Media.Imaging;
  8. using Comal.Classes;
  9. using InABox.Configuration;
  10. using InABox.Core;
  11. using InABox.DynamicGrid;
  12. using InABox.Wpf;
  13. namespace PRSDesktop;
  14. /// <summary>
  15. /// Interaction logic for StockMovementPanel.xaml
  16. /// </summary>
  17. public partial class StockMovementPanel : UserControl, IPanel<StockMovement>
  18. {
  19. public StockMovementSettings _settings;
  20. public StockMovementPanel()
  21. {
  22. InitializeComponent();
  23. }
  24. public bool IsReady { get; set; }
  25. public event DataModelUpdateEvent? OnUpdateDataModel;
  26. public void CreateToolbarButtons(IPanelHost host)
  27. {
  28. ProductSetupActions.Standard(host);
  29. PostUtils.CreateToolbarButtons(host,
  30. () => (DataModel(Selection.Selected) as IDataModel<StockMovement>)!,
  31. () => Movements.Refresh(false, true),
  32. true);
  33. }
  34. public string SectionName => Movements.SectionName;
  35. public DataModel DataModel(Selection selection)
  36. {
  37. return Movements.DataModel(selection);
  38. }
  39. public void Heartbeat(TimeSpan time)
  40. {
  41. }
  42. public void Refresh()
  43. {
  44. var start = StartPicker.SelectedDate?? DateTime.Now;
  45. var end = EndPicker.SelectedDate?? DateTime.Now;
  46. Batches.StartDate = start;
  47. Batches.EndDate = end;
  48. if (ShowBatches.IsChecked == true)
  49. Batches.Refresh(false, true);
  50. Movements.StartDate = start;
  51. Movements.EndDate = end;
  52. Movements.Refresh(false, true);
  53. }
  54. public Dictionary<string, object[]> Selected()
  55. {
  56. return new Dictionary<string, object[]>();
  57. }
  58. public void Setup()
  59. {
  60. LoadSettings();
  61. Batches.Refresh(true, false);
  62. Movements.Refresh(true, false);
  63. Batches.OnSelectItem += Batches_OnSelectItem;
  64. }
  65. public void Shutdown(CancelEventArgs? cancel)
  66. {
  67. }
  68. private void LoadSettings()
  69. {
  70. _settings = new UserConfiguration<StockMovementSettings>().Load();
  71. StartPicker.SelectedDate = _settings.StartDate;
  72. EndPicker.SelectedDate = _settings.EndDate;
  73. View.SelectedIndex = _settings.View;
  74. ViewChanged();
  75. ShowBatches.IsChecked = _settings.ShowBatches;
  76. }
  77. private void SaveSettings()
  78. {
  79. if (IsReady)
  80. {
  81. _settings.View = View.SelectedIndex;
  82. _settings.StartDate = StartPicker.SelectedDate.Value;
  83. _settings.EndDate = EndPicker.SelectedDate.Value;
  84. _settings.ShowBatches = ShowBatches.IsChecked == true;
  85. if (_settings.ShowBatches)
  86. _settings.BatchesWidth = Grid.ColumnDefinitions[0].Width.Value;
  87. new UserConfiguration<StockMovementSettings>().Save(_settings);
  88. }
  89. }
  90. private void UpdateStartEndPicker(DateTime start, DateTime end)
  91. {
  92. if (StartPicker == null || EndPicker == null)
  93. return;
  94. StartPicker.IsEnabled = false;
  95. EndPicker.IsEnabled = false;
  96. StartPicker.SelectedDate = start;
  97. EndPicker.SelectedDate = end;
  98. }
  99. private void View_SelectionChanged(object sender, SelectionChangedEventArgs e)
  100. {
  101. ViewChanged();
  102. if (!IsReady)
  103. return;
  104. SaveSettings();
  105. Refresh();
  106. }
  107. private void ViewChanged()
  108. {
  109. if (View.SelectedIndex == 0)
  110. {
  111. UpdateStartEndPicker(DateTime.Today, DateTime.Today);
  112. }
  113. else if (View.SelectedIndex == 1)
  114. {
  115. UpdateStartEndPicker(DateTime.Today.AddDays(0 - 1), DateTime.Today.AddDays(0 - 1));
  116. }
  117. else if (View.SelectedIndex == 2)
  118. {
  119. UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(1),
  120. DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(7));
  121. }
  122. else if (View.SelectedIndex == 3)
  123. {
  124. UpdateStartEndPicker(DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek).AddDays(0 - 6),
  125. DateTime.Today.AddDays(0 - (double)DateTime.Today.DayOfWeek));
  126. }
  127. else if (View.SelectedIndex == 4)
  128. {
  129. UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1),
  130. new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(1).AddDays(0 - 1));
  131. }
  132. else if (View.SelectedIndex == 5)
  133. {
  134. UpdateStartEndPicker(new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddMonths(0 - 1),
  135. new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1).AddDays(0 - 1));
  136. }
  137. else if (View.SelectedIndex == 6)
  138. {
  139. UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1),
  140. new DateTime(DateTime.Today.Year, 1, 1).AddYears(1).AddDays(0 - 1));
  141. }
  142. else if (View.SelectedIndex == 7)
  143. {
  144. UpdateStartEndPicker(new DateTime(DateTime.Today.Year, 1, 1).AddYears(0 - 1),
  145. new DateTime(DateTime.Today.Year, 1, 1).AddDays(0 - 1));
  146. }
  147. else
  148. {
  149. StartPicker.IsEnabled = true;
  150. EndPicker.IsEnabled = true;
  151. }
  152. }
  153. private void SelectedDateChanged(object sender, SelectionChangedEventArgs e)
  154. {
  155. if (!StartPicker.IsEnabled || !EndPicker.IsEnabled || !IsReady)
  156. return;
  157. SaveSettings();
  158. Refresh();
  159. }
  160. private void ShowBatches_Checked(object sender, RoutedEventArgs e)
  161. {
  162. Grid.ColumnDefinitions[0].Width = ShowBatches.IsChecked == true
  163. ? new GridLength(_settings.BatchesWidth, GridUnitType.Pixel)
  164. : new GridLength(0, GridUnitType.Pixel);
  165. Grid.ColumnDefinitions[1].Width =
  166. ShowBatches.IsChecked == true ? new GridLength(4, GridUnitType.Pixel) : new GridLength(0, GridUnitType.Pixel);
  167. if (!IsReady)
  168. return;
  169. SaveSettings();
  170. Movements.Batch = null;
  171. Refresh();
  172. }
  173. private void Batches_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  174. {
  175. var row = e.Rows?.FirstOrDefault();
  176. Movements.Batch = row?.ToObject<StockMovementBatch>();
  177. Movements.Refresh(false, true);
  178. }
  179. }