ManufacturingPacketStore.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Comal.Classes;
  5. using InABox.Core;
  6. namespace Comal.Stores
  7. {
  8. public class ManufacturingPacketStore : BaseStore<ManufacturingPacket>
  9. {
  10. protected override void AfterSave(ManufacturingPacket entity)
  11. {
  12. base.AfterSave(entity);
  13. UpdateDeliveryItems(entity);
  14. UpdateTrackingKanban<ManufacturingPacketKanban, ManufacturingPacket, ManufacturingPacketLink>(entity, m =>
  15. {
  16. if (entity.Completed != DateTime.MinValue || entity.Archived != DateTime.MinValue)
  17. return KanbanCategory.Complete;
  18. if (entity.Issued != DateTime.MinValue)
  19. return KanbanCategory.InProgress;
  20. return KanbanCategory.Open;
  21. });
  22. }
  23. #region DeliveryItems
  24. private void UpdateDeliveryItems(ManufacturingPacket entity)
  25. {
  26. // if the Barcode printed flag has not changed, we don't need to do anything
  27. if (!entity.HasOriginalValue(x => x.BarcodePrinted))
  28. return;
  29. if (!entity.BarcodePrinted.IsEmpty())
  30. {
  31. var dstore = FindSubStore<DeliveryItem>();
  32. IEnumerable<CoreRow> rows = dstore.Query(
  33. new Filter<DeliveryItem>(x => x.SetoutLink.ID).IsEqualTo(entity.SetoutLink.ID),
  34. new Columns<DeliveryItem>(x => x.Sequence, x => x.ManufacturingPacketLink.ID),
  35. new SortOrder<DeliveryItem>(x => x.Sequence)
  36. ).Rows;
  37. var lastseq = rows.Any() ? rows.Last().Get<DeliveryItem, int>(c => c.Sequence) : 0;
  38. var alreadycreated = rows.Any(r => r.Get<DeliveryItem, Guid>(c => c.ManufacturingPacketLink.ID).Equals(entity.ID));
  39. if (!alreadycreated)
  40. {
  41. var items = entity.CreateDeliveryItems(lastseq);
  42. if (items.Any())
  43. dstore.Save(items, "Manufacturing Packet Barcode has been issued");
  44. }
  45. }
  46. else
  47. {
  48. ClearDeliveryItems(entity, "Manufacturing Packet Barcode has been revoked");
  49. }
  50. }
  51. private void ClearDeliveryItems(ManufacturingPacket entity, string message)
  52. {
  53. // If we haven't printed any barcodes, simply return
  54. if (!entity.HasOriginalValue(x => x.BarcodePrinted) && entity.BarcodePrinted.IsEmpty())
  55. return;
  56. var dstore = FindSubStore<DeliveryItem>();
  57. var ditems = dstore.Query(
  58. new Filter<DeliveryItem>(x => x.ManufacturingPacketLink.ID).IsEqualTo(entity.ID),
  59. new Columns<DeliveryItem>(x => x.ID)
  60. );
  61. dstore.Delete(ditems.Rows.Select(r => r.ToObject<DeliveryItem>()), message);
  62. }
  63. #endregion
  64. #region PurchaseItems
  65. //private void CheckPurchaseItems(ManufacturingPacket entity)
  66. //{
  67. // Setout setout = FindSubStore<Setout>().Load(new Filter<Setout>(x => x.ID).IsEqualTo(entity.SetoutID)).FirstOrDefault();
  68. // if (setout != null)
  69. // {
  70. // ManufacturingItem mi = setout.Manufacturing.FirstOrDefault(x => x.ID.Equals(entity.ManufacturingItemID));
  71. // if ((mi != null) && (mi.Purchased))
  72. // {
  73. // var pStore = FindSubStore<PurchaseItem>();
  74. // PurchaseItem purchase = pStore.Load(new Filter<PurchaseItem>(x => x.PacketID).IsEqualTo(entity.ID)).FirstOrDefault();
  75. // if ((!entity.Issued.IsEmpty()) && (purchase == null))
  76. // {
  77. // PurchaseItem pi = new PurchaseItem();
  78. // pi.JobID = setout.Job.ID;
  79. // pi.SetoutID = setout.ID;
  80. // pi.PacketID = entity.ID;
  81. // pi.Description = "Purchased Item"; // need to put something here
  82. // pStore.Save(ref pi, "Created based on Setout.Issued");
  83. // }
  84. // else if ((entity.Issued.IsEmpty()) && (purchase != null) && (purchase.OrderID == Guid.Empty))
  85. // {
  86. // pStore.Delete(purchase, "Removed due to Setout being unissued");
  87. // }
  88. // }
  89. // }
  90. //}
  91. #endregion
  92. }
  93. }