<![CDATA[
/*
    $Id$

    File:       scriptloader.wsf
    Calling:    cscript ..\..\utils\scriptloader.wsf %1
    Parameters: 0   pad en filenaam van het te gebruiken script.
                1   loglevel
    Context:    Generiek bestand om verschillende scriptfiles aan te kunnen roepen en gebruik
                te maken van putorder scripts.
    Note:       De code veronderstelt (nog) dat de current folder een cust/xxxx folder is
                Concreter: ../Oracle.udl wordt gebruikt
*/
]]>

<job id="IncludeGenExport">
  <script language="JScript" src="../wsf_shared.js"/>
  <script language="JScript" src="../putorders/puo_shared.js"/>
  <script language="JScript" src="../putorders/puo_settings.js"/>
  <script language="JScript" src="../putorders/puo_crackURL.js"/>
  <script language="JScript" src="../putorders/puo_XMLTools.js"/>
  <script language="JScript" src="../putorders/puo_base64.js"/>
  <script language="JScript" src="../putorders/puo_connector.js"/>
  <script language="JScript" src="../putorders/json2.js"/>
  <script language="JScript" src="../putorders/puo_md5.js"/>

  <script language="JScript">
    var loglevel = 9;
    // parameters
    if (WScript.Arguments.length > 1)
        loglevel = WScript.Arguments(1);

    var applicatieRun = new Date();
    var customerId = "XXXX";
    var customerUdl = "./Oracle.udl";
    var Oracle = ConnectThisOracle("scriptloader.wsf", customerUdl);

    var sql = "SELECT fac_version_cust FROM fac_version";
    var oRs = Oracle.Execute(sql);
    customerId = oRs(0).Value;
    oRs.Close();
    __Log("CustomerId: " + customerId);

    var fso  = new ActiveXObject("Scripting.FileSystemObject");
    // We zijn altijd gescheduled vanuit cust/XXXX
    /* global */ var custabspath = fso.GetAbsolutePathName("./");
    /* global */ var PUO_LOGPATH = "./";
    Log2File(0, "===========================================================");
    Log2File(0, "SCRIPTLOADER STARTED (" + toDateTimeString(applicatieRun) + ")");
    Log2File(2, "puo_loglevel: " + S("puo_loglevel"));

    clearDBLog();
    settings.loadSet();

    var process = loadscript();
    result = process.main();

    var endDate = new Date();
    var duration = Math.round((endDate - applicatieRun) / 10) / 100;
    Log2File(0, "SCRIPTLOADER FINISHED ({0}, duration {1}s)".format(toDateTimeString(endDate), duration));
//  WScript.Quit(1);


// FUNCTIES

    function ConnectThisOracle(modulename, udl)
    {
        try
        {
            var Oracle = new ActiveXObject("ADODB.Connection");
            Oracle.Open("File Name=" + udl);
            if (modulename)
            {   // Vind je terug in Toad/Session browser
                var sql = "BEGIN DBMS_APPLICATION_INFO.SET_MODULE (" + safe.quoted_sql(modulename) + ", NULL); END;";
                Oracle.Execute(sql);
            }
            sql = "BEGIN fac.initsession(NULL); END;"
            Oracle.Execute(sql);
            __Log("Session initiated: " + sql);
            return Oracle;
        }
        catch(e)
        {
            __Log("Unable to connect to Oracle ["+udl+"].");
            WScript.Quit(1);
        }
    }

    function clearDBLog()
    {
        // Als ik sowieso log in de database gooi ik alles leeg, anders alleen de lowprio regels zo die er al zijn
        sql = "DELETE FROM imp_log"
            + " WHERE imp_log_applicatie = '$SCRIPTLOADER$'";
        if (S("LogDestination",0) == 1)
        {
            sql += " AND imp_log_status IN ('I','D')";
        }
        Oracle.Execute(sql);
    }

    function include(jsFile)
    {
        // Met deze functie kunnen javascript bestanden met aanvullende functies als volgt worden toegevoegd:
        // (function ()
        //      {
        //          eval(include("inc.js"));
        //
        //          var L = {
        //              main: function ()
        //              {
        //              ...
        //
        // NB: bestanden mogen geen <% en %> bevatten.
        //
        try
        {
            var fso = new ActiveXObject("Scripting.FileSystemObject");
            var f = fso.OpenTextFile(jsFile);
            var s = f.ReadAll();
            f.Close();
            return s;
        }
        catch(e)
        {
            __Log("Fout bij include: "+e.message);
            throw e;
        }
    }

    function loadscript()
    {
        // Functie om het hoofd-script te laden. Deze ziet er als volgt uit:
        // (function ()
        //      {
        //          var L = {
        //              main: function ()
        //              {
        //                  ...
        //              },
        //              andere_functies: _andere_functies()
        //              {
        //                  ...
        //              }
        //              ...
        //          }
        //          return L;
        //      }
        // ).call();
        //
        var p = {main: function() { __Log("No script loaded."); }};
        if (WScript.Arguments.length > 0)
        {
            var script_path = WScript.Arguments(0);
            script_path = script_path.replace(/\\/g, "/");
            var fsp = new ActiveXObject("Scripting.FileSystemObject");
            try
            {
                p = eval(fsp.OpenTextFile(script_path, 1).ReadAll());
                Log2File(0, "SCRIPT ["+script_path+"] LOADED");
            }
            catch(e)
            {
                p = {main: function() { __Log("Error in script ["+script_path+"]."); }};
            }
        }
        return p;
    }

  </script>
</job>