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