using InABox.Clients; using InABox.Core; using InABox.DynamicGrid; using InABox.WPF; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace InABox.Wpf { /// /// Interaction logic for DocumentApprovalControl.xaml /// public partial class DocumentApprovalControl : UserControl, IDocumentEditor { public delegate void MarkupSelected(IEntityDocument document); public event MarkupSelected OnMarkupSelected; public delegate void MarkupComplete(IEntityDocument document); public event MarkupComplete OnMarkupComplete; public delegate void Approved(IEntityDocument document); public event Approved OnApproved; public delegate void Rejected(IEntityDocument document); public event Rejected OnRejected; public enum ControlMode { Markup, Complete, Locked } ControlMode _mode; public ControlMode Mode { get => _mode; set { _mode = value; if (_mode == ControlMode.Markup) { markUpButton.Content = "Mark Up"; markUpButton.IsEnabled = Document != null; approveButton.IsEnabled = Document != null; rejectButton.IsEnabled = Document != null; } else if (_mode == ControlMode.Complete) { markUpButton.Content = "Complete"; markUpButton.IsEnabled = Document != null; approveButton.IsEnabled = false; rejectButton.IsEnabled = false; } else if (_mode == ControlMode.Locked) { markUpButton.Content = "Locked"; markUpButton.IsEnabled = false; approveButton.IsEnabled = false; rejectButton.IsEnabled = false; } } } public void SetupButtons(bool markupVisible = true, bool approveVisible = true, bool rejectVisible = true) { markUpButton.Visibility = markupVisible? Visibility.Visible : Visibility.Collapsed; approveButton.Visibility = approveVisible? Visibility.Visible : Visibility.Collapsed; rejectButton.Visibility = rejectVisible? Visibility.Visible : Visibility.Collapsed; } private IEntityDocument _document; public IEntityDocument Document { get => _document; set { _document = value; Render(); } } public DocumentApprovalControl() { InitializeComponent(); Mode = ControlMode.Markup; } /// /// This currently only caters to PDFs - add to this if needed to account for other document types /// private void Render() { viewer.Children.Clear(); var table = new Client().Query(new Filter(x => x.ID).IsEqualTo(_document.DocumentLink.ID)); if (!table.Rows.Any()) return; var data = table.Rows.FirstOrDefault().Get(x => x.Data); var images = ImageUtils.RenderPDFToImages(data); foreach (var image in images) { viewer.Children.Add(new Image { Source = ImageUtils.LoadImage(image), Margin = new Thickness(0, 0, 0, 20) }); } } private void MarkUpButton_Click(object sender, RoutedEventArgs e) { if (Mode == ControlMode.Markup) { Mode = ControlMode.Complete; MessageBox.Show("IMPORTANT - press save in your document editor, then press the Complete Button in PRS"); OnMarkupSelected?.Invoke(_document); } else { OnMarkupComplete?.Invoke(_document); Mode = ControlMode.Markup; } } private void ApproveButton_Click(object sender, RoutedEventArgs e) { OnApproved?.Invoke(_document); } private void RejectButton_Click(object sender, RoutedEventArgs e) { OnRejected?.Invoke(_document); } } }