/// <summary>
        /// WCF method to fulfill a Move Containers request
        /// </summary>
        public static void fulfillContainerMoveRequest(ICswResources CswResources, CswNbtRequestDataModel.CswRequestReturn Ret, CswNbtRequestDataModel.RequestFulfill Request)
        {
            CswNbtResources           NbtResources = _validate(CswResources);
            CswNbtObjClassRequestItem RequestItem  = NbtResources.Nodes[Request.RequestItemId];

            if (null != RequestItem)
            {
                Int32 ContainersMoved = moveContainers(NbtResources, RequestItem, Request);
                Ret.Data.Succeeded = ContainersMoved > 0;
                if (Ret.Data.Succeeded)
                {
                    if (CswTools.IsDouble(RequestItem.TotalMoved.Value))
                    {
                        RequestItem.TotalMoved.Value += ContainersMoved;
                    }
                    else
                    {
                        RequestItem.TotalMoved.Value = ContainersMoved;
                    }
                    RequestItem.Status.Value = CswNbtObjClassRequestItem.Statuses.Moved;
                    RequestItem.FulfillmentHistory.AddComment("Moved " + ContainersMoved + " containers to " +
                                                              CswNbtNode.getNodeLink(RequestItem.Location.SelectedNodeId, RequestItem.Location.CachedFullPath));
                    RequestItem.postChanges(ForceUpdate: false);
                }
            }
        }
示例#2
0
        private void onSubmittedDatePropChange(CswNbtNodeProp NodeProp, bool Creating)
        {
            if (SubmittedDate.DateTimeValue != DateTime.MinValue)
            {
                ICswNbtTree Tree         = _getRelatedRequestItemsTree(FilterByStatus: CswNbtObjClassRequestItem.Statuses.Pending);
                int         RequestCount = Tree.getChildNodeCount();
                if (RequestCount == 1)
                {
                    Tree.goToNthChild(0);

                    Int32 RequestItemNodeCount = Tree.getChildNodeCount();
                    if (RequestItemNodeCount > 0)
                    {
                        for (Int32 N = 0; N < RequestItemNodeCount; N += 1)
                        {
                            Tree.goToNthChild(N);
                            CswNbtObjClassRequestItem RequestItem = Tree.getNodeForCurrentPosition();
                            RequestItem.Status.Value = CswNbtObjClassRequestItem.Statuses.Submitted;
                            RequestItem.Request.RefreshNodeName();
                            RequestItem.Name.RecalculateReferenceValue();
                            RequestItem.postChanges(ForceUpdate: false);
                            Tree.goToParentNode();
                        }
                    }
                }
            }
        }
        private void _processRequest(String RequestItemId, CswNbtPropertySetMaterial Material)
        {
            CswNbtObjClassRequestItem RequestItemMaterialCreate = _CswNbtResources.Nodes[RequestItemId];

            RequestItemMaterialCreate.Material.RelatedNodeId = Material.NodeId;
            RequestItemMaterialCreate.Status.Value           = CswNbtObjClassRequestItem.Statuses.Created;
            RequestItemMaterialCreate.Type.Value             = CswNbtObjClassRequestItem.Types.MaterialBulk;
            RequestItemMaterialCreate.FulfillmentHistory.AddComment("Created " + Material.Node.NodeLink);
            RequestItemMaterialCreate.postChanges(ForceUpdate: false);
        }
        protected override void afterPromoteNodeLogic()
        {
            CswNbtObjClassRequestItem RequestItemNode = _CswNbtResources.Nodes[RequestItem.RelatedNodeId];

            if (null != RequestItemNode)
            {
                RequestItemNode.FulfillmentHistory.AddComment("Received " + Node.NodeLink);
                RequestItemNode.Status.Value = CswNbtObjClassRequestItem.Statuses.Received;
                RequestItemNode.postChanges(false);
            }
        }
