MeetingPanel.xaml.cs 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Windows;
  6. using System.Windows.Controls;
  7. using System.Windows.Input;
  8. using System.Windows.Media.Imaging;
  9. using Comal.Classes;
  10. using InABox.Clients;
  11. using InABox.Core;
  12. using InABox.DynamicGrid;
  13. using InABox.Wpf;
  14. using Syncfusion.Windows.Controls;
  15. using System.ComponentModel;
  16. namespace PRSDesktop;
  17. public partial class MeetingPanel : UserControl, IPanel<Meeting>
  18. {
  19. private DynamicGrid<MeetingItem> MeetingItemGrid = new DynamicDataGrid<MeetingItem>();
  20. public MeetingPanel()
  21. {
  22. InitializeComponent();
  23. MeetingItemGrid.OnEditorValueChanged += MeetingItemGrid_OnEditorValueChanged;
  24. MeetingItemGrid.OnCustomiseEditor += MeetingItemGrid_OnCustomiseEditor;
  25. }
  26. #region IPanel
  27. public void Setup()
  28. {
  29. foreach (var column in MeetingModel.Columns)
  30. MeetingGrid.AddHiddenColumn(column.Property);
  31. MeetingGrid.Refresh(true, false);
  32. MeetingAssignments.Refresh(true, false);
  33. MeetingItemMotions.Refresh(true, false);
  34. MeetingItemDocuments.Refresh(true, false);
  35. MeetingItemTasks.Refresh(true, false);
  36. MeetingDocuments.Refresh(true, false);
  37. MeetingMotions.Refresh(true, false);
  38. MeetingTasks.Refresh(true, false);
  39. MeetingItems.Refresh(true, false);
  40. }
  41. public void Shutdown(CancelEventArgs? cancel)
  42. {
  43. }
  44. public void Refresh()
  45. {
  46. MeetingGrid.Refresh(false, true);
  47. }
  48. public string SectionName => "Meetings";
  49. public DataModel DataModel(Selection selection)
  50. {
  51. return new AutoDataModel<Meeting>(null);
  52. }
  53. public event DataModelUpdateEvent? OnUpdateDataModel;
  54. public bool IsReady { get; set; }
  55. public void CreateToolbarButtons(IPanelHost host)
  56. {
  57. }
  58. public Dictionary<string, object[]> Selected()
  59. {
  60. return new Dictionary<string, object[]>();
  61. }
  62. public void Heartbeat(TimeSpan time)
  63. {
  64. }
  65. #endregion
  66. private bool _meetingSelected = false;
  67. private TimeSpan _meetingstart = TimeSpan.Zero;
  68. private TimeSpan _meetingduration = TimeSpan.Zero;
  69. private TimeSpan _meetingfinish = TimeSpan.Zero;
  70. private bool _meetingitemSelected = false;
  71. private void Meetings_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  72. {
  73. CoreRow? row = e.Rows?.FirstOrDefault();
  74. _meetingSelected = row != null;
  75. var meeting = row?.ToObject<Meeting>() ?? new Meeting();
  76. _meetingstart = meeting.Time.Start;
  77. _meetingduration = meeting.Time.Duration;
  78. _meetingfinish = meeting.Time.Finish;
  79. MeetingGrid.InitialiseEditorForm(MeetingDetailsForm, new Meeting[] { meeting });
  80. _meetingitemSelected = false;
  81. MeetingItemGrid.InitialiseEditorForm(MeetingItemDetailsForm, new MeetingItem[] { new MeetingItem() });
  82. var model = new MeetingModel(row);
  83. MeetingItems.Model = model;
  84. MeetingItems.Refresh(false, true);
  85. MeetingAssignments.Model = model;
  86. MeetingAssignments.Refresh(false,true);
  87. MeetingItemTasks.MeetingID = meeting.ID;
  88. MeetingMotions.Model = model;
  89. MeetingMotions.Refresh(false, true);
  90. MeetingTasks.Model = model;
  91. MeetingTasks.Refresh(false, true);
  92. MeetingDocuments.Model = model;
  93. MeetingDocuments.Refresh(false, true);
  94. }
  95. private void MeetingDetailsForm_OnBeforeLoad(IDynamicEditorForm form)
  96. {
  97. form.ReadOnly = !_meetingSelected;
  98. }
  99. private void Meetings_OnCustomiseEditor(IDynamicEditorForm sender, Meeting[]? items, DynamicGridColumn column, BaseEditor editor)
  100. {
  101. if (String.Equals(column.ColumnName, "Time"))
  102. editor.Editable = sender.ReadOnly ? Editable.Disabled : Editable.Enabled;
  103. }
  104. private Dictionary<string, object?> Meetings_OnEditorValueChanged(IDynamicEditorForm sender, string name, object value)
  105. {
  106. var item = MeetingDetailsForm.Items.FirstOrDefault();
  107. if (item is Meeting meeting)
  108. {
  109. if (String.Equals(name, "Time.Start") && TimeSpan.Equals(meeting.Time.Start, _meetingstart))
  110. return new Dictionary<string, object?>();
  111. if (String.Equals(name, "Time.Duration") && TimeSpan.Equals(meeting.Time.Duration, _meetingduration))
  112. return new Dictionary<string, object?>();
  113. if (String.Equals(name, "Time.Finish") && TimeSpan.Equals(meeting.Time.Finish, _meetingfinish))
  114. return new Dictionary<string, object?>();
  115. new Client<Meeting>().Save(meeting, "");
  116. if (MeetingGrid.SelectedRows.Any())
  117. {
  118. var row = MeetingGrid.SelectedRows[0];
  119. MeetingGrid.Data.FillRow(row, meeting);
  120. MeetingGrid.InvalidateRow(row);
  121. }
  122. _meetingstart = meeting.Time.Start;
  123. _meetingduration = meeting.Time.Duration;
  124. _meetingfinish = meeting.Time.Finish;
  125. }
  126. return new Dictionary<string, object?>();
  127. }
  128. private void MeetingItemGrid_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  129. {
  130. var nodeID = e.Rows?.FirstOrDefault()?.Get<MeetingItem, Guid>(x => x.ID) ?? Guid.Empty;
  131. _meetingitemSelected = nodeID != Guid.Empty;
  132. MeetingItemMotions.MeetingItemID = nodeID;
  133. MeetingItemMotions.Refresh(false,true);
  134. MeetingItemDocuments.MeetingItemID = nodeID;
  135. MeetingItemDocuments.Refresh(false, true);
  136. MeetingItemTasks.MeetingItemID = nodeID;
  137. MeetingItemTasks.Refresh(false, true);
  138. var row = nodeID != Guid.Empty
  139. ? MeetingItems.Data?.Rows.FirstOrDefault(r => r.Get<MeetingItem, Guid>(x => x.ID) == nodeID)
  140. : null;
  141. var meetingitem = row != null ? row.ToObject<MeetingItem>() : new MeetingItem();
  142. MeetingItemGrid.InitialiseEditorForm(MeetingItemDetailsForm, new MeetingItem[] { meetingitem });
  143. }
  144. private void MeetingItemDetailsForm_OnBeforeLoad(IDynamicEditorForm form)
  145. {
  146. form.ReadOnly = !_meetingSelected || !_meetingitemSelected;
  147. }
  148. private void MeetingItemGrid_OnCustomiseEditor(IDynamicEditorForm sender, MeetingItem[] items, DynamicGridColumn column, BaseEditor editor)
  149. {
  150. }
  151. private Dictionary<string, object?> MeetingItemGrid_OnEditorValueChanged(object sender, string name, object value)
  152. {
  153. var item = MeetingItemDetailsForm.Items.FirstOrDefault();
  154. if(item is MeetingItem meetingitem)
  155. {
  156. Client.Save(meetingitem, "");
  157. var row = MeetingItems.Data.Rows.FirstOrDefault(r => r.Get<MeetingItem, Guid>(c => c.ID) == meetingitem.ID);
  158. MeetingItems.Data.FillRow(row, meetingitem);
  159. MeetingItems.InvalidateRow(row);
  160. }
  161. return new Dictionary<string, object?>();
  162. }
  163. private void MeetingItemTasks_OnOnChanged(object sender, EventArgs args)
  164. {
  165. MeetingTasks.Refresh(false, true);
  166. }
  167. private void MeetingItemMotions_OnOnChanged(object? sender, EventArgs e)
  168. {
  169. MeetingMotions.Refresh(false, true);
  170. }
  171. #region MeetingItemDocuments
  172. private void MeetingItemDocuments_OnChanged(object sender, EventArgs args)
  173. {
  174. MeetingDocuments.Refresh(false, true);
  175. }
  176. private void MeetingDocuments_OnOnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  177. {
  178. var doc = e.Rows?.FirstOrDefault()?.ToObject<MeetingItemDocument>();
  179. if (doc == null)
  180. {
  181. DocumentSplitPanel.Detail = null;
  182. return;
  183. }
  184. IDocumentEditor editor = null;
  185. var extension = Path.GetExtension(doc.DocumentLink.FileName).ToLower();
  186. if (extension.Equals(".pdf"))
  187. {
  188. var pdf = new PDFEditorControl();
  189. //pdf.PrintAllowed = PrintAllowed;
  190. pdf.SaveAllowed = false;
  191. pdf.ButtonsVisible = false;
  192. pdf.Watermark = "";
  193. editor = pdf;
  194. }
  195. else if (extension.Equals(".png") || extension.Equals(".bmp") || extension.Equals(".jpg") || extension.Equals(".jpeg"))
  196. {
  197. editor = new ImageEditorControl();
  198. }
  199. else if (extension.Equals(".xls") || extension.Equals(".xlsx") )
  200. {
  201. editor = new SpreadsheetEditorControl();
  202. }
  203. else if (extension.Equals(".doc") || extension.Equals(".docx") || extension.Equals(".rtf") || extension.Equals(".html") || extension.Equals(".htm") || extension.Equals(".txt"))
  204. {
  205. editor = new RTFEditorControl();
  206. }
  207. if (editor != null)
  208. {
  209. DocumentSplitPanel.Detail = editor as FrameworkElement;
  210. editor.Document = doc;
  211. }
  212. else
  213. {
  214. DocumentSplitPanel.Detail = null;
  215. }
  216. }
  217. #endregion
  218. }