Subversion Repositories DevTools

Rev

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

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

<%
'To enable the script timeout to 10 mins
Server.ScriptTimeout=1200
%>
<!--#include file="common/config.asp"-->
<!--#include file="common/globals.asp"-->
<!--#include file="common/formating.asp"-->
<!--#include file="common/common_subs.asp"-->
<!--#include file="common/common_dbedit.asp"-->
<!--#include file="common/_form_window_common.asp"-->
<!--#include file="common/_rtree_common.asp"-->
<%
' Set rfile parameter. This is a return page after Login
'Call objPMod.StoreParameter ( "rfile", "rtree.asp" )
'objPMod.PersistInQryString("proj_id")
'------------ 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 objRelCollectorA
Dim objRelCollectorB
Dim parRtagA
Dim parRtagB
Dim parSBOMA
Dim parSBOMB
Dim dDiffFilter
Dim colorA, colorB, ChangeTypeIcon
Dim btnMerge, btnRemove
Dim rowId
Dim email
Dim genReport
Dim genSummary
Dim summaryText
Dim FSO
Dim NewTextFile
Dim NewTextFilePath
Dim pkgA, pkgB, pkgname, delimiter, rsQryA, rsQryB, rsQryCommentsA, rsQryCommentsB, sqlstrA, counterA, sqlstrB, sqlstrC, counterB
Dim SSsql, retVal, rsCQ, DEVIiss
Dim a, b, c, d, pkgversion, errormsg
Dim VersionList

'------------ Constants Declaration -----------
Const LIMG_UPDATED = "<img src='images/i_updated.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Updated'>"
Const LIMG_RIPPLED = "<img src='images/i_rippled.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Rippled'>"
Const LIMG_ADDED = "<img src='images/i_added.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Added'>"
Const LIMG_REMOVED = "<img src='images/i_removed.gif' width='11' height='11' border='0' hspace='5' align='absmiddle' title='Removed'>"
Const LIMG_FILTER_ON = "<img src='images/i_data_table.gif' border='0' align='absmiddle' hspace='0' title='Filter in use.'>"
Const LIMG_FILTER_OFF = "<img src='images/i_data_table_off.gif' border='0' align='absmiddle' hspace='0' title='Filter not in use.'>"
Const LIMG_DROP_DOWN_ARROW = "<img src='images/i_drop_down_arrow.gif' width='5' height='15' hspace='1' border='0' align='absmiddle'>"
Const LCOLOR_NOT_CHANGED = "#F5F5F5"
Const LCOLOR_CHANGED = "#d2f7c9"
Const LCOLOR_RIPPLED = "#D8F8F8"
Const LCOLOR_BLANK = "#FFFFFF"
Const LIMG_MERGE = "<img src='images/bt_move_all_right.gif' title='Click to merge.' border='0'>"
Const LIMG_MERGE_WARN = "<img src='images/bt_move_warn_right.gif' title='Right hand side version is newer.' border='0'>"
Const LIMG_REMOVE = "<img src='images/bt_remove.gif' title='Remove this version from release.' border='0'>"
Const LIMG_UNDO = "<img src='images/bt_undo.gif' title='Undo merge/remove.' border='0'>"
'------------ Variable Init -------------------
parRtagA = Request("rtagA")
parRtagB = Request("rtagB")
parSBOMA = Request("sbomA")
parSBOMB = Request("sbomB")
Set objRelCollectorA = CreateObject("Scripting.Dictionary")
Set objRelCollectorB = CreateObject("Scripting.Dictionary")
Set dDiffFilter = CreateObject("Scripting.Dictionary")

'----------------------------------------------
If Request("btn") = "btn_report" Then
    email = true
    genReport = true
End If
If Request("btn") = "btn_summary" Then
    email = true
    genSummary = true
End If
If Request("btn") = "btn_showRep" Then
    genReport = true
End If
%>
<%
'--------------------------------------------------------------------------
'   Add text to summary email
'       Attempt to prevent gmail from creating hyperlinks out of some text
'           - Put '.' inside a 'span'
Sub Summary(txt)
 If genSummary Then
     summaryText = summaryText & Replace(txt,".", "<span>.</span>") 
 End If
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetDiffFilterValues ( outDepFilter )
    Dim FilterVal, aFilterValues

    If Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) <> "" Then
        aFilterValues = Split( Replace( Request.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER), " ", ""), ",")

        For Each FilterVal In aFilterValues
            outDepFilter.Item (CStr( FilterVal )) = ""
        Next

    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub DisplayFilterSelector
 %>
        <!-- DIFF FILTER +++++++++++++++++++++++++++++++++++++++++++ -->
        <p>&nbsp;
        <fieldset style="width:150px;">
        <legend class="body_scol"><%=GetIsDiffFilterInUseIcon() %>&nbsp;Filter&nbsp;Results...</a></legend>
        <div name="divDiffFilter" id="divDiffFilter" class="body_txt">
          <br>
          <table width="100%"  border="0" cellspacing="1" cellpadding="3">
            <tr>
              <td width="1" background="images/bg_action_norm.gif"><input name="difilter" type="checkbox" value="<%=enumDB_DIFF_UPDATED%>" <%=GetIsDiffFilterChecked(enumDB_DIFF_UPDATED)%>></td>
              <td width="50" nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_UPDATED%>Updated</td>
            </tr>
            <tr>
              <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_DIFF_NEW%>" <%=GetIsDiffFilterChecked(enumDB_DIFF_NEW)%>></td>
              <td nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_ADDED%>Added</td>
            </tr>
            <tr>
              <td background="images/bg_action_norm.gif"><input type="checkbox" name="difilter" value="<%=enumDB_DIFF_REMOVED%>" <%=GetIsDiffFilterChecked(enumDB_DIFF_REMOVED)%>></td>
              <td nowrap background="images/bg_action_norm.gif" class="form_field"><%=LIMG_REMOVED%>Removed</td>
            </tr>
            <tr>
              <td background="images/bg_action_norm.gif"><input type="checkbox" name="filter_comments" value="<%=enumDB_FILTER_COMMENTS%>" <%=GetIsDiffFilterChecked(enumDB_FILTER_COMMENTS)%>></td>
              <td nowrap background="images/bg_action_norm.gif" class="form_field">Comments</td>
            </tr>
            <tr>
              <td background="images/bg_action_norm.gif"><input type="checkbox" name="filter_issues" value="<%=enumDB_FILTER_ISSUES%>" <%=GetIsDiffFilterChecked(enumDB_FILTER_ISSUES)%>></td>
              <td nowrap background="images/bg_action_norm.gif" class="form_field">Issues</td>
            </tr>
            <tr>
              <td background="images/bg_action_norm.gif">&nbsp;</td>
              <td background="images/bg_action_norm.gif"><input name="btn" type="submit" class="form_btn" value="Hide"></td>
            </tr>
          </table>
        </div>
        </fieldset>
        <!-- +++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
