123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- 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)
- {
- 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;
- 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())
- 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.Reserved;
- if (treatmentRequired)
- item.Status = JobRequisitionItemStatus.TreatmentRequired;
- }
- else
- item.Status = JobRequisitionItemStatus.NotChecked;
- return item;
- }
- }
- }
|