Subversion Repositories DevTools

Rev

Rev 5955 | Blame | Compare with Previous | Last modification | View Log | RSS feed

<%@LANGUAGE="VBSCRIPT"%>
<%
'=====================================================
'|                                                   |
'|                      REPORT                       |
'|                    SBOM Issues                    |
'=====================================================
%>
<%
Option explicit
' Good idea to set when using redirect
Response.Expires = 0   ' always load the page, dont store

'To enable the script timeout to 5 mins
Server.ScriptTimeout=300
%>
<!--#include file="common/config.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/formating.asp"-->
<!--#include file="common/qstr.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<%
'------------ ACCESS CONTROL ------------------
%>
<!--#include file="_access_control_general.asp"-->
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="class/classaspJSON.vbs"></SCRIPT>
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/base64encode.vbs"></SCRIPT> 
<SCRIPT LANGUAGE="VBScript" RUNAT=SERVER SRC="common/jiraIssues.vbs"></SCRIPT> 
<%
'------------ Variable Definition -------------
Dim rsQry
Dim parPv_id
Dim objSbomDetailsA, objSbomDetailsB
Dim objRelCollectorA, objRelCollectorB
Dim parSbomA, parSbomB
Dim retValCQIssues
Dim retValJIRAIssues
Dim topLevelId
Dim DEVIiss
Dim pvIdList
Dim objIssueDetails
Dim cqIssues
Dim jiraIssues
Dim rsBomPackages
Dim rsPkgDeps
Dim multiPackagesEnabled

