Example #1
0
        private void _createInventoryGroupPermission( int NodeTypeId, CswPrimaryKey RoleId, CswPrimaryKey InvGroupId, CswPrimaryKey WorkUnitId )
        {
            CswNbtObjClassInventoryGroupPermission InvGrpPermNode = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.DoNothing );
            InvGrpPermNode.IsDemo = true;
            InvGrpPermNode.InventoryGroup.RelatedNodeId = InvGroupId;
            InvGrpPermNode.Role.RelatedNodeId = RoleId;
            InvGrpPermNode.WorkUnit.RelatedNodeId = WorkUnitId;
            InvGrpPermNode.View.Checked = Tristate.True;
            InvGrpPermNode.Edit.Checked = Tristate.True;
            InvGrpPermNode.Dispense.Checked = Tristate.True;
            InvGrpPermNode.Request.Checked = Tristate.True;
            InvGrpPermNode.Dispose.Checked = Tristate.True;
            InvGrpPermNode.Undispose.Checked = Tristate.True;

            InvGrpPermNode.postChanges( false );
        }
        private void _createInventoryGroupPermission( CswNbtObjClassRole Role, Tristate Request, Tristate Receive )
        {
            CswNbtMetaDataNodeType InventoryGroupPermissionNT = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( "Inventory Group Permission" );
            if( InventoryGroupPermissionNT != null && InventoryGroupNode != null )
            {
                CswNbtObjClassInventoryGroupPermission InvGrpPermNode = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( InventoryGroupPermissionNT.NodeTypeId, CswNbtNodeCollection.MakeNodeOperation.WriteNode );

                InvGrpPermNode.InventoryGroup.RelatedNodeId = InventoryGroupNode.NodeId;
                InvGrpPermNode.Role.RelatedNodeId = Role.NodeId;
                //WorkUnit?
                InvGrpPermNode.View.Checked = Tristate.True;
                InvGrpPermNode.Edit.Checked = CswConvert.ToTristate( Role.Name.Text != "CISPro_View_Only" );
                InvGrpPermNode.Dispense.Checked = CswConvert.ToTristate( Role.Name.Text != "CISPro_View_Only" );
                InvGrpPermNode.Request.Checked = Request;
                InvGrpPermNode.Dispose.Checked = CswConvert.ToTristate( Role.Name.Text != "CISPro_View_Only" );
                InvGrpPermNode.Undispose.Checked = CswConvert.ToTristate( Role.Name.Text == "CISPro_Admin" );
                //InvGrpPermNode.Receive.Checked = Receive;

                InvGrpPermNode.postChanges( false );
            }
        }
