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

     TODO: lijkt mij dat er gewoon naar ../mld_close resp. ../opdr_close.asp moet worden gesubmit?
*/
var opdr_key = getQParamInt("opdr_key", -1);
var urole  = getQParamSafe("urole", "bo");
var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": opdr_key };
%>

<!-- #include file="../Shared/common.inc"-->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="./resultset_table.inc" -->
<!-- #include file="../mld/mld.inc" -->
<!-- #include file="../mld/mld_flexkenmerk.inc" -->
<!-- #include file="./mobile.inc" -->
<!-- #include file="./iface.inc" -->
<!-- #include file="../Shared/uitvoerendeselector.inc" -->
<!-- #include file="../Shared/contactpersoonselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/notes.inc" -->

<%
FCLTHeader.Requires({ plugins: ["suggest"]
                    , js: [rooturl+"/appl/mld/mld_edit_opdr.js", "jquery.timepicker-table.js", "notes_m.js"],
                      css: ["timePicker-table.css"]});

var mld_key  = getQParamInt("mld_key", -1);
var copy = false;
var action = getQParam("action", "");
var halt = getQParamInt("hlt", 0) == 1;
var resume = getQParamInt("rsm", 0) == 1;
var quicknoteSetting = S("pda_order_quick_note");
// Als de opdrachten niet sequentieel uitgevoerd moeten worden, dan wordt er ook geen actieve of halted opdracht gevonden.
var activeopdr = mld.getactiveopdracht(opdr_key);
var hltopdr = mld.gethltopdrachten(opdr_key);

var askclosemld = false;

if (opdr_key > -1)
{
  // Vragen om ook de melding te sluiten?
  var sql = "SELECT o.mld_melding_key"
          + "     , mto.mld_typeopdr_sluitmelding"
          + "  FROM mld_opdr o"
          + "     , mld_typeopdr mto"
          + " WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key"
          + "   AND o.mld_opdr_key = " + opdr_key;
  var oRs = Oracle.Execute(sql);
  var mldkey = oRs("mld_melding_key").Value;
  var typeopdr_sluitmelding = oRs("mld_typeopdr_sluitmelding").Value;
  oRs.Close();

  // Hoeveel opdrachten staan er open bij deze melding.
  var sql = "SELECT COUNT(mld_opdr_key) nrOpen"
          + "  FROM mld_opdr o"
          + " WHERE o.mld_melding_key = " + mldkey
          + "   AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9)";
  var oRs = Oracle.Execute(sql);
  var nrOpen = oRs("nrOpen").Value;
  oRs.Close();

  askclosemld = (typeopdr_sluitmelding == 1 && nrOpen == 1);
}

// Zijn bij deze opdracht alle verplichte kenmerken ingevuld voor het onderbreken?
var reqStatusEmptyOpdr = [];
reqStatusEmptyOpdr = mld.getActieKenmerkenOpdr(reqStatusEmptyOpdr, opdr_key, {halt: true});
var hasKenmerkOnderbreken = (reqStatusEmptyOpdr.length? 1 : 0) == 1;

// Mogelijke parameters voor toevoegen only
if (opdr_key == -1)
{
  var dienst_key = getQParamInt("dienst_key", -1);
  var uitv_key   = getQParamInt("uitv_key", -1);
  var opdr_type  = getQParamInt("opdr_type", -1);
  if (opdr_type == -1)
  {
    Server.Transfer("order_new.asp"); // Ga eerst opdrachttype kiezen
  }
}

if (opdr_key > -1)
{ // BESTAANDE OPDRACHT
  var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
  user.auth_required_or_abort(this_opdr.canReadAny);
  if (halt || resume)
  {
    user.auth_required_or_abort((halt && this_opdr.canOnderbreken) || (resume && this_opdr.canHervatten));
    mld.opdr_hltrsm(opdr_key, { halt: halt, resume: resume }); // Zorgt voor het zetten van de mld_opdr.mld_opdr_halted waarde en het tracken van "ORDHLT" of "ORDRSM".

    // Deze moet overnieuw omdat canOnderbreken & canHervatten waarschijnlijk veranderd zijn.
    this_opdr = mld.func_enabled_opdracht(opdr_key);
  }
  var mld_opdr = mld.mld_opdr_info(opdr_key);
  var mld_melding = mld.mld_melding_info(mld_opdr.mld_key);
  var opdr_type = mld_opdr.opdr_type;
  var uitv_key = mld_opdr.uitvoerende_key;
  var subject = safe.html(mld_opdr.opdr_type_omschr) + " " + (mld_melding.prefix || "") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr;

  mld_opdr.opdr_type_org = mld_opdr.opdr_type;
  mld_key = mld_opdr.mld_key;
  var sqlCount = ", (SELECT count(*) FROM mld_opdr o "
               + "    WHERE o.mld_melding_key = m.mld_melding_key "
               + "      AND o.mld_statusopdr_key NOT IN (1, 6, 7, 9) "
               + "      AND o.mld_opdr_key <> " + opdr_key
               + "  ) aantal_open";
}
else
{ // NIEUWE OPDRACHT
  var cnt_key = getQParamInt("cnt_key", -1);
  var params = { uitvoerende_key: getQParamInt("uitv_key", -1)
               , cnt_key: cnt_key
               , opdr_copy_key: -1
               , act_key: -1
               };
  var mld_opdr = mld.mld_opdr_info_new(mld_key, opdr_type, params);
  // Bepaal discipline
  sql = "SELECT sm.mld_ins_discipline_key"
      + " FROM mld_melding m"
      + "    , mld_stdmelding sm"
      + " WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key"
      + "   AND m.mld_melding_key = " + mld_key;
  var oRs = Oracle.Execute(sql);
  var this_opdr = mld.func_enabled_mld(oRs("mld_ins_discipline_key").value, "D"); // wat mag ik zoal op een melding ZIET ER VERDACHT UIT!
  this_opdr.canVeldChange = true;
  oRs.Close();

  var authparamsORDBOF = user.checkAutorisation("WEB_ORDBOF", true);
  this_opdr.canChange = authparamsORDBOF && authparamsORDBOF.PRSwritelevel < 9 && authparamsORDBOF.ALGwritelevel < 9;
  user.auth_required_or_abort(this_opdr.canChange);

  var mld_melding = mld.mld_melding_info(mld_key);
  var subject = L("lcl_mobile_newopdracht") + " " + (mld_melding.prefix || "") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr;
  var sqlCount = ", 0 aantal_open";

  mld_opdr.mld_opdr_ordernr = mld_melding.mld_ordernr;
}

if (mld_opdr.uitv_type == "B")
{ // toevoegen leverancier opmerking. Kan ook in query mld.mld_opdr_info()
  var sql = "SELECT prs_bedrijf_opmerking"
          + "  FROM prs_bedrijf"
          + " WHERE prs_bedrijf_key = " + mld_opdr.uitvoerende_key;
  var oRs = Oracle.Execute(sql);
  if (!oRs.EOF)
  {
    mld_opdr.uitv_opmerking = oRs("prs_bedrijf_opmerking").Value || "";
  }
  oRs.Close();
}

var this_mld = mld.func_enabled_melding(mld_key); // Wat heb ik zoal aan rechten op deze specifieke melding
var mld_info = mld.mld_melding_info(mld_key);

var pbtype = "P";
if (mld_opdr.uitv_type == "B")
{
  if (mld_opdr.uitv_intern == 1)
    pbtype = "BI"
  else
    pbtype = "BE";
}

var sql = "SELECT l.alg_locatie_code"
    + "        || NVL2(g.alg_gebouw_code,'-'||g.alg_gebouw_code,'')"
    + "        || NVL2(g.alg_verdieping_code,'-'||g.alg_verdieping_code,'')"
    + "        || NVL2(g.alg_ruimte_nr,'-'||g.alg_ruimte_nr,'')"
    + "        || NVL2(g.alg_terreinsector_code,'-'||g.alg_terreinsector_code,'') plaatscode"
    + "         , alg_onroerendgoed_omschrijving plaats "
    + "         , COALESCE(m.mld_alg_onroerendgoed_keys, m.mld_alg_locatie_key) plaats_key"
    + "         , COALESCE(g.alg_type, CASE WHEN m.mld_alg_locatie_key IS NOT NULL THEN 'L' ELSE NULL END) plaats_niveau"
    + sqlCount
    + "  FROM mld_melding m"
    + "     , alg_v_allonrgoed_gegevens g"
    + "     , alg_locatie l"
    + "     , prs_v_perslid_fullnames_all pf"
    + " WHERE m.mld_melding_key= " + mld_key
    + "   AND m.prs_perslid_key = pf.prs_perslid_key"
    + "   AND m.mld_alg_locatie_key=l.alg_locatie_key(+)"
    + "   AND m.mld_alg_onroerendgoed_keys=g.alg_onroerendgoed_keys(+)";
