Пример #1
0
        public static void ReceiveMaterial(ICswResources CswResources, CswNbtReceivingDefinitionReturn Response, CswNbtReceivingDefinition ReceivingDefiniton)
        {
            CswNbtResources    NbtResources = (CswNbtResources)CswResources;
            CswNbtActReceiving ActReceiving = new CswNbtActReceiving(NbtResources, ReceivingDefiniton.MaterialNodeId);
            JObject            ActionData   = ActReceiving.receiveMaterial(ReceivingDefiniton);

            Response.Data.ActionData = ActionData.ToString();


            //Create Print Job
            if (null != ReceivingDefiniton.PrintLabelId && null != ReceivingDefiniton.PrinterNodeId)
            {
                CswNbtObjClassContainer InitialContainer = NbtResources.Nodes.GetNode(ReceivingDefiniton.ContainerNodeId);

                Collection <Dictionary <string, string> > PropVals = new Collection <Dictionary <string, string> >();
                foreach (CswNbtAmountsGridQuantity Quant in ReceivingDefiniton.Quantities)
                {
                    CswNbtObjClassUnitOfMeasure UoMNode = NbtResources.Nodes.GetNode(Quant.UnitNodeId);
                    for (int i = 0; i < Quant.NumContainers; i++)
                    {
                        Dictionary <string, string> vals = InitialContainer.Node.getPropertiesAndValues();
                        vals[InitialContainer.Barcode.PropName]  = Quant.getBarcodes()[i];
                        vals[InitialContainer.Quantity.PropName] = Quant.Quantity + " " + UoMNode.BaseUnit.Text;
                        PropVals.Add(vals);
                    }
                }

                CswNbtWebServicePrintLabels.newPrintJob(CswResources, ReceivingDefiniton.PrinterNodeId, ReceivingDefiniton.PrintLabelId, ReceivingDefiniton.ContainerNodeId, PropVals);
            }
        }
Пример #2
0
 public CswNbtContainerDispenser(CswNbtResources CswNbtResources, CswNbtContainerDispenseTransactionBuilder ContainerDispenseTransactionBuilder, CswNbtObjClassContainer Container, bool IsImport = false)
 {
     _CswNbtResources = CswNbtResources;
     _ContainerDispenseTransactionBuilder = ContainerDispenseTransactionBuilder;
     _Container = Container;
     _IsImport  = IsImport;
 }
