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;
- }
- }
- }
|