// UnicaStatusResponse.js
// Haalt statuswijzigingen op van Unica.
//
// $Revision$
// $Id$
//
// 


var str = WScript.Arguments(0); // udlpath
var prs_bedrijf_key = WScript.Arguments(1); // prs_bedrijf_key
var fac_update_opdr_url = WScript.Arguments(2);
var username = "";
var wachtwoord = "";



function GetUnicaStatus()
{
    var XMLReq  ="<?xml version='1.0'?>"
                +"<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:unic='http://unica.nl/'>"
                +"   <soapenv:Header>"
                +"      <unic:Authentication>"
                +"         <unic:username>" + username + "</unic:username>"
                +"         <unic:password>" + wachtwoord + "</unic:password>"
                +"      </unic:Authentication>"
                +"   </soapenv:Header>"
                +"   <soapenv:Body>"
                +"      <unic:getRegistrationStatusXML>"
                +"        <unic:from>"+ laatste_sync +"</unic:from>"
                +"        <unic:to>"+ nieuwe_sync +"</unic:to>"
                +"        <unic:all>true</unic:all>"
                +"      </unic:getRegistrationStatusXML>"
                +"   </soapenv:Body>"
                +"</soapenv:Envelope>"

    WScript.Echo("Bericht = " + XMLReq);

    var objXMLHTTP = new ActiveXObject("MSXML2.ServerXMLHTTP.6.0")

    objXMLHTTP.open("POST", mldorder_adres, false);
    objXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
    objXMLHTTP.send(XMLReq);

    WScript.Echo("Ophalen status: " + objXMLHTTP.status);
    dataReceived = false;

    if (objXMLHTTP.status==200)
    {
        WScript.Echo("Gelukt, status = " + objXMLHTTP.status);
        responseText = "" + objXMLHTTP.responseText;
        WScript.Echo("responseText = " + responseText);
        url = fac_update_opdr_url;
        WScript.Echo("url = " + url);
        XMLReq = responseText;

        // Resultaat aanbieden aan de opdr_soap_api
        objXMLHTTP.open("POST", url, false);
        objXMLHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
        objXMLHTTP.send(XMLReq);

        WScript.Echo("Status: " + objXMLHTTP.status);
        WScript.Echo("StatusText: " + objXMLHTTP.statusText);
        WScript.Echo("Result: " + objXMLHTTP.responseText);

       if (objXMLHTTP.status == 200)
       {
           sql =  "UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = '" + nieuwe_sync + "' WHERE prs_kenmerklink_key = " + prs_kenmerklink_key;
           WScript.Echo (sql);
           Oracle.Execute(sql);
           dataReceived = true;
       }
       else
       {
           WScript.Echo("Mislukt, status = " + objXMLHTTP.status);
           WScript.Echo(objXMLHTTP.statusText);
       }
    }
    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   prs_bedrijf_naam, "
     + "         prs_bedrijfadres_URL, "
     + "         DECODE ( prs_kenmerklink_waarde, null, null, prs_kenmerklink_waarde) laatste_sync,"
     + "         TO_CHAR ( "
     + "            LEAST ( "
     + "               TO_DATE ( "
     + "                  DECODE (prs_kenmerklink_waarde, "
     + "                          NULL, NULL, "
     + "                          prs_kenmerklink_waarde), "
     + "                  'yyyy-mm-dd hh24:mi:ss') "
     + "               + 4 / 24, "            // Indien het interval te groot wordt kiezen we voor een interval van 4 uur.
     + "               SYSDATE - (1 / 96)), "    // We kiezen een kwartier marge om tijdsverschillen tussen servers op te vangen.
     + "            'yyyy-mm-dd hh24:mi:ss') nieuwe_sync, "
     + "         prs_kenmerklink_key,"
     + "         ba.prs_bedrijfadres_username, "
     + "         ba.prs_bedrijfadres_password "
     + "    FROM prs_bedrijf b, prs_kenmerklink kl, prs_bedrijfadres ba"
     + "   WHERE b.prs_bedrijf_key = " + prs_bedrijf_key
     + "     AND b.prs_bedrijf_key = ba.prs_bedrijf_key"
     + "     AND ba.prs_bedrijfadres_type = 'B'"    // type B wordt gebruikt voor statusterugkoppelingen
     + "     AND b.prs_bedrijf_key = kl.prs_link_key"
     + "     AND kl.prs_kenmerk_key = 1";  // timestamp laatste synchronisatie yyyy-mm-dd hh24:mi:ss

WScript.Echo (sql);

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

   mldorder_adres = "" + oRs("prs_bedrijfadres_URL").Value;
   laatste_sync = oRs("laatste_sync").Value;
   nieuwe_sync = oRs("nieuwe_sync").Value;
   username = oRs("prs_bedrijfadres_username").Value;
   wachtwoord = oRs("prs_bedrijfadres_password").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 (GetUnicaStatus()) WScript.Quit(0);
                 else   WScript.Quit(1);
  }
catch (e)
{
    WScript.Echo("Serieuze fout in UnicaStatusResponse.js: " + e.description)
    WScript.Quit(1);
}