Example #3
0
        public override void update()
        {
            #region NodeTypes

            CswNbtMetaDataNodeType ReportGroupPermNT = _createPermissionNT( CswEnumNbtObjectClass.ReportGroupPermissionClass, "Report Group Permission" );
            CswNbtMetaDataNodeType MailReportGroupPermNT = _createPermissionNT( CswEnumNbtObjectClass.MailReportGroupPermissionClass, "Mail Report Group Permission" );
            CswNbtMetaDataNodeType ReportGroupNT = _createGroupNT( CswEnumNbtObjectClass.ReportGroupClass, "Report Group", CswNbtObjClassReportGroup.PropertyName.Reports );
            CswNbtMetaDataNodeType MailReportGroupNT = _createGroupNT( CswEnumNbtObjectClass.MailReportGroupClass, "Mail Report Group", CswNbtObjClassMailReportGroup.PropertyName.MailReports );
            CswNbtMetaDataObjectClass InvGrpPermOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.InventoryGroupPermissionClass );
            _CswNbtSchemaModTrnsctn.MetaData.makeMissingNodeTypeProps();//For some reason this is needed here or else the following code will throw an ORNI on a full master reset
            foreach( CswNbtMetaDataNodeType InvGrpPermNT in InvGrpPermOC.getNodeTypes() )
            {
                _setPermissionPropFilters( InvGrpPermNT );
            }

            #endregion NodeTypes

            #region Permission Group Nodes

            CswNbtObjClassReportGroup DefaultReportGroup = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( ReportGroupNT.NodeTypeId, CswEnumNbtMakeNodeOperation.MakeTemp );
            DefaultReportGroup.Name.Text = "Default Report Group";
            DefaultReportGroup.IsTemp = false;
            DefaultReportGroup.postChanges( false );

            CswNbtMetaDataObjectClass ReportOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ReportClass );
            foreach( CswNbtObjClassReport ReportNode in ReportOC.getNodes( false, false ) )
            {
                ReportNode.ReportGroup.RelatedNodeId = DefaultReportGroup.NodeId;
                ReportNode.postChanges( false );
            }

            CswNbtObjClassMailReportGroup DefaultMailReportGroup = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( MailReportGroupNT.NodeTypeId, CswEnumNbtMakeNodeOperation.MakeTemp );
            DefaultMailReportGroup.Name.Text = "Default Mail Report Group";
            DefaultMailReportGroup.IsTemp = false;
            DefaultMailReportGroup.postChanges( false );

            CswNbtMetaDataObjectClass MailReportOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.MailReportClass );
            foreach( CswNbtObjClassMailReport MailReportNode in MailReportOC.getNodes( false, false ) )
            {
                MailReportNode.MailReportGroup.RelatedNodeId = DefaultMailReportGroup.NodeId;
                MailReportNode.postChanges( false );
            }

            #endregion Permission Group Nodes

            #region Inventory Group Permission Nodes

            CswNbtMetaDataNodeType InventoryGroupNT = InvGrpPermOC.FirstNodeType;
            if( null != InventoryGroupNT )
            {
                CswNbtMetaDataNodeTypeProp PermissionGroupNTP = InventoryGroupNT.getNodeTypePropByObjectClassProp( CswNbtPropertySetPermission.PropertyName.PermissionGroup );
                if( null != PermissionGroupNTP )
                {
                    PermissionGroupNTP.PropName = CswNbtPropertySetPermission.PropertyName.PermissionGroup;
                }
            }

            foreach( CswNbtObjClassInventoryGroupPermission InvGrpPermNode in InvGrpPermOC.getNodes( false, false ) )
            {
                InvGrpPermNode.ApplyToAllWorkUnits.Checked = CswEnumTristate.False;
                InvGrpPermNode.ApplyToAllRoles.Checked = CswEnumTristate.False;
                InvGrpPermNode.PermissionGroup.RefreshNodeName();
                InvGrpPermNode.postChanges( false );
            }

            CswNbtMetaDataObjectClass InvGrpOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.InventoryGroupClass );
            foreach( CswNbtObjClassInventoryGroup InvGrpNode in InvGrpOC.getNodes( false, false ) )
            {
                if( InvGrpNode.Name.Text == "Default Inventory Group" && null != InventoryGroupNT )
                {
                    CswNbtObjClassInventoryGroupPermission WildCardInventoryGroupPermission = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( InventoryGroupNT.NodeTypeId, CswEnumNbtMakeNodeOperation.DoNothing );
                    WildCardInventoryGroupPermission.ApplyToAllRoles.Checked = CswEnumTristate.True;
                    WildCardInventoryGroupPermission.ApplyToAllWorkUnits.Checked = CswEnumTristate.True;
                    WildCardInventoryGroupPermission.PermissionGroup.RelatedNodeId = InvGrpNode.NodeId;
                    WildCardInventoryGroupPermission.View.Checked = CswEnumTristate.True;
                    WildCardInventoryGroupPermission.Edit.Checked = CswEnumTristate.True;
                    WildCardInventoryGroupPermission.Dispense.Checked = CswEnumTristate.False;
                    WildCardInventoryGroupPermission.Dispose.Checked = CswEnumTristate.False;
                    WildCardInventoryGroupPermission.Request.Checked = CswEnumTristate.False;
                    WildCardInventoryGroupPermission.Undispose.Checked = CswEnumTristate.False;
                    WildCardInventoryGroupPermission.WorkUnit.RelatedNodeId = null;
                    WildCardInventoryGroupPermission.WorkUnit.RefreshNodeName();
                    WildCardInventoryGroupPermission.WorkUnit.SyncGestalt();
                    WildCardInventoryGroupPermission.postChanges( false );
                }
            }

            //This is now being handled as part of creating the Default Group nodes
            /*CswNbtObjClassReportGroupPermission WildCardReportGroupPermission = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( ReportGroupPermNT.NodeTypeId, CswEnumNbtMakeNodeOperation.DoNothing );
            WildCardReportGroupPermission.ApplyToAllRoles.Checked = CswEnumTristate.True;
            WildCardReportGroupPermission.ApplyToAllWorkUnits.Checked = CswEnumTristate.True;
            WildCardReportGroupPermission.PermissionGroup.RelatedNodeId = DefaultReportGroup.NodeId;
            WildCardReportGroupPermission.View.Checked = CswEnumTristate.True;
            WildCardReportGroupPermission.Edit.Checked = CswEnumTristate.True;
            WildCardReportGroupPermission.postChanges( false );

            CswNbtObjClassMailReportGroupPermission WildCardMailReportGroupPermission = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( MailReportGroupPermNT.NodeTypeId, CswEnumNbtMakeNodeOperation.DoNothing );
            WildCardMailReportGroupPermission.ApplyToAllRoles.Checked = CswEnumTristate.True;
            WildCardMailReportGroupPermission.ApplyToAllWorkUnits.Checked = CswEnumTristate.True;
            WildCardMailReportGroupPermission.PermissionGroup.RelatedNodeId = DefaultMailReportGroup.NodeId;
            WildCardMailReportGroupPermission.View.Checked = CswEnumTristate.True;
            WildCardMailReportGroupPermission.Edit.Checked = CswEnumTristate.True;
            WildCardMailReportGroupPermission.postChanges( false );*/

            #endregion Inventory Group Permission Nodes
        } // 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;
            }
        }