Equipment.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. [UserTracking("Equipment")]
  8. public class Equipment : Entity, IPersistent, IRemotable, ISchedulable, ILicense<EquipmentLicense>, IEquipment, IExportable, IImportable, IOneToMany<Customer>
  9. {
  10. [UniqueCodeEditor(Visible = Visible.Default, Editable = Editable.Enabled)]
  11. [EditorSequence(1)]
  12. public string Code { get; set; }
  13. [TextBoxEditor]
  14. [EditorSequence(2)]
  15. public string Description { get; set; }
  16. [MemoEditor]
  17. [EditorSequence(3)]
  18. public string Notes { get; set; }
  19. [EditorSequence(4)]
  20. public string Type { get; set; }
  21. [EditorSequence(5)]
  22. public EquipmentGroupLink Group { get; set; }
  23. [Obsolete("Replaced by Group")]
  24. public EquipmentGroupLink GroupLink
  25. {
  26. get => Group;
  27. set { }
  28. }
  29. [EditorSequence(6)]
  30. public ImageDocumentLink SpecificationSheet { get; set; }
  31. [DateEditor]
  32. [EditorSequence(7)]
  33. public DateTime Purchased { get; set; }
  34. [CurrencyEditor]
  35. [EditorSequence(8)]
  36. public double PurchasePrice { get; set; }
  37. [DateEditor]
  38. [EditorSequence(9)]
  39. public DateTime Disposed { get; set; }
  40. [CurrencyEditor]
  41. [EditorSequence(10)]
  42. public double DisposalPrice { get; set; }
  43. [EditorSequence(11)]
  44. public string SerialNumber { get; set; }
  45. [Obsolete("Replaced with ManufacturedDate")]
  46. [NullEditor]
  47. public int YearOfManufacture { get; set; }
  48. [DateEditor]
  49. [EditorSequence(12)]
  50. public DateTime ManufacturedDate { get; set; }
  51. [EditorSequence(13)]
  52. public CustomerLink Customer { get; set; }
  53. [EditorSequence(14)]
  54. public bool Private { get; set; }
  55. [EditorSequence(15)]
  56. public EquipmentFuelTypeLink FuelType { get; set; }
  57. [EntityRelationship(DeleteAction.SetNull)]
  58. [EditorSequence("Counters", 1)]
  59. public GPSTrackerLink Tracker { get; set; }
  60. [Obsolete("Replaced by Tracker")]
  61. public GPSTrackerLink TrackerLink
  62. {
  63. get => Tracker;
  64. set { }
  65. }
  66. [EditorSequence("Counters", 2)]
  67. public double Hours { get; set; }
  68. [EditorSequence("Counters", 3)]
  69. public double Distance { get; set; }
  70. [EditorSequence("Counters", 4)]
  71. public double Counter1 { get; set; }
  72. [EditorSequence("Counters", 5)]
  73. public double Counter2 { get; set; }
  74. [EditorSequence("Counters", 6)]
  75. public double Counter3 { get; set; }
  76. [EditorSequence("Counters", 7)]
  77. public double Counter4 { get; set; }
  78. [EditorSequence("Counters", 8)]
  79. public double Counter5 { get; set; }
  80. [EditorSequence("Counters", 9)]
  81. public DigitalKeyLink DigitalKey { get; set; }
  82. [ComplexFormula(typeof(NextScheduleFormula<Equipment>))]
  83. [DateTimeEditor(Editable = Editable.Hidden)]
  84. public DateTime NextSchedule { get; set; }
  85. [IntegerEditor(Editable = Editable.Hidden)]
  86. public int ActiveSchedules { get; set; }
  87. private class DocumentCountFormula : ComplexFormulaGenerator<Equipment, int>
  88. {
  89. public override IComplexFormulaNode<Equipment, int> GetFormula() =>
  90. Count<EquipmentDocument, Guid>(
  91. x => x.Property(x => x.ID))
  92. .WithLink(x => x.Entity.ID, x => x.ID);
  93. }
  94. [ComplexFormula(typeof(DocumentCountFormula))]
  95. [IntegerEditor(Editable = Editable.Hidden)]
  96. public int Documents { get; set; }
  97. private class KanbanCountFormula : ComplexFormulaGenerator<Equipment, int>
  98. {
  99. public override IComplexFormulaNode<Equipment, int> GetFormula() =>
  100. Count<Kanban, Guid>(x => x.Property(x => x.ID))
  101. .WithLink(x => x.Equipment.ID, x => x.ID);
  102. }
  103. [ComplexFormula(typeof(KanbanCountFormula))]
  104. [IntegerEditor(Editable = Editable.Hidden)]
  105. public int Kanbans { get; set; }
  106. public override string ToString()
  107. {
  108. return string.Format("{0}: {1}", Code, Description);
  109. }
  110. static Equipment()
  111. {
  112. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Hours, x => x.Hours);
  113. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Distance, x => x.Distance);
  114. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Counter1, x => x.Counter1);
  115. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Counter2, x => x.Counter2);
  116. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Counter3, x => x.Counter3);
  117. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Counter4, x => x.Counter4);
  118. LinkedProperties.Register<Equipment, GPSTrackerLink, double>(x => x.Tracker, x => x.Counter5, x => x.Counter5);
  119. DefaultColumns.Add<Equipment>(x => x.Code);
  120. DefaultColumns.Add<Equipment>(x => x.Description);
  121. DefaultColumns.Add<Equipment>(x => x.Type, width: 120, alignment: Alignment.MiddleCenter);
  122. DefaultColumns.Add<Equipment>(x => x.Group.Code, caption: "Group");
  123. DefaultColumns.Add<Equipment>(x => x.SerialNumber);
  124. DefaultColumns.Add<Equipment>(x => x.Tracker.DeviceID, caption: "GPS Tracker");
  125. DefaultColumns.Add<Equipment>(x => x.Tracker.Location.Address, caption: "Address");
  126. DefaultColumns.Add<Equipment>(x => x.Tracker.Location.Latitude, caption: "Latitude");
  127. DefaultColumns.Add<Equipment>(x => x.Tracker.Location.Longitude, caption: "Longitude");
  128. }
  129. }
  130. }