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

     Accepteer een melding door FO (alleen direct na invoer) of BO (vanuit lijst of expliciet)
     Zet de huidige user (die kennelijk dus een behandelaar kan zijn) direct als de behandelaar.
     Deze eerste behandelaar wordt vooralsnog niet expliciet getrackt, dat wordt geimpliceerd
     door het accepteren
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/disciplineselector.inc" -->
<!-- #include file="../Shared/stdmeldingselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="mld.inc" -->

<%
FCLTHeader.Requires({ plugins: ["jQuery"],
                      js: ["./mld_edit_melding.js"] });

var mld_key_arr = getQParamIntArray("mld_key");
var multi     = getQParamInt("multi", 0) == 1;
var maybeDouble = getQParamInt("maybeDouble", 0) == 1;
var urole     = getQParamSafe("urole", "bo");
var fronto    = urole == "fo";
var backo     = urole == "bo";
var frontend  = (!fronto && !backo);

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

var transitParam = buildTransitParam(["mld_key", "multi", "maybeDouble", "urole"]);

// Geen autfunction bepaald. Je komt bij FIN niet binnen met een bepaalde rol (urole).
// Alleen PRSreadlevel en PRSwritelevel van belang want fac_functie_min_level = 7 (lezen en schrijven organisatie)
var authparamsMLDBOF = user.checkAutorisation("WEB_MLDBOF", true);
var authparamsMLDBO3 = user.checkAutorisation("WEB_MLDBO3", true);
var authparamsMLDFOF = user.checkAutorisation("WEB_MLDFOF", true);


