internal static ICreateInventoryItemEntry[] CompleteMovementCreateInventoryItemEntryPair(IMovementState movement, IMovementLineState movementLine,
                                                                                                 Func <long> nextEntrySeqId)
        {
            ICreateInventoryItemEntry[] trxPair = new ICreateInventoryItemEntry[2];

            var quantity = movementLine.MovementQuantity;
            /////////////////////// From: ////////////////////////////
            int signum = -1;

            trxPair[0] = CreateInventoryItemEntry(movement, movementLine, movementLine.LocatorIdFrom, quantity * signum, 0, nextEntrySeqId);

            /////////////////////// To:   ////////////////////////////
            signum = 1;
            if (!movement.IsInTransit)
            {
                trxPair[1] = CreateInventoryItemEntry(movement, movementLine, movementLine.LocatorIdTo, quantity * signum, 1, nextEntrySeqId);
            }
            else
            {
                var locId = WarehouseUtils.GetInTransitLocatorId(movement.WarehouseIdFrom);
                trxPair[1] = CreateInventoryItemEntry(movement, movementLine, locId, quantity * signum, 1, nextEntrySeqId, true);
            }

            return(trxPair);
        }
        protected virtual ICreateInventoryItemEntry CreateInventoryItemEntry(IShipmentState shipment, IShipmentReceiptState lineReceipt)
        {
            var targetLocatorId = WarehouseUtils.GetReceivingLocatorId(shipment.DestinationFacilityId);
            var entry           = new CreateInventoryItemEntry();

            entry.InventoryItemId = new InventoryItemId(lineReceipt.ProductId, targetLocatorId, lineReceipt.AttributeSetInstanceId);
            entry.EntrySeqId      = SeqIdGenerator.GetNextId();   //DateTime.Now.Ticks;
            entry.OnHandQuantity  = lineReceipt.AcceptedQuantity; // *signum;
            entry.Source          = new InventoryItemSourceInfo(DocumentTypeIds.Shipment, shipment.ShipmentId, lineReceipt.ReceiptSeqId, 0);
            return(entry);
        }
        internal static ICreateInventoryItemEntry[] ConfirmMovementCreateInventoryItemEntryPair(IMovementState movement, IMovementLineState movementLine, decimal confirmedQty,
                                                                                                Func <long> nextEntrySeqId)
        {
            if (!movement.IsInTransit)
            {
                throw new ArgumentException("Movement is NOT In-Transit.");
            }
            ICreateInventoryItemEntry[] trxPair = new ICreateInventoryItemEntry[2];

            /////////////////////// From: ////////////////////////////
            int signum    = -1;
            var locIdFrom = WarehouseUtils.GetInTransitLocatorId(movement.WarehouseIdFrom);

            trxPair[0] = CreateInventoryItemEntry(movement, movementLine, locIdFrom, confirmedQty * signum, 2, nextEntrySeqId, true);

            /////////////////////// To:   ////////////////////////////
            signum     = 1;
            trxPair[1] = CreateInventoryItemEntry(movement, movementLine, movementLine.LocatorIdTo, confirmedQty * signum, 3, nextEntrySeqId);

            return(trxPair);
        }