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.");
            }
        }
Пример #2
0
        internal CswNbtNode createContainerDispenseTransactionNode(CswNbtObjClassContainer Container, DateTime?DateCreated = null, double?Quantity = null, string Type = null)
        {
            CswNbtNode ret = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(_getNodeTypeId("Container Dispense Transaction"), delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassContainerDispenseTransaction ContDispTransNode = NewNode;
                ContDispTransNode.DestinationContainer.RelatedNodeId         = Container.NodeId;
                ContDispTransNode.QuantityDispensed.Quantity = Quantity ?? Container.Quantity.Quantity;
                ContDispTransNode.QuantityDispensed.UnitId   = Container.Quantity.UnitId;
                ContDispTransNode.Type.Value = Type ?? CswEnumNbtContainerDispenseType.Receive.ToString();
                ContDispTransNode.DispensedDate.DateTimeValue = DateCreated ?? Container.DateCreated.DateTimeValue;
            });

            _finalize();

            return(ret);
        }
        /// <summary>
        /// Record a container dispense transaction
        /// </summary>
        /// <param name="DispenseType"></param>
        /// <param name="Quantity">Quantity adjustment (negative for dispenses, disposes, and wastes, positive for receiving and add)</param>
        /// <param name="UnitId"></param>
        /// <param name="RequestItemId"></param>
        /// <param name="SourceContainer"></param>
        /// <param name="DestinationContainer"></param>
        public void create(CswEnumNbtContainerDispenseType DispenseType, double Amount, CswPrimaryKey UnitId, CswPrimaryKey RequestItemId = null,
                           CswNbtObjClassContainer SrcContainer = null, CswNbtObjClassContainer DestinationContainer = null, bool IsImport = false)
        {
            CswNbtMetaDataObjectClass ContDispTransOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerDispenseTransactionClass);
            CswNbtMetaDataNodeType    ContDispTransNT = ContDispTransOC.FirstNodeType;

            if (ContDispTransNT != null)
            {
                _CswNbtResources.Nodes.makeNodeFromNodeTypeId(ContDispTransNT.NodeTypeId, delegate(CswNbtNode NewNode)
                {
                    if (null != _TempDispenseTransaction)
                    {
                        NewNode.copyPropertyValues(_TempDispenseTransaction.Node);
                    }
                    CswNbtObjClassContainerDispenseTransaction ContDispTransNode = NewNode;
                    if (SrcContainer != null)
                    {
                        ContDispTransNode.SourceContainer.RelatedNodeId             = SrcContainer.NodeId;
                        ContDispTransNode.RemainingSourceContainerQuantity.Quantity = SrcContainer.Quantity.Quantity;
                        if (DispenseType == CswEnumNbtContainerDispenseType.Dispose)
                        {
                            ContDispTransNode.RemainingSourceContainerQuantity.Quantity = 0;
                        }
                        ContDispTransNode.RemainingSourceContainerQuantity.UnitId = SrcContainer.Quantity.UnitId;
                    }
                    if (DestinationContainer != null)
                    {
                        ContDispTransNode.DestinationContainer.RelatedNodeId = DestinationContainer.NodeId;
                    }
                    ContDispTransNode.Dispenser.RelatedNodeId    = _CswNbtResources.CurrentNbtUser.UserId;
                    ContDispTransNode.QuantityDispensed.Quantity = Amount;
                    ContDispTransNode.QuantityDispensed.UnitId   = UnitId;
                    ContDispTransNode.Type.Value = DispenseType.ToString();
                    ContDispTransNode.DispensedDate.DateTimeValue = DateTime.Now;
                    if (null != RequestItemId && Int32.MinValue != RequestItemId.PrimaryKey)
                    {
                        ContDispTransNode.RequestItem.RelatedNodeId = RequestItemId;
                    }
                }, OverrideUniqueValidation: IsImport, OverrideMailReportEvents: IsImport);
            } // if( ContDispTransNT != null )
        }
Пример #4
0
        /// <summary>
        /// Checks permission and undisposes a container (does not post changes!)
        /// </summary>
        public void Undispose(bool OverridePermissions = false, bool CreateContainerLocation = true)
        {
            if (OverridePermissions || CswNbtObjClassContainer.canContainer(_CswNbtResources, _CswNbtResources.Actions[CswEnumNbtActionName.UndisposeContainer], _Container.getPermissionGroupId()))
            {
                CswNbtObjClassContainerDispenseTransaction ContDispTransNode = _getMostRecentDisposeTransaction(_Container.NodeId);

                if (ContDispTransNode != null)
                {
                    _Container.Quantity.Quantity = -ContDispTransNode.QuantityDispensed.Quantity;
                    _Container.Quantity.UnitId   = ContDispTransNode.QuantityDispensed.UnitId;
                    ContDispTransNode.Node.delete(OverridePermissions: true);
                }
                _Container.Disposed.Checked = CswEnumTristate.False;

                if (CreateContainerLocation)
                {
                    _Container.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.Undispose);
                }
                _Container.Node.IconFileNameOverride = "";
            }
        }
        private void _createReceiveDispenseTransaction(CswNbtResources _CswNbtResources, CswPrimaryKey ContainerId, bool ContainerHasOtherTransactions)
        {
            CswNbtMetaDataObjectClass ContainerDispTransOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerDispenseTransactionClass);
            double Qty = 0.0;

            if (ContainerHasOtherTransactions)
            {
                Qty = _getQuantityToAdd(_CswNbtResources, ContainerId, ContainerDispTransOC);
            }
            CswNbtObjClassContainer Container = _CswNbtResources.Nodes[ContainerId];

            _CswNbtResources.Nodes.makeNodeFromNodeTypeId(ContainerDispTransOC.FirstNodeType.NodeTypeId, delegate(CswNbtNode NewNode)
            {
                CswNbtObjClassContainerDispenseTransaction ContDispTransNode = NewNode;
                ContDispTransNode.DestinationContainer.RelatedNodeId         = Container.NodeId;
                ContDispTransNode.QuantityDispensed.Quantity = Container.Quantity.Quantity + Qty;
                ContDispTransNode.QuantityDispensed.UnitId   = Container.Quantity.UnitId;
                ContDispTransNode.Type.Value = CswEnumNbtContainerDispenseType.Receive.ToString();
                ContDispTransNode.DispensedDate.DateTimeValue = Container.DateCreated.DateTimeValue;
            });
        }
