DocumentApprovalControl.xaml.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. using InABox.Clients;
  2. using InABox.Core;
  3. using InABox.DynamicGrid;
  4. using InABox.WPF;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Data;
  13. using System.Windows.Documents;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Navigation;
  18. using System.Windows.Shapes;
  19. namespace InABox.Wpf
  20. {
  21. /// <summary>
  22. /// Interaction logic for DocumentApprovalControl.xaml
  23. /// </summary>
  24. public partial class DocumentApprovalControl : UserControl, IDocumentEditor
  25. {
  26. public delegate void MarkupSelected(IEntityDocument? document);
  27. public event MarkupSelected? OnMarkupSelected;
  28. public delegate void MarkupComplete(IEntityDocument? document);
  29. public event MarkupComplete? OnMarkupComplete;
  30. public delegate void Approved(IEntityDocument? document);
  31. public event Approved? OnApproved;
  32. public delegate void Rejected(IEntityDocument? document);
  33. public event Rejected? OnRejected;
  34. public enum ControlMode
  35. {
  36. Markup,
  37. Complete,
  38. Locked
  39. }
  40. ControlMode _mode;
  41. public ControlMode Mode
  42. {
  43. get => _mode;
  44. set
  45. {
  46. _mode = value;
  47. if (_mode == ControlMode.Markup)
  48. {
  49. markUpButton.Content = "Mark Up";
  50. markUpButton.IsEnabled = Document != null;
  51. approveButton.IsEnabled = Document != null;
  52. rejectButton.IsEnabled = Document != null;
  53. }
  54. else if (_mode == ControlMode.Complete)
  55. {
  56. markUpButton.Content = "Complete";
  57. markUpButton.IsEnabled = Document != null;
  58. approveButton.IsEnabled = false;
  59. rejectButton.IsEnabled = false;
  60. }
  61. else if (_mode == ControlMode.Locked)
  62. {
  63. markUpButton.Content = "Locked";
  64. markUpButton.IsEnabled = false;
  65. approveButton.IsEnabled = false;
  66. rejectButton.IsEnabled = false;
  67. }
  68. }
  69. }
  70. public void SetupButtons(bool markupVisible = true, bool approveVisible = true, bool rejectVisible = true)
  71. {
  72. markUpButton.Visibility = markupVisible? Visibility.Visible : Visibility.Collapsed;
  73. approveButton.Visibility = approveVisible? Visibility.Visible : Visibility.Collapsed;
  74. rejectButton.Visibility = rejectVisible? Visibility.Visible : Visibility.Collapsed;
  75. }
  76. private IEntityDocument? _document;
  77. public IEntityDocument? Document
  78. {
  79. get => _document;
  80. set
  81. {
  82. _document = value;
  83. Render();
  84. }
  85. }
  86. public DocumentApprovalControl()
  87. {
  88. InitializeComponent();
  89. Mode = ControlMode.Markup;
  90. }
  91. /// <summary>
  92. /// This currently only caters to PDFs - add to this if needed to account for other document types
  93. /// </summary>
  94. private void Render()
  95. {
  96. viewer.Children.Clear();
  97. if(Document is null)
  98. {
  99. return;
  100. }
  101. var table = new Client<Document>().Query(
  102. new Filter<Document>(x => x.ID).IsEqualTo(Document.DocumentLink.ID),
  103. new Columns<Document>(x => x.Data));
  104. var first = table.Rows.FirstOrDefault();
  105. if (first is null)
  106. return;
  107. var data = first.Get<Document, byte[]>(x => x.Data);
  108. var images = ImageUtils.RenderPDFToImages(data);
  109. foreach (var image in images)
  110. {
  111. viewer.Children.Add(new Image
  112. {
  113. Source = ImageUtils.LoadImage(image),
  114. Margin = new Thickness(0, 0, 0, 20)
  115. });
  116. }
  117. }
  118. private void MarkUpButton_Click(object sender, RoutedEventArgs e)
  119. {
  120. if (Mode == ControlMode.Markup)
  121. {
  122. Mode = ControlMode.Complete;
  123. MessageBox.Show("IMPORTANT - press save in your document editor, then press the Complete Button in PRS");
  124. OnMarkupSelected?.Invoke(Document);
  125. }
  126. else
  127. {
  128. OnMarkupComplete?.Invoke(Document);
  129. Mode = ControlMode.Markup;
  130. }
  131. }
  132. private void ApproveButton_Click(object sender, RoutedEventArgs e)
  133. {
  134. OnApproved?.Invoke(Document);
  135. }
  136. private void RejectButton_Click(object sender, RoutedEventArgs e)
  137. {
  138. OnRejected?.Invoke(Document);
  139. }
  140. }
  141. }