123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- 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.HasOriginalValue(x => x.IssuedDate) && entity.GetOriginalValue(x => x.IssuedDate).IsEmpty())
- {
- empid ??= GetEmployeeIDFromUserGuid();
- entity.IssuedBy.ID = empid.Value;
- }
- 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.Status == PurchaseOrderStatus.Closed
- ? KanbanStatus.Complete
- : p.Status.Equals(PurchaseOrderStatus.Issued)
- ? 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),
- new Columns<JobRequisitionItemPurchaseOrderItem>(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),
- new Columns<PurchaseOrderItem>(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()),
- new Columns<StockMovement>(x => x.ID)
- ).Rows.Select(x => x.ToObject<StockMovement>());
- if (movements.Any())
- FindSubStore<StockMovement>().Delete(movements, "Purchase Order Deleted");
- }
- }
- }
|