JobRequisitionItem.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
  63. [NullEditor]
  64. public long Sequence { get; set; }
  65. protected override void Init()
  66. {
  67. base.Init();
  68. Job = new JobLink();
  69. Requisition = new JobRequisitionLink();
  70. Style = new ProductStyleLink(() => this);
  71. Status = JobRequisitionItemStatus.NotChecked;
  72. PurchaseOrderItem = new PurchaseOrderItemLink();
  73. Supplier = new SupplierLink();
  74. }
  75. static JobRequisitionItem()
  76. {
  77. StockEntity.LinkStockDimensions<JobRequisitionItem>();
  78. LinkedProperties.Register<JobRequisitionItem, ProductStyleLink, Guid>(x => x.Product.DefaultStyle, x => x.ID, x => x.Style.ID);
  79. }
  80. }
  81. }