Subversion Repositories DevTools

Rev

Rev 5964 | Rev 6080 | 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
          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
    End If


    '-- 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("btnDeprecation", "Y")
          Else
             Call objBtnControl.Visible("btnUnDeprecation", "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

    '--- 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
%>