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

    File:               mld_melding.asp
    Description:        Muteerscherm voor meldingen
                        dit is de grote 'wrapper' voor de diverse andere schermen
    Parameters:         urole
                        mld_key
                        verynew: we zijn heel erg nieuw (net aangemaakt)
                                 gevolg:==> mld_show_melding gaat allerlei 'auto-actions' vragen
                        noteonly: als gezet hide dan meldingblok en open noteblok
                        kto_type: B/M/R als het een (nieuwe) KTO melding is over Bestelling/Reservering/Melding
                        kto_key:  de BMR waarover het KTO gaat (indien kto_type)
    Context:
    Note:

*/ %>
<!--#include file="../Shared/common.inc" -->
<!--#include file="../Shared/iface.inc" -->
<!--#include file="mld.inc" -->
<%
FCLTHeader.Requires({plugins: ["suggest","jQuery"],
                          js: ["jquery-ui.js"],
                         css: ["../shared/suggest/suggest.css"]}); // css for childframes})

// AUTORISATIEPARAMETERS
var urole = getQParamSafe("urole", "xx");
var verynew = getQParamInt("verynew", 0) == 1;
var noteonly = getQParamInt("noteonly", 0) == 1;

// de melding waar het over gaat, kan leeg zijn voor nieuwe, maar dat mag niet met bo of mi
var mld_key = getQParamInt("mld_key", -1);
var copy = (getQParamInt("mld_copy", 0) == 1);
var standalone = (getQParamInt("standalone", 0) == 1);
var ins_key = getQParamInt("ins_key", -1); // nieuwe melding op dit object?

var kto_key = getQParamInt("kto_key", -1);
var kto_type = getQParam("kto_type", "");
if (kto_key > 0)
{
  // Is er al een KTO over deze B/M/R?
  var sql = "SELECT mld_melding_key FROM mld_melding"
          + " WHERE mld_melding_kto_key = " + kto_key
          + "   AND mld_melding_kto_type=" + safe.quoted_sql_upper(kto_type);
  var oRs = Oracle.Execute(sql);
  if (!oRs.Eof) {
    // Dan gaan we deze gewoon viewen?
    mld_key = oRs("mld_melding_key").Value;
  }
  oRs.Close();
}

// OVERIGE PARAMETERS

// def_kenmerk_link_key: Default person for flexfields, can be used from deeplink (e-mail notification)
// txt: default tekst
// act_key: fac_activiteit_key voor geplande meldingen
transitParam = buildTransitParam(["loc_key", "bld_key", "def_kenmerk_link_key", "txt", "ins_key", "meldbronkey",
                                  "verynew", "mld_copy", "rsv_ruimte_key", "fromkb", "tracking", "start_key",
                                  "act_key", "dienst", "cnt_key", "typeopdr", "txtreado", "kto_type", "kto_key"]);

if (mld_key >= 0)
{
  var mld_info = mld.mld_melding_info(mld_key);
  var mfe = mld.func_enabled_melding (mld_key); // heb ik uberhaubt leesrechten

  if (urole == "xx") // Voor als je via de shorturl binnen komt.
  {
    var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true, mld_info.disc);

    if (authparamsMLDFOF)
      urole = "fo";
    else
      urole = "fe";
  }
}

