Пример #1
0
        public override void update()
        {
            CswNbtMetaDataObjectClass ContainerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp SizeOCP = ContainerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.Size );

            // To be compatible with case 27330, remove 'Size' from Container layout by default
            if( _CswNbtSchemaModTrnsctn.isMaster() )
            {
                foreach( CswNbtMetaDataNodeTypeProp SizeNTP in SizeOCP.getNodeTypeProps() )
                {
                    SizeNTP.removeFromAllLayouts();
                }
            }

            // To resolve case 30647, clear out .Hidden flag on 'Size'
            foreach( CswNbtMetaDataNodeTypeProp SizeNTP in SizeOCP.getNodeTypeProps() )
            {
                SizeNTP.Hidden = false;
                foreach( CswNbtObjClassContainer ContainerNode in ContainerOC.getNodes( false, true ) )
                {
                    ContainerNode.Size.setHidden( false, true );
                    ContainerNode.postChanges( false );
                }
            }

        } // update()
Пример #2
0
        //  This is a repeat of case 02F_Case30647.  See case 31079.
        public override void update()
        {
            CswNbtMetaDataObjectClass ContainerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp SizeOCP = ContainerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.Size );

            // To resolve case 30647, clear out .Hidden flag on 'Size'
            foreach( CswNbtMetaDataNodeTypeProp SizeNTP in SizeOCP.getNodeTypeProps() )
            {
                SizeNTP.Hidden = false;
            }

            //  getNodes() truncates!!!!!!
            //foreach( CswNbtObjClassContainer ContainerNode in ContainerOC.getNodes( false, true, false, true ) )
            //{
            //    ContainerNode.Size.setHidden( value: false, SaveToDb: true );
            //    ContainerNode.postChanges( false );
            //}
            _CswNbtSchemaModTrnsctn.execArbitraryPlatformNeutralSql( @"update jct_nodes_props
                                                                          set hidden = '0'
                                                                        where nodetypepropid in (select p.nodetypepropid
                                                                                                   from nodetype_props p
                                                                                                   join object_class_props op on p.objectclasspropid = op.objectclasspropid
                                                                                                   join object_class oc on op.objectclassid = oc.objectclassid
                                                                                                  where oc.objectclass = 'ContainerClass'
                                                                                                    and op.propname = 'Size')
                                                                          and hidden = '1'" );

        } // update()
        public override void update()
        {

            CswNbtMetaDataObjectClass reportOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ReportClass );
            CswNbtMetaDataObjectClassProp instructionsOCP = reportOC.getObjectClassProp( CswNbtObjClassReport.PropertyName.Instructions );
            CswNbtMetaDataObjectClassProp sqlOCP = reportOC.getObjectClassProp( CswNbtObjClassReport.PropertyName.Sql );

            foreach( CswNbtMetaDataNodeTypeProp instructionsNTP in instructionsOCP.getNodeTypeProps() )
            {
                instructionsNTP.TextAreaColumns = 65;
                instructionsNTP.TextAreaRows = 8;
            }

            foreach( CswNbtMetaDataNodeTypeProp sqlNTP in sqlOCP.getNodeTypeProps() )
            {
                sqlNTP.HelpText = "";
            }

            //string txt = "To create a parameterized sql report wrap the parameter name(s) in {} brackets.\n\n";
            //txt += "Enter a User property name such as 'username' to have the parameter automatically filled in with the current users value for that property. You may also use the keywords 'nodeid' or 'userid' to have the primary key of the current user filled in as the value for that parameter.";

            string txt = @"To create a parameterized report, enclose the name of the property in {}.  For example:
    and datecolumn < '{Date}'
will prompt the user to enter a Date. Parameters that match properties on the current User will be automatically filled in. For example:
    {Username} - The username of the user running the report.
    {Role} - The role of the user running the report.
    {userid} - The primary key of the user running the report.";

            foreach( CswNbtObjClassReport reportNode in reportOC.getNodes( false, true, false, true ) )
            {
                reportNode.Instructions.Text = txt;
                reportNode.postChanges( false );
            }

        } // update()