Пример #3
0
        }//_dispense()

        private void _reconcile(string operation, string barcode, JObject update, CswNbtObjClassBatchOp BatchNode)
        {
            try
            {
                string newLocationBarcode = update["location"].ToString();

                CswNbtObjClassContainer containerNode = _getNodeFromBarcode(barcode, CswEnumNbtObjectClass.ContainerClass, CswNbtObjClassContainer.PropertyName.Barcode, false);
                if (null != containerNode)
                {
                    containerNode.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.ReconcileScans, newLocationBarcode, barcode);
                    containerNode.Location.RefreshNodeName();
                    containerNode.postChanges(false);
                }
                else
                {
                    string msg = _generateErrorMessage(operation, barcode, null, "A container with barcode " + barcode + " does not exist.");
                    _storeError(BatchNode, msg);
                }
            }
            catch (Exception e)
            {
                string msg = "The reconcile operation failed for the container barcode " + barcode + "with exception: " + e;
                _storeError(BatchNode, msg);
            }
        }//_reconcile()
        private CswNbtObjClassContainer _createChildContainer(string ContainerNodeTypeId, CswPrimaryKey UnitId, string Barcode)
        {
            CswNbtObjClassContainer ChildContainer = null;
            CswNbtMetaDataNodeType  ContainerNT    = _CswNbtResources.MetaData.getNodeType(CswConvert.ToInt32(ContainerNodeTypeId));

            if (ContainerNT != null)
            {
                _CswNbtResources.Nodes.makeNodeFromNodeTypeId(ContainerNT.NodeTypeId, delegate(CswNbtNode CopyNode)
                {
                    CopyNode.copyPropertyValues(_SourceContainer.Node);
                    ChildContainer = CopyNode;
                    if (false == String.IsNullOrEmpty(Barcode))
                    {
                        ChildContainer.Barcode.setBarcodeValueOverride(Barcode, false);
                    }
                    else
                    {
                        ChildContainer.Barcode.setBarcodeValue();
                    }
                    ChildContainer.ReceiptLot.RelatedNodeId      = null;
                    ChildContainer.ExpirationDate.DateTimeValue  = _SourceContainer.ExpirationDate.DateTimeValue;
                    ChildContainer.SourceContainer.RelatedNodeId = _SourceContainer.NodeId;
                    ChildContainer.Quantity.Quantity             = 0;
                    ChildContainer.Quantity.UnitId  = UnitId;
                    ChildContainer.Disposed.Checked = CswEnumTristate.False;
                    //ChildContainer.postChanges( false );
                    //ChildContainer.Undispose.setHidden( value: true, SaveToDb: true );
                    _ContainersToView.Add(ChildContainer.NodeId);
                });
            }
            return(ChildContainer);
        }
        public CswNbtActDispenseContainer(CswNbtResources CswNbtResources, string SourceContainerNodeId, string DispenseTransactionId = null, string DispenseTransactionProperties = null)
        {
            _CswNbtResources      = CswNbtResources;
            _CswNbtSdTabsAndProps = new CswNbtSdTabsAndProps(_CswNbtResources);

            if (false == String.IsNullOrEmpty(SourceContainerNodeId))
            {
                CswPrimaryKey SourceContainerPK = new CswPrimaryKey();
                SourceContainerPK.FromString(SourceContainerNodeId);
                _SourceContainer = _CswNbtResources.Nodes.GetNode(SourceContainerPK);
                if (false == String.IsNullOrEmpty(DispenseTransactionId))
                {
                    CswPrimaryKey ContainerDispenseTransactionId = new CswPrimaryKey();
                    ContainerDispenseTransactionId.FromString(DispenseTransactionId);
                    _TempDispenseTransaction = _CswNbtResources.Nodes.GetNode(ContainerDispenseTransactionId);
                    if (null != _TempDispenseTransaction)
                    {
                        _CswNbtSdTabsAndProps.saveProps(_TempDispenseTransaction.NodeId, Int32.MinValue, CswConvert.ToJObject(DispenseTransactionProperties), _TempDispenseTransaction.NodeTypeId, null, IsIdentityTab: false, setIsTempToFalse: false);
                    }
                    _SourceContainer.Dispenser = new CswNbtContainerDispenser(_CswNbtResources, new CswNbtContainerDispenseTransactionBuilder(_CswNbtResources, _TempDispenseTransaction), _SourceContainer);
                }
            }
            else
            {
                throw new CswDniException(CswEnumErrorType.Error, "Cannot execute dispense contianer action with an undefined Source Container.", "Attempted to constuct CswNbtActDispenseContainer without a valid Source Container.");
            }
            if (false == _CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.CISPro))
            {
                throw new CswDniException(CswEnumErrorType.Error, "Cannot use the Dispense action without the required module.", "Attempted to constuct CswNbtActSubmitRequest without the required module.");
            }
        }
        public JObject dispenseIntoChildContainers(string ContainerNodeTypeId, string DispenseGrid, string RequestItemId)
        {
            JObject ret = new JObject();

            if (null != _SourceContainer)
            {
                CswPrimaryKey RequestItemPk = new CswPrimaryKey();
                RequestItemPk.FromString(RequestItemId);
                JArray  GridArray = JArray.Parse(DispenseGrid);
                JObject jBarcodes = new JObject();
                ret["barcodes"] = jBarcodes;
                for (Int32 i = 0; i < GridArray.Count; i += 1)
                {
                    if (GridArray[i].Type == JTokenType.Object)
                    {
                        JObject CurrentRow               = (JObject)GridArray[i];
                        int     NumOfContainers          = CswConvert.ToInt32(CurrentRow["containerNo"]);
                        double  QuantityToDispense       = CswConvert.ToDouble(CurrentRow["quantity"]);
                        string  UnitId                   = CswConvert.ToString(CurrentRow["unitid"]);
                        CswCommaDelimitedString Barcodes = new CswCommaDelimitedString();
                        Barcodes.FromString(CswConvert.ToString(CurrentRow["barcodes"]));

                        CswPrimaryKey UnitOfMeasurePK = new CswPrimaryKey();
                        UnitOfMeasurePK.FromString(UnitId);

                        if (NumOfContainers == 0)
                        {
                            _SourceContainer.DispenseOut(
                                CswEnumNbtContainerDispenseType.Dispense, QuantityToDispense,
                                UnitOfMeasurePK, RequestItemPk);
                            _SourceContainer.postChanges(false);
                        }
                        else
                        {
                            for (Int32 c = 0; c < NumOfContainers; c += 1)
                            {
                                CswNbtObjClassContainer ChildContainer = _createChildContainer(ContainerNodeTypeId,
                                                                                               UnitOfMeasurePK, Barcodes[c]);
                                _SourceContainer.DispenseOut(
                                    CswEnumNbtContainerDispenseType.Dispense, QuantityToDispense,
                                    UnitOfMeasurePK, RequestItemPk, ChildContainer);
                                //ChildContainer.DispenseIn( CswEnumNbtContainerDispenseType.Dispense, QuantityToDispense, UnitOfMeasurePK, RequestItemPk, _SourceContainer );
                                ChildContainer.postChanges(false);

                                JObject BarcodeNode = new JObject();
                                jBarcodes[ChildContainer.NodeId.ToString()] = BarcodeNode;
                                BarcodeNode["nodeid"]   = ChildContainer.NodeId.ToString();
                                BarcodeNode["nodename"] = ChildContainer.NodeName;
                            }
                            _SourceContainer.postChanges(false);
                        }
                    }
                }
                _SourceContainer.postChanges(false);

                string ViewId = _getViewForAllDispenseContainers();
                ret["viewId"] = ViewId;
            }
            return(ret);
        }
