Subversion Repositories DevTools

Rev

Rev 6031 | Rev 6185 | 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", "btnMoveToView", "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", "btnMoveToView", "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")
                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")
                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", "N")
    Call objBtnControl.Active ("btnRejectAutobuildPackage", "N")
    Call objBtnControl.Visible("btnRejectAutobuildPackage", "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 ("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")

    If (pkgInfoHash.Item("can_edit_in_project") = "1") Then

        '-- Change button setting on conditions ---
        If (pkgInfoHash.Item("build_type") <> "M") Then
            ' For automatic build
            Call objBtnControl.Visible("btnMakePending", "Y")

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

            Call objBtnControl.Visible("btnMakeUnrelease", "N")
            Call objBtnControl.Visible("btnRejectPackage", "Y")
        Else
            ' For Manual Build
            ' Note: All this manual build stuff looks overly complicated, but ....
            '       Packages in an OPEN Release go straight to Released
            If (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) Then
                If Not canShowControlInProject("ApproveForManualBuild") Then
                    Call objBtnControl.Visible("btnMakeRelease", "N")
                Else
                    Call objBtnControl.Visible("btnMakeRelease", "Y")
                    Call objBtnControl.Visible("btnMakeUnrelease", "N")
                End If
            End If

            If (pkgInfoHash.Item("is_patch")) <> "" Then
                If canShowControlInProject("ReleasePatch") Then
                    Call objBtnControl.Visible("btnMakeRelease", "Y")
                Else
                    Call objBtnControl.Visible("btnMakeRelease", "N")
                End If
            End If

            If (ReleaseMode = enumDB_RELEASE_IN_RESTRICTIVE_MODE) OR (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) Then

                Call objBtnControl.Visible("btnMakePending", "Y")

                If ((pkgInfoHash.Item("dlocked") = "N") OR(pkgInfoHash.Item("dlocked") = "R")) _
                   AND(IsNull(pkgInfoHash.Item("is_patch"))) Then
                   Call objBtnControl.Active ("btnMakeRelease", "N")
                   Call objBtnControl.Visible("btnMakeRelease", "N")
                End If

                Call objBtnControl.Visible("btnRejectPackage", "Y")

                If (ReleaseMode = enumDB_RELEASE_IN_CCB_MODE) OR(NOT canShowControlInProject("AlterReleaseContentsInRestrictiveMode")) Then
                   Call objBtnControl.Visible("btnMakeUnrelease", "N")
                   Call objBtnControl.Visible("btnRemovePackage", "N")
                End If
            End If

            If (ReleaseMode = enumDB_RELEASE_IN_OPEN_MODE) Then
                Call objBtnControl.Active("btnMakeRelease", "Y")
                Call objBtnControl.Visible("btnMakeRelease", "Y")
            End If
        End If  ' Manual Build
    End If ' Can edit package

    '-- Change button setting on conditions ---
    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")


    ElseIf pkgInfoHash.Item("dlocked") = "P" Then
        ' In Pending
        Call objBtnControl.Visible("btnMakePending", "N")
        Call ActivateButtonAccordingToReleaseModeAndPermissions("btnApprovePackage", "ApproveForAutoBuild")
        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.Visible("btnMakeUnrelease", "Y")
        If pkgInfoHash.Item("can_unofficial") = "true" OR canActionControlInProject("EditCriticalInfoForLockedPackage") Then
          Call objBtnControl.Active("btnMakeUnrelease", "Y")
        Else
          Call objBtnControl.Active("btnMakeUnrelease", "N")
        End If

        '--- Allow failed auto-builds to be rejected back to WIP, conditions allowing.
        If pkgInfoHash.Item("build_type") = "A" AND parRtag_id > 0 Then
            If isInDoNotRippleTable(parRtag_id, pkgInfoHash.Item("pv_id")) = TRUE Then
                Call objBtnControl.Visible("btnRejectAutobuildPackage", "Y")
                Call ActivateButtonAccordingToReleaseModeAndPermissions("btnRejectAutobuildPackage", "RejectPackageFromPending")
            End If
        End If

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

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

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

        Call objBtnControl.Visible("btnMoveWIPToRelease", "Y")
        Call objBtnControl.Visible("btnAddDaemonInstTestBuildPackage", "Y")
        If (pkgInfoHash.Item("can_edit_in_project") = "1") Then
            Call objBtnControl.Active ("btnAddDaemonInstTestBuildPackage", "Y")
            Call objBtnControl.Active ("btnMoveWIPToRelease", "Y")
        End If

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

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

    End If

    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 reversioned or destroyed

        Call objBtnControl.Visible("btnRecycleBin", "Y")
        Call objBtnControl.Visible("btnReversionPackage" , "Y")
        Call objBtnControl.ReadOnly("btnReversionPackage" , "Y")

        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

        ' Only if Unlocked or Rejected
        If pkgInfoHash.Item("dlocked") = "N" OR pkgInfoHash.Item("dlocked") = "R" Then 
            Call objBtnControl.Active("btnReversionPackage" , "Y")
        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

    If (pkgInfoHash.Item("build_type") = "U") Then
        Call objBtnControl.Active("btnMakeRelease", "N")
        Call objBtnControl.Active("btnApprovePackage", "N")
        Call objBtnControl.Active("btnMakeUnrelease", "N")
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
        Call objBtnControl.Active("btnMakePending", "N")
        Call objBtnControl.Active("btnApproveMerge",  "N")
    End If

    If (pkgInfoHash.Item("build_type") = "M") Then
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
    End If

    '--- Disable if the user is not logged in
    If (NOT objAccessControl.UserLogedIn) Then
        Call objBtnControl.Active("btnRemovePackage", "N")
        Call objBtnControl.Active("btnMakeRelease", "N")
        Call objBtnControl.Active("btnMoveToView", "N")
        Call objBtnControl.Active("btnReversionPackage", "N")
        Call objBtnControl.Active("btnMoveWIPToRelease", "N")
        Call objBtnControl.Active("btnAddDaemonInstTestBuildPackage", "N")
        Call objBtnControl.Active("btnMakeUnrelease", "N")
        Call objBtnControl.Active("btnMakePending", "N")
        Call objBtnControl.Active("btnNewVersion", "N")
        Call objBtnControl.Active("btnRecycleBin", "N")
    End If

    '-- Disable if the Package is imported as a part of an SDK
    '   Or as part of a linked Release
    If (pkgInfoHash.Item("can_edit_in_project") <> "1") 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("btnApprovePackage",  "N")
        Call objBtnControl.Active("btnApproveMerge",  "N")
        Call objBtnControl.Active("btnMakeRelease",  "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")
    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")

    '---------------------------------------------------------------------------
    ' Unlock Package
    ' Note: Unlocking of a Package or Patch is intended for the administrators

    Call objBtnControl.Visible("btnUnLockPackage", "N")
    Call objBtnControl.Visible("btnLockPackage", "N")
    Call objBtnControl.Active("btnLockPackage", "N")
    Call objBtnControl.Active("btnUnLockPackage", "N")

    If (pkgInfoHash.Item("can_edit_in_project") = "1") Then
        Dim bucan_unlock
        bucan_unlock = pkgInfoHash("is_released") AND canActionControlInProject("EditCriticalInfoForLockedPackage")

        If bucan_unlock  Then
            If (pkgInfoHash.Item("dlocked") = "Y") Then
                ' Unlock patch or package.
                Call objBtnControl.Visible("btnUnLockPackage", "Y")
                Call objBtnControl.Active("btnUnLockPackage", "Y")
            ElseIf (pkgInfoHash.Item("dlocked") = "N") Then
                ' lock patch or package.
                Call objBtnControl.Visible("btnLockPackage", "Y")
                Call objBtnControl.Active("btnLockPackage", "Y")
            End If
        End if
    Else
        Call objBtnControl.Visible("btnUnLockPackage", "Y")
    End if

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