/// <summary>
        /// WCF method to get current User's cart data
        /// </summary>
        public static void getCart(ICswResources CswResources, CswNbtRequestDataModel.RequestCart Ret, object Request)
        {
            CswNbtResources     NbtResources  = _validate(CswResources);
            CswNbtActRequesting ActRequesting = new CswNbtActRequesting(NbtResources);

            ActRequesting.getCart(Ret.Data);
        }
Exemplo n.º 2
0
 protected override bool onButtonClick(NbtButtonData ButtonData)
 {
     if (null != ButtonData.NodeTypeProp)
     {
         string OCPPropName = ButtonData.NodeTypeProp.getObjectClassPropName();
         switch (OCPPropName)
         {
         case PropertyName.Request:
             if (_CswNbtResources.Permit.can(CswEnumNbtActionName.Submit_Request))
             {
                 ButtonData.Action = CswEnumNbtButtonAction.request;
                 CswNbtActRequesting       RequestAct  = new CswNbtActRequesting(_CswNbtResources);
                 CswNbtObjClassRequestItem RequestItem = RequestAct.makeEnterprisePartRequestItem(this, ButtonData);
                 ButtonData.Data["titleText"]             = "Add to Cart: " + RequestItem.Type.Value;
                 ButtonData.Data["requestItemProps"]      = RequestAct.getRequestItemAddProps(RequestItem.Node);
                 ButtonData.Data["requestItemNodeTypeId"] = RequestItem.NodeTypeId;
             }
             else
             {
                 throw new CswDniException(CswEnumErrorType.Warning, "You do not have permission to the Submit Request action.", "You do not have permission to the Submit Request action.");
             }
             break;
         }
     }
     return(true);
 }
        public static void submitRequest(ICswResources CswResources, CswNbtRequestDataModel.CswRequestReturn Ret, CswNbtNode.Node Request)
        {
            CswNbtResources     NbtResources  = _validate(CswResources);
            CswNbtActRequesting ActRequesting = new CswNbtActRequesting(NbtResources);

            Ret.Data.Succeeded = ActRequesting.submitRequest(Request.NodeId, Request.NodeName);
        }
        /// <summary>
        /// WCF method to get current User's tab counts
        /// </summary>
        public static void getCartCounts(ICswResources CswResources, CswNbtRequestDataModel.RequestCart Ret, string Request)
        {
            CswNbtResources     NbtResources  = _validate(CswResources);
            CswNbtActRequesting ActRequesting = new CswNbtActRequesting(NbtResources);

            ActRequesting.getCart(Ret.Data, CalculateCounts: true);
        }