Пример #7
0
        private void _setContainerLocations()
        {
            IEnumerable <CswPrimaryKey> ContainerNodePks = this.getContainersInGroup();

            if (ContainerNodePks.Count() > 0)
            {
                int BatchThreshold = CswNbtBatchManager.getBatchThreshold(_CswNbtResources);
                if (ContainerNodePks.Count() > BatchThreshold)
                {
                    // Shelve this to a batch operation
                    CswNbtBatchOpSyncLocation op        = new CswNbtBatchOpSyncLocation(_CswNbtResources);
                    CswNbtObjClassBatchOp     BatchNode = op.makeBatchOp(ContainerNodePks, this.Location.SelectedNodeId);
                }
                else
                {
                    foreach (CswPrimaryKey CurrentContainerNodePk in ContainerNodePks)
                    {
                        CswNbtObjClassContainer CurrentContainer = _CswNbtResources.Nodes[CurrentContainerNodePk];
                        if (null != CurrentContainer)
                        {
                            CurrentContainer.Location.SelectedNodeId = this.Location.SelectedNodeId;
                            CurrentContainer.postChanges(false);
                        }
                    }
                }
            }
        }
        private void _executeReconciliationAction(CswNbtResources _CswNbtResources, CswNbtObjClassContainerLocation ContainerLocation)
        {
            CswNbtObjClassUser UserNode = _CswNbtResources.Nodes[ContainerLocation.ActionByUser.RelatedNodeId];

            // case 30346 - use user's info for audit context
            if (null != UserNode)
            {
                _CswNbtResources.AuditFirstName = UserNode.FirstName;
                _CswNbtResources.AuditLastName  = UserNode.LastName;
                _CswNbtResources.AuditUsername  = UserNode.Username;
            }

            CswNbtObjClassContainer Container = _CswNbtResources.Nodes[ContainerLocation.Container.RelatedNodeId];

            if (null != Container)
            {
                CswEnumNbtContainerLocationActionOptions Action = ContainerLocation.Action.Value;
                if (Action == CswEnumNbtContainerLocationActionOptions.Undispose ||
                    Action == CswEnumNbtContainerLocationActionOptions.UndisposeAndMove)
                {
                    Container.UndisposeContainer(OverridePermissions: true, CreateContainerLocation: false);
                }
                if (Action == CswEnumNbtContainerLocationActionOptions.MoveToLocation ||
                    Action == CswEnumNbtContainerLocationActionOptions.UndisposeAndMove)
                {
                    Container.Location.SelectedNodeId = ContainerLocation.Location.SelectedNodeId;
                    Container.Location.RefreshNodeName();
                    Container.Location.CreateContainerLocation = false;
                }
                Container.Missing.Checked = Action == CswEnumNbtContainerLocationActionOptions.MarkMissing
                    ? CswEnumTristate.True
                    : CswEnumTristate.False;
                Container.postChanges(false);
            }
        }
        private void OnContainerScanPropChange( CswNbtNodeProp Prop, bool Creating )
        {
            if( null != ContainerScan.Text )
            {
                CswNbtMetaDataObjectClass ContainerOc = _CswNbtResources.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
                CswNbtView ContainerView = new CswNbtView( _CswNbtResources );

                CswNbtViewRelationship ContainerRel = ContainerView.AddViewRelationship( ContainerOc, false );
                CswNbtMetaDataObjectClassProp BarcodeOcp = ContainerOc.getObjectClassProp( CswNbtObjClassContainer.PropertyName.Barcode );

                ContainerView.AddViewPropertyAndFilter( ContainerRel, BarcodeOcp, ContainerScan.Text );
                ICswNbtTree ContainerTree = _CswNbtResources.Trees.getTreeFromView( ContainerView, false, false, true );
                if( ContainerTree.getChildNodeCount() > 0 )
                {
                    ContainerTree.goToNthChild( 0 );
                    CswNbtObjClassContainer ContainerNode = ContainerTree.getNodeForCurrentPosition();
                    Container.RelatedNodeId = ContainerNode.NodeId;
                }
                else
                {
                    Container.RelatedNodeId = null;
                }
            }
            _setStatus();
        }
        public void processReconciliationActionsTestUndisposeAndMove()
        {
            CswPrimaryKey ContainerLocId, ContainerLocationLocId;

            TestData.getTwoDifferentLocationIds(out ContainerLocId, out ContainerLocationLocId);

            CswNbtObjClassContainer ContainerNode = TestData.Nodes.createContainerNode(LocationId: ContainerLocId);

            ContainerNode.DisposeContainer();
            Assert.AreEqual(CswEnumTristate.True, ContainerNode.Disposed.Checked.ToString());
            CswNbtObjClassContainerLocation ContainerLocationNode = TestData.Nodes.createContainerLocationNode(
                ContainerNode.Node,
                CswEnumNbtContainerLocationActionOptions.UndisposeAndMove.ToString(),
                LocationId: ContainerLocationLocId,
                Type: CswEnumNbtContainerLocationTypeOptions.ReconcileScans.ToString());

            Assert.AreNotEqual(ContainerLocationNode.Location.SelectedNodeId, ContainerNode.Location.SelectedNodeId);
            Assert.AreEqual(CswEnumNbtContainerLocationStatusOptions.DisposedAtWrongLocation.ToString(), ContainerLocationNode.Status.Value);

            CswScheduleLogicNbtContainerReconciliationActions Sched = _getReconciliationActionSched();

            Sched.processReconciliationActions(TestData.CswNbtResources);
            Assert.AreEqual(CswEnumTristate.True, ContainerLocationNode.ActionApplied.Checked.ToString());
            Assert.AreEqual(ContainerLocationNode.Location.SelectedNodeId, ContainerNode.Location.SelectedNodeId);
            Assert.AreEqual(CswEnumTristate.False, ContainerNode.Missing.Checked.ToString());
            Assert.AreEqual(CswEnumTristate.False, ContainerNode.Disposed.Checked.ToString());
        }
Пример #11
0
        /// <summary>
        /// Updates the default Expiration Date on containers to receive based on Receipt Lot's Manufactured Date
        /// </summary>
        public ContainerData.ReceivingData updateExpirationDate(ContainerData.ReceiptLotRequest Request)
        {
            ContainerData.ReceivingData ReceiveData = new ContainerData.ReceivingData();
            JObject ReceiptLotPropsObj = CswConvert.ToJObject(Request.ReceiptLotProps);

            if (ReceiptLotPropsObj.HasValues)
            {
                CswPrimaryKey ReceiptLotId = CswConvert.ToPrimaryKey(Request.ReceiptLotId);
                if (CswTools.IsPrimaryKey(ReceiptLotId))
                {
                    CswNbtObjClassReceiptLot ReceiptLot = _CswNbtResources.Nodes.GetNode(ReceiptLotId);
                    _CswNbtSdTabsAndProps.saveNodeProps(ReceiptLot.Node, ReceiptLotPropsObj);
                    CswPrimaryKey ContainerId = CswConvert.ToPrimaryKey(Request.ContainerId);
                    if (CswTools.IsPrimaryKey(ContainerId) &&
                        ReceiptLot.ManufacturedDate.DateTimeValue != DateTime.MinValue)
                    {
                        CswNbtObjClassContainer   Container = _CswNbtResources.Nodes.GetNode(ContainerId);
                        CswNbtPropertySetMaterial Material  = _CswNbtResources.Nodes.GetNode(Container.Material.RelatedNodeId);
                        Container.ExpirationDate.DateTimeValue = Material.getDefaultExpirationDate(ReceiptLot.ManufacturedDate.DateTimeValue);
                        Container.postChanges(false);
                        JObject ContainerProps = getContainerAddProps(Container);
                        ReceiveData.ContainerProps = ContainerProps.ToString();
                    }
                }
            }
            return(ReceiveData);
        }
