Subversion Repositories DevTools

Rev

Rev 6591 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%
'=====================================================
'            Package Action Buttons
'=====================================================
%>
<%
Sub ActivateButtonAccordingToReleaseModeAndPermissions(NNbutton, NNpermission)
    If canActionInProject() Then
        If (ReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE) OR(ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) Then
            If canActionControlInProject(NNpermission) Then
                Call objBtnControl.Active(NNbutton, "Y")
            Else
                Call objBtnControl.Active(NNbutton, "N")
            End If
        ElseIf (ReleaseMode = enumDB_RELEASE_IN_OPEN_MODE) Then
            Call objBtnControl.Active(NNbutton, "Y")
        Else
            Call objBtnControl.Active(NNbutton, "N")
        End If
    Else
        Call objBtnControl.Active(NNbutton, "N")
    End If
End Sub

Sub RenderActionButtons
    '--Determine whether the release has an associated MASS_REF
    Dim rsAssoc, AssocMASSREF, AssocMASSREFValue, StatesUsed
    If parRtag_id > 0 Then
        Set rsAssoc = OraDatabase.DbCreateDynaset("SELECT ASSOC_MASS_REF, PRODUCT_STATE_USED FROM RELEASE_TAGS WHERE RTAG_ID="&parRtag_id, cint(0))
        AssocMASSREFValue = rsAssoc("ASSOC_MASS_REF")
        StatesUsed = rsAssoc("PRODUCT_STATE_USED")
          If NOT IsNull(rsAssoc("ASSOC_MASS_REF")) Then
             AssocMASSREF = True
          Else
             AssocMASSREF = False
          End If
        rsAssoc.Close()
        Set rsAssoc = nothing
    End If

    '-- Define Action buttons on this tab
    If IsNull(pkgInfoHash.Item("is_patch")) Then
        If parRtag_id > 0 Then
            If (pkgInfoHash.Item("can_edit_in_project") = "1" OR  _
                canShowControlInProject("AlterReleaseContentsInRestrictiveMode")) OR _
                (pkgInfoHash.Item("v_ext") = ".mas" AND pkgInfoHash.Item("v_ext") = ".cr" OR _
                 NOT AssocMASSREF OR NOT IsNull(pkgInfoHash.Item("v_ext")) ) Then

                If pkgInfoHash.Item("is_deployable") = "Y" AND pkgInfoHash.Item("dlocked") = "Y" AND StatesUsed = "Y" Then
                    If pkgInfoHash.Item("product_state") = 1 Then

                        ' For Products that have been approved for Pending Integration
                        aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnPendingTest", "btnRejectProduct", "width=20", _
                                            "width=20", "btnMoveToView", "btnStickyNotes")

                    ElseIf pkgInfoHash.Item("product_state") = 2 Then
                       ' For Products that have been approved for Pending Test
                       aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnPendingIntegration", "btnPendingDeployment","btnRejectProduct", "width=20", _
                                           "width=20", "btnMoveToView", "btnStickyNotes")

                    ElseIf pkgInfoHash.Item("product_state") = 3 or pkgInfoHash.Item("product_state") = 4 Then
                        'For Products that have been approved for Pending Deployment
                        aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnRemovePackage", "width=20", "btnRejectPackage", "width=20", _
                                            "btnMoveToView", "btnReversionPackage", "width=20", "btnStickyNotes")

                    ElseIf pkgInfoHash.Item("product_state") = 5 Then
                        'For Products that have been approved for Pending Integration and Deployment
                        aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnPendingDeployment", "width=20", _
                                            "width=20", "btnMoveToView", "btnStickyNotes")

                    ElseIf IsNull(pkgInfoHash.Item("product_state")) Then
                       If canShowControlInProject("ApprovePendingIntegrateAndDeploy") Then
                            'For Products that have have not yet been approved for Pending Integration
                            aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnPendingIntegration", "btnPendingIntegrateAndDeploy", "btnRejectProduct", "width=20", "btnRemovePackage", _
                                                 "btnMoveToView", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation")
                        Else
                            'For Products that have have not yet been approved for Pending Integration
                            aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnPendingIntegration","btnRemovePackage", "width=20", "btnRejectProduct", "width=20", _
                                                "width=20", "btnMoveToView", "btnStickyNotes")
                        End If
                    Else
                       ' For Packages Not In Release(Bug Fix From Deployment Manager)
                       aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "btnRemovePackage", "width=20", "btnMakePending", "btnApprovePackage", "btnMakeRelease", "btnRejectPackage", "width=20", _
                                           "btnMoveToView", "btnReversionPackage", "width=20", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation")
                    End If

                ElseIf canActionControlInProject("EditCriticalInfoForLockedPackage") Then
                    ' For Packages in Release
                    aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "width=20", "btnDestroyWip" ,"btnRemovePackage", "btnMoveWIPToRelease",  "width=20", _
                                        "btnAddDaemonInstTestBuildPackage", "btnMakePending", "btnApprovePackage", "btnApproveMerge", "btnMakeRelease", "btnRejectPackage", "btnRejectAutobuildPackage", "btnMakeUnrelease", "width=20", _
                                        "btnMoveToView", "btnReversionPackage","btnLockPackage","btnUnLockPackage", "width=20", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation", "btnAddDaemonInstRipplePackage", "btnDelDaemonInstRipplePackage", "btnDelDaemonInstTestPackage")
                Else
                    ' For Packages in Release
                    aTabBtnsDef = Array("btnNewVersion", "btnVersionHistory", "width=20", "btnDestroyWip","btnRemovePackage", "btnMoveWIPToRelease", "width=20", _
                                        "btnAddDaemonInstTestBuildPackage", "btnMakePending", "btnApprovePackage", "btnApproveMerge", "btnMakeRelease", "btnRejectPackage", "btnRejectAutobuildPackage", "width=20", _
                                        "btnMoveToView", "btnReversionPackage", "width=20", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation", "btnAddDaemonInstRipplePackage", "btnDelDaemonInstRipplePackage", "btnDelDaemonInstTestPackage")
                End If
          Else
             ' Non-Editable Packages in Release
             If AssocMASSREF Then
                aTabBtnsDef = Array("btnNewVersion-MASSREF", "btnVersionHistory", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation")
             Else
                aTabBtnsDef = Array("btnVersionHistory", "btnStickyNotes", "btnDeprecation", "btnUnDeprecation")
             End If
          End If

        Else
          ' For standalone Packages(Not viewed in project release)
          aTabBtnsDef = Array("btnVersionHistory", "btnRecycleBin", "btnReversionPackage", "width=20", "btnStickyNotes")
        End If

    Else
       ' For Patches
        aTabBtnsDef = Array("btnMakeRelease", "btnMakeUnrelease", "width=20", _
                        "btnReversionPackage", "width=20", "btnObsoletePatch", "btnUnobsoletePatch", "width=20","btnStickyNotes")

    End If

    ' Load action buttons from database
    Call objBtnControl.LoadActionButtons(aTabBtnsDef, OraDatabase)

    ' Set spacing to minimum between buttons
    objBtnControl.ButtonSpacer = 0
    objBtnControl.ImageHspace = 2

    '--- Set button conditions ---
    objBtnControl.IsReadonlyAction = releaseIsClosed(ReleaseMode)
    objBtnControl.setClosed        = releaseIsClosed(ReleaseMode)

    ' NOTE: At this point, all buttons are Active and Visible and must now be configured
    '       as appropriate by statements that follow.

    '--- Set default button settings ---
    Call objBtnControl.Visible("btnNewVersion", "N")
    Call objBtnControl.Visible("btnNewVersion-MASSREF", "N")
    Call objBtnControl.Visible("btnMakePending", "N")
    Call objBtnControl.Active ("btnMakePending", "N")
    Call objBtnControl.Visible("btnApprovePackage", "N")
    Call objBtnControl.Visible("btnMakeRelease", "N")
    Call objBtnControl.Active ("btnMakeRelease", "N")
    Call objBtnControl.Active ("btnRejectPackage", "N")
    Call objBtnControl.Visible("btnRejectPackage", "Y")
    Call objBtnControl.Active ("btnRejectAutobuildPackage", "N")
    Call objBtnControl.Visible("btnRejectAutobuildPackage", "N")
    Call objBtnControl.Visible("btnMakeUnrelease", "N")
    Call objBtnControl.Active ("btnMakeUnrelease", "N")
    Call objBtnControl.Active ("btnReversionPackage", "N")
    Call objBtnControl.Visible("btnObsoletePatch", "N")
    Call objBtnControl.Visible("btnUnobsoletePatch", "N")
    Call objBtnControl.Visible("btnDeprecation", "N")
    Call objBtnControl.Visible("btnUnDeprecation", "N")
    Call objBtnControl.Active ("btnApproveMerge", "N")
    Call objBtnControl.Visible("btnApproveMerge", "N")
    Call objBtnControl.Active ("btnAddDaemonInstRipplePackage", "N")
    Call objBtnControl.Visible("btnAddDaemonInstRipplePackage", "N")
    Call objBtnControl.Active ("btnDelDaemonInstRipplePackage", "N")
    Call objBtnControl.Visible("btnDelDaemonInstRipplePackage", "N")
    Call objBtnControl.Active ("btnDelDaemonInstTestPackage", "N")
    Call objBtnControl.Visible("btnDelDaemonInstTestPackage", "N")
    Call objBtnControl.Active ("btnAddDaemonInstTestBuildPackage", "N")
    Call objBtnControl.Visible("btnAddDaemonInstTestBuildPackage", "N")
    Call objBtnControl.Active ("btnMoveWIPToRelease", "N")
    Call objBtnControl.Visible("btnMoveWIPToRelease", "N")
    Call objBtnControl.Active ("btnDestroyWip", "N")
    Call objBtnControl.Visible("btnDestroyWip", "N")
    Call objBtnControl.Visible("btnUnLockPackage", "N")
    Call objBtnControl.Active ("btnUnLockPackage", "N")
    Call objBtnControl.Visible("btnLockPackage", "N")
    Call objBtnControl.Active ("btnLockPackage", "N")

    ' -- Change visible buttons for Auto: Manual built packages
    '    Manually build packages are very rare. Possibly just DataBase patches
    '
    If (pkgInfoHash.Item("build_type") <> "M") Then
        ' For automatic build
        Call objBtnControl.Visible("btnApprovePackage", "Y")
        Call objBtnControl.Active ("btnApprovePackage", "N")

    Else
        ' For Manual Build
        Call objBtnControl.Visible("btnMakeRelease", "Y")
        Call objBtnControl.Active ("btnMakeRelease", "Y")

    End If

    '-- Change button setting the current state of the package
    '       Release and Locked
    '       Pending Approval
    '       Approved Waiting auto build
    '       Rejected or Unlcoked
    '
    If pkgInfoHash.Item("dlocked") = "Y" Then
       ' Package is Released and Locked
        Call objBtnControl.Visible("btnNewVersion", "Y")
        If Not canActionControlInProject("CreateNewVersion") Then
            Call objBtnControl.Active("btnNewVersion", "N")
        End If

        If AssocMASSREF Then
            Call objBtnControl.Visible("btnNewVersion-MASSREF", "Y")
        End If

        If (parRtag_id > 0) AND canShowControlInProject("DeprecatePackage") Then
            If (pkgInfoHash.Item("is_deprecated")) Then
                Call objBtnControl.Visible("btnUnDeprecation", "Y")
            Else
                Call objBtnControl.Visible("btnDeprecation", "Y")
            End If
        Else
            Call objBtnControl.Active("btnDeprecation",  "N")
            Call objBtnControl.Visible("btnDeprecation",  "Y")
        End If

        Call objBtnControl.Active("btnApprovePackage", "N")
        Call objBtnControl.Active("btnMakeRelease", "N")

        If pkgInfoHash.Item("can_unofficial") = "true" OR canActionControlInProject("EditCriticalInfoForLockedPackage") Then
            Call objBtnControl.Visible("btnMakeUnrelease", "Y")
            Call objBtnControl.Active("btnMakeUnrelease", "Y")
        End If

       ' DEVI-45275 - We can now merge existing(locked) versions to planned(pending) whilst assigning an operation to them
       ' to either(A)dd or(S)ubtract the version from the release. Such items must be "rejectable" so we need to enable the
       ' reject package button.
        If pkgInfoHash.Item("planned_operation") <> " " Then
            Call objBtnControl.Visible("btnRejectPackage", "Y")
            Call objBtnControl.Active("btnRejectPackage", "Y")
        Else
            Call objBtnControl.Visible("btnRejectPackage", "N")
        End If

        Call objBtnControl.Visible("btnMakePending", "N")
        Call objBtnControl.Visible("btnMakeRelease", "N")
        Call objBtnControl.Visible("btnApprovePackage", "N")

        Call objBtnControl.Visible("btnAddDaemonInstRipplePackage", "Y")
        Call ActivateButtonAccordingToReleaseModeAndPermissions("btnAddDaemonInstRipplePackage", "ApproveForAutoBuild")

        If pkgInfoHash.Item("hasRippleInstr") <> "" Then
            Call objBtnControl.Visible("btnDelDaemonInstRipplePackage", "Y")
            Call ActivateButtonAccordingToReleaseModeAndPermissions("btnDelDaemonInstRipplePackage", "ApproveForAutoBuild")
        End If

        If pkgInfoHash.Item("hasTestInstr") <> "" Then
            Call objBtnControl.Visible("btnDelDaemonInstTestPackage", "Y")
            Call ActivateButtonAccordingToReleaseModeAndPermissions("btnDelDaemonInstTestPackage", "ApproveForAutoBuild")
        End If

        If pkgInfoHash.Item("hasRippleInstr") <> "" AND pkgInfoHash.Item("hasTestInstr") <> "" Then
            Call objBtnControl.Active("btnAddDaemonInstRipplePackage", "N")
        End If

        ' Unlock patch or package.
        Call objBtnControl.Visible("btnUnLockPackage", "Y")
        Call objBtnControl.Active ("btnUnLockPackage", "Y")

    ElseIf pkgInfoHash.Item("dlocked") = "P" Then
        ' In Pending
        Call objBtnControl.Visible("btnMakePending", "N")
        Call ActivateButtonAccordingToReleaseModeAndPermissions("btnApprovePackage", "ApproveForAutoBuild")
        Call ActivateButtonAccordingToReleaseModeAndPermissions("btnMakeRelease",    "ApproveForManualBuild")
        Call ActivateButtonAccordingToReleaseModeAndPermissions("btnRejectPackage",  "RejectPackageFromPending")

        Call objBtnControl.Active ("btnRemovePackage", "N")
        Call objBtnControl.Visible("btnRemovePackage", "N")


    ElseIf pkgInfoHash.Item("dlocked") = "A" Then
       ' In Pending, Approved For Autobuild
        Call objBtnControl.Visible("btnMakePending", "N")
        Call objBtnControl.Active("btnMakePending", "N")

        Call objBtnControl.Visible("btnApprovePackage", "N")
        Call objBtnControl.Active("btnApprovePackage", "N")

        Call objBtnControl.Visible("btnRejectPackage", "N")
        Call objBtnControl.Active("btnRejectPackage", "N")

        Call objBtnControl.Active ("btnRemovePackage", "N")
        Call objBtnControl.Visible("btnRemovePackage", "N")

        Call objBtnControl.Visible("btnRejectAutobuildPackage", "Y")
        Call objBtnControl.Active ("btnRejectAutobuildPackage", "N")

        If parRtag_id > 0 Then
            '--- Allow failed auto-builds to be rejected back to WIP, conditions allowing.
            '    Can reject if:
            '       Manual Package and a suitable user
            '       Auto Package and 
            '           The release has no active daemons OR the packahe has failed to build
            If pkgInfoHash.Item("build_type") = "A" Then
                If activeDaemonCount(parRtag_id) = 0 OR isInDoNotRippleTable(parRtag_id, pkgInfoHash.Item("pv_id")) = TRUE Then
                    Call ActivateButtonAccordingToReleaseModeAndPermissions("btnRejectAutobuildPackage", "RejectPackageFromPending")
                End If
            Else
                '    Manual Package should not be in this state
                If canActionControlInProject("EditCriticalInfoForLockedPackage") Then
                    Call objBtnControl.Active ("btnRejectAutobuildPackage", "Y")
                End If
            End If
        End If


    Else
       ' Unlocked or rejected packages(dlocked = N or R)
        Call objBtnControl.Active ("btnReversionPackage", "Y")
        Call objBtnControl.Visible("btnReversionPackage", "Y")
        Call objBtnControl.Visible("btnMakePending", "Y")
        Call objBtnControl.Active ("btnMakePending", "Y")
        Call objBtnControl.Visible("btnRejectPackage", "N")

        ' Patches (which are Manual) can be directly released
        If NOT IsNull(pkgInfoHash.Item("is_patch")) Then
            Call objBtnControl.Visible("btnApprovePackage", "N")
            Call objBtnControl.Visible("btnMakeRelease", "Y")
            Call objBtnControl.Visible("btnMakeUnrelease", "Y")
            If NOT canShowControlInProject("ReleasePatch") Then
                Call objBtnControl.Active("btnMakeRelease", "N")
            End If

        Else
            Call objBtnControl.Visible("btnApprovePackage", "N")
            Call objBtnControl.Visible("btnMakeRelease", "N")
        End If

        Call objBtnControl.Visible("btnMoveWIPToRelease", "Y")
        Call objBtnControl.Active ("btnMoveWIPToRelease", "Y")

        Call objBtnControl.Visible("btnAddDaemonInstTestBuildPackage", "Y")
        Call objBtnControl.Active ("btnAddDaemonInstTestBuildPackage", "Y")

        If pkgInfoHash.Item("hasTestInstr") <> "" Then
            Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
            Call objBtnControl.Visible("btnDelDaemonInstTestPackage", "Y")
            Call objBtnControl.Active("btnDelDaemonInstTestPackage", "Y")
        End If

        Call objBtnControl.Visible("btnDestroyWip", "Y")
        If ((objAccessControl.UserId = pkgInfoHash.Item("creator_id")) OR (canActionControlInProject("DestroyPackageFromRelease"))) Then
            Call objBtnControl.Active ("btnDestroyWip", "Y")
        End If

        If pkgInfoHash.Item("is_wip")  Then
            Call objBtnControl.Active ("btnRemovePackage", "N")
            Call objBtnControl.Visible("btnRemovePackage", "N")
        End If

        ' lock patch or package.
        Call objBtnControl.Visible("btnLockPackage", "Y")
        Call objBtnControl.Active( "btnLockPackage", "Y")

    End If

    '------------------------------------------------
    '   Various other tweaks
    '
    If IsNull(pkgInfoHash.Item("is_obsolete")) Then
        Call objBtnControl.Visible("btnObsoletePatch", "Y")
    Else
        Call objBtnControl.Visible("btnUnobsoletePatch", "Y")
    End If

    If NOT(parRtag_id > 0) Then
        ' Not shown in the context of a Release
        ' Determine if the package can be destroyed

        If canShowControlInProject("DestroyPackage") Then
           Call objBtnControl.Visible("btnRecycleBin", "Y")
        ElseIf (objAccessControl.UserId = pkgInfoHash.Item("creator_id")) OR(objAccessControl.UserId = pkgInfoHash.Item("owner_id")) Then
            'If aVersions(rsVB.FieldIndex("inuse"), i) = 0 Then
                'If aVersions(rsVB.FieldIndex("age") , i) < 1000 Then
                    If pkgInfoHash.Item("dlocked") <> "Y" Then
                        'If pkgInfoHash.Item("dlocked") <> "A" Then
                            Call objBtnControl.Active("btnRecycleBin", "Y")
                        'End If
                    End If
                'End If
            'End If
        End If

    End If

    '--- Access Control Action Relationships ---

    ' DEVI-45275 - Merges now occur via the Pending tab. Merge candidates are marked with a(planned) operation
    ' of "A" for add, or "S" for subtract. If the package version is one of these(within the context of the
    ' release of coarse), manipulate the MakeRelease button(of which there are now 3 types) accordingly.
    If (pkgInfoHash.Item("planned_operation") = "A" OR pkgInfoHash.Item("planned_operation") = "S") Then

        ' always enable the reject button for pending merge operations
        Call objBtnControl.Visible("btnRejectPackage", "Y")

        ' disable the other two types of MakeRelease button
        Call objBtnControl.Visible("btnApprovePackage", "N")
        Call objBtnControl.Visible("btnMakeRelease", "N")

        ' make the approve merge button variant visible
        Call objBtnControl.Visible("btnApproveMerge", "Y")

        ' These conditions match those used in Diff.asp that control whether the Merge button is visible or not.
        ' Use them to enable or disable the approve merge button
        If releaseIsMergable(ReleaseMode) Then
            Call objBtnControl.Active("btnApproveMerge", "Y")
            Call objBtnControl.Active("btnRejectPackage", "Y")
        Else
            Call objBtnControl.Active("btnApproveMerge", "N")
            Call objBtnControl.Active("btnRejectPackage", "N")
        End If
    End If

    '   Have now set visible button based on the current state of the package
    '   No deactivate buttons based on the Release Mode and users permissions
    '       Users should be able to see what 'could' be done, even if they don't have permission
    '
    If (ReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE) OR (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) Then

        Dim canAddRemove, canRelease, canAlter
        canAddRemove = canActionControlInProject("AddDeletePackageInRestrictiveMode")
        canRelease   = canActionControlInProject("ApprovePackageReleaseForRestrictiveMode")
        canAlter     = canActionControlInProject("AlterReleaseContentsInRestrictiveMode")

        ' If in CCB mode then we must also be able to 'Alter Release Contents) 
        '
        If (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) AND (NOT canAlter) Then
            canAddRemove = False
            canRelease = False
        End If

        ' Disable Package Release Actions - unless allowed
        '   ApprovePackage ( for autobuild )
        '   MakeRelease ( for Manual Build )
        '   ApproveMerge
        '   
        If NOT (canRelease) Then
            Call objBtnControl.Active("btnApprovePackage", "N")
            Call objBtnControl.Active("btnMakeRelease", "N")
            Call objBtnControl.Active("btnApproveMerge", "N")
            Call objBtnControl.Active("btnRejectPackage", "N")
            
        End If

        ' Disable Release Modification Actions - Unless allowed
        '   Create New version of a package
        '   Remove a package
        '
        If NOT (canAddRemove ) Then
            Call objBtnControl.Active("btnNewVersion", "N")
            Call objBtnControl.Active("btnRemovePackage", "N")
        End If

    End If

    '---------------------------------------------------------------------------
    ' Unlock Package
    ' Note: Unlocking of a Package or Patch is intended for the administrators
    '
    If NOT (pkgInfoHash("is_released") AND canActionControlInProject("EditCriticalInfoForLockedPackage")) Then
        Call objBtnControl.Active ("btnUnLockPackage", "N")
        Call objBtnControl.Active( "btnLockPackage", "N")
    End If

    ' Unbuildable packages
    '   Spontaneously generated package - by Deployment Manager
    If (pkgInfoHash.Item("build_type") = "U") Then
        Call objBtnControl.Active("btnMakeRelease", "N")
        Call objBtnControl.Active("btnApprovePackage", "N")
        Call objBtnControl.Active("btnMakeRelease", "N")
        Call objBtnControl.Active("btnMakeUnrelease", "N")
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
        Call objBtnControl.Active("btnMakePending", "N")
        Call objBtnControl.Active("btnApproveMerge",  "N")
        Call objBtnControl.Active("btnUnLockPackage",  "N")
        Call objBtnControl.Active("btnLockPackage",  "N")
    End If

    ' Manual Packages
    If (pkgInfoHash.Item("build_type") = "M") Then
        ' Cannot be rippled or test built
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
        Call objBtnControl.Active("btnAddDaemonInstRipplePackage", "N")

        ' Cannot be Released, unless in the archive 
        If Not pkgInfoHash.Item("isInArchive") AND NOT canActionControlInProject("EditCriticalInfoForLockedPackage") Then
            Call objBtnControl.Active("btnMakeRelease", "N")
        End If

    End If

    '-- Disable if the Package is imported as a part of an SDK
    '   Or as part of a linked Release
    '   Or the user is not logged in
    '   Or user cannot edit in this project
    If (pkgInfoHash.Item("can_edit_in_project") <> "1") OR (NOT objAccessControl.UserLogedIn) OR (NOT canActionInProject() ) Then
        Call objBtnControl.Active("btnNewVersion", "N")
        Call objBtnControl.Active("btnDestroyWip" , "N")
        Call objBtnControl.Active("btnRemovePackage",  "N")
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage",  "N")
        Call objBtnControl.Active("btnMakePending",  "N")
        Call objBtnControl.Active("btnMakeRelease",  "N")
        Call objBtnControl.Active("btnApprovePackage",  "N")
        Call objBtnControl.Active("btnApproveMerge",  "N")
        Call objBtnControl.Active("btnRejectPackage",  "N")
        Call objBtnControl.Active("btnRejectAutobuildPackage",  "N")
        Call objBtnControl.Active("btnMakeUnrelease", "N")
        Call objBtnControl.Active("btnMoveToView",  "N")
        Call objBtnControl.Active("btnMoveWIPToRelease",  "N")
        Call objBtnControl.Active("btnDeprecation",  "N")
        Call objBtnControl.Active("btnUnDeprecation",  "N")
        Call objBtnControl.Active("btnAddDaemonInstRipplePackage", "N")
        Call objBtnControl.Active("btnDelDaemonInstRipplePackage", "N")
        Call objBtnControl.Active("btnDelDaemonInstTestPackage", "N")
        Call objBtnControl.Active ("btnUnLockPackage", "N")
        Call objBtnControl.Active ("btnLockPackage", "N")
    End If

    If (NOT objAccessControl.UserLogedIn) OR (NOT canActionInProject() ) Then
        Call objBtnControl.Active("btnReversionPackage", "N")
    End If

    If (pkgInfoHash.Item("base_view_id") = "") Then
        Call objBtnControl.Active("btnMoveToView",  "N")
    End IF

    '--- Other Access Control Action Relationships ---
    If (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE)  Then Call objBtnControl.SetRelationship("btnMakeRelease", "ApprovePackageReleaseForRestrictiveMode")

    Call objBtnControl.SetRelationship("btnPendingIntegration", "ApproveForPendingIntegration")
    Call objBtnControl.SetRelationship("btnPendingTest", "ApproveForPendingTest")
    Call objBtnControl.SetRelationship("btnPendingDeployment", "ApproveForPendingDeployment")
    Call objBtnControl.SetRelationship("btnRejectProduct", "RejectProduct")
    Call objBtnControl.SetRelationship("btnPendingIntegrateAndDeploy", "ApprovePendingIntegrateAndDeploy")

    '---------------------------------------------------------------------------
    ' -- Render Buttons
    Call objBtnControl.Render (aTabBtnsDef, objAccessControl)
End Sub
%>