var oRs = Oracle.Execute(sql);
var lcode = !oRs.Eof && oRs("plaatscode").value? oRs("plaatscode").value + (oRs("plaats").value ? " " + oRs("plaats").value : "") : "";
var aantal_open = oRs.fields("aantal_open").value;
var plaats_key = oRs("plaats_key").Value;
var plaats_niveau = oRs("plaats_niveau").Value;
oRs.close();

var ins_keys_arr = [];
var ins_name_arr = [];
var thereAreObjects = false;
var thereAreMultipleObjects = false;
if (mld_melding.show_ins)
{
  // Haal gerelateerde objecten op.
  sql = "SELECT d.ins_deel_key"
      + "     , " + ( S("ins_element_description") == ""
                    ? "d.ins_deel_omschrijving || ' (' || " + lcl.xsql("s.ins_srtdeel_omschrijving", "s.ins_srtdeel_key") + " || ')' "
                    : S("ins_element_description")
                    ) + " deel"
      + "  FROM mld_melding_object mo"
      + "     , ins_deel d"
      + "     , ins_srtdeel s"
      + "     , ins_srtgroep g"
      + "     , ins_tab_discipline dis"
      + " WHERE mo.ins_deel_key = d.ins_deel_key"
      + "   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 mo.mld_melding_key = " + mld_key;
  var oRso = Oracle.Execute(sql);
  while (!oRso.eof)
  {
    ins_keys_arr.push(oRso("ins_deel_key").Value);
    ins_name_arr.push(oRso("deel").Value);
    oRso.MoveNext();
  }
  oRso.Close();
  thereAreObjects = (ins_keys_arr.length > 0);
  thereAreMultipleObjects = (ins_keys_arr.length > 1);
}

%>

<html>
  <head>
<%  FCLTMHeader.Generate(); %>

    <script>
    $(function() {

      $("[name='note']").focus(function() {
       $("#quickNoteTip").fadeIn();
      });

      // change trigger on opdr_opm on first page
      $("[name='opdr_opm']", "[id^='opdr-1-']").change(function ()
      {
        var that = this;
        // change opdr_opm on pages 'afmelden' and 'annuleren'
        $("[name^='opdr_opm']").val($(that).val());
      });
    });
