DynamicScheduleEditorColumn.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using System;
  2. using System.Linq;
  3. using System.Windows;
  4. using System.Windows.Media.Imaging;
  5. using Comal.Classes;
  6. using InABox.Clients;
  7. using InABox.Core;
  8. using InABox.DynamicGrid;
  9. using InABox.WPF;
  10. using PRS.Shared;
  11. namespace PRSDesktop
  12. {
  13. internal class DynamicScheduleEditorColumn<T> : DynamicImageColumn where T : Entity, IPersistent, IRemotable, ISchedulable, new()
  14. {
  15. private readonly BitmapImage bitmap_disabled = Resources.clock.AsGrayScale().AsBitmapImage();
  16. private readonly BitmapImage bitmap_enabled = Resources.clock.AsBitmapImage();
  17. private readonly BitmapImage bitmap_header = Resources.clock.AsBitmapImage();
  18. public DynamicScheduleEditorColumn() : base(r => null)
  19. {
  20. Image = ScheduleImage;
  21. Action = EditSchedule;
  22. Filters = new[] { "Active Schedules", "No/Inactive Schedules" };
  23. FilterRecord = ScheduleFilter;
  24. }
  25. private bool ScheduleFilter(CoreRow row, string[] filter)
  26. {
  27. int schedules = row.Get<T, int>(x => x.ActiveSchedules);
  28. if (filter.Contains("Active Schedules") && (schedules > 0))
  29. return true;
  30. if (filter.Contains("No/Inactive Schedules") && (schedules == 0))
  31. return true;
  32. return false;
  33. }
  34. private BitmapImage ScheduleImage(CoreRow? row)
  35. {
  36. if (row == null)
  37. return bitmap_header;
  38. var isenabled = row.Get<T, int>(x => x.ActiveSchedules) > 0;
  39. return isenabled ? bitmap_enabled : bitmap_disabled;
  40. }
  41. private bool EditSchedule(CoreRow? row)
  42. {
  43. if(row is null)
  44. {
  45. return false;
  46. }
  47. var id = row.Get<T, Guid>(x => x.ID);
  48. var item = new Client<T>().Load(new Filter<T>(x => x.ID).IsEqualTo(id)).FirstOrDefault();
  49. if(item is null)
  50. {
  51. Logger.Send(LogType.Error, "", $"{typeof(T)} with ID {id} does not exist!");
  52. MessageBox.Show("Error opening schedule.");
  53. return false;
  54. }
  55. var form = new ScheduleForm(item);
  56. form.ShowDialog();
  57. return true;
  58. }
  59. }
  60. }