using Comal.Classes; using InABox.Core; using NPOI.HPSF; using System; using System.Collections.Generic; using System.Linq; using PRSStores; namespace Comal.Stores { public class PurchaseOrderStore : BaseStore { protected override void AfterSave(PurchaseOrder entity) { base.AfterSave(entity); UpdateTrackingKanban(entity, p => { return p.Status == PurchaseOrderStatus.Closed ? KanbanStatus.Complete : p.Status.Equals(PurchaseOrderStatus.Issued) ? KanbanStatus.Waiting : KanbanStatus.Open; }); } private Guid[] JobRequisitionItemIDs = System.Array.Empty(); private Guid[] GetJobRequisitionIDs(PurchaseOrder entity) { var jris = Provider.Query( new Filter(x => x.PurchaseOrderItem.PurchaseOrderLink.ID).IsEqualTo(entity.ID), new Columns(x => x.JobRequisitionItem.ID)) .Rows .Select(r=>r.Get(x => x.JobRequisitionItem.ID)) .Where(x=> x != Guid.Empty) .Distinct() .ToArray(); return jris; } protected override void BeforeDelete(PurchaseOrder entity) { UnlinkTrackingKanban(entity); DeleteStockMovements(entity); JobRequisitionItemIDs = GetJobRequisitionIDs(entity); } protected override void AfterDelete(PurchaseOrder entity) { base.AfterDelete(entity); foreach (var id in JobRequisitionItemIDs) JobRequisitionItemStore.UpdateStatus(this, id, JobRequisitionItemAction.Deleted); } private void DeleteStockMovements(PurchaseOrder entity) { var items = Provider.Query( new Filter(x => x.PurchaseOrderLink.ID).IsEqualTo(entity.ID), new Columns(x => x.ID) ).Rows.Select(x => x.ToObject()); List ids = new List(); foreach ( var item in items) ids.Add(item.ID); var movements = Provider.Query( new Filter(x => x.OrderItem.ID).InList(ids.ToArray()), new Columns(x => x.ID) ).Rows.Select(x => x.ToObject()); if (movements.Any()) FindSubStore().Delete(movements, "Purchase Order Deleted"); } } }