DocumentApprovalControl.xaml.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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. var table = new Client<Document>().Query(new Filter<Document>(x => x.ID).IsEqualTo(_document.DocumentLink.ID));
  98. if (!table.Rows.Any())
  99. return;
  100. var data = table.Rows.FirstOrDefault().Get<Document, byte[]>(x => x.Data);
  101. var images = ImageUtils.RenderPDFToImages(data);
  102. foreach (var image in images)
  103. {
  104. viewer.Children.Add(new Image
  105. {
  106. Source = ImageUtils.LoadImage(image),
  107. Margin = new Thickness(0, 0, 0, 20)
  108. });
  109. }
  110. }
  111. private void MarkUpButton_Click(object sender, RoutedEventArgs e)
  112. {
  113. if (Mode == ControlMode.Markup)
  114. {
  115. Mode = ControlMode.Complete;
  116. MessageBox.Show("IMPORTANT - press save in your document editor, then press the Complete Button in PRS");
  117. OnMarkupSelected?.Invoke(_document);
  118. }
  119. else
  120. {
  121. OnMarkupComplete?.Invoke(_document);
  122. Mode = ControlMode.Markup;
  123. }
  124. }
  125. private void ApproveButton_Click(object sender, RoutedEventArgs e)
  126. {
  127. OnApproved?.Invoke(_document);
  128. }
  129. private void RejectButton_Click(object sender, RoutedEventArgs e)
  130. {
  131. OnRejected?.Invoke(_document);
  132. }
  133. }
  134. }