JobRequisitionItem.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.ComponentModel;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using InABox.Core;
  6. namespace Comal.Classes
  7. {
  8. public enum JobRequisitionItemStatus
  9. {
  10. NotChecked,
  11. Reserved,
  12. TreatmentRequired,
  13. OrderRequired,
  14. TreatmentOnOrder,
  15. OnOrder,
  16. Received,
  17. TreatmentReceived,
  18. Cancelled,
  19. Archived
  20. }
  21. public class JobRequisitionItemTotalQtyFormula : IFormula<JobRequisitionItem, double>
  22. {
  23. public Expression<Func<JobRequisitionItem, double>> Value => x => x.Qty;
  24. public Expression<Func<JobRequisitionItem, double>>[] Modifiers => new Expression<Func<JobRequisitionItem, double>>[] { x => x.Dimensions.Value };
  25. public FormulaOperator Operator => FormulaOperator.Multiply;
  26. public FormulaType Type => FormulaType.Virtual;
  27. }
  28. [Caption("Items")]
  29. [UserTracking(typeof(Job))]
  30. public class JobRequisitionItem : StockEntity, IRemotable, IPersistent, IOneToMany<JobRequisition>,
  31. ILicense<ProjectManagementLicense>, IJobMaterial, ISequenceable
  32. {
  33. [EntityRelationship(DeleteAction.Cascade)]
  34. public JobLink Job { get; set; }
  35. [EntityRelationship(DeleteAction.Cascade)]
  36. public JobRequisitionLink Requisition { get; set; }
  37. [EntityRelationship(DeleteAction.SetNull)]
  38. [EditorSequence(0)]
  39. [RequiredColumn]
  40. public override ProductLink Product { get; set; }
  41. [EditorSequence(1)]
  42. [MemoEditor]
  43. public string Notes { get; set; }
  44. [EditorSequence(2)]
  45. public ProductStyleLink Style { get; set; }
  46. [EditorSequence(3)]
  47. public double Qty { get; set; }
  48. [NullEditor]
  49. [Obsolete("Replaced with Dimensions", true)]
  50. public double UnitSize { get; set; }
  51. [EditorSequence(4)]
  52. [RequiredColumn]
  53. [DimensionsEditor(typeof(StockDimensions), AllowEditingUnit = false)]
  54. public override StockDimensions Dimensions { get; set; }
  55. [EditorSequence(5)]
  56. public SupplierLink Supplier { get; set; }
  57. [DoubleEditor(Editable = Editable.Hidden)]
  58. [Formula(typeof(JobRequisitionItemTotalQtyFormula))]
  59. public double TotalQty { get; set; }
  60. [EnumLookupEditor(typeof(JobRequisitionItemStatus))]
  61. public JobRequisitionItemStatus Status { get; set; }
  62. [NullEditor(Visible = Visible.Optional)] //currently no way to disable editor but we need the columns
  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. }