using System; using System.Collections.Generic; using System.Linq; using Comal.Classes; using InABox.Core; namespace Comal.Stores { public class ManufacturingPacketStore : BaseStore { protected override void AfterSave(ManufacturingPacket entity) { base.AfterSave(entity); UpdateDeliveryItems(entity); UpdateTrackingKanban(entity, m => { if (entity.Completed != DateTime.MinValue || entity.Archived != DateTime.MinValue) return KanbanCategory.Complete; if (entity.Issued != DateTime.MinValue) return KanbanCategory.InProgress; return KanbanCategory.Open; }); } #region DeliveryItems private void UpdateDeliveryItems(ManufacturingPacket entity) { // if the Barcode printed flag has not changed, we don't need to do anything if (!entity.HasOriginalValue(x => x.BarcodePrinted)) return; if (!entity.BarcodePrinted.IsEmpty()) { var dstore = FindSubStore(); IEnumerable rows = dstore.Query( new Filter(x => x.SetoutLink.ID).IsEqualTo(entity.SetoutLink.ID), new Columns(x => x.Sequence, x => x.ManufacturingPacketLink.ID), new SortOrder(x => x.Sequence) ).Rows; var lastseq = rows.Any() ? rows.Last().Get(c => c.Sequence) : 0; var alreadycreated = rows.Any(r => r.Get(c => c.ManufacturingPacketLink.ID).Equals(entity.ID)); if (!alreadycreated) { var items = entity.CreateDeliveryItems(lastseq); if (items.Any()) dstore.Save(items, "Manufacturing Packet Barcode has been issued"); } } else { ClearDeliveryItems(entity, "Manufacturing Packet Barcode has been revoked"); } } private void ClearDeliveryItems(ManufacturingPacket entity, string message) { // If we haven't printed any barcodes, simply return if (!entity.HasOriginalValue(x => x.BarcodePrinted) && entity.BarcodePrinted.IsEmpty()) return; var dstore = FindSubStore(); var ditems = dstore.Query( new Filter(x => x.ManufacturingPacketLink.ID).IsEqualTo(entity.ID), new Columns(x => x.ID) ); dstore.Delete(ditems.Rows.Select(r => r.ToObject()), message); } #endregion #region PurchaseItems //private void CheckPurchaseItems(ManufacturingPacket entity) //{ // Setout setout = FindSubStore().Load(new Filter(x => x.ID).IsEqualTo(entity.SetoutID)).FirstOrDefault(); // if (setout != null) // { // ManufacturingItem mi = setout.Manufacturing.FirstOrDefault(x => x.ID.Equals(entity.ManufacturingItemID)); // if ((mi != null) && (mi.Purchased)) // { // var pStore = FindSubStore(); // PurchaseItem purchase = pStore.Load(new Filter(x => x.PacketID).IsEqualTo(entity.ID)).FirstOrDefault(); // if ((!entity.Issued.IsEmpty()) && (purchase == null)) // { // PurchaseItem pi = new PurchaseItem(); // pi.JobID = setout.Job.ID; // pi.SetoutID = setout.ID; // pi.PacketID = entity.ID; // pi.Description = "Purchased Item"; // need to put something here // pStore.Save(ref pi, "Created based on Setout.Issued"); // } // else if ((entity.Issued.IsEmpty()) && (purchase != null) && (purchase.OrderID == Guid.Empty)) // { // pStore.Delete(purchase, "Removed due to Setout being unissued"); // } // } // } //} #endregion } }