using Comal.Classes; using Comal.Stores; using InABox.Core; using System; using System.Linq; namespace PRSStores { public class JobRequisitionItemStore : BaseStore { 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( new Filter(x => x.JobRequisitionItem.ID).IsEqualTo(item.ID), new Columns( 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(x => x.Received); if (row.Get(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; } } }