Пример #12
0
        ///<summary>
        /// Instance a new container according to Object Class rules. Note: this does not get the properties.
        /// </summary>
        public CswNbtObjClassContainer makeContainer(Action <CswNbtNode> After)
        {
            CswNbtObjClassContainer ret = null;

            CswNbtMetaDataNodeType ContainerNt = _ContainerOc.getLatestVersionNodeTypes().FirstOrDefault();

            if (null != ContainerNt)
            {
                Action <CswNbtNode> After2 = delegate(CswNbtNode NewNode)
                {
                    CswNbtObjClassContainer RetAsContainer = NewNode;
                    RetAsContainer.Material.RelatedNodeId = _MaterialId;
                    //cases 30647 and 31079
                    //RetAsContainer.Material.setHidden( value: true, SaveToDb: false );
                    //RetAsContainer.Size.setHidden( value: true, SaveToDb: false );
                    if (null != After)
                    {
                        After(NewNode);
                    }
                };
                ret = _CswNbtSdTabsAndProps.getAddNodeAndPostChanges(ContainerNt, After2);
                if (null == ret)
                {
                    throw new CswDniException(CswEnumErrorType.Error, "Could not create a new container.", "Failed to create a new Container node.");
                }
            }
            return(ret);
        } // makeContainer()
Пример #13
0
        internal CswNbtNode createContainerNode(string NodeTypeName = "Container", double Quantity = 1.0, CswNbtNode UnitOfMeasure = null, CswNbtNode Material = null, CswPrimaryKey LocationId = null, string UseType = "", bool Missing = false)
        {
            CswNbtNode ret = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(_getNodeTypeId(NodeTypeName), delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassContainer ContainerNode = NewNode;
                ContainerNode.Quantity.Quantity       = Quantity;
                if (null == UnitOfMeasure)
                {
                    UnitOfMeasure = createUnitOfMeasureNode("Volume", "Liters" + Sequence, 1.0, 0, CswEnumTristate.True);
                }
                ContainerNode.Quantity.UnitId          = UnitOfMeasure.NodeId;
                ContainerNode.UseType.Value            = UseType ?? CswEnumNbtContainerUseTypes.Storage;
                ContainerNode.StorageTemperature.Value = CswEnumNbtContainerStorageTemperatures.RoomTemperature;
                ContainerNode.StoragePressure.Value    = CswEnumNbtContainerStoragePressures.Atmospheric;
                if (Material != null)
                {
                    ContainerNode.Material.RelatedNodeId = Material.NodeId;
                }
                if (LocationId != null)
                {
                    ContainerNode.Location.SelectedNodeId = LocationId;
                    ContainerNode.Location.RefreshNodeName();
                }
                if (Missing)
                {
                    ContainerNode.Missing.Checked = CswEnumTristate.True;
                }
                //ContainerNode.MaterialObsolete..CachedValue = "";
            });

            _finalize();

            return(ret);
        }
        public override void CommitOperation(ref OperationData OpData)
        {
            CswNbtObjClassContainer containerToDispose = _CswNbtResources.Nodes[OpData.Field1.NodeId];

            if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, containerToDispose.NodeType) && _CswNbtResources.Permit.can(CswEnumNbtActionName.DisposeContainer))
            {
                if (CswEnumTristate.True == containerToDispose.Disposed.Checked)
                {
                    OpData.Field1.StatusMsg = "Container " + OpData.Field1.Value + " is already disposed";
                    OpData.Log.Add(DateTime.Now + " - ERROR: Attempted to dispose already disposed container " + OpData.Field1.Value);
                }
                else
                {
                    containerToDispose.DisposeContainer();
                    containerToDispose.postChanges(false);
                    OpData.Log.Add(DateTime.Now + " - Disposed container " + OpData.Field1.Value);
                    OpData.Field1.Value = string.Empty;
                }
                OpData.Field1.ServerValidated = false;
            }
            else
            {
                string statusMsg = "You do not have permission to dispose Container (" + OpData.Field1.Value + ")";
                OpData.Field1.StatusMsg       = statusMsg;
                OpData.Field1.ServerValidated = false;
                OpData.Log.Add(DateTime.Now + " - ERROR: " + statusMsg);
            }
        }
