DeliveryItem.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq.Expressions;
  4. using InABox.Core;
  5. namespace Comal.Classes
  6. {
  7. public class DeliveryItemDocumentCount : CoreAggregate<DeliveryItem, DeliveryDocument, Guid>
  8. {
  9. public override Expression<Func<DeliveryDocument, Guid>> Aggregate => x => x.ID;
  10. public override AggregateCalculation Calculation => AggregateCalculation.Count;
  11. public override Dictionary<Expression<Func<DeliveryDocument, object>>, Expression<Func<DeliveryItem, object>>> Links =>
  12. new Dictionary<Expression<Func<DeliveryDocument, object>>, Expression<Func<DeliveryItem, object>>>()
  13. {
  14. { DeliveryDocument => DeliveryDocument.EntityLink.ID, DeliveryItem => DeliveryItem.Delivery.ID }
  15. };
  16. }
  17. public class DeliveryItemArea : IFormula<DeliveryItem, double>
  18. {
  19. public Expression<Func<DeliveryItem, double>> Value => x => x.Height;
  20. public Expression<Func<DeliveryItem, double>>[] Modifiers => new Expression<Func<DeliveryItem, double>>[] { x => x.Width, x => 0.000001F };
  21. public FormulaOperator Operator => FormulaOperator.Multiply;
  22. public FormulaType Type => FormulaType.Virtual;
  23. }
  24. public class DeliveryItemVolume : IFormula<DeliveryItem, double>
  25. {
  26. public Expression<Func<DeliveryItem, double>> Value => x => x.Height;
  27. public Expression<Func<DeliveryItem, double>>[] Modifiers => new Expression<Func<DeliveryItem, double>>[] { x => x.Width, x => x.Length };
  28. public FormulaOperator Operator => FormulaOperator.Multiply;
  29. public FormulaType Type => FormulaType.Virtual;
  30. }
  31. public enum DeliveryItemType
  32. {
  33. ManufacturedItem,
  34. RequisitionItem,
  35. TreatmentItem,
  36. EquipmentItem,
  37. OtherItem
  38. }
  39. [UserTracking(typeof(Delivery))]
  40. [Caption("Delivery Items")]
  41. public class DeliveryItem : Entity, IPersistent, IRemotable, IOneToMany<Job>, IOneToMany<Delivery>,
  42. IOneToMany<ManufacturingPacket>, IOneToMany<Shipment>, ILicense<LogisticsLicense>, IExportable
  43. {
  44. // If Packet then Packet.Title
  45. // If requisition then Requisition.Title
  46. public string Title { get; set; }
  47. // if PAcket, then Packet.Description
  48. // If Requitision then BOX X OF Y
  49. [TextBoxEditor]
  50. public string Description { get; set; } = "";
  51. // If Packet, then Packet.Refreence
  52. // If Requisition then Requi.Employee
  53. [TextBoxEditor]
  54. public string Reference { get; set; }
  55. [TextBoxEditor(Editable = Editable.Hidden)]
  56. [SecondaryIndex]
  57. public string Barcode { get; set; }
  58. public int Sequence { get; set; }
  59. public string Piece { get; set; }
  60. [SecondaryIndex]
  61. public DateTime DeliveredDate { get; set; }
  62. public DateTime InstalledDate { get; set; }
  63. public DateTime DueDate { get; set; }
  64. public JobLink JobLink { get; set; }
  65. private class ManufacturingPacketLookup : LookupDefinitionGenerator<ManufacturingPacket, DeliveryItem>
  66. {
  67. // Overriding the default ManufacturingPacket lookup to have no restrictions.
  68. public override Filter<ManufacturingPacket> DefineFilter(DeliveryItem[] items)
  69. {
  70. return new Filter<ManufacturingPacket>().All();
  71. }
  72. }
  73. [LookupDefinition(typeof(ManufacturingPacketLookup))]
  74. [EntityRelationship(DeleteAction.Cascade)]
  75. public ManufacturingPacketLink ManufacturingPacketLink { get; set; }
  76. public RequisitionLink RequisitionLink { get; set; }
  77. public SetoutLink SetoutLink { get; set; }
  78. public ShipmentLink ShipmentLink { get; set; }
  79. [CodeEditor(Editable = Editable.Disabled)]
  80. public string ShipmentCode { get; set; }
  81. //public PackableList<CoreAttribute> CustomAttributes { get; set; }
  82. [MemoEditor]
  83. public string Attributes { get; set; } = "";
  84. public Location Location { get; set; }
  85. public DeliveryLink Delivery { get; set; }
  86. public PurchaseOrderItemLink OrderItem { get; set; }
  87. public double Cost { get; set; }
  88. public double Height { get; set; }
  89. public double Width { get; set; }
  90. public double Length { get; set; }
  91. [DoubleEditor(Editable = Editable.Hidden)]
  92. [Formula(typeof(DeliveryItemArea))]
  93. public double Area { get; set; }
  94. [DoubleEditor(Editable = Editable.Hidden)]
  95. [Formula(typeof(DeliveryItemVolume))]
  96. public double Volume { get; set; }
  97. [Aggregate(typeof(DeliveryItemDocumentCount))]
  98. [IntegerEditor(Editable = Editable.Hidden)]
  99. public int Documents { get; set; }
  100. [EnumLookupEditor(typeof(DeliveryItemType))]
  101. public DeliveryItemType Type { get; set; } = DeliveryItemType.OtherItem;
  102. public override string ToString()
  103. {
  104. return string.Format("{0} : {1}", Barcode, Title);
  105. }
  106. static DeliveryItem()
  107. {
  108. LinkedProperties.Register<DeliveryItem, ShipmentLink, String>(x=>x.ShipmentLink, x => x.Code, x => x.ShipmentCode);
  109. }
  110. }
  111. }