Beispiel #1
0
        /// <summary>
        /// The actual update call
        /// </summary>
        public override void update()
        {
            CswNbtMetaDataObjectClass WorkUnitOC          = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.WorkUnitClass);
            CswNbtObjClassWorkUnit    DefaultWorkUnit     = null;
            CswNbtObjClassWorkUnit    FakeDefaultWorkUnit = null;

            foreach (CswNbtObjClassWorkUnit WorkUnitNode in WorkUnitOC.getNodes(false, false, IncludeHiddenNodes: true))
            {
                if (WorkUnitNode.Name.Text == "Default Work Unit")
                {
                    WorkUnitNode.IsDemo = false;
                    WorkUnitNode.postChanges(false);
                    if (null == DefaultWorkUnit)
                    {
                        DefaultWorkUnit = WorkUnitNode;
                    }
                    else
                    {
                        FakeDefaultWorkUnit = WorkUnitNode;
                    }
                }
            }
            if (null == DefaultWorkUnit)
            {
                CswNbtMetaDataNodeType WorkUnitNT = WorkUnitOC.FirstNodeType;
                if (null != WorkUnitNT)
                {
                    DefaultWorkUnit           = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId(WorkUnitNT.NodeTypeId, CswEnumNbtMakeNodeOperation.DoNothing);
                    DefaultWorkUnit.Name.Text = "Default Work Unit";
                    DefaultWorkUnit.postChanges(false);
                }
            }
            if (null != DefaultWorkUnit)
            {
                CswNbtMetaDataObjectClass UserOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.UserClass);
                foreach (CswNbtObjClassUser UserNode in UserOC.getNodes(false, false, IncludeHiddenNodes: true))
                {
                    if (null == UserNode.WorkUnitProperty.RelatedNodeId ||
                        (null != FakeDefaultWorkUnit && UserNode.WorkUnitProperty.RelatedNodeId == FakeDefaultWorkUnit.NodeId))
                    {
                        UserNode.WorkUnitProperty.RelatedNodeId = DefaultWorkUnit.NodeId;
                        UserNode.postChanges(false);
                    }
                }
                if (null != FakeDefaultWorkUnit)
                {
                    FakeDefaultWorkUnit.Node.delete(false, true);
                }
            }
            CswNbtMetaDataObjectClassProp WorkUnitNameOCP = WorkUnitOC.getObjectClassProp(CswNbtObjClassWorkUnit.PropertyName.Name);

            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp(WorkUnitNameOCP, CswEnumNbtObjectClassPropAttributes.isunique, true);
            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp(WorkUnitNameOCP, CswEnumNbtObjectClassPropAttributes.isrequired, true);
        }
 public override void update()
 {
     CswNbtMetaDataObjectClass WorkUnitOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.WorkUnitClass );
     CswNbtObjClassWorkUnit DefaultWorkUnit = null;
     CswNbtObjClassWorkUnit FakeDefaultWorkUnit = null;
     foreach( CswNbtObjClassWorkUnit WorkUnitNode in WorkUnitOC.getNodes( false, false, IncludeHiddenNodes: true ) )
     {
         if( WorkUnitNode.Name.Text.Contains( "Default Work Unit" ) )
         {
             WorkUnitNode.Name.Text = "Default Work Unit";
             WorkUnitNode.IsDemo = false;
             WorkUnitNode.postChanges( false );
             if( null == DefaultWorkUnit )
             {
                 DefaultWorkUnit = WorkUnitNode;
             }
             else
             {
                 FakeDefaultWorkUnit = WorkUnitNode;
             }
         }
     }
     if( null == DefaultWorkUnit )
     {
         CswNbtMetaDataNodeType WorkUnitNT = WorkUnitOC.FirstNodeType;
         if( null != WorkUnitNT )
         {
             _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( WorkUnitNT.NodeTypeId, delegate( CswNbtNode NewNode )
                 {
                     DefaultWorkUnit = NewNode;
                     DefaultWorkUnit.Name.Text = "Default Work Unit";
                     //DefaultWorkUnit.postChanges( false );
                 } );
         }
     }
     if( null != DefaultWorkUnit )
     {
         CswNbtMetaDataObjectClass UserOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.UserClass );
         foreach( CswNbtObjClassUser UserNode in UserOC.getNodes( false, false, IncludeHiddenNodes: true ) )
         {
             if( null == UserNode.WorkUnitProperty.RelatedNodeId ||
                 ( null != FakeDefaultWorkUnit && UserNode.WorkUnitProperty.RelatedNodeId == FakeDefaultWorkUnit.NodeId ) )
             {
                 UserNode.WorkUnitProperty.RelatedNodeId = DefaultWorkUnit.NodeId;
                 UserNode.postChanges( false );
             }
         }
         if( null != FakeDefaultWorkUnit )
         {
             FakeDefaultWorkUnit.Node.delete( false, true );
         }
     }
 } // update()