Exemplo n.º 5
0
        public void resetCartCounts(string CartId)
        {
            //delegate has to be static because you can't create an instance yet: you don't have resources until the delegate is actually called
            CswNbtRequestDataModel.CswRequestReturn Ret = new CswNbtRequestDataModel.CswRequestReturn();
            var InitDriverType = new CswWebSvcDriver <CswNbtRequestDataModel.CswRequestReturn, string>(
                CswWebSvcResourceInitializer: new CswWebSvcResourceInitializerNbt(_Context, null),
                ReturnObj: Ret,
                WebSvcMethodPtr: (Resources, Obj, ParamObj) => CswNbtActRequesting.resetCartCounts(Resources),
                ParamObj: null
                );

            InitDriverType.run();
        }
        /// <summary>
        /// WCF method to get the NodeTypeId of the Request Material Create
        /// </summary>
        public static void getRequestItemNodeType(ICswResources CswResources, CswNbtRequestDataModel.CswNbtRequestMaterialCreateReturn Ret, object Request)
        {
            CswNbtResources NbtResources = _validate(CswResources);

            CswNbtActRequesting.checkForCentralInventoryGroups(NbtResources);
            CswNbtMetaDataObjectClass RequestItemOC = NbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestItemClass);
            CswNbtMetaDataNodeType    FirstNodeType = RequestItemOC.getLatestVersionNodeTypes().FirstOrDefault();

            if (null != FirstNodeType)
            {
                Ret.Data.NodeTypeId = FirstNodeType.NodeTypeId;
            }
        }
        //Determine the number of recurring requests that need to be processed and return that value
        public Int32 getLoadCount(ICswResources CswResources)
        {
            Int32           LoadCount    = 0;
            CswNbtResources NbtResources = (CswNbtResources)CswResources;

            if (NbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Containers))
            {
                CswNbtActRequesting ActRequesting        = new CswNbtActRequesting(NbtResources);
                CswNbtView          AllRecurringRequests = ActRequesting.getDueRecurringRequestItemsView();
                ICswNbtTree         Tree = NbtResources.Trees.getTreeFromView(AllRecurringRequests, RequireViewPermissions: false, IncludeSystemNodes: false, IncludeHiddenNodes: false);
                LoadCount = Tree.getChildNodeCount();
            }
            return(LoadCount);
        }
        public override void update()
        {
            CswNbtMetaDataObjectClass UserOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.UserClass );
            CswNbtMetaDataObjectClassProp CachedDataOcp = UserOc.getObjectClassProp( CswNbtObjClassUser.PropertyName.CachedData );
            foreach( CswNbtMetaDataNodeTypeProp Prop in CachedDataOcp.getNodeTypeProps() )
            {
                Prop.removeFromAllLayouts();
            }
            CswNbtActRequesting ActRequesting = new CswNbtActRequesting( _CswNbtSchemaModTrnsctn.MetaData._CswNbtMetaDataResources.CswNbtResources );
            foreach( CswNbtObjClassUser User in UserOc.getNodes( forceReInit: true, includeSystemNodes: false, IncludeDefaultFilters: false, IncludeHiddenNodes: true ) )
            {
                ActRequesting.resetCartCounts( User: User );
            }

        } // update()
        /// <summary>
        /// WCF method to copy request items to recurring
        /// </summary>
        public static void copyRecurring(ICswResources CswResources, CswNbtRequestDataModel.CswRequestReturn Ret, CswNbtRequestDataModel.CswRequestReturn.Ret Request)
        {
            CswNbtResources NbtResources = _validate(CswResources);
            bool            Succeeded    = false;

            if (Request.RequestItems.Any())
            {
                CswNbtWebServiceRequesting ws  = new CswNbtWebServiceRequesting(NbtResources);
                CswNbtActRequesting        act = new CswNbtActRequesting(NbtResources);
                //So here we're getting the "Recurring" Request and copying the request items from the current request into there
                CswNbtObjClassRequest RequestNode = act.getRecurringRequestNode();
                applyCopyLogic        SetRequest  = (Item) =>
                {
                    Item.Request.RelatedNodeId = RequestNode.NodeId;
                    Item.IsRecurring.Checked   = CswEnumTristate.True;
                };
                Succeeded = ws.copyRequestItems(Request, SetRequest);
            }
            Ret.Data.Succeeded = Succeeded;
        }
 private void _setDefaultValues()
 {
     if (false == CswTools.IsPrimaryKey(Request.RelatedNodeId))
     {
         CswNbtActRequesting   RequestAct     = new CswNbtActRequesting(_CswNbtResources);
         CswNbtObjClassRequest CurrentRequest = RequestAct.getCurrentRequestNode();
         if (null != CurrentRequest)
         {
             // In sched rule(s), no Current Cart will exist
             Request.RelatedNodeId = CurrentRequest.NodeId;
         }
         Request.setReadOnly(value: true, SaveToDb: true);
         Request.setHidden(value: true, SaveToDb: false);
     }
     if (false == CswTools.IsPrimaryKey(Requestor.RelatedNodeId))
     {
         CswNbtObjClassRequest ThisRequest = _CswNbtResources.Nodes[Request.RelatedNodeId];
         if (null != ThisRequest)
         {
             Requestor.RelatedNodeId    = ThisRequest.Requestor.RelatedNodeId;
             RequestedFor.RelatedNodeId = ThisRequest.Requestor.RelatedNodeId;
         }
     }
 }