Пример #4
0
        public static void CheckContainerBarcodes(ICswResources CswResources, CswNbtContainerBarcodeCheckReturn ErrorMsg, Collection <CswNbtAmountsGridQuantity> Quantities)
        {
            CswNbtResources NbtResources = (CswNbtResources)CswResources;

            CswNbtMetaDataObjectClass     ContainerOC = NbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.ContainerClass);
            CswNbtMetaDataObjectClassProp BarcodeOCP  = (CswNbtMetaDataObjectClassProp)ContainerOC.getBarcodeProperty();
            CswCommaDelimitedString       barcodeNTPs = new CswCommaDelimitedString();

            foreach (CswNbtMetaDataNodeTypeProp barcodeNTP in BarcodeOCP.getNodeTypeProps())
            {
                barcodeNTPs.Add(barcodeNTP.PropId.ToString());
            }
            CswNbtFieldTypeRuleBarCode BarcodeFTR = (CswNbtFieldTypeRuleBarCode)BarcodeOCP.getFieldTypeRule();

            CswCommaDelimitedString AllProposedBarcodes = new CswCommaDelimitedString();
            HashSet <string>        DuplicateBarcodes   = new HashSet <string>();
            HashSet <string>        BarcodeLookup       = new HashSet <string>();

            foreach (CswNbtAmountsGridQuantity quantity in Quantities)
            {
                CswCommaDelimitedString barcodes = quantity.getBarcodes();
                foreach (string barcode in barcodes)
                {
                    AllProposedBarcodes.Add("'" + barcode.ToLower() + "'");
                    if (BarcodeLookup.Contains(barcode))
                    {
                        DuplicateBarcodes.Add(barcode);
                    }
                    else
                    {
                        BarcodeLookup.Add(barcode);
                    }
                }
            }

            if (AllProposedBarcodes.Count > 0)
            {
                if (DuplicateBarcodes.Count > 0)
                {
                    CswCommaDelimitedString dupeCDS = HashSetToCDS(DuplicateBarcodes);
                    ErrorMsg.Data = "There are following barcodes appear more than once: " + dupeCDS;
                }
                else
                {
                    string    barcodeSQL  = @"select nodeid, field1 from jct_nodes_props where nodetypepropid in (" + barcodeNTPs + ") and lower(" + BarcodeFTR.BarcodeSubField.Column + ") in (" + AllProposedBarcodes + ")";
                    DataTable barcodesTbl = NbtResources.execArbitraryPlatformNeutralSqlSelect("WebServiceReceiving.CheckContainerBarcodes", barcodeSQL);
                    if (barcodesTbl.Rows.Count > 0)
                    {
                        foreach (DataRow row in barcodesTbl.Rows)
                        {
                            DuplicateBarcodes.Add(row[BarcodeFTR.BarcodeSubField.Column.ToString()].ToString());
                        }
                        CswCommaDelimitedString dupeCDS = HashSetToCDS(DuplicateBarcodes);
                        ErrorMsg.Data = "There are following barcodes have already been assigned: " + dupeCDS;
                    }
                }
            }
        }
