<%@ language="javascript"%>
<% /*
     $Revision$
     $Id$

     File:          status_info.asp
     Beschrijving:  Toont de trackinginfo van een entiteit, waarbij entiteit wordt bepaald
                    door de meegegeven key
                    - mld_key = melding
                    - opdr_key = opdracht
                    - res_rsv_ruimte_key = reservering
                    - afspr_key = afspraak
                    - ... etc
    Note:           Met TAMPER bescherming!

*/%>
<!--#include file="../Shared/common.inc"-->
<!--#include file="../Shared/status.inc"-->
<!--#include file="../Shared/resultset_table_v2.inc" -->
<%
    protectQS.verify({ allowparams: ["outputmode", "showall", "autosortby", "no_autoscroll"]}); // tamper check
    var outputmode = getQParamInt("outputmode", 0);
%>
<html>
  <head>
<%  FCLTHeader.Generate({ outputmode: outputmode }); %>
    <script>
      function persoonDetails(evt, perslid_key)
      {
        FcltMgr.stopPropagation(evt);
        FcltMgr.openDetail("appl/fac/fac_user.asp?prs_key=" + perslid_key);
      }
    </script>
  </head>

  <body class="showbody">
<%
    var mld_key = getQParamInt('mld_key', -1);
    var opdr_key = getQParamInt('opdr_key', -1);
    var rsv_ruimte_key = getQParamInt('rsv_ruimte_key', -1);
    var afspr_key = getQParamInt('afspr_key', -1);
    var cnt_key = getQParamInt('cnt_key', -1);
    var ins_key = getQParamInt('ins_key', -1);
    var insc_key = getQParamInt('insc_key', -1);  // controle (inspectie)
    var fin_key = getQParamInt('fin_key', -1);
    var bes_key = getQParamInt('bes_key', -1);
    var ord_key = getQParamInt('ord_key', -1);
    var prs_key = getQParamInt('prs_key', -1);
    var kpn_key = getQParamInt('kpn_key', -1);
    var room_key = getQParamInt('room_key', -1);
    var urole = getQParam('urole', 'fe');
    var print = getQParam ("print", null);

    var entkey = mld_key != -1 ? mld_key : (opdr_key != -1 ? opdr_key : (rsv_ruimte_key != -1 ? rsv_ruimte_key : (afspr_key != -1 ? afspr_key : (cnt_key != -1 ? cnt_key : (ins_key != -1 ? ins_key : (fin_key != -1 ? fin_key : (bes_key != -1 ? bes_key : (ord_key != -1 ? ord_key : (room_key != -1? room_key : (prs_key != -1 ? prs_key : (kpn_key != -1 ? kpn_key : (insc_key != -1 ? insc_key : -1))))))))))));
    var enttype = mld_key != -1 ? 'melding' : (opdr_key != -1 ? 'opdracht' : (rsv_ruimte_key != -1 ? ['reservering', 'xreservering'] : (afspr_key != -1 ? 'afspraak' : (cnt_key != -1 ? 'contract' : (ins_key != -1 ? 'deel' : (fin_key != -1 ? 'factuur' : (bes_key != -1 ? 'bestelling' : (ord_key != -1 ? 'bestelopdr' : (room_key != -1? 'ruimte' : (prs_key != -1 ? 'perslid' : (kpn_key != -1 ? 'kostenplaats' : (insc_key != -1 ? 'controle' : 'unsupported'))))))))))));
    if (typeof enttype == 'string')
        enttype = [enttype];

    if (entkey != -1)
    {
      // Bij een status overzicht van een reservering kunnen ook afspraak/bezoekers en meldingen historie regels voorkomen
      var res_afspr_key = -1;
      var res_mld_key = [];
      if (rsv_ruimte_key > 0 && entkey == rsv_ruimte_key)
      { // Heeft de reservering ook een afspraak?
        sql = "SELECT ba.bez_afspraak_key"
            + "  FROM bez_afspraak ba"
            + " WHERE ba.res_rsv_ruimte_key = " + rsv_ruimte_key;
        oRs = Oracle.Execute(sql);
        if (!oRs.eof)
          res_afspr_key = oRs("bez_afspraak_key").value;

        // Heeft de reservering ook meldingen?
        sql = "SELECT m.mld_melding_key"
            + "  FROM mld_melding m"
            + " WHERE m.res_rsv_ruimte_key = " + rsv_ruimte_key;
        oRs = Oracle.Execute(sql);
        while (!oRs.eof)
        {
          res_mld_key.push(oRs("mld_melding_key").value);
          oRs.MoveNext();
        }
      }

     var sql11 = "SELECT tr.fac_tracking_datum"
          + "     , tr.fac_tracking_key"
          + "     , str.fac_srtnotificatie_code"
          + "     , pf.prs_perslid_naam_full"
          + "     , tr.prs_perslid_key"
          + "     , tr.fac_tracking_oms"
          + "     , tr.fac_tracking_refkey"
          + "     , str.fac_srtnotificatie_xmlnode"
          + "  FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf"
          + " WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key"
          + "   AND tr.prs_perslid_key = pf.prs_perslid_key (+)";

     sql = sql11
         + " AND (tr.fac_tracking_refkey = " + entkey + " AND str.fac_srtnotificatie_xmlnode IN (" + safe.quoted_sql_join(enttype) +")";

     if (res_afspr_key > 0)
          // Bewust: *hier* wordt niet getoond of bezoek binnen/buiten is gemeld; dat zie je alleen bij de afspraak
          // (dat is een andere dynamiek dan het wijzigen van de reservering, irrelevant hier)
          sql += " OR (tr.fac_tracking_refkey = " + res_afspr_key + " AND str.fac_srtnotificatie_xmlnode IN ('afspraak'))";
     if (res_mld_key.length > 0)
         sql += " OR (tr.fac_tracking_refkey IN (" + res_mld_key.join(",") + ") AND str.fac_srtnotificatie_xmlnode IN ('melding'))";
     sql += " )";

     // In Or-constructie komt er geen antwoord, zo wel.
     if (enttype[0] == "afspraak")
     {
        sql += " UNION "
            + sql11
            + " AND str.fac_srtnotificatie_xmlnode = 'bezoeker' "
            + " AND tr.fac_tracking_refkey IN (SELECT bez_bezoekers_key FROM bez_bezoekers WHERE bez_afspraak_key = " + entkey + ")";
     }

     // Op volgorde van invoer (key). Datum + tijd kan gelijk zijn.
     sql += " ORDER BY fac_tracking_datum DESC, fac_tracking_key DESC";

      function fncolCode(oRs)
      {
        var pretext = "";
        if (oRs("fac_srtnotificatie_xmlnode").value == "melding" && res_mld_key.length > 0)
        { // De reservering heeft ook meldingen
          pretext = safe.html(L("lcl_complain") + " " + oRs("fac_tracking_refkey").value + ": ");
        }

        // Toon de tekst van de omschrijving of als die leeg is gewoon de statustekst.
        if (oRs("fac_tracking_oms").value != null)
          var tekst = pretext + safe.html(oRs("fac_tracking_oms").value);
        else // fallback voor ongedefineerde teksten
          var tekst = pretext + status.getsrtnotificatietext(oRs("fac_srtnotificatie_code").value);
        return  tekst;
      }

      function fnPerslidNaamFull(oRs)
      {
        if (outputmode != 0)
            return safe.html(oRs("prs_perslid_naam_full").Value);

        if (oRs("prs_perslid_key").Value == user_key) {
            var html = "<span class='self'>"
                     + safe.html(oRs("prs_perslid_naam_full").Value)
                     + "</span>";
        } else {
            var html = "<span class='details' onclick='persoonDetails(event,"+ oRs("prs_perslid_key").Value +")'>"
                     + safe.html(oRs("prs_perslid_naam_full").Value)
                     + "</span>";
        }
        return html;
      }

      var buttons = [];
      buttons.push({ icon: "page_refresh.png", title: L("lcl_refresh"), action: "FcltMgr.reload()" });

      var rst = new ResultsetTable({ sql:sql,
                                     keyColumn: "fac_tracking_key",
                                     ID: "trackingtable",
                                     outputmode: outputmode,
                                     showAll: getQParamInt("showall", 0),
                                     buttons: buttons
                                   });

      rst.addColumn(new Column({caption: L("lcl_date"), content: "fac_tracking_datum", datatype: "date"}));
      rst.addColumn(new Column({caption: L("lcl_date_time"), content: "fac_tracking_datum", datatype: "time"}));
      params = {};
      if (typeof Session("Logging") != "undefined")
          params.tooltip = "fac_srtnotificatie_code";

      rst.addColumn(new Column({caption: L("lcl_mld_statuschange"), content: fncolCode, tooltip: params.tooltip}));
      if (S("mld_fe_show_statusnames") == 1 || urole != 'fe')
      {
        rst.addColumn(new Column({caption: L("lcl_mld_changedby"), content: fnPerslidNaamFull}));
      }

      var cnt = rst.processResultset();
    } // end of status info
%>
  </body>
</html>