Пример #15
0
        public override void CommitOperation(ref OperationData OpData)
        {
            CswNbtObjClassContainer containerToDispense = _CswNbtResources.Nodes[OpData.Field1.NodeId];

            if (_CswNbtResources.Permit.canNodeType(CswEnumNbtNodeTypePermission.Edit, containerToDispense.NodeType) && _CswNbtResources.Permit.can(CswEnumNbtActionName.DispenseContainer))
            {
                double quantityToDispense = CswConvert.ToDouble(OpData.Field2.Value);
                if (quantityToDispense > containerToDispense.Quantity.Quantity)
                {
                    OpData.Field2.StatusMsg = "Cannot dispense " + quantityToDispense + containerToDispense.Quantity.CachedUnitName + " when containter only has " + containerToDispense.Quantity.Gestalt;
                    OpData.Log.Add(DateTime.Now + " - ERROR: Attempted to dispense " + quantityToDispense + containerToDispense.Quantity.CachedUnitName + " when containter only has " + containerToDispense.Quantity.Gestalt);
                    OpData.Field2.ServerValidated = false;
                }
                else
                {
                    containerToDispense.DispenseOut(CswEnumNbtContainerDispenseType.Dispense, quantityToDispense, containerToDispense.Quantity.UnitId);
                    containerToDispense.postChanges(false);
                    OpData.Field1.SecondValue = " (current quantity: " + containerToDispense.Quantity.Quantity + containerToDispense.Quantity.CachedUnitName + ")";
                    OpData.Log.Add(DateTime.Now + " - Dispensed " + OpData.Field2.Value + " " + containerToDispense.Quantity.CachedUnitName + " out of container " + containerToDispense.Barcode.Barcode + ". " + containerToDispense.Quantity.Gestalt + " left in container");
                    base.CommitOperation(ref OpData);
                }
            }
            else
            {
                string statusMsg = "You do not have permission to dispense Container (" + OpData.Field2.Value + ")";
                OpData.Field2.StatusMsg       = statusMsg;
                OpData.Field2.ServerValidated = false;
                OpData.Log.Add(DateTime.Now + " - ERROR: " + statusMsg);
            }
        }
        /// <summary>
        /// Abstract override to be called on onButtonClick
        /// </summary>
        public override bool onPropertySetButtonClick(NbtButtonData ButtonData)
        {
            if (null != ButtonData.NodeTypeProp)
            {
                //Remember: Save is an OCP too
                switch (ButtonData.NodeTypeProp.getObjectClassPropName())
                {
                case PropertyName.Fulfill:
                    CswNbtObjClassContainer NodeAsContainer = null;
                    switch (ButtonData.SelectedText)
                    {
                    case FulfillMenu.Dispense:
                        NodeAsContainer = _CswNbtResources.Nodes.GetNode(Container.RelatedNodeId);
                        if (null != NodeAsContainer && null != NodeAsContainer.Dispense.NodeTypeProp)
                        {
                            NbtButtonData DispenseData = new NbtButtonData(NodeAsContainer.Dispense.NodeTypeProp);
                            NodeAsContainer.triggerOnButtonClick(DispenseData);
                            ButtonData.clone(DispenseData);
                        }
                        else
                        {
                            ButtonData.Data["containernodetypeid"]    = Container.TargetId;
                            ButtonData.Data["containerobjectclassid"] = Container.TargetId;
                            JObject InitialQuantity = null;
                            if (null != Size.RelatedNodeId && Int32.MinValue != Size.RelatedNodeId.PrimaryKey)
                            {
                                CswNbtObjClassSize NodeAsSize = _CswNbtResources.Nodes[Size.RelatedNodeId];
                                if (null != NodeAsSize)
                                {
                                    InitialQuantity = new JObject();
                                    NodeAsSize.InitialQuantity.ToJSON(InitialQuantity);
                                    ButtonData.Data["initialQuantity"] = InitialQuantity;
                                }
                            }
                            else if (false == Quantity.Empty)
                            {
                                InitialQuantity = new JObject();
                                Quantity.ToJSON(InitialQuantity);
                            }
                            if (null != InitialQuantity)
                            {
                                ButtonData.Data["initialQuantity"] = InitialQuantity;
                            }
                            ButtonData.Action = CswEnumNbtButtonAction.dispense;
                        }
                        break;
                    }     //switch( ButtonData.SelectedText )

                    _getNextStatus(ButtonData.SelectedText);
                    ButtonData.Data["requestitem"] = ButtonData.Data["requestitem"] ?? new JObject();
                    ButtonData.Data["requestitem"]["requestitemid"] = NodeId.ToString();
                    ButtonData.Data["requestitem"]["materialid"]    = (Material.RelatedNodeId ?? new CswPrimaryKey()).ToString();
                    ButtonData.Data["requestitem"]["containerid"]   = (Container.RelatedNodeId ?? new CswPrimaryKey()).ToString();
                    ButtonData.Data["requestitem"]["locationid"]    = (Location.SelectedNodeId ?? new CswPrimaryKey()).ToString();
                    break;     //case PropertyName.Fulfill:
                }
            }
            return(true);
        }
        public void setStatusTestNotScanned()
        {
            CswNbtObjClassContainer         ContainerNode         = TestData.Nodes.createContainerNode();
            CswNbtObjClassContainerLocation ContainerLocationNode = TestData.Nodes.createContainerLocationNode(
                ContainerNode.Node,
                CswEnumNbtContainerLocationActionOptions.Ignore.ToString(),
                Type: CswEnumNbtContainerLocationTypeOptions.Missing.ToString());

            Assert.AreEqual(CswEnumNbtContainerLocationStatusOptions.NotScanned.ToString(), ContainerLocationNode.Status.Value);
        }
        private bool _canViewProp(int NodeTypePropId, CswPrimaryKey PermissionGroupId)
        {
            CswNbtMetaDataNodeTypeProp NTProp = _CswNbtResources.MetaData.getNodeTypeProp(NodeTypePropId);

            // Must have permission to at least one tab where this property appears
            Dictionary <Int32, CswNbtMetaDataNodeTypeLayoutMgr.NodeTypeLayout> EditLayouts = NTProp.getEditLayouts();
            bool canView = EditLayouts.Values.Aggregate(false,
                                                        (current, EditLayout) => current || _CswNbtResources.Permit.canTab(
                                                            CswEnumNbtNodeTypePermission.View,
                                                            NTProp.getNodeType(),
                                                            _CswNbtResources.MetaData.getNodeTypeTab(EditLayout.TabId)));

            #region Container Request Button Inventory Group Permission

            if (canView)
            {
                CswNbtMetaDataObjectClass ContainerClass = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass);
                if (null != ContainerClass)
                {
                    CswNbtMetaDataObjectClassProp RequestProp = _CswNbtResources.MetaData.getObjectClassProp(ContainerClass.ObjectClassId, CswNbtObjClassContainer.PropertyName.Request);
                    if (NTProp.ObjectClassPropId == RequestProp.PropId)
                    {
                        if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Requesting))
                        {
                            canView = CswNbtObjClassContainer.canContainer(_CswNbtResources, _CswNbtResources.Actions[CswEnumNbtActionName.Submit_Request], PermissionGroupId);
                        }
                        else
                        {
                            canView = false; // case 31851
                        }
                    }
                }
            }

            #endregion

            #region Material Receive Button View Permission

            if (canView)
            {
                CswNbtMetaDataObjectClass MaterialClass = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ChemicalClass);
                if (null != MaterialClass)
                {
                    CswNbtMetaDataObjectClassProp RequestProp = _CswNbtResources.MetaData.getObjectClassProp(MaterialClass.ObjectClassId, CswNbtPropertySetMaterial.PropertyName.Receive);
                    if (NTProp.ObjectClassPropId == RequestProp.PropId)
                    {
                        canView = _CswNbtResources.Permit.can(CswEnumNbtActionName.Receiving);
                    }
                }
            }

            #endregion

            return(canView);
        }