Пример #5
0
        public override void update()
        {

            CswNbtMetaDataObjectClass RequestItemOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.RequestItemClass );
            CswNbtMetaDataObjectClassProp ItemNoOCP = RequestItemOC.getObjectClassProp( CswNbtObjClassRequestItem.PropertyName.ItemNumber );

            //First verify there is no sequence for any ItemNo NTPs
            Collection<CswNbtMetaDataNodeTypeProp> PropsWithNoSequences = new Collection<CswNbtMetaDataNodeTypeProp>();
            foreach( CswNbtMetaDataNodeTypeProp ItemNoNTP in ItemNoOCP.getNodeTypeProps() )
            {
                if( null == ItemNoNTP.Sequence )
                {
                    PropsWithNoSequences.Add( ItemNoNTP );
                }
            }

            if( PropsWithNoSequences.Any() )
            {
                CswNbtMetaDataObjectClass DesignSequenceOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.DesignSequenceClass );
                CswNbtMetaDataNodeType DesignSequenceNT = DesignSequenceOC.getNodeTypes().FirstOrDefault();
                if( null == DesignSequenceNT )
                {
                    throw new CswDniException( CswEnumErrorType.Error, "Error creating new Sequence for Item Number property", "Cannot create a new sequence because there is no DesignSequence NodeType" );
                }

                CswNbtObjClassDesignSequence ItemNoSequence = _CswNbtSchemaModTrnsctn.Nodes.makeNodeFromNodeTypeId( DesignSequenceNT.NodeTypeId, OnAfterMakeNode : delegate( CswNbtNode NewNode )
                    {
                        CswNbtObjClassDesignSequence AsSequence = NewNode;
                        AsSequence.Name.Text = "RequestItem_ItemNumber";
                        AsSequence.Pre.Text = "RI";
                        AsSequence.Pad.Value = 6;
                    } );

                foreach( CswNbtMetaDataNodeTypeProp SequenceslessProp in PropsWithNoSequences )
                {
                    //Update the NTP to have a sequence
                    CswNbtObjClassDesignNodeTypeProp DesignNodeProp = SequenceslessProp.DesignNode;
                    CswNbtMetaDataNodeTypeProp SequenceNTP = DesignNodeProp.NodeType.getNodeTypeProp( "Sequence" );
                    if( null == SequenceNTP )
                    {
                        throw new CswDniException(CswEnumErrorType.Error, "Error assigning sequence to Item Number property", "Cannot assign a sequence to the Item Number property because there is no Sequence relationship property to assign a value to");
                    }
                    DesignNodeProp.Node.Properties[SequenceNTP].AsRelationship.RelatedNodeId = ItemNoSequence.NodeId;
                    DesignNodeProp.postChanges( false );

                    //Update existing Request Items Item No prop to have a value
                    _updateRequestItems(SequenceslessProp.getNodeType(), SequenceslessProp);
                }
            }

        } // update()
        public override void update()
        {

            foreach( CswNbtMetaDataObjectClass ObjClass in _CswNbtSchemaModTrnsctn.MetaData.getObjectClasses() )
            {
                CswNbtMetaDataObjectClassProp LegacyIdOCP = ObjClass.getObjectClassProp( CswNbtObjClass.PropertyName.LegacyId );
                _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp( LegacyIdOCP, CswEnumNbtObjectClassPropAttributes.servermanaged, true );

                foreach( CswNbtMetaDataNodeTypeProp LegacyIdNTP in LegacyIdOCP.getNodeTypeProps() )
                {
                    LegacyIdNTP.removeFromAllLayouts();
                }
            }

        } // update()
        public override void update()
        {
            CswNbtMetaDataObjectClass UserOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.UserClass );
            CswNbtMetaDataObjectClassProp CachedDataOcp = UserOc.getObjectClassProp( CswNbtObjClassUser.PropertyName.CachedData );
            foreach( CswNbtMetaDataNodeTypeProp Prop in CachedDataOcp.getNodeTypeProps() )
            {
                Prop.removeFromAllLayouts();
            }
            CswNbtActRequesting ActRequesting = new CswNbtActRequesting( _CswNbtSchemaModTrnsctn.MetaData._CswNbtMetaDataResources.CswNbtResources );
            foreach( CswNbtObjClassUser User in UserOc.getNodes( forceReInit: true, includeSystemNodes: false, IncludeDefaultFilters: false, IncludeHiddenNodes: true ) )
            {
                ActRequesting.resetCartCounts( User: User );
            }

        } // update()
