Browse Source

Added validation for job id for POIA.

Kenric Nugteren 10 months ago
parent
commit
dd36774f3b

+ 1 - 1
prs.classes/Entities/Job/Requisitions/JobRequisitionItemLink.cs

@@ -7,7 +7,7 @@ namespace Comal.Classes
 {
     public class JobRequisitionItemLink : EntityLink<JobRequisitionItem>, IJobRequisitionItem
     {
-        [LookupEditor(typeof(JobRequisitionItem))]
+        [PopupEditor(typeof(JobRequisitionItem))]
         [RequiredColumn]
         public override Guid ID { get; set; }
 

+ 16 - 0
prs.classes/Entities/PurchaseOrder/PurchaseOrderItemAllocation.cs

@@ -17,15 +17,31 @@ namespace Comal.Classes
         /// This may not be blank.
         /// </summary>
         [EntityRelationship(DeleteAction.Cascade)]
+        [EditorSequence(1)]
         public JobLink Job { get; set; }
         
+        private class JobRequisitionItemLookup : LookupDefinitionGenerator<JobRequisitionItem, PurchaseOrderItemAllocation>
+        {
+            public override Columns<PurchaseOrderItemAllocation> DefineFilterColumns()
+            {
+                return base.DefineFilterColumns().Add(x => x.Job.ID);
+            }
+
+            public override Filter<JobRequisitionItem>? DefineFilter(PurchaseOrderItemAllocation[] items)
+            {
+                return new Filter<JobRequisitionItem>(x => x.Job.ID).InList(items.ToArray(x => x.Job.ID));
+            }
+        }
         /// <summary>
         /// 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,
         /// then received stock is reserved and allocated for the JRI.
         /// </summary>
         [EntityRelationship(DeleteAction.Cascade)]
+        [LookupDefinition(typeof(JobRequisitionItemLookup))]
+        [EditorSequence(2)]
         public JobRequisitionItemLink JobRequisitionItem { get; set; }
         
+        [EditorSequence(3)]
         public double Quantity { get; set; }
 
         [NullEditor]

+ 9 - 0
prs.desktop/Panels/PurchaseOrders/PurchaseOrderItemAllocationGrid.cs

@@ -24,6 +24,15 @@ public class PurchaseOrderItemAllocationGrid : DynamicOneToManyGrid<PurchaseOrde
         ActionColumns.Add(new DynamicTickColumn<PurchaseOrderItemAllocation, bool>(x => x.Nominated, tick, tick, null, Nominated_Click));
     }
 
+    protected override void DoValidate(PurchaseOrderItemAllocation[] items, List<string> errors)
+    {
+        base.DoValidate(items, errors);
+        if(items.Any(x => x.Job.ID == Guid.Empty))
+        {
+            errors.Add("[Job] may not be blank.");
+        }
+    }
+
     private bool Nominated_Click(CoreRow? row)
     {
         if (row is null) return false;