<%    if (getQParamInt("notitie", 0) == 1) { %>
        $(function() {
          jqToast(L("lcl_mobile_data_saved"));
        });
<%    } %>
      var timerID=null;
      var opdrkosten_verplicht = <%=mld_opdr.opdrkosten_verplicht || 0%>;
      var activeopdr_key = <%=activeopdr.opdr_key%>;
      var activeopdracht = "<%=activeopdr.opdracht%>";
      var canChange = <%=this_opdr.canChange? 1 : 0%> == 1;
      var tonen_uren = <%=mld_opdr.tonen_uren? 1 : 0%> == 1;
      var tonen_materiaal_bedrag = <%=mld_opdr.tonen_materiaal_bedrag? 1 : 0%> == 1;
      var tonen_correctie = <%=mld_opdr.tonen_correctie? 1 : 0%> == 1;
      var tonen_kostenplaats = <%=mld_opdr.tonen_kostenplaats? 1 : 0%> == 1;
      var tonen_totaal = <%=mld_opdr.tonen_totaal? 1 : 0%> == 1;

      function delayed(delay, fn)
      {
        if (timerID) clearTimeout(timerID);
          timerID = setTimeout(fn, delay);
      }

      function opdr_goedkeur()
      {
        var opdr_nr = "<%=mld_opdr.mld_key%>/<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_goedkeur").format(opdr_nr)))
        {
            opdr_submit_first(opdr_goedkeur_callback);
        }
      }
      function opdr_goedkeur_callback()
      {
          var data = { opdr_key: <%=opdr_key%>
                     };
          <% protectRequest.dataToken("data"); %>
          $.post( "<%=rooturl%>/appl/mld/opdr_goedkeur.asp"
                , data
                , McltCallbackAndThenAlways(opdr_action_callback)
                , "json"
                );
      }

      function opdr_approve()
      {
        var opdr_nr = "<%=mld_opdr.mld_key%>/<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_approve").format(opdr_nr)))
        {
            opdr_submit_first(opdr_approve_callback);
        }
      }
      function opdr_approve_callback()
      {
          var data = { opdr_key: <%=opdr_key%>
                     };
          <% protectRequest.dataToken("data"); %>
          $.post( "<%=rooturl%>/appl/mld/opdr_approve.asp"
                , data
                , McltCallbackAndThenAlways(opdr_action_callback)
                , "json"
                );
      }

      function mldAcceptCallback()
      {
        var data = $("[name=acceptform]").serialize();
        $.post($("form[name=acceptform]")[0].action,
               data,
               McltCallbackAndThenAlways(function() { window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>"; }),
               "json");
        return false;
      }

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

<%      var save_note_url = "../mld/opdr_edit_note_save.asp?opdr_key=" + opdr_key; %>
        if ($(".mail_notes_accept").length > 0 && $(".mail_notes_accept").val().trim() != "")
        {
          var data = $("[name=acceptform]").serialize();
          var url = "<%=save_note_url%>";
          $.post(url,
                 data,
                 FcltCallbackAndThenAlways(mldAcceptCallback),
                 "json");
          return true; // Disable button.
        }
        else
        {
          var data = { success: true,
                       note_key: -1
                     };
          mldAcceptCallback(data);
        }

        return true; // Disable button.
      }

      function opdr_reject()
      {
        var opmerk = prompt(L("lcl_mld_inf_opmerking_fiat"), "");
        if (!opmerk)
            return;
        var opdr_nr = "<%=mld_opdr.mld_key%>/<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_reject").format(opdr_nr)))
        {
            opdr_submit_first(opdr_reject_callback(opmerk));
        }
      }
      function opdr_reject_callback(opm)
      {
          var data = { opdr_key: <%=opdr_key%>
                     , opmerk: opm //L("lcl_mld_opdr_rejectedbymobile")
                     };
          <% protectRequest.dataToken("data"); %>
          $.post( "<%=rooturl%>/appl/mld/opdr_reject_save.asp"
                , data
                , McltCallbackAndThenAlways(opdr_action_callback)
                , "json");
      }

      function opdr_accept_offer()
      {
        var opdr_nr = "<%=mld_opdr.mld_key%>/<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_approve").format(opdr_nr)))
        {
            opdr_submit_first(opdr_accept_offer_callback);
        }
      }
      function opdr_accept_offer_callback()
      {
          var murl = "?opdr_key=<%=opdr_key%>&submit=1";
          var data = { opdr_key: <%=opdr_key%>
                     };
          <% protectRequest.dataToken("data"); %>
          $.post( "<%=rooturl%>/appl/mld/opdr_accept_offer_save.asp" + murl
                , data
                , McltCallbackAndThenAlways(opdr_action_callback)
                , "json"
                );
      }

      function opdr_reject_offer()
      {
        var opdr_nr = "<%=mld_opdr.mld_key%>/<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_reject").format(opdr_nr)))
        {
            opdr_submit_first(opdr_reject_offer_callback);
        }
      }
      function opdr_reject_offer_callback()
      {
          var murl = "?opdr_key=<%=opdr_key%>&submit=1";
          var data = { opdr_key: <%=opdr_key%>
                     };
          <% protectRequest.dataToken("data"); %>
          $.post( "<%=rooturl%>/appl/mld/opdr_reject_offer_save.asp" + murl
                , data
                , McltCallbackAndThenAlways(opdr_action_callback)
                , "json"
                );
      }

      function opdr_action_callback()
      {
        //window.location.href = "fiat_list.asp"; // Als je terug bent in fiat_list en doet dan "terug" kom je in de zojuist gefiatteerde opdracht.
        // Het fiatteren van een opdracht is aangeroepen vanuit fiat_list.
        // Dus 1 stap terug in history om daar weer te komen.
        window.history.go(-1);
      }

      function opdr_halt()
      {
        var opdr_nr = "<%=mld_opdr.srtdiscprefix + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_hlt").format(opdr_nr)))
        {
            opdr_submit_first(opdr_halt_callback);
        }
      }
      function opdr_halt_callback()
      {
        window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>&hlt=1";
      }

      function opdr_resume()
      {
        var opdr_nr = "<%=mld_opdr.srtdiscprefix + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        if (confirm(L("lcl_mld_opdr_rsm").format(opdr_nr)))
        {
          opdr_submit_first(opdr_resume_callback);
        }
      }
      function opdr_resume_callback()
      {
        window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>&rsm=1";
      }

      function opdr_close()
      {
        var opdr_nr = "<%=mld_opdr.srtdiscprefix + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        var kosten_verplicht_afm = <%=mld_opdr.tonen_totaal && (mld_opdr.typeopdr_kosten_verplicht & 2 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 2))? 1 : 0%> == 1;
        var opdr_kosten = isNaN($("#tot_kosten").val())? 0 : parseFloat($("#tot_kosten").val());
        if (kosten_verplicht_afm && !$("#tot_kosten").val())
        {
          alert(L("lcl_mld_opdr_kosten_verpl_afm"));
          return false;
        }

        var opdr_afhandeling = ("<%=mld_opdr.typeopdr_afhandeling%>" == "1");
        if ($("#opdr_opm").val() == "" && opdr_afhandeling)
        {
          alert(L("lcl_pda_opdr_opm_required"));
          return false;
        }

        opdr_submit_first(opdr_close_callback_1);
        return false;
      }

      function opdr_close_callback_1()
      {
        $.post("<%=rooturl%>/appl/mld/opdr_close_save.asp?opdr_key=<%=opdr_key%>", $("[name=u2]").serialize(), opdr_close_callback_2, "json");
        return false;
      }

      function opdr_close_callback_2()
      {
        // Terug naar lijst met open opdrachten.
        window.location.href = "<%=rooturl%>/appl/pda/orders_list.asp";
      }

      function opdr_verwerk() {
        var opdr_nr = "<%=mld_opdr.srtdiscprefix + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
        var confirmtekst = L("lcl_mld_opdr_verwerken").format(opdr_nr);
        FcltMgr.confirm(confirmtekst, function () {
          var url = "../mld/opdr_verwerk_save.asp";
          var data = {
            opdr_key: <%=opdr_key%>
          };
          protectRequest.dataToken(data);
          $.post(url, data, FcltCallbackRefresh, "json");
        });
      }

      async function opdr_submit_first(callback_function)
      {
        // Als totaalkosten verplicht is, moet er een waarde > 0 zijn ingevuld.
        if ((opdrkosten_verplicht) && (parseFloat($("#tot_kosten").val().replace(',', '.')) == "0.00"))
          $("#tot_kosten").val("");
        if (!await validateForm("u2"))
          return false;

        // Alleen als je mag wijzigen zullen er wijzigbare velden zijn. Anders heeft het geen zin om op te slaan.
        // Als je geen rechten hebt om op te slaan, moet je nog wel het Initiële commando (callback_function) uitvoeren. Daarvoor had je rechten.
        if (canChange)
          $.post( $("form[name=u2]")[0].action
                , $("[name=u2]").serialize()
                , McltCallbackAndThenAlways(callback_function)
                , "json"
                );
        else
          callback_function({ success: false, toaster: L("lcl_no_auth") });
      }

      function opdr_submit()
      {
        opdr_submit_first(opdr_submit_callback);
        return true;
      }
      function opdr_submit_callback(json)
      {
        if (json.success)
        {
          jqToast(L("lcl_mobile_data_saved"));
          //57459 quicknote veld legen na submit
          $("#note").val("");
<%
          if (opdr_key < 0)
          {
%>
            // Nieuwe melding aangemaakt. Altijd complete reload, we hebben nu een opdr_key namelijk
          window.location.href = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>";
<%
          }
%>
        }
        else
        {
          if (json.toaster)
          {
            jqToast(json.toaster);
          }
        }
      }

      function mldHaltCallback()
      {
        var data = $("[name=haltform]").serialize();
        $.post($("form[name=haltform]")[0].action,
               data,
               McltCallbackAndThenAlways(function() { window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>"; }),
               "json");
        return false;
      }

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

<%      var save_note_url = "../mld/opdr_edit_note_save.asp?opdr_key=" + opdr_key; %>
        if ($(".mail_notes_halt").length > 0 && $(".mail_notes_halt").val().trim() != "")
        {
          var data = $("[name=haltform]").serialize();
          var url = "<%=save_note_url%>";
          $.post(url,
                 data,
                 FcltCallbackAndThenAlways(mldHaltCallback),
                 "json");
          return true; // Disable button.
        }
        else
        {
          var data = { success: true,
                       note_key: -1
                     };
          mldHaltCallback(data);
        }

        return true; // Disable button.
      }

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

        $.post($("form[name=cancelform]")[0].action, $("[name=cancelform]").serialize(), McltCallbackAndThenAlways(opdr_cancel_submit_callback), "json");
          return false;
      }
      function opdr_cancel_submit_callback(json)
      {
        if (json.success)
        {
          window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>";
        }
      }

      function opdr_cancel_action()
      {
          window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>";
      }

      function MopdrCloseCallback(json, textStatus)
      {
        if (json.canCloseMld)
        {
          $("form[name=closeform]")[0].action = "<%=rooturl%>/appl/pda/melding.asp?mld_key=<%=mld_key%>#close-3-<%=mld_key%>";
          var hiddenField = document.createElement('input');
          hiddenField.setAttribute("type", "hidden");
          hiddenField.setAttribute("name", "opdr_opm");
          hiddenField.setAttribute("value", json.opdr_opm);
          document.forms.closeform.appendChild(hiddenField);

          document.forms.closeform.submit();
        }
        else
          window.location.href = "<%=rooturl%>/appl/pda/order.asp?opdr_key=<%=opdr_key%>";
      }

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

        // Zelf de form-parameters zetten: PasteFromSelectbox() werkt niet als er meerdere velden met id=opdr_opm zijn
        // Daarom is deze uniek gemaakt (opdr_opm_4) en wordt de waarde daarvan in opdr_opm gezet voor mld_close_save.asp.
        var data = $("[name=closeform]").serialize() + "&opdr_opm=" + encodeURIComponent($("#opdr_opm_4").val());
        if ($("#mld_hlt") && $("#mld_hlt")[0] && $("#mld_hlt")[0].checked)
          data += "&mld_hlt=1";

        protectRequest.dataToken(data);

        $.post($("form[name=closeform]")[0].action,
               data,
               McltCallbackAndThen(MopdrCloseCallback),
               "json");
        return false;
      }
      function opdr_print()
      {
        FcltMgr.openDetail("/appl/mld/mld_opdr_xml.asp?opdr_key=<%=opdr_key%>");
        return false;
      };

      function PasteFromSelectbox()
      {
        if ($("#stdopmerk :selected").val() > -1)
        {
          $("#opdr_opm_4").focus();
          var PastedText = $("#stdopmerk :selected")[0].getAttribute("afmeldtekstoms");
          $("#opdr_opm_4").val($("#opdr_opm_4").val() + ($("#opdr_opm_4").val() != ""? "\n" : "") + PastedText);
        }
      }

      function checkSequence(id)
      {
        var thisID = "date_plan"+(id==2?"2":"");
        var thatID = "date_plan"+(id==2?"":"2");
        // after manual emptying the date contains value="NaN"
        if (isNaN($("#date_plan").val()))
        {
          $("#date_plan").val("");
        }
        if (isNaN($("#date_plan2").val()))
        {
          $("#date_plan2").val("");
        }
        // validate geplande einddatum >= geplande aanvang
        // $("#date_plan2").length alleen indien S("mld_use_plandate2") & 2, dus dat is dan al gechecked
        if ($("#show_"+thisID).length && $("#time_from_"+thisID).length && $("#"+thisID).length &&
            $("#show_"+thatID).length && $("#time_from_"+thatID).length && $("#"+thatID).length)
        {
          var pld = $("#date_plan").val();
          var pl2 = $("#date_plan2").val();
          if (pld != "" && pl2 != "" && pld > pl2) // Not consecutive
          {
            $("#show_"+thatID).val($("#show_"+thisID).val());
            $("#time_from_"+thatID).val($("#time_from_"+thisID).val());
            $("#"+thatID).val($("#"+thisID).val());
          }
        }
      }

      // iOS fix to force refresh after back(), otherwise the date-from is messed up
      // Gekopieerd uit pda/reservering.asp.
      function windowLocation(url)
      {
<%
          var agent = "" + Request.ServerVariables("HTTP_USER_AGENT");
          // Try to find out with some certainty that it is an Ios device
          var acknowledgeIos = ((agent.indexOf("Opera Mini") != -1 || agent.indexOf("iPhone") != -1)? "iOS" : "");
%>
          if ("<%=acknowledgeIos%>" == "iOS")
          {
              setTimeout(function() { location.reload(); }, 250);
          }
          window.location.href = url;
      }

      function mld_vis_callback(json)
      {
<%      // Direct door naar afspraken toevoegen als er al een afspraak bij deze reservering bestaat.
        purl = rooturl + "/appl/pda/afspraak_list.asp?mld_opdr_key=" + opdr_key;
%>
        windowLocation("<%=purl%>"); // iOS fix to force refresh after back()
      }

      function mld_vis()
      {
        opdr_submit_first(mld_vis_callback);
        return true;
      }

      // Nodig in notes_m.js
      window.module = "opdr";
      window.module_key = <%=opdr_key%>;