Пример #8
0
        public override void update()
        {

            CswNbtMetaDataObjectClass ChemicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ChemicalClass );
            CswNbtMetaDataObjectClassProp MaterialTypeOCP = ChemicalOC.getObjectClassProp( CswNbtObjClassChemical.PropertyName.MaterialType );

            _CswNbtSchemaModTrnsctn.MetaData.UpdateObjectClassProp( MaterialTypeOCP, CswEnumNbtObjectClassPropAttributes.isrequired, false );

            foreach( CswNbtMetaDataNodeTypeProp MaterialTypeNTP in MaterialTypeOCP.getNodeTypeProps() )
            {
                MaterialTypeNTP.IsRequired = false;

            }

            _CswNbtSchemaModTrnsctn.MetaData.SetObjectClassPropDefaultValue( MaterialTypeOCP, string.Empty );

        } // update()
        public override void update()
        {
            CswNbtMetaDataObjectClass RequestMaterialDispenseOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.RequestMaterialDispenseClass );
            CswNbtMetaDataObjectClassProp IsRecurringOcp = RequestMaterialDispenseOc.getObjectClassProp( CswNbtObjClassRequestMaterialDispense.PropertyName.IsRecurring );
            foreach( CswNbtMetaDataNodeTypeProp RecurringNtp in IsRecurringOcp.getNodeTypeProps() )
            {
                RecurringNtp.removeFromAllLayouts(); 
            }

            CswNbtMetaDataObjectClass RequestOc = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.RequestClass );
            CswNbtMetaDataObjectClassProp IsRecurringReqOcp = RequestOc.getObjectClassProp( CswNbtObjClassRequest.PropertyName.IsRecurring );
            foreach( CswNbtMetaDataNodeTypeProp RecurringNtp in IsRecurringReqOcp.getNodeTypeProps() )
            {
                RecurringNtp.removeFromAllLayouts();
            }

            _CswNbtSchemaModTrnsctn.createScheduledRule( NbtScheduleRuleNames.GenRequest, Recurrence.NSeconds, 5 );

        } //Update()
Пример #10
0
        public override void update()
        {
            CswNbtMetaDataObjectClass materialOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.MaterialClass );

            #region Create and set the material Id for all material NTs
            CswSequenceName materialIDSequenceName = new CswSequenceName( "Material Id nbt" );

            if( false == _CswNbtSchemaModTrnsctn.doesSequenceExist( materialIDSequenceName ) )
            {
                int seqId = _CswNbtSchemaModTrnsctn.makeSequence( materialIDSequenceName, "M", "", 6, 0 );

                foreach( CswNbtMetaDataNodeType matNT in materialOC.getNodeTypes() )
                {
                    CswNbtMetaDataNodeTypeProp materialIdNTP = matNT.getNodeTypePropByObjectClassProp( CswNbtObjClassMaterial.PropertyName.MaterialId );
                    materialIdNTP.setSequence( seqId );
                }
            }
            #endregion

            #region set the NodeViewId for Manufacturing Sites on Material

            CswNbtViewId viewid = null;
            foreach( CswNbtView view in _CswNbtSchemaModTrnsctn.ViewSelect.restoreViews( "Manufacturing Sites" ) )
            {
                if( view.Visibility.Equals( NbtViewVisibility.Property ) )
                {
                    viewid = view.ViewId;
                }
            }

            if( null != viewid )
            {
                CswNbtMetaDataObjectClassProp manufacturingSitesOCP = materialOC.getObjectClassProp( CswNbtObjClassMaterial.PropertyName.ManufacturingSites );
                foreach( CswNbtMetaDataNodeTypeProp manufacturingSitesNTP in manufacturingSitesOCP.getNodeTypeProps() )
                {
                    manufacturingSitesNTP.ViewId = viewid;
                }
            }

            #endregion

        }
Пример #11
0
        public override void update()
        {

            CswNbtMetaDataObjectClass ContainerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp UndisposeOCP = ContainerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.Undispose );
            CswNbtMetaDataObjectClassProp DisposeOCP = ContainerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.Dispose );

            CswCommaDelimitedString PropIds = new CswCommaDelimitedString();
            foreach( CswNbtMetaDataNodeTypeProp UndisposeNTP in UndisposeOCP.getNodeTypeProps() )
            {
                PropIds.Add( UndisposeNTP.PropId.ToString() );
            }
            foreach( CswNbtMetaDataNodeTypeProp DisposeNTP in DisposeOCP.getNodeTypeProps() )
            {
                PropIds.Add( DisposeNTP.PropId.ToString() );
            }

            _CswNbtSchemaModTrnsctn.execArbitraryPlatformNeutralSql( @"update jct_nodes_props jnp set hidden = 0 where nodetypepropid in (" + PropIds + ")" );

        } // update()
