JobRequisitionItem.cs 3.2 KB

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