LogikalElevationSelection.xaml.cs 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Windows;
  6. using Comal.Classes;
  7. using InABox.DynamicGrid;
  8. using InABox.Integration.Awg;
  9. using InABox.Integration.Logikal;
  10. using InABox.Wpf;
  11. using PRSDesktop.Integrations.Common;
  12. using PRSDesktop.Integrations.Logikal;
  13. namespace PRSDesktop;
  14. public enum LogikalElevationSelectionType
  15. {
  16. BOM,
  17. Elevation,
  18. }
  19. public partial class LogikalElevationSelection : Window
  20. {
  21. private void UpdateStatus(LogikalResponse response)
  22. {
  23. Status.Content = response.ToString();
  24. }
  25. private readonly Job? _job;
  26. private LogikalProject _project = new LogikalProject();
  27. private LogikalElevationSelectionType _type;
  28. private Func<LogikalProject, ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> _callback;
  29. public LogikalElevationSelection(Job? job, LogikalElevationSelectionType type, Func<LogikalProject, ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,LogikalGlass,LogikalLabour>[],bool> callback)
  30. {
  31. _type = type;
  32. InitializeComponent();
  33. _job = job;
  34. _callback = callback;
  35. Projects.Refresh(true, false);
  36. Phases.Refresh(true, false);
  37. Elevations.Options.MultiSelect = true;
  38. Elevations.Refresh(true, false);
  39. }
  40. private void Window_Loaded(object sender, RoutedEventArgs e)
  41. {
  42. if (LogikalClient.Instance.Settings.UseLogikalProjectNumber)
  43. {
  44. if (string.IsNullOrWhiteSpace(LogikalClient.Instance.Settings.ProjectPrefix))
  45. Projects.JobNumber = _job?.JobNumber ?? "";
  46. else if (_job?.JobNumber?.StartsWith(LogikalClient.Instance.Settings.ProjectPrefix) == true)
  47. Projects.JobNumber = _job?.JobNumber?.Substring(LogikalClient.Instance.Settings.ProjectPrefix.Length) ?? "";
  48. else
  49. Projects.JobNumber = "";
  50. Projects.Get();
  51. }
  52. else
  53. {
  54. if (LogikalProject.ParseReference(_job?.SourceRef, out Guid _projectid))
  55. {
  56. ProjectRow.Height = new GridLength(0);
  57. SplitterRow.Height = new GridLength(0);
  58. LogikalClient.Instance.GetProject(_projectid)
  59. .Success<LogikalProjectResponse<LogikalProject>>(response => { _project = response.Project; });
  60. Phases.ProjectID = _projectid;
  61. Elevations.ProjectID = _projectid;
  62. Phases.Get();
  63. }
  64. Projects.JobNumber = "";
  65. Projects.Get();
  66. }
  67. }
  68. private void Projects_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  69. {
  70. if (e.Rows?.Any() == true)
  71. {
  72. _project = Projects.Items[e.Rows[0].Index];
  73. GetPhases(_project.ID);
  74. }
  75. }
  76. private void GetPhases(Guid id)
  77. {
  78. Phases.ProjectID = id;
  79. Elevations.ProjectID = id;
  80. Phases.Get();
  81. }
  82. private void Phases_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  83. {
  84. var phase = e.Rows?.FirstOrDefault()?.Get<LogikalPhase, string>(x => x.ID) ?? "";
  85. GetElevations(phase);
  86. }
  87. private void GetElevations(string phase)
  88. {
  89. Elevations.Phase = phase;
  90. Elevations.Get();
  91. }
  92. private void Elevations_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  93. {
  94. var id = e.Rows?.FirstOrDefault()?.Get<LogikalElevationSummary, Guid>(x => x.ID) ?? Guid.Empty;
  95. OK.IsEnabled = id != Guid.Empty;
  96. }
  97. private void Projects_AfterRefresh(object sender, AfterRefreshEventArgs args)
  98. {
  99. // Projects.Width = Projects.Items.Count > 1
  100. // ? 250
  101. // : 0;
  102. //GetPhases(Projects.Items.FirstOrDefault()?.ID ?? Guid.Empty);
  103. }
  104. private void Phases_AfterRefresh(object sender, AfterRefreshEventArgs args)
  105. {
  106. // Phases.Width = Phases.Items.Count > 1
  107. // ? 200
  108. // : 0;
  109. //GetElevations(Phases.Items.FirstOrDefault()?.ID ?? "");
  110. }
  111. private void Cancel_Click(object sender, RoutedEventArgs e)
  112. {
  113. DialogResult = false;
  114. }
  115. private void OK_Click(object sender, RoutedEventArgs e)
  116. {
  117. bool close = false;
  118. var ids = Elevations.SelectedRows.Select(r => r.Get<LogikalElevationSummary, Guid>(c => c.ID)).ToArray();
  119. if (_type == LogikalElevationSelectionType.BOM)
  120. {
  121. LogikalClient.Instance.GetBillOfMaterials(Elevations.ProjectID, ids, true, true)
  122. .Always(UpdateStatus)
  123. .Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); })
  124. .Success<LogikalBOMResponse<LogikalBOM, LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>(
  125. response =>
  126. {
  127. close = _callback(_project,[response.BOM]);
  128. });
  129. }
  130. else
  131. {
  132. bool bok = true;
  133. LogikalClient.Instance.GetElevationDetails(Elevations.ProjectID, ids, true, true)
  134. .Always(UpdateStatus)
  135. //.Error(error => { MessageWindow.ShowMessage(error.Message, "Error"); })
  136. .Success<LogikalElevationDetailResponse<LogikalElevationDetail, LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent,
  137. LogikalGlass, LogikalLabour>>(
  138. response =>
  139. {
  140. bok = bok && _callback(_project,
  141. response.Elevations
  142. .OfType<ILogikalBOM<LogikalProductGroup, LogikalFinish, LogikalProfile, LogikalGasket, LogikalComponent, LogikalGlass, LogikalLabour>>()
  143. .ToArray());
  144. });
  145. close = bok;
  146. }
  147. if (close)
  148. DialogResult = true;
  149. }
  150. private bool CreateBOM(IEnumerable<IAwgFinish> finishes, IEnumerable<IAwgProfile> profiles, IEnumerable<IAwgGasket> gaskets, IEnumerable<IAwgComponent> components, IEnumerable<IAwgGlass> glass, IEnumerable<IAwgLabour> labour)
  151. //where TType : IAwgBOM<TFinish,TProfile,TGasket,TComponent,TGlass,TLabour>
  152. // where TFinish : IAwgFinish
  153. // where TProfile : IAwgProfile
  154. // where TGasket : IAwgGasket
  155. // where TComponent : IAwgComponent
  156. // where TGlass : IAwgGlass
  157. // where TLabour : IAwgLabour
  158. {
  159. return true;
  160. }
  161. }