JobDetailModel.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using System.Linq;
  3. using Comal.Classes;
  4. using InABox.Core;
  5. using System.Diagnostics.CodeAnalysis;
  6. namespace comal.timesheets
  7. {
  8. public class JobDetailModel : DetailModel<JobDetailModel,JobDetailShell,Job>
  9. {
  10. public JobDetailModel(IModelHost host, Func<Filter<Job>> filter, bool transient = false) : base(host, filter, transient)
  11. {
  12. }
  13. public JobDetailModel(IModelHost host, Func<Filter<Job>> filter, [NotNull] string filename) : base(host, filter, filename)
  14. {
  15. }
  16. protected override void Initialize()
  17. {
  18. new JobDeliveryShell();
  19. new JobEquipmentShell();
  20. new JobITPShell();
  21. new JobKanbanShell();
  22. new JobDetailFormShell();
  23. new JobDocumentShell();
  24. base.Initialize();
  25. Deliveries = new JobDeliveryShell[] { };
  26. Equipment = new JobEquipmentShell[] { };
  27. ITPs = new JobITPShell[] { };
  28. Kanbans = new JobKanbanShell[] { };
  29. Forms = new JobDetailFormShell[] { };
  30. Documents = new JobDocumentShell[] { };
  31. DocumentFolders = new DynamicTreeNodes();
  32. }
  33. // public override Columns<(.+)> Columns => JobDetailShell.Columns.Columns;
  34. public JobDeliveryShell[] Deliveries { get; private set; }
  35. public JobEquipmentShell[] Equipment { get; private set; }
  36. public JobITPShell[] ITPs { get; private set; }
  37. public JobKanbanShell[] Kanbans { get; private set; }
  38. public JobDetailFormShell[] Forms { get; private set; }
  39. public JobDocumentShell[] Documents { get; private set; }
  40. public DynamicTreeNodes DocumentFolders { get; private set; }
  41. public override void BeforeLoad(MultiQuery query)
  42. {
  43. base.BeforeLoad(query);
  44. query.Add(
  45. new Filter<Delivery>(x=>x.Job.ID).InQuery(Filter(), x=>x.ID),
  46. JobDeliveryShell.Columns.Columns);
  47. query.Add<JobEquipment>(
  48. new Filter<JobEquipment>(x=>x.JobLink.ID).InQuery(Filter(), x=>x.ID),
  49. JobEquipmentShell.Columns.Columns);
  50. query.Add(
  51. new Filter<JobITP>(x=>x.Job.ID).InQuery(Filter(), x=>x.ID),
  52. JobITPShell.Columns.Columns);
  53. query.Add(
  54. new Filter<Kanban>(x=>x.JobLink.ID).InQuery(Filter(), x=>x.ID),
  55. JobKanbanShell.Columns.Columns);
  56. query.Add(
  57. new Filter<JobForm>(x=>x.Parent.ID).InQuery(Filter(), x=>x.ID),
  58. JobDetailFormShell.Columns.Columns);
  59. query.Add(
  60. new Filter<JobDocumentSetMileStoneFile>(x=>x.EntityLink.DocumentSet.Job.ID).InQuery(Filter(), x=>x.ID),
  61. JobDocumentShell.Columns.Columns);
  62. query.Add(
  63. new Filter<JobDocumentSetFolder>(x=>x.Job.ID).InQuery(Filter(), x=>x.ID),
  64. JobDocumentSetFolderShell.Columns.Columns);
  65. }
  66. public override void AfterLoad(MultiQuery query)
  67. {
  68. base.AfterLoad(query);
  69. Deliveries = query.Get<Delivery>()
  70. .Rows
  71. .Select(x => new JobDeliveryShell() { Row = x, Parent = this })
  72. .ToArray();
  73. Equipment = query.Get<JobEquipment>()
  74. .Rows
  75. .Select(x => new JobEquipmentShell() { Row = x, Parent = this })
  76. .ToArray();
  77. ITPs = query.Get<JobITP>()
  78. .Rows
  79. .Select(x => new JobITPShell() { Row = x, Parent = this })
  80. .ToArray();
  81. Kanbans = query.Get<Kanban>()
  82. .Rows
  83. .Select(x => new JobKanbanShell() { Row = x, Parent = this })
  84. .ToArray();
  85. Forms = query.Get<JobForm>()
  86. .Rows
  87. .Select(x => new JobDetailFormShell() { Row = x, Parent = this })
  88. .ToArray();
  89. Documents = query.Get<JobDocumentSetMileStoneFile>()
  90. .Rows
  91. .Select(x => new JobDocumentShell() { Row = x, Parent = this })
  92. .ToArray();
  93. DocumentFolders.Load<JobDocumentSetFolder>(
  94. query.Get<JobDocumentSetFolder>(),
  95. x=>x.ID,
  96. x=>x.Parent.ID,
  97. x=>x.Name
  98. );
  99. var roots = DocumentFolders.GetChilden(Guid.Empty);
  100. foreach (var root in roots)
  101. root.Parent = CoreUtils.FullGuid;
  102. DocumentFolders.Add(CoreUtils.FullGuid, Guid.Empty).Description = "All Folders";
  103. }
  104. }
  105. }