if (mld_key == -1 || copy)
{
    var isMeldracht = getQParamInt("meldracht", 0) == 1;
    if (isMeldracht)
      var page="mld_edit_meldracht.asp"; // Maak een nieuwe meldracht
    else
      var page="mld_edit_melding.asp"; // Maak een nieuw

    // strdisc MOET ik kunnen achterhalen om toe te kunnen voegen
    // Daarvoor gebruik ik de meest gedetailleerde van de meegegeven waarde(n)
    var mld_defaultstdmelding = getQParamInt("mld_defaultstdmelding", -1);
    if (copy)
    {
      // Bij copy is de key mld_key bekend, dus stdmelding is op te vragen.
    	mld_defaultstdmelding = mld_info.stdm;
    }
    if (mld_defaultstdmelding != -1)
    {
      sql = "SELECT ins_srtdiscipline_key, ins_discipline_key"
          + "  FROM mld_discipline, mld_stdmelding"
          + " WHERE mld_ins_discipline_key = ins_discipline_key"
          + "   AND mld_stdmelding_key IN (" + mld_defaultstdmelding + ")"
          + "   AND mld_stdmelding_verwijder IS NULL";
      oRs = Oracle.Execute(sql);
      var srtdisc = oRs("ins_srtdiscipline_key").value;
      var disc = oRs("ins_discipline_key").value;
      oRs.close();
    }
    else // misschien is disc meegegeven
    {
        var disc = getQParamInt("disc", -1);
        if (disc != -1)
        {
          sql = "SELECT ins_srtdiscipline_key"
              + "  FROM mld_discipline "
              + " WHERE ins_discipline_key = " + disc
              + "   AND ins_discipline_verwijder IS NULL";
          oRs = Oracle.Execute(sql);
          srtdisc = oRs("ins_srtdiscipline_key").value;
        }
        else
        {
          if (kto_key > 0)
            var srtdisc = S("kto_srtdiscipline_key");
          else
            var srtdisc = getQParamInt("srtdisc", -1);
        }
    }
    if (mld_defaultstdmelding > 0)
      transitParam += "&mld_defaultstdmelding=" + mld_defaultstdmelding;
    if (disc > 0)
      transitParam += "&disc=" + disc;

    if (urole == "xx")
    {
        var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true, disc);
        if (mld_key < 0)
        {
          var mldfof_write = authparamsMLDFOF && (authparamsMLDFOF.PRSwritelevel < 9 && authparamsMLDFOF.ALGwritelevel < 9);
          if (mldfof_write)
            urole = "fo";
          else
            urole = "fe";
        }
        else
        {
          if (authparamsMLDFOF)
            urole = "fo";
          else
            urole = "fe";
        }
    }
}
%>

<html>
  <head>
<%
    FCLTHeader.Generate();
%>
    <script  type="text/javascript" >
      var verynew="1";
      <% if (mld_key == -1 || copy) { %>FcltMgr.startEdit(window);<% } %>
      function meldingClose(params)
      {
        if (params.keepForm) // er is iets fout bij het opslaan
            return;
        if (params.redirect)
        {
            window.location.href = params.redirect;
            return true;
        }
<%      if (mld_key == -1 || copy)
        { %>
          if (params.cancel || params.close)
          {
            FcltMgr.closeDetail(window, params );
            return true;
          }
          FcltMgr.setTitle("<%=L("lcl_complain")%> " + params.mld_key, {hot:false});  //TODO prefix erbij
          // nieuwe melding, ga verder in 'verynew' modus
          if (params.autoorder)
          {
            var data = { mld_key: params.mld_key,
                         urole: "<%=urole%>",
                         autoorder: 1
                       };
            <% protectRequest.dataToken("data"); %>
            $.ajax({ type: 'POST',
                     url: "../mld/mld_edit_opdr_save.asp",
                     data: data,
                     success: FcltCallback,
                     dataType: "json",
                     async: false
                   });
            verynew="0"; // zo nieuw zijn we niet meer.
          }

<%        if (standalone)
          { %>
            window.location.href = "../Shared/empty.asp?msg=" + "lcl_mld_close_standalone";
            return true;
<%        } %>

          // Altijd complete reload, we hebben nu een mld_key namelijk
          window.location.href = "mld_melding.asp?verynew="+verynew+"&urole=<%=urole%>&mld_key=" + params.mld_key;
<%      }
        else
        { // Bestaande melding bewerkt, switch naar show-mode
%>
          $("#mldFrame")[0].src = "mld_show_melding.asp?urole=<%=urole%>&mld_key=<%=mld_key%>";
          var ifrm = $("#noteFrame"); // Deze (voor de tracking) verversen
           if (ifrm.length)
               ifrm.attr("src", ifrm.attr("src").replace(/&autoscroll=1/gi, ""));
<%      } %>
      }
    </script>
  </head>

  <body>