<%    notes.note_common_js(-1); %>
    </script>
  </head>

  <body>
<%  PAGE_START({id: "opdr-1-"+opdr_key});
    HEADER({title: subject, back:true, home: true});
    CONTENT_START();
%>
<script>
</script>

    <form action="<%=rooturl%>/appl/mld/mld_edit_opdr_save.asp?mobile=1&opdr_key=<%=opdr_key%>" method="post" name="u2" id="u2">
      <input type="hidden" name="forcesave" id="forcesave"    value="0">
      <input type="hidden" name="opdr_key"    value="<%=opdr_key%>"/>
      <input type="hidden" name="mld_key"     value="<%=mld_key%>"/>
      <input type="hidden" name="t_opdr"      value="<%=opdr_type%>"/>
      <input type="hidden" name="uitvoerende" value="<%=uitv_key%>"/>
      <input type="hidden" name="uitvkeystr"  value="<%=uitv_key%>"/>
<%
      if (pbtype == "P")
      {
%>      <input type="hidden" name="behandelaar" value="<%=mld_opdr.contactpers_key%>"/>  <%
      }
      BLOCK_START({collapsed: true, title: mld_opdr.opdr_type_omschr});

        FCLTuitvoerendeselector("uitvoerende",
                                "sgUitv",
                                { uitvoerendekey: mld_opdr.uitvoerende_key,
                                  label: mld_opdr.srtdiscbes ? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"),
                                  moreinfo: urole != "fe",
                                  readonly: true
                                });

        // Opmerking bij uitvoerende. Alleen zichtbaar voor de opdrachtgever, niet de uitvoerende zelf!
        if (user.has("WEB_ORDBOF"))
        {
          ROFIELD("uitv_opm", L("lcl_prs_companies_opmerking"), mld_opdr.uitv_opmerking, {multi: true});
        }

        if (pbtype == "BE")
        {
            if (opdr_key > -1)
                FCLTcontactpersoonselector("contactpers",
                                           "sgCntPersUitv",
                                           { contactpersoonKey: mld_opdr.contactpersuitv_key,
                                             label: L("lcl_contact_pers"),
                                             filtercode: "U",
                                             locatiekey: mld_info.loc_key,
                                             gebouwkey: mld_info.bld_key,
                                             aanvragerkey: mld_info.melder_key,
                                             urlAdd: [{urlParam: "uitv_key", field: "uitvoerende"}],
                                             suppressEmpty: true,
                                             readonly: true
                                           });
        }

        if (opdr_key > -1 && this_opdr.canRead("WEB_ORDBOF"))
        {
          params = { suppressEmpty: true };
          var authparamsCNTUSE = user.checkAutorisation("WEB_CNTUSE", true);
          var authparamsCNTMAN = user.checkAutorisation("WEB_CNTMAN", true);

          if (mld_opdr.contract_key && mld_opdr.contract_key>0 && (authparamsCNTUSE || authparamsCNTMAN))
            params.moreinfo = rooturl+"/appl/pda/contract.asp?cnt_key="+mld_opdr.contract_key;

          ROFIELD("fld", L("lcl_contract"), mld_opdr.contract_naam, params);
        }

        ROFIELD("fld", L("lcl_mld_meldingsoort")       ,mld_melding.ins_discipline_omschrijving + "-" + mld_melding.mld_stdmelding_omschrijving) ;
        var vOrderdate = (opdr_key > 0 ? mld_opdr.mld_opdr_datumbegin : new Date());
        ROFIELD("fld", L("lcl_orderdate"), toDateTimeString(vOrderdate)
               , { readonly: true
                 }
               );
