using Comal.Classes; using InABox.Core; using NPOI.HPSF; using System.Collections.Generic; using System.Linq; using PRSStores; using System; namespace Comal.Stores { public class PurchaseOrderStore : BaseStore { protected override void BeforeSave(PurchaseOrder entity) { base.BeforeSave(entity); Guid? empid = null; if (entity.ID == Guid.Empty) { empid ??= GetEmployeeIDFromUserGuid(); entity.RaisedBy.ID = empid.Value; } } protected override void AfterSave(PurchaseOrder entity) { base.AfterSave(entity); UpdateTrackingKanban(entity, p => { return !p.ClosedDate.IsEmpty() ? KanbanStatus.Complete : !p.IssuedDate.IsEmpty() ? KanbanStatus.Waiting : KanbanStatus.Open; }); } private Guid[] JobRequisitionItemIDs = System.Array.Empty(); private Guid[] GetJobRequisitionIDs(PurchaseOrder entity) { var jris = Provider.Query( new Filter(x => x.Item.PurchaseOrderLink.ID).IsEqualTo(entity.ID), Columns.Required() ).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); } private void DeleteStockMovements(PurchaseOrder entity) { var items = Provider.Query( new Filter(x => x.PurchaseOrderLink.ID).IsEqualTo(entity.ID), Columns.None().Add(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()), Columns.None().Add(x => x.ID) ).Rows.Select(x => x.ToObject()); if (movements.Any()) FindSubStore().Delete(movements, "Purchase Order Deleted"); } } }