<%
    if (mld_key == -1 || copy)
    {
      if (srtdisc > 0)
        transitParam += "&srtdisc=" + srtdisc;
      else
      {
        //Dan maar vragen
        var buttons = [];
        // Give the user a list and let him select a srtdiscipline.
        mySRTsql = mld.srtdisc_sql(isMeldracht ? "WEB_ORDUSE" :(urole=='fe' ? "WEB_MLDUSE" : "WEB_MLDFOF"),
                                        { ins_key: ins_key });
        oRs = Oracle.Execute(mySRTsql);
        while (!oRs.eof)
        {
          srtdisc = oRs("ins_srtdiscipline_key").value;
          buttons.push({ title: oRs("ins_srtdiscipline_omschrijving").value,
                         action: "srtdisc=" + srtdisc + ";$('div#dmodal').dialog('close').remove();"
                       });
          oRs.MoveNext();
        }

        if (buttons.length == 0)
        {
            shared.simpel_page(L("lcl_no_auth"));  // Response.End;
        }
        else if (buttons.length == 1)
        {
          transitParam += "&srtdisc=" + srtdisc;
        }
        else
        {
          var tpage = page;
          var page="../shared/empty.html";  //achtergrondpagina
%>        <script>
            srtdisc = -1;
            function dialogClose()
            {
              if (srtdisc== -1)
                FcltMgr.closeDetail(window, { cancel: true } );
              else
                $("#mldFrame")[0].src = "<%=tpage%>?urole=<%=urole%>&mld_key=<%=mld_key%><%=transitParam%>&srtdisc="+srtdisc;
            }
            $(document).ready(function()
                              {
                                var params = { title: "<%=L("lcl_mld_choose_srt")%>",
                                               modal: true,
                                               width : 300,
                                               resizable : false,
                                               close : dialogClose
                                             };
                                FcltMgr.fixActiveelementError();
                                $('div#dmodal').dialog(params).dialog('open');
                              });
          </script>
          <div id="dmodal" style="display:none">
<%          if (buttons.length)
              CreateButtons(buttons, { vertical: 1, isDialog: true } )
            else
              Response.write(L("lcl_mld_choose_na")); %>
          </div>
<%      }
      }
    }
    else
    {
      var page="mld_show_melding.asp";
    }
    // 1. Het hoofdframe
    page += "?urole=" + urole + "&mld_key=" + mld_key + transitParam;
    IFRAMER("mldFrame", page, { initHeight: "450px",
                                FcltClose: "meldingClose",
                                initHide: noteonly
                              } );

    // Bij het kopiëren van een melding zijn deze iframes niet van belang.
    // Bij het opslaan van de copy melding worden deze gegevens niet opgeslagen en zullen ze initieel leeg zijn. Daarom gegevens van orginele melding niet tonen.
    if (mld_key > -1 && !copy)
    {
      if (mfe && mfe.canReadNotes)
      {
        // Let op: dit kan vertrouwelijke info zijn. Controle op canWriteFO/BO kan niet lazy (evt wel specifiek)
        if (S("mld_note_mode") == 2 && (urole == 'fo' || urole == 'bo')) // new style
        {
            page = "mld_show_note2.asp?urole=" + urole + "&mld_key=" + mld_key + transitParam;
            if (S("mld_note_autoscroll"))
                page += "&autoscroll=1";

            IFRAMER("noteFrame", page, { refreshOnClose: true } );
        }
        else // Old style voor FE
        {
            var showFENote = false;
            if (urole == "fe")
            {
              sql = "SELECT n.mld_melding_note_flag"
                  + "  FROM mld_melding_note n"
                  + " WHERE n.mld_melding_note_flag = 1"
                  + "   AND n.mld_melding_key = " + mld_key;
              oRs = Oracle.Execute(sql);
              showFENote = !oRs.eof;
            }
            page = "mld_show_note.asp?embedded=1&urole=" + urole + "&mld_key=" + mld_key + transitParam;
            IFRAMER("noteFrame", page, {refreshOnClose: true, initHide: !noteonly && S("note_collapsed") && !showFENote } );
        }
      }

      // 2. Het optionele workflowframe
      sql = "SELECT '' startofworkflow FROM mld_melding"
          + " WHERE mld_melding_start_key <> mld_melding_key AND mld_melding_start_key = " + mld_key;
      oRs = Oracle.Execute(sql);
      if (!oRs.eof)
      {
        page="workflow_info.asp?embedded=1&urole=" + urole + "&mld_key=" + mld_key;
        IFRAMER("mldworkflow", page, { refreshOnClose: true, initHide: S("workflow_collapsed") } );
      }

      // Controleer of dit soort meldingen een BES component heeft of gedefinieerde MLD opdrachttypes.
      // Bovendien hebben deze frames pas zin als de status minstens Geaccepteerd is
      // (Alleen BO mag aanmaken, kan dat gelijk na invoer doen, maar zo niet dan eerst accepteren)
      var showbes = false;
      var showord = false;
      var ordzichtbaarfe = false;
      if (mld_info.mld_status >= 4 ) {  // niet afgewezen(1), ingevoerd(2) of ingezien(3)
        showbes = mld_info.show_bes; // Heeft voor een gegeven (srt)discipline een vaste waarde
        // De opdrachttypes behorende bij de srtdiscipline of bij de discipline
        sql = "SELECT mld_typeopdr_srtdiscipline_key"
            + "     , mto.mld_typeopdr_zichtbaarfe"
            + "  FROM ins_srtdiscipline sd"
            + "     , mld_discipline d"
            + "     , mld_typeopdr_srtdiscipline tsd"
            + "     , mld_typeopdr mto"
            + " WHERE tsd.ins_srtdiscipline_key = sd.ins_srtdiscipline_key"
            + "   AND tsd.ins_discipline_key IS NULL"
            + "   AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key"
            + "   AND tsd.mld_typeopdr_key = mto.mld_typeopdr_key"
            + "   AND d.ins_discipline_key = " + mld_info.disc
            + " UNION ALL"
            + " SELECT mld_typeopdr_srtdiscipline_key"
            + "     , mto.mld_typeopdr_zichtbaarfe"
            + "  FROM ins_srtdiscipline sd"
            + "     , mld_discipline d"
            + "     , mld_typeopdr_srtdiscipline tsd"
            + "     , mld_typeopdr mto"
            + " WHERE tsd.ins_discipline_key = d.ins_discipline_key"
            + "   AND tsd.ins_discipline_key IS NOT NULL"  // overbodig, maar wel duidelijk verschil met eerste clause
            + "   AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key"
            + "   AND tsd.mld_typeopdr_key = mto.mld_typeopdr_key"
            + "   AND d.ins_discipline_key = " + mld_info.disc
            + " ORDER BY 1 DESC";   // zodat echte waarden eerder komen dan de null-waarden
        oRs = Oracle.Execute(sql);
        if (!oRs.eof)
          showord = true;
        while (!oRs.eof)
        { // Alle opdrachttypes doorlopen. Wellicht zit er een opdrachttype bij die wel door de fe zichtbaar is en die mogelijk opdrachten bevat die de fe mag zien.
          ordzichtbaarfe = ordzichtbaarfe || (oRs("mld_typeopdr_zichtbaarfe").value == 1 && user.isCollega(mld_info.melder_key)); // Het moet ook mijn eigen melding zijn (of van persoon waar ik vervanger van ben).
          oRs.MoveNext();
        }
        oRs.close();  // de overige records interesseren me in het geheel niet, ik weet al genoeg.
      }

      var hasParent = mld_info.parent_key != null; // dan geen opdrachten of bestellingen
      if (!hasParent && mfe.canReadAny) // Mocht ik geen leesrechten hebben, dan ook de opdrachten en bestellingen niet tonen.
      {
          var this_opdr = mld.func_enabled_mld(mld_info.disc, "D"); // wat mag ik zoal op een nieuwe melding
          if ((this_opdr.canORDBOFread || ordzichtbaarfe) && showord)  //TODO en: ik moet readrechten hebben op opdrachten (=?).
          { // Als ik ORDBOF leesrechten heb dan de opdrachtenlijst tonen met de bo rechten. Anders zie ik misschien niet alle opdrachten terwijl ik wel de rechter er voor heb.
            page = "opdr_list.asp?tiny=1&urole=" + (this_opdr.canORDBOFread? "bo" : urole) + "&mld_key=" + mld_key + transitParam;
            IFRAMER("opdrFrame", page, { refreshOnClose: true, initHide: false } );
          }

          if (showbes)
          { // Heb ik readrechten op bestelaanvragen?
            var bresult = user.func_enabled("BES",
                                            null, // ins_discipline_key
                                            null, // alg_key
                                            null, // prs_key
                                            null, // checkOptimistic
                                            true); // isOptional
            var canReadAny = bresult.canRead("WEB_BESBOF") ||
                             bresult.canRead("WEB_BESBAC") ||
                             bresult.canRead("WEB_BESFOF") ||
                             bresult.canRead("WEB_BESUSE");
            // Bij BO en FO rechten kun je in het bestellingsoverzicht ook bestellingen met de + knop toevoegen
            var role = urole;
            if (bresult.canRead("WEB_BESFOF"))
              role = "fo";
            else if (bresult.canRead("WEB_BESBOF"))
              role = "bo";

            if (canReadAny)
            { // TODO: Eigenlijk moet bes_list.asp geen urole meer gebruiken
              page = "../bes/bes_list.asp?tiny=1&groupby=0&urole=" + role + "&mld_key=" + mld_key + "&tiny=1" + transitParam;
              IFRAMER("mldopdrFrame", page, { refreshOnClose: true, initHide: true } );
            }
          }
      }
    }
%>
  </body>
</html>