Пример #19
0
        public void testReceivingBarcodesNoBarcode()
        {
            CswNbtMetaDataNodeType ChemicalNT   = TestData.CswNbtResources.MetaData.getNodeType("Chemical");
            CswNbtObjClassChemical ChemicalNode = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(ChemicalNT.NodeTypeId);

            CswNbtObjClassUnitOfMeasure GramNode = TestData.CswNbtResources.Nodes.GetNode(new CswPrimaryKey("nodes", 26745));

            CswNbtMetaDataNodeType SizeNT = TestData.CswNbtResources.MetaData.getNodeType("Size");
            CswNbtObjClassSize     Size   = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNT.NodeTypeId, OnAfterMakeNode : delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassSize AsSize       = NewNode;
                AsSize.Material.RelatedNodeId   = ChemicalNode.NodeId;
                AsSize.UnitCount.Value          = 5;
                AsSize.InitialQuantity.Quantity = 10;
                AsSize.InitialQuantity.UnitId   = GramNode.NodeId;
            }, OverrideUniqueValidation: true);

            CswNbtActReceiving ReceivingAction = new CswNbtActReceiving(TestData.CswNbtResources, ChemicalNode.NodeId);

            CswNbtMetaDataNodeType  ContainerNT      = TestData.CswNbtResources.MetaData.getNodeType("Container");
            CswNbtObjClassContainer InitialContainer = ReceivingAction.makeContainer(null);
            JObject ContainerAddProps = ReceivingAction.getContainerAddProps(InitialContainer);

            int NumContainers = 2;
            CswNbtReceivingDefinition ReceiptDef = new CswNbtReceivingDefinition()
            {
                ContainerNodeId     = InitialContainer.NodeId,
                ContainerNodeTypeId = ContainerNT.NodeTypeId,
                ContainerProps      = ContainerAddProps,
                MaterialNodeId      = ChemicalNode.NodeId,
                Quantities          = new Collection <CswNbtAmountsGridQuantity>()
                {
                    new CswNbtAmountsGridQuantity()
                    {
                        NumContainers = NumContainers,
                        Quantity      = 10,
                        SizeName      = Size.NodeName,
                        SizeNodeId    = Size.NodeId,
                        UnitNodeId    = GramNode.NodeId,
                        ContainerIds  = new Collection <string>()
                        {
                            InitialContainer.NodeId.ToString()
                        }
                    }
                }
            };

            CswNbtMetaDataNodeTypeProp BarcodeNTP = ContainerNT.getNodeTypePropByObjectClassProp(CswNbtObjClassContainer.PropertyName.Barcode);
            string Before = BarcodeNTP.Sequence.getCurrent();

            ReceivingAction.receiveMaterial(ReceiptDef);
            string After = BarcodeNTP.Sequence.getCurrent();

            Assert.AreNotEqual(Before, After, "Creating containers in receiving with no custom barcodes specified did not consume sequence values when it should have");
        }