Exemplo n.º 11
0
        public JObject getHeaderMenu(CswSessionResourcesNbt CswSessionResources)
        {
            JObject Ret = new JObject();

            Ret["Home"] = new JObject(new JProperty("action", "Home"));
            if (_CswNbtResources.CurrentNbtUser.IsAdministrator() || CswSessionResources.CswSessionManager.isImpersonating())
            {
                Ret["Admin"] = new JObject();
                Ret["Admin"]["haschildren"] = true;
                if (_CswNbtResources.CurrentNbtUser.IsAdministrator())
                {
                    Ret["Admin"]["Current User List"]           = new JObject();
                    Ret["Admin"]["Current User List"]["action"] = "Sessions";
                    Ret["Admin"]["Edit Config Vars"]            = new JObject();
                    Ret["Admin"]["Edit Config Vars"]["action"]  = "Config Vars";
                    //Ret["Admin"]["Statistics"] = new JObject();
                    //Ret["Admin"]["Statistics"]["href"] = "Statistics.aspx";
                    Ret["Admin"]["Quotas"]               = new JObject();
                    Ret["Admin"]["Quotas"]["action"]     = "Quotas";
                    Ret["Admin"]["Login Data"]           = new JObject();
                    Ret["Admin"]["Login Data"]["action"] = "Login Data";

                    //Removed condition for Case 29185
                    Ret["Admin"]["Impersonate"]           = new JObject();
                    Ret["Admin"]["Impersonate"]["action"] = "Impersonate";

                    if (_CswNbtResources.CurrentNbtUser.Username == CswNbtObjClassUser.ChemSWAdminUsername)
                    {
                        //Ret["Admin"]["View Log"] = new JObject();
                        //Ret["Admin"]["View Log"]["href"] = "DisplayLog.aspx";

                        Ret["Admin"]["Modules"]           = new JObject();
                        Ret["Admin"]["Modules"]["action"] = "Modules";
                    }

                    //if( _CswNbtResources.CurrentNbtUser.IsAdministrator() )
                    //{
                    //    Int32 DemoCount = _getSchemaDemoDataCount();
                    //    if( DemoCount > 0 )
                    //    {
                    //        Ret["Admin"]["Delete Demo Data (" + DemoCount + ")"] = new JObject();
                    //        Ret["Admin"]["Delete Demo Data (" + DemoCount + ")"]["action"] = "DeleteDemoNodes";
                    //    }
                    //}
                } // if( _CswNbtResources.CurrentNbtUser.IsAdministrator() )

                if (CswSessionResources.CswSessionManager.isImpersonating())
                {
                    Ret["Admin"]["End Impersonation"]           = new JObject();
                    Ret["Admin"]["End Impersonation"]["action"] = "EndImpersonation";
                }

                if ((CswSessionResources.CswSessionManager.didChangeSchema()))
                {
                    if (_CswNbtResources.CurrentNbtUser.Username == CswNbtObjClassUser.ChemSWAdminUsername || _isChemSWAdminImpersonating(CswSessionResources))
                    {
                        Ret["Admin"]["Return to NbtManager"]           = new JObject();
                        Ret["Admin"]["Return to NbtManager"]["action"] = "NbtManager";
                    }
                }
            } // if( _CswNbtResources.CurrentNbtUser.IsAdministrator() || CswSessionResources.CswSessionManager.isImpersonating() )

            Ret["Preferences"] = new JObject(
                new JProperty("haschildren", true),
                new JProperty("Profile", new JObject(
                                  new JProperty("action", "Profile"),
                                  new JProperty("userid", _CswNbtResources.CurrentNbtUser.UserId.ToString())
                                  )),
                new JProperty("Subscriptions", new JObject(
                                  new JProperty("action", "Subscriptions")
                                  ))
                );

            if (_CswNbtResources.Modules.IsModuleEnabled(CswEnumNbtModuleName.Requesting) && _CswNbtResources.Permit.can(CswEnumNbtActionName.Submit_Request))
            {
                CswNbtActRequesting RequestAction = new CswNbtActRequesting(_CswNbtResources);
                Int32 CartCount = RequestAction.getCartContentCount();
                Ret["Cart (" + CartCount + ")"]           = new JObject();
                Ret["Cart (" + CartCount + ")"]["action"] = "Submit_Request";
            }

            Ret["Help"] = new JObject();
            Ret["Help"]["haschildren"]           = true;
            Ret["Help"]["Help"]                  = new JObject();
            Ret["Help"]["Help"]["popup"]         = "help/index.htm";
            Ret["Help"]["Clear Cache"]           = new JObject();
            Ret["Help"]["Clear Cache"]["action"] = "Clear Cache";
            CswNbtMetaDataObjectClass            feedbackOC        = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.FeedbackClass);
            IEnumerable <CswNbtMetaDataNodeType> feedbackNodeTypes = feedbackOC.getNodeTypes();

            if (feedbackNodeTypes.Any())
            {
                if (_CswNbtResources.Permit.canNodeType(Security.CswEnumNbtNodeTypePermission.Create, feedbackNodeTypes.First()))
                {
                    Ret["Help"]["Give Feedback"] = new JObject();
                    //Ret["Help"]["Give Feedback"]["action"] = "AddNode";
                    Ret["Help"]["Give Feedback"]["action"] = "AddFeedback";
                    CswNbtMetaDataNodeType feedbackNodeType = feedbackNodeTypes.First();
                    Ret["Help"]["Give Feedback"]["nodetypeid"] = feedbackNodeType.NodeTypeId;
                }
            }
            Ret["Help"]["Printing Labels"]           = new JObject();
            Ret["Help"]["Printing Labels"]["popup"]  = "PrintingLabels.html";
            Ret["Help"]["Reading Balances"]          = new JObject();
            Ret["Help"]["Reading Balances"]["popup"] = "ReadingBalances.html";
            Ret["Help"]["About"]           = new JObject();
            Ret["Help"]["About"]["action"] = "About";

            Ret["Logout"] = new JObject(new JProperty("action", "Logout"));

            return(Ret);
        }
