Subversion Repositories DevTools

Rev

Rev 3938 | 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"-->
<%
'------------ 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 FSO
Dim NewTextFile
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 -------------------
Set rsCQ = Server.CreateObject("ADODB.Recordset")
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") = "Mail Me Report" Then
    email = true
    genReport = true
End If
If Request("btn") = "Show Me Report" Then
    genReport = true
End If
%>
<%
'--------------------------------------------------------------------------------------------------------------------------
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 Javascript()
    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 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 &_
                " UNION SELECT iss_db, iss_id, iss_state, notes FROM ARCHIVE_MANAGER.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 SQLstr
        retVal = Get_JIRA_Package_Issues ( pv_id, SQLstr )
        If retVal > 0 Then
            retVal = Get_JIRA_Issues ( SQLstr, rsCQ )
            If (retVal = 0 AND rsCQ.RecordCount > 0) Then
                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>")

                While ((NOT rsCQ.BOF) AND (NOT rsCQ.EOF))
                    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("<td class='form_item'>"&rsCQ("RESOLUTION")&"</td>")
                    NewTextFile.WriteLine("</tr>")

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

        sqlstrC.Close()
        Set sqlstrC = Nothing
    End If

End Sub
'--------------------------------------------------------------------------------------------------------------------------
Function LastPvId(pvId)
    Dim qryA
    Set qryA = OraDatabase.DbCreateDynaset("SELECT LAST_PV_ID FROM PACKAGE_VERSIONS WHERE PV_ID="&pvId &_
        " UNION SELECT LAST_PV_ID FROM ARCHIVE_MANAGER.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 &")" &_
        " UNION select distinct dpv_id from ARCHIVE_MANAGER.package_dependencies where pv_id IN ("& pv_id_b &") and dpv_id NOT IN (SELECT dpv_id from ARCHIVE_MANAGER.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 &_
        " UNION SELECT * FROM ARCHIVE_MANAGER.PACKAGE_VERSIONS pv, ARCHIVE_MANAGER.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 &_
        " UNION SELECT PKG_VERSION FROM ARCHIVE_MANAGER.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 &_
        " UNION SELECT COMMENTS, PKG_VERSION FROM ARCHIVE_MANAGER.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 &_
        " UNION SELECT INSERT_STAMP FROM ARCHIVE_MANAGER.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 & LIMG_DROP_DOWN_ARROW

    If dDiffFilter.Count > 0 Then
        GetIsDiffFilterInUseIcon = LIMG_FILTER_ON & LIMG_DROP_DOWN_ARROW
    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 )

    If OOrsCQ.State = 1 Then
        OOrsCQ.Close
    End If

    On Error Resume Next
    OOrsCQ.ActiveConnection = CQ_conn
    OOrsCQ.Source = SSsql
    OOrsCQ.CursorType = 0
    OOrsCQ.CursorLocation = 2
    OOrsCQ.LockType = 3
    OOrsCQ.Open()
    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

'----------------------------------------------------------------------------------------------------------------------------------------
' Function returns the number of imported jira issues
' and builds a string suitable for querying the jira issues database
Function Get_JIRA_Package_Issues ( NNpv_id, SSsql )
   Dim rsTemp, sqlstr, JIRAIss, retVal

   JIRAIss = "'-1'"
   sqlstr = "SELECT iss_key FROM JIRA_ISSUES WHERE pv_id="& NNpv_id

   Set rsTemp = OraDatabase.DbCreateDynaset( sqlstr, cint(0))
   retVal = rsTemp.RecordCount

   While ((NOT rsTemp.BOF) AND (NOT rsTemp.EOF))
      JIRAIss = JIRAIss &",'"& rsTemp("iss_key")&"'"
      rsTemp.MoveNext
   WEnd

   SSsql = "SELECT I.pkey AS iss_num, I.summary, ISS.pname AS Status,  IT.pname as issue_type, PR.pname as Priority, R.PNAME as RESOLUTION"&_
           " FROM jiraissue I, issuestatus ISS, issuetype IT, resolution R, priority PR "&_
           " WHERE I.pkey IN ("& JIRAIss &") "&_
           " AND I.issuestatus = ISS.ID "&_
           " AND I.RESOLUTION = R.ID "&_
           " AND IT.ID = I.issuetype "&_
           " AND PR.ID = I.PRIORITY "

   rsTemp.Close()
   Set rsTemp = nothing

   Get_JIRA_Package_Issues = retVal

