StagingPanel.xaml.cs 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. using com.sun.security.ntlm;
  2. using Comal.Classes;
  3. using InABox.Core;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using System.Windows.Controls;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Input;
  14. using System.Windows.Media;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Navigation;
  17. using System.Windows.Shapes;
  18. using InABox.Client;
  19. using InABox.Clients;
  20. using Syncfusion.UI.Xaml.Kanban;
  21. namespace PRSDesktop
  22. {
  23. /// <summary>
  24. /// Interaction logic for StagingPanel.xaml
  25. /// </summary>
  26. public partial class StagingPanel : UserControl, IPanel<StagingSetout>
  27. {
  28. StagingSetout _item = new StagingSetout();
  29. public StagingPanel()
  30. {
  31. InitializeComponent();
  32. SectionName = nameof(StagingPanel);
  33. stagingSetoutGrid.Refresh(true, true);
  34. stagingSetoutGrid.OnSelectItem += StagingSetoutGrid_OnSelectItem;
  35. documentPreviewer.SetupButtons(/*approveVisible: false*/);
  36. documentPreviewer.OnMarkupComplete += DocumentPreviewer_OnMarkupComplete;
  37. documentPreviewer.OnRejected += DocumentPreviewer_OnRejected;
  38. documentPreviewer.OnApproved += DocumentPreviewer_OnApproved;
  39. }
  40. private void DocumentPreviewer_OnMarkupComplete(IEntityDocument document)
  41. {
  42. stagingSetoutGrid.ReloadFile(document);
  43. stagingSetoutGrid.Refresh(false, true);
  44. }
  45. private void DocumentPreviewer_OnApproved(IEntityDocument stagingsetoutdocument)
  46. {
  47. var table = new Client<Setout>().Query(new Filter<Setout>(x => x.Number).IsEqualTo(_item.Number),
  48. new Columns<Setout>(x => x.ID));
  49. //setout already exists - create new setoutdoc and supercede old ones
  50. if (table.Rows.Any())
  51. {
  52. if (MessageBox.Show("Supercede existing documents?", "Proceed?", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
  53. {
  54. var setout = table.Rows.FirstOrDefault().ToObject<Setout>();
  55. _item.Setout.ID = setout.ID;
  56. var setoutdoc = new SetoutDocument();
  57. setoutdoc.EntityLink.ID = setout.ID;
  58. setoutdoc.DocumentLink.ID = stagingsetoutdocument.DocumentLink.ID;
  59. List<SetoutDocument> setoutdocs = new List<SetoutDocument>
  60. {
  61. setoutdoc
  62. };
  63. CoreTable oldDocsTable = new Client<SetoutDocument>().Query(new Filter<SetoutDocument>(x => x.EntityLink.ID).IsEqualTo(setout.ID));
  64. foreach (var row in oldDocsTable.Rows)
  65. {
  66. var oldDoc = row.ToObject<SetoutDocument>();
  67. if (oldDoc.Superceded == DateTime.MinValue)
  68. {
  69. oldDoc.Superceded = DateTime.Now;
  70. setoutdocs.Add(oldDoc);
  71. }
  72. }
  73. new Client<SetoutDocument>().Save(setoutdocs, "Updated from Staging Screen");
  74. MessageBox.Show("Document for setout " + _item.Number + " superceded.", "Success");
  75. }
  76. else
  77. return;
  78. }
  79. //no setout for this pdf - create new
  80. else
  81. {
  82. var setout = new Setout();
  83. setout.Number = _item.Number;
  84. new Client<Setout>().Save(setout, "Added from staging screen");
  85. _item.Setout.ID = setout.ID;
  86. MessageBox.Show("Setout created for document " + _item.Number, "Success");
  87. }
  88. new Client<StagingSetout>().Save(_item, "Updated from staging screen");
  89. _item = new StagingSetout();
  90. stagingSetoutGrid.DeleteFile(stagingsetoutdocument);
  91. documentPreviewer.Document = new StagingSetoutDocument();
  92. stagingSetoutGrid.Refresh(false, true);
  93. }
  94. private void DocumentPreviewer_OnRejected(IEntityDocument stagingsetoutdocument)
  95. {
  96. //dont create setout - setout.id remains blank
  97. //create kanban and populate task.id - this prevents it from appearing on the stagingsetout grid, and allows a new staging setout to be created when the file is saved to the folder again
  98. //attach the document to the task for reference
  99. Kanban task = new Kanban();
  100. task.Title = "Setout Review Task (setout rejected)";
  101. task.Description = "Please review the attached document for setout " + _item.Number;
  102. task.ManagerLink.ID = App.EmployeeID;
  103. var page = new KanbanGrid();
  104. page.MyID = App.EmployeeID;
  105. page.OnAfterSave += (editor, items) =>
  106. {
  107. Kanban savedTask = (Kanban)items[0];
  108. KanbanDocument doc = new KanbanDocument();
  109. doc.EntityLink.ID = savedTask.ID;
  110. doc.DocumentLink.ID = stagingsetoutdocument.DocumentLink.ID;
  111. new Client<KanbanDocument>().Save(doc, "Created from staging screen");
  112. _item.Task.ID = savedTask.ID;
  113. new Client<StagingSetout>().Save(_item, "Updated from staging screen");
  114. MessageBox.Show("Success - Task Created for Document " + _item.Number + " (Task no. " + savedTask.Number + " assigned to " + savedTask.EmployeeLink.Name + ")");
  115. _item = new StagingSetout();
  116. stagingSetoutGrid.DeleteFile(stagingsetoutdocument);
  117. documentPreviewer.Document = new StagingSetoutDocument();
  118. stagingSetoutGrid.Refresh(false, true);
  119. };
  120. if (!page.EditItems(new[] { task }))
  121. MessageBox.Show("Task creation cancelled - setout not rejected");
  122. }
  123. private void StagingSetoutGrid_OnSelectItem(object sender, InABox.DynamicGrid.DynamicGridSelectionEventArgs e)
  124. {
  125. _item = stagingSetoutGrid.SelectedRows.FirstOrDefault().ToObject<StagingSetout>();
  126. var doc = new Client<StagingSetoutDocument>().Query(
  127. new Filter<StagingSetoutDocument>(x => x.EntityLink.ID)
  128. .IsEqualTo(_item.ID),
  129. new Columns<StagingSetoutDocument>(x => x.ID, x => x.DocumentLink.ID, x => x.DocumentLink.FileName))
  130. .Rows.FirstOrDefault().ToObject<StagingSetoutDocument>();
  131. documentPreviewer.Document = doc;
  132. manufacturingControl.StagingSetout = _item;
  133. }
  134. public bool IsReady { get; set; }
  135. public string SectionName { get; }
  136. public event DataModelUpdateEvent? OnUpdateDataModel;
  137. public void CreateToolbarButtons(IPanelHost host)
  138. {
  139. }
  140. public DataModel DataModel(Selection selection)
  141. {
  142. return new AutoDataModel<StagingSetout>(null);
  143. }
  144. public void Heartbeat(TimeSpan time)
  145. {
  146. }
  147. public void Refresh()
  148. {
  149. stagingSetoutGrid.ScanFiles();
  150. stagingSetoutGrid.Refresh(false, true);
  151. }
  152. public Dictionary<string, object[]> Selected()
  153. {
  154. return new();
  155. }
  156. public void Setup()
  157. {
  158. }
  159. public void Shutdown()
  160. {
  161. }
  162. }
  163. }