public void MyTestInitialize() { TestData = new TestData(); CswNbtMetaDataNodeType ChemicalNT = TestData.CswNbtResources.MetaData.getNodeType("Chemical"); _FirstChemicalNode = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(ChemicalNT.NodeTypeId); _ReceivingAction = new CswNbtActReceiving(TestData.CswNbtResources, _FirstChemicalNode.NodeId); CswNbtObjClassUnitOfMeasure GramNode = TestData.CswNbtResources.Nodes.GetNode(new CswPrimaryKey("nodes", 26745)); CswNbtMetaDataNodeType SizeNT = TestData.CswNbtResources.MetaData.getNodeType("Size"); _SizeOne = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNT.NodeTypeId, OnAfterMakeNode : delegate(CswNbtNode NewNode) { CswNbtObjClassSize AsSize = NewNode; AsSize.Material.RelatedNodeId = _FirstChemicalNode.NodeId; AsSize.UnitCount.Value = 5; AsSize.InitialQuantity.Quantity = 10; AsSize.InitialQuantity.UnitId = GramNode.NodeId; }, OverrideUniqueValidation: true); _SizeTwo = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNT.NodeTypeId, OnAfterMakeNode : delegate(CswNbtNode NewNode) { CswNbtObjClassSize AsSize = NewNode; AsSize.Material.RelatedNodeId = _FirstChemicalNode.NodeId; AsSize.UnitCount.Value = 10; AsSize.InitialQuantity.Quantity = 100; AsSize.InitialQuantity.UnitId = GramNode.NodeId; }, OverrideUniqueValidation: true); }
public void testReceivingBarcodesNoBarcode() { CswNbtMetaDataNodeType ChemicalNT = TestData.CswNbtResources.MetaData.getNodeType("Chemical"); CswNbtObjClassChemical ChemicalNode = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(ChemicalNT.NodeTypeId); CswNbtObjClassUnitOfMeasure GramNode = TestData.CswNbtResources.Nodes.GetNode(new CswPrimaryKey("nodes", 26745)); CswNbtMetaDataNodeType SizeNT = TestData.CswNbtResources.MetaData.getNodeType("Size"); CswNbtObjClassSize Size = TestData.CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNT.NodeTypeId, OnAfterMakeNode : delegate(CswNbtNode NewNode) { CswNbtObjClassSize AsSize = NewNode; AsSize.Material.RelatedNodeId = ChemicalNode.NodeId; AsSize.UnitCount.Value = 5; AsSize.InitialQuantity.Quantity = 10; AsSize.InitialQuantity.UnitId = GramNode.NodeId; }, OverrideUniqueValidation: true); CswNbtActReceiving ReceivingAction = new CswNbtActReceiving(TestData.CswNbtResources, ChemicalNode.NodeId); CswNbtMetaDataNodeType ContainerNT = TestData.CswNbtResources.MetaData.getNodeType("Container"); CswNbtObjClassContainer InitialContainer = ReceivingAction.makeContainer(null); JObject ContainerAddProps = ReceivingAction.getContainerAddProps(InitialContainer); int NumContainers = 2; CswNbtReceivingDefinition ReceiptDef = new CswNbtReceivingDefinition() { ContainerNodeId = InitialContainer.NodeId, ContainerNodeTypeId = ContainerNT.NodeTypeId, ContainerProps = ContainerAddProps, MaterialNodeId = ChemicalNode.NodeId, Quantities = new Collection <CswNbtAmountsGridQuantity>() { new CswNbtAmountsGridQuantity() { NumContainers = NumContainers, Quantity = 10, SizeName = Size.NodeName, SizeNodeId = Size.NodeId, UnitNodeId = GramNode.NodeId, ContainerIds = new Collection <string>() { InitialContainer.NodeId.ToString() } } } }; CswNbtMetaDataNodeTypeProp BarcodeNTP = ContainerNT.getNodeTypePropByObjectClassProp(CswNbtObjClassContainer.PropertyName.Barcode); string Before = BarcodeNTP.Sequence.getCurrent(); ReceivingAction.receiveMaterial(ReceiptDef); string After = BarcodeNTP.Sequence.getCurrent(); Assert.AreNotEqual(Before, After, "Creating containers in receiving with no custom barcodes specified did not consume sequence values when it should have"); }
public static JObject getSizeNodeProps(CswNbtResources CswNbtResources, Int32 SizeNodeTypeId, JObject SizeObj, bool WriteNode, out CswNbtNode SizeNode, CswPrimaryKey MaterialId = null) { JObject Ret = new JObject(); SizeNode = CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNodeTypeId, OverrideUniqueValidation: true); string UoMId = SizeObj["uom"]["id"].ToString(); // CIS-53182: Preventative measure against the uomid being empty from client if (null != MaterialId && string.IsNullOrEmpty(UoMId) && false == string.IsNullOrEmpty(SizeObj["uom"]["value"].ToString())) { // Try to find the id for the unit of measure CswNbtUnitViewBuilder UnitViewBuilder = new CswNbtUnitViewBuilder(CswNbtResources); CswNbtView UnitsView = UnitViewBuilder.getQuantityUnitOfMeasureView(MaterialId); ICswNbtTree UnitTree = CswNbtResources.Trees.getTreeFromView(UnitsView, false, false, false); for (int i = 0; i < UnitTree.getChildNodeCount(); i++) { UnitTree.goToNthChild(i); if (UnitTree.getNodeNameForCurrentPosition().Equals(SizeObj["uom"]["value"].ToString())) { UoMId = UnitTree.getNodeIdForCurrentPosition().ToString(); } } } CswPrimaryKey UnitIdPK = CswConvert.ToPrimaryKey(UoMId); if (null != UnitIdPK) { SizeNode = CswNbtResources.Nodes.makeNodeFromNodeTypeId(SizeNodeTypeId, delegate(CswNbtNode NewNode) { CswNbtObjClassSize NodeAsSize = (CswNbtObjClassSize)NewNode; NodeAsSize.InitialQuantity.Quantity = CswConvert.ToDouble(SizeObj["quantity"]["value"]); NodeAsSize.InitialQuantity.UnitId = UnitIdPK; NodeAsSize.CatalogNo.Text = SizeObj["catalogNo"]["value"].ToString(); NodeAsSize.QuantityEditable.Checked = CswConvert.ToTristate(SizeObj["quantityEditable"]["value"]); NodeAsSize.Dispensable.Checked = CswConvert.ToTristate(SizeObj["dispensible"]["value"]); NodeAsSize.UnitCount.Value = CswConvert.ToDouble(SizeObj["unitCount"]["value"]); NodeAsSize.Material.RelatedNodeId = MaterialId; }); } else { SizeNode = null; } return(Ret); }
public JObject getQuantityFromSize(CswPrimaryKey SizeId, string Action) { JObject Ret = new JObject(); CswNbtObjClassSize Size = _CswNbtResources.Nodes.GetNode(SizeId); if (null != Size) { CswNbtNodePropQuantity InitialQuantity = Size.InitialQuantity; InitialQuantity.ToJSON(Ret); Ret["unitName"] = Ret["name"]; Ret["qtyReadonly"] = false; Ret["isUnitReadOnly"] = false; Ret["unitCount"] = "1"; Ret["isRequired"] = InitialQuantity.Required.ToString(); if (Action.ToLower() == ChemSW.Nbt.ObjClasses.CswEnumNbtButtonAction.receive.ToString()) { Ret["isUnitReadOnly"] = true; if (Size.QuantityEditable.Checked == CswEnumTristate.False) { Ret["qtyReadonly"] = true; } Ret["unitCount"] = CswTools.IsDouble(Size.UnitCount.Value) ? Size.UnitCount.Value.ToString() : ""; } else if (Action.ToLower() == ChemSW.Nbt.ObjClasses.CswEnumNbtButtonAction.dispense.ToString()) { CswNbtObjClassUnitOfMeasure UnitNode = _CswNbtResources.Nodes.GetNode(Size.InitialQuantity.UnitId); if (null != UnitNode && (UnitNode.UnitType.Value == CswEnumNbtUnitTypes.Each.ToString() || false == CswTools.IsDouble(UnitNode.ConversionFactor.Base))) { Ret["isUnitReadOnly"] = true; } } } return(Ret); }
public override void update() { CswNbtMetaDataObjectClass InventoryGroupOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.InventoryGroupClass ); CswNbtObjClassInventoryGroup DefaultNodeAsInventoryGroup = null; foreach( CswNbtNode Group in InventoryGroupOc.getNodes( true, false ) ) { CswNbtObjClassInventoryGroup NodeAsInventoryGroup = Group; if( null != NodeAsInventoryGroup ) { if( NodeAsInventoryGroup.Name.Text.ToLower() == "cispro" ) { DefaultNodeAsInventoryGroup = NodeAsInventoryGroup; DefaultNodeAsInventoryGroup.Name.Text = "Default Inventory Group"; DefaultNodeAsInventoryGroup.IsDemo = true; DefaultNodeAsInventoryGroup.postChanges( ForceUpdate: false ); } } } if( null == DefaultNodeAsInventoryGroup ) { CswNbtMetaDataNodeType InventoryGroupNt = InventoryGroupOc.getLatestVersionNodeTypes().FirstOrDefault(); if( null != InventoryGroupNt ) { DefaultNodeAsInventoryGroup = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( InventoryGroupNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); DefaultNodeAsInventoryGroup.Name.Text = "Default Inventory Group"; DefaultNodeAsInventoryGroup.postChanges( ForceUpdate: false ); } } CswNbtMetaDataObjectClass LocationOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.LocationClass ); CswNbtObjClassLocation DefaultLocation = null; if( null != DefaultNodeAsInventoryGroup ) { foreach( CswNbtObjClassLocation Location in LocationOc.getNodes( true, false ) ) { if( null != Location ) { if( Location.Name.Text.ToLower() == "center hall" ) { DefaultLocation = Location; } if( null == Location.InventoryGroup.RelatedNodeId || Int32.MinValue == Location.InventoryGroup.RelatedNodeId.PrimaryKey ) { Location.InventoryGroup.RelatedNodeId = DefaultNodeAsInventoryGroup.NodeId; Location.postChanges( ForceUpdate: false ); } } } } CswNbtMetaDataObjectClass WorkUnitOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.WorkUnitClass ); CswNbtMetaDataNodeType WorkUnitNt = WorkUnitOc.getLatestVersionNodeTypes().FirstOrDefault(); if( null != WorkUnitNt ) { WorkUnitNt.NameTemplateValue = ""; WorkUnitNt.addNameTemplateText( CswNbtObjClassWorkUnit.NamePropertyName ); CswNbtObjClassWorkUnit DefaultWorkUnit = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( WorkUnitNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); DefaultWorkUnit.Name.Text = "Default Work Unit"; DefaultWorkUnit.IsDemo = true; DefaultWorkUnit.postChanges( ForceUpdate: false ); CswNbtMetaDataObjectClass UserOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.UserClass ); Collection<Int32> RoleIdsWithUsers = new Collection<Int32>(); CswNbtMetaDataNodeType UserNt = null; foreach( CswNbtObjClassUser User in UserOc.getNodes( true, false ) ) { if( null != User ) { UserNt = UserNt ?? User.NodeType; RoleIdsWithUsers.Add( User.RoleId.PrimaryKey ); if( null == User.WorkUnitProperty.RelatedNodeId || Int32.MinValue == User.WorkUnitProperty.RelatedNodeId.PrimaryKey ) { User.WorkUnitProperty.RelatedNodeId = DefaultWorkUnit.NodeId; } if( null != DefaultLocation && ( null == User.DefaultLocationProperty.SelectedNodeId || Int32.MinValue == User.DefaultLocationProperty.SelectedNodeId.PrimaryKey ) ) { User.DefaultLocationProperty.SelectedNodeId = DefaultLocation.NodeId; } User.postChanges( ForceUpdate: false ); } } CswNbtMetaDataObjectClass RoleOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RoleClass ); if( null == UserNt ) { UserNt = UserOc.getLatestVersionNodeTypes().FirstOrDefault(); } if( null != UserNt ) { foreach( CswNbtObjClassRole Role in RoleOc.getNodes( true, false ) ) { if( null != Role && false == RoleIdsWithUsers.Contains( Role.NodeId.PrimaryKey ) ) { string ValidUserName = CswNbtObjClassUser.getValidUserName( Role.Name.Text.ToLower() ); if( ValidUserName != CswNbtObjClassUser.ChemSWAdminUsername ) { if( CswNbtObjClassUser.IsUserNameUnique( _CswNbtSchemaModTrnsctn.MetaData._CswNbtMetaDataResources.CswNbtResources, ValidUserName ) ) { CswNbtObjClassUser NewUser = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( UserNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); NewUser.IsDemo = false; NewUser.Role.RelatedNodeId = Role.NodeId; NewUser.UsernameProperty.Text = ValidUserName; NewUser.WorkUnitProperty.RelatedNodeId = DefaultWorkUnit.NodeId; if( null != DefaultLocation ) { NewUser.DefaultLocationProperty.SelectedNodeId = DefaultLocation.NodeId; } NewUser.PasswordProperty.Password = Role.Name.Text.ToLower(); NewUser.postChanges( ForceUpdate: false ); } } } } } CswNbtMetaDataObjectClass IgPermissionOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.InventoryGroupPermissionClass ); foreach( CswNbtObjClassInventoryGroupPermission Permission in IgPermissionOc.getNodes( true, false ) ) { if( null != Permission ) { if( null != DefaultNodeAsInventoryGroup && ( null == Permission.InventoryGroup.RelatedNodeId || Int32.MinValue == Permission.InventoryGroup.RelatedNodeId.PrimaryKey ) ) { Permission.InventoryGroup.RelatedNodeId = DefaultNodeAsInventoryGroup.NodeId; } if( null == Permission.WorkUnit.RelatedNodeId || Int32.MinValue == Permission.WorkUnit.RelatedNodeId.PrimaryKey ) { Permission.WorkUnit.RelatedNodeId = DefaultWorkUnit.NodeId; } Permission.postChanges( ForceUpdate: false ); } } } CswNbtMetaDataObjectClass MaterialOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.MaterialClass ); CswNbtMetaDataObjectClass SynonymOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.MaterialSynonymClass ); CswNbtMetaDataObjectClass SizeOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.SizeClass ); CswNbtMetaDataObjectClass VendorOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.VendorClass ); CswNbtMetaDataObjectClass UnitOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.UnitOfMeasureClass ); CswNbtObjClassVendor DefaultVendor = null; CswNbtMetaDataNodeType VendorNt = VendorOc.getLatestVersionNodeTypes().FirstOrDefault(); if( null != VendorNt ) { DefaultVendor = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( VendorNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); DefaultVendor.VendorName.Text = "Default Vendor"; DefaultVendor.IsDemo = true; DefaultVendor.postChanges( ForceUpdate: false ); } CswNbtMetaDataNodeType SizeNt = SizeOc.getLatestVersionNodeTypes().FirstOrDefault(); CswNbtMetaDataNodeType SynonymNt = SynonymOc.getLatestVersionNodeTypes().FirstOrDefault(); CswNbtObjClassUnitOfMeasure DefaultSizeUnit = null; CswNbtObjClassUnitOfMeasure DefaultTimeUnit = null; foreach( CswNbtObjClassUnitOfMeasure Unit in UnitOc.getNodes( true, false ) ) { if( null != Unit ) { if( Unit.Name.Text.ToLower() == "g" ) { DefaultSizeUnit = Unit; } else if( Unit.Name.Text.ToLower() == "years" ) { DefaultTimeUnit = Unit; } } } foreach( CswNbtMetaDataNodeType MaterialNt in MaterialOc.getLatestVersionNodeTypes() ) { CswNbtObjClassMaterial Material = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( MaterialNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); Material.IsDemo = true; Material.TradeName.Text = "Default " + MaterialNt.NodeTypeName; if( null != DefaultVendor ) { Material.Supplier.RelatedNodeId = DefaultVendor.NodeId; } Material.PartNumber.Text = "658-35AB"; Material.PhysicalState.Value = CswNbtObjClassMaterial.PhysicalStates.Solid; Material.ExpirationInterval.Quantity = 1; if( null != DefaultTimeUnit ) { Material.ExpirationInterval.UnitId = DefaultTimeUnit.NodeId; } Material.postChanges( ForceUpdate: false ); if( null != SizeNt ) { CswNbtObjClassSize Size = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( SizeNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); Size.IsDemo = true; Size.Material.RelatedNodeId = Material.NodeId; Size.CatalogNo.Text = "NE-H5/3"; Size.InitialQuantity.Quantity = 1; if( null != DefaultSizeUnit ) { Size.InitialQuantity.UnitId = DefaultSizeUnit.NodeId; } Size.postChanges( ForceUpdate: false ); } if( null != SynonymNt ) { CswNbtObjClassMaterialSynonym Synonym = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( SynonymNt.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode, OverrideUniqueValidation: false ); Synonym.IsDemo = true; Synonym.Material.RelatedNodeId = Material.NodeId; Synonym.Name.Text = Material.TradeName.Text + " Synonym"; Synonym.postChanges( ForceUpdate: false ); } } }//Update()
public CswNbtReceivingDefinition receiveContainers(CswNbtReceivingDefinition ReceiptDef, ref int NodesProcessed, int MaxProcessed) { CswNbtMetaDataNodeType ContainerNt = _CswNbtResources.MetaData.getNodeType(ReceiptDef.ContainerNodeTypeId); foreach (CswNbtAmountsGridQuantity QuantityDef in ReceiptDef.Quantities) { CswNbtObjClassSize AsSize = _CswNbtResources.Nodes.GetNode(QuantityDef.SizeNodeId); string Barcode = string.Empty; Action <CswNbtNode> After = delegate(CswNbtNode NewNode) { CswNbtObjClassContainer thisContainer = NewNode; if (QuantityDef.getNumBarcodes() <= QuantityDef.NumContainers && false == string.IsNullOrEmpty(Barcode)) { thisContainer.Barcode.setBarcodeValueOverride(Barcode, false); } thisContainer.Size.RelatedNodeId = QuantityDef.SizeNodeId; thisContainer.Material.RelatedNodeId = ReceiptDef.MaterialNodeId; if (AsSize.QuantityEditable.Checked != CswEnumTristate.True) { QuantityDef.Quantity = AsSize.InitialQuantity.Quantity; QuantityDef.UnitNodeId = AsSize.InitialQuantity.UnitId; } if (null == thisContainer.Quantity.UnitId || Int32.MinValue == thisContainer.Quantity.UnitId.PrimaryKey) { thisContainer.Quantity.UnitId = QuantityDef.UnitNodeId; } thisContainer.DispenseIn(CswEnumNbtContainerDispenseType.Receive, QuantityDef.Quantity, QuantityDef.UnitNodeId, ReceiptDef.RequestItemtNodeId); thisContainer.Disposed.Checked = CswEnumTristate.False; thisContainer.ReceiptLot.RelatedNodeId = ReceiptDef.ReceiptLotNodeId; }; for (Int32 C = 0; C < QuantityDef.NumContainers; C += 1) { if (NodesProcessed < MaxProcessed) { //we promote the first container before the batch op starts, so there should always be at least one container id in the first set of quantities CswPrimaryKey ContainerId = null; if (C < QuantityDef.ContainerIds.Count) { ContainerId = CswConvert.ToPrimaryKey(QuantityDef.ContainerIds[C]); } CswCommaDelimitedString Barcodes = QuantityDef.getBarcodes(); Barcode = (QuantityDef.getNumBarcodes() > C ? Barcodes[C] : string.Empty); if (null == ContainerId) //only create a container if we haven't already { CswNbtNodeKey ContainerNodeKey; CswNbtObjClassContainer Container = _CswNbtSdTabsAndProps.addNode(ContainerNt, ReceiptDef.ContainerProps, out ContainerNodeKey, After); QuantityDef.ContainerIds.Add(Container.NodeId.ToString()); NodesProcessed++; } else { CswNbtNode InitialContainerNode = _CswNbtResources.Nodes.GetNode(ContainerId); if (null != InitialContainerNode && InitialContainerNode.IsTemp) { _CswNbtSdTabsAndProps.saveNodeProps(InitialContainerNode, ReceiptDef.ContainerProps); After(InitialContainerNode); InitialContainerNode.PromoteTempToReal(); NodesProcessed++; } } } } //for( Int32 C = 0; C < NoContainers; C += 1 ) } return(ReceiptDef); }
public static void getCopyData(ICswResources _CswResources, CopyDataReturn Copy, CopyDataRequest Request) { CswNbtResources _CswNbtResources = (CswNbtResources)_CswResources; //If we get any more copy types in the future, extract them out into their own classes and instantiate them via factory #region Create_Material Copy Data if (Request.CopyType == CswEnumNbtActionName.Create_Material) { CswPrimaryKey OriginalNodeId = CswConvert.ToPrimaryKey(Request.NodeId); if (CswTools.IsPrimaryKey(OriginalNodeId)) { CswNbtPropertySetMaterial OriginalMaterial = _CswNbtResources.Nodes.GetNode(OriginalNodeId); if (null != OriginalMaterial) { #region Material Properties CswNbtPropertySetMaterial MaterialCopy = OriginalMaterial.CopyNode(); Copy.Data.Create_Material = new C3CreateMaterialResponse { actionname = CswEnumNbtActionName.Create_Material, state = new C3CreateMaterialResponse.State { materialId = MaterialCopy.NodeId.ToString(), materialType = new C3CreateMaterialResponse.State.MaterialType { name = MaterialCopy.NodeType.NodeTypeName, val = CswConvert.ToInt32(MaterialCopy.NodeTypeId) }, tradeName = OriginalMaterial.TradeName.Text, partNo = OriginalMaterial.PartNumber.Text, supplier = new C3CreateMaterialResponse.State.Supplier { name = OriginalMaterial.Supplier.CachedNodeName, val = OriginalMaterial.Supplier.RelatedNodeId.ToString() }, sizes = new Collection <C3CreateMaterialResponse.State.SizeRecord>(), showOriginalUoM = false } }; #endregion Material Properties #region Sizes CswNbtMetaDataObjectClass SizeOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.SizeClass); CswNbtMetaDataObjectClassProp MaterialOCP = SizeOC.getObjectClassProp(CswNbtObjClassSize.PropertyName.Material); CswNbtView SizesView = new CswNbtView(_CswNbtResources) { ViewName = "MaterialCopySizes" }; CswNbtViewRelationship SizeVR = SizesView.AddViewRelationship(SizeOC, false); SizesView.AddViewPropertyAndFilter(SizeVR, MaterialOCP, OriginalMaterial.NodeId.PrimaryKey.ToString(), CswEnumNbtSubFieldName.NodeID); ICswNbtTree SizesTree = _CswNbtResources.Trees.getTreeFromView(SizesView, false, false, false); for (int i = 0; i < SizesTree.getChildNodeCount(); i++) { SizesTree.goToNthChild(i); CswNbtObjClassSize SizeNode = SizesTree.getNodeForCurrentPosition(); Copy.Data.Create_Material.state.sizes.Add(new C3CreateMaterialResponse.State.SizeRecord { nodeTypeId = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = SizeNode.NodeTypeId.ToString(), readOnly = true, hidden = true }, unitCount = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = CswConvert.ToString(SizeNode.UnitCount.Value), readOnly = true, hidden = false }, quantity = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = CswConvert.ToString(SizeNode.InitialQuantity.Quantity), readOnly = true, hidden = false }, uom = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = SizeNode.InitialQuantity.CachedUnitName, readOnly = false == string.IsNullOrEmpty(SizeNode.InitialQuantity.CachedUnitName), hidden = false, id = SizeNode.InitialQuantity.UnitId.ToString() }, catalogNo = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = SizeNode.CatalogNo.Text, readOnly = true, hidden = false }, quantityEditable = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = SizeNode.QuantityEditable.Checked, }, dispensible = new C3CreateMaterialResponse.State.SizeRecord.SizeData { value = SizeNode.Dispensable.Checked } }); SizesTree.goToParentNode(); } #endregion Sizes #region Synonyms CswNbtMetaDataObjectClass MaterialSynonymOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.MaterialSynonymClass); CswNbtMetaDataObjectClassProp SynMaterialOCP = MaterialSynonymOC.getObjectClassProp(CswNbtObjClassMaterialSynonym.PropertyName.Material); CswNbtView SynonymsView = new CswNbtView(_CswNbtResources) { ViewName = "MaterialCopySynonyms" }; CswNbtViewRelationship SynonymsVR = SynonymsView.AddViewRelationship(MaterialSynonymOC, false); SynonymsView.AddViewPropertyAndFilter(SynonymsVR, SynMaterialOCP, OriginalMaterial.NodeId.PrimaryKey.ToString(), CswEnumNbtSubFieldName.NodeID); ICswNbtTree SynonymsTree = _CswNbtResources.Trees.getTreeFromView(SynonymsView, false, false, false); for (int i = 0; i < SynonymsTree.getChildNodeCount(); i++) { SynonymsTree.goToNthChild(i); CswNbtObjClassMaterialSynonym SynonymNode = SynonymsTree.getNodeForCurrentPosition(); CswNbtObjClassMaterialSynonym SynonymCopy = SynonymNode.CopyNode(); SynonymCopy.Material.RelatedNodeId = MaterialCopy.NodeId; SynonymCopy.postChanges(false); SynonymsTree.goToParentNode(); } #endregion Synonyms if (MaterialCopy.ObjectClass.ObjectClass == CswEnumNbtObjectClass.ChemicalClass) { if (CswEnumTristate.False == MaterialCopy.IsConstituent.Checked) { #region SDS CswNbtView SDSView = CswNbtObjClassSDSDocument.getAssignedSDSDocumentsView(_CswNbtResources, OriginalMaterial.NodeId); ICswNbtTree SDSTree = _CswNbtResources.Trees.getTreeFromView(SDSView, false, false, false); SDSTree.goToNthChild(0); for (int i = 0; i < SDSTree.getChildNodeCount(); i++) { SDSTree.goToNthChild(i); CswNbtObjClassSDSDocument SDSDoc = SDSTree.getNodeForCurrentPosition(); CswNbtObjClassSDSDocument SDSCopy = SDSDoc.CopyNode(IsNodeTemp: true); SDSCopy.Owner.RelatedNodeId = MaterialCopy.NodeId; SDSCopy.postChanges(false); if (i == 0) { Copy.Data.Create_Material.state.sds.sdsDocId = SDSCopy.NodeId.ToString(); } SDSTree.goToParentNode(); } #endregion SDS #region Components CswNbtMetaDataObjectClass MaterialComponentOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.MaterialComponentClass); CswNbtMetaDataObjectClassProp CompMaterialOCP = MaterialComponentOC.getObjectClassProp(CswNbtObjClassMaterialComponent.PropertyName.Mixture); CswNbtView ComponentsView = new CswNbtView(_CswNbtResources) { ViewName = "MaterialCopyComponents" }; CswNbtViewRelationship ComponentsVR = ComponentsView.AddViewRelationship(MaterialComponentOC, false); ComponentsView.AddViewPropertyAndFilter(ComponentsVR, CompMaterialOCP, OriginalMaterial.NodeId.PrimaryKey.ToString(), CswEnumNbtSubFieldName.NodeID); ICswNbtTree ComponentsTree = _CswNbtResources.Trees.getTreeFromView(ComponentsView, false, false, false); for (int i = 0; i < ComponentsTree.getChildNodeCount(); i++) { ComponentsTree.goToNthChild(i); CswNbtObjClassMaterialComponent ComponentNode = ComponentsTree.getNodeForCurrentPosition(); CswNbtObjClassMaterialComponent ComponentCopy = ComponentNode.CopyNode(); ComponentCopy.Mixture.RelatedNodeId = MaterialCopy.NodeId; ComponentCopy.Constituent.RelatedNodeId = ComponentNode.Constituent.RelatedNodeId; ComponentCopy.postChanges(false); ComponentsTree.goToParentNode(); } #endregion Components } #region GHS CswNbtMetaDataObjectClass GHSOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.GHSClass); CswNbtMetaDataObjectClassProp GHSMaterialOCP = GHSOC.getObjectClassProp(CswNbtObjClassGHS.PropertyName.Material); CswNbtView GHSView = new CswNbtView(_CswNbtResources) { ViewName = "MaterialCopyGHS" }; CswNbtViewRelationship GHSVR = GHSView.AddViewRelationship(GHSOC, false); GHSView.AddViewPropertyAndFilter(GHSVR, GHSMaterialOCP, OriginalMaterial.NodeId.PrimaryKey.ToString(), CswEnumNbtSubFieldName.NodeID); ICswNbtTree GHSTree = _CswNbtResources.Trees.getTreeFromView(GHSView, false, false, false); for (int i = 0; i < GHSTree.getChildNodeCount(); i++) { GHSTree.goToNthChild(i); CswNbtObjClassGHS GHSNode = GHSTree.getNodeForCurrentPosition(); CswNbtObjClassGHS GHSCopy = GHSNode.CopyNode(); GHSCopy.Material.RelatedNodeId = MaterialCopy.NodeId; GHSCopy.postChanges(false); GHSTree.goToParentNode(); } #endregion GHS } } } } #endregion Create_Material Copy Data }