var result = {};
var hasBehandelteam = 0;
var ingesloten = [];
var mixed_behandelaar = false;
var mixed_disc        = false;
var mixed_srtdisc     = false;
var last_behandel_key = -1;
var last_disc_key     = -1;
var last_srtdisc_key  = -1;
var mldRequireCnt = 0; // Aantal meldingen waarvan minstens één verplicht kenmerk en/of object niet is ingevuld.
var reqStatusEmptyMelding = [];
var reqStatusEmptyMelding_key = -1;
var reqStatusEmptyMeldingnr = "";
var disc_with_startdatum = false;
var last_melder_key = -1;
var last_loc_key = -1;
var last_bld_key = -1;
var last_room_key = -1;
var last_prio = 3;
var last_show_alg = false;
var last_mld_status = -1;
var last_mld_ins_discipline_key = -1;
var last_stdm_key = -1;
// Bepaal de meldingen in de selectie die
// ook echt geaccepteerd kunnen of mogen worden.
for (var i = 0; i < mld_key_arr.length; i++)
{
  var this_mld = mld.func_enabled_melding(mld_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke melding
  var mld_info = mld.mld_melding_info(mld_key_arr[i]);
  var mld_std = mld.mld_stdmeldinginfo(mld_info.stdm_key);

  var maybeDouble = (!mld_info.parent_key && (mld_std.doublecheck == 2 || mld_std.doublecheck == 3));
  // Geen child melding en bulk actie mag de maybeDouble meldingen niet op geaccepteerd zetten
  if (this_mld.canAccept && !mld_info.parent_key && !(multi && maybeDouble))
  {
    // Zijn er nog kenmerken die nu wel verplicht zijn of een object?
    var afwezig = mld.hasRequiredStatusEmptyMelding(mld_key_arr[i], 4); // Melding status "In behandeling(4)"
    if (afwezig.kenm_ontbreekt.length || afwezig.obj_ontbreekt)
    {
      mldRequireCnt++;
      var mldnr = mld.mld_prefix(mld_key_arr[i]) + mld_key_arr[i];
      if (afwezig.kenm_ontbreekt.length)
        reqStatusEmptyMelding.push(L("lcl_mld_req_status_empty").format(afwezig.kenm_ontbreekt.join(", "), mldnr) );
      if (afwezig.obj_ontbreekt)
        reqStatusEmptyMelding.push(L("lcl_mld_req_obj").format(mldnr) );
      reqStatusEmptyMelding_key = mld_key_arr[i];
      reqStatusEmptyMeldingnr = mldnr;
    }

    ingesloten.push(mld_key_arr[i]);
    hasBehandelteam += (mld_std.srtgroep & 4 ? 1 : 0);
    if (!mixed_behandelaar)
    {
      if (last_behandel_key != -1 && last_behandel_key != mld_info.behandel_key)
          mixed_behandelaar = true;
      last_behandel_key = mld_info.behandel_key;
    }
    if (!mixed_disc)
    {
      if (last_disc_key != -1 && last_disc_key != mld_info.disc_key)
          mixed_disc = true;
      last_disc_key = mld_info.disc_key;
    }
    if (!mixed_srtdisc)
    {
      if (last_srtdisc_key != -1 && last_srtdisc_key != mld_std.ins_srtdiscipline_key)
          mixed_srtdisc = true;
      last_srtdisc_key = mld_std.ins_srtdiscipline_key;
    }

    if (ingesloten.length == 1)
    { // Alleen van de eerste melding gegevens voor de datums bijhouden. Wordt bij multi niet gebruikt.
      disc_with_startdatum = mld_info.show_start_date;
    }
    // mld_info bevat niet altijd de info van de laatste melding uit de ingesloten array.
    // O.a. als je geen this_mld.canAccept rechten heb op de laatste melding uit de mld_key_arr array.
    // Daarom houd ik hier de laatste gegevens bij.
    last_melder_key = mld_info.melder_key;
    last_loc_key = mld_info.loc_key;
    last_bld_key = mld_info.bld_key;
    last_room_key = mld_info.room_key;
    last_prio = mld_info.mprio;
    last_show_alg = mld_info.show_alg;
    last_mld_status = mld_info.mld_status;
    last_mld_ins_discipline_key = mld_info.mld_ins_discipline_key;
    last_stdm_key = mld_info.stdm_key;
  }
}
// Als er meerder meldingen zijn waarvan een verplicht kenmerk niet is ingevuld, dan abort en melding.
// Als er 1 melding is waarvan een verplicht kenmerk niet is ingevuld, dan wordt er verderop alleen een melding met twee buttons getoond.
user.anything_todo_or_abort(mldRequireCnt < 2, reqStatusEmptyMelding.join("<br />"));
user.anything_todo_or_abort(ingesloten.length > 0); // We klagen niet over enkele wel en enkele niet

var mld_melding = mld.mld_melding_info(ingesloten[0]); // Neem voor informatie de eerste melding.
lcl.set_dialect(mld_melding.srtdisc_key, "MLD_SRTDISCIPLINE_KEY");
%>
<html>
	<head>
<%	FCLTHeader.Generate(); %>
		<script type="text/javascript">
      $(function()
      {
        $('textarea').resize(function () { FcltMgr.resized(window) } );
        $('textarea').autogrow();
        $("#opmerk").focus();
      });

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

      function mld_edit()
      {
        FcltMgr.closeDetail(window, { cancel: false, succes: false, key: <%=reqStatusEmptyMelding_key%>, mldnr: "<%=safe.jsstring(reqStatusEmptyMeldingnr)%>", edit: true });
      }

			async function mld_accept()
			{
				if (!await validateForm("u2"))
					return false;

          $.post($("form[name=acceptform]")[0].action, $("[name=acceptform]").serialize() + "<%=transitParam%>", FcltCallbackClose, "json");
          return true; // disable button
			}

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

		</script>
	</head>

	<body class="fclt-modal" id="mod_mldaccept">
    <% MODAL_START(); %>
    <form id="acceptform" name="acceptform" action="mld_accept_save.asp" method="post" onSubmit="mld_accept();return false;">
<%
      if (mldRequireCnt == 1)
      {
        MODAL_BLOCK_START("mldAccept", L("lcl_menu_mld_bo_accept") + " " + mld.mld_prefix(ingesloten[0]) + ingesloten[0], { icon: "fa-check" });
        Response.Write(reqStatusEmptyMelding.join("<br />") + "<br />" + L("lcl_mld_change_now"));
        MODAL_BLOCK_END();
      }
      else
      {
        var req = false;
        // mld_melding bevat de gegevens van de (eerste) melding.

        // ProcessingFields = behandelteam & actieve behandelaar
        var showProcessingFields = hasBehandelteam == ingesloten.length                     // Alle meldingen hebben behandelteams
                                && (!mixed_srtdisc || S("mld_processing_group_all") == 1);  // Alles binnen hetzelfde vakgroeptype indien S("mld_processing_group_all") == 0

			  MODAL_BLOCK_START("mldAccept", L("lcl_menu_mld_bo_accept") + (ingesloten.length == 1 ? " " + ((hasBehandelteam ? mld_melding.mld_srtins_prefix : mld_melding.prefix) || "") + ingesloten[0]: ""), { icon: "fa-check" });

          if (ingesloten.length == 1 && !hasBehandelteam) // Bij ingesloten.length > 1 toon je toch niets
          {
            // Vakgroep
            FCLTdisciplineselector("disc",
                                   "sgDisc",
                                   { label: L("lcl_vakgroup"),
                                     disc_key: mld_melding.disc_key,
                                     module: "MLDP",
                                     perslidKey: user_key,
                                     autfunctionKey: -1, // toch readonly
                                     readonly: true
                                   });

            // Stdmelding
            FCLTstdmeldingselector("stdm", "sgStdm", { label: L("lcl_complain"),
                                                       perslidKey: user_key,
                                                       autfunctionKey: -1, // toch readonly
                                                       stdmelding_key: mld_melding.stdm_key,
                                                       readonly: true });
          }
          else
          { // Nodig voor het berekenen van de einddatum.
%>          <input type="hidden" id="disc" name="disc" value="<%=ingesloten.length == 1? mld_melding.disc_key : last_disc_key%>">
            <input type="hidden" id="stdm" name="stdm" value="<%=ingesloten.length == 1? mld_melding.stdm_key : last_stdm_key%>">
<%
          }

          // Aanspreekpunt
          if (this_mld.canBOwrite || this_mld.canFOwrite)
          {
%>          <input type="hidden" id="prs_key"  name="prs_key"  value="<%=last_melder_key%>">
<%          // Nodig voor het berekenen van de einddatum.
%>          <input type="hidden" id="locatiekey"  name="locatiekey"  value="<%=last_loc_key%>">
            <input type="hidden" id="gebouwkey"  name="gebouwkey"  value="<%=last_bld_key%>">
            <input type="hidden" id="ruimtekey"  name="ruimtekey"  value="<%=last_room_key%>">
            <input type="hidden" id="prio"  name="prio"  value="<%=last_prio%>">
<%
            if (this_mld.canVakgAccept && !mixed_disc)
            {
              var urlAdd = [{urlParam: "prs_key",  field: "prs_key",  init: last_melder_key},
                            {urlParam: "disc_key", field: "disc",     init: last_disc_key }];

              if (last_show_alg)
                  urlAdd.push({urlParam: "loc_key",  field: "locatiekey", init: last_loc_key});

              if (mld_melding.primaire_behandelaar != 0)
              {
                  FCLTpersoonselector("sBehandel",
                                      "sgBehandelaar",
                                      { perslidKey: (!mixed_behandelaar && last_behandel_key > 0? last_behandel_key : (this_mld.canVakgBOFwrite? user_key : -1)),
                                        label: L("lcl_mld_behandelaar"),
                                        autlevel: this_mld.authparams(autfunction) && this_mld.authparams(autfunction).PRSwritelevel,
                                        urlAdd: urlAdd,
                                        readonly: !this_mld.canAccept,
                                        required: (mld_melding.primaire_behandelaar == 2),
                                        filtercode: (last_mld_status == 0 ? "BEHF" : "BEHB")
                                      });
              }
            }
          }

          if (showProcessingFields)
          {
            // Behandelteam
            var urlAdd = [{urlParam: "disc",     field: "disc",                     init: mld_melding.disc_key }];
            FCLTdisciplineselector("mld_ins_discipline",
                                   "sgDisc",
                                   { label: L("mld_processing_group"),
                                     disc_key: (ingesloten.length == 1? mld_melding.mld_ins_discipline_key : -1),
                                     module: "MLDB",
                                     perslidKey: user_key,
                                     noJustOne: true,
                                     urlAdd: urlAdd,
                                     autfunctionKey: -1, // alles is toegestaan! authparams.autfunctionkey,
                                     srtdisc_key: (S("mld_processing_group_all") ? -1 : (ingesloten.length == 1? mld_melding.srtdisc_key : last_srtdisc_key)),
                                     onChange: "onChangeBehandelteam"
                                   });

            // Actieve Behandelaar
            if (this_mld.canBOwrite || this_mld.canFOwrite)
            {
              var urlAdd2 = [{urlParam: "prs_key",    field: "prs_key",             init: last_melder_key},
                             {urlParam: "disc_key",   field: "mld_ins_discipline",  init: last_mld_ins_discipline_key}];

              if (mld_melding.show_alg)
                  urlAdd2.push({urlParam: "loc_key",  field: "locatiekey",             init: last_loc_key});

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

          // Datum velden.
          if (ingesloten.length == 1 && this_mld.canWriteDatums)
          { // Object gegevens zijn nodig voor het berekenen van de einddatum.
            var sql = "SELECT d.ins_deel_key"
                    + "     , d.ins_deel_omschrijving deel"
                    + "     , CASE"
                      + "     WHEN d.ins_deel_t_uitvoertijd.eenheid = 'U'"
                      + "     THEN d.ins_deel_t_uitvoertijd.tijdsduur / 24"
                      + "     ELSE d.ins_deel_t_uitvoertijd.tijdsduur"
                      + "     END uitvoertijd" // Uitvoertijd is in dagen.
                    + "  FROM ins_deel d"
                    + "     , ins_srtdeel s"
                    + "     , mld_melding_object m"
                    + "     , ins_v_alg_overzicht o"
                    + "     , ins_srtgroep g"
                    + "     , ins_tab_discipline dis"
                    + " WHERE m.mld_melding_key = " + ingesloten[0]
                    + "   AND d.ins_deel_key = m.ins_deel_key"
                    + "   AND d.ins_deel_verwijder IS NULL"
                    + "   AND d.ins_srtdeel_key = s.ins_srtdeel_key"
                    + "   AND s.ins_srtgroep_key = g.ins_srtgroep_key"
                    + "   AND g.ins_discipline_key = dis.ins_discipline_key"
                    + "   AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys(+)"
                    + "   AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type(+)"
                    + "   AND d.ins_alg_locatie_key = o.alg_locatie_key(+)"
                    + " ORDER BY deel";

            FCLTselector("r_objs",
                         sql,
                         { label: "", //L("lcl_mld_objects"),
                           multi: true,
                           size: 1,
                           extraclass: "hidden",
                           extraParamValue: "uitvoertijd" // uitvoertijd is hier in uren
                         });
 %>         <input type='hidden' name='has_r_objs' value='1'>

		        <script type="text/javascript">
              var JSONdataStdm = "<%=safe.jsstring(JSON.stringify(mld_std))%>";
              window.stdm_info = JSON.parse(JSONdataStdm);

              var mld_key          = <%=ingesloten[0]%>;
              var withFutureRes    = false;
              var startOfWorkDay   = parseFloat("<%=safe.jsfloat(S("fac_t_startofworkday"))%>");
              var endOfWorkDay     = parseFloat("<%=safe.jsfloat(S("fac_t_endofworkday"))%>");
              var srtdisc_key      = <%=mld_melding.srtdisc_key%>;
              var mld_show_endtime = <%=S("mld_show_endtime")%>;
              var frontend         = (<%=frontend? 1 : 0%> == 1);
              var melddatum        = <%=mld_melding.melddatum.getTime()%>;
		        </script>

            <input type="hidden" name="rsv_ruimte_key" value="<%=mld_melding.rsv_ruimte_key%>">
            <input type="hidden" name="prio" value="<%=mld_melding.mprio%>">
            <input type="hidden" name="saveDates" value="1">
<%
            if (disc_with_startdatum)
            {
              FCLTcalendar( "startdate",
                            { label   : L("lcl_mld_startdate"),
                              datum   : mld_melding.melddatum,
                              minFuture : (frontend ? 0 : -1),
                              onChange: "onChangeStartdatum();",
                              required: true,
                              volgnr: 1,
                              nofollow: true
                            });
            }
            else
            { // Startdatum moet wel opvraagbaar zijn i.v.m. berekening einddatum.
%>
              <input type="hidden" name="startdate" id="startdate" value="<%=mld_melding.melddatum.valueOf()%>">
<%          }

            if (!frontend && mld_std.show_actiedatum)
            {
              var actiondate_is_today = (mld_melding.actiedatum? mld_melding.actiedatum.midnight().getTime() == new Date().midnight().getTime() : false);
              FCLTcalendar( "actiondate",
                            { label        : L("lcl_mld_actiondate"),
                              datum        : mld_melding.actiedatum,
                              timeField    : true, // FO en BO kunnen eind(datum+tijd) altijd invullen.
                              timeStep     : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_melding.js
                              startTime    : S("fac_t_startofworkday"),
                              endTime      : S("fac_t_endofworkday"),
                              onChange     : "onChangeActiondate();",
                              trclass      : "tractiondate" + (actiondate_is_today? " today" : ""),
                              volgnr       : 2,
                              initEmpty    : mld_melding.actiedatum == null,
                              initTimeEmpty: mld_melding.actiedatum == null
                            });
            }

            var einddatumHidden = mld_std.planbaar == 2;
            if (!einddatumHidden)
            { // Wordt mogelijk dynamisch vervangen.
              FCLTcalendar( "enddate",
                            { label    : L("lcl_mld_enddate"),
                              datum    : mld_melding.einddatum,
                              timeField: true, // FO en BO kunnen eind(datum+tijd) altijd invullen.
                              timeStep : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_melding.js
                              startTime: S("fac_t_startofworkday"),
                              endTime  : S("fac_t_endofworkday"),
                              onChange : "onChangeEnddate();",
                              required : true,
                              trclass  : "trenddate",
                              volgnr   : 3,
                              addClass : (mld_melding.rsv_ruimte_key > 0? "mldres" : null) // Als de melding onder een reservering valt dan addClass toevoegen.
                            });
            }
          }

        // Reden accepteren
        if (mld_melding.remark){
%>
        <tr><td class="label" colspan="2"><%=safe.html(mld_melding.remark)%></td>
        </tr>
<%
        }
        RWTEXTAREATR("opmerk", "fldtxt" + (req?" required":""), L("lcl_mld_note"), "", {  html: "rows='8'" });

        MODAL_BLOCK_END();
      }
      var buttons = [];
      if (mldRequireCnt == 1)
        buttons.push({title: L("lcl_Yes"), icon: "fa-fclt-save", action: "mld_edit()", singlepress: true, id: "btn_close_submit", importance: 1 })
      else
        buttons.push({title: L("lcl_accept"), icon: "fa-fclt-save", action: "mld_accept()", singlepress: true, id: "btn_accept_submit", importance: 1  })
      buttons.push({title: L("lcl_cancel"), icon: "fa-fclt-cancel", action: "mld_cancel()", importance: 3 });
      SIMPLE_BLOCK_START();
        CreateButtons(buttons);
      SIMPLE_BLOCK_END();
      IFACE.FORM_END();
%>
    </form>
    <% MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