End Function

'----------------------------------------------------------------------------------------------------------------------------------------
Function  Get_JIRA_Issues ( SSsql, OOrsCQ )
   If OOrsCQ.State = 1 Then
      OOrsCQ.Close()
   End If

   On Error Resume Next
   OOrsCQ.ActiveConnection = JIRA_conn
   OOrsCQ.Source = SSsql
   OOrsCQ.CursorType = 0
   OOrsCQ.CursorLocation = 3
   OOrsCQ.LockType = 3
   OOrsCQ.Open()

   Get_JIRA_Issues = Err.Number

End Function
'--------------------------------------------------------------------------------------------------------------------------
%>
<%
'------------ 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>
<meta HTTP-EQUIV="Pragma" CONTENT="no-cache">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" href="scripts/deployment_manager.css" type="text/css">
<link rel="stylesheet" href="images/release_manager_style.css" type="text/css">
<link rel="stylesheet" href="images/navigation.css" type="text/css">
<script language="JavaScript" src="scripts/common.js"></script>
<script language="JavaScript" src="scripts/remote_scripting.js"></script>
<script language="JavaScript" type="text/javascript">
<!--

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

    // Set ajax divname
    ajaxdivname = rowId;

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

    //Progress
    //alert(MM_findObj( rowId ));

    //MM_findObj( rowId ).options[0] = new Option('Loading...','');
    //MM_findObj( rowId ).selectedIndex = 0;
    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);


}

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
    //alert(MM_findObj( rowId ));

    //MM_findObj( rowId ).options[0] = new Option('Loading...','');
    //MM_findObj( rowId ).selectedIndex = 0;
    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 );">
              <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%>
    </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%>
                </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">
                        <input name="btn" type="submit" class="form_btn" value="Mail Me Report">
                    <%
                        '<input name="btn" type="submit" class="form_btn" value="Show Me Report">
                    %>
                    </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>
                  <tr>
                    <td>
                    <%If (parRtagA <> "") AND (parRtagB <> "")Then%>
                        <!-- DIFF FILTER +++++++++++++++++++++++++++++++++++++++++++ -->
                        <fieldset style="width:150px;">
                        <legend><a href="javascript:;" class="body_scol" onClick="ToggleDisplay('divDiffFilter');" ><%=GetIsDiffFilterInUseIcon() %>&nbsp;Filter&nbsp;Results...</a></legend>
                        <div name="divDiffFilter" id="divDiffFilter" class="body_txt" style="display:none;">
                          <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 If%>
                    </td>
                    <td></td>
                  </tr>
                </table>

                <%
                Set FSO=Server.CreateObject("Scripting.FileSystemObject")
                Set NewTextFile=FSO.CreateTextFile(Server.MapPath("docs\compareBoms_"&objAccessControl.UserName&".html"), true)
                Call Header()

                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))


                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>")

                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>")

                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>
<%
    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
%>
<%
    Call Footer()
    NewTextFile.Close
    Set NewTextFile=Nothing
%>
                </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 );">
              <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>
<!-- FOOTER -->
<!--#include file="_footer.asp"-->
<%
If email Then

    Dim myMail, LocalPath
    Set myMail=Server.CreateObject("Persits.MailSender")
    LocalPath = Server.MapPath("docs\compareBoms_"&objAccessControl.UserName&".html")

    myMail.Host = SMTP_HOST
    myMail.Subject="BOM Comparisons from Deployment Manager"
    myMail.From="releasem@erggroup.com"
    myMail.AddAddress objAccessControl.UserEmail
    ' Attach the file
    myMail.AddAttachment LocalPath
    myMail.Body = "Your requested report..."
    myMail.Send

    set myMail=nothing

End If
%>
</body>
</html>
<%
Call Destroy_All_Objects
%>
<!--#include file="common/globals_destructor.asp"-->