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