| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 | 
							- using Comal.Classes;
 
- using System;
 
- using System.Collections.Generic;
 
- using InABox.Core;
 
- using System.Linq;
 
- namespace Comal.Stores
 
- {
 
-     public class ConsignmentStore : BaseStore<Consignment>
 
-     {
 
-         protected override void BeforeSave(Consignment entity)
 
-         {
 
-             base.BeforeSave(entity);
 
-         }
 
-         protected override void AfterSave(Consignment entity)
 
-         {
 
-             base.AfterSave(entity);
 
-             Guid purchaseOrderID = Guid.Empty;
 
-             //consignment has to be newly completed (usually done via receivals module) - checks further down as well to ensure no repeated saving of documents / batches
 
-             if (entity.ActualWarehouseArrival == DateTime.MinValue)
 
-                 return;
 
-             if (entity.HasOriginalValue(x => x.ActualWarehouseArrival) && entity.GetOriginalValue<Consignment, DateTime>("ActualWarehouseArrival") != DateTime.MinValue)
 
-                 return;
 
-             //find previously saved PO Items attached to this consignment
 
-             CoreTable purchaseOrderItemTable = Provider.Query<PurchaseOrderItem>(
 
-                 new Filter<PurchaseOrderItem>(x => x.Consignment.ID).IsEqualTo(entity.ID),
 
-                 new Columns<PurchaseOrderItem>(x => x.ID, x => x.PurchaseOrderLink.ID)
 
-                 );
 
-             if (!purchaseOrderItemTable.Rows.Any())
 
-                 return;
 
-             List<Guid> consignmentDocIDs = new List<Guid>();
 
-             if (purchaseOrderItemTable.Rows.FirstOrDefault().Values[1] == null)
 
-                 purchaseOrderID = Guid.Empty;
 
-             else
 
-                 purchaseOrderID = Guid.Parse(purchaseOrderItemTable.Rows.FirstOrDefault().Values[1].ToString());
 
-             CoreTable table = Provider.Query<ConsignmentDocument>
 
-             (
 
-                 new Filter<ConsignmentDocument>(x => x.EntityLink.ID).IsEqualTo(entity.ID),
 
-                 new Columns<ConsignmentDocument>(x => x.DocumentLink.ID)
 
-                 );
 
-             if (table.Rows.Any())
 
-             {
 
-                 consignmentDocIDs = SavePurchaseOrderDocuments(table, purchaseOrderID);
 
-             }
 
-             //build filter for querying stock movements attached to PO Items on this consignment
 
-             Filter<StockMovement> filter =
 
-                 new Filter<StockMovement>(x => x.OrderItem.ID).IsEqualTo(Guid.Parse(purchaseOrderItemTable.Rows.FirstOrDefault().Values[0].ToString()));
 
-             foreach (CoreRow row in purchaseOrderItemTable.Rows)
 
-             {
 
-                 if (row != purchaseOrderItemTable.Rows.FirstOrDefault())
 
-                 {
 
-                     List<object> list = row.Values;
 
-                     filter = filter.Or(x => x.OrderItem.ID).IsEqualTo(Guid.Parse(list[0].ToString()));
 
-                 }
 
-             }
 
-             CoreTable stockMovementTable = Provider.Query<StockMovement>(
 
-                 filter,
 
-                 new Columns<StockMovement>(
 
-                     x => x.ID,
 
-                     x => x.Notes,
 
-                     x => x.Batch.ID
 
-                     ));
 
-             if (stockMovementTable.Rows.Any())
 
-             {
 
-                 //check if movements already have a batch.id - means photos would have already been saved
 
-                 if (Guid.Parse(stockMovementTable.Rows.FirstOrDefault().Values[2].ToString()) != Guid.Empty)
 
-                     return;
 
-                 //create new stockmovementbatch to attach new stockmovements to (movements created by server)
 
-                 StockMovementBatch batch = new StockMovementBatch();
 
-                 batch.Type = StockMovementBatchType.Receipt;
 
-                 Provider.Save(batch);
 
-                 //add found stockmovements to batch, add stockmovements to save
 
-                 List<StockMovement> movements = new List<StockMovement>();
 
-                 foreach (CoreRow row in stockMovementTable.Rows)
 
-                 {
 
-                     List<object> list1 = row.Values;
 
-                     StockMovement movement = new StockMovement
 
-                     {
 
-                         ID = Guid.Parse(list1[0].ToString()),
 
-                         Notes = list1[1].ToString()
 
-                     };
 
-                     movement.Batch.ID = batch.ID;
 
-                     movement.Employee.ID = entity.Employee.ID;
 
-                     movement.Notes = movement.Notes + " / Consignment " + entity.Number;
 
-                     movements.Add(movement);
 
-                 }
 
-                 Provider.Save(movements);
 
-                 List<StockMovementBatchDocument> stockMovementBatchDocuments = new List<StockMovementBatchDocument>();
 
-                 foreach (Guid id in consignmentDocIDs)
 
-                 {
 
-                     var smd = new StockMovementBatchDocument();
 
-                     smd.EntityLink.ID = batch.ID;
 
-                     smd.DocumentLink.ID = id;
 
-                     stockMovementBatchDocuments.Add(smd);
 
-                 }
 
-                 Provider.Save<StockMovementBatchDocument>(stockMovementBatchDocuments);
 
-             }
 
-         }
 
-         private List<Guid> SavePurchaseOrderDocuments(CoreTable table, Guid purchaseOrderID)
 
-         {
 
-             List<Guid> consignmentDocIDs = new List<Guid>();
 
-             List<PurchaseOrderDocument> purchaseOrderDocuments = new List<PurchaseOrderDocument>();
 
-             foreach (CoreRow row in table.Rows)
 
-             {
 
-                 List<object> list = row.Values;
 
-                 Guid docID = Guid.Parse(list[0].ToString());
 
-                 consignmentDocIDs.Add(docID);
 
-                 PurchaseOrderDocument PODocument = new PurchaseOrderDocument();
 
-                 PODocument.DocumentLink.ID = docID;
 
-                 PODocument.EntityLink.ID = purchaseOrderID;
 
-                 CoreTable existingPODocs = Provider.Query<PurchaseOrderDocument>(
 
-                     new Filter<PurchaseOrderDocument>(x => x.DocumentLink.ID).IsEqualTo(docID), //check that PO document doesn't already exist
 
-                     new Columns<PurchaseOrderDocument>(x => x.ID));
 
-                 if (existingPODocs.Rows.Count == 0)
 
-                     purchaseOrderDocuments.Add(PODocument);               
 
-             }
 
-             if (purchaseOrderDocuments.Any())
 
-                 Provider.Save<PurchaseOrderDocument>(purchaseOrderDocuments);
 
-             return consignmentDocIDs;
 
-         }       
 
-     }
 
- }
 
 
  |