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

    File:               mld_edit_opdr.asp (formerly order_input.asp;142)
    Description:        Muteerscherm voor opdrachten bij meldingen
                        Ook vanuit BES/rfo_approve.asp
    Parameters:
                        urole : fe | fo |bo | mi  REQUIRED
                        opdr_key: opdrachtkey (optioneel, anders nieuwe opdracht. Dan mld_key verplicht)
                        opdr_type: opdrachttype key, alleen bij nieuwe opdrachten die gekozen wordt in popup scherm
                        mld_key: meldingkey (optioneel, anders bestaande opdracht)
                        close:
                        ..etc
    Context:
    Note:               Submit naar mld_edit_opdr_save.asp
                        Sinds FSN#20132 kan type_opdr niet meer hier getoggled worden.
*/ %>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/calendar.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/status.inc" -->
<!-- #include file="../Shared/selector.inc" -->
<!-- #include file="../Shared/plaatsselector.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/contactpersoonselector.inc" -->
<!-- #include file="../Shared/uitvoerendeselector.inc" -->
<!-- #include file="../Shared/kostenplaatsselector.inc" -->
<!-- #include file="../Shared/kostensoortselector.inc" -->
<!-- #include file="../Shared/get_objecten_sql.inc" -->
<!-- #include file="mld_flexkenmerk.inc" -->
<!-- #include file="../Shared/json2.js" -->
<!-- #include file="mld.inc" -->

<%
FCLTHeader.Requires({ plugins:["jQuery", "kenmerk"],
                      js: ["../mld/mld_edit_opdr.js", "num2curr.js", "jquery.timepicker-table.js"],
                      css: ["timePicker-table.css"] });
/***** Get webform parameters *****/
// Indien geen urole is meegegeven dan bo als ORDBOF rechten anders fe.
var authparamsORDBOF = user.checkAutorisation("WEB_ORDBOF", true);
var urole = getQParamSafe("urole", (authparamsORDBOF && (authparamsORDBOF.PRSwritelevel < 9 && authparamsORDBOF.ALGwritelevel < 9))? "bo" : "fe");
var fronto = urole == "fo";
var backo = urole == "bo";
var minfo = urole == "mi";
var frontend = (urole == "fe" || (!fronto & !backo & !minfo));  // NOT APPLICABLE?

// Ik wil een opdrachtnummer weten, anders verplicht een melding_key (= toevoegen opdracht)
var opdr_key = getQParamInt("opdr_key", -1);
var copy = (getQParamInt("opdr_copy", 0) == 1);
var finish = (getQParamInt("finish", 0) == 1);
var opdr_copy_key = -1;
if (copy)
{
  opdr_copy_key = opdr_key;
  if (opdr_copy_key == -1) Response.End;
  opdr_key = -1; // Bij kopieren wordt er een nieuwe opdracht aangemaakt, waarbij de initiele waarden van de invoervelden de waarden van de te kopieren opdracht moeten zijn.
}

var this_opdr;
if (opdr_key > 0)
{
  var cnt_key = -1;
  this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
  user.auth_required_or_abort(this_opdr.canChange);

  // Haal de opdrachtgegevens op van de opdracht
  mld_opdr = mld.mld_opdr_info(opdr_key);

  mld_key = mld_opdr.mld_key;
  mld_opdr.opdr_type_org = mld_opdr.opdr_type; // As in/from database

  if (mld_opdr.contactpersuitv_key == null)
    mld_opdr.contactpersuitv_key = -1;

}
else
{ // Nieuwe opdracht en dus ook bij copy (opdr_key == -1)
  // MGE: NU wordt voor copy de cnt_key uit de gecopieerde opdracht gebruikt!
  var cnt_key = getQParamInt("cnt_key", -1);   //TODO: CONN#16529
  var mld_key = getQParamInt("mld_key");
  var opdr_type = getQParamInt("opdr_type");
  var uitvoerende_key = getQParamInt("uitvoerende_key", -1);
  var act_key = getQParamInt("act_key", -1);

  // Haal gegevens van de opdracht op van waaruit je kopieert,
  // of wat je weet voor een nieuwe opdracht.
  var params = { uitvoerende_key: uitvoerende_key
               , cnt_key: cnt_key
               , opdr_copy_key: opdr_copy_key
               , act_key: act_key
               };
  var mld_opdr = mld.mld_opdr_info_new(mld_key, opdr_type, params);
  if (copy)
  {
    mld_key = mld_opdr.mld_key;

    if (mld_opdr.contactpersuitv_key == null)
      mld_opdr.contactpersuitv_key = -1;
  }
  //else // echt nieuw


  // 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
}
var this_mld = mld.func_enabled_melding(mld_key); // wat mag ik zoal op de bijbehorende melding.

lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");

// Kijk naar de totale rechten die ik heb.
var autfunction = ["WEB_ORDBOF", "WEB_ORDBO2", "WEB_MLDORD", "WEB_ORDOAP", "WEB_ORDSUP"];
/***** End get webform parameters *****/

var authparams = user.checkAutorisation(autfunction);

// Kan zijn dat ik niet precies de juiste role heb meegekregen, bijvoorbeeld als leverancier met read op ORDBOF
// en write op ORDBO2/ORDOAP binnenkomt (FSN#16737/AASA#22871). Dan schakelen we naar ORDBO2/ORDOAP
if (autfunction == "WEB_ORDBOF" && !(authparams.PRSwritelevel < 9 || authparams.ALGwritelevel < 9))
{
  autfunction = "WEB_ORDBO2";
  authparams1 = user.checkAutorisation(autfunction, true);
  autfunction = "WEB_ORDOAP";
  authparams2 = user.checkAutorisation(autfunction, true);
  if (authparams1)
  {
    urole = "b2";  // voor evt. propagatie
  }
  else if (authparams2)
  {
    urole = "bo";  // voor wijzigen kenmerken met volgnummer > 900
  }
  else // allerlaatste kans
  {
    autfunction = "WEB_ORDSUP";
    authparams = user.checkAutorisation(autfunction);
  }
}
// JGL Het omgekeerde, write op ORDBOF maar read ORDBO2 kwam bij ATCH voor: FSN#17306

// Haal gerelateerde melding gegevens op
var mld_melding = mld.mld_melding_info(mld_key); // Globale variabele met alle mld_melding informatie

