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

    File:               mld_forward.asp
    Description:        Doorsturen van een melding naar een andere vakgroep of behandelteam
    Parameters:         mld_melding_key

    Context:
    Note:               Merk op dat je ook naar vakgroepen mag sturen waar je normaal
                        geen rechten voor hebt!
                        Als S("mld_forward_all") == 0 dan alleen naar dezelfde srtdiscipline

*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/stdmeldingselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="mld.inc" -->
<%
FCLTHeader.Requires({ plugins: ["jQuery", "kenmerk"],
                      js: ["../mld/mld_edit_melding.js"] })
%>
<html>
  <head>
<%  FCLTHeader.Generate(); %>
<%
    var mld_key = getQParamInt("mld_key");
    var this_mld = mld.func_enabled_melding(mld_key);

    // AUTORISATIEPARAMETERS
    var urole = getQParamSafe("urole");
    var fronto = urole == "fo";
    var backo  = urole == "bo";
    var minfo  = urole == "mi";
    var frontend = (!fronto && !backo && !minfo);

    var autfunction = '';
    if (fronto)
      autfunction = 'WEB_MLDFOF';
    else if (backo)
      autfunction = 'WEB_MLDBOF';
    else
      autfunction = 'WEB_MLDUSE';

    var authparams = user.checkAutorisation(autfunction); // Dit is nog ongeacht de melding

    var mld_melding = mld.mld_melding_info(mld_key);
    var stdm_info = mld.mld_stdmeldinginfo(mld_melding.stdm_key);
    var eigenMelding = user.isCollega(mld_melding.melder_key);

    var ins_srtdiscipline_kostenklant = stdm_info.ins_srtdiscipline_kostenklant || 0;
    if (frontend)
        stdm_info.hide_kostenplaats = (ins_srtdiscipline_kostenklant & 2) == 2;
    else
        stdm_info.hide_kostenplaats = (ins_srtdiscipline_kostenklant & 8) == 8;


    lcl.set_dialect(mld_melding.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");

    // Wat gaan we doen? (fwdType:)
    // 1. Vakgroep wijzigen (= Corrigeren)
    // 2. Behandelteam wijzigen (= Doorsturen)
    var fwdInfo = mld.getFwdType(mld_key, this_mld, mld_melding);
    var fwdType = getQParamInt("fwdType", fwdInfo.fwdType);
    var behandelteam_key = getQParamInt("behandelteam_key", -1);

    // Correcte fwdType binnen gekregen?
    user.anything_todo_or_abort((fwdType & fwdInfo.fwdType) && (fwdType == 1 || fwdType == 2));

    // Hebben we de juiste rechten?
    user.auth_required_or_abort(fwdType == 1 ? (this_mld.canForward || this_mld.canFixMelding) : this_mld.canForwardTeam);

    var prsautlevel = (this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel);
    // Als ik geen PRS-schrijfrechten op de melding heb, maar ik ben wel blokbehandelaar, dan mag ik gewoon iedereen uit mijn team kiezen. Niet optimaal, maar goed genoeg voor nu
    if ((!prsautlevel || prsautlevel == 9) && this_mld.canChangeKenmerkBlok) {
      prsautlevel = -1;
    }
%>

    <script>

      var mld_key = <%=mld_key%>;
      var user_key = <%=user_key%>;
      var canChange = (<%=this_mld.canChange? 1 : 0%> == 1);
      var canFlexChange = (<%=this_mld.canFlexChange? 1 : 0%> == 1);
      var canChangeKenmerkBlok = (<%=this_mld.canChangeKenmerkBlok? 1 : 0%> == 1);
      var showConfidential = (<%=this_mld.canViewConfidential? 1 : 0%> == 1);
      var melder_key = <%=mld_melding.melder_key%>;
      var srtdisc_key = <%=mld_melding.srtdisc_key%>;
      var disc_key = <%=mld_melding.disc_key%>;
      var prsautlevel = <%=prsautlevel%>;
      var show_alg = (<%=mld_melding.show_alg? 1 : 0%> == 1);
      var loc_key = <%=mld_melding.loc_key || -1%>;

      async function mld_forward()
      {
        document.activeElement.blur(); // trigger laatste onChanges

        // Standaard checks op verplichte velden, datum formaat, numeriek en float formaat, currency formaat.
        if (!await validateForm("u2"))
          return false;

        $.post( $("form[name=u2]")[0].action
              , $("[name=u2]").serialize()
              , FcltCallbackAndThenAlways(mld_forward_callback)
              , "json");

        return true; // disable button
      }

      function mld_forward_callback(jdata)
      {
          if (jdata.success)
          {
              // Moet er voor de melding met een nieuwe stdmelding automatisch een opdracht aangemaakt worden?
              if (jdata.autoorder)
              {
                var data = { mld_key: mld_key,
                             autoorder: 1
                           };
                if (jdata.message)
                  data.message = jdata.message;
                <% protectRequest.dataToken("data"); %>
                $.post("mld_edit_opdr_save.asp",
                       data,
                       FcltCallbackAndThenAlways(afsluiten),
                       "json");
              }
              else
                afsluiten(jdata);
          }
          else
              iface.button.enable("btn_forward_submit");
      }

      function afsluiten(jdata)
      { // Sluit onszelf.
          FcltMgr.closeDetail(window, { warning: jdata.warning, success: true });
      }

      function mld_cancel()
      {
        FcltMgr.closeDetail(window, { cancel: true } );
      }

      function onChangeVakgroep(vakgroep_key)
      {
        // Verplichte flexkenmerken verwijderen.
        $(".flexblock").remove();
        FcltMgr.resized();

        // Melding leegmaken
        sgStdm.setValue(-1, "", false, false, null, true);
        sgStdm.CheckJustOne();

        if (typeof sgBehandelaar != "undefined")
        {
          if (vakgroep_key == -1) // Efficiënter
            sgBehandelaar.setValue(-1, "", false, false);
          else
            sgBehandelaar.setValue($("#sBehandel").val(), $("#sBehandel_show").val(), false /*doonChange*/, true /*checkExist*/);
        }
      }

      function onChangeBehandelteam(beh_team_key)
      {
        if (typeof sgBehandelaar2 != "undefined")
        {
          if (beh_team_key == -1) // Efficiënter
            sgBehandelaar2.setValue(-1, "", false, false);
          else
            sgBehandelaar2.setValue($("#sBehandel2").val(), $("#sBehandel2_show").val(), false /*doonChange*/, true /*checkExist*/);
        }
      }

      function process_stdm_info(data, textStatus)
      {
        // Zet de discipline indien niet ingevuld
        if ($("#disc").val() <= 0)
          sgDisc.setValue(data.ins_discipline_key, (data.ins_srtdiscipline_prefix != null ? data.ins_srtdiscipline_prefix + "-" : "") + data.discipline_omschrijving, false /*doonChange*/, true /*checkExist*/);
      }

      function loadKenmerk(stdmelding_key)
      {
        var s = "load_kenmerk.asp?stdm_str=" + stdmelding_key
              + "&mld_key=" + mld_key
              + (!(canFlexChange || canChangeKenmerkBlok)? "&reado=1" : "")
              + (canChange? "&canChange=1" : "")
              + (canFlexChange? "&canflexchange=1" : "")
              + (showConfidential? "&showconfidential=1" : "")
              + "&prs_key=" + user_key
              + "&act_key=-1"
              + "&melder_key=" + melder_key
              + "<%=S("mld_processing_group_all")? "" : "&srtdisc_key=" + mld_melding.srtdisc_key%>"
              + "&disc=" + disc_key
              + "&prsautlevel=" + prsautlevel
              + (show_alg? "&show_alg=1" : "")
              + "&loc_key=" + loc_key
              + "<%=(fwdType == 1 ? "&forward=1" : "")%>";
        $.get(s, flexReloaded);
      }

      function onChangeStdMelding(stdmelding_key)
      { // Verwijderen vande verplichte flexkenmerken gebeurt in de loadKenmerk callback functie.
        if (stdmelding_key > 0)
        { // Flexkenmerken van de geselecteerde stdmelding toevoegen.
          $.getJSON("./get_mld_info_ajax.asp",
                    { req_info: "mld_stdmelding",
                      mld_stdmelding_key: stdmelding_key,
                      mld_key: mld_key,
                      caller_key: user_key },
                      process_stdm_info);
          // Ik weet nog niet of er verplichte kenmerken zijn die ik niet mag wijzigen. Ik kan nu nog niet bepalen of ik niet kan doorvoeren.
          loadKenmerk(stdmelding_key);
        }
        else
        { // Verplichte flexkenmerken verwijderen.
          $(".flexblock").remove();
          FcltMgr.resized();
        }
      }

      $(function ()
      {
          parent.$("span.ui-dialog-title").html(("<%=fwdType%>" == 1 ? "<%=safe.jsstring(fwdInfo.fwdLabel)%>" : L("lcl_mld_forward_team")));
          if (<%=S("mld_forward_auto_fill")%> == 1)
              loadKenmerk(<%=mld_melding.stdm_key%>);
      });

    </script>
  </head>
  <body class="fclt-modal" id="mod_mldforward">
<%  MODAL_START(); %>
    <form action="mld_forward_save.asp?mld_key=<%=mld_key%>&fwdType=<%=fwdType%>" method="post" name="u2">


<%    MODAL_BLOCK_START("mldForward", (fwdType == 1 ? fwdInfo.fwdLabel : L("lcl_mld_forward_team")) + " " + (mld_melding.prefix || "") + mld_key,
                        { tableid: "tblforward", icon: (fwdType == 1 ? (fwdInfo.fwdType == 1 ? "fa-retweet" : "fa-external-link") : "fa-arrow-right") })

      if (fwdType == 1)
      {
%>
        <input type="hidden" id="disc_old" name="disc_old" value="<%=mld_melding.disc_key%>">
<%
        // Vakgroep
        var urlAdd = [{urlParam: "disc_old", field: "disc_old",        init: mld_melding.disc_key }];
        if (mld.useAlgScope("D"))
        {
            var eindlevel = (stdm_info.ins_srtdiscipline_alglevel ? stdm_info.ins_srtdiscipline_alglevel : 2);
            switch (eindlevel) { // Zonder break;
              case 5: urlAdd.push({urlParam: "roomkey", field: "ruimtekey",     init: mld_melding.room_key});
              case 4: urlAdd.push({urlParam: "flrkey",  field: "verdiepingkey", init: mld_melding.flr_key });
              case 3: urlAdd.push({urlParam: "bldkey",  field: "gebouwkey",     init: mld_melding.bld_key });
              case 2: urlAdd.push({urlParam: "lockey",  field: "locatiekey",    init: mld_melding.loc_key });
            }
        }

        // Vakgroep
        FCLTdisciplineselector("disc",
                               "sgDisc",
                               { label: L("lcl_vakgroup"),
                                 disc_key: S("mld_forward_auto_fill") ? mld_melding.disc_key : -1,
                                 module: "MLDP",
                                 perslidKey: user_key,
                                 behandelteam_key: behandelteam_key,
                                 autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                 srtdisc_key: S("mld_forward_all") == 1? -1 : mld_melding.srtdisc_key,
                                 urlAdd: urlAdd,
                                 filtercode: this_mld.canForwardKeten? "VDK" : "VD",
                                 cndfilter : S("cnd_gebreken_srtdisc_key") > 0, // De conditiemetingen vakgroeptype gebreken eruit filteren.
                                 onChange: "onChangeVakgroep",
                                 required: true
                               });

        urlAdd.push({urlParam: "disc_key", field: "disc"});

        // Standaardmelding
        FCLTstdmeldingselector("stdm",
                               "sgStdm",
                               { label: L("lcl_complain"),
                                 perslidKey: user_key,
                                 behandelteam_key: behandelteam_key,
                                 stdmelding_key: S("mld_forward_auto_fill") ? mld_melding.stdm_key : -1,
                                 autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                 srtdisc_key: (S("mld_forward_all") == 1? -1 : mld_melding.srtdisc_key),
                                 urlAdd: urlAdd,
                                 filtercode: this_mld.canForwardKeten? "VDK" : "",
                                 cndfilter : S("cnd_gebreken_srtdisc_key") > 0, // De conditiemetingen vakgroeptype gebreken eruit filteren.
                                 onChange: "onChangeStdMelding",
                                 required: true
                               });
      }
      else if (fwdType == 2)
      {
%>
        <input type="hidden" id="disc" name="disc" value="<%=mld_melding.disc_key%>">
<%
        // Behandelteam
        var disc_key = stdm_info.default_ins_disc_key && stdm_info.default_ins_disc_key > 0?  stdm_info.default_ins_disc_key : -1;
        var urlAdd = [{urlParam: "disc",     field: "disc",                init: mld_melding.disc_key }];
        FCLTdisciplineselector("mld_ins_discipline",
                               "sgDisc",
                               { label: L("mld_processing_group"),
                                 disc_key: (S("mld_forward_auto_fill")==1 ? mld_melding.mld_ins_discipline_key : disc_key),
                                 module: "MLDB",
                                 perslidKey: user_key,
                                 noJustOne: true,
                                 urlAdd: urlAdd,
                                 autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                 srtdisc_key: (S("mld_processing_group_all") == 1 ? -1 : mld_melding.srtdisc_key),
                                 onChange: "onChangeBehandelteam"
                               });
      }

      // Behandelaar
      if (S("mld_forward_can_assign"))
      {
%>
        <input type="hidden" id="person" name="person" value="<%=mld_melding.melder_key%>">
<%
        var urlAdd = [{urlParam: "prs_key", field: "person", init: mld_melding.melder_key}];

        if (mld_melding.show_alg)
        {
          urlAdd.push({urlParam: "loc_key", field: "loc_key", init: mld_melding.loc_key});
%>
          <input type="hidden" id="loc_key" name="loc_key" value="<%=mld_melding.loc_key%>">
<%
        }

        if (fwdType == 1)
        {
          urlAdd.push({urlParam: "disc_key", field: "disc", init: (S("mld_forward_auto_fill") ? mld_melding.disc_key : -1)});

          if (mld_melding.primaire_behandelaar != 0)
          {
            FCLTpersoonselector("sBehandel",
                                "sgBehandelaar",
                                { perslidKey: (S("mld_forward_auto_fill") ? mld_melding.behandel_key : -1),
                                  label: L("lcl_mld_behandelaar"),
                                  autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                  urlAdd: urlAdd,
                                  required: (mld_melding.primaire_behandelaar == 2),
                                  filtercode: (mld_melding.mld_status == 0 ? "BEHF" : "BEHB")
                                });
          }
        }
        else if (fwdType == 2)
        {
          urlAdd.push({urlParam: "disc_key", field: "mld_ins_discipline", init: (S("mld_forward_auto_fill") ? mld_melding.mld_ins_discipline_key : -1)});

          FCLTpersoonselector("sBehandel2",
                              "sgBehandelaar",
                              { idadd: 2,
                                perslidKey: (S("mld_forward_auto_fill") ? mld_melding.behandel2_key : -1),
                                label: L("lcl_mld_processor"),
                                autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                urlAdd: urlAdd,
                                readonly: !this_mld.canAfhandChange,
                                filtercode: (mld_melding.mld_status == 0 ? "BH2F" : "BH2B")
                              });
        }
      }



      if (!stdm_info.hide_kostenplaats && !stdm_info.is_kto_antwoord)
      {
        var urlAdd_account = [{ urlParam: "prs_key", field: (frontend && S("mld_allow_for_others") == 1 && S("prs_dep_default_kpn_voor") == 1? "personFor" : "person") },
                              { urlParam: "showeigenkp", field: "eigenkp" }];
        if (frontend && !mld_melding.mld_kk)
        { // Indien frontend en kostenklant vinkje is uit, dan moet alleen de kostenplaats van het geselecteerde gebouw gekozen kunnen worden.
          // LET OP!: Persoon hoeft niet gemandateerd te zijn voor deze kostenplaats.
          // De kostenplaats van het geselecteerde gebouw wordt meegegeven aan de FCLTkostenplaatsselector
          // zodat alleen deze kostenplaats als resultaat opgeleverd gaat worden.
          urlAdd_account.push({ urlParam: "kp_key", field: "account_bld" });
        }

        FCLTkostenplaatsselector("account",
                                 "sgAccount",
                                 mld_melding.melder_key,
                                 { kostenplaatsKey: mld_melding.kostenpl_key || -1,
                                   label: (urole == "fe")?L("lcl_mld_inf_Kostenplaats"):L("lcl_mld_inf_Kostenklant"),
                                   extraParamField: "kmodule",
                                   extracode: "M",
                                   filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initiële waarde kan bij kostenplaatsen altijd.
                                   urlAdd: urlAdd_account,
                                   readonly: (mld_key > 0 && !this_mld.canKostChange),
                                   kptoggle: { ischecked: (mld_melding.mld_kk == 1),
                                               readonly: (mld_key > 0 && !this_mld.canKostChange),
                                               onChange: "onChangeKostenklant();",
                                               hidden: (urole == "fe") },
                                   required: (!(mld_key > 0 && !this_mld.canKostChange)? mld_melding.kpnverplicht : false)
                                 });
        if (frontend && !mld_melding.mld_kk)
        { // Indien frontend en kostenklant vinkje is uit, dan moet alleen de kostenplaats van het geselecteerde gebouw gekozen kunnen worden.
          // LET OP!: Persoon hoeft niet gemandateerd te zijn voor deze kostenplaats.
          // De kostenplaats van het gekozen gebouw wordt in een hidden input veld opgeslagen/bijgehouden.
          // Deze wordt meegegeven aan de FCLTkostenplaatsselector.
          var sqlg = "SELECT g.prs_kostenplaats_key"
                   + "  FROM alg_gebouw g"
                   + " WHERE g.alg_gebouw_key = " + mld_melding.bld_key;
          var oRsg = Oracle.Execute(sqlg);
%>
          <input type="hidden" id="account_bld" name="account_bld" value="<%=!oRsg.eof? oRsg("prs_kostenplaats_key").Value : -1%>">
<%        oRsg.Close();
        }

        if (S("show_ordernr") != 0)
        {
          RWFIELDTR("ordernr",  "fldshort", L("lcl_mld_inf_Ordernr"), mld_melding.mld_ordernr, {readonly: (mld_key > 0 && !this_mld.canKostChange), maxlength: 30});
        }
      }

      var taggable_select_params = {
            "stdm_taggable":        stdm_info.taggable,
            "srtdisc_key":          mld_melding.srtdisc_key,
            "stdmeldinggroep_key":  stdm_info.stdmeldinggroep_key,
            "tag_key":              mld_melding.tag_key
          }
      Response.Write(mld.taggable_select_html(urole, taggable_select_params));

      if ((urole == "bo" || urole == "fo") && (S("mld_melding_flags") > 0))
      {
          var sqla = [];
          for (var i = 0; i < S("mld_melding_flags"); i++)
          {
              sqla.push("SELECT " + i + ", " + safe.quoted_sql(L("lcl_mld_flag" + i)) + " FROM DUAL");
          }
          FCLTselector("mldflag",
                       sqla.join(" UNION ALL "),
                       { initKey: mld_melding.flag,
                         label: L("lcl_mld_flags"),
                         flag: mld_melding.flag
                       });
      }

      // Afhandeling
      if (mld_melding.remark)
      { %>
      <tr>
        <td colspan="2">
          <%=safe.html(mld_melding.remark)%>
        </td>
      </tr>
<%    }

      MODAL_BLOCK_END() %>

      <flex-marker></flex-marker><% /* Hier komen de kenmerken */ %>

<%    MODAL_BLOCK_START("mldBehandel", L("lcl_mld_note"), { icon: "fa-clipboard-list-check" });
      RWTEXTAREATR("opmerk",
                   "fldtxt" + ((S("mld_forward_opm_flags") & 1) == 1? " required" : ""),
                   "",
                   "",
                   {html: "rows='8' cols='80'", tdhtml_ta: "colspan='2'"});

      var note_zichtbaarFE = (mld_melding.fenotes == 1 || mld_melding.fenotes == 3 );
      var eigenMelding = user.isCollega(mld_melding.melder_key);
      if (!eigenMelding)
      {
          // Geef keuze voor wel of niet zichtbaar voor FE
          RWCHECKBOXTR("zichtbaarFE", "fldcheck","<nobr>" + L("lcl_mld_zichtbaar_FE") + "</nobr>", note_zichtbaarFE, {html: "" });
          // We houden het simpel: geen notificatie dmv 'actie bij melder zetten'.
      }

      MODAL_BLOCK_END();
      SIMPLE_BLOCK_START();
      var buttons =  [ {title: (fwdType == 1 ? fwdInfo.fwdLabel : L("lcl_mld_forward_team")), action:"mld_forward()", singlepress: true, id: "btn_forward_submit", importance: 1, icon: "fa-fclt-save" },
                       {title: L("lcl_cancel"),  action:"mld_cancel()", importance: 3, icon: "fa-fclt-cancel" } ];
      CreateButtons(buttons);
      SIMPLE_BLOCK_END();

      IFACE.FORM_END();
%>
    </form>
<%  MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
