| 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;        }           }}
 |