// GetStruktonStatus.js
// Haalt statuswijzigingen op van Strukton opdrachten binnen een opgegeven tijdsinterval.
// Dit interval wordt opgeslagen in de database. Kan daarna via GEN_IMPORT ingelezen worden
//
// $Revision$
// $Id$
//
// Opzet in kader van AAXX door AEG
// Twee parameters: UDL voor database connectie en optioneel proxy-ip

var str = WScript.Arguments(0); // udlpath
var prs_bedrijf_key = WScript.Arguments(1); // prs_bedrijf_key

function GetStruktonStatus()
{
    var XMLReq=  "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">"
                +"   <soapenv:Header/>"
                +"   <soapenv:Body>"
                +"      <GetServiceRequestStatus>"
                +"         <Status>"
                +"            <CustomerID>" + prs_leverancier_nr + "</CustomerID>"
                +"            <ReferenceID></ReferenceID>"
                +"            <ServiceRequestID></ServiceRequestID>"
                +"            <BeginDateTime>"+ laatste_sync +"</BeginDateTime>"
                +"            <EndDateTime>"+ nieuwe_sync +"</EndDateTime>"
                +"         </Status>"
                +"      </GetServiceRequestStatus>"
                +"   </soapenv:Body>"
                +"</soapenv:Envelope>";
    WScript.Echo("Bericht = " + XMLReq);
    var objXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0")

    var SXH_OPTION_SELECT_CLIENT_SSL_CERT = 3;
/*  objXMLHTTP.open("POST",
                    "https://b2bdev.ws.strukton.com:443/XISOAPAdapter/MessageServlet?channel=Facilitor:BS_ServiceRequest:S_WS_STATUS",
                    false,
                    "Facilitor",
                    "Facilit0r!"); */
    objXMLHTTP.open("POST",
                    mldorder_adres,
                    false,
                    uname,
                    pword);
    objXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    objXMLHTTP.setOption(SXH_OPTION_SELECT_CLIENT_SSL_CERT) = order_certificate;
    objXMLHTTP.send(XMLReq);

    dataReceived = false;
    if (objXMLHTTP.status==200)
    {   // Geldigheid XML wordt gecontroleerd door GEN_IMPORT
        WScript.Echo("Gelukt, status = " + objXMLHTTP.status);
        responseText = "" + objXMLHTTP.responseText;
        //WScript.Echo("resultaat = " + resultaat.indexOf("<ErrorLog><Note>Geen items gevonden</Note></ErrorLog>"));
        //if resultaat.substr("<ErrorLog><Note>Geen items gevonden</Note></ErrorLog>")
        if (responseText.indexOf("<ErrorLog><Note>Resultaatset bevat geen records</Note></ErrorLog>") == -1) {
            dataReceived = true;
            oStream = new ActiveXObject("ADODB.Stream");
            oStream.Open();
            oStream.Type = 1; // adTypeBinary
            oStream.Write(objXMLHTTP.responseBody); // responseText geeft encoding problemen!
            oStream.SaveToFile (fileName, 2); // adSaveCreateOverWrite
            oStream.Close();
        }
        sql =  "UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = '" + nieuwe_ts + "' WHERE prs_kenmerklink_key = " + prs_kenmerklink_key;
        WScript.Echo (sql);
        Oracle.Execute(sql);
    }
    else
    {
        WScript.Echo("Mislukt, status = " + objXMLHTTP.status);
        WScript.Echo(objXMLHTTP.statusText);
    }
    return dataReceived;
}

var udlstr = 'File Name='+str;
var Oracle = new ActiveXObject("ADODB.Connection");
Oracle.Open(udlstr);

var sql = "ALTER SESSION SET nls_territory='AMERICA'";
Oracle.Execute(sql)

sql =  "SELECT   b.prs_bedrijf_naam, "
     + "         ba.prs_bedrijfadres_url, "
     + "         ba.prs_bedrijfadres_certificate, "
     + "         ba.prs_bedrijfadres_username, "
     + "         ba.prs_bedrijfadres_password, "
     + "         b.prs_leverancier_nr, "
     + "         decode (kl.prs_kenmerklink_waarde, null, null, to_char(to_date(kl.prs_kenmerklink_waarde, 'yyyy-mm-dd hh24:mi:ss'), 'yyyy-mm-dd')||'T'||to_char(to_date(kl.prs_kenmerklink_waarde, 'yyyy-mm-dd hh24:mi:ss'), 'hh24:mi:ss')) laatste_sync, "
     + "         to_char(sysdate - (1/96), 'yyyy-mm-dd') || 'T' || to_char(sysdate - (1/96), 'hh24:mi:ss') nieuwe_sync, "
     + "         to_char(sysdate - (1/96), 'yyyy-mm-dd hh24:mi:ss') nieuwe_ts, "
     + "         kl.prs_kenmerklink_key"
     + "    FROM prs_bedrijf b, prs_bedrijfadres ba, prs_kenmerklink kl"
     + "   WHERE b.prs_bedrijf_key = " + prs_bedrijf_key
     + "     AND b.prs_bedrijf_key = ba.prs_bedrijf_key"
     + "     AND ba.prs_bedrijfadres_type = 'O'"
     + "     AND ba.mld_typeopdr_key = 281"
     + "     AND b.prs_bedrijf_key = kl.prs_link_key"
     + "     AND kl.prs_kenmerk_key = 1020";  // Tijdstip laatste synchronisatie

WScript.Echo (sql);

WScript.Echo(new Date());
try
{
   var oRs = Oracle.Execute(sql);

   var fileName = "strukton.xml";
   mldorder_adres = "" + oRs("prs_bedrijfadres_url").Value;
   mldorder_adres = mldorder_adres.replace("CREATE", "STATUS");
   order_certificate = "" + oRs("prs_bedrijfadres_certificate").Value;
   uname = "" + oRs("prs_bedrijfadres_username").Value;
   pword = "" + oRs("prs_bedrijfadres_password").Value;
   laatste_sync = oRs("laatste_sync").Value;
   nieuwe_sync = oRs("nieuwe_sync").Value;
   nieuwe_ts = oRs("nieuwe_ts").Value;
   prs_leverancier_nr = oRs("prs_leverancier_nr").Value;
   prs_kenmerklink_key = oRs("prs_kenmerklink_key").Value;
   WScript.Echo("Inlezen statusberichten van bedrijf: " + oRs("prs_bedrijf_naam").Value + " via url: " + mldorder_adres);
   oRs.close();

   if (GetStruktonStatus()) WScript.Quit(0);
                     else   WScript.Quit(1);
}
catch (e)
{
    WScript.Echo("Serieuze fout in GetStruktonStatus.js: " + e.description);
    WScript.Quit(1);
}