<%
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Javascript()
 If genReport Then
        NewTextFile.WriteLine("<script language=""JavaScript"" type=""text/javascript"">")
        NewTextFile.WriteLine("function MM_findObj(n, d) { //v4.0")
        NewTextFile.WriteLine("  var p,i,x;")
        NewTextFile.WriteLine("  if(!d) d=document; ")
        NewTextFile.WriteLine("  if((p=n.indexOf(""?""))>0&&parent.frames.length) {")
        NewTextFile.WriteLine("         d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);")
        NewTextFile.WriteLine("  }")
        NewTextFile.WriteLine("  if(!(x=d[n])&&d.all) x=d.all[n]; ")
        NewTextFile.WriteLine("  for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];")
        NewTextFile.WriteLine("  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);")
        NewTextFile.WriteLine("  if(!x && document.getElementById) x=document.getElementById(n); ")
        NewTextFile.WriteLine("  return x;")
        NewTextFile.WriteLine("}")

        NewTextFile.WriteLine("function toggleSPAN(x) {")
        NewTextFile.WriteLine("    var el = MM_findObj('spanPkgInfo' + x);")
        NewTextFile.WriteLine("    if (el.style.display != ""block"") {")
        NewTextFile.WriteLine("        el.style.display = ""block"";")
        NewTextFile.WriteLine("    } else {")
        NewTextFile.WriteLine("        el.style.display = ""none"";")
        NewTextFile.WriteLine("    }")
        NewTextFile.WriteLine("}")

        NewTextFile.WriteLine("function MM_getElementsByClassName(cn) {")
        NewTextFile.WriteLine("    var allT=document.getElementsByTagName('*'), allCN=[], i=0, a;")
        NewTextFile.WriteLine("    while(a=allT[i++]) {")
        NewTextFile.WriteLine("        a.className==cn ? allCN[allCN.length]=a : null;")
        NewTextFile.WriteLine("    }")
        NewTextFile.WriteLine("    return allCN")
        NewTextFile.WriteLine("}")

        NewTextFile.WriteLine("    function MM_toggleAll(cn, show){")
        NewTextFile.WriteLine("        var allEl = MM_getElementsByClassName(cn);")
        NewTextFile.WriteLine("        for (var ii=0; ii<allEl.length;ii++){")
        NewTextFile.WriteLine("            var el = allEl[ii];")
        NewTextFile.WriteLine("            if(show) {")
        NewTextFile.WriteLine("                el.style.display = ""block"";")
        NewTextFile.WriteLine("            } else {")
        NewTextFile.WriteLine("                el.style.display = ""none"";")
        NewTextFile.WriteLine("            }")
        NewTextFile.WriteLine("        }")
        NewTextFile.WriteLine("    }")

        NewTextFile.WriteLine("</script>")
 End If
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetFixedIssues(pv_id, issues)
    If issues <> "Filter Issues" Then
        Set sqlstrC = OraDatabase.DbCreateDynaset( _
                "SELECT iss_db, iss_id, iss_state, notes FROM CQ_ISSUES" &_
                " WHERE pv_id="& pv_id &" AND iss_state = "& enumISSUES_STATE_FIXED _
                , cint(0))

        If sqlstrC.RecordCount <> 0 Then
            NewTextFile.WriteLine()
            NewTextFile.WriteLine("<blockquote><blockquote>Fixed Issues:</blockquote></blockquote>")
            NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
            NewTextFile.WriteLine("<tr>")
            NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Id</td>")
            NewTextFile.WriteLine("<td width='55%' class='form_field'>Summary</td>")
            NewTextFile.WriteLine("<td width='10%' class='form_field'>Issue Type</td>")
            NewTextFile.WriteLine("<td width='15%' class='form_field'>Priority</td>")
            NewTextFile.WriteLine("<td width='10%' class='form_field'>Status</td>")
            NewTextFile.WriteLine("</tr>")

            While ((NOT sqlstrC.BOF) AND (NOT sqlstrC.EOF))
                DEVIiss = "-1"

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

                SSsql = ReadFile( QUERIES_PATH & "\cq_issues.sql" )
                SSsql = Replace( SSsql, "/*enumCLEARQUEST_DEVI_ID*/", enumCLEARQUEST_DEVI_ID)
                SSsql = Replace( SSsql, "/*DEVIiss*/", DEVIiss)

                retVal = Get_CQ_Issues ( SSsql, rsCQ )

                NewTextFile.WriteLine("<tr>")
                NewTextFile.WriteLine("<td nowrap class='form_item'>"&rsCQ("iss_num")&"</td>")

                NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( rsCQ("summary") ) )&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("issue_type")&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("priority")&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&rsCQ("Status")&"</td>")
                NewTextFile.WriteLine("</tr>")

                sqlstrC.MoveNext

            Wend

            NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>             ")
        End If

        '
        ' Must also handle Jira Issues

        Dim issueInfo, el, key
        Set issueInfo = CreateObject( "Scripting.Dictionary" )
        Call getJiraIssueDetails(pv_id, issueInfo, 1)
        If issueInfo.Count > 0 Then
            ' Table Header
            NewTextFile.WriteLine()
            NewTextFile.WriteLine("<blockquote><blockquote>Jira Issues:</blockquote></blockquote>")
            NewTextFile.WriteLine("<blockquote><blockquote><blockquote><table class='fixed_issues' width='100%'>")
            NewTextFile.WriteLine("<tr>")
            NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Id</td>")
            NewTextFile.WriteLine("<td width='58%' class='form_field'>Summary</td>")
            NewTextFile.WriteLine("<td width='8%' class='form_field'>Issue Type</td>")
            NewTextFile.WriteLine("<td width='10%' class='form_field'>Priority</td>")
            NewTextFile.WriteLine("<td width='8%' class='form_field'>Status</td>")
            NewTextFile.WriteLine("<td width='8%' class='form_field'>Resolution</td>")
            NewTextFile.WriteLine("</tr>")

            ' Table Body
            For Each key In issueInfo
                Set el = issueInfo.item(key)

                NewTextFile.WriteLine("<tr>")
                NewTextFile.WriteLine("<td nowrap class='form_item'>"&key&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&NewLine_To_BR ( To_HTML ( el.item("summary") ) )&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&el.item("issuetype")&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&el.item("priority")&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&el.item("status")&"</td>")
                NewTextFile.WriteLine("<td class='form_item'>"&el.item("resolution")&"</td>")
                NewTextFile.WriteLine("</tr>")
            Next
            NewTextFile.WriteLine( "                        </table></blockquote></blockquote></blockquote>             ")
        Set issueInfo = nothing
        End If
    End If
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function LastPvId(pvId)
    Dim qryA
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&pvId, cint(0))

    LastPvId = pvId

    If pvId <> qryA("last_pv_id") Then
        LastPvId = qryA("last_pv_id")
    Else
        errormsg = true
    End If

    qryA.Close()
    Set qryA = Nothing

