public JObject dispenseSourceContainer(string DispenseType, string Quantity, string UnitId, string RequestItemId) { JObject ret = new JObject(); if (null != _SourceContainer) { CswEnumNbtContainerDispenseType DispenseTypeEnum = _getDispenseTypeFromAction(DispenseType); CswPrimaryKey UnitOfMeasurePk = new CswPrimaryKey(); UnitOfMeasurePk.FromString(UnitId); CswPrimaryKey RequestItemPk = new CswPrimaryKey(); RequestItemPk.FromString(RequestItemId); Double RealQuantity = CswConvert.ToDouble(Quantity); if (DispenseTypeEnum == CswEnumNbtContainerDispenseType.Add) { RealQuantity = -RealQuantity; // deducting negative quantity is adding quantity } _SourceContainer.DispenseOut(DispenseTypeEnum, RealQuantity, UnitOfMeasurePk, RequestItemPk); _SourceContainer.postChanges(false); string ViewId = _getViewForAllDispenseContainers(); ret["viewId"] = ViewId; } return(ret); }
private CswEnumNbtContainerDispenseType _getDispenseTypeFromAction(string DispenseTypeDescription) { CswEnumNbtContainerDispenseType DispenseType = DispenseTypeDescription; if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Add.ToString())) { DispenseType = CswEnumNbtContainerDispenseType.Add; } else if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Waste.ToString())) { DispenseType = CswEnumNbtContainerDispenseType.Waste; } else if (DispenseTypeDescription.Contains(CswEnumNbtContainerDispenseType.Dispense.ToString())) { DispenseType = CswEnumNbtContainerDispenseType.Dispense; } return(DispenseType); }
/// <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 ) }
} // DispenseOut() /// <summary> /// Dispense into this container. /// </summary> /// <param name="DispenseType"></param> /// <param name="QuantityToAdd">Positive quantity to add</param> /// <param name="UnitId"></param> /// <param name="RequestItemId"></param> /// <param name="SourceContainer"></param> public void DispenseIn(CswEnumNbtContainerDispenseType DispenseType, double QuantityToAdd, CswPrimaryKey UnitId, CswPrimaryKey RequestItemId = null, CswNbtObjClassContainer SourceContainer = null, bool RecordTransaction = true) { double RealQuantityToAdd = _getDispenseAmountInProperUnits(QuantityToAdd, UnitId, _Container.Quantity.UnitId); double CurrentQuantity = 0; if (CswTools.IsDouble(_Container.Quantity.Quantity)) { CurrentQuantity = _Container.Quantity.Quantity; } _Container.Quantity.Quantity = CurrentQuantity + RealQuantityToAdd; if (RecordTransaction) { _ContainerDispenseTransactionBuilder.create(DispenseType, RealQuantityToAdd, _Container.Quantity.UnitId, RequestItemId, SourceContainer, _Container, IsImport: _IsImport); } CswEnumNbtContainerLocationTypeOptions ContainerLocationType = SourceContainer == null ? CswEnumNbtContainerLocationTypeOptions.Receipt : CswEnumNbtContainerLocationTypeOptions.Dispense; _Container.CreateContainerLocationNode(ContainerLocationType); } // DispenseIn()
/// <summary> /// Dispense out of this container. /// </summary> /// <param name="DispenseType"></param> /// <param name="QuantityToDeduct">Positive quantity to subtract</param> /// <param name="UnitId"></param> /// <param name="RequestItemId"></param> /// <param name="DestinationContainer"></param> public void DispenseOut(CswEnumNbtContainerDispenseType DispenseType, double QuantityToDeduct, CswPrimaryKey UnitId, CswPrimaryKey RequestItemId = null, CswNbtObjClassContainer DestinationContainer = null, bool RecordTransaction = true) { double RealQuantityToDeduct = _getDispenseAmountInProperUnits(QuantityToDeduct, UnitId, _Container.Quantity.UnitId); double CurrentQuantity = 0; if (CswTools.IsDouble(_Container.Quantity.Quantity)) { CurrentQuantity = _Container.Quantity.Quantity; } _Container.Quantity.Quantity = CurrentQuantity - RealQuantityToDeduct; if (DestinationContainer != null) { DestinationContainer.DispenseIn(DispenseType, QuantityToDeduct, UnitId, RequestItemId, _Container, false); // false, because we do not want another duplicate transaction record } if (RecordTransaction) { _ContainerDispenseTransactionBuilder.create(DispenseType, -RealQuantityToDeduct, _Container.Quantity.UnitId, RequestItemId, _Container, DestinationContainer); } _Container.CreateContainerLocationNode(CswEnumNbtContainerLocationTypeOptions.Dispense); } // DispenseOut()