示例#1
0
        public void resetCartCounts(CswNbtObjClassUser User)
        {
            if (null != User)
            {
                CswNbtObjClassUser.Cache UserCache = User.CurrentCache;
                UserCache.CartCounts = new CswNbtObjClassUser.Cache.Cart();

                CswNbtView ReqView = new CswNbtView(_CswNbtResources);
                CswNbtMetaDataObjectClass RequestOc = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestClass);
                CswNbtViewRelationship    RootVr    = ReqView.AddViewRelationship(RequestOc, IncludeDefaultFilters: false);

                CswNbtMetaDataObjectClassProp RequestorOcp = RequestOc.getObjectClassProp(CswNbtObjClassRequest.PropertyName.Requestor);
                ReqView.AddViewPropertyAndFilter(RootVr, RequestorOcp, FilterMode: CswEnumNbtFilterMode.Equals, SubFieldName: CswEnumNbtSubFieldName.NodeID, Value: User.NodeId.PrimaryKey.ToString());

                CswNbtMetaDataObjectClassProp RequestOcp     = _RequestItemOC.getObjectClassProp(CswNbtObjClassRequestItem.PropertyName.Request);
                CswNbtViewRelationship        RequestItemRel = ReqView.AddViewRelationship(RootVr,
                                                                                           CswEnumNbtViewPropOwnerType.Second,
                                                                                           RequestOcp, IncludeDefaultFilters: false);

                ICswNbtTree Tree         = _CswNbtResources.Trees.getTreeFromView(ReqView, IncludeSystemNodes: false, RequireViewPermissions: false, IncludeHiddenNodes: false);
                Int32       RequestCount = Tree.getChildNodeCount();
                if (RequestCount > 0)
                {
                    for (Int32 R = 0; R < RequestCount; R += 1)
                    {
                        Tree.goToNthChild(R);
                        CswNbtObjClassRequest Request = Tree.getNodeForCurrentPosition();
                        if (Request.IsFavorite.Checked == CswEnumTristate.True)
                        {
                            UserCache.CartCounts.FavoriteRequestItems += Tree.getChildNodeCount();
                        }
                        else if (Request.IsRecurring.Checked == CswEnumTristate.True)
                        {
                            UserCache.CartCounts.RecurringRequestItems += Tree.getChildNodeCount();
                        }
                        else
                        {
                            for (Int32 I = 0; I < Tree.getChildNodeCount(); I += 1)
                            {
                                Tree.goToNthChild(I);
                                CswNbtObjClassRequestItem RequestItem = Tree.getNodeForCurrentPosition();
                                if (RequestItem.Status.Text == CswNbtObjClassRequestItem.Statuses.Pending)
                                {
                                    UserCache.CartCounts.PendingRequestItems += 1;
                                }
                                else//Won't this also include completed and cancelled Request Items?  Is that what we want?
                                {
                                    UserCache.CartCounts.SubmittedRequestItems += 1;
                                }
                                Tree.goToParentNode();
                            }
                        }
                        Tree.goToParentNode();
                    }
                }
                User.CurrentCache = UserCache;
                User.postChanges(ForceUpdate: false);
            }
        }
示例#2
0
        public Cart getCart(Cart Cart, bool CalculateCounts = false)
        {
            CswNbtObjClassRequest NodeAsRequest = getCurrentRequestNode();

            if (null != NodeAsRequest)
            {
                Cart.CurrentRequest = new CswNbtNode.Node(NodeAsRequest.Node);
            }

            CswNbtView PendingItemsView = getPendingItemsView();

            PendingItemsView.SaveToCache(IncludeInQuickLaunch: false);
            Cart.PendingItemsView = PendingItemsView;

            CswNbtView FavoritesView = getFavoriteRequestNamesView();

            FavoritesView.SaveToCache(IncludeInQuickLaunch: false);
            Cart.FavoritesView = FavoritesView;

            CswNbtView SubmittedItems = getSubmittedRequestItemsView();

            SubmittedItems.SaveToCache(IncludeInQuickLaunch: false);
            Cart.SubmittedItemsView = SubmittedItems;

            CswNbtView RecurringItems = getUsersRecurringRequestItemsView();

            RecurringItems.SaveToCache(IncludeInQuickLaunch: false);
            Cart.RecurringItemsView = RecurringItems;

            CswNbtView FavoriteItems = getFavoriteRequestsItemsView();

            FavoriteItems.SaveToCache(IncludeInQuickLaunch: false);
            Cart.FavoriteItemsView = FavoriteItems;

            Cart.CopyableRequestTypes = new Collection <String>
            {
                CswNbtObjClassRequestItem.Types.EnterprisePart,
                CswNbtObjClassRequestItem.Types.MaterialBulk,
                CswNbtObjClassRequestItem.Types.MaterialSize
            };

            Cart.Counts = CswNbtObjClassUser.getCurrentUserCache(_CswNbtResources).CartCounts;



            //if( CalculateCounts )
            //{
            //    //This is expensive and we can do it in the next async request
            //    Cart.Counts.PendingRequestItems = getCartContentCount();
            //    Cart.Counts.SubmittedRequestItems = _getItemCount( SubmittedItems );
            //    Cart.Counts.RecurringRequestItems = _getItemCount( RecurringItems );
            //    Cart.Counts.FavoriteRequestItems = _getItemCount( FavoriteItems );
            //}
            return(Cart);
        }