sql = "SELECT s.prs_dienst_key"
    + "     , CASE"
    + "       WHEN COALESCE (kp.prs_kostenplaats_eind, SYSDATE + 1) > SYSDATE"
    + "       THEN 1"
    + "       ELSE 0"
    + "       END kpgeldig"
    + "     , s.alg_onrgoed_obj_niveau"
    + "     , m.prs_kostenplaats_key"
    + "  FROM mld_melding m"
    + "     , mld_stdmelding s"
    + "     , prs_kostenplaats kp"
    + " WHERE m.mld_melding_key = " + mld_key
    + "   AND m.mld_stdmelding_key = s.mld_stdmelding_key"
    + "   AND m.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)";
oRs = Oracle.Execute(sql);
var stdm_prs_dienst_key = oRs("prs_dienst_key").Value || -1; // default volgens stdm
var defkp_key = oRs("kpgeldig").Value == 1? (oRs("prs_kostenplaats_key").Value || -1) : -1;   // de defaultwaarde komt van de melding en moet nog wel geldig zijn.
var alg_onrgoed_obj_niveau = oRs("alg_onrgoed_obj_niveau").Value || "";
oRs.close();

if (opdr_key < 0 && !copy) // Nu default omschrijving van de opdracht vullen met flexkenmerken
{
  mld_opdr.opdr_omschr = mld_melding.mld_omschr? mld_melding.mld_omschr : ""; // initieel melding omschrijving overnemen
  if (S("mld_ord_flexsummary") == 1)
    mld_opdr.opdr_omschr += mld.getFlexSummary(mld_key);
}

if (opdr_key > 0)
{ // Voor bestaande melding is wellicht andere dienst dan default gekozen
  sql = "SELECT prs_dienst_key"
      + "  FROM prs_bedrijfdienstlocatie"
      + " WHERE prs_bedrijf_key = " + mld_opdr.uitvoerende_key
      + "   AND (alg_locatie_key = " + mld_melding.loc_key + " OR alg_locatie_key IS NULL)"
      + "   AND (alg_gebouw_key = " + mld_melding.bld_key + " OR alg_gebouw_key IS NULL)"
  oRs = Oracle.Execute(sql);
  if (!oRs.eof)
    stdm_prs_dienst_key = oRs("prs_dienst_key").Value;

  // Registratiedatum opdracht bepalen.
  sql = "SELECT fac.gettrackingdate('ORDNEW', " + opdr_key + ") registratiedatum FROM DUAL"
  oRs = Oracle.Execute(sql);
  var registratiedatum = new Date(oRs("registratiedatum").Value);
  oRs.Close();
}
else
  var registratiedatum = new Date();

if (opdr_key < 0)
{
  // Voor nieuwe opdrachten is de default Startdatum *vandaag*,
  // tenzij de meldingdatum in de toekomst ligt, dan is het die datum
  mld_opdr.mld_opdr_datumbegin = new Date();
  if (mld_opdr.mld_opdr_datumbegin.midnight() < mld_melding.melddatum.midnight() || S("mld_enforce_orderdates") == 1)
    mld_opdr.mld_opdr_datumbegin = mld_melding.melddatum;

  // Voor nieuwe opdrachten is de default Einddatum gelijk aan de einddatum van de melding
  // tenzij die in het verleden ligt, dan is het de opdrachtstartdatum
  mld_opdr.mld_opdr_einddatum = mld_melding.einddatum;
  if (S("mld_enforce_orderdates") != 1 && mld_opdr.mld_opdr_einddatum.midnight() < mld_opdr.mld_opdr_datumbegin.midnight())
    mld_opdr.mld_opdr_einddatum = mld_opdr.mld_opdr_datumbegin;
}

// Bepaal het aantal werkdagen
// De melding_einddatum kan afwijken van melding_datum + uitvoertijd.
// Dus niet m.mld_melding_t_uitvoertijd nemen als uitvoertijd (Is alleen standaard waarde).
var ora_date1 = mld_opdr.mld_opdr_datumbegin.toSQL(true);
var ora_date2 = mld_opdr.mld_opdr_einddatum.toSQL(true);
sql = "SELECT fac.count_work_days(" + ora_date1 + ", " + ora_date2 + ") work_days FROM DUAL";
oRs = Oracle.Execute(sql);
if (oRs("work_days").Value > 0)
  mld_opdr.period = oRs("work_days").Value;
oRs.close();

if (opdr_key < 0) mld_opdr.mld_opdr_ordernr = mld_melding.mld_ordernr;

// Bepaal de initiële kostenplaats
if (!mld_opdr.kp_key || mld_opdr.kp_key == -1) mld_opdr.kp_key = defkp_key;  // initialiseer op de mld_melding-kostenplaats
if (!mld_opdr.kp_key) mld_opdr.kp_key = -1; // dan was die er dus niet

if (mld_opdr.kp_key == -1)
{ // Kijk dan of er wellicht niks te kiezen valt, d.i. slechts 1 keuze is.
  // Dan is het namelijk gewenst om die als default te nemen.
  // Code/controle gebaseerd op SuggestKostenplaats.asp
  // Check if person is authorized for all accounts
  all_kostenplaats = false;
  sql = " SELECT pk.prs_perslidkostenplaats_key"
        + " FROM prs_perslidkostenplaats pk"
        + " WHERE pk.prs_perslid_key = " + user_key
        + " AND pk.prs_perslidkostenplaats_boeken = 1"
        + " AND pk.prs_kostenplaats_key IS NULL";
  oRs = Oracle.Execute(sql);
  if (!oRs.eof)
    all_kostenplaats = true;
  oRs.Close();
  if (!all_kostenplaats)
  { // Er is geen autorisatie bij kostenplaatsen (prs_kostenplaats)
    // Niet persoon of plaats afhankelijk
    sql = "SELECT k.prs_kostenplaats_key "
        + " FROM prs_perslidkostenplaats pk"
        + ", prs_v_aanwezigkostenplaats k"
        + " WHERE pk.prs_kostenplaats_key = k.prs_kostenplaats_key"
        + " AND pk.prs_perslidkostenplaats_boeken = 1"
        + " AND pk.prs_perslid_key = " + user_key
        + ((S("prs_dep_default_kpn") == 1)
          ? " UNION"
            + " SELECT k.prs_kostenplaats_key "
            + " FROM prs_perslid p"
            + ", prs_afdeling a"
            + ", prs_v_aanwezigkostenplaats k"
            + " WHERE p.prs_afdeling_key = a.prs_afdeling_key"
            + " AND p.prs_perslid_key = " + user_key
            + " AND a.prs_kostenplaats_key = k.prs_kostenplaats_key"
          : "");
    oRs = Oracle.Execute(sql);
    if (!oRs.eof)
    {
      mld_opdr.kp_key = oRs("prs_kostenplaats_key").Value;
      oRs.MoveNext();
      // Als er toch meerdere zijn, dan hebben we dus alsnog geen goede default
      if (!oRs.eof) mld_opdr.kp_key = -1;
    }
    oRs.Close();
  }
  var autoGebouwKp = false;
  if (mld_opdr.kp_key == -1 && mld_melding.mld_kk == 0 && mld_melding.bld_key > 0)
  { // Is er een gebouw kostenplaats die ingevuld kan worden.
    sql = "SELECT COALESCE(prs_kostenplaats_key, -1) prs_kostenplaats_key"
        + "  FROM alg_gebouw"
        + " WHERE alg_gebouw_key = " + mld_melding.bld_key;
    oRs = Oracle.Execute(sql);
    mld_opdr.kp_key = oRs("prs_kostenplaats_key").Value;
    autoGebouwKp = true;
  }
}