End Function
'--------------------------------------------------------------------------------------------------------------------------
Sub PreviousVersions(a, b, versionA, versionB, data, issues)
    NewTextFile.WriteLine()
    NewTextFile.WriteLine("<b>Versions Between: "&versionA&" and "&versionB&"</b>")

    If CLng(a) < CLng(b) Then
        While CLng(a) < CLng(b)
            b = LastPvId(b)
            If CLng(a) < CLng(b) Then
                VersionList = VersionList + ","& b &""
                Call Comments(b, data)
                Call GetFixedIssues(b, issues)
            End If
        Wend
    End If

    If CLng(b) < CLng(a) Then
        While CLng(b) < CLng(a)
            a = LastPvId(a)
            If CLng(b) < CLng(a) Then
                VersionList = VersionList + ","& a &""
                Call Comments(a, data)
                Call GetFixedIssues(a, issues)
            End If
        Wend
    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetDependencies(pv_id_a, pv_id_b, versionA, versionB, comments, issues)
    On Error Resume Next

    Set sqlstrA = OraDatabase.DbCreateDynaset( _
            "select distinct dpv_id " &_
            " from package_dependencies" &_
            " where pv_id IN ("& pv_id_b &")" &_
            "   and dpv_id NOT IN (SELECT dpv_id from package_dependencies where pv_id = "& pv_id_a &")" &_
                " order by dpv_id desc", cint(0))

    If sqlstrA.RecordCount <> 0 Then
        NewTextFile.WriteLine()
        NewTextFile.WriteLine("<b>Dependencies Changed Between "&versionA&" and "&versionB&":</b>")

        While ((NOT sqlstrA.BOF) AND (NOT sqlstrA.EOF))
            Call dependencyComments(sqlstrA("dpv_id"), comments)
            Call GetFixedIssues(sqlstrA("dpv_id"), issues)
            sqlstrA.MoveNext
        Wend

    End If

    sqlstrA.Close()
    Set sqlstrA = Nothing

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub dependencyComments(pv_id, comments)

        Set sqlstrB = OraDatabase.DbCreateDynaset("SELECT * FROM PACKAGE_VERSIONS pv, PACKAGES pkg WHERE pkg.pkg_id = pv.pkg_id AND PV_ID ="&pv_id, cint(0))
        NewTextFile.WriteLine("<blockquote><blockquote><span class="&chr(34)&"highlight_text"&chr(34)&">"& sqlstrB("pkg_name") &" "& sqlstrB("pkg_version") &"</font></span></blockquote></blockquote>")

        If comments <> "Filter Comments" Then
            NewTextFile.WriteLine("<blockquote><blockquote>Comments:</blockquote></blockquote>")
            NewTextFile.Write("<blockquote><blockquote><blockquote>"& TextToHTML(sqlstrB("comments")) &"</blockquote></blockquote></blockquote>")
        End If

        sqlstrB.Close()
        Set sqlstrB = nothing
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub pkg_Version(pv)
    Dim qry
    Set qry = OraDatabase.DbCreateDynaset("SELECT PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&pv, cint(0))
    pkgversion = qry("pkg_version")
    qry.Close()
    Set qry = Nothing
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Comments(Pv_Id, data)
        Dim comments
        Set comments = OraDatabase.DbCreateDynaset("SELECT COMMENTS, PKG_VERSION FROM PACKAGE_VERSIONS WHERE PV_ID="&Pv_id, cint(0))
        'If comments("comments") <> "Rippled Build." Then
            NewTextFile.WriteLine("<blockquote><blockquote><span class="&chr(34)&"highlight_text"&chr(34)&">Version: "& comments("pkg_version")&"</span></blockquote></blockquote>")
            If data <> "Filter Comments" Then
                If comments("comments") <> "" Then
                    NewTextFile.WriteLine("<blockquote><blockquote>Comments: </blockquote></blockquote>")
                    NewTextFile.WriteLine("<blockquote><blockquote><blockquote>"& TextToHTML(comments("comments")) &"</blockquote></blockquote></blockquote>")
                End If
            End If
        'End If
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Release(pvId)
    Dim release
    Set release = OraDatabase.DbCreateDynaset("SELECT INSERT_STAMP FROM RELEASE_CONTENT WHERE PV_ID="&pvId, cint(0))

    If release("insert_stamp") <> "" Then
        NewTextFile.Write(release("insert_stamp"))
    Else
        NewTextFile.Write("Version Not Used.")
    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Header()
    NewTextFile.WriteLine("<html>")
    NewTextFile.WriteLine("<head>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Footer()
    NewTextFile.WriteLine("</body>")
    NewTextFile.WriteLine("</html>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub Styles()
  NewTextFile.WriteLine("<style type="&chr(34)&"text/css"&chr(34)&">")
  NewTextFile.WriteLine("body { font-family:Verdana,Arial,Helvetica,sans-serif; }")
  NewTextFile.WriteLine("table { border-collapse:collapse; }")
  NewTextFile.WriteLine("td { border-width:1; border-style:solid; border-color:black; padding:3 5 3 5; }")
  NewTextFile.WriteLine(".fixed_issues { border-width:1; border-style:solid; border-color:black; }")
  NewTextFile.WriteLine(".page_title { color:red; font-size:110%; text-align:center; }")
  NewTextFile.WriteLine(".highlight_text { color:blue; }")
  NewTextFile.WriteLine(".form_field { background-color:#EAE5D7; font:bold 70% Tahoma,sans-serif; }")
  NewTextFile.WriteLine(".form_item { background-color:#EAE5D7; color:red; font:bold 70% Tahoma,sans-serif; vertical-align:top; }")
  NewTextFile.WriteLine("</style>")
End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function GetIsDiffFilterInUseIcon()
    GetIsDiffFilterInUseIcon = LIMG_FILTER_OFF

    If dDiffFilter.Count > 0 Then
        GetIsDiffFilterInUseIcon = LIMG_FILTER_ON
    End If

End Function
'--------------------------------------------------------------------------------------------------------------------------
Function GetIsDiffFilterChecked( nFilterId )

    If dDiffFilter.Exists ( CStr(nFilterId)  ) Then
        GetIsDiffFilterChecked = "checked"
    End If

End Function
'---------------------------------------------------------------------------------------------------------------------------
Function  Get_CQ_Issues ( SSsql, OOrsCQ )

    On Error Resume Next
    Set OOrsCQ = OraDatabase.DbCreateDynaset( SSsql, cint(0))
    Get_CQ_Issues = Err.Number

End Function
'--------------------------------------------------------------------------------------------------------------------------
Public Function TextToHTML ( sString )
    Dim mString

    If (sString = "") OR IsNull(sString) Then Exit Function

    mString = Server.HTMLEncode( sString )
    mString = Replace(mString, VBNewLine, "<br>")

    TextToHTML = mString
End Function
'--------------------------------------------------------------------------------------------------------------------------
Sub GetFormDetails ( nSourceSBOM, ByRef outobjDetails )
    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"&_
        "  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
        outobjDetails.Item ("location") = rsQry("location")
        outobjDetails.Item ("official") = rsQry("IS_READONLY")
        outobjDetails.Item ("proj_id") = rsQry("proj_id")
        outobjDetails.Item ("branch_id") = rsQry("branch_id")
        outobjDetails.Item ("bom_id") = rsQry("bom_id")
    Else
        Err.Raise 8, "Sub GetFormDetails in "& SCRIPT_NAME, "Empty record set returned. nSourceSBOM="& nSourceSBOM
    End If

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

    rsQry.Close
    Set rsQry = Nothing

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Sub GetDiffStateIcon( nDiffState, outIcon )

    Select Case nDiffState
        Case "U"
            outIcon  = LIMG_UPDATED
        Case "UW"
            outIcon  = LIMG_UPDATED
        Case "A"
            outIcon = LIMG_ADDED
        Case "R"
            outIcon = LIMG_REMOVED
        Case "UR"
            outIcon = LIMG_RIPPLED
        Case Else
            outIcon = ""
    End Select

End Sub
'--------------------------------------------------------------------------------------------------------------------------
%>
<%
'------------ RUN BEFORE PAGE RENDER ----------
If Request("btn") = "Exit" Then
    Call OpenInWindow ( "reports.asp" )
End If

' Get release details
Call GetFormDetails ( parSBOMA, objRelCollectorA )
Call GetFormDetails ( parSBOMB, objRelCollectorB )

If Request("btn") = "Swap Compare" Then
    Call OpenInWindow ( SCRIPT_NAME &"?sbomA="& parSBOMB &"&sbomB="& parSBOMA &"&rtagA="& parRtagB &"&rtagB="& parRtagA )
End If

If Request("btn") = "Hide" Then
    ' Store filter in cookie
    Response.Cookies(enum_RELMGR_COOKIE_DOMAIN)(COOKIE_HIDE_DIFF_FILTER) = Request("difilter")
End If


Call GetDiffFilterValues ( dDiffFilter )
'----------------------------------------------
%>
<html>
<head>
<title>Deployment Manager SBOM Differences</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 href="scripts/deployment_manager.css?ver=<%=VixVerNum%>" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="images/release_manager_style.css?ver=<%=VixVerNum%>" type="text/css">
<link rel="stylesheet" href="images/navigation.css?ver=<%=VixVerNum%>" 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 RequestReleaseCombo( paramString, rowId, rowId2 )
{
    var requestURL = 'RequestReleaseCombo.asp';

    // Set ajax divname
    ajaxdivname = rowId;

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

    // Cleanout other combo boxes
    rowId.options[0] = new Option('Loading...','');
    rowId.selectedIndex = 0;

    rowId2.innerHTML = '';

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

    //Send the xmlHttp get to the specified url
    xmlHttp_Get(xmlHttp, url);
}

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;

    //Progress
    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
    // This is non-blocking (asynchronous)
    xmlHttp = GetXmlHttpObject(stateComboChangeHandler);

    //Send the xmlHttp get to the specified url
    xmlHttp_Get(xmlHttp, url);
}

//-->
</script>

</head>
<body bgcolor="#FFFFFF" text="#000000" leftmargin="0" topmargin="0">
<form name="FormName" method="post" action="<%=SCRIPT_NAME%>">
    <!-- HEADER -->
    <!--#include file="_header.asp"-->
    <!-- BODY ---->
    <table width="100%" border="0" cellspacing="0" cellpadding="0">
        <tr>
            <td width="20%">
            <td width="60%">
            <td width="20%">
        </tr>
        <tr>
    <td background="images/bg_lite_blue.gif" valign="top">


    <!-- SELECT SBOM A ---------------------------------------------->

    <br>
      <table width="100%"  border="0" cellspacing="10" cellpadding="0">

        <tr>
          <td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select SBOM A<hr size="1px" color="Olive" noshade></td>
        </tr>
        <tr>
          <td align="left">
          <select name="projA" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagA, FormName.sbomA );">
              <option value="">-- Select Project --</option>
              <%
              OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("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>
        </tr>
        <tr>
          <td align="left">

              <select name="rtagA" id="rtagA" class="form_item" onChange="RequestSBOMCombo( '?branch_id='+ this.value, FormName.sbomA );">
              <option value="">-- Select Branch --</option>
              <%
              OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorA.Item("proj_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
              OraDatabase.Parameters.Add "BRANCH_ID",   objRelCollectorA.Item("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">


          <select name="sbomA" id="sbomA" class="form_item">
            <%
              OraDatabase.Parameters.Add "BOM_ID",  objRelCollectorA.Item("bom_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
              OraDatabase.Parameters.Add "BRANCH_ID",   objRelCollectorA.Item("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 (parRtagA <> "") Then%>
        <tr>
          <td align="left"><a href="Bom_Home.asp?bom_id=<%=parSBOMA%>" class="body_txt_drk">Go To SBOM A &raquo;</a></td>
        </tr>
        <%End If%>
        <tr>
          <td>
            <%Call DisplayFilterSelector%>
          </td>
        </tr>
    </table>

    <!-- SELECT SBOM A END ---------------------------------------------->
    </td>
    <td rowspan="2" valign="top" background="images/bg_lght_gray.gif" align="center">
      <!-- DIFF -------------------------------------------------------->
      <br>




      <table width="100%" border="0" cellspacing="10" cellpadding="0">
        <tr>
          <td>



            <table width="100%" border="0" cellspacing="0" cellpadding="0">
              <tr>
                <td width="1%"></td>
                <td width="100%" align="left" class="form_ttl">DIFF SBOM
                <%If genReport Then%>
                &nbsp;[Generating Report]
                <%End If%>
                <%If genSummary Then%>
                &nbsp;[Generating Summary]
                <%End If%>
                </td>
                <td width="1%"></td>
              </tr>
              <tr>
                <td align="left" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tl_cnr_b.gif" width="13" height="13"></td>
                <td background="images/lbox_bg_blue.gif" align="left" class="wform_ttl">&nbsp;
                </td>
                <td align="right" valign="top" background="images/lbox_bg_blue.gif"><img src="images/lbox_tr_cnr_b.gif" width="13" height="13"></td>
              </tr>
              <tr>
                <td width="1%" bgcolor="#FFFFFF"><img src="images/h_trsp_dot.gif" width="10" height="100"></td>
                <td bgcolor="#FFFFFF" valign="top" class="form_item">



                <table width="100%"  border="0" cellspacing="0" cellpadding="5">
                  <tr>
                    <td width="100%" bgcolor="#DAD7C8">
                    <input type="submit" name="btn" value="Compare" class="form_btn_comp" style="margin-right:5px;">
                    <input type="submit" name="btn" value="Swap Compare" class="form_btn_comp">
                    <span class="body_txt">
                        <button name="btn" type="submit" class="form_btn" value="btn_report">Mail Me Report</button>
                        <button name="btn" type="submit" class="form_btn" value="btn_summary">Mail Me Summary</button>
                        <% '<button name="btn" type="submit" class="form_btn" value="btn_showRep">Show Me Report</button>%>
                    </span>
                    </td>
                    <td width="1" align="right" bgcolor="#DAD7C8" nowrap>
                    <table width="100%"  border="0" cellspacing="0" cellpadding="0">
                      <tr>
                        <td><input type="submit" name="btn" value="Exit" class="form_btn_comp"></td>
                      </tr>
                    </table></td>
                  </tr>
                </table>
                <%
                If genReport Then
                    Set FSO=Server.CreateObject("Scripting.FileSystemObject")
                    NewTextFilePath = Server.MapPath("docs\compareBoms_"&objAccessControl.UserName&".html")
                    Set NewTextFile=FSO.CreateTextFile(NewTextFilePath, true)
                    Call Header()
                End If

                If (parRtagA <> "") AND (parRtagB <> "")Then%>
                <table width="100%"  border="0" cellspacing="1" cellpadding="0">
                  <tr>
                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorA.Item("official")) & objRelCollectorA.Item("location")%> </td>
                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="20"></td>
                    <td width="1" bgcolor="#E4E9EC"><img src="images/spacer.gif" width="20" height="1"></td>
                    <td width="50%" bgcolor="#E4E9EC" class="body_row" nowrap><%= ReleaseIcon(objRelCollectorB.Item("official")) & objRelCollectorB.Item("location")%></td>
                  </tr>
                <%

                OraDatabase.Parameters.Add "SBOM_A",    parSBOMA,   ORAPARM_INPUT, ORATYPE_NUMBER
                OraDatabase.Parameters.Add "SBOM_B",    parSBOMB,   ORAPARM_INPUT, ORATYPE_NUMBER
                OraDatabase.Parameters.Add "NO_CHANGE", GetIsDiffFilterChecked(enumDB_DIFF_NO_CHANGE),      ORAPARM_INPUT, ORATYPE_VARCHAR2
                OraDatabase.Parameters.Add "ADDED",     GetIsDiffFilterChecked(enumDB_DIFF_NEW),        ORAPARM_INPUT, ORATYPE_VARCHAR2
                OraDatabase.Parameters.Add "UPDATED",   GetIsDiffFilterChecked(enumDB_DIFF_UPDATED),        ORAPARM_INPUT, ORATYPE_VARCHAR2
                OraDatabase.Parameters.Add "REMOVED",   GetIsDiffFilterChecked(enumDB_DIFF_REMOVED),        ORAPARM_INPUT, ORATYPE_VARCHAR2

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

                OraDatabase.Parameters.Remove "SBOM_A"
                OraDatabase.Parameters.Remove "SBOM_B"
                OraDatabase.Parameters.Remove "NO_CHANGE"
                OraDatabase.Parameters.Remove "ADDED"
                OraDatabase.Parameters.Remove "UPDATED"
                OraDatabase.Parameters.Remove "REMOVED"

                Set rsQryA = OraDatabase.DbCreateDynaset( "SELECT pr.PROJ_NAME, br.BRANCH_NAME, b.BOM_VERSION ||'.'||b.BOM_LIFECYCLE  AS LOCATION, "&_
        "        pr.PROJ_ID, b.BOM_ID, br.BRANCH_ID"&_
        "  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 ="&parSBOMA, cint(0))


                Set rsQryB = OraDatabase.DbCreateDynaset( "SELECT pr.PROJ_NAME, br.BRANCH_NAME, b.BOM_VERSION ||'.'||b.BOM_LIFECYCLE  AS LOCATION, "&_
        "        pr.PROJ_ID, b.BOM_ID, br.BRANCH_ID"&_
        "  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 ="&parSBOMB, cint(0))


                If genReport Then
                    NewTextFile.WriteLine("<title>Difference Report Between "&_
                                rsQryA("branch_name")&" "& rsQryA("location")&" and "&_
                                rsQryB("branch_name")&" "& rsQryB("location")&_
                                "</title>")
                    Call Javascript()
                    Call Styles()
                    NewTextFile.WriteLine("</head>")
                    NewTextFile.WriteLine("<body>")
                    NewTextFile.WriteLine("<div class="&chr(34)&"page_title"&chr(34)&">Difference Report Between "&_
                                rsQryA("proj_name") & " > " & rsQryA("branch_name")&" > "&rsQryA("location")&" and "&_
                                rsQryB("proj_name") & " > " & rsQryB("branch_name")&" > "&rsQryB("location")&_
                                "</div><br><br>")
                End If

                Summary("<table style='border:1px solid black;border-collapse: collapse;'")
                Summary("<tr>")
                Summary("<td colspan=2 style='border: 1px solid black;'>"&rsQryA("proj_name") & " > " & rsQryA("branch_name")&" > "&rsQryA("location")&"</td>")
                Summary("<td colspan=2 style='border: 1px solid black;'>"&rsQryB("proj_name") & " > " & rsQryB("branch_name")&" > "&rsQryB("location")&"</td>")
                Summary("</tr>")

                If genReport Then
                    NewTextFile.WriteLine("<b>Toggle Sections:</b><blockquote>")
                    NewTextFile.WriteLine("<a href=""javascript:;"" onClick=""MM_toggleAll('divPkgInfo','1');"">Expand All</a>")
                    NewTextFile.WriteLine("<a href=""javascript:;"" onClick=""MM_toggleAll('divPkgInfo','');"">Collapse All</a>")
                    NewTextFile.WriteLine("</blockquote>")
                End If

                While ((NOT rsQry.BOF) AND (NOT rsQry.EOF))
                    VersionList = "0"
                    errormsg = false
                    rowId = rsQry("pv_id_a") &"_"& rsQry("pv_id_b")

                    btnMerge = LIMG_MERGE
                    btnRemove = LIMG_REMOVE
                    colorA = LCOLOR_NOT_CHANGED
                    colorB = LCOLOR_NOT_CHANGED

                    Select Case rsQry("change_type")
                        Case "U"
                            colorA = LCOLOR_CHANGED
                            colorB = LCOLOR_CHANGED
                        Case "UW"
                            colorA = LCOLOR_CHANGED
                            colorB = LCOLOR_CHANGED
                            btnMerge = LIMG_MERGE_WARN
                        Case "UR"
                            colorA = LCOLOR_RIPPLED
                            colorB = LCOLOR_RIPPLED
                        Case "A"
                            colorA = LCOLOR_BLANK
                        Case "R"
                            colorB = LCOLOR_BLANK
                    End Select

                    Call GetDiffStateIcon ( rsQry("change_type"), ChangeTypeIcon )
                %>
                  <tr>
                    <td class="body_row" nowrap>
                        <DIV id="PVA<%=rowId%>" style="background:<%=colorA%>; padding:5px;">
                        <%=rsQry("pkg_name_a") &" "& rsQry("pkg_version_a")%>
                        </DIV>
                        <input type="hidden" id="UNDOCOLORA_<%=rowId%>" value="<%=colorA%>">
                    </td>
                    <td bgcolor="#F5F5F5"></td>
                    <td bgcolor="#E4E9EC"><DIV id="IMGSTATE<%=rowId%>" ><%=ChangeTypeIcon%></DIV><input type="hidden" id="CHANGETYPE_<%=rowId%>" value="<%=rsQry("change_type")%>"></td>
                    <td bgcolor="#F5F5F5"></td>
                    <td class="body_row" nowrap>
                        <DIV id="PVB<%=rowId%>" style="background:<%=colorB%>; padding:5px;">
                        <%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>
                        </DIV>
                        <input type="hidden" id="UNDOCOLORB_<%=rowId%>" value="<%=colorB%>">
                        <input type="hidden" name="addpkg" id="ADDPKG_<%=rowId%>" value="">
                        <input type="hidden" name="removepkg" id="REMOVEPKG_<%=rowId%>" value="">
                        <input type="hidden" id="UNDOPKG_<%=rowId%>" value="<%=rsQry("pkg_name_b") &" "& rsQry("pkg_version_b")%>">
                    </td>
                  </tr>
<%
    Summary("<tr>")
    Summary("<td style='border: 1px solid black;'>"&rsQry("pkg_name_a")&"</td>")
    Summary("<td style='border: 1px solid black;'>"&rsQry("pkg_version_a")&"</td>")
    Summary("<td style='border: 1px solid black;'>"&rsQry("pkg_name_b")&"</td>")
    Summary("<td style='border: 1px solid black;'>"&rsQry("pkg_version_b")&"</td>")
    Summary("</tr>")
    If genReport Then
        If rsQry("pv_id_a") Then
            Set rsQryCommentsA = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_a"), cint(0))
        End If

        If rsQry("pv_id_b") Then
            Set rsQryCommentsB = OraDatabase.DbCreateDynaset( "SELECT COMMENTS FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0))
        End If

        pkgA = rsQry("pkg_name_a")
        pkgB = rsQry("pkg_name_b")

        If pkgA <> "" then
            pkgname = pkgA
        Else
            pkgname = pkgB
        End If

        If rsQry("change_type") = "U" OR rsQry("change_type") = "UW" Then
                NewTextFile.Write("<p><a href=""javascript:;"" class=""body_scol"" onClick=""toggleSPAN('"& rowId &"');"">"& pkgname &"</a>")
                NewTextFile.WriteLine("<DIV class=divPkgInfo id=""spanPkgInfo"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")
                NewTextFile.Write(rsQryA("location")&" uses: "&rsQry("pkg_version_a")&" ")

                NewTextFile.WriteLine("<br>")
                NewTextFile.Write(rsQryB("location")&" uses: "&rsQry("pkg_version_b")&" ")

                a = rsQry("pv_id_a")
                b = rsQry("pv_id_b")
                c = rsQry("pv_id_a")
                d = rsQry("pv_id_b")

                NewTextFile.WriteLine("<br><br>")
                NewTextFile.WriteLine()
                NewTextFile.WriteLine("<b>"&rsQryB("location")&"</b>")
                Call Comments(rsQry("pv_id_b"), Request("filter_comments"))
                Call GetFixedIssues(rsQry("pv_id_b"), Request("filter_issues"))

                Dim rsQryLast
                Set rsQryLast = OraDatabase.DbCreateDynaset( "SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="& rsQry("pv_id_b"), cint(0))

                If rsQryLast("last_pv_id") <> a Then
                    Call PreviousVersions(a, b, rsQry("pkg_version_a"), rsQry("pkg_version_b"), Request("filter_comments"), Request("filter_issues"))
                End If

                a = rsQry("pv_id_a")
                b = rsQry("pv_id_b")
                Call GetDependencies(a, VersionList + ","+ b, rsQry("pkg_version_a"), rsQry("pkg_version_b"), Request("filter_comments"), Request("filter_issues"))
                NewTextFile.WriteLine("</DIV>")

                rsQryLast.Close()
                Set rsQryLast = Nothing

        End If

        If rsQry("change_type") = "A" AND rsQry("patch_b") = "Y" Then
            Dim rsQryPatch
            OraDatabase.Parameters.Add "PV_ID",     rsQry("pv_id_b"),   ORAPARM_INPUT, ORATYPE_NUMBER
            Set rsQryPatch = OraDatabase.DbCreateDynaset( GetQuery("pd_patch.sql"), cint(0))
            OraDatabase.Parameters.Remove "PV_ID"
            If NOT IsNull(rsQryPatch("pv_id")) Then
                NewTextFile.Write("<p><a href=""javascript:;"" class=""body_scol"" onClick=""toggleSPAN('_p"& rowId &"');""><font face="&chr(34)&"Verdana, Arial, Helvetica, sans-serif"&chr(34)&">"& rsQryPatch("pkg_name") &" "& rsQryPatch("pkg_version") &"</font></a>")
                NewTextFile.WriteLine("<DIV class=divPkgInfo id=""spanPkgInfo_p"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")
                Call Comments(rsQryPatch("pv_id"), Request("filter_comments"))
                Call GetFixedIssues(rsQryPatch("pv_id"), Request("filter_issues"))
            Else
                NewTextFile.Write("<p><a href=""javascript:;"" class=""body_scol"" onClick=""toggleSPAN('_p"& rowId &"');""><font face="&chr(34)&"Verdana, Arial, Helvetica, sans-serif"&chr(34)&">"& rsQry("pkg_name_b") &" "& rsQry("pkg_version_b") &"</font></a>")
                NewTextFile.WriteLine("<DIV class=divPkgInfo  id=""spanPkgInfo_p"& rowId &""" name=""spanPkgInfo"" style=""display:none;"">")
                Call Comments(rsQry("pv_id_b"), Request("filter_comments"))
                Call GetFixedIssues(rsQry("pv_id_b"), Request("filter_issues"))
            End If

            NewTextFile.WriteLine("</DIV>")
            rsQryPatch.Close
            Set rsQryPatch = nothing

        End If

    End If

    rsQry.MoveNext
    WEnd

    rsQry.Close
    Set rsQry = Nothing
%>
<%
    Summary("</table>")
    If genReport Then
        Call Footer()
        NewTextFile.Close
        Set NewTextFile=Nothing
    End If
%>
                </table>
                <br>
            <%Else%>
                <br>
                <%
                If (parRtagB <> "") Then
                    Call Messenger ( "Select <b>SBOM A</b> to compare.", 3, "100%" )
                ElseIf (parRtagA <> "") Then
                    Call Messenger ( "Select <b>SBOM B</b> to compare.", 3, "100%" )
                Else
                    Call Messenger ( "Select <b>SBOM A</b> and <b>SBOM B</b> to compare.", 3, "100%" )
                End If
                %>

            <%End If%>

                </td>
                <td width="1%" background="images/lbox_bgside_white.gif">&nbsp;</td>
              </tr>
              <tr>
                <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom"><img src="images/lbox_bl_cnr_b.gif" width="13" height="13"></td>
                <td background="images/lbox_bg_blue.gif"></td>
                <td width="1%" background="images/lbox_bg_blue.gif" valign="bottom" align="right"><img src="images/lbox_br_cnr_b.gif" width="13" height="13"></td>
              </tr>
            </table>
          </td>
        </tr>
      </table>
    <!-- DIFF END ---------------------------------------------------->
    </td>
    <td valign="top" background="images/bg_lite_blue.gif">


      <!-- SELECT SBOM B ---------------------------------------------->
      <br>
      <table width="100%"  border="0" cellspacing="10" cellpadding="0">
        <tr>
          <td align="left" class="body_col"><img src="images/i_rtag_open_mode.gif" border="0" align="absmiddle" width="15" height="13">&nbsp;Select SBOM B<hr size="1px" color="Olive" noshade></td>
        </tr>
        <tr>
          <td align="left">
          <select name="projB" class="form_item" onChange="RequestReleaseCombo( '?proj_id='+ this.value, FormName.rtagB, FormName.sbomB );">
              <option value="">-- Select Project --</option>
              <%
              OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("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>
        </tr>
        <tr>
          <td align="left">

          <select name="rtagB" id="rtagB" class="form_item" onChange="RequestSBOMCombo( '?branch_id='+ this.value, FormName.sbomB );">
              <option value="">-- Select Branch --</option>
              <%
              OraDatabase.Parameters.Add "PROJ_ID",     objRelCollectorB.Item("proj_id"),   ORAPARM_INPUT,  ORATYPE_NUMBER
              OraDatabase.Parameters.Add "BRANCH_ID",   objRelCollectorB.Item("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">


          <select name="sbomB" id="sbomB" class="form_item">
            <%
              OraDatabase.Parameters.Add "BOM_ID",  objRelCollectorB.Item("bom_id"),    ORAPARM_INPUT,  ORATYPE_NUMBER
              OraDatabase.Parameters.Add "BRANCH_ID",   objRelCollectorB.Item("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 (parRtagB <> "") Then%>
        <tr>
          <td align="left"><a href="Bom_home.asp?bom_id=<%=parSBOMB%>" class="body_txt_drk">Go To SBOM B &raquo;</a></td>
        </tr>
        <%End If%>
                </table>
                <!-- SELECT RELEASE B END ---------------------------------------------->
            </td>
        </tr>
        <tr>
            <td valign="bottom" align="center" background="images/bg_lite_blue.gif">
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
            </td>
            <td valign="bottom" background="images/bg_lite_blue.gif" align="center">
                <img src="images/img_vtree.gif" width="86" height="99" vspace="20" hspace="30">
            </td>
        </tr>
    </table>
</form>
<%
If email Then

    Dim myMail
    Set myMail=Server.CreateObject("Persits.MailSender")

    myMail.Host = SMTP_HOST
    myMail.From="releasem@vixtechnology.com"
    myMail.AddAddress objAccessControl.UserEmail
    If genReport Then
    myMail.Subject="BOM Comparisons from Deployment Manager"
        myMail.Body = "Your requested report..."
        myMail.AddAttachment NewTextFilePath
    Else
    myMail.Subject="BOM Sumamry Comparisons from Deployment Manager"
        myMail.Body = summaryText
        myMail.IsHTML = True
    End If
    myMail.Send

    set myMail=nothing

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