JobRequisitionItem.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using InABox.Clients;
  6. using InABox.Core;
  7. using PRSClasses;
  8. namespace Comal.Classes
  9. {
  10. public enum JobRequisitionItemStatus
  11. {
  12. NotChecked,
  13. Allocated,
  14. TreatmentRequired,
  15. OrderRequired,
  16. TreatmentOnOrder,
  17. OnOrder,
  18. Received,
  19. TreatmentReceived,
  20. Cancelled,
  21. Archived
  22. }
  23. public class JobRequisitionItemTotalQtyFormula : IFormula<JobRequisitionItem, double>
  24. {
  25. public Expression<Func<JobRequisitionItem, double>> Value => x => x.Qty;
  26. public Expression<Func<JobRequisitionItem, double>>[] Modifiers => new Expression<Func<JobRequisitionItem, double>>[] { x => x.Dimensions.Value };
  27. public FormulaOperator Operator => FormulaOperator.Multiply;
  28. public FormulaType Type => FormulaType.Virtual;
  29. }
  30. [Caption("Items")]
  31. [UserTracking(typeof(Job))]
  32. public class JobRequisitionItem : StockEntity, IRemotable, IPersistent, IOneToMany<JobRequisition>,
  33. ILicense<ProjectManagementLicense>, IJobMaterial, ISequenceable
  34. {
  35. [EntityRelationship(DeleteAction.Cascade)]
  36. public JobLink Job { get; set; }
  37. [EntityRelationship(DeleteAction.Cascade)]
  38. public JobRequisitionLink Requisition { get; set; }
  39. [EntityRelationship(DeleteAction.SetNull)]
  40. [EditorSequence(0)]
  41. [RequiredColumn]
  42. public override ProductLink Product { get; set; }
  43. [EditorSequence(1)]
  44. [MemoEditor]
  45. public string Notes { get; set; }
  46. [EditorSequence(2)]
  47. public ProductStyleLink Style { get; set; }
  48. [EditorSequence(3)]
  49. public double Qty { get; set; }
  50. [NullEditor]
  51. [Obsolete("Replaced with Dimensions", true)]
  52. public double UnitSize { get; set; }
  53. [EditorSequence(4)]
  54. [RequiredColumn]
  55. [DimensionsEditor(typeof(StockDimensions), AllowEditingUnit = false)]
  56. public override StockDimensions Dimensions { get; set; }
  57. [EditorSequence(5)]
  58. public SupplierLink Supplier { get; set; }
  59. [DoubleEditor(Editable = Editable.Hidden)]
  60. [Formula(typeof(JobRequisitionItemTotalQtyFormula))]
  61. public double TotalQty { get; set; }
  62. [EnumLookupEditor(typeof(JobRequisitionItemStatus))]
  63. public JobRequisitionItemStatus Status { get; set; }
  64. public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
  65. public DateTime Cancelled { get; set; }
  66. public DateTime Archived { get; set; }
  67. public DateTime Ordered { get; set; }
  68. [NullEditor]
  69. public long Sequence { get; set; }
  70. protected override void Init()
  71. {
  72. base.Init();
  73. Job = new JobLink();
  74. Requisition = new JobRequisitionLink();
  75. Style = new ProductStyleLink(() => this);
  76. Status = JobRequisitionItemStatus.NotChecked;
  77. PurchaseOrderItem = new PurchaseOrderItemLink();
  78. Supplier = new SupplierLink();
  79. Cancelled = DateTime.MinValue;
  80. Archived = DateTime.MinValue;
  81. Ordered = DateTime.MinValue;
  82. }
  83. static JobRequisitionItem()
  84. {
  85. StockEntity.LinkStockDimensions<JobRequisitionItem>();
  86. LinkedProperties.Register<JobRequisitionItem, ProductStyleLink, Guid>(x => x.Product.DefaultStyle, x => x.ID, x => x.Style.ID);
  87. }
  88. private void CheckPurchaseOrder()
  89. {
  90. }
  91. }
  92. }