// Aantal lopende opdrachten.
sql = "SELECT COUNT(mld_opdr_key) nrOpen"
    + "  FROM mld_opdr o"
    + " WHERE mld_melding_key = " + mld_key
    + "   AND o.mld_statusopdr_key NOT IN (1, 2, 6, 7, 9)"
    + "   AND o.mld_opdr_key != " + opdr_key;
oRs = Oracle.Execute(sql);
var nrOpenOpdr = oRs("nrOpen").Value;
oRs.Close();

%>

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

    <script type="text/javascript">
      var urole = "<%=urole%>";
      var frontend = "<%=frontend%>";
      var opdr_key = <%=opdr_key%>;
      var mld_key = <%=mld_key%>;
      var prefix = "<%=mld_melding.prefix%>";
      var volgnr = "<%=mld_opdr.volgnr%>";
      var cnt_key = <%=cnt_key%>;
      var act_key = <%=mld_opdr.act_key%>;
      var kp_key = <%=mld_opdr.kp_key%>;
      var defkp_key = <%=defkp_key%>;
      var kpnverplicht = (<%=mld_melding.kpnverplicht? 1 : 0%> == 1);
      var opdr_status = <%=mld_opdr.opdr_status%>;
      var typeopdr_matchtype = <%=mld_opdr.typeopdr_matchtype || -1%>; // voor als readonly
      var typeopdr_offertelimiet = <%=mld_opdr.typeopdr_offertelimiet%>;
      var typeopdr_isofferte = <%=mld_opdr.typeopdr_isofferte%>;
      var opdr_type = <%=mld_opdr.opdr_type%>;
      var mld_ord_show_cost = <%=S("mld_ord_show_cost")? 1 : 0%> == 1;
      var mld_enforce_orderdates = <%=S("mld_enforce_orderdates")? 1 : 0%> == 1;
      var copy = (<%=copy? 1 : 0%> == 1);
      var srtdiscbes = <%=mld_opdr.srtdiscbes? 1 : 0%> == 1;
      var autlevel = <%=authparams.PRSwritelevel%>;
      var loc_key = <%=mld_melding.loc_key || -1%>;
      var onrgoed_key = <%=mld_melding.place||-1%>;
      var bld_key = <%=mld_melding.bld_key||-1%>;
      var flr_key = <%=mld_melding.flr_key || -1%>;
      var room_key = <%=mld_melding.room_key || -1%>;
      var disckey = <%=mld_melding.disc%>;
      var typeopdr_contract = <%=mld_opdr.typeopdr_contract%>;
      var canDatesChange = (<%=this_opdr.canDatesChange? 1 : 0%> == 1);
      var canWriteDatumsMld = (<%=this_mld.canWriteDatums? 1 : 0%> == 1);
      var mld_startdatum = new Date(<%=mld_melding.melddatum.getTime()%>);
      var mld_einddatum = new Date(<%=mld_melding.einddatum.getTime()%>);
      var mld_opdr_datumbegin = new Date(<%=mld_opdr.mld_opdr_datumbegin.getTime()%>);
      var mld_opdr_einddatum = new Date(<%=mld_opdr.mld_opdr_einddatum.getTime()%>);
      var registratiedatum = new Date(<%=registratiedatum.getTime()%>);
      var kosten_verplicht_afr = <%=mld_opdr.typeopdr_matchtype != 4 && (mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4))? 1 : 0%> == 1;
      var nrOpenOpdr = <%=nrOpenOpdr%>;
      var opdrachtid = "<%=(mld_opdr.srtdiscprefix||"") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";
      var alg_onrgoed_obj_niveau = "<%=alg_onrgoed_obj_niveau%>";
      var melder_key = <%=mld_melding.melder_key%>;
      var perslid_key_voor = <%=mld_melding.perslid_key_voor || -1%>;
      var stdm = <%=mld_melding.stdm%>;

      jQuery(document).ready(function()
      {
        $('textarea').resize(function () { FcltMgr.resized(window) });
        $('textarea').autogrow();
      });
    </script>
  </head>

  <body id="editbody">
<%
    var buttons = [];

    if (finish && this_opdr.canFinish)
      buttons.push({ title: L("lcl_opdr_closekosten"), icon: "finish.png", action: "opdr_edit_finish()" });
    buttons.push({title: L("lcl_submit"), icon: "opslaan.png", action:"mld_submit()", singlepress: true, id:"btn_mld_submit"});
    buttons.push({title: L("lcl_cancel"), icon: "undo.png", action:"mld_cancel()"});

    IFRAMER_HEADER((mld_opdr.act_key > 0? L("lcl_opdr_frame_algemeen_actie") : L("lcl_opdr_frame_algemeen")), buttons);
%>

    <div id="edit">
      <form name="u2" method="post"
            action="mld_edit_opdr_save.asp?opdr_key=<%=opdr_key%>"
            method="post">
        <input type="hidden" id="mld_key" name="mld_key" value="<%=mld_key%>">

