JobRequisitionItem.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  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. [EntityRelationship(DeleteAction.SetNull)]
  65. public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
  66. public DateTime Cancelled { get; set; }
  67. public DateTime Archived { get; set; }
  68. public DateTime Ordered { get; set; }
  69. [NullEditor]
  70. public long Sequence { get; set; }
  71. protected override void Init()
  72. {
  73. base.Init();
  74. Status = JobRequisitionItemStatus.NotChecked;
  75. Cancelled = DateTime.MinValue;
  76. Archived = DateTime.MinValue;
  77. Ordered = DateTime.MinValue;
  78. }
  79. static JobRequisitionItem()
  80. {
  81. StockEntity.LinkStockDimensions<JobRequisitionItem>();
  82. LinkedProperties.Register<JobRequisitionItem, ProductStyleLink, Guid>(x => x.Product.DefaultStyle, x => x.ID, x => x.Style.ID);
  83. }
  84. }
  85. }