%>      <input type="hidden" name="orderdate" id="orderdate" value="<%=vOrderdate.getTime()%>" /> <%
      BLOCK_END();

      if (mld_info.show_ins) { // Vakgroeptype zegt dat we objectgegevens kunnen registreren
        var stdm_info = mld.mld_stdmeldinginfo(mld_info.stdm_key);
        if (stdm_info.alg_onrgoed_obj_niveau || stdm_info.prsafdobj) { // Stdmelding zegt dat we plaats- of organisatie objecten kunnen registreren
          if (ins_name_arr.length < 2 && (mld_key < 0 || this_mld.canPlaatsChange))
          {
            var sql = get_objecten_sql(plaats_key, plaats_niveau, user_key, null, mld_info.stdm_key, {extracode: "UITV"});
            var tsql = "SELECT count(*) aantal FROM (" + sql + ")";
            var toRs = Oracle.Execute(tsql);
            var aantalObj = toRs("aantal").Value;
            toRs.close();
            var EmptyOption = true;
            if (aantalObj > 0 || mld_info.srtinst_verplichtstatus == 2)
            {
              if (aantalObj && mld_info.srtinst_verplichtstatus == 2)
                    EmptyOption = false;
              FCLTselector( "r_objs"
                          , sql
                          , { initKey: ins_keys_arr.length?ins_keys_arr[0]:-1
                            , label: L("lcl_gerelateerdeobjecten")
                            , mobile: true
                            , extraParamValue: "ins_alg_ruimte_key,ins_alg_ruimte_type,uitvoertijd"
                            , emptyOption: (EmptyOption ? L("lcl_select_object") : null)
                            , required: mld_info.srtinst_verplichtstatus == 2
                            }
                          );
            }
          }
          else if (ins_name_arr.length)
          {
            ROFIELD("fld", L("lcl_gerelateerdeobjecten"), ins_name_arr.join("\n"), { multi: ins_name_arr.length > 1 });
          }
        }
      }
      var params = { suppressEmpty: true
                   , moreinfo: "#info-6-"+opdr_key
                   };
      ROFIELD("fld", L("lcl_place"), lcode, params);

      if (pbtype == "BE" || pbtype == "BI")
      {   // (INTERN) BEHANDELAAR
          FCLTpersoonselector("behandelaar",
                                "sgPerson",
                                { perslidKey: mld_opdr.contactpers_key,
                                  label: L("lcl_mld_behandelaar"),
                                  filtercode: "OCP",
                                  urlAdd: [{urlParam: "pbtype", field: "pbtype", init: pbtype},
                                           {urlParam: "uitv_key", field: "uitvoerende", init: mld_opdr.uitvoerende_key}],
                                  disc_key: mld_melding.disc_key,
                                  readonly: (opdr_key > 0 && !this_opdr.canVeldChange),
                                  mobile: true,
                                  suppressEmpty: true
                                });
      }

      if (pbtype == "BE")
      {
          var mld_status_txt = (mld_opdr.opdr_status == -1 ? L("lcl_opdr_new_opdr") : mld.getextendedopdrstatustext(mld_opdr.extended_opdr_status, opdr_key));
          ROFIELD("fld", L("lcl_mld_status"), mld_status_txt); // Opdrachtstatus omschrijving
      }
      // Ik kan geen datum kiezen op de iPhone; calender sluit niet.
      FCLTcalendar("date_done",
                     { datum: mld_opdr.mld_opdr_einddatum,
                       minDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.melddatum : (opdr_key < 0 ? new Date() : mld_opdr.mld_opdr_datumbegin)),
                       maxDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.einddatum : null),
                       label: L("lcl_opdr_enddate"),
                       //  werkt niet omdat mld_einddatum niet bestaand en heeft toch geen effect? onChange: "DateChanged()",
                       readonly: (opdr_key > 0 && !this_opdr.canDatesChange),
                       volgnr: 2,
                       required: true,
                       mobile: true
                     } );

      if (this_opdr.canChange)
        FCLTcalendar("date_plan",
                       { datum: mld_opdr.mld_opdr_plandatum,
                         readonly: (opdr_key < 0),  // we weten ook dat klare opdrachten niet mobile zichtbaar zijn
                         label: L("lcl_opdr_plandate"),
                         required: false,
                         timeField: true,
                         timeStep: 15,
                         startTime: 8,
                         endTime: 18,
                         calendars: 1,
                         initEmpty: !mld_opdr.mld_opdr_plandatum,
                         initTimeEmpty: !mld_opdr.mld_opdr_plandatum,
                         onChange: "checkSequence()",
                         mobile: true
                       } );

      if (this_opdr.canChange && S("mld_use_plandate2") & 2)
        FCLTcalendar("date_plan2",
                       { datum: mld_opdr.mld_opdr_plandatum2,
                         readonly: (opdr_key < 0),  // we weten ook dat klare opdrachten niet mobile zichtbaar zijn
                         label: L("lcl_opdr_plandate2"),
                         required: false,
                         timeField: true,
                         timeStep: 15,
                         startTime: 8,
                         endTime: 18,
                         calendars: 1,
                         initEmpty: !mld_opdr.mld_opdr_plandatum2,
                         initTimeEmpty: !mld_opdr.mld_opdr_plandatum2,
                         onChange: "checkSequence(2)",
                         mobile: true
                       } );

      ROFIELD("fld", L("lcl_opdr_id"), mld_opdr.mld_opdr_id, { suppressEmpty: true });

      if (opdr_key > -1)
        ROFIELD("fld",         L("lcl_txt"), mld_opdr.opdr_omschr, {multi: true});
      else
        RWFIELD("opdr_omschr", L("lcl_txt"), mld_opdr.opdr_omschr, {multi: true});

      if(mld_info.kto_type && mld_info.kto_key > 0)
      {
        switch(mld_info.kto_type)
        {
          case "R":
            //reservering
            ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/reservering.asp?rsv_ruimte_key=" + mld_info.kto_key });
            break;
          case "M":
            //melding
            ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/melding.asp?mld_key=" + mld_info.kto_key });
            break;
          case "B":
            //bestelling
            ROFIELD("fld", L("lcl_mld_kto"), mld_info.kto_key, { moreinfo: rooturl + "/appl/pda/bestelling.asp?bes_key=" + mld_info.kto_key });
            break;
        }
      }

      var zichtbaar = (mld_info.fenotes == 1 || mld_info.fenotes == 3 );
      if (mld.func_enabled_melding(mld_key) && quicknoteSetting == 1 && this_opdr.canChange) {
          RWFIELD("note", L("lcl_mld_quick_note_new"), null, {multi: true});
          %><p id="quickNoteTip" style="display: none;"><sup><%=(zichtbaar ? safe.html(L("lcl_fac_ano_intotext1")) + " " + safe.html(L("lcl_mld_zichtbaar_FE")) : safe.html(L("lcl_fac_ano_intotext1")) + " " + safe.html(L("lcl_mld_verborgen_FE")))%></sup></p><%
      }

      generateFlexKenmerkBlock ({ nameprefix: "opdr_1_",
                                  extraserie: true,
                                  opdr_key: opdr_key,
                                  opdr_type: mld_opdr.opdr_type,
                                  opdr_type_org: mld_opdr.opdr_type_org,
                                  opdr_status: mld_opdr.opdr_status,
                                  mld_key: mld_key,
                                  stdm_arr: [],
                                  showClose: (opdr_key > 0 && this_opdr && (this_opdr.canClose || this_opdr.canHervatten || this_opdr.canSeeARFlex)),
                                  mobile: true,
                                  reado: (opdr_key > 0 && !(this_opdr.canFlexChange || this_opdr.canChangeARFlex)),
                                  showConfidential : this_opdr.canViewConfidential
                                });

      // resultsettable functies voor bestelitems.
      function fncolLink(oRs)
      {
        return "../pda/bes_bestelling_item.asp?ins_key=" + oRs("bes_bestelling_item_key").Value;
      };
      function fncolGroup(oRs)
      {
        return safe.html(oRs("mld_opdr_materiaal_key").Value);
      };
      function fncolHeader(oRs)
      {
        return safe.html(oRs("mld_opdr_materiaal_aantal").Value);
      };
      function fncolDetail(oRs)
      {
        return safe.html(oRs("mld_opdr_materiaal_omschr").Value);
      };
      function fnAside(oRs)
      {
        return safe.html(oRs("mld_opdr_materiaal_eenheid").Value);
      }

      sql = "SELECT COUNT(mld_opdr_materiaal_key) aantal"
          + "  FROM mld_opdr_materiaal ud"
          + "     , fin_btwtabelwaarde b"
          + " WHERE ud.fin_btwtabelwaarde_key = b.fin_btwtabelwaarde_key(+)"
          + "   AND mld_opdr_key = " + opdr_key;
      oRs = Oracle.Execute(sql);
      var mataantal = oRs("aantal").Value;
      oRs.Close();
      if (mataantal > 0)
      {
        sql = "SELECT fac_usrdata_key"
            + "     , mld_opdr_materiaal_key"
            + "     , mld_opdr_materiaal_omschr"
            + "     , mld_opdr_materiaal_aantal"
            + "     , mld_opdr_materiaal_eenheid"
            + "     , mld_opdr_materiaal_prijs"
            + "     , ud.fin_btwtabelwaarde_key"
            + "     , b.fin_btwtabelwaarde_oms"
            + "  FROM mld_opdr_materiaal ud"
            + "     , fin_btwtabelwaarde b"
            + " WHERE ud.fin_btwtabelwaarde_key = b.fin_btwtabelwaarde_key(+)"
            + "   AND mld_opdr_key = " + opdr_key;
        var resultset_params = { sql: sql
                               , keyColumn: "mld_opdr_materiaal_key"
                            // , linkColumn: fncolLink
                             , groupColumn: fncolGroup
                               , headerColumn: fncolHeader
                               , detailColumn: fncolDetail
                               , asideColumn: fnAside
                            // , subheaderColumn: "mld_opdr_materiaal_prijs"
                               , ID: "materiaaltable"
                               , showAll: true
                               , noSearch: true
                               };
        // Einde resultsettable functies voor bestelitems.
        BLOCK_START({collapsed: false, title: L("lcl_mld_materialen") + " (" + mataantal + ")"});
          var rst = new ResultsetTable(resultset_params);
          var cnt = rst.processResultset();
        BLOCK_END();
      }

      if (opdr_key > -1)
      {
        if (this_opdr.canOpmChange)
        {
          RWFIELD("opdr_opm"  , L("lcl_mld_inf_Opmerking"), mld_opdr.opdr_opmerking, {multi: true});

          // Of de melding naast de opdracht ook gesloten moet worden,
          // moet volgens configuratie settings worden bepaald, zonder extra interactie (zoals bij API (API/api_opdrsoap.asp)) (FSN#26329)
          // Bij afmelden &ismobile=1 meegeven, dan moet opdr_close_save.asp dit oplossen.
          %><input type="hidden" name="ismobile" value="1"><%
          //
        }
        else
        {
          ROFIELD("fld"  , L("lcl_mld_inf_Opmerking"), mld_opdr.opdr_opmerking, {multi: true} );
        }
        var nu = new Date;
%>      <input type="hidden" name="date_from" value="<%=nu.getTime()%>">  <%
%>      <input type="hidden" name="orgdate"   value="<%=nu.getTime()%>">  <%
      }

      if (pbtype == "BE" && S("mld_ord_show_ordernr") == 1) // <!-- ORDERNR -->
      {
        ROFIELD("fld", L("lcl_mld_inf_Ordernr"), mld_opdr.mld_opdr_ordernr);
      }

      if (mld_opdr.typeopdr_totaal == 1)
          var readonly = (opdr_key > 0 && !this_opdr.canUrenMatChange);

      if (mld_opdr.tonen_uren)
      { // Uren veld tonen.
        var flduren_label = L("lcl_mld_nrhours");
        switch (mld_opdr.typeopdr_uren)
        {
          case 3: {flduren_label = L("lcl_mld_hours_to_spent"); break;}
          case 4: {flduren_label = L("lcl_mlduren_max"); break;}
          case 5: {flduren_label = L("lcl_mld_hoursperweek"); break;}
        }
        RWFIELD( "uren"
               , flduren_label
               , safe.displayfloat(mld_opdr.hours, 2, true).replace(',', '.')
               , { pclass: "float" + (mld_opdr.typeopdr_uren == 2 || mld_opdr.typeopdr_uren == 4 || mld_opdr.typeopdr_uren == 5? " required" : ""),
                   datarole: "fieldcontain",
                   datatype: "number",
                   html: "onBlur='calcTotalMobile()' step='0.01'",
                   readonly: readonly
                 }
               )
      }
      if ((mld_opdr.typeopdr_uren == 3 || mld_opdr.typeopdr_uren == 4) && mld_opdr.booked)
          ROFIELD("geboekt", L("lcl_mlduren_booked"), String(safe.curr(mld_opdr.booked)).replace(',', '.'), {suppressEmpty: true, datarole: "fieldcontain"}); // Geboekte uren

      if (mld_opdr.tonen_uren)
        // UURTARIEF
        RWFIELD("uurtarief", L("lcl_hour_rate") + " " + S("currency_pref"),
                  safe.curreditable(mld_opdr.h_rate).replace(',', '.'),
                  { pclass: "currency"
                  , datarole: "fieldcontain"
                  , datatype: "number"
                  , html: "onBlur='calcTotalMobile()' step='0.01'"
                  , readonly: readonly
                  })

      if (mld_opdr.tonen_materiaal_bedrag)
        // MATERIAAL
        RWFIELD("mat_kosten", L("lcl_mater_cost") + " " + S("currency_pref"),
                  safe.curreditable(mld_opdr.m_cost).replace(',', '.'),
                  { pclass: "currency"
                  , datarole: "fieldcontain"
                  , datatype: "number"
                  , html: "onBlur='calcTotalMobile()' step='0.01''"
                  , readonly: readonly || !S("mld_ordermaterial_editable")
                  })

      if (mld_opdr.tonen_correctie)
        // CORRECTIE
        RWFIELD("corr_kosten",
                L("lcl_correct") + " " + S("currency_pref"),
                safe.curreditable(mld_opdr.corr_cost).replace(',', '.'),
                { pclass: "currency"
                , datarole: "fieldcontain"
                , datatype: "number"
                , html: "onBlur='calcTotalMobile()' step='0.01'"
                , readonly: readonly || mld_opdr.correctie_readonly
                })

      // TOTAAL
      if (mld_opdr.tonen_totaal)
      { // Zijn de totale kosten verplicht en ingevuld?
        // Opdrachttype - mld_typeopdr_kosten_verplicht (typeopdr kosten): 0 = Niet verplicht, 1 = Save + 2 = Afmelden, 4 = Afronden.
        // Vakgroep - mld_disc_params_opdr_kosten (opdracht kosten):   0 = Niet verplicht, 7 = Aanmaak, 6 = Afmelden, 4 = Afronden.
        isRequired = (mld_opdr.typeopdr_kosten_verplicht & 1 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 1)) ||
                      ((mld_opdr.typeopdr_kosten_verplicht & 2 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 2)) &&
                       (mld_opdr.opdr_status == 5 || mld_opdr.opdr_status == 8));
                     // Afronden(finish) is op mobile niet mogelijk. Deze laatste voorwaarde zal hier dus nooit true zijn. Daarom uitgecommentarieerd.
                     // ((mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4)) &&
                     //  mld_opdr.opdr_status == 6 && finish);
        RWFIELD( "tot_kosten"
               , L("lcl_total_cost") + " " + S("currency_pref")
               , safe.curreditable(mld_opdr.t_cost)
               , { pclass: "currency" + (isRequired? " required" : "")
                 , datarole: "fieldcontain"
                 //, html: (mld_opdr.typeopdr_materiaal == 0 || mld_opdr.typeopdr_materiaal == 1? "onBlur='calcTotalMobile()'" : null)
                 , readonly: true
                 }
               )
      }

      if ((urole == "bo" || urole == "fo" || S("mld_performer_can_change_flags")) && (S("mld_opdracht_flags") > 0))
      {
          sql = [];
          for (var i=0; i<S("mld_opdracht_flags"); i++)
          {
              sql.push("SELECT " + i + ", " + safe.quoted_sql(L("lcl_opdr_flags") + ": " + L("lcl_opdr_flag" + i)) + " FROM DUAL");
          }
          FCLTselector("opdrflag",
                        sql.join(" UNION ALL "),
                        { initKey: mld_opdr.flag,
                          mobile: true
                        });
      }

      CONTROLGROUP_START()
        // Buttons
        if (opdr_key > -1)
        {
          if (mld_opdr.opdr_status == 5 && this_opdr.canAccept)
            BUTTON(L("lcl_accept"),   {linkid: "#opdr-6-" + opdr_key, icon: "fa-circle-check"});
          if (this_opdr.canChange)
            BUTTON(L("lcl_submit"),   {click: "opdr_submit()",        icon: "fa-fclt-save"});
          if (this_opdr.canGoedkeur ||
              this_opdr.canGoedkeur2 ||
              this_opdr.canGoedkeur3 ||
              this_opdr.canGoedkeur4 ||
              this_opdr.canGoedkeur5)
            BUTTON(L("lcl_goedkeur"), {click: "opdr_goedkeur()",      icon: "fa-check"});
          if (this_opdr.canApprove)
            BUTTON(L("lcl_approve"),  {click: "opdr_approve()",       icon: "fa-square-check"});
          //PF: reject lijkt de tegenpool van accept, maar het is de tegenpool van approve
          if (this_opdr.canReject)
            BUTTON(L("lcl_reject"),   {click: "opdr_reject()",        icon: "fa-square-xmark"});
          if (this_opdr.canAcceptOffer)
            BUTTON(L("lcl_approve"),  {click: "opdr_accept_offer()",  icon: "fa-thumbs-up"});
          if (this_opdr.canRejectOffer)
            BUTTON(L("lcl_reject"),   {click: "opdr_reject_offer()",  icon: "fa-thumbs-down"});

          // Onderbreken.
          if (this_opdr.canOnderbreken)
          {
            if (hasKenmerkOnderbreken)
              BUTTON(L("lcl_halt"), {linkid: "#opdr-5-" + opdr_key, icon: "fa-pause"});
            else
              BUTTON(L("lcl_halt"),   {click: "opdr_halt()", icon: "fa-pause"});
          }
          // Hervatten.
          if (this_opdr.canHervatten)
            BUTTON(L("lcl_resume"),   {click: "opdr_resume()", icon: "fa-play"});

          if (this_opdr.canClose)
          { // Afmelden
            if (this_opdr.canOpmChange || hltopdr.aantal == 1 || askclosemld)
              BUTTON(L("lcl_close"),  {linkid: "#opdr-4-" + opdr_key, icon: "fa-flag-checkered"});
            else
              BUTTON(L("lcl_close"),  {click: "opdr_close()", icon: "fa-flag-checkered"});
          }
          if (this_opdr.canVerwerk)
            BUTTON(L("lcl_mld_opdr_verwerk"),  {click: "opdr_verwerk()", icon: "fa-archive"});
          // DIT VEREIST NOG EEN OMZETTING IN opdr_cancel_save.asp > TODO
          if (this_opdr.canCancel)
            BUTTON(L("lcl_mld_opdr_cancel_button"), {linkid: "#opdr-3-" + opdr_key, icon: "fa-fclt-cancel"});
          if (thereAreObjects)
          {
            BUTTON( L("lcl_mobile_objecten") + " (" + ins_keys_arr.length + ")"
                  , { linkid: ( thereAreMultipleObjects
                              ? rooturl + "/appl/pda/ins_list.asp?mld_key=" + mld_key +"&plaatsfilter=0"
                              : rooturl + "/appl/pda/ins_deel.asp?ins_key=" + ins_keys_arr[0]
                              )
                    , icon: "fa-info"
                    });
          }
          trackinglines = mobile.hastrackingpage('opdracht', opdr_key);
          if (trackinglines > 0)
          {
            BUTTON(L("lcl_history"),  {linkid: "#opdr-2-"+opdr_key, icon: "fa-clipboard-list"});
          }
          if (this_opdr.canShowOpdrNote)  // Heb ik rechten om notities te zien
          {
            var tsql = "SELECT COUNT(*) FROM mld_opdr_note n WHERE n.mld_opdr_key = " + opdr_key;
            toRs = Oracle.Execute(tsql);
            BUTTON(L("lcl_mld_frame_notes") + " (" + toRs(0).value + ")", {linkid: rooturl+"/appl/pda/notitie.asp?node=opdracht&key="+opdr_key, icon: "fa-comment" });
            toRs.Close();
            if (!Session("app_build")) {
              BUTTON(L("lcl_print"), {click: "opdr_print()", icon: "fa-print"});
            }
          }

          if (this_mld.canAddOpdr)
          {
            BUTTON(L("lcl_mobile_opdrachten4"), {linkid:rooturl + "/appl/pda/order.asp?mld_key=" + mld_opdr.mld_key , icon: "fa-share" });
          }
          // Kunnen er bij de opdracht bezoekers afspraken geregistreerd worden (setting via opdrachttypes).
          var sql = "SELECT mld_opdr_key"
                  + "  FROM mld_opdr mo"
                  + "     , mld_typeopdr mto"
                  + " WHERE mo.mld_typeopdr_key = mto.mld_typeopdr_key"
                  + "   AND mo.mld_opdr_key = " + opdr_key
                  + "   AND mld_typeopdr_bez = 1";
          var oRs = Oracle.Execute(sql);
          var canHaveBez = !oRs.eof;
          oRs.Close();
          if (this_opdr.canChange && canHaveBez)
          {
            var sql = "SELECT COUNT(mld_opdr_key) aantal"
                    + "  FROM bez_afspraak ba"
                    + " WHERE mld_opdr_key = " + opdr_key;
            var oRs = Oracle.Execute(sql);
            var aantal = oRs("aantal").Value;
            oRs.Close();
            BUTTON(L("lcl_mobile_appointments") + (aantal > 0? " (" + aantal + ")" : ""), {click: "mld_vis()", icon: "fa-th"});
          }
          if (this_mld.canReadAny)
          {
            BUTTON(L("lcl_complain"), {linkid: rooturl + "/appl/pda/melding.asp?mld_key=" + mld_opdr.mld_key , icon: "fa-info" });
          }
        }
        else
        {
          BUTTON(L("lcl_newsubmit"), {click: "opdr_submit()", icon: "fa-fclt-save", singlepress: true});
          trackinglines = 0;
        }
      CONTROLGROUP_END()
    IFACE.FORM_END();