<%
        BLOCK_START("opdrOpdracht", L("lcl_opdr_info"), true);
        //<!-- OPDRACHTTYPE -->
        ROFIELDTR("fld", L("lcl_mld_typeopdr"), mld_opdr.opdr_type_omschr); // Opdrachttype
%>      <input type="hidden" id="t_opdr" name="t_opdr" value="<%=mld_opdr.opdr_type%>">
<%      //<!-- UITVOERENDE -->
        FCLTselector("dienstfilt",
                      "SELECT prs_dienst_key, "
                      + lcl.xsqla('prs_dienst_omschrijving', 'prs_dienst_key')
                      + " FROM prs_dienst ORDER BY UPPER(" + lcl.xsql('prs_dienst_omschrijving', 'prs_dienst_key') + ")",
                     { initKey: stdm_prs_dienst_key || -1,
                       label: L("lcl_prs_companies_dienst"),
                       onChange: "onChangedDienst()",
                       suppressEmpty: true,
                       emptyOption: L("lcl_select_dienst_filter"),
                       readonly: (opdr_key > 0 && !this_opdr.canUitvChange) // TODO: authparamsMLDBO3?? UWVA#13876
                     });
        if (opdr_key > 0 || copy || mld_opdr.typeopdr_isofferte == 0) // !(opdr_key < 0 && !copy && mld_opdr.typeopdr_isofferte == 1)
        {
          FCLTuitvoerendeselector("uitvoerende",
                                   "sgUitv",
                                   { uitvoerendekey: mld_opdr.uitvoerende_key,
                                     label: mld_opdr.srtdiscbes? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"),
                                     autlevel: authparams.PRSwritelevel,
                                     whenEmpty: mld_opdr.srtdiscbes? L("lcl_select_bedrijf") : null,
                                     locatiekey: mld_melding.loc_key,
                                     onrgoedkey: mld_melding.place,
                                     gebouwkey: mld_melding.bld_key,
                                     disciplinekey: mld_melding.disc,
                                     lutype: mld_opdr.srtdiscbes? "L" : "U", // leverancier of uitvoerende
                                     urlAdd: [{urlParam: "dienst", field: "dienstfilt"}],
                                     onChange: "onChangeUitv",
                                     moreinfo: !frontend,
                                     required: true,
                                     readonly: (opdr_key > 0 && !this_opdr.canUitvChange) // TODO: authparamsMLDBO3?? UWVA#13876
                                   });

          // <!-- (UITVOERENDE) CONTACTPERSOON  -->
          FCLTcontactpersoonselector("contactpers",
                                      "sgCntPersUitv",
                                      { contactpersoonKey: mld_opdr.contactpersuitv_key,
                                        label: L("lcl_contact_pers"),
                                        suppressEmpty: true,
                                        locatiekey: mld_melding.loc_key,
                                        filtercode: "U",
                                        urlAdd: [{urlParam: "uitv_key", field: "uitvoerende"}],
                                        onChange: "onChangePers",
                                        moreinfo: !frontend,
                                        readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
                                      });
          // Veld mld_typeopdr_contract met codering
          //  &0 = geen contract te kiezen bij opdrachten van dit type
          //  &1 = contract verplicht bij opdrachten van dit type
          //  &2 = wel contract te kiezen bij opdrachten van dit type (=default)
          if (mld_opdr.typeopdr_contract & 2)
          {
            // <!-- CONTRACT UITVOERENDE -->
            var sql_contract = " SELECT cnt.cnt_contract_key cnt_key"
                             + "      , '* ' || cnt.cnt_contract_nummer_intern"
                               + "           || CASE WHEN cnt.cnt_contract_versie IS NOT NULL THEN '.'||cnt.cnt_contract_versie  END"
                               + "           || '-' || cnt.cnt_contract_omschrijving cnt_name"
                             + "      , cnt.cnt_prs_bedrijf_key bedrijf_key"
                             + "      , (SELECT b.prs_bedrijf_naam naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = cnt.cnt_prs_bedrijf_key) bedrijf_naam"
                             + "      , 1"
                             + "      , cnt.cnt_contract_nummer_intern"
                             + "      , cnt.cnt_contract_versie"
                             + "   FROM cnt_v_aanwezigcontract cnt"
                             + "      , cnt_contract_object co"
                             + "      , mld_melding_object mo "
                             + "  WHERE cnt.cnt_contract_key = co.cnt_contract_key"
                             + "    AND co.cnt_ins_deel_key = mo.ins_deel_key"
                             + "    AND mo.mld_melding_key = " + mld_key
                             + "    AND (cnt.cnt_contract_status IN (0, 1) OR cnt.cnt_contract_key = {0})".format(mld_opdr.contract_key||-1)
                             + (mld_opdr.uitvoerende_key > 0
                               ? "  AND cnt_prs_bedrijf_key = " + mld_opdr.uitvoerende_key
                               : "")
                             + " UNION"
                             + " SELECT cnt.cnt_contract_key cnt_key"
                             + "      , cnt.cnt_contract_nummer_intern"
                               + "      || CASE WHEN cnt.cnt_contract_versie IS NOT NULL THEN '.'||cnt.cnt_contract_versie  END"
                               + "      || '-' || cnt.cnt_contract_omschrijving cnt_name"
                             + "      , cnt.cnt_prs_bedrijf_key bedrijf_key"
                             + "      , (SELECT b.prs_bedrijf_naam naam FROM prs_bedrijf b WHERE b.prs_bedrijf_key = cnt.cnt_prs_bedrijf_key) bedrijf_naam"
                             + "      , 2"
                             + "      , cnt.cnt_contract_nummer_intern"
                             + "      , cnt.cnt_contract_versie"
                             + "   FROM cnt_v_aanwezigcontract cnt"
                             + "      , cnt_contract_plaats cp"
                             + "      , mld_melding me"
                             + "      , cnt_disc_params cpa "
                             + "  WHERE cnt.cnt_contract_key = cp.cnt_contract_key"
                             + "    AND cnt.ins_discipline_key = cpa.cnt_ins_discipline_key"
                             + "    AND (cnt_contract_status = 0 OR cnt.cnt_contract_key = {0})".format(mld_opdr.contract_key||-1) // actief
                             + "    AND ((cp.cnt_alg_plaats_key = me.mld_alg_locatie_key"
                               + "  AND cp.cnt_alg_plaats_code = 'L')"
                               + "   OR (cp.cnt_alg_plaats_key = (SELECT alg_gebouw_key FROM alg_v_onroerendgoed og"
                                 + "                               WHERE og.alg_onroerendgoed_keys = me.mld_alg_onroerendgoed_keys)"
                                 + "                                 AND cp.cnt_alg_plaats_code = 'G'))"
                             + "    AND cnt.cnt_contract_status IN (0, 1)"
                             + "    AND me.mld_melding_key = " + mld_key
                             + (mld_opdr.uitvoerende_key > 0
                               ? "  AND cnt_prs_bedrijf_key = " + mld_opdr.uitvoerende_key
                               : "")
                             + " ORDER BY 4, 6, 7 DESC";

            FCLTselector("contract",
                         sql_contract,
                         { initKey: mld_opdr.contract_key,
                           label: L("lcl_contract"),
                           moreinfo: (!frontend? "showCnt()" : ""),
                           emptyOption: "",
                           extraParamValue: "bedrijf_key, bedrijf_naam",
                           onChange: "onChangeContract()",
                           suppressEmpty: true,
                           required: mld_opdr.typeopdr_contract & 1,
                           readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
                         });
          }
        }
        else
        { // Uitvoerendelijst
          var params = { type: "button",
                         html: "title='" + L("lcl_mld_opdr_uitvoerenden_select") + "' onclick='mld_melding_uitvoerenden()'",
                         opdr_key: opdr_key
                       }

          var uitvkeystr = "";
          var uitvcpersstr = "";
          var uitvcntstr = "";

          RWFIELDTR("uitvoerendelist_button",
                    "details uitvoerenden required",
                    mld_opdr.srtdiscbes? L("lcl_bes_Supplier") : L("lcl_mld_opdr_bedrijf"),
                    "(0) " + (mld_opdr.srtdiscbes? L("lcl_bes_Suppliers") : L("lcl_mld_opdr_bedrijven")),
                    params);
%>
          <tr>
            <td>
              <input type="hidden" name="uitvkeystr" id="uitvkeystr" value="<%=uitvkeystr%>">
              <input type="hidden" name="uitvcpersstr" id="uitvcpersstr" value="<%=uitvcpersstr%>">
              <input type="hidden" name="uitvcntstr" id="uitvcntstr" value="<%=uitvcntstr%>">
            </td>
          </tr>
<%
        }

        // OMSCHRIJVING
        RWTEXTAREATR("opdr_omschr",
                     "fldomschr",
                     L("lcl_mld_opdr_description"),
                     mld_opdr.opdr_omschr,
                     {html: "rows='3'" + (opdr_key > 0 && !this_opdr.canVeldChange? "readonly" : "")});

        // OPDRACHT DATUM
        // Volgorde in tijd: maxPast, minPast, sysdate, minFuture, maxFuture
        FCLTcalendar("orderdate",
                       { datum: mld_opdr.mld_opdr_datumbegin,
                         minDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.melddatum : registratiedatum),
                         maxDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.einddatum : null),
                         label: L("lcl_orderdate"),
                         onChange: "DateChanged()",
                         readonly: (opdr_key > 0 && !this_opdr.canDatesChange),
                         saveValue: (opdr_key > 0 && !this_opdr.canDatesChange), // Ondanks readonly moet de waarde toch opgeslagen worden.
                         volgnr: 1,
                         required: true
                       });
