JobRequisitionPanel.xaml.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Drawing.Imaging;
  6. using System.IO;
  7. using System.Linq;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using com.healthmarketscience.jackcess.impl;
  11. using Comal.Classes;
  12. using InABox.Clients;
  13. using InABox.Configuration;
  14. using InABox.Core;
  15. using InABox.DynamicGrid;
  16. using InABox.Wpf;
  17. using Syncfusion.Pdf.Parsing;
  18. namespace PRSDesktop;
  19. public class JobRequisitionPanelSettings : IUserConfigurationSettings, ISplitPanelSettings
  20. {
  21. public DynamicSplitPanelView ViewType { get; set; } = DynamicSplitPanelView.Combined;
  22. public int TabIndex { get; set; }
  23. public double AnchorWidth { get; set; } = 500;
  24. }
  25. /// <summary>
  26. /// Interaction logic for JobMaterialPanel.xaml
  27. /// </summary>
  28. public partial class JobRequisitionPanel : UserControl, IPanel<JobMaterial>, IMasterDetailControl<Job>
  29. {
  30. private JobRequisitionPanelSettings Settings;
  31. public JobRequisitionPanel()
  32. {
  33. InitializeComponent();
  34. }
  35. private void LoadSettings()
  36. {
  37. Settings = new UserConfiguration<JobRequisitionPanelSettings>().Load();
  38. SplitPanel.AnchorWidth = Settings.AnchorWidth;
  39. SplitPanel.View = Settings.ViewType;
  40. SetDetailDisplay();
  41. }
  42. private void SetDetailDisplay()
  43. {
  44. RequisitionsColumn.Width = Settings.ViewType == DynamicSplitPanelView.Combined
  45. ? new GridLength(1, GridUnitType.Star)
  46. : new GridLength(0, GridUnitType.Pixel);
  47. SummaryColumn.Width = Settings.ViewType == DynamicSplitPanelView.Detail
  48. ? new GridLength(1, GridUnitType.Star)
  49. : new GridLength(0, GridUnitType.Pixel);
  50. }
  51. protected void SaveSettings()
  52. {
  53. Settings.AnchorWidth = SplitPanel.AnchorWidth;
  54. Settings.ViewType = SplitPanel.View;
  55. Settings.SaveUser();
  56. }
  57. public Job? Master
  58. {
  59. get => Requisitions.Master;
  60. set
  61. {
  62. Requisitions.Master = value;
  63. Summary.JobID = value?.ID;
  64. }
  65. }
  66. public bool IsReady { get; set; }
  67. public event DataModelUpdateEvent? OnUpdateDataModel;
  68. public void CreateToolbarButtons(IPanelHost host)
  69. {
  70. }
  71. public void Setup()
  72. {
  73. LoadSettings();
  74. Requisitions.Refresh(true, false);
  75. Summary.Refresh(true,false);
  76. Items.Refresh(true, false);
  77. }
  78. public void Shutdown(CancelEventArgs? cancel)
  79. {
  80. }
  81. public void Refresh()
  82. {
  83. if (!IsReady)
  84. return;
  85. if (SplitPanel.View == DynamicSplitPanelView.Detail)
  86. Summary.Refresh(false,true);
  87. else
  88. Requisitions.Refresh(false, true);
  89. }
  90. public string SectionName => "Job Requisitions";
  91. public DataModel DataModel(Selection selection)
  92. {
  93. var ids = Requisitions.ExtractValues(x => x.ID, selection).ToArray();
  94. return new AutoDataModel<JobRequisition>(new Filter<JobRequisition>(c => c.ID).InList(ids));
  95. }
  96. public Dictionary<string, object[]> Selected()
  97. {
  98. return new Dictionary<string, object[]>
  99. {
  100. { typeof(JobRequisition).EntityName(), Requisitions.SelectedRows }
  101. };
  102. }
  103. public void Heartbeat(TimeSpan time)
  104. {
  105. }
  106. private void Requisitions_OnSelectItem(object sender, DynamicGridSelectionEventArgs e)
  107. {
  108. Items.Master = e.Rows?.FirstOrDefault()?.ToObject<JobRequisition>();
  109. Items.Refresh(false, true);
  110. }
  111. private void SplitPanel_OnChanged(object sender, DynamicSplitPanelSettings e)
  112. {
  113. var changedView = e.View != Settings.ViewType;
  114. SaveSettings();
  115. if (changedView)
  116. {
  117. SetDetailDisplay();
  118. Refresh();
  119. }
  120. }
  121. }