Esempio n. 1
0
        /// <summary>
        /// Dispense out of this container.
        /// </summary>
        /// <param name="DispenseType"></param>
        /// <param name="QuantityToDeduct">Positive quantity to subtract</param>
        /// <param name="UnitId"></param>
        /// <param name="RequestItemId"></param>
        /// <param name="DestinationContainer"></param>
        public void DispenseOut(CswEnumNbtContainerDispenseType DispenseType, double QuantityToDeduct, CswPrimaryKey UnitId,
                                CswPrimaryKey RequestItemId = null, CswNbtObjClassContainer DestinationContainer = null, bool RecordTransaction = true)
        {
            double RealQuantityToDeduct = _getDispenseAmountInProperUnits(QuantityToDeduct, UnitId, _Container.Quantity.UnitId);
            double CurrentQuantity      = 0;

            if (CswTools.IsDouble(_Container.Quantity.Quantity))
            {
                CurrentQuantity = _Container.Quantity.Quantity;
            }
            _Container.Quantity.Quantity = CurrentQuantity - RealQuantityToDeduct;

            if (DestinationContainer != null)
            {
                DestinationContainer.DispenseIn(DispenseType, QuantityToDeduct, UnitId, RequestItemId, _Container, false);    // false, because we do not want another duplicate transaction record
            }
            if (RecordTransaction)
            {
                _ContainerDispenseTransactionBuilder.create(DispenseType, -RealQuantityToDeduct, _Container.Quantity.UnitId, RequestItemId, _Container, DestinationContainer);
            }
            _Container.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.Dispense);
        } // DispenseOut()
Esempio n. 2
0
        public CswNbtReceivingDefinition receiveContainers(CswNbtReceivingDefinition ReceiptDef, ref int NodesProcessed, int MaxProcessed)
        {
            CswNbtMetaDataNodeType ContainerNt = _CswNbtResources.MetaData.getNodeType(ReceiptDef.ContainerNodeTypeId);

            foreach (CswNbtAmountsGridQuantity QuantityDef in ReceiptDef.Quantities)
            {
                CswNbtObjClassSize  AsSize  = _CswNbtResources.Nodes.GetNode(QuantityDef.SizeNodeId);
                string              Barcode = string.Empty;
                Action <CswNbtNode> After   = delegate(CswNbtNode NewNode)
                {
                    CswNbtObjClassContainer thisContainer = NewNode;
                    if (QuantityDef.getNumBarcodes() <= QuantityDef.NumContainers && false == string.IsNullOrEmpty(Barcode))
                    {
                        thisContainer.Barcode.setBarcodeValueOverride(Barcode, false);
                    }
                    thisContainer.Size.RelatedNodeId     = QuantityDef.SizeNodeId;
                    thisContainer.Material.RelatedNodeId = ReceiptDef.MaterialNodeId;
                    if (AsSize.QuantityEditable.Checked != CswEnumTristate.True)
                    {
                        QuantityDef.Quantity   = AsSize.InitialQuantity.Quantity;
                        QuantityDef.UnitNodeId = AsSize.InitialQuantity.UnitId;
                    }
                    if (null == thisContainer.Quantity.UnitId || Int32.MinValue == thisContainer.Quantity.UnitId.PrimaryKey)
                    {
                        thisContainer.Quantity.UnitId = QuantityDef.UnitNodeId;
                    }
                    thisContainer.DispenseIn(CswEnumNbtContainerDispenseType.Receive, QuantityDef.Quantity, QuantityDef.UnitNodeId, ReceiptDef.RequestItemtNodeId);
                    thisContainer.Disposed.Checked         = CswEnumTristate.False;
                    thisContainer.ReceiptLot.RelatedNodeId = ReceiptDef.ReceiptLotNodeId;
                };

                for (Int32 C = 0; C < QuantityDef.NumContainers; C += 1)
                {
                    if (NodesProcessed < MaxProcessed)
                    {
                        //we promote the first container before the batch op starts, so there should always be at least one container id in the first set of quantities
                        CswPrimaryKey ContainerId = null;
                        if (C < QuantityDef.ContainerIds.Count)
                        {
                            ContainerId = CswConvert.ToPrimaryKey(QuantityDef.ContainerIds[C]);
                        }
                        CswCommaDelimitedString Barcodes = QuantityDef.getBarcodes();
                        Barcode = (QuantityDef.getNumBarcodes() > C ? Barcodes[C] : string.Empty);

                        if (null == ContainerId)  //only create a container if we haven't already
                        {
                            CswNbtNodeKey           ContainerNodeKey;
                            CswNbtObjClassContainer Container = _CswNbtSdTabsAndProps.addNode(ContainerNt, ReceiptDef.ContainerProps, out ContainerNodeKey, After);
                            QuantityDef.ContainerIds.Add(Container.NodeId.ToString());
                            NodesProcessed++;
                        }
                        else
                        {
                            CswNbtNode InitialContainerNode = _CswNbtResources.Nodes.GetNode(ContainerId);
                            if (null != InitialContainerNode && InitialContainerNode.IsTemp)
                            {
                                _CswNbtSdTabsAndProps.saveNodeProps(InitialContainerNode, ReceiptDef.ContainerProps);
                                After(InitialContainerNode);
                                InitialContainerNode.PromoteTempToReal();
                                NodesProcessed++;
                            }
                        }
                    }
                } //for( Int32 C = 0; C < NoContainers; C += 1 )
            }

            return(ReceiptDef);
        }