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 }