%>

        <!-- EIND DATUM -->
        <tr><td class="label"><label><%=L("lcl_opdr_enddate")%></label></td>
          <td>
            <span id="span_date_done">
<%            FCLTcalendar("date_done",
                           { //label : handmatig want period komt nog
                             datum: mld_opdr.mld_opdr_einddatum,
                             minDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.melddatum : registratiedatum),
                             maxDate: (S("mld_enforce_orderdates") == 1 ? mld_melding.einddatum : null),
                             timeField: mld_melding.uitvoertijd_eenheid == "U",
                             timeStep : 15, // TODO: Is nog wel erg hard. Zie ook mld_edit_opdr.js
                             startTime: 8,
                             endTime  : 18,
                             onChange: "DateChanged()",
                             readonly: (opdr_key > 0 && !this_opdr.canDatesChange),
                             volgnr: 2,
                             addClass: (mld_melding.einddatum.getTime() < mld_opdr.mld_opdr_einddatum.getTime()? "expired2" : null), // Als de eindatum van de opdracht na de einddatum van de melding valt dan addClass toevoegen.
                             required: true
                           } );
%>
            </span>
            =<input style="text-align:right;" type="text" id="period" size="4" name="period" readonly value="<%=mld_opdr.period%>"> <%=L("lcl_period_wd")%>
          </td>
        </tr>


