JobRequisitionItemPurchaseOrderItem.cs 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using InABox.Core;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. namespace Comal.Classes
  7. {
  8. [Caption("Allocation")]
  9. public class PurchaseOrderItemAllocation : Entity, IRemotable, IPersistent, ILicense<ProjectManagementLicense>
  10. , IOneToMany<JobRequisitionItem>, IOneToMany<Job>, IOneToMany<PurchaseOrderItem>
  11. {
  12. [RequiredColumn]
  13. [EntityRelationship(DeleteAction.Cascade)]
  14. public PurchaseOrderItemLink Item { get; set; }
  15. /// <summary>
  16. /// This may not be blank.
  17. /// </summary>
  18. [RequiredColumn]
  19. [EntityRelationship(DeleteAction.Cascade)]
  20. public JobLink Job { get; set; }
  21. /// <summary>
  22. /// This may be an empty link. The interface is as such: if there is no JRI, then we are creating a reserve and allocation just against the job. If there is a JRI,
  23. /// then received stock is reserved and allocated for the JRI.
  24. /// </summary>
  25. [RequiredColumn]
  26. [EntityRelationship(DeleteAction.Cascade)]
  27. public JobRequisitionItemLink JobRequisitionItem { get; set; }
  28. [RequiredColumn]
  29. public double Quantity { get; set; }
  30. }
  31. [Caption("Requisition / PO Item Links")]
  32. [Obsolete("Replaced with PurchaseOrderItemAllocation", true)]
  33. public class JobRequisitionItemPurchaseOrderItem : Entity, IRemotable, IPersistent, IOneToMany<JobRequisitionItem>, IOneToMany<PurchaseOrderItem>, ILicense<ProjectManagementLicense>
  34. {
  35. private class JobRequisitionItemLookup : LookupDefinitionGenerator<JobRequisitionItem, JobRequisitionItemPurchaseOrderItem>
  36. {
  37. public override Filter<JobRequisitionItem>? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items)
  38. {
  39. var jobs = items.Select(x => x.PurchaseOrderItem.Job.ID).Distinct().ToArray();
  40. var products = items.Select(x => x.PurchaseOrderItem.Product.ID).Distinct().ToArray();
  41. if(jobs.Length == 1 && products.Length == 1)
  42. {
  43. return new Filter<JobRequisitionItem>(x => x.Job.ID).IsEqualTo(jobs.First())
  44. .And(x => x.Product.ID).IsEqualTo(products.First());
  45. }
  46. {
  47. return new Filter<JobRequisitionItem>().None();
  48. }
  49. }
  50. public override Columns<JobRequisitionItemPurchaseOrderItem> DefineFilterColumns()
  51. => Columns.None<JobRequisitionItemPurchaseOrderItem>().Add(x => x.PurchaseOrderItem.Job.ID)
  52. .Add(x => x.PurchaseOrderItem.Product.ID);
  53. }
  54. [LookupDefinition(typeof(JobRequisitionItemLookup))]
  55. [EntityRelationship(DeleteAction.Cascade)]
  56. public JobRequisitionItemLink JobRequisitionItem { get; set; }
  57. private class PurchaseOrderItemLookup : LookupDefinitionGenerator<PurchaseOrderItem, JobRequisitionItemPurchaseOrderItem>
  58. {
  59. public override Filter<PurchaseOrderItem>? DefineFilter(JobRequisitionItemPurchaseOrderItem[] items)
  60. {
  61. var jobs = items.Select(x => x.JobRequisitionItem.Job.ID).Distinct().ToArray();
  62. var products = items.Select(x => x.JobRequisitionItem.Product.ID).Distinct().ToArray();
  63. if(jobs.Length == 1 && products.Length == 1)
  64. {
  65. return new Filter<PurchaseOrderItem>(x => x.Job.ID).IsEqualTo(jobs.First())
  66. .And(x => x.Product.ID).IsEqualTo(products.First());
  67. }
  68. {
  69. return new Filter<PurchaseOrderItem>().None();
  70. }
  71. }
  72. public override Columns<JobRequisitionItemPurchaseOrderItem> DefineFilterColumns()
  73. => Columns.None<JobRequisitionItemPurchaseOrderItem>().Add(x => x.JobRequisitionItem.Job.ID)
  74. .Add(x => x.JobRequisitionItem.Product.ID);
  75. }
  76. [LookupDefinition(typeof(PurchaseOrderItemLookup))]
  77. [EntityRelationship(DeleteAction.Cascade)]
  78. public PurchaseOrderItemLink PurchaseOrderItem { get; set; }
  79. }
  80. }