Пример #20
0
        /// <summary>
        /// Instance a new Container Request Item based on the selected button option - the type will either be Dispense, Move, or Dispose.
        /// </summary>
        public CswNbtObjClassRequestItem makeContainerRequestItem(CswNbtObjClassContainer Container, CswNbtObjClass.NbtButtonData ButtonData)
        {
            checkForCentralInventoryGroups(_CswNbtResources);
            CswNbtObjClassRequestItem RequestItem;
            CswNbtMetaDataObjectClass RequestItemOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);
            CswNbtMetaDataNodeType    RequestItemNT = RequestItemOC.getNodeTypes().FirstOrDefault();
            CswNbtSdTabsAndProps      PropsAction   = new CswNbtSdTabsAndProps(_CswNbtResources);

            RequestItem = PropsAction.getAddNodeAndPostChanges(RequestItemNT, delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassRequestItem RequestItemNode = NewNode;
                if (null != getCurrentRequestNodeId() && null != Container)
                {
                    RequestItemNode.Container.RelatedNodeId = Container.NodeId;
                    RequestItemNode.Material.RelatedNodeId  = Container.Material.RelatedNodeId;
                    CswPrimaryKey SelectedLocationId        = CswTools.IsPrimaryKey(_ThisUser.DefaultLocationId) ?
                                                              _ThisUser.DefaultLocationId :
                                                              Container.Location.SelectedNodeId;
                    ButtonData.Action = CswEnumNbtButtonAction.request;
                    switch (ButtonData.SelectedText)
                    {
                    case CswEnumNbtContainerRequestMenu.Dispense:
                        RequestItemNode.Type.Value              = CswNbtObjClassRequestItem.Types.ContainerDispense;
                        RequestItemNode.Quantity.UnitId         = Container.Quantity.UnitId;
                        RequestItemNode.Size.RelatedNodeId      = Container.Size.RelatedNodeId;
                        RequestItemNode.Location.SelectedNodeId = SelectedLocationId;
                        //Scope available units of measure on Quantity based on the Container's Material
                        CswNbtNode MaterialNode = _CswNbtResources.Nodes[Container.Material.RelatedNodeId];
                        if (null != MaterialNode)
                        {
                            CswNbtUnitViewBuilder Vb = new CswNbtUnitViewBuilder(_CswNbtResources);
                            Vb.setQuantityUnitOfMeasureView(MaterialNode, RequestItemNode.Quantity);
                        }
                        break;

                    case CswEnumNbtContainerRequestMenu.Dispose:
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.ContainerDispose;
                        RequestItemNode.Location.SelectedNodeId = Container.Location.SelectedNodeId;
                        break;

                    case CswEnumNbtContainerRequestMenu.Move:
                        RequestItemNode.Type.Value = CswNbtObjClassRequestItem.Types.ContainerMove;
                        RequestItemNode.Location.SelectedNodeId = SelectedLocationId;
                        break;
                    }
                    RequestItemNode.Location.RefreshNodeName();
                }
            });
            if (null == RequestItem)
            {
                throw new CswDniException(CswEnumErrorType.Error, "Could not generate a new request item.", "Failed to create a new Request Item node.");
            }
            return(RequestItem);
        }
Пример #21
0
 /// <summary>
 /// Checks permission and disposes a container (does not post changes!)
 /// </summary>
 public void Dispose(bool OverridePermissions = false)
 {
     if (OverridePermissions || CswNbtObjClassContainer.canContainer(_CswNbtResources, _CswNbtResources.Actions[CswEnumNbtActionName.DisposeContainer], _Container.getPermissionGroupId()))
     {
         _ContainerDispenseTransactionBuilder.create(CswEnumNbtContainerDispenseType.Dispose, -_Container.Quantity.Quantity, _Container.Quantity.UnitId, SrcContainer: _Container);
         _Container.Quantity.Quantity = 0;
         _Container.Disposed.Checked  = CswEnumTristate.True;
         _Container.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.Dispose);
         _Container.Node.IconFileNameOverride = "x.png";
         _Container.Node.Searchable           = false;
     }
 }
        public void setStatusTestMissing()
        {
            CswNbtObjClassContainer ContainerNode = TestData.Nodes.createContainerNode();

            ContainerNode.Missing.Checked = CswEnumTristate.True;
            ContainerNode.postChanges(false);
            CswNbtObjClassContainerLocation ContainerLocationNode = TestData.Nodes.createContainerLocationNode(
                ContainerNode.Node,
                CswEnumNbtContainerLocationActionOptions.Ignore.ToString(),
                Type: CswEnumNbtContainerLocationTypeOptions.ReconcileScans.ToString());

            Assert.AreEqual(CswEnumNbtContainerLocationStatusOptions.Missing.ToString(), ContainerLocationNode.Status.Value);
        }
Пример #23
0
        /// <summary>
        /// Get the Add Layout properties for a container
        /// </summary>
        public JObject getContainerAddProps(CswNbtObjClassContainer Container)
        {
            JObject Ret = new JObject();
            CswEnumNbtNodeEditMode PrevEditMode = _CswNbtResources.EditMode;

            _CswNbtResources.EditMode = CswEnumNbtNodeEditMode.Add;
            if (null != Container)
            {
                Ret = _CswNbtSdTabsAndProps.getProps(Container.Node, "", null, CswEnumNbtLayoutType.Add);
            }
            _CswNbtResources.EditMode = PrevEditMode;
            return(Ret);
        }
        public void processReconciliationActionsTestMoreRecentExists()
        {
            CswNbtObjClassContainer         ContainerNode = TestData.Nodes.createContainerNode();
            CswNbtObjClassContainerLocation FirstContainerLocationNode = TestData.Nodes.createContainerLocationNode(ContainerNode.Node, CswEnumNbtContainerLocationActionOptions.Undispose.ToString(), DateTime.Now.AddSeconds(-1));

            TestData.Nodes.createContainerLocationNode(ContainerNode.Node, CswEnumNbtContainerLocationActionOptions.Ignore.ToString());

            CswScheduleLogicNbtContainerReconciliationActions Sched = _getReconciliationActionSched();

            Sched.processReconciliationActions(TestData.CswNbtResources);
            Assert.AreEqual(CswEnumTristate.True, FirstContainerLocationNode.ActionApplied.Checked.ToString());
            Assert.AreEqual(CswEnumTristate.False, ContainerNode.Missing.Checked.ToString());
        }
        public void setStatusTestCorrect()
        {
            CswPrimaryKey ContainerLocId, ContainerLocationLocId;

            TestData.getTwoDifferentLocationIds(out ContainerLocId, out ContainerLocationLocId);
            CswNbtObjClassContainer         ContainerNode         = TestData.Nodes.createContainerNode(LocationId: ContainerLocId);
            CswNbtObjClassContainerLocation ContainerLocationNode = TestData.Nodes.createContainerLocationNode(
                ContainerNode.Node,
                CswEnumNbtContainerLocationActionOptions.Ignore.ToString(),
                LocationId: ContainerLocId);

            Assert.AreEqual(ContainerLocationNode.Location.SelectedNodeId, ContainerNode.Location.SelectedNodeId);
            Assert.AreEqual(CswEnumNbtContainerLocationStatusOptions.Correct.ToString(), ContainerLocationNode.Status.Value);
        }
        public void processReconciliationActionsTestMarkMissing()
        {
            CswNbtObjClassContainer         ContainerNode         = TestData.Nodes.createContainerNode();
            CswNbtObjClassContainerLocation ContainerLocationNode = TestData.Nodes.createContainerLocationNode(
                ContainerNode.Node,
                CswEnumNbtContainerLocationActionOptions.MarkMissing.ToString(),
                Type: CswEnumNbtContainerLocationTypeOptions.Missing.ToString());

            CswScheduleLogicNbtContainerReconciliationActions Sched = _getReconciliationActionSched();

            Sched.processReconciliationActions(TestData.CswNbtResources);
            Assert.AreEqual(CswEnumTristate.True, ContainerLocationNode.ActionApplied.Checked.ToString());
            Assert.AreEqual(CswEnumTristate.True, ContainerNode.Missing.Checked.ToString());
        }