%>
    </form>
<%
    CONTENT_END();

    FOOTER();
    PAGE_END();

if (opdr_key > -1)
{

    if (trackinglines > 0)
    {
      PAGE_START({id: "opdr-2-"+opdr_key})
      mobile.trackingpage('opdracht', opdr_key, subject);
      PAGE_END();
    }

    // scherm: Annuleren opdracht
    PAGE_START({id: "opdr-3-"+opdr_key })
      HEADER({title: L("lcl_mld_opdr_cancel_button") + " " + subject, back: false});
      CONTENT_START();
%>
        <form id="cancelform" name="cancelform" action="<%=rooturl%>/appl/mld/opdr_cancel_save.asp?opdr_key=<%=opdr_key%>" method="post">
<%
          RWFIELD("opdr_opm"  , L("lcl_mld_inf_Opmerking"), mld_opdr.opdr_opmerking, {multi: true, pclass: " required"});
      // De verplichte afwijs (cancel) kenmerken tonen bij het afmelden. Vooralsnog worden de andere verplichte kenmerken niet getoond.
      generateFlexKenmerkBlock({ nameprefix: "opdr_3_",
                                 extraserie: true,
                                 opdr_key: opdr_key,
                                 opdr_type: mld_opdr.opdr_type,
                                 opdr_type_org: mld_opdr.opdr_type,
                                 opdr_status: mld_opdr.opdr_status,
                                 mld_key: mld_opdr.mld_key,
                                 stdm_arr: [mld_opdr.stdm_key], // Stdmelding
                                 cancel: true,
                                 mobile: true,
                                 act_key: -1,
                                 reado: (!(this_opdr.canFlexChange || this_opdr.canChangeARFlex)? "1" : null),
                                 prs_key: user_key, // Perslid key, wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
                                 showConfidential: this_opdr.canViewConfidential
                               });
          CONTROLGROUP_START();
            BUTTON(L("lcl_submit"), {click: "opdr_cancel_submit()", icon: "fa-fclt-save"});
            BUTTON(L("lcl_cancel"), {click: "opdr_cancel_action()", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
        </form>
<%
      CONTENT_END();
    PAGE_END();

    // scherm: Afmelden opdracht
    PAGE_START({id: "opdr-4-" + opdr_key, dialog: true})
      HEADER({title: L("lcl_close") + " " + subject, back: false});
      CONTENT_START();
        var nu = new Date;
%>
        <form id="closeform" name="closeform" action="<%=rooturl%>/appl/mld/opdr_close_save.asp?opdr_key=<%=opdr_key%>" method="post">
          <input type="hidden" name="orgdate" id="orgdate" value="<%=nu.getTime()%>">
<%
          if (this_opdr.canOpmChange)
          {
            var sql_from_t = "  FROM mld_afmeldtekst"
                           + " WHERE ((mld_stdmelding_key = " + mld_opdr.stdm_key + ")"
                           + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key = " + mld_opdr.dis_key + ")"
                           + "    OR (mld_stdmelding_key IS NULL AND mld_ins_discipline_key IS NULL))"
                           + "   AND BITAND(mld_afmeldtekst_usefor, 4) = 4";
            var sql = "SELECT 1"
                    + sql_from_t;
            oRs = Oracle.Execute(sql);
            if (!oRs.eof)
            {
              sql = "SELECT mld_afmeldtekst_key"
                  + "     , " + lcl.xsqla('mld_afmeldtekst_naam', 'mld_afmeldtekst_key')
                  + "     , " + lcl.xsql('mld_afmeldtekst_omschrijving', 'mld_afmeldtekst_key') + " afmeldtekstoms"
                  + "     , 2 src"
                  + sql_from_t;

              FCLTselector("stdopmerk",
                           sql,
                           { label: L("lcl_mld_inf_std_opm"),
                             initKey: -1,
                             emptyOption: "",
                             extraParamValue: "afmeldtekstoms",
                             onChange: "PasteFromSelectbox()"
                           });
            }
            oRs.Close();

            RWFIELD("opdr_opm_4", L("lcl_mld_final_remark"), mld_opdr.opdr_opmerking, {multi: true});
          }
          if (askclosemld)
          {
            CHB_FIELD("mld_close", L("lcl_mld_mld_close_try"));
          }
          if (hltopdr.aantal == 1)
          {
            CHB_FIELD("mld_hlt", L("lcl_mld_opdr_cont").format(hltopdr.opdracht));
          }

          // De verplichte afmelden (close) kenmerken tonen bij het afmlden. Vooralsnog worden de andere verplichte kenmerken niet getoond.
          generateFlexKenmerkBlock({ nameprefix: "opdr_4_",
                                     extraserie: true,
                                     opdr_key: opdr_key,
                                     opdr_type: mld_opdr.opdr_type,
                                     opdr_type_org: mld_opdr.opdr_type,
                                     opdr_status: mld_opdr.opdr_status,
                                     mld_key: mld_opdr.mld_key,
                                     stdm_arr: [mld_opdr.stdm_key], // Stdmelding
                                     close: true,
                                     act_key: -1,
                                     mobile: true,
                                     reado: (!(this_opdr.canFlexChange || this_opdr.canChangeARFlex)? "1" : null),
                                     prs_key: user_key, // Perslid key, wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
                                     showConfidential: this_opdr.canViewConfidential
                                   });


          CONTROLGROUP_START();
            BUTTON(L("lcl_submit"), {click: "opdr_close_submit()", icon: "fa-fclt-save"});
            BUTTON(L("lcl_cancel"), {click: "opdr_cancel_action()", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
        </form>
<%
      CONTENT_END();
    PAGE_END();

    // scherm: Verplichte kenmerken invullen bij onderbreken opdracht.
    PAGE_START({id: "opdr-5-" + opdr_key, dialog: true})
      HEADER({title: L("lcl_halt") + " " + subject, back: false});
      CONTENT_START();
%>
        <form id="haltform" name="haltform" action="<%=rooturl%>/appl/mld/opdr_halt_save.asp?opdr_key=<%=opdr_key%>" method="post">
<%
          //var mld_opdr = mld.mld_opdr_info(opdr_key);
          var ttl = L("lcl_mld_opdr_number") + " " + (mld_opdr.srtdiscprefix||"") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr;

          BLOCK_START({ "id": "mldhalt", "title": ttl });
          if (this_opdr.canEditOpdrNote)
            RWFIELD("note", L("lcl_mld_note"), "", {multi: true, pclass: "mail_notes_halt", suppressEmpty: true});
          BLOCK_END();

          // De verplichte onderbreek (halt) kenmerken tonen bij het onderbreken. Vooralsnog worden de andere verplichte kenmerken niet getoond.
          generateFlexKenmerkBlock({ nameprefix: "opdr_5_",
                                     extraserie: true,
                                     opdr_key: opdr_key,
                                     opdr_type: mld_opdr.opdr_type,
                                     opdr_type_org: mld_opdr.opdr_type,
                                     opdr_status: mld_opdr.opdr_status,
                                     mld_key: mld_opdr.mld_key,
                                     stdm_arr: [mld_opdr.stdm_key], // Stdmelding
                                     halt: true,
                                     act_key: -1,
                                     mobile: true,
                                     reado: (!(this_opdr.canFlexChange || this_opdr.canChangeARFlex)? "1" : null),
                                     prs_key: user_key, // Perslid key, wordt alleen gebruikt als geldt (!kenmerk_search && !multiMode)
                                     showConfidential: this_opdr.canViewConfidential
                                   });

          notes.note_toggles("OPDR", { pkey: opdr_key, mobile: true });

          CONTROLGROUP_START();
            BUTTON(L("lcl_submit"), {click: "opdr_halt_submit()", icon: "fa-fclt-save"});
            BUTTON(L("lcl_cancel"), {click: "opdr_cancel_action()", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
        </form>
<%
      CONTENT_END();
    PAGE_END();

    // scherm: Accepteren opdracht.
    PAGE_START({id: "opdr-6-" + opdr_key, dialog: true})
      HEADER({title: L("lcl_accept") + " " + subject, back: false});
      CONTENT_START();
%>
        <form id="acceptform" name="acceptform" action="<%=rooturl%>/appl/mld/opdr_accept_save.asp?opdr_key=<%=opdr_key%>" method="post">
          <input type="hidden" name="opdr_key"value="<%=opdr_key%>"/>
<%
          //var mld_opdr = mld.mld_opdr_info(opdr_key);
          var ttl = L("lcl_mld_opdr_number") + " " + (mld_opdr.srtdiscprefix||"") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr;

          BLOCK_START({ "id": "mldaccept", "title": ttl });
          if (this_opdr.canEditOpdrNote)
            RWFIELD("note", L("lcl_mld_note"), "", {multi: true, pclass: "mail_notes_accept", suppressEmpty: true});
          BLOCK_END();

          notes.note_toggles("OPDR", { pkey: opdr_key, mobile: true });

          CONTROLGROUP_START();
            BUTTON(L("lcl_submit"), {click: "opdr_accept_submit()", icon: "fa-fclt-save"});
            BUTTON(L("lcl_cancel"), {click: "opdr_cancel_action()", icon: "fa-fclt-cancel"} );
          CONTROLGROUP_END();
          IFACE.FORM_END();
%>
        </form>
<%
      CONTENT_END();
    PAGE_END();

    PAGE_START({id: "info-6-" + opdr_key, dialog: true});
      HEADER({title: L("ins_srtdiscipline_alg") , back:true });
      CONTENT_START();
        var sql = "SELECT COALESCE(g.alg_gebouw_adres, l.alg_locatie_adres) adres"
                + "     , l.alg_locatie_plaats"
                + "     , COALESCE(g.alg_gebouw_postcode, l.alg_locatie_postcode) postcode"
                + "     , o.alg_gebouw_naam"
                + "     , o.alg_verdieping_omschrijving"
                + "     , o.alg_ruimte_nr"
                + "     , o.alg_ruimte_omschrijving"
                + "     , o.alg_verdieping_key"
                + "     , ct.cad_tekening_key"
                + "     , o.alg_ruimte_key"
                + "     , cad_thema_key"
                + "  FROM alg_v_onroerendgoed_gegevens o"
                + "     , alg_locatie l"
                + "     , alg_gebouw g"
                + "     , mld_melding m"
                + "     , mld_stdmelding msd"
                + "     , mld_opdr    w"
                + "     , (SELECT * FROM cad_tekening WHERE cad_tekening_verwijder IS NULL AND cad_tekening_type = 'P') ct"
                + " WHERE o.alg_locatie_key = l.alg_locatie_key"
                + "   AND o.alg_onroerendgoed_keys = m.mld_alg_onroerendgoed_keys"
                + "   AND o.alg_gebouw_key = g.alg_gebouw_key(+)"
                + "   AND o.alg_verdieping_key = ct.alg_verdieping_key(+)"
                + "   AND m.mld_melding_key = w.mld_melding_key"
                + "   AND m.mld_stdmelding_key = msd.mld_stdmelding_key"
                + "   AND w.mld_opdr_key = " + opdr_key;

        var oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
          var info_params = { suppressEmpty: true };
          ROFIELD("fld", L("lcl_alg_loc_adres"),               oRs("adres").Value, info_params);
          ROFIELD("fld", L("lcl_alg_loc_plaats"),              oRs("postcode").Value+" "+oRs("alg_locatie_plaats").Value, info_params);
          ROFIELD("fld", L("lcl_estate_gebouw_man_name"),      oRs("alg_gebouw_naam").Value, info_params);
          ROFIELD("fld", L("lcl_estate_verdieping_man_descr"), oRs("alg_verdieping_omschrijving").Value, info_params);
          if (oRs("cad_tekening_key").Value)
          {
            var ruimte_params = { suppressEmpty: true, moreinfo: rooturl
                                    + "/appl/pda/plattegrond.asp?verdieping_key="+oRs("alg_verdieping_key").Value
                                    + "&ruimte_key="+oRs("alg_ruimte_key").Value
                                    + (oRs("cad_thema_key").Value > 0
                                      ? "&thema_key=" + oRs("cad_thema_key").Value
                                      : "&nothema=1") };
          }
          else
          {
            var ruimte_params = info_params;
          }
          ROFIELD("fld", L("lcl_estate_ruimte_man_nr"),        oRs("alg_ruimte_nr").Value, ruimte_params);
          ROFIELD("fld", L("lcl_estate_ruimte_man_sort"),      oRs("alg_ruimte_omschrijving").Value, info_params);
        }
        oRs.Close();

      CONTENT_END();
    PAGE_END();
      //
      // *****************************************************
} // einde if (opdr_key > -1)

PDA_PAGE_END(); %>
	</body>
</html>
<% ASPPAGE_END();
%>