Пример #12
0
        public override void update()
        {
            CswNbtMetaDataObjectClass MailReportOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.MailReportClass );
            CswNbtMetaDataObjectClassProp NameOCP = MailReportOC.getObjectClassProp( CswNbtObjClassMailReport.PropertyName.Name );

            //Make sure all Mail reports have unique names
            foreach( CswNbtObjClassMailReport MailReport in MailReportOC.getNodes( false, true, false, true ) )
            {
                _makeNameUnique( MailReportOC, NameOCP, MailReport, MailReport.Name.Text, 0 );
            }

            //Make the Name property unique
            foreach( CswNbtMetaDataNodeTypeProp NameNTP in NameOCP.getNodeTypeProps() )
            {
                CswNbtObjClassDesignNodeTypeProp NamePropertyNode = NameNTP.DesignNode;
                NamePropertyNode.Unique.Checked = CswEnumTristate.True;
                NamePropertyNode.postChanges( false );
            }

        } // update()
Пример #13
0
        public override void update()
        {
            CswNbtMetaDataObjectClass ContainerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp OpenedDateOCP = ContainerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.OpenedDate );
            foreach( CswNbtMetaDataNodeTypeProp OpenedDateNTP in OpenedDateOCP.getNodeTypeProps() )
            {
                OpenedDateNTP.DesignNode.ReadOnly.Checked = CswEnumTristate.True;
                OpenedDateNTP.DesignNode.postChanges( false );
                CswNbtMetaDataNodeType nt = OpenedDateNTP.getNodeType();
                OpenedDateNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, nt.getFirstNodeTypeTab().TabId );
            }

            CswNbtMetaDataObjectClass ChemicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ChemicalClass );
            CswNbtMetaDataObjectClassProp OpenExpireIntervalOCP = ChemicalOC.getObjectClassProp( CswNbtObjClassChemical.PropertyName.OpenExpireInterval );
            foreach( CswNbtMetaDataNodeTypeProp OpenExpireIntervalNTP in OpenExpireIntervalOCP.getNodeTypeProps() )
            {
                CswNbtMetaDataNodeType nt = OpenExpireIntervalNTP.getNodeType();
                OpenExpireIntervalNTP.updateLayout( CswEnumNbtLayoutType.Edit, true, nt.getFirstNodeTypeTab().TabId );
            }

        } // update()
        public override void update()
        {
            CswNbtMetaDataObjectClass materialOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.MaterialClass );
            CswNbtMetaDataObjectClassProp CASNoOCP = materialOC.getObjectClassProp( CswNbtObjClassMaterial.PropertyName.CasNo );
            foreach( CswNbtMetaDataNodeTypeProp casNoNTP in CASNoOCP.getNodeTypeProps() )
            {
                casNoNTP.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Add );
            }

            CswNbtMetaDataNodeType chemicalNT = _CswNbtSchemaModTrnsctn.MetaData.getNodeType( "Chemical" );
            if( null != chemicalNT )
            {
                CswNbtMetaDataNodeTypeTab chemicalTab = chemicalNT.getFirstNodeTypeTab();
                CswNbtMetaDataNodeTypeProp chemicalCASNoNTP = chemicalNT.getNodeTypePropByObjectClassProp( CswNbtObjClassMaterial.PropertyName.CasNo );
                CswNbtMetaDataNodeTypeProp chemicalSynoNTP = chemicalNT.getNodeTypeProp( "Synonyms" );
                if( null != chemicalSynoNTP )
                {
                    _CswNbtSchemaModTrnsctn.MetaData.NodeTypeLayout.updatePropLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Edit, chemicalCASNoNTP, chemicalSynoNTP, true );
                }
            }

        }
        public override void update()
        {
            #region remove the receipt lot objclass from jct_modules_objectclass

            CswNbtMetaDataObjectClass receiptLotOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.ReceiptLotClass );
            _CswNbtSchemaModTrnsctn.deleteAllModuleObjectClassJunctions( receiptLotOC );
            _CswNbtSchemaModTrnsctn.createModuleObjectClassJunction( CswNbtModuleName.CISPro, receiptLotOC.ObjectClassId );

            #endregion

            #region make the receipt lot NTP on containers hidden by default

            CswNbtMetaDataObjectClass containerOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( NbtObjectClass.ContainerClass );
            CswNbtMetaDataObjectClassProp receiptLotOCP = containerOC.getObjectClassProp( CswNbtObjClassContainer.PropertyName.ReceiptLot );

            foreach( CswNbtMetaDataNodeTypeProp receiptLotNTP in receiptLotOCP.getNodeTypeProps() )
            {
                receiptLotNTP.removeFromAllLayouts();
            }

            #endregion
        }
