<%
/*
     $Revision$
     $Id$

     File:              API_mareon.inc
     Description:       Algemene API functies die MARX gebruikt

     Parameters:        Een xml
     Status:
     Context:
     Notes:
*/
%>

<%

function xmlNodeVal(xml, strQuery)
{
    var node = xml.selectSingleNode(strQuery);
    if (node)
        return node.text;
    else
        return null;
}

function xmlNodeVal_NS (p_xml, p_namespace, p_nodename)
{
  var l_result;
  if (p_namespace)
  {
    p_xml.setProperty ("SelectionNamespaces", p_namespace);
  }

  var l_result = xmlNodeVal(p_xml, p_nodename);
  return (l_result);
}

function xmlNodeVal_NS_default (p_xml, p_namespace, p_nodename, p_default_value)
{
  var l_result;
  var l_result = xmlNodeVal_NS (p_xml, p_namespace, p_nodename);
  if (l_result == null) l_result = p_default_value;
  return (l_result);
}

function marx_get_puo_immediate ()
{
  var l_puo_immediate = 0;
  var sql = "SELECT LEAST(COALESCE(fac.safe_to_number(fac_usrdata_omschr),0),1) puo_immediate FROM fac_usrdata WHERE fac_usrtab_key = 1 AND fac_usrdata_upper = '$MARX_PUO_IMMEDIATE'";
  var oRs = Oracle.Execute(sql);
  if (!oRs.eof)
  {
      l_puo_immediate = oRs("puo_immediate").Value;
  }
  oRs.close();

  return(l_puo_immediate);
}


function marx_force_putorders (p_mld_opdr_key, maxdelay)
{
    // De notificaties staan al in de queue met tot 30 (S(noti_delay_mode)) seconde delay
    // Het enige wat we hier nog doen is ze naar voren halen
    // Als er meerdere notificaties zijn worden ze allemaal naar voren gehaald
    // zodat putorders niet meerdere keren hoeft op te starten
    if (typeof maxdelay == "undefined")
    {
      maxdelay = 5;
    }

    // Zoek alle notificaties voor onze opdracht naar externe systemen
    var sql = "SELECT fac_notificatie_key,"
            + "       fac_notificatie_datum, "
            + "       fac_notificatie_notbefore"
            + "  FROM fac_notificatie fn, fac_srtnotificatie fsn"
            + " WHERE fn.fac_srtnotificatie_key = fsn.fac_srtnotificatie_key"
            + "   AND fac_srtnotificatie_xmlnode = 'opdracht'"
            + "   AND fac_notificatie_refkey = " + p_mld_opdr_key
            + "   AND prs_bedrijfadres_key IS NOT NULL"
            + " ORDER BY fac_notificatie_key";

    var oRs = Oracle.Execute(sql);
    var newbefore = null;
    while (!oRs.EOF)
    {
      if (!newbefore) // eerste/oudste is maatgevend
      {
        var newbefore = new Date(oRs("fac_notificatie_datum").Value);
        newbefore.setSeconds(newbefore.getSeconds() + maxdelay);
      }
      __Log("ORDUPD Notification dated {0} moved notbefore from {1} to {2}".
                format(toDateTimeString(oRs("fac_notificatie_datum").Value, true),
                       toDateTimeString(oRs("fac_notificatie_notbefore").Value, true),
                       toDateTimeString(newbefore, true)));

      sql = "UPDATE fac_notificatie"
          + "   SET fac_notificatie_notbefore = " + newbefore.toSQL(true, true) // with time and seconds
          + " WHERE fac_notificatie_key = " + oRs("fac_notificatie_key").Value;
      Oracle.Execute(sql);

      oRs.MoveNext();
    }
    oRs.Close();
}

%>
