| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 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<PurchaseOrder>    {        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<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(entity, p =>            {                return !p.ClosedDate.IsEmpty()                     ? KanbanStatus.Complete                    : !p.IssuedDate.IsEmpty()                        ? KanbanStatus.Waiting                        : KanbanStatus.Open;            });        }        private Guid[] JobRequisitionItemIDs = System.Array.Empty<Guid>();                private Guid[] GetJobRequisitionIDs(PurchaseOrder entity)        {            var jris = Provider.Query(                    new Filter<JobRequisitionItemPurchaseOrderItem>(x => x.PurchaseOrderItem.PurchaseOrderLink.ID).IsEqualTo(entity.ID),                    Columns.None<JobRequisitionItemPurchaseOrderItem>().Add(x => x.JobRequisitionItem.ID))                .Rows                .Select(r=>r.Get<JobRequisitionItemPurchaseOrderItem, Guid>(x => x.JobRequisitionItem.ID))                .Where(x=> x != Guid.Empty)                .Distinct()                .ToArray();            return jris;        }                protected override void BeforeDelete(PurchaseOrder entity)        {            UnlinkTrackingKanban<PurchaseOrderKanban, PurchaseOrder, PurchaseOrderLink>(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<PurchaseOrderItem>(x => x.PurchaseOrderLink.ID).IsEqualTo(entity.ID),                Columns.None<PurchaseOrderItem>().Add(x => x.ID)            ).Rows.Select(x => x.ToObject<PurchaseOrderItem>());            List<Guid> ids = new List<Guid>();            foreach ( var item in items)                 ids.Add(item.ID);            var movements = Provider.Query(                new Filter<StockMovement>(x => x.OrderItem.ID).InList(ids.ToArray()),                Columns.None<StockMovement>().Add(x => x.ID)            ).Rows.Select(x => x.ToObject<StockMovement>());            if (movements.Any())                FindSubStore<StockMovement>().Delete(movements, "Purchase Order Deleted");        }    }}
 |