示例#3
0
        public CswPrimaryKey getRecurringRequestNodeId()
        {
            CswPrimaryKey         Ret = null;
            CswNbtObjClassRequest RecurringRequest = getRecurringRequestNode();

            if (null != RecurringRequest)
            {
                Ret = RecurringRequest.NodeId;
            }
            return(Ret);
        }
示例#4
0
        //Is this really necessary?
        public CswPrimaryKey getCurrentRequestNodeId()
        {
            CswPrimaryKey         Ret         = null;
            CswNbtObjClassRequest RequestNode = getCurrentRequestNode();

            if (null != RequestNode)
            {
                Ret = RequestNode.NodeId;
            }
            return(Ret);
        }
示例#5
0
        //this is the open carts view, scoped to the user's current Request
        public CswNbtView getPendingItemsView()
        {
            CswNbtView Ret = getOpenCartsView();

            Ret.ViewName = PendingItemsViewName;
            CswNbtObjClassRequest  Request = getCurrentRequestNode();
            CswNbtViewRelationship RootVr  = Ret.Root.ChildRelationships[0];

            RootVr.NodeIdsToFilterIn.Clear();
            RootVr.NodeIdsToFilterIn.Add(Request.NodeId);
            return(Ret);
        }
        /// <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;
        }
示例#7
0
        /// <summary>
        /// Sumbits all pending Request Items
        /// </summary>
        /// <returns>true on success</returns>
        public bool submitRequest(CswPrimaryKey NodeId, string NodeName)
        {
            bool Ret = false;

            if (null != NodeId)
            {
                CswNbtObjClassRequest NodeAsRequest = _CswNbtResources.Nodes.GetNode(NodeId);
                if (null != NodeAsRequest)
                {
                    if (getCartContentCount() > 0)
                    {
                        NodeAsRequest.SubmittedDate.DateTimeValue = DateTime.Now;
                        NodeAsRequest.Name.Text = NodeName;
                        NodeAsRequest.postChanges(true);

                        Ret = true;
                    }
                }
            }
            return(Ret);
        }
示例#8
0
 //Get the first pending request, or make a new one if one doesn't exist
 public CswNbtObjClassRequest getCurrentRequestNode()
 {
     if (null == _CurrentRequestNode &&
         false == (_ThisUser is CswNbtSystemUser))
     {
         _CurrentRequestNode = _getFirstPendingRequest();
         if (null == _CurrentRequestNode)
         {
             CswNbtMetaDataNodeType RequestNt = _RequestOC.getLatestVersionNodeTypes().FirstOrDefault();
             if (null == RequestNt)
             {
                 //This error makes slightly more sense, but again,
                 //it sounds like it's the user's fault that RequestNT doesn't exist
                 throw new CswDniException(CswEnumErrorType.Warning,
                                           "Cannot Submit Request without a valid Request object.",
                                           "No Request NodeType could be found.");
             }
             _CurrentRequestNode = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(RequestNt.NodeTypeId);
         }
     }
     return(_CurrentRequestNode);
 }
        /// <summary>
        /// WCF method to create a favorite
        /// </summary>
        public static void createFavorite(ICswResources CswResources, CswNbtRequestDataModel.CswRequestReturn Ret, CswNbtRequestDataModel.CswRequestReturn.Ret Request)
        {
            CswNbtResources NbtResources = _validate(CswResources);
            bool            Succeeded    = false;

            //This webservice is being called in the webclient twice - once to create the temp, and again to save the changes
            //this is really awkward - all this webservice should really do is return the Nodetypeid needed to do a traditional add
            //...oh, but wait, we need to make sure Favorite is checked in this case (and ONLY in this case) - *sigh*
            if (null != Request && false == string.IsNullOrEmpty(Request.RequestId))
            {
                CswNbtObjClassRequest Favorite = NbtResources.Nodes[Request.RequestId];
                if (null != Favorite)
                {
                    Succeeded = true;
                    Favorite.PromoteTempToReal();
                }
            }
            else
            {
                CswNbtMetaDataObjectClass RequestOc = NbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.RequestClass);
                CswNbtMetaDataNodeType    RequestNt = RequestOc.getLatestVersionNodeTypes().FirstOrDefault();
                if (null != RequestNt)
                {
                    CswNbtObjClassRequest Favorite = NbtResources.Nodes.makeNodeFromNodeTypeId(RequestNt.NodeTypeId, IsTemp: true);
                    if (null != Favorite)
                    {
                        Favorite.IsFavorite.Checked = CswEnumTristate.True;
                        Favorite.Name.Text          = string.Empty;
                        Favorite.postChanges(ForceUpdate: false);
                        Succeeded = true;
                        CswPropIdAttr NameIdAttr = new CswPropIdAttr(Favorite.Node, Favorite.Name.NodeTypeProp);
                        Ret.Data.CswRequestId   = Favorite.NodeId;
                        Ret.Data.CswRequestName = NameIdAttr;
                    }
                }
            }
            Ret.Data.Succeeded = Succeeded;
        }