Beispiel #3
0
        }//Update()

        private CswNbtObjClassWorkUnit _getDefaultWorkUnit()
        {
            CswNbtObjClassWorkUnit DefaultWorkUnit = null;
            CswNbtMetaDataObjectClass WorkUnitOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.WorkUnitClass );
            CswNbtMetaDataNodeType WorkUnitNt = WorkUnitOc.FirstNodeType;
            if( null != WorkUnitNt )
            {
                foreach( CswNbtObjClassWorkUnit WorkUnitNode in WorkUnitNt.getNodes( false, false, IncludeHiddenNodes: true ) )
                {
                    if( "Default Work Unit" == WorkUnitNode.Name.Text )
                    {
                        DefaultWorkUnit = WorkUnitNode;
                    }
                }
            }
            return DefaultWorkUnit;
        }
Beispiel #4
0
        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()
Beispiel #5
0
        public override void update()
        {
            bool MakeAdminNode = true;
            bool MakeChemSWAdminNode = true;

            CswNbtObjClassWorkUnit DefaultWorkUnit = _getDefaultWorkUnit();
            CswNbtObjClassInventoryGroup CISProInventoryGroup = _getInventoryGroup( "CISPro" );
            CswNbtObjClassInventoryGroup DefaultInventoryGroup = _getInventoryGroup( "Default Inventory Group" );

            CswNbtObjClassRole AdminRole = _CswNbtSchemaModTrnsctn.Nodes.makeRoleNodeFromRoleName( "Administrator" );
            CswNbtObjClassRole ChemSWAdminRole = _CswNbtSchemaModTrnsctn.Nodes.makeRoleNodeFromRoleName( "chemsw_admin_role" );

            CswNbtMetaDataObjectClass InvGrpPermOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.InventoryGroupPermissionClass );
            CswNbtMetaDataNodeType InvGrpPermNt = InvGrpPermOc.FirstNodeType;

            if( null != DefaultInventoryGroup )
            {
                if( null != InvGrpPermNt && null != DefaultWorkUnit )
                {
                    foreach( CswNbtObjClassInventoryGroupPermission InvGrpPermNode in InvGrpPermOc.getNodes( false, false, IncludeHiddenNodes: true ) )
                    {
                        if( ( null != CISProInventoryGroup && InvGrpPermNode.InventoryGroup.RelatedNodeId == CISProInventoryGroup.NodeId ) ||
                            InvGrpPermNode.InventoryGroup.Gestalt == "CISPro" )
                        {
                            InvGrpPermNode.InventoryGroup.RelatedNodeId = DefaultInventoryGroup.NodeId;
                            InvGrpPermNode.WorkUnit.RelatedNodeId = DefaultWorkUnit.NodeId;
                            InvGrpPermNode.postChanges( true );
                        }
                        if( null != AdminRole && InvGrpPermNode.Role.RelatedNodeId == AdminRole.NodeId )
                        {
                            MakeAdminNode = false;
                        }
                        else if( null != ChemSWAdminRole && InvGrpPermNode.Role.RelatedNodeId == ChemSWAdminRole.NodeId )
                        {
                            MakeChemSWAdminNode = false;
                        }
                    }

                    if( MakeAdminNode && null != AdminRole )
                    {
                        _createInventoryGroupPermission( InvGrpPermNt.NodeTypeId, AdminRole.NodeId, DefaultInventoryGroup.NodeId, DefaultWorkUnit.NodeId );
                    }
                    if( MakeChemSWAdminNode && null != ChemSWAdminRole )
                    {
                        _createInventoryGroupPermission( InvGrpPermNt.NodeTypeId, ChemSWAdminRole.NodeId, DefaultInventoryGroup.NodeId, DefaultWorkUnit.NodeId );
                    }
                }

                CswNbtMetaDataObjectClass LocationOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.LocationClass );
                CswNbtMetaDataNodeType LocationNt = LocationOc.FirstNodeType;

                if( null != CISProInventoryGroup && null != LocationNt )
                {
                    foreach( CswNbtObjClassLocation LocationNode in LocationOc.getNodes( false, false, IncludeHiddenNodes: true ) )
                    {
                        if( LocationNode.InventoryGroup.RelatedNodeId == CISProInventoryGroup.NodeId )
                        {
                            LocationNode.InventoryGroup.RelatedNodeId = DefaultInventoryGroup.NodeId;
                            LocationNode.postChanges( false );
                        }
                    }
                    CISProInventoryGroup.Node.delete();
                }
            }

        }//Update()
