SetoutStagesPanel.xaml.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows;
  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. using PRSDesktop.Utils;
  12. using Syncfusion.Windows.Controls.Grid;
  13. namespace PRSDesktop
  14. {
  15. /// <summary>
  16. /// Interaction logic for SetoutStagesPanel.xaml
  17. /// </summary>
  18. public partial class SetoutStagesPanel : UserControl
  19. {
  20. private readonly List<IStageTemplate> _stages = new();
  21. private Type _type;
  22. private FactorySetup settings;
  23. public SetoutStagesPanel()
  24. {
  25. InitializeComponent();
  26. Grid.Model.RowCount = 1;
  27. Grid.Model.ColumnCount = 7;
  28. Grid.Model.ColumnWidths[0] = 20;
  29. Grid.Model.ColumnWidths[1] = 20;
  30. Grid.Model.ColumnWidths[2] = Grid.ActualWidth - 150;
  31. Grid.Model.ColumnWidths[3] = 50;
  32. Grid.Model.ColumnWidths[4] = 20;
  33. Grid.Model.ColumnWidths[5] = 20;
  34. Grid.Model.ColumnWidths[6] = 20;
  35. Grid.Model.HeaderColumns = 0;
  36. }
  37. private IStageTemplate CreateStage()
  38. {
  39. return (IStageTemplate)Activator.CreateInstance(_type);
  40. }
  41. public IList<T> GetStages<T>() where T : IStageTemplate
  42. {
  43. var result = new List<T>();
  44. foreach (var stage in _stages)
  45. result.Add((T)stage);
  46. return result;
  47. }
  48. public void SetStages<T>(IList<T> stages) where T : IStageTemplate
  49. {
  50. settings = new GlobalConfiguration<FactorySetup>().Load();
  51. _stages.Clear();
  52. foreach (IStageTemplate stage in stages)
  53. _stages.Add(stage);
  54. _type = typeof(T);
  55. Grid.Model.RowCount = 0;
  56. Grid.Model.RowCount = _stages.Count + 2;
  57. }
  58. private void Grid_SizeChanged(object sender, SizeChangedEventArgs e)
  59. {
  60. Grid.Model.ColumnWidths[2] = e.NewSize.Width - 150;
  61. }
  62. private void Grid_QueryCellInfo(object sender, GridQueryCellInfoEventArgs e)
  63. {
  64. try
  65. {
  66. var row = e.Cell.RowIndex - 1;
  67. var col = e.Cell.ColumnIndex;
  68. switch (col)
  69. {
  70. case 0:
  71. if (row != 0 && row < _stages.Count)
  72. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.uparrow, Grid.Model, col);
  73. else
  74. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  75. break;
  76. case 1:
  77. if (row < _stages.Count - 1)
  78. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.downarrow, Grid.Model, col);
  79. else
  80. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  81. break;
  82. case 2:
  83. if (row == -1)
  84. {
  85. e.Style.CellValue = "Section Name";
  86. }
  87. else
  88. {
  89. e.Style.CellType = "ComboBox";
  90. var sections = new List<FactorySection>();
  91. sections.AddRange(settings.Sections);
  92. if (row == _stages.Count)
  93. sections.Add(new FactorySection { ID = Guid.Empty, Name = "Add new..", Stations = 0 });
  94. e.Style.ItemsSource = sections
  95. .Select(x => new { x.ID, Name = !string.IsNullOrEmpty(x.Group) ? x.Group + " : " + x.Name : x.Name }).ToList();
  96. e.Style.DropDownStyle = GridDropDownStyle.AutoComplete;
  97. e.Style.DisplayMember = "Name";
  98. e.Style.ValueMember = "ID";
  99. e.Style.CellValue = row < _stages.Count ? _stages[row].SectionID : Guid.Empty;
  100. }
  101. e.Style.VerticalAlignment = VerticalAlignment.Center;
  102. break;
  103. case 3:
  104. e.Style.CellValue = row == -1 ? "Time" : row < _stages.Count ? _stages[row].Minutes.ToString() : "";
  105. e.Style.HorizontalAlignment = HorizontalAlignment.Center;
  106. e.Style.VerticalAlignment = VerticalAlignment.Center;
  107. break;
  108. case 4:
  109. if (row == -1)
  110. {
  111. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality, Grid.Model, col);
  112. }
  113. else if (row < _stages.Count)
  114. {
  115. if (!string.IsNullOrWhiteSpace(_stages[row].QualityChecks))
  116. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality, Grid.Model, col);
  117. else
  118. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.quality.AsGrayScale(), Grid.Model, col);
  119. }
  120. else
  121. {
  122. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  123. }
  124. break;
  125. case 5:
  126. if (row == -1)
  127. {
  128. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.link, Grid.Model, col);
  129. }
  130. else if (row < _stages.Count)
  131. {
  132. if (_stages[row].Sequence == SequenceType.Consolidate)
  133. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.milestone, Grid.Model, col);
  134. else if (_stages[row].Sequence == SequenceType.Link)
  135. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.link, Grid.Model, col);
  136. else
  137. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  138. }
  139. else
  140. {
  141. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  142. }
  143. break;
  144. case 6:
  145. if (row < _stages.Count)
  146. GridUtils.SetButtonImage(e.Style, PRSDesktop.Resources.delete, Grid.Model, col);
  147. else
  148. GridUtils.SetButtonImage(e.Style, null, Grid.Model, col);
  149. break;
  150. }
  151. }
  152. catch (Exception err)
  153. {
  154. Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", err.Message, err.StackTrace));
  155. }
  156. }
  157. private void Grid_CommitCellInfo(object sender, GridCommitCellInfoEventArgs e)
  158. {
  159. IStageTemplate stage;
  160. if (e.Style.RowIndex > _stages.Count)
  161. {
  162. stage = CreateStage();
  163. stage.Sequence = SequenceType.Link;
  164. _stages.Add(stage);
  165. }
  166. else
  167. {
  168. stage = _stages[e.Style.RowIndex - 1];
  169. }
  170. switch (e.Cell.ColumnIndex)
  171. {
  172. case 2:
  173. stage.SectionID = (Guid)e.Style.CellValue;
  174. break;
  175. case 3:
  176. stage.Minutes = Convert.ToInt32(e.Style.CellValue.ToString());
  177. break;
  178. }
  179. Grid.Model.RowCount = 0;
  180. Grid.Model.RowCount = _stages.Count + 2;
  181. }
  182. private void Grid_CellClick(object sender, GridCellClickEventArgs e)
  183. {
  184. var row = e.RowIndex - 1;
  185. if (row > -1 && row < _stages.Count)
  186. {
  187. var stage = _stages[row];
  188. switch (e.ColumnIndex)
  189. {
  190. case 0:
  191. if (row > 0)
  192. {
  193. _stages.Remove(stage);
  194. _stages.Insert(row - 1, stage);
  195. e.Handled = true;
  196. }
  197. break;
  198. case 1:
  199. if (e.RowIndex < settings.Sections.Count - 1)
  200. {
  201. _stages.Remove(stage);
  202. _stages.Insert(row + 1, stage);
  203. e.Handled = true;
  204. }
  205. break;
  206. case 4:
  207. var form = new NotesForm
  208. {
  209. Caption = "Please enter the Quality Checks to be performed before starting work on this stage",
  210. Text = _stages[row].QualityChecks
  211. };
  212. if (form.ShowDialog() == true)
  213. _stages[row].QualityChecks = form.Text;
  214. e.Handled = true;
  215. break;
  216. case 5:
  217. switch (_stages[row].Sequence)
  218. {
  219. case SequenceType.None:
  220. _stages[row].Sequence = SequenceType.Link;
  221. break;
  222. case SequenceType.Link:
  223. _stages[row].Sequence = SequenceType.Consolidate;
  224. break;
  225. case SequenceType.Consolidate:
  226. _stages[row].Sequence = SequenceType.None;
  227. break;
  228. }
  229. e.Handled = true;
  230. break;
  231. case 6:
  232. _stages.Remove(stage);
  233. e.Handled = true;
  234. break;
  235. }
  236. if (e.Handled)
  237. {
  238. Grid.Model.RowCount = 0;
  239. Grid.Model.RowCount = _stages.Count + 2;
  240. }
  241. }
  242. }
  243. }
  244. }