Пример #6
0
        private CswNbtObjClassContainerDispenseTransaction _getMostRecentDisposeTransaction(CswPrimaryKey NodeId)
        {
            CswNbtObjClassContainerDispenseTransaction ContDispTransNode = null;
            CswNbtMetaDataObjectClass ContDispTransOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerDispenseTransactionClass);
            CswNbtMetaDataNodeType    ContDispTransNT = ContDispTransOC.FirstNodeType;

            if (ContDispTransNT != null)
            {
                CswNbtView DisposedContainerTransactionsView = new CswNbtView(_CswNbtResources);
                DisposedContainerTransactionsView.ViewName = "ContDispTransDisposed";
                CswNbtViewRelationship ParentRelationship = DisposedContainerTransactionsView.AddViewRelationship(ContDispTransNT, false);

                DisposedContainerTransactionsView.AddViewPropertyAndFilter(
                    ParentRelationship,
                    ContDispTransNT.getNodeTypePropByObjectClassProp(CswNbtObjClassContainerDispenseTransaction.PropertyName.SourceContainer),
                    NodeId.PrimaryKey.ToString(),
                    CswEnumNbtSubFieldName.NodeID,
                    false,
                    CswEnumNbtFilterMode.Equals
                    );

                DisposedContainerTransactionsView.AddViewPropertyAndFilter(
                    ParentRelationship,
                    ContDispTransNT.getNodeTypePropByObjectClassProp(CswNbtObjClassContainerDispenseTransaction.PropertyName.Type),
                    CswEnumNbtContainerDispenseType.Dispose.ToString(),
                    CswEnumNbtSubFieldName.Value,
                    false,
                    CswEnumNbtFilterMode.Equals
                    );

                ICswNbtTree DispenseTransactionTree = _CswNbtResources.Trees.getTreeFromView(DisposedContainerTransactionsView, false, true, false);
                int         NumOfTransactions       = DispenseTransactionTree.getChildNodeCount();
                if (NumOfTransactions > 0)
                {
                    DispenseTransactionTree.goToNthChild(0);
                    ContDispTransNode = DispenseTransactionTree.getNodeForCurrentPosition();
                }
            }
            return(ContDispTransNode);
        }
        private double _getQuantityToAdd(CswNbtResources _CswNbtResources, CswPrimaryKey ContainerId, CswNbtMetaDataObjectClass ContainerDispTransOC)
        {
            double Qty = 0.0;
            CswNbtMetaDataObjectClassProp CDTContainerOCP     = ContainerDispTransOC.getObjectClassProp(CswNbtObjClassContainerDispenseTransaction.PropertyName.DestinationContainer);
            CswNbtMetaDataObjectClassProp CDTDispensedDateOCP = ContainerDispTransOC.getObjectClassProp(CswNbtObjClassContainerDispenseTransaction.PropertyName.DispensedDate);
            CswNbtView             CDTView = new CswNbtView(_CswNbtResources);
            CswNbtViewRelationship CDTRel  = CDTView.AddViewRelationship(ContainerDispTransOC, false);

            CDTView.AddViewPropertyAndFilter(CDTRel, CDTContainerOCP, CswEnumNbtFilterConjunction.And, ContainerId.PrimaryKey.ToString(), CswEnumNbtSubFieldName.NodeID, false, CswEnumNbtFilterMode.Equals);
            CswNbtViewProperty DispensedDateVP = CDTView.AddViewProperty(CDTRel, CDTDispensedDateOCP);

            CDTView.setSortProperty(DispensedDateVP, CswEnumNbtViewPropertySortMethod.Ascending);
            ICswNbtTree CDTTree = _CswNbtResources.Trees.getTreeFromView(CDTView, false, false, true);

            CDTTree.goToRoot();
            if (CDTTree.getChildNodeCount() > 0)
            {
                CDTTree.goToNthChild(0);
                CswNbtObjClassContainerDispenseTransaction ContDispTransNode = CDTTree.getNodeForCurrentPosition();
                Qty = ContDispTransNode.QuantityDispensed.Quantity + ContDispTransNode.RemainingSourceContainerQuantity.Quantity;
            }
            return(Qty);
        }
 public CswNbtContainerDispenseTransactionBuilder(CswNbtResources CswNbtResources, CswNbtObjClassContainerDispenseTransaction TempDispenseTransaction = null)
 {
     _CswNbtResources         = CswNbtResources;
     _TempDispenseTransaction = TempDispenseTransaction;
 }