示例#10
0
        //so this makes it sound like we get the first, and only the first recurring Request - is that right?
        public CswNbtObjClassRequest getRecurringRequestNode()
        {
            if (null == _RecurringRequestNode &&
                false == (_ThisUser is CswNbtSystemUser))
            {
                CswNbtView             RequestView = getRequestViewBase(LimitToUnsubmitted: false, IncludeDefaultFilters: false);
                CswNbtViewRelationship RootVr      = RequestView.Root.ChildRelationships[0];

                RequestView.AddViewPropertyAndFilter(RootVr, _RequestOC.getObjectClassProp(CswNbtObjClassRequest.PropertyName.IsRecurring), Value: CswEnumTristate.True.ToString());
                RequestView.AddViewPropertyAndFilter(RootVr, _RequestOC.getObjectClassProp(CswNbtObjClassRequest.PropertyName.Requestor), SubFieldName: CswEnumNbtSubFieldName.NodeID, Value: _ThisUser.UserId.PrimaryKey.ToString());

                ICswNbtTree Tree = _CswNbtResources.Trees.getTreeFromView(RequestView, RequireViewPermissions: false, IncludeHiddenNodes: false, IncludeSystemNodes: false);
                if (Tree.getChildNodeCount() > 0)
                {
                    Tree.goToNthChild(0);
                    _RecurringRequestNode = Tree.getNodeForCurrentPosition();
                }

                if (null == _RecurringRequestNode)
                {
                    CswNbtMetaDataNodeType RequestNt = _RequestOC.getLatestVersionNodeTypes().FirstOrDefault();
                    if (null == RequestNt)
                    {
                        //This error is misleading - it makes it sound like the user did something wrong
                        throw new CswDniException(CswEnumErrorType.Warning,
                                                  "Cannot make a Request without a valid Request object.",
                                                  "No Request NodeType could be found.");
                    }
                    _RecurringRequestNode = _CswNbtResources.Nodes.makeNodeFromNodeTypeId(RequestNt.NodeTypeId, delegate(CswNbtNode NewNode)
                    {
                        ((CswNbtObjClassRequest)NewNode).IsRecurring.Checked = CswEnumTristate.True;
                    });
                }
            }
            return(_RecurringRequestNode);
        }
        /// <summary>
        /// WCF method to copy a favorite to the current cart
        /// </summary>
        public static void copyFavorite(ICswResources CswResources, CswNbtRequestDataModel.CswRequestReturn Ret, CswNbtRequestDataModel.CswRequestReturn.Ret Request)
        {
            CswNbtResources NbtResources = _validate(CswResources);
            bool            Succeeded    = false;

            //...I have no idea what the difference is between Request.RequestId and Request.CswRequestId
            //I think they both refer to the current cart,
            //but then how are we differentiating between the current Request and the Favorite Request?
            if (CswTools.IsPrimaryKey(Request.CswRequestId) && Request.RequestItems.Any())
            {
                CswNbtObjClassRequest RequestNode = NbtResources.Nodes[Request.CswRequestId];
                if (null != RequestNode)
                {
                    CswNbtWebServiceRequesting ws         = new CswNbtWebServiceRequesting(NbtResources);
                    applyCopyLogic             SetRequest = (Item) =>
                    {
                        Item.Status.Value          = CswNbtObjClassRequestItem.Statuses.Pending;
                        Item.Request.RelatedNodeId = RequestNode.NodeId;
                    };
                    Succeeded = ws.copyRequestItems(Request, SetRequest);
                }
            }
            Ret.Data.Succeeded = Succeeded;
        }
        }//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()