Beispiel #6
0
        public override void update()
        {
            CswNbtMetaDataObjectClass LocationOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.LocationClass );
            CswNbtObjClassLocation DefaultLocation = null;
            
            foreach( CswNbtObjClassLocation Location in LocationOc.getNodes( true, false ) )
            {
                if( null != Location )
                {
                    if( Location.Name.Text.ToLower() == "center hall" )
                    {
                        DefaultLocation = Location;
                    }
                        
                }
            }
            
            CswNbtMetaDataObjectClass WorkUnitOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.WorkUnitClass );
            CswNbtMetaDataNodeType WorkUnitNt = WorkUnitOc.getLatestVersionNodeTypes().FirstOrDefault();
            if( null != WorkUnitNt )
            {
                CswNbtObjClassWorkUnit DefaultWorkUnit = null;
                foreach (CswNbtObjClassWorkUnit WuNode in WorkUnitNt.getNodes(true, false))
                {
                    if( null != WuNode && WuNode.Name.Text == "Default Work Unit" )
                    {
                        DefaultWorkUnit = WuNode;
                    }
                }
                if( null == DefaultWorkUnit )
                {
                    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 );
                    }
                }

                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;
                                    if( null != DefaultWorkUnit )
                                    {
                                        NewUser.WorkUnitProperty.RelatedNodeId = DefaultWorkUnit.NodeId;
                                    }
                                    if( null != DefaultLocation )
                                    {
                                        NewUser.DefaultLocationProperty.SelectedNodeId = DefaultLocation.NodeId;
                                    }
                                    NewUser.PasswordProperty.Password = Role.Name.Text.ToLower();
                                    NewUser.postChanges( ForceUpdate: false );
                                }
                            }
                        }
                    }
                }
            }
            

        }//Update()
        public override void update()
        {
            CswNbtMetaDataObjectClass InventoryGroupOc           = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.InventoryGroupClass);
            CswNbtMetaDataObjectClass InventoryGroupPermissionOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.InventoryGroupPermissionClass);
            CswNbtMetaDataNodeType    InvGrpNT     = InventoryGroupOc.FirstNodeType;
            CswNbtMetaDataNodeType    InvGrpPermNT = InventoryGroupPermissionOc.FirstNodeType;

            //1: Get Default Inventory Group
            CswNbtObjClassInventoryGroup DefaultInventoryGroup = null;
            CswNbtObjClassInventoryGroup CISProInventoryGroup  = null;

            foreach (CswNbtObjClassInventoryGroup InventoryGroup in InventoryGroupOc.getNodes(true, false, false, true))
            {
                if (InventoryGroup.Name.Text == "Default Inventory Group")
                {
                    DefaultInventoryGroup = InventoryGroup;
                }
                else if (InventoryGroup.Name.Text == "CISPro")
                {
                    CISProInventoryGroup = InventoryGroup;
                }
            }
            if (null == DefaultInventoryGroup)
            {
                DefaultInventoryGroup = InventoryGroupOc.getNodes(true, false, false, true).FirstOrDefault();
            }
            if (null == DefaultInventoryGroup)
            {
                if (null != InvGrpNT)
                {
                    DefaultInventoryGroup = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId(InvGrpNT.NodeTypeId, delegate(CswNbtNode NewNode)
                    {
                        CswNbtObjClassInventoryGroup DefInvGrp = NewNode;
                        DefInvGrp.Name.Text = "Default Inventory Group";
                    });
                }
            }

            if (null != DefaultInventoryGroup) //At this point DefaultInventoryGroup should never be null
            {
                //2: Set Default Value to Default Inventory Group, if no DefaultValue is present
                CswNbtMetaDataObjectClass LocationOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.LocationClass);
                foreach (CswNbtMetaDataNodeType LocationNt in LocationOc.getNodeTypes())
                {
                    CswNbtMetaDataNodeTypeProp InventoryGroupNtp = LocationNt.getNodeTypePropByObjectClassProp(CswNbtObjClassLocation.PropertyName.InventoryGroup);
                    if (false == InventoryGroupNtp.HasDefaultValue())
                    {
                        InventoryGroupNtp.DefaultValue.AsRelationship.RelatedNodeId = DefaultInventoryGroup.NodeId;
                    }
                }

                //3: Update any null Inventory Group values with Default
                foreach (CswNbtObjClassLocation Location in LocationOc.getNodes(true, false, false, true))
                {
                    if (false == CswTools.IsPrimaryKey(Location.InventoryGroup.RelatedNodeId))
                    {
                        Location.InventoryGroup.RelatedNodeId = DefaultInventoryGroup.NodeId;
                        Location.postChanges(ForceUpdate: false);
                    }
                }

                //4: Ensure at least one Inventory Group Permission exists
                CswNbtMetaDataNodeType IgPermNt = InventoryGroupPermissionOc.getLatestVersionNodeTypes().FirstOrDefault();
                if (null != IgPermNt)
                {
                    try
                    {
                        CswNbtObjClassInventoryGroupPermission DefaultPermission = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId(IgPermNt.NodeTypeId, delegate(CswNbtNode NewNode)
                        {
                            CswNbtObjClassInventoryGroupPermission WildCardPerm = NewNode;
                            WildCardPerm.PermissionGroup.RelatedNodeId          = DefaultInventoryGroup.NodeId;
                            WildCardPerm.ApplyToAllRoles.Checked     = CswEnumTristate.True;
                            WildCardPerm.ApplyToAllWorkUnits.Checked = CswEnumTristate.True;
                            WildCardPerm.Dispense.Checked            = CswEnumTristate.True;
                            WildCardPerm.Dispose.Checked             = CswEnumTristate.True;
                            WildCardPerm.Edit.Checked      = CswEnumTristate.True;
                            WildCardPerm.Request.Checked   = CswEnumTristate.True;
                            WildCardPerm.Undispose.Checked = CswEnumTristate.True;
                        });
                    }
                    catch (CswDniException ex) //If we're here, it's because this wildcard already exists
                    {
                        if (ex.ErrorType != CswEnumErrorType.Warning)
                        {
                            throw;
                        }
                    }
                }

                //5: Get rid of deprecated CISPro Inventory Group and move their permissions over to Default Inventory Group
                if (null != CISProInventoryGroup)
                {
                    CswNbtMetaDataObjectClass WorkUnitOc      = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass(CswEnumNbtObjectClass.WorkUnitClass);
                    CswNbtObjClassWorkUnit    DefaultWorkUnit = null;
                    foreach (CswNbtObjClassWorkUnit WorkUnit in WorkUnitOc.getNodes(true, false, false, true))
                    {
                        if (WorkUnit.Name.Text == "Default Work Unit")
                        {
                            DefaultWorkUnit = WorkUnit;
                        }
                    }
                    if (null != DefaultWorkUnit)
                    {
                        foreach (CswNbtObjClassInventoryGroupPermission InventoryGroupPerm in InventoryGroupPermissionOc.getNodes(true, false, false, true))
                        {
                            if (InventoryGroupPerm.PermissionGroup.RelatedNodeId == CISProInventoryGroup.NodeId)
                            {
                                try
                                {
                                    InventoryGroupPerm.PermissionGroup.RelatedNodeId = DefaultInventoryGroup.NodeId;
                                    InventoryGroupPerm.PermissionGroup.SyncGestalt();
                                    InventoryGroupPerm.WorkUnit.RelatedNodeId = DefaultWorkUnit.NodeId;
                                    InventoryGroupPerm.WorkUnit.SyncGestalt();
                                    InventoryGroupPerm.postChanges(false);
                                }
                                catch (CswDniException) //If we're here, it's because the Permission already exists on Default Inventory Group
                                {
                                    InventoryGroupPerm.Node.delete(true, true);
                                }
                            }
                        }
                    }
                    CISProInventoryGroup.Node.delete(true, true);
                }
            }
            //6: Fix Inventory Group Permissions grid prop
            if (null != InvGrpNT && null != InvGrpPermNT)
            {
                CswNbtMetaDataNodeTypeProp PermissionsNTP = InvGrpNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroup.PropertyName.Permissions);

                CswNbtView InvGrpPermView = _CswNbtSchemaModTrnsctn.restoreView(PermissionsNTP.ViewId);
                if (null == InvGrpPermView)
                {
                    InvGrpPermView          = _CswNbtSchemaModTrnsctn.makeSafeView("Permissions", CswEnumNbtViewVisibility.Property);
                    InvGrpPermView.ViewMode = CswEnumNbtViewRenderingMode.Grid;
                }
                InvGrpPermView.Root.ChildRelationships.Clear();

                CswNbtMetaDataNodeTypeProp PermissionGroupNTP = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.PermissionGroup);
                CswNbtMetaDataNodeTypeProp RoleNTP            = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.Role);
                CswNbtMetaDataNodeTypeProp WorkUnitNTP        = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.WorkUnit);
                CswNbtMetaDataNodeTypeProp ViewNTP            = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.View);
                CswNbtMetaDataNodeTypeProp EditNTP            = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.Edit);
                CswNbtMetaDataNodeTypeProp DispenseNTP        = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.Dispense);
                CswNbtMetaDataNodeTypeProp RequestNTP         = InvGrpPermNT.getNodeTypePropByObjectClassProp(CswNbtObjClassInventoryGroupPermission.PropertyName.Request);

                CswNbtViewRelationship RootRel = InvGrpPermView.AddViewRelationship(InvGrpNT, false);
                CswNbtViewRelationship PermRel = InvGrpPermView.AddViewRelationship(RootRel, CswEnumNbtViewPropOwnerType.Second, PermissionGroupNTP, true);
                InvGrpPermView.AddViewProperty(PermRel, PermissionGroupNTP, 1);
                InvGrpPermView.AddViewProperty(PermRel, RoleNTP, 2);
                InvGrpPermView.AddViewProperty(PermRel, WorkUnitNTP, 3);
                InvGrpPermView.AddViewProperty(PermRel, ViewNTP, 4);
                InvGrpPermView.AddViewProperty(PermRel, EditNTP, 5);
                InvGrpPermView.AddViewProperty(PermRel, DispenseNTP, 6);
                InvGrpPermView.AddViewProperty(PermRel, RequestNTP, 7);
                InvGrpPermView.save();

                PermissionsNTP.ViewId = InvGrpPermView.ViewId;
            }
        }