Пример #27
0
        /// <summary>
        /// Abstract override to be called on onButtonClick
        /// </summary>
        public override bool onPropertySetButtonClick(NbtButtonData ButtonData)
        {
            if (null != ButtonData.NodeTypeProp)
            {
                //Remember: Save is an OCP too
                switch (ButtonData.NodeTypeProp.getObjectClassPropName())
                {
                case PropertyName.Fulfill:
                    CswNbtObjClassContainer NodeAsContainer = null;
                    switch (ButtonData.SelectedText)
                    {
                    case FulfillMenu.Dispose:
                        NodeAsContainer = _CswNbtResources.Nodes.GetNode(Container.RelatedNodeId);
                        if (null != NodeAsContainer)
                        {
                            NodeAsContainer.DisposeContainer();
                            NodeAsContainer.postChanges(true);
                            Status.Value = Statuses.Completed;
                        }
                        ButtonData.Action = CswEnumNbtButtonAction.refresh;
                        break;

                    case FulfillMenu.Move:
                        if (null != Container.RelatedNodeId)
                        {
                            NodeAsContainer = _CswNbtResources.Nodes.GetNode(Container.RelatedNodeId);
                            if (null != NodeAsContainer)
                            {
                                NodeAsContainer.Location.SelectedNodeId = Location.SelectedNodeId;
                                NodeAsContainer.Location.CachedNodeName = Location.CachedNodeName;
                                NodeAsContainer.Location.CachedPath     = Location.CachedPath;
                                NodeAsContainer.postChanges(false);
                                Status.Value      = Statuses.Completed;
                                ButtonData.Action = CswEnumNbtButtonAction.refresh;
                            }
                        }
                        break;
                    }     //switch( ButtonData.SelectedText )

                    _getNextStatus(ButtonData.SelectedText);

                    ButtonData.Data["requestitem"] = ButtonData.Data["requestitem"] ?? new JObject();
                    ButtonData.Data["requestitem"]["requestitemid"] = NodeId.ToString();
                    ButtonData.Data["requestitem"]["containerid"]   = (Container.RelatedNodeId ?? new CswPrimaryKey()).ToString();
                    ButtonData.Data["requestitem"]["locationid"]    = (Location.SelectedNodeId ?? new CswPrimaryKey()).ToString();
                    break;
                }//case PropertyName.Fulfill:
            }
            return(true);
        }
Пример #28
0
        public void testNonTempNodeCreateNoBarcode()
        {
            CswNbtMetaDataNodeType     ContainerNT = TestData.CswNbtResources.MetaData.getNodeType("Container");
            CswNbtMetaDataNodeTypeProp BarcodeNTP  = ContainerNT.getNodeTypePropByObjectClassProp(CswNbtObjClassContainer.PropertyName.Barcode);

            string Before = BarcodeNTP.Sequence.getCurrent();

            CswNbtObjClassContainer Container = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(ContainerNT.NodeTypeId);

            string After = BarcodeNTP.Sequence.getCurrent();

            Assert.IsNotNull(Container.Barcode.Barcode, "Creating a container and not assigning it a custom barcode did not create a barcode when it should have");
            Assert.AreNotEqual(Before, After, "Creating a container with no custom barcode did not consume a sequence value when it should have");
        }
        public override void setQuantityOptions()
        {
            CswNbtObjClassContainer ContainerNode = _CswNbtResources.Nodes.GetNode(_RequestItem.Container.RelatedNodeId);

            if (null != ContainerNode)
            {
                CswNbtNode MaterialNode = _CswNbtResources.Nodes.GetNode(ContainerNode.Material.RelatedNodeId);
                if (MaterialNode != null)
                {
                    CswNbtUnitViewBuilder Vb = new CswNbtUnitViewBuilder(_CswNbtResources);
                    Vb.setQuantityUnitOfMeasureView(MaterialNode, _RequestItem.Quantity);
                }
            }
        }
 private void onContainerPropChange(CswNbtNodeProp Prop)
 {
     if (null != Container.RelatedNodeId)
     {
         Container.setReadOnly(value: true, SaveToDb: true);
         if (null == Material.RelatedNodeId)
         {
             CswNbtObjClassContainer NodeAsContainer = _CswNbtResources.Nodes[Container.RelatedNodeId];
             if (null != NodeAsContainer)
             {
                 Material.RelatedNodeId = NodeAsContainer.Material.RelatedNodeId;
             }
         }
     }
 }