Пример #16
0
        } //ctor Vp

        private void setObjectClassPropListOptions(CswNbtMetaDataObjectClassProp ObjectClassProp)
        {
            if (ObjectClassProp.ListOptions != string.Empty)
            {
                ListOptions.FromString(ObjectClassProp.ListOptions);
            }
            else
            {
                // Get all options from all nodetypes
                foreach (CswNbtMetaDataNodeTypeProp VPNodeTypeProp in ObjectClassProp.getNodeTypeProps())
                {
                    CswCommaDelimitedString NTPListOptions = new CswCommaDelimitedString();
                    //NTPListOptions.FromString( VPNodeTypeProp.ListOptions );
                    if (VPNodeTypeProp.DesignNode.AttributeProperty.ContainsKey(CswEnumNbtPropertyAttributeName.Options))
                    {
                        NTPListOptions.FromString(VPNodeTypeProp.DesignNode.AttributeProperty[CswEnumNbtPropertyAttributeName.Options].AsText.Text);
                    }
                    foreach (string Option in NTPListOptions)
                    {
                        ListOptions.Add(Option, false, true);
                    }
                }
            }
        } // setObjectClassPropListOptions()
Пример #17
0
        public override void update()
        {

            CswNbtMetaDataObjectClass roleOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswNbtMetaDataObjectClass.NbtObjectClass.RoleClass );

            CswNbtMetaDataObjectClassProp actionPermissionsOCP = roleOC.getObjectClassProp( CswNbtObjClassRole.ActionPermissionsPropertyName );
            if( null != actionPermissionsOCP )
            {
                foreach( CswNbtMetaDataNodeTypeProp permissions in actionPermissionsOCP.getNodeTypeProps() )
                {
                    permissions.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Preview );
                }
            }

            CswNbtMetaDataObjectClassProp nodeTypePermissionsOCP = roleOC.getObjectClassProp( CswNbtObjClassRole.NodeTypePermissionsPropertyName );
            if( null != nodeTypePermissionsOCP )
            {
                foreach( CswNbtMetaDataNodeTypeProp permissions in nodeTypePermissionsOCP.getNodeTypeProps() )
                {
                    permissions.removeFromLayout( CswNbtMetaDataNodeTypeLayoutMgr.LayoutType.Preview );
                }
            }

        }//Update()
        public override void update()
        {
            CswNbtMetaDataObjectClass ChemicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ChemicalClass );
            CswNbtMetaDataObjectClassProp ViewSDSOCP = ChemicalOC.getObjectClassProp( CswNbtObjClassChemical.PropertyName.ViewSDS );
            CswNbtMetaDataObjectClassProp RequestOCP = ChemicalOC.getObjectClassProp( CswNbtObjClassChemical.PropertyName.Request );

            CswCommaDelimitedString ViewSDSNTPIds = new CswCommaDelimitedString();
            CswCommaDelimitedString RequestNTPIds = new CswCommaDelimitedString();

            foreach( CswNbtMetaDataNodeTypeProp ViewSDSNTP in ViewSDSOCP.getNodeTypeProps() )
            {
                ViewSDSNTPIds.Add( ViewSDSNTP.PropId.ToString() );
            }

            foreach( CswNbtMetaDataNodeTypeProp RequestNTP in RequestOCP.getNodeTypeProps() )
            {
                RequestNTPIds.Add( RequestNTP.PropId.ToString() );
            }

            string sql = @"select j.nodeid, j.nodetypepropid, count(nodeid) as cnt from jct_nodes_props j
                            where j.nodetypepropid in (" + ViewSDSNTPIds.ToString() + ") or j.nodetypepropid in (" + RequestNTPIds.ToString() + ") " +
                         @"group by j.nodeid, j.nodetypepropid
                            having count(nodeid) > 1";
            CswArbitrarySelect arbSel = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "GetDupRowsNodeIds", sql );
            CswCommaDelimitedString NodeIds = new CswCommaDelimitedString();
            DataTable dupTbl = arbSel.getTable();
            foreach( DataRow row in dupTbl.Rows )
            {
                NodeIds.Add( row["nodeid"].ToString() );
            }

            _deleteDuplicateRows( NodeIds, ViewSDSNTPIds );
            _deleteDuplicateRows( NodeIds, RequestNTPIds );


        } // update()
        private bool _validateStatus(ref OperationData OpData)
        {
            bool   ret    = false;
            string status = OpData.Field1.Value;

            Regex  alphNums       = new Regex("[^a-zA-Z0-9]");
            string strippedStatus = alphNums.Replace(status, "");

            Collection <CswNbtMetaDataNodeTypeProp> statusNTPs = new Collection <CswNbtMetaDataNodeTypeProp>();

            CswNbtMetaDataObjectClass     equipmentOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.EquipmentClass);
            CswNbtMetaDataObjectClassProp statusOCP   = equipmentOC.getObjectClassProp(CswNbtObjClassEquipment.PropertyName.Status);

            foreach (CswNbtMetaDataNodeTypeProp statusNTP in statusOCP.getNodeTypeProps())
            {
                statusNTPs.Add(statusNTP);
            }

            CswNbtMetaDataObjectClass assemblyOC = _CswNbtResources.MetaData.getObjectClass(CswEnumNbtObjectClass.EquipmentAssemblyClass);

            statusOCP = assemblyOC.getObjectClassProp(CswNbtObjClassEquipmentAssembly.PropertyName.Status);
            foreach (CswNbtMetaDataNodeTypeProp statusNTP in statusOCP.getNodeTypeProps())
            {
                statusNTPs.Add(statusNTP);
            }

            foreach (CswNbtMetaDataNodeTypeProp statusNTP in statusNTPs)
            {
                CswCommaDelimitedString statusOptCDS = new CswCommaDelimitedString();
                statusOptCDS.FromString(statusNTP.DesignNode.getAttributeValueByColumn(CswEnumNbtPropertyAttributeColumn.Listoptions));

                foreach (string candidateStatus in statusOptCDS)
                {
                    if (false == ret)
                    {
                        if (string.Equals(candidateStatus, status, StringComparison.CurrentCultureIgnoreCase))
                        {
                            ret = true;
                            OpData.Field1.Value = candidateStatus;
                        }
                        else
                        {
                            string strippedCandidateStatus = alphNums.Replace(candidateStatus, "");
                            if (strippedStatus.Equals(strippedCandidateStatus, StringComparison.CurrentCultureIgnoreCase))
                            {
                                ret = true;
                                OpData.Field1.Value = candidateStatus;
                            }
                        }
                    }
                }
            }

            if (false == ret)
            {
                OpData.Field1.ServerValidated = false;
                OpData.Field1.StatusMsg       = status + " is not a valid option for a Status Mode scan.";
            }

            return(ret);
        }
        public override void update()
        {
            //get all Structure NTP ids
            CswNbtMetaDataObjectClass ChemicalOC = _CswNbtSchemaModTrnsctn.MetaData.getObjectClass( CswEnumNbtObjectClass.ChemicalClass );
            CswNbtMetaDataObjectClassProp StructureOCP = ChemicalOC.getObjectClassProp( CswNbtObjClassChemical.PropertyName.Structure );
            CswCommaDelimitedString StructreNTPIds = new CswCommaDelimitedString();
            foreach( CswNbtMetaDataNodeTypeProp StructureNTP in StructureOCP.getNodeTypeProps() )
            {
                StructreNTPIds.Add( StructureNTP.PropId.ToString() );
            }

            //get all node ids from jct_nodes_props that have more than one record for the Structure prop
            Collection<CswPrimaryKey> NodeIds = new Collection<CswPrimaryKey>();
            string sql = "select nodeid, count(nodeid) as cnt from jct_nodes_props where nodetypepropid in (" + StructreNTPIds.ToString() + ") group by nodeid";
            CswArbitrarySelect ArbSelect = _CswNbtSchemaModTrnsctn.makeCswArbitrarySelect( "GetDuplicateStructureRecords", sql );
            DataTable jnpTbl = ArbSelect.getTable();
            foreach( DataRow row in jnpTbl.Rows )
            {
                if( CswConvert.ToInt32( row["cnt"] ) > 1 )
                {
                    NodeIds.Add( new CswPrimaryKey( "nodes", CswConvert.ToInt32( row["nodeid"] ) ) );
                }
            }

            //Fix the Nodes
            foreach( CswPrimaryKey NodeId in NodeIds )
            {
                CswCommaDelimitedString JctNodePropRowsToDelete = new CswCommaDelimitedString();

                CswNbtObjClassChemical ChemicalNode = _CswNbtSchemaModTrnsctn.Nodes[NodeId];
                if( String.IsNullOrEmpty( ChemicalNode.Structure.Mol ) ) //if there is no Mol, a user never uploaded a new Mol, find the JctNodeProp row that has the clob data and set it correctly
                {
                    int newJctNodePropId = Int32.MinValue;
                    DataTable JnpTbl = _getJNPTblUpdate( NodeId, StructreNTPIds );
                    foreach( DataRow row in JnpTbl.Rows )
                    {
                        if( String.IsNullOrEmpty( row["clobdata"].ToString() ) )
                        {
                            JctNodePropRowsToDelete.Add( CswConvert.ToInt32( row["jctnodepropid"] ).ToString() );
                        }
                        else
                        {
                            newJctNodePropId = CswConvert.ToInt32( row["jctnodepropid"] );
                        }
                    }
                    CswTableUpdate blobDataTblUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "getBlobDataTblUpdate", "blob_data" );
                    DataTable blobDataTbl = blobDataTblUpdate.getTable( "where jctnodepropid in (" + JctNodePropRowsToDelete.ToString() + ")" );
                    if( blobDataTbl.Rows.Count > 0 )
                    {
                        blobDataTbl.Rows[0]["jctnodepropid"] = newJctNodePropId;
                    }
                    blobDataTblUpdate.update( blobDataTbl );

                }
                else //the user uploaded a new mol to the Chemical, throw out the old data and use the new data
                {
                    DataTable JnpTbl = _getJNPTblUpdate( NodeId, StructreNTPIds );
                    foreach( DataRow row in JnpTbl.Rows )
                    {
                        if( CswConvert.ToInt32( row["jctnodepropid"] ) != ChemicalNode.Structure.JctNodePropId )
                        {
                            JctNodePropRowsToDelete.Add( CswConvert.ToInt32( row["jctnodepropid"] ).ToString() );
                        }
                    }

                    if( JctNodePropRowsToDelete.Count > 0 )
                    {
                        CswTableUpdate BlobDataTblUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "DeleteOldBlobDataRows", "blob_data" );
                        DataTable blobDataTbl = BlobDataTblUpdate.getTable( "where jctnodepropid in (" + JctNodePropRowsToDelete.ToString() + ")" );
                        foreach( DataRow row in blobDataTbl.Rows )
                        {
                            row.Delete();
                        }
                        BlobDataTblUpdate.update( blobDataTbl );
                    }
                }


                CswTableUpdate JnpTblUpdate = _CswNbtSchemaModTrnsctn.makeCswTableUpdate( "DeleteBadJnpDataRows", "jct_nodes_props" );
                DataTable jnpDataTbl = JnpTblUpdate.getTable( "where jctnodepropid in (" + JctNodePropRowsToDelete.ToString() + ")" );
                foreach( DataRow row in jnpDataTbl.Rows )
                {
                    row.Delete();
                }
                JnpTblUpdate.update( jnpDataTbl );
            }


        } // update()