<%      // <!-- (INTERN) BEHANDELAAR -->
        FCLTpersoonselector("behandelaar",
                              "sgPerson",
                              { perslidKey: mld_opdr.contactpers_key,
                                label: L("lcl_mld_behandelaar"),
                                autlevel: authparams.PRSwritelevel,
                                moreinfo: true,
                                filtercode: "OCP",
                                disc_key: mld_melding.disc,
                                readonly: (opdr_key > 0 && !this_opdr.canVeldChange),
                                suppressEmpty: true
                              });

        // TODO: deze invulbaar maken (FSN#30171) [nog overwegen: afhankelijk van de typeopdr-vinkje doen? iig niet als IsOfferte]
        if (!mld_opdr.typeopdr_isofferte)
        {
          FCLTcalendar("date_plan",
                       { label: L("lcl_opdr_plandate"),
                         datum: mld_opdr.mld_opdr_plandatum,
                         timeField: true,
                         timeStep: 15,
                         startTime: 8,
                         endTime: 18,
                         initEmpty: !mld_opdr.mld_opdr_plandatum,     // initieel leeg, maar als plandatum aanwezig deze ook tonen.
                         initTimeEmpty: !mld_opdr.mld_opdr_plandatum, // idem.
                         required: false
                       } );
        }

        // AFHANDELING
        RWTEXTAREATR("opdr_opm",
                     "fldomschr",
                     L("lcl_mld_inf_Opmerking"),
                     mld_opdr.opdr_opmerking,
                     {html: "rows='3' maxlength='4000'" + (opdr_key > 0 && !this_opdr.canOpmChange? " readonly" : "")});
        BLOCK_END();

        BLOCK_START("opdrMelding", L("lcl_opdr_info") + " " + (mld_opdr.srtdiscprefix != null? mld_opdr.srtdiscprefix : "") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr, true);
        //<!-- OPDRACHT STATUS -->
        if (opdr_key > 0)
        { // Alleen bij bestaande opdrachten de status van de opdracht tonen
          params = { infoPointer: { Url: "appl/shared/status_info.asp?opdr_key=" + opdr_key + "&urole=" + urole,
                                    Title: L("lcl_status_details") + " " + (mld_opdr.srtdiscprefix||"") + mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr
                                  }
                   }
          ROFIELDTR("fld" + (mld_opdr.opdr_status == 2? " notapproved" : ""), L("lcl_mld_status"), status.getopdrstatustext(mld_opdr.opdr_status), params); // Opdrachtstatus omschrijving

          if (mld_opdr.opdr_status == 2)
          { // Opdracht Niet akkoord
            ROTEXTAREATR("fldtxt", L("lcl_mld_inf_opmerking_fiat"), mld_opdr.mld_opdr_opmerking_fiat, {suppressEmpty: true, maxlength: 1024}); // Afhandeling, reden niet akkoord
          }

          var fiat_key = mld_opdr.mld_opdr_fiat_user;
          if (mld_opdr.opdr_status == 3) // (nog) ter fiattering
          {
            if (fiat_key)
                fiat_key = mld_opdr.fiatteur_kpg_key; // 1e is geweest
            else
                fiat_key = mld_opdr.fiatteur_kp_key;
          }
          if (fiat_key)
          {
                FCLTpersoonselector(
                    "Fiatteur",
                    "sgFiatteur",
                  { perslidKey: fiat_key,
                    label: (mld_opdr.opdr_status == 3? L("lcl_mld_toapprove"): L("lcl_mld_approver")),
                    readonly: true,
                    moreinfo: !frontend
                  });
          }
        }

        // Het opdr_id is een extern gevuld nummer en hoeft IMHO niet wijzigbaar te zijn. Kijken hoe houdbaar dat is
        // ongewenste mutaties kunnen tot problemen bij facturatie leiden, daarom eerst maar safe readonly
        ROFIELDTR("fld", L("lcl_opdr_id"), mld_opdr.mld_opdr_id, {suppressEmpty: true}); // Evt. te gebruiken factuurkenmerk
        //RWFIELDTR("opdr_id", "fldordernr", L("lcl_opdr_id"), mld_opdr.mld_opdr_id); // Evt. te gebruiken factuurkenmerk
        // <!-- MELDING -->
        var params = { infoPointer: { Url: "appl/mld/mld_melding.asp?urole=" + urole + "&mld_key=" + mld_key
                                    }
                     }
        ROFIELDTR("fld", L("lcl_call_number"), (mld_opdr.srtdiscprefix != null? mld_opdr.srtdiscprefix : "") + mld_key, params); // Melding

        // <!-- MELDER -->
        FCLTpersoonselector("sgCaller",
                              "sgCaller",
                              { perslidKey: mld_melding.melder_key,
                                label: L("lcl_caller"),
                                readonly: true,
                                moreinfo: true
                              });

        ROFIELDTR ("fld", L("lcl_complain"), mld_opdr.vakgroep + "/" + mld_melding.mld_stdmelding_omschrijving); // Melding

        // Locatie, gebouw, verdieping, ruimte
        // NB: is nu nog van de melding, maar binnenkort van de opdracht zelf
          FCLTplaatsselector  (authparams.ALGwritelevel,
                               { locatiekey: mld_melding.loc_key,
                                 gebouwkey: mld_melding.bld_key,
                                 verdiepingkey: mld_melding.flr_key,
                                 ruimtekey: mld_melding.room_key,
                                 moreinfo: (backo || fronto),
                                 readonly: true,
                                 suppressEmpty: true,
                                 no_table: true
                               });
        BLOCK_END();

        if (mld_melding.show_ins)
        { // Zijn er objecten te tonen?
          var sql = "SELECT m.ins_deel_key"
                  + "  FROM mld_melding_object m"
                  + " WHERE m.mld_melding_key = " + mld_key
                  + " ORDER BY m.ins_deel_key";
          oRs = Oracle.Execute(sql);
          var thereAreObjects = !oRs.Eof;
          oRs.close();

          // Als de objecten knop aanwezig is bij meldingen of er zijn geselecteerde objecten te tonen dan objectenblok tonen.
          if (this_opdr.canChange || thereAreObjects)
          {
            BLOCK_START("mldIns", L("lcl_gerelateerdeobjecten"));
            // Als de objecten knop aanwezig is bij meldingen dan hier ook de knop tonen.

            // De object button grijs weergeven als de plaats niet is ingevuld tot en met het alg_onrgoed_obj_niveau niveau.
            var disableobjects = ((alg_onrgoed_obj_niveau == "L" && mld_melding.loc_key < 0) ||
                                  (alg_onrgoed_obj_niveau == "G" && mld_melding.bld_key < 0) ||
                                  (alg_onrgoed_obj_niveau == "V" && mld_melding.flr_key < 0) ||
                                  (alg_onrgoed_obj_niveau == "R" && mld_melding.room_key < 0) ||
                                  (alg_onrgoed_obj_niveau == "A" && mld_melding.melder_key < 0) ||
                                  (alg_onrgoed_obj_niveau == ""));

            //$("#r_objs_button").attr('disabled', disableobjects);
            var alg_key = -1;
            var aantalobj = 0;
            if (!disableobjects)
            {
              switch(alg_onrgoed_obj_niveau)
              {
                case "L": alg_key = mld_melding.loc_key;
                          break;
                case "G": alg_key = mld_melding.bld_key;
                          break;
                case "V": alg_key = mld_melding.flr_key;
                          break;
                case "R": alg_key = mld_melding.room_key;
                          break;
                case "A": alg_key = mld_melding.melder_key;
                          break;
              }
              var prs_key = mld_melding.perslid_key_voor;
              var sql = get_objecten_sql(alg_key, alg_onrgoed_obj_niveau, prs_key, null, mld_melding.stdm);
              var oRs = Oracle.Execute(sql);
              while(!oRs.eof)
              {
                aantalobj++;
                oRs.MoveNext();
              }
            }

            // Als de objecte knop aanwezig is of er zijn geselecteerde objecten te tonen dan objectenblok tonen.
            var objparams = {ins_key: -1,
                             canChange: this_opdr.canChange,
                             verplicht: mld_melding.srtinst_verplicht,
                             disableobjects: disableobjects,
                             aantalobj: aantalobj,
                             onclickobj: "mld_opdracht_object()"};
            mld.generate_relobject_editblock(mld_key, objparams);
            BLOCK_END();
          }
        } // if (mld_melding.show_ins)

        // de kostenvelden zijn nogal afhankelijk van mld_opdr.typeopdr_matchtype
        //   1,2 --> alle kosten velden
        //   3   --> alleen uren velden/uurtarief en wel kostenplaats
        //   4   --> geen kosten of kostenplaats en wel uren
        //   5   --> Alleen meerdere materialen invullen en kostenplaats
        // globale setting: S("mld_ord_show_cost")==0 Alleen kostenplaats en (readonly?) totaal

        var ttl = L("lcl_opdr_kosten");
        if (mld_opdr.typeopdr_matchtype != 3 && mld_opdr.typeopdr_matchtype != 4)
            ttl += " " + (mld_opdr.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"));
        BLOCK_START("opdrKosten", ttl, true);
        // <!-- KOSTENPLAATS -->
        if (S("mld_ord_show_kostenplaats") >= 1 && (mld_opdr.typeopdr_matchtype != 4 || (mld_opdr.typeopdr_matchtype == 4 && S("mld_use_order_approval") == 1)))
        { // Als kostenplaat readonly is, dan kostenplaats niet tonen
          FCLTkostenplaatsselector("account",
                                     "sgAccount",
                                     user_key,
                                     { kostenplaatsKey: mld_opdr.kp_key,
                                       readonly: ((opdr_key > 0 && (!this_opdr.canKostChange || mld_opdr.typeopdr_matchtype == 4)) || S("mld_ord_show_kostenplaats") == 2),
                                       onChange: "onChangeAccount",
                                       filtercode: "AA", // Alleen actieve kostenplaatsen kunnen selecteren "All Active". Huidige waarde als initiële waarde kan bij kostenplaatsen altijd.
                                       extraParamField: "budgeth",
                                       extracode: "B", // extra informatie is budgethouder (B)
                                       required: mld_melding.kpnverplicht || (mld_opdr.typeopdr_kosten == 1 && mld_opdr.typeopdr_matchtype != 4),
                                       label: L("lcl_mld_kosten"),
                                       suppressEmpty: true,
                                       checkInit: opdr_key < 0 && autoGebouwKp // Alleen bij nieuwe opdracht checken of kostenplaats wel mag worden ingevuld en als het een gebouw kostenplaats is.
                                     });
        }
        else if (mld_opdr.typeopdr_matchtype != 4)
        {
          if (defkp_key > 0)
          { // dan kostenplaats van de melding nemen
%>
            <input type="hidden" name="account" value="<%=defkp_key%>">
<%        }
        }
        FCLTkostensoortselector("srtkosten",
                                "sgSrtkosten",
                                { kostensoortKey: mld_melding.stdm_ksrt_key,
                                  readonly: true,
                                  label: L("lcl_charge_type"),
                                  suppressEmpty: true
                                });

        // <!-- VRIJWILLIG VERZOEK FIATTERING -->
        if (S("mld_use_order_approval") == 1 &&
            (S("mld_ord_show_kostenplaats") == 1 || (S("mld_ord_show_kostenplaats") == 0 && defkp_key > 0) || (S("mld_ord_show_kostenplaats") == 2 && mld_opdr.kp_key > 0)))
        { // Niet als je geen kostenplaats in kunt vullen en als de melding ook geen kostenplaats heeft.
          if (opdr_key < 0)
          {
            // Alleen bij nieuwe opdrachten en dus ook bij copy.
            if (mld_melding.kpnverplicht || (mld_opdr.typeopdr_kosten == 1 && mld_opdr.typeopdr_matchtype != 4))
              var html = null;
            else
              var html = "onClick='onChangeFiat();'"
            CHECKBOXTR(L("lcl_mld_appr_req"), "fldmldfiat", "fiat", false, {html: html });
          }
          else
          { // Readonly tonen.
            // Alleen als het vrijwillig vinkje is ingevuld.
            ROCHECKBOXTR("fldmldfiat", L("lcl_mld_appr_req"), mld_opdr.opdr_handfiat, {suppressEmpty: true});
          }
        }

        if (S("mld_ord_show_ordernr") == 1) // <!-- ORDERNR -->
        {
          RWFIELDTR("opdr_ordernr", "fldordernr", L("lcl_mld_inf_Ordernr"), mld_opdr.mld_opdr_ordernr,
                    { html: "onBlur='calcTotal()'",
                      readonly: (opdr_key > 0 && !this_opdr.canVeldChange)
                    }
                   );
        }

        if (mld_opdr.typeopdr_matchtype == 5)
        {
          // Materiaallijst
          var params = { type: "button",
                         html: "title='" + L("lcl_mld_opdr_materials_select") + "' onclick='mld_melding_materiaal("+(S("mld_ordermaterial_editable")?0:1)+")'",
                         opdr_key: opdr_key
                       }

          var matexistarr = [];
          var matopdrkeyarr = [];
          var matkeyarr = [];
          var matamountarr = [];
          var matunitarr = [];
          var matpricearr = [];
          var matbtwarr = [];
          var matdescriptarr = [];
          var mataantal = 0;
          if (opdr_key > 0)
          {
            sql = "SELECT fac_usrdata_key"
                + "     , mld_opdr_materiaal_key"
                + "     , mld_opdr_materiaal_aantal"
                + "     , mld_opdr_materiaal_eenheid"
                + "     , mld_opdr_materiaal_prijs"
                + "     , fin_btwtabelwaarde_key"
                + "     , mld_opdr_materiaal_omschr"
                + " FROM mld_opdr_materiaal ud"
                + " WHERE mld_opdr_key = " + opdr_key;
            oRs = Oracle.Execute(sql);
            while(!oRs.eof)
            {
              mataantal++;
              matexistarr.push(oRs("fac_usrdata_key").Value ? "1" : "0");
              matopdrkeyarr.push(oRs("mld_opdr_materiaal_key").Value);
              matkeyarr.push( oRs("fac_usrdata_key").Value || -1 );
              matamountarr.push(oRs("mld_opdr_materiaal_aantal").Value);
              matunitarr.push(oRs("mld_opdr_materiaal_eenheid").Value);
              matpricearr.push(safe.jsfloat(oRs("mld_opdr_materiaal_prijs").Value));
              matbtwarr.push(oRs("fin_btwtabelwaarde_key").Value);
              matdescriptarr.push(oRs("mld_opdr_materiaal_omschr").Value || "Dummy"); // Voor vaste materialen 'Dummy' gebruiken
              oRs.MoveNext();
            }
            oRs.Close();
          }

          RWFIELDTR("materiallist_button", "button materiaal", L("lcl_mld_material"), L("lcl_mld_materialen") + " (" + mataantal + ")", params);
%>
          <tr>
            <td>
              <input type="hidden" name="matexiststr" id="matexiststr" value="<%=matexistarr.join(",")%>">
              <input type="hidden" name="matopdrkeystr" id="matopdrkeystr" value="<%=matopdrkeyarr.join(",")%>">
              <input type="hidden" name="matkeystr" id="matkeystr" value="<%=matkeyarr.join(",")%>">
              <input type="hidden" name="matamountstr" id="matamountstr" value="<%=matamountarr.join(",")%>">
              <input type="hidden" name="matunitstr" id="matunitstr" value="<%=matunitarr.join(",")%>">
              <input type="hidden" name="matpricestr" id="matpricestr" value="<%=matpricearr.join(",")%>">
              <input type="hidden" name="matbtwstr" id="matbtwstr" value="<%=matbtwarr.join(",")%>">
              <input type="hidden" name="mat_kosten" id="mat_kosten" value="<%=safe.jsfloat(mld_opdr.m_cost)%>">
              <script type='text/javascript'>
                var JSONdata = '(<%=safe.jsstring(JSON.stringify(matdescriptarr))%>)';
                var matdescriptarr = eval('(' + JSONdata + ')')
              </script>
            </td>
          </tr>
<%
        }

        if (S("mld_ord_show_cost") == 1 &&
            // mld_opdr.typeopdr_matchtype != 4 && zonder kosten wil AADS nog steeds de uren
            mld_opdr.typeopdr_matchtype != 5) // UREN
        {
          var flduren_label = L("lcl_mld_nrhours");
          switch (mld_opdr.typeopdr_matchtype)
          {
            case 3: {flduren_label = L("lcl_mld_hoursperweek"); break;}
            case 6: {flduren_label = L("lcl_mld_hours_to_spent"); break;}
            case 7: {flduren_label = L("lcl_mlduren_max"); break;}
          }
          RWFIELDTR("uren"
                   , "flduren" + (mld_opdr.typeopdr_matchtype == 3? " required" : "")
                   , flduren_label
                   , safe.curreditable(mld_opdr.hours)
                   , { datatype: "float"
                     , html: "onBlur='calcTotal()' step='0.01'"
                     , readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
                     }
                   );
        }
        if (mld_opdr.typeopdr_matchtype == 6 || mld_opdr.typeopdr_matchtype == 7)
            ROFIELDTR("fldgeboekt", L("lcl_mlduren_booked"), safe.curr(mld_opdr.booked), {suppressEmpty: true}); // Geboekte uren

        if (S("mld_ord_show_cost") == 1 &&
            mld_opdr.typeopdr_matchtype != 3 &&
            mld_opdr.typeopdr_matchtype != 4 &&
            mld_opdr.typeopdr_matchtype != 5)
        { // UURTARIEF
          RWFIELDTR("uurtarief", "flduurtarief", L("lcl_hour_rate") + "&nbsp;" + L("lcl_valutasign"),
                    safe.curreditable(mld_opdr.h_rate),
                    { datatype: "currency",
                      html: "onBlur='calcTotal()'",
                      readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
                    }
                   );
          // MATERIAAL
          RWFIELDTR("mat_kosten", "fldmatkosten", L("lcl_mater_cost") + "&nbsp;" + L("lcl_valutasign"),
                    safe.curreditable(mld_opdr.m_cost),
                    { datatype: "currency",
                      html: "onBlur='calcTotal()'",
                      readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
                    }
                   );

          // CORRECTIE
          RWFIELDTR("corr_kosten", "fldcorrkosten", L("lcl_correct") + "&nbsp;" + L("lcl_valutasign"),
                    safe.curreditable(mld_opdr.corr_cost),
                    { datatype: "currency",
                      html: "onBlur='calcTotal()'",
                      readonly: (opdr_key > 0 && !this_opdr.canUrenMatChange)
                    }
                   );
        }

        // TOTAAL
        if (mld_opdr.typeopdr_matchtype != 4)
        {
          // 0 = niet verplicht, 1 = save + 2 = 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)) ||
                        ((mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4)) &&
                         mld_opdr.opdr_status == 6)
          RWFIELDTR("tot_kosten", "fldtotkosten"  + (isRequired? " required" : ""),
                    L("lcl_total_cost") + "&nbsp;" + L("lcl_valutasign"),
                    safe.curreditable(mld_opdr.t_cost),
                    { datatype: "currency",
                      html: (mld_opdr.typeopdr_matchtype != 5? "onBlur='calcTotal()'" : null),
                      readonly: true
                    }
                   );
        }

        BLOCK_END();

        generateFlexKenmerkBlock({ opdr_key: (copy? opdr_copy_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.canSeeARFlex)),
                                   copy: copy,
                                   reado: (opdr_key > 0 && !(this_opdr.canFlexChange || this_opdr.canChangeARFlex)),
                                   flexcolumns: S("mld_flexcolumns")
                                 });
%>
        <input type=hidden name="copyorder_key" value="<%=copy?opdr_copy_key:'-1'%>">
        <input type=hidden name="act_key" value="<%=mld_opdr.act_key%>">
        <input type=hidden name="volgnr" value="<%=mld_opdr.mld_opdr_bedrijfopdr_volgnr%>">
<%
        // if the mode is copy the original order is used as template but the order will be saved
        // like it was a new added order
        if (opdr_key > 0) // Bij bestaande meldingen, dus ook niet bij copy.
        { %>
          <input type=hidden name=opdr_key value=<%=opdr_key%>>
<%      } %>

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