示例#5
0
        } // update()

        private void _updateRequestItems( CswNbtMetaDataNodeType RequestItemNT, CswNbtMetaDataNodeTypeProp ItemNumberNTP )
        {
            CswNbtView RequestItems = _CswNbtSchemaModTrnsctn.makeNewView( "RequestItemsNoItemNo31861", CswEnumNbtViewVisibility.Hidden );
            CswNbtViewRelationship Parent = RequestItems.AddViewRelationship( RequestItemNT, false );
            RequestItems.AddViewPropertyAndFilter( Parent, ItemNumberNTP, FilterMode : CswEnumNbtFilterMode.Null );

            ICswNbtTree RequestItemsTree = _CswNbtSchemaModTrnsctn.getTreeFromView( RequestItems, false );
            for( int i = 0; i < RequestItemsTree.getChildNodeCount(); i++ )
            {
                RequestItemsTree.goToNthChild( i );
                CswNbtObjClassRequestItem RequestItem = RequestItemsTree.getNodeForCurrentPosition();
                RequestItem.ItemNumber.setSequenceValue();
                RequestItem.postChanges( false );
                RequestItemsTree.goToParentNode();
            }
        }
 //updates total dispensed for all dispense request fulfillment actions 
 private void _onCreateFromRequestItem()
 {
     if( CswTools.IsPrimaryKey( RequestItem.RelatedNodeId ) )
     {
         CswNbtObjClassRequestItem RequestItemNode = _CswNbtResources.Nodes[RequestItem.RelatedNodeId];
         if( null != RequestItemNode )
         {
             if( Type.Value == CswEnumNbtContainerDispenseType.Dispense.ToString() )
             {
                 CswNbtUnitConversion Conversion = new CswNbtUnitConversion( _CswNbtResources, QuantityDispensed.UnitId, RequestItemNode.TotalDispensed.UnitId, RequestItemNode.Material.RelatedNodeId );
                 double DispensedQuantity = Conversion.convertUnit( QuantityDispensed.Quantity );
                 RequestItemNode.TotalDispensed.Quantity -= DispensedQuantity; // Subtracting a negative number in order to add
                 RequestItemNode.FulfillmentHistory.AddComment( "Dispensed " + QuantityDispensed.Gestalt + " into " + CswNbtNode.getNodeLink( DestinationContainer.RelatedNodeId, DestinationContainer.Gestalt ) );
                 RequestItemNode.Status.Value = CswNbtObjClassRequestItem.Statuses.Dispensed;
             }
             RequestItemNode.postChanges( false );
         }
     }
 }
        }//initScheduleLogicDetail()

        public void threadCallBack(ICswResources CswResources)
        {
            _LogicRunStatus = CswEnumScheduleLogicRunStatus.Running;

            CswNbtResources _CswNbtResources = (CswNbtResources)CswResources;

            _CswNbtResources.AuditContext = "Scheduler Task: " + RuleName;

            if (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus)
            {
                try
                {
                    if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers))
                    {
                        Int32 RequestsLimit = CswConvert.ToInt32(_CswNbtResources.ConfigVbls.getConfigVariableValue(CswEnumNbtConfigurationVariables.generatorlimit.ToString()));
                        if (RequestsLimit <= 0)
                        {
                            RequestsLimit = 1;
                        }

                        CswNbtActRequesting ActRequesting        = new CswNbtActRequesting(_CswNbtResources);
                        CswNbtView          AllRecurringRequests = ActRequesting.getDueRecurringRequestItemsView();
                        ICswNbtTree         Tree = _CswNbtResources.Trees.getTreeFromView(AllRecurringRequests, RequireViewPermissions: false, IncludeSystemNodes: false, IncludeHiddenNodes: false);

                        Int32  TotalRequestsProcessed = 0;
                        string RequestDescriptions    = string.Empty;
                        Int32  TotatRequests          = Tree.getChildNodeCount();

                        for (Int32 ChildN = 0; (ChildN < TotatRequests && TotalRequestsProcessed < RequestsLimit) && (CswEnumScheduleLogicRunStatus.Stopping != _LogicRunStatus); ChildN++)
                        {
                            string Description = "";
                            try
                            {
                                Tree.goToNthChild(ChildN);
                                CswNbtObjClassRequestItem CurrentRequestItem = Tree.getNodeForCurrentPosition();
                                if (_doesRequestItemCopyNow(CurrentRequestItem))
                                {
                                    Description = CurrentRequestItem.Description.StaticText;
                                    CswNbtObjClassRequest RecurringRequest = _CswNbtResources.Nodes[CurrentRequestItem.Request.RelatedNodeId];
                                    if (null != RecurringRequest)
                                    {
                                        CswNbtObjClassUser Requestor = _CswNbtResources.Nodes[RecurringRequest.Requestor.RelatedNodeId];
                                        if (null != Requestor)
                                        {
                                            CswNbtObjClassRequestItem CopiedRequestItem = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(CurrentRequestItem.NodeTypeId, delegate(CswNbtNode NewNode)
                                            {
                                                // We'd get all of this for free if we used copyNode,
                                                // but then we'd have to manually do as much work in the other direction:
                                                // un-hiding properties, etc.
                                                CswNbtActRequesting ThisUserAct     = new CswNbtActRequesting(_CswNbtResources, Requestor);
                                                CswNbtObjClassRequest UsersCartNode = ThisUserAct.getCurrentRequestNode();
                                                if (null != UsersCartNode)
                                                {
                                                    CswNbtObjClassRequestItem NewRequestItem = NewNode;
                                                    // Most importantly, put the new request item in the current cart
                                                    NewRequestItem.Request.RelatedNodeId = UsersCartNode.NodeId;

                                                    NewRequestItem.Requestor.RelatedNodeId      = CurrentRequestItem.Requestor.RelatedNodeId;
                                                    NewRequestItem.Material.RelatedNodeId       = CurrentRequestItem.Material.RelatedNodeId;
                                                    NewRequestItem.Material.CachedNodeName      = CurrentRequestItem.Material.CachedNodeName;
                                                    NewRequestItem.InventoryGroup.RelatedNodeId = CurrentRequestItem.InventoryGroup.RelatedNodeId;
                                                    NewRequestItem.Location.SelectedNodeId      = CurrentRequestItem.Location.SelectedNodeId;
                                                    NewRequestItem.Location.CachedPath          = CurrentRequestItem.Location.CachedPath;
                                                    NewRequestItem.Comments.CommentsJson        = CurrentRequestItem.Comments.CommentsJson;
                                                    NewRequestItem.Type.Value = CurrentRequestItem.Type.Value;

                                                    if (CurrentRequestItem.Type.Value == CswNbtObjClassRequestItem.Types.MaterialSize)
                                                    {
                                                        NewRequestItem.Size.RelatedNodeId  = CurrentRequestItem.Size.RelatedNodeId;
                                                        NewRequestItem.Size.CachedNodeName = CurrentRequestItem.Size.CachedNodeName;
                                                        NewRequestItem.SizeCount.Value     = CurrentRequestItem.SizeCount.Value;
                                                    }
                                                    else
                                                    {
                                                        NewRequestItem.Quantity.Quantity       = CurrentRequestItem.Quantity.Quantity;
                                                        NewRequestItem.Quantity.CachedUnitName = CurrentRequestItem.Quantity.CachedUnitName;
                                                        NewRequestItem.Quantity.UnitId         = CurrentRequestItem.Quantity.UnitId;
                                                    }
                                                    NewRequestItem.Status.Value = CswNbtObjClassRequestItem.Statuses.Pending;

                                                    NewRequestItem.postChanges(ForceUpdate: false);

                                                    CurrentRequestItem.NextReorderDate.DateTimeValue = CswNbtPropertySetSchedulerImpl.getNextDueDate(CurrentRequestItem.Node, CurrentRequestItem.NextReorderDate, CurrentRequestItem.RecurringFrequency, ForceUpdate: true);
                                                    CurrentRequestItem.postChanges(ForceUpdate: false);
                                                }
                                            });
                                        }
                                        RequestDescriptions += CurrentRequestItem.Description + "; ";
                                    }
                                }
                                Tree.goToParentNode();
                            } // if ~( not null, is recurring and is due)
                            catch (Exception Exception)
                            {
                                string Message = "Unable to create recurring request " + Description + ", due to the following exception: " + Exception.Message;
                                RequestDescriptions += Message;
                                _CswNbtResources.logError(new CswDniException(Message));
                            } //catch
                            finally
                            {
                                TotalRequestsProcessed += 1;
                            }
                        } //iterate requests

                        string StatusMessage = "No Recurring Requests found to process";
                        if (TotalRequestsProcessed > 0)
                        {
                            StatusMessage = TotalRequestsProcessed.ToString() + " requests processed: " + RequestDescriptions;
                        }
                        _CswScheduleLogicDetail.StatusMessage = StatusMessage;
                        _LogicRunStatus = CswEnumScheduleLogicRunStatus.Succeeded; //last line
                    }
                }//try
                catch (Exception Exception)
                {
                    _CswScheduleLogicDetail.StatusMessage = "CswScheduleLogicNbtGenRequests::threadCallBack() exception: " + Exception.Message + "; " + Exception.StackTrace;
                    _CswNbtResources.logError(new CswDniException(_CswScheduleLogicDetail.StatusMessage));
                    _LogicRunStatus = CswEnumScheduleLogicRunStatus.Failed;
                } //catch
            }     //if we're not shutting down
        }         //threadCallBack()