| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 | 
							- using Comal.Classes;
 
- using Comal.Stores;
 
- using InABox.Core;
 
- using System;
 
- using System.Linq;
 
- namespace PRSStores
 
- {
 
-     public class JobRequisitionItemStore : BaseStore<JobRequisitionItem>
 
-     {
 
-         protected override void BeforeSave(JobRequisitionItem item)
 
-         {
 
-             if (item.ID != Guid.Empty)
 
-             {
 
-                 var table = DoQuery(item);
 
-                 item = DoStatusChecks(item, table);
 
-             }
 
-             base.BeforeSave(item);
 
-         }
 
-         private CoreTable DoQuery(JobRequisitionItem item)
 
-         {
 
-             return Provider.Query<StockMovement>(
 
-                new Filter<StockMovement>(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID),
 
-                new Columns<StockMovement>(
 
-                    x => x.Received,
 
-                     x => x.Style.ID
 
-                    ));
 
-         }
 
-         public static JobRequisitionItem DoStatusChecks(JobRequisitionItem item, CoreTable table)
 
-         {
 
-             if (item.Cancelled != DateTime.MinValue)
 
-                 item.Status = JobRequisitionItemStatus.Cancelled;
 
-             else if (item.Archived != DateTime.MinValue)
 
-                 item.Status = JobRequisitionItemStatus.Archived;
 
-             //this can only get set from the "Create Treatment PO" custom module
 
-             else if (item.Status == JobRequisitionItemStatus.TreatmentOnOrder || item.Status == JobRequisitionItemStatus.TreatmentReceived)
 
-             {
 
-                 if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
 
-                     item.Status = JobRequisitionItemStatus.TreatmentReceived;
 
-             }
 
-             else if (item.Ordered != DateTime.MinValue && item.PurchaseOrderItem.ReceivedDate == DateTime.MinValue)
 
-                 item.Status = JobRequisitionItemStatus.OnOrder;
 
-             else if (item.PurchaseOrderItem.ReceivedDate != DateTime.MinValue)
 
-             {
 
-                 item.Status = JobRequisitionItemStatus.Received;
 
-                 item = CheckReservedOrTreatmentRequired(item, table);
 
-             }
 
-             else if (item.Status == JobRequisitionItemStatus.OrderRequired)
 
-                 return item;
 
-             else
 
-                 item = CheckReservedOrTreatmentRequired(item, table);
 
-             return item;
 
-         }
 
-         private static JobRequisitionItem CheckReservedOrTreatmentRequired(JobRequisitionItem item, CoreTable table)
 
-         {
 
-             if (!table.Rows.Any())
 
-             {
 
-                 item.Status = JobRequisitionItemStatus.NotChecked;
 
-                 return item;
 
-             }
 
-             bool treatmentRequired = false;
 
-             double total = 0;
 
-             foreach (var row in table.Rows)
 
-             {
 
-                 total = total + row.Get<StockMovement, double>(x => x.Received);
 
-                 if (row.Get<StockMovement, Guid>(x => x.Style.ID) != item.Style.ID)
 
-                     treatmentRequired = true;
 
-             }
 
-             if (total >= item.Qty)
 
-             {
 
-                 item.Status = JobRequisitionItemStatus.Allocated;
 
-                 if (treatmentRequired)
 
-                     item.Status = JobRequisitionItemStatus.TreatmentRequired;
 
-             }
 
-             else
 
-                 item.Status = JobRequisitionItemStatus.NotChecked;
 
-             return item;
 
-         }
 
-     }
 
- }
 
 
  |