JobRequisitionItem.cs 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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
  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. public override StockDimensions Dimensions { get; set; }
  54. [EditorSequence(5)]
  55. public SupplierLink Supplier { get; set; }
  56. [DoubleEditor(Editable = Editable.Hidden)]
  57. [Formula(typeof(JobRequisitionItemTotalQtyFormula))]
  58. public double TotalQty { get; set; }
  59. [EnumLookupEditor(typeof(JobRequisitionItemStatus))]
  60. public JobRequisitionItemStatus Status { get; set; }
  61. [IntegerEditor(Visible = Visible.Default, Editable = Editable.Disabled)] //currently no way to disable editor but we need the columns
  62. public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
  63. protected override void Init()
  64. {
  65. base.Init();
  66. Job = new JobLink();
  67. Requisition = new JobRequisitionLink();
  68. Product = new ProductLink(() => this);
  69. Style = new ProductStyleLink(() => this);
  70. Status = JobRequisitionItemStatus.NotChecked;
  71. PurchaseOrderItem = new PurchaseOrderItemLink();
  72. Supplier = new SupplierLink();
  73. Dimensions = new StockDimensions(() => this);
  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. }