Exemplo n.º 12
0
        protected override bool onButtonClick( NbtButtonData ButtonData )
        {
            if( null != ButtonData.NodeTypeProp )
            {
                bool HasPermission = false;
                string OCPPropName = ButtonData.NodeTypeProp.getObjectClassPropName();
                switch( OCPPropName )
                {
                    case PropertyName.Request:
                        if( _CswNbtResources.Permit.can( CswEnumNbtActionName.Submit_Request ) )
                        {
                            // Case CIS-52280
                            if( Obsolete.Checked == CswEnumTristate.True )
                            {
                                throw new CswDniException( CswEnumErrorType.Warning, "Can't request Material " + TradeName + " because it is obsolete.", "Material is obsolete" );
                            }

                            HasPermission = true;
                            CswNbtActRequesting RequestAct = new CswNbtActRequesting( _CswNbtResources );

                            CswNbtObjClassRequestItem RequestItem = RequestAct.makeMaterialRequestItem( this, ButtonData );

                            ButtonData.Data["requestaction"] = ButtonData.SelectedText;
                            //ButtonData.Data["requestaction"] = OCPPropName;
                            //Case 31298: Default Option Text "Request" != "Request By Bulk"
                            if( ButtonData.SelectedText == "Request" )
                            {
                                ButtonData.SelectedText = CswEnumRequestOption.Bulk;
                            }
                            ButtonData.Data["titleText"] = ButtonData.SelectedText + " for " + TradeName.Text;
                            ButtonData.Data["requestItemProps"] = RequestAct.getRequestItemAddProps( RequestItem.Node );
                            ButtonData.Data["requestItemNodeTypeId"] = RequestItem.NodeTypeId;
                            ButtonData.Data["relatednodeid"] = NodeId.ToString();
                            ButtonData.Action = CswEnumNbtButtonAction.request;
                        }
                        break;
                    case PropertyName.Receive:
                        if( _CswNbtResources.Permit.can( CswEnumNbtActionName.Receiving ) )
                        {
                            // Case CIS-52280
                            if( Obsolete.Checked == CswEnumTristate.True )
                            {
                                throw new CswDniException( CswEnumErrorType.Warning, "Can't receive Material " + TradeName + " because it is obsolete.", "Material is obsolete" );
                            }

                            HasPermission = true;
                            CswNbtActReceiving Act = new CswNbtActReceiving( _CswNbtResources, NodeId );
                            _CswNbtResources.setAuditActionContext( CswEnumNbtActionName.Receiving );

                            Action<CswNbtNode> After = delegate( CswNbtNode NewNode )
                                {
                                    CswNbtObjClassContainer newContainer = NewNode;
                                    //Case 29436
                                    if( newContainer.isLocationInAccessibleInventoryGroup( _CswNbtResources.CurrentNbtUser.DefaultLocationId ) )
                                    {
                                        newContainer.Location.SelectedNodeId = _CswNbtResources.CurrentNbtUser.DefaultLocationId;
                                    }
                                    newContainer.Owner.RelatedNodeId = _CswNbtResources.CurrentNbtUser.UserId;
                                    DateTime ExpirationDate = getDefaultExpirationDate( DateTime.Now );
                                    if( DateTime.MinValue != ExpirationDate )
                                    {
                                        newContainer.ExpirationDate.DateTimeValue = ExpirationDate;
                                    }
                                    //Container.postChanges( false );
                                };
                            CswNbtObjClassContainer Container = Act.makeContainer( After );

                            ButtonData.Data["state"] = new JObject();
                            ButtonData.Data["state"]["materialId"] = NodeId.ToString();
                            ButtonData.Data["state"]["materialNodeTypeId"] = NodeTypeId;
                            ButtonData.Data["state"]["tradeName"] = TradeName.Text;
                            ButtonData.Data["state"]["nodeName"] = NodeName;

                            Int32 ContainerLimit = CswConvert.ToInt32( _CswNbtResources.ConfigVbls.getConfigVariableValue( CswEnumNbtConfigurationVariables.container_receipt_limit.ToString() ) );
                            ButtonData.Data["state"]["containerlimit"] = ContainerLimit;
                            ButtonData.Data["state"]["containerNodeId"] = Container.NodeId.ToString();
                            ButtonData.Data["state"]["containerNodeTypeId"] = Container.NodeTypeId;
                            bool customBarcodes = CswConvert.ToBoolean( _CswNbtResources.ConfigVbls.getConfigVariableValue( CswEnumNbtConfigurationVariables.custom_barcodes.ToString() ) );
                            ButtonData.Data["state"]["customBarcodes"] = customBarcodes;
                            ButtonData.Data["state"]["nodetypename"] = this.NodeType.NodeTypeName;
                            ButtonData.Data["state"]["containerAddLayout"] = Act.getContainerAddProps( Container );

                            onReceiveButtonClick( ButtonData );
                            _setCofAData( ButtonData );
                            ButtonData.Action = CswEnumNbtButtonAction.receive;
                        }
                        break;
                    case CswNbtObjClass.PropertyName.Save:
                        HasPermission = true;
                        break;
                }
                HasPermission = HasPermission || onPropertySetButtonClick( ButtonData );
                if( false == HasPermission )
                {
                    throw new CswDniException( CswEnumErrorType.Warning, "You do not have permission to the " + OCPPropName + " action.", "You do not have permission to the " + OCPPropName + " action." );
                }
            }

            return true;
        }
        }//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()