'------------ Constants Declaration -----------
'------------ Variable Init -------------------
parSbomA = Request("sbomA")
parSbomB = Request("sbomB")
Set objRelCollectorA = CreateObject("Scripting.Dictionary")
Set objRelCollectorB = CreateObject("Scripting.Dictionary")
Set objSbomDetailsA = CreateObject("Scripting.Dictionary")
Set objSbomDetailsB = CreateObject("Scripting.Dictionary")
Set objIssueDetails = CreateObject("Scripting.Dictionary")
Set jiraIssues = CreateObject( "Scripting.Dictionary" )
Set rsBomPackages = Server.CreateObject("ADODB.Recordset")
Set rsPkgDeps = Server.CreateObject("ADODB.Recordset")
'----------------------------------------------
%>
<%
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetFormDetails ( nSourceSBOM, ByRef tempObjRelCollector )
   Dim rsQry, query

   ' Exit if nSourceRtagId is empty
   If nSourceSBOM = "" Then Exit Sub

   OraDatabase.Parameters.Add "SBOM",    nSourceSBOM,      ORAPARM_INPUT, ORATYPE_NUMBER

   query = _
   " SELECT pr.PROJ_NAME ||' &gt; '|| br.BRANCH_NAME ||' &gt; '|| b.BOM_VERSION ||'.'||b.BOM_LIFECYCLE  AS LOCATION, "&_
   "        pr.PROJ_ID, b.BOM_ID, br.BRANCH_ID, b.IS_READONLY, b.RTAG_ID_FK"&_
   "  FROM BRANCHES br,"&_
   "        BOMS b,"&_
   "         DM_PROJECTS pr"&_
   " WHERE br.PROJ_ID = pr.PROJ_ID"&_
   "    AND b.BRANCH_ID = br.BRANCH_ID"&_
   "   AND b.BOM_ID = :SBOM"

   Set rsQry = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "SBOM"

   If rsQry.RecordCount > 0 Then
      tempObjRelCollector ("location") = rsQry("location")
      tempObjRelCollector ("official") = rsQry("IS_READONLY")
      tempObjRelCollector ("proj_id") = rsQry("proj_id")
      tempObjRelCollector ("branch_id") = rsQry("branch_id")
      tempObjRelCollector ("bom_id") = rsQry("bom_id")
      tempObjRelCollector ("rtag_id_fk") = rsQry("rtag_id_fk")
   Else
      Err.Raise 8, "Sub GetFormDetails in "& SCRIPT_NAME, "Empty record set returned. nSourceSBOM="& nSourceSBOM
   End If

   If tempObjRelCollector ("location") = "" Then
      tempObjRelCollector.Item ("location") = "N"
   End If

   rsQry.Close
   Set rsQry = Nothing

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetPackageDetailsForIssue ( nIss_id, sPvIdList, tempIssDetails )
   Dim query

   query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_
           " FROM package_versions pv, packages pkg, cq_issues iss "&_
           " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_id = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")"

   OraDatabase.Parameters.Add "ISS_ID", nIss_id, ORAPARM_INPUT, ORATYPE_NUMBER

   Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "ISS_ID"

   If tempIssDetails.RecordCount = 0 Then
      Err.Raise 8, "Sub GetPackageDetailsForIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_id="& nIss_id
   End If

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetPackageDetailsForJIRAIssue ( nIss_Key, sPvIdList, tempIssDetails )
   Dim query

   query = " SELECT DISTINCT pkg.pkg_name, pv.pkg_version, pv.v_ext, pkg.pkg_id, pv.pv_id "&_
           " FROM package_versions pv, packages pkg, jira_issues iss "&_
           " WHERE pv.pkg_id = pkg.pkg_id AND pv.pv_id = iss.pv_id AND iss.iss_key = :ISS_ID AND pv.pv_id IN ("& sPvIdList &")"

   OraDatabase.Parameters.Add "ISS_ID", nIss_Key, ORAPARM_INPUT, ORATYPE_NUMBER

   Set tempIssDetails = OraDatabase.DbCreateDynaset( query, ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "ISS_ID"

   If tempIssDetails.RecordCount = 0 Then
      Err.Raise 8, "Sub GetPackageDetailsForJIRAIssue in "& SCRIPT_NAME, "Empty record set returned. nIss_Key="& nIss_Key
   End If

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Function GetIssues( sPvIdList, oRsCqIssTemp )
   Dim sqlStrTemp, oRsTemp

   Set oRsTemp = OraDatabase.DbCreateDynaset("SELECT iss_db, iss_id FROM CQ_ISSUES WHERE pv_id IN ("& sPvIdList &")", cint(0))

   If oRsTemp.RecordCount <> 0 Then

      DEVIiss = "-1"

      While ((NOT oRsTemp.BOF) AND (NOT oRsTemp.EOF))

         If CInt(oRsTemp("iss_db")) = CInt(enumCLEARQUEST_DEVI_ID) Then
            DEVIiss = DEVIiss &","& oRsTemp("iss_id")
         End If

         oRsTemp.MoveNext
      WEnd

      sqlStrTemp = GetQuery ("cq_issues.sql")
      sqlStrTemp = Replace( sqlStrTemp, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID)
      sqlStrTemp = Replace( sqlStrTemp, "/*DEVIiss*/", DEVIiss)

      On Error Resume Next
      Set oRsCqIssTemp = OraDatabase.DbCreateDynaset( sqlStrTemp, cint(0))
      GetIssues = Err.Number
   Else

    GetIssues = -1

   End If

End Function
'----------------------------------------------------------------------------------------------------------------------------------------
Function Get_JIRA_Issues ( sPvIdList, oRsJiraIssTemp )

    On Error Resume Next
    Call getJiraIssueDetails(sPvIdList, oRsJiraIssTemp, 1)
    If Err.Number <> 0 Then
        Get_JIRA_Issues = Err.Number
    ElseIf oRsJiraIssTemp.Count = 0 Then
        Get_JIRA_Issues = -1
    Else
        Get_JIRA_Issues = 0
    End If

End Function
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetPackageDependencies ( nPv_id_a, nPv_id_b, oRsTemp )

   OraDatabase.Parameters.Add "PV_ID_A", nPv_id_a, ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "PV_ID_B", nPv_id_b, ORAPARM_INPUT, ORATYPE_NUMBER

   Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("UniquePackageDependencies.sql"), ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "PV_ID_A"
   OraDatabase.Parameters.Remove "PV_ID_B"

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetAllBomContents ( nSbom_id, oRsTemp )

   OraDatabase.Parameters.Add "SBOM_ID", nSbom_id,      ORAPARM_INPUT, ORATYPE_NUMBER

   Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackagesAndDeps.sql"), ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "SBOM_ID"

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------
Sub GetBomPackages ( nSbomA, nSbomB, oRsTemp )

   OraDatabase.Parameters.Add "SBOM_A", nSbomA,      ORAPARM_INPUT, ORATYPE_NUMBER
   OraDatabase.Parameters.Add "SBOM_B", nSbomB,      ORAPARM_INPUT, ORATYPE_NUMBER

   Set oRsTemp = OraDatabase.DbCreateDynaset( GetQuery ("BomPackageDiff.sql"), ORADYN_DEFAULT )

   OraDatabase.Parameters.Remove "SBOM_A"
   OraDatabase.Parameters.Remove "SBOM_B"

End Sub
'----------------------------------------------------------------------------------------------------------------------------------------



%>
<%
'---------------------- Run Before Page ---------------------------

' Get release details
Call GetFormDetails ( parSbomA, objRelCollectorA )
Call GetFormDetails ( parSbomB, objRelCollectorB )

multiPackagesEnabled = FALSE

If parSbomA <> "" AND parSbomB <> "" Then

   If Request("form_btn_comp") = "Get Issues" Then
      Call OpenInWindow ( SCRIPT_NAME &"?sbomA="& parSbomA &"&sbomB="& parSbomB )
   End If

   Call   GetBomDetails   (parSbomA, objSbomDetailsA)
   Call   GetBomDetails   (parSbomB, objSbomDetailsB)

   objSbomDetailsA("bom_full_version") = objSbomDetailsA("bom_name")&"   "&   objSbomDetailsA("bom_version") &"."& objSbomDetailsA("bom_lifecycle")
   objSbomDetailsB("bom_full_version") = objSbomDetailsB("bom_name")&"   "&   objSbomDetailsB("bom_version") &"."& objSbomDetailsB("bom_lifecycle")

   ' Check for the submission of the "multiplepackageS" checkbox that enables multiple packages to be identified and rendered on the page
   ' for each issue, if applicable.
   If Request("multipackages") = "TRUE" Then
      multiPackagesEnabled = TRUE
   Else
      multiPackagesEnabled = FALSE
   End If

Else
   objSbomDetailsA("bom_full_version") = "Software Bill of Materials (SBOM)"
End If

'------------------------------------------------------------------
%>
<html>
   <head>
      <title>Deployment Manager - SBOM Issues Report</title>
      <link rel="shortcut icon" href="<%=FavIcon%>"/>
      <meta http-equiv="Pragma" content="no-cache">
      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
      <link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css">
      <link href="scripts/deployment_manager.css?ver=<%=VixVerNum%>" rel="stylesheet" type="text/css">
      <script language="JavaScript" src="scripts/common.js?ver=<%=VixVerNum%>"></script>
      <script language="JavaScript" src="scripts/remote_scripting.js?ver=<%=VixVerNum%>"></script>
      <script language="JavaScript" type="text/javascript">
         <!--

         function RequestSBOMCombo( paramString, rowId )
         {
            var requestURL = 'RequestSBOMCombo.asp';

            // Set ajax divname
            ajaxdivname = rowId;

            //Append the name to search for to the requestURL
            var url = requestURL + paramString;

            rowId.options[0] = new Option('Loading...','');
            rowId.selectedIndex = 0;

            //Create the xmlHttp object to use in the request
            //stateChangeHandler will fire when the state has changed, i.e. data is received back
            xmlHttp = GetXmlHttpObject(stateComboChangeHandler);

            //Send the xmlHttp get to the specified url
            //This is non-blocking (asynchronous)
            xmlHttp_Get(xmlHttp, url);
         }

         function RequestReleaseCombos( paramString, rowIdA, rowIdB )
         {
            var requestURL = 'RequestReleaseCombo.asp';
            // First release combo box.

            // Set ajax divname
            ajaxdivname = rowIdA;

            //Append the name to search for to the requestURL
            var url = requestURL + paramString;

            rowIdA.options[0] = new Option('Loading...','');
            rowIdA.selectedIndex = 0;

            //Create the xmlHttp object to use in the request
            //stateChangeHandler will fire when the state has changed, i.e. data is received back
            xmlHttp = GetXmlHttpObject(stateComboChangeHandler);

            //Send the xmlHttp get to the specified url
            //This is blocking (synchronous)
            xmlHttp_Get_Synch(xmlHttp, url);


            // Second release combo box.

            ajaxdivname = rowIdB;

            rowIdB.options[0] = new Option('Loading...','');
            rowIdB.selectedIndex = 0;

            //Create the xmlHttp object to use in the request
            //stateChangeHandler will fire when the state has changed, i.e. data is received back
            xmlHttp = GetXmlHttpObject(stateComboChangeHandler);

            //Send the xmlHttp get to the specified url
            //This is blocking (synchronous)
            xmlHttp_Get_Synch(xmlHttp, url);
         }

         function openSbom( elementId )
         {
            var url = 'Bom_Home.asp?bom_id=';
            var bom_id = document.getElementById(elementId).value;

            window.open( url + bom_id );
         }

         function setLeftOffset( elementId )
         {
            if ( document.getElementById(elementId) )
            {
               var offset = (getWindowWidth() / 2) - (document.getElementById(elementId).clientWidth / 2);
               document.getElementById(elementId).style.left = offset;
            }
         }

         function removePrompt ( elementId )
         {
            var selectElement = document.getElementById(elementId);

            if ( /^\d+$/.test(selectElement.options[0].value) == false)
            {
               selectElement.options[0] = null;
            }
         }

         function clearSelectBox ( elementId )
         {
            var selectElement = document.getElementById(elementId);

            selectElement.options.length = 0;
         }
         //-->
      </script>
   </head>
   <body onresize="setLeftOffset('loader');">
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
<!-- HEADER ++++++++++++++++ -->
<!--#include file="_header.asp"-->
<!-- +++++++++++++++++++++++ -->
<!-- BODY ---->
      <div align="center" class="report_header">

      <%=objSbomDetailsA("bom_full_version")%> Issues Report

      </div>
      <form name="FormName" method="post" action="<%=SCRIPT_NAME%>">
         <table width="100%"  border="0" cellspacing="10" cellpadding="0">
            <tr>
               <td align="left" class="body_col" colspan="2">Select SBOM To View</td>
            </tr>
            <tr>
               <td align="left">
                  <select name="proj" id="proj" class="form_item"
                     onchange="RequestReleaseCombos('?proj_id='+ this.value, FormName.rtagA, FormName.rtagB);removePrompt(this.id);clearSelectBox('sbomA');clearSelectBox('sbomB');">
                     <option value="">-- Select Project --</option>
                     <%
                     OraDatabase.Parameters.Add "PROJ_ID",    objRelCollectorA("proj_id"),   ORAPARM_INPUT, ORATYPE_NUMBER
                     Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ProjectsCombo.sql"), cint(0))
                     OraDatabase.Parameters.Remove "PROJ_ID"

                     While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                        <option value="<%=rsQry("proj_id")%>" <%=rsQry("selected")%>><%=rsQry("proj_name")%></option>
                        <%rsQry.MoveNext
                     WEnd

                     rsQry.Close
                     Set rsQry = Nothing
                     %>
                  </select>
               </td>
               <td align="left" class="body_col">Select SBOM To Compare To</td>
            </tr>
            <tr>
               <td align="left" width="25%">
                  <select name="rtagA" id="rtagA" class="form_item" onchange="RequestSBOMCombo('?branch_id='+ this.value, FormName.sbomA);removePrompt(this.id);">
      <!--           <option value="">-- Select Branch --</option>           -->
                     <%
                     OraDatabase.Parameters.Add "PROJ_ID",    objRelCollectorA("proj_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
                     OraDatabase.Parameters.Add "BRANCH_ID",    objRelCollectorA("branch_id"),   ORAPARM_INPUT, ORATYPE_NUMBER

                     Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))

                     OraDatabase.Parameters.Remove "PROJ_ID"
                     OraDatabase.Parameters.Remove "BRANCH_ID"

                     While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                        <option value="<%=rsQry("branch_id")%>" <%=rsQry("selected")%>><%=rsQry("branch_name")%></option>
                        <%rsQry.MoveNext
                     WEnd

                     rsQry.Close
                     Set rsQry = Nothing
                     %>
                  </select>
               </td>
               <td align="left">
                  <select name="rtagB" id="rtagB" class="form_item" onchange="RequestSBOMCombo('?branch_id='+ this.value, FormName.sbomB);removePrompt(this.id);">
      <!--           <option value="">-- Select Branch --</option>           -->
                     <%
                     OraDatabase.Parameters.Add "PROJ_ID",    objRelCollectorB("proj_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
                     OraDatabase.Parameters.Add "BRANCH_ID",    objRelCollectorB("branch_id"),   ORAPARM_INPUT, ORATYPE_NUMBER

                     Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("ReleasesCombo.sql"), cint(0))

                     OraDatabase.Parameters.Remove "PROJ_ID"
                     OraDatabase.Parameters.Remove "BRANCH_ID"

                     While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                        <option value="<%=rsQry("branch_id")%>" <%=rsQry("selected")%>><%=rsQry("branch_name")%></option>
                        <%rsQry.MoveNext
                     WEnd

                     rsQry.Close
                     Set rsQry = Nothing
                     %>
                  </select>
               </td>
            </tr>
            <tr>
               <td align="left" width="25%">
                  <select name="sbomA" id="sbomA" class="form_item">
                     <%
                     OraDatabase.Parameters.Add "BOM_ID",    objRelCollectorA("bom_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
                     OraDatabase.Parameters.Add "BRANCH_ID",    objRelCollectorA("branch_id"),   ORAPARM_INPUT, ORATYPE_NUMBER

                     Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("SBOMCombo.sql"), cint(0))

                     OraDatabase.Parameters.Remove "BOM_ID"
                     OraDatabase.Parameters.Remove "BRANCH_ID"

                     While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                        <option value="<%=rsQry("bom_id")%>" <%=rsQry("selected")%>><%=rsQry("version")%></option>
                        <%rsQry.MoveNext
                     WEnd

                     rsQry.Close
                     Set rsQry = Nothing
                     %>
                  </select>
               </td>
               <td align="left">
                  <select name="sbomB" id="sbomB" class="form_item">
                     <%
                     OraDatabase.Parameters.Add "BOM_ID",    objRelCollectorB("bom_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
                     OraDatabase.Parameters.Add "BRANCH_ID",    objRelCollectorB("branch_id"),   ORAPARM_INPUT, ORATYPE_NUMBER

                     Set rsQry = OraDatabase.DbCreateDynaset( GetQuery("SBOMCombo.sql"), cint(0))

                     OraDatabase.Parameters.Remove "BOM_ID"
                     OraDatabase.Parameters.Remove "BRANCH_ID"

                     While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))%>
                        <option value="<%=rsQry("bom_id")%>" <%=rsQry("selected")%>><%=rsQry("version")%></option>
                        <%rsQry.MoveNext
                     WEnd

                     rsQry.Close
                     Set rsQry = Nothing
                     %>
                  </select>
               </td>
            </tr>
            <%If parSbomA <> "" OR parSbomB <> "" Then%>
               <tr>
                  <td align="left" width="25%">
                     <%If parSbomA <> "" Then%>
                     <a href="javascript:;" onclick="openSbom('sbomA')" class="body_txt_drk">Go To SBOM A &raquo;</a>
                     <%End If%>
                  </td>
                  <td align="left">
                     <%If parSbomB <> "" Then%>
                     <a href="javascript:;" onclick="openSbom('sbomB')" class="body_txt_drk">Go To SBOM B &raquo;</a>
                     <%End If%>
                  </td>
               </tr>
            <%End If%>
            <tr>
               <td colspan="2">
                  <input class="form_btn_comp" name="form_btn_comp" type="submit" style="margin-right: 5px;" value="Get Issues" name="btn"/>
               </td>
            </tr>
         </table>
      </form>

      <!-- FORM holding a checkbox that allows user to modify the package vs issue renderering from one-per-issue to many-per-issue -->
      <form name="FormNameMultiplePackages" method="post" action='<%=SCRIPT_NAME & "?sbomA=" & parSbomA & "&sbomB=" & parSbomB%>'>
         <%If parSbomA <> "" OR parSbomB <> "" Then%>
            <table width="50%"  border="0" cellspacing="10" cellpadding="0">
               <tr>
                  <%If multiPackagesEnabled Then%>
                     <td width="1%" ><input name="multipackages" value="TRUE" type="checkbox" onclick="submit(); return false;" checked></td>
                  <%Else%>
                     <td width="1%" ><input name="multipackages" value="TRUE" type="checkbox" onclick="submit(); return false;"></td>
                  <%End If%>
                  <td align="left" class="body_col">Show multiple package/issue associations.</td>
               </tr>
            </table>
         <%End If%>
      </form>

      <%
      If parSbomA = "" OR parSbomB = "" Then%>
         <div align="center" class="report_msg">Select both SBOMs to compare.</div>
      <%ElseIf parSbomA = parSbomB Then%>
         <div align="center" class="report_msg">Select two different SBOMs to compare.</div>
      <%Else%>
         <img src="images/ajax-loader.gif" width="100px" height="100px" id="loader" name="loader" style="position: absolute; z-index: 100; display: block; top: 110px;" onload="setLeftOffset(this.id);">
         <div align="center" class="report_msg" id="report_heading">Issues found in BOM <%=objSbomDetailsA("bom_version") &"."& objSbomDetailsA("bom_lifecycle")%> but not in SBOM <%=objSbomDetailsB("bom_version") &"."& objSbomDetailsB("bom_lifecycle")%></div>
         <br>
         <%
         Dim issueCounter

         issueCounter = 0

         Call GetBomPackages( parSbomA, parSbomB, rsBomPackages )

         If rsBomPackages.RecordCount > 0 Then

            While (NOT rsBomPackages.BOF) AND (NOT rsBomPackages.EOF)

               pvIdList = rsBomPackages("pv_id")

               Call GetPackageDependencies( rsBomPackages("pv_id"), rsBomPackages("prev_pv_id"), rsPkgDeps )

               While (NOT rsPkgDeps.BOF) AND (NOT rsPkgDeps.EOF)

                  pvIdList = pvIdList & "," & rsPkgDeps("dpv_id")

                  rsPkgDeps.MoveNext
               WEnd

               ' Acquire all of the issues for the package now so we can make a decision on whether to display the field set + legend + issue content
               ' for this BOM package. The "get issues" functions will return -1 if no records are found, and 0 if no error and records present.
               retValCQIssues = GetIssues( pvIdList, cqIssues )

               retValJIRAIssues = Get_JIRA_Issues( pvIdList, jiraIssues )

               If retValCQIssues = 0 OR retValJIRAIssues = 0 Then%>
                  <fieldset>
                     <legend style="padding: 0px 4px 3px 4px;" >
                        <a href="javascript:;" onclick="MM_openBrWindow('../release_manager/_wform_versions_history_release_notes.asp?OLDpv_id=<%=rsBomPackages("pv_id")%>&pkg_id=<%=rsBomPackages("pkg_id")%>&FLpkg_version=*<%=rsBomPackages("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=rsBomPackages("pv_id")%>&#ANC_<%=rsBomPackages("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 )  );" class="report_sub_header"><%=rsBomPackages("pkg_name")%>&nbsp;<%=rsBomPackages("pkg_version")%></a>
                     </legend>

                     <%If retValCQIssues = 0 Then

                        Dim firstPackageRow

                        issueCounter = issueCounter + 1
                        %>
                        <table width="100%" border="0" cellspacing="2" cellpadding="3">
                           <tr>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="70px" class="form_field">Issue Id</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="65%" class="form_field">CLEARQUEST Issue Title</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="80px" class="form_field">Status</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap class="form_field">Package(s)</td>
                           </tr>

                           <%
                           While (NOT cqIssues.BOF) AND (NOT cqIssues.EOF)

                              Call GetPackageDetailsForIssue( cqIssues("iss_id"), pvIdList, objIssueDetails )

                              firstPackageRow = TRUE
                              Do While (NOT objIssueDetails.BOF) AND (NOT objIssueDetails.EOF)%>
                                 <tr>
                                    <%If firstPackageRow Then%>
                                       <%firstPackageRow = FALSE%>

                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=cqIssues("iss_num")%></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=cqIssues("summary")%></td>
                                       <td nowrap background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=cqIssues("status")%></td>
                                    <%Else%>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                    <%End If%>

                                    <td nowrap background="images/bg_form_lightgray.gif" valign="top" class="form_item">
                                       <a href="javascript:;" onclick="MM_openBrWindow('../release_manager/_wform_versions_history_release_notes.asp?OLDpv_id=<%=objIssueDetails("pv_id")%>&pkg_id=<%=objIssueDetails("pkg_id")%>&FLpkg_version=*<%=objIssueDetails("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=objIssueDetails("pv_id")%>&#ANC_<%=objIssueDetails("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 )  );" class="report_link">
                                          <%Response.Write(objIssueDetails("pkg_name") &" "& objIssueDetails("pkg_version"))%>
                                       </a>
                                    </td>
                                 </tr>
                                 <%
                                 objIssueDetails.MoveNext
                                 If multiPackagesEnabled = FALSE Then Exit Do
                              Loop
                              cqIssues.MoveNext
                           WEnd
                           %>
                        </table>
                     <%End If

                     If retValJIRAIssues = 0 Then

                        issueCounter = issueCounter + 1
                        %>
                        <table width="100%" border="0" cellspacing="2" cellpadding="3">
                           <tr>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="70px" class="form_field">Issue Id</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="55%" class="form_field">JIRA Issue Summary</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="10%" class="form_field">Issue&nbsp;Type&nbsp;</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap width="80px" class="form_field">Status</td>
                              <td background="images/bg_form_lightbluedark.gif" nowrap class="form_field">Package(s)</td>
                           </tr>

                           <%
                           Dim key, el
                           For Each key In jiraIssues
                               Set el = jiraIssues.item(key)

                              Call GetPackageDetailsForJIRAIssue( key, pvIdList, objIssueDetails )

                              firstPackageRow = TRUE
                              Do While (NOT objIssueDetails.BOF) AND (NOT objIssueDetails.EOF)%>
                                 <tr>
                                    <%If firstPackageRow Then%>
                                       <%firstPackageRow = FALSE%>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=key%></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=el.item("summary")%></td>
                                       <td nowrap background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=el.item("issuetype")%></td>
                                       <td nowrap background="images/bg_form_lightgray.gif" valign="top" class="form_item"><%=el.item("status")%></td>
                                    <%Else%>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                       <td background="images/bg_form_lightgray.gif" valign="top" class="form_item"></td>
                                    <%End If%>

                                    <td nowrap background="images/bg_form_lightgray.gif" valign="top" class="form_item">
                                       <a href="javascript:;" onclick="MM_openBrWindow('../release_manager/_wform_versions_history_release_notes.asp?OLDpv_id=<%=objIssueDetails("pv_id")%>&pkg_id=<%=objIssueDetails("pkg_id")%>&FLpkg_version=*<%=objIssueDetails("v_ext")%>&FLuser_name=*&rfile=<%=SCRIPT_NAME%>&pv_id=<%=objIssueDetails("pv_id")%>&#ANC_<%=objIssueDetails("pv_id")%>','History','resizable=yes,width=850,height='+ ( screen.height - 100 )  );" class="report_link">
                                          <%Response.Write(objIssueDetails("pkg_name") &" "& objIssueDetails("pkg_version"))%>
                                       </a>
                                    </td>
                                 </tr>
                                 <%
                                 objIssueDetails.MoveNext
                                 If multiPackagesEnabled = FALSE Then Exit Do
                              Loop
                           Next
                           %>
                        </table>
                     <%End If%>
                  </fieldset>
                  <br>
               <%End If
               rsBomPackages.MoveNext
            WEnd
         End If

         If issueCounter = 0 Then
         %>
            <div align="center" class="report_sub_header">No issues found</div>
         <%
         End If
         %>
         <script>
         <!--
            document.getElementById("loader").style.display = "none";
         //-->
         </script>
         <%

         ' Clean up objects before quitting
         On Error Resume Next
         rsBomPackages.Close
         rsPkgDeps.Close
         cqIssues.Close
         jiraIssues.Close

         Set objRelCollectorA = Nothing
         Set objRelCollectorB = Nothing
         Set objSbomDetailsA = Nothing
         Set objSbomDetailsB = Nothing

         Set rsBomPackages = Nothing
         Set rsPkgDeps = Nothing
         Set cqIssues = Nothing
         Set jiraIssues = Nothing

      End If%>
<!-- FOOTER -->
<!--#include file="_footer.asp"-->
   </body>
</html>