DocumentApprovalControl.xaml.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. }
  39. ControlMode _mode;
  40. public ControlMode Mode
  41. {
  42. get => _mode;
  43. set
  44. {
  45. _mode = value;
  46. if (_mode == ControlMode.Markup)
  47. {
  48. markUpButton.Content = "Mark Up";
  49. markUpButton.IsEnabled = Document != null;
  50. approveButton.IsEnabled = Document != null;
  51. rejectButton.IsEnabled = Document != null;
  52. }
  53. else if (_mode == ControlMode.Complete)
  54. {
  55. markUpButton.Content = "Complete";
  56. approveButton.IsEnabled = false;
  57. rejectButton.IsEnabled = false;
  58. }
  59. }
  60. }
  61. public void SetupButtons(bool markupVisible = true, bool approveVisible = true, bool rejectVisible = true)
  62. {
  63. markUpButton.Visibility = markupVisible? Visibility.Visible : Visibility.Collapsed;
  64. approveButton.Visibility = approveVisible? Visibility.Visible : Visibility.Collapsed;
  65. rejectButton.Visibility = rejectVisible? Visibility.Visible : Visibility.Collapsed;
  66. }
  67. private IEntityDocument _document;
  68. public IEntityDocument Document
  69. {
  70. get => _document;
  71. set
  72. {
  73. _document = value;
  74. Mode = ControlMode.Markup;
  75. Render();
  76. }
  77. }
  78. public DocumentApprovalControl()
  79. {
  80. InitializeComponent();
  81. Mode = ControlMode.Markup;
  82. }
  83. private void Render()
  84. {
  85. viewer.Children.Clear();
  86. var table = new Client<Document>().Query(new Filter<Document>(x => x.ID).IsEqualTo(_document.DocumentLink.ID));
  87. if (!table.Rows.Any())
  88. return;
  89. var data = table.Rows.FirstOrDefault().Get<Document, byte[]>(x => x.Data);
  90. var images = ImageUtils.RenderPDFToImages(data);
  91. foreach (var image in images)
  92. {
  93. viewer.Children.Add(new Image
  94. {
  95. Source = ImageUtils.LoadImage(image),
  96. Margin = new Thickness(0, 0, 0, 20)
  97. });
  98. }
  99. }
  100. private void MarkUpButton_Click(object sender, RoutedEventArgs e)
  101. {
  102. if (Mode == ControlMode.Markup)
  103. {
  104. Mode = ControlMode.Complete;
  105. MessageBox.Show("IMPORTANT - please save and overwrite the original file in the setouts folder when done, and press complete to refresh");
  106. OnMarkupSelected?.Invoke(_document);
  107. }
  108. else
  109. {
  110. OnMarkupComplete?.Invoke(_document);
  111. Mode = ControlMode.Markup;
  112. }
  113. }
  114. private void ApproveButton_Click(object sender, RoutedEventArgs e)
  115. {
  116. OnApproved?.Invoke(_document);
  117. }
  118. private void RejectButton_Click(object sender, RoutedEventArgs e)
  119. {
  120. OnRejected?.Invoke(_document);
  121. }
  122. }
  123. }