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

    File:               mld_show_opdr.asp
    Description:        Detailscherm voor opdrachten
    Parameters:         opdr_key (REQUIRED)
                        -
    Context:
    Note:

*/
var opdr_key = getQParamInt("opdr_key");
var LOCKED_USER_OK = { "xmlnode": "opdracht", "key": opdr_key };

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

<%
FCLTHeader.Requires({ plugins:["jQuery"],
                      js: ["date.js", "./mld.js", "../fac/faq.js", "./mld_show_opdr.js", "jQuery-ui.js"]
                    })

// AUTORISATIEPARAMETERS
var urole = getQParamSafe("urole");

// Om nog even compatible te blijven zodat alles nog even blijft werken. Moet er straks uit, natuurlijk.
var fronto = urole == "fo";
var backo  = urole == "bo";
var minfo  = urole == "mi";
var frontend = (!fronto && !backo && !minfo);

var this_opdr = mld.func_enabled_opdracht(opdr_key); // wat mag ik zoal op deze opdracht
var hasBOread = this_opdr.canReadBOF || this_opdr.canReadORD;
var hasBO2read = this_opdr.canReadBO2;
user.auth_required_or_abort(this_opdr.canReadAny);

// INITIALISATIE MET DE INITIEEL WEER TE GEVEN GEGEVENS
// Haal de opdrachtgegevens op van de opdracht
mld_opdr = this_opdr.mld_opdr;
mld_opdr.isTemplate = (getQParamInt("template", 0) == 1);
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 mld_parent_opdr;
if (mld_opdr.parent_key)
{
  mld_parent_opdr = mld.mld_opdr_info(mld_opdr.parent_key);
}
lcl.set_dialect(mld_opdr.opdr_type, "MLD_TYPEOPDR_KEY");

var opdr_type_org = mld_opdr.opdr_type;  // Huidige en het orgineel zijn hetzelfde. Niet aangepast. Overnemen van ingevulde waarden niet nodig.
var refiat = mld_opdr.opdr_status_refiat > 0;

// Bepaal de budgethouder van de gebruikte/initiele kostenplaats
var sql_budg = "SELECT pf.prs_perslid_key"
             + ", pf.prs_perslid_naam_full"
             + " FROM prs_v_perslid_fullnames_all pf"
             + ", prs_kostenplaats k"
             + " WHERE k.prs_perslid_key = pf.prs_perslid_key"
             + " AND k.prs_kostenplaats_key = " + mld_opdr.kp_key;
oRs = Oracle.Execute( sql_budg);
if (!oRs.eof)
{
  budgetholder_key = oRs("prs_perslid_key").Value;
  budgetholder_name = oRs("prs_perslid_naam_full").Value;
}
else
{
  budgetholder_key = -1;
  budgetholder_name = '';
}

oRs.close();

// Get some related mld_melding data
sql = "SELECT COALESCE(mld_alg_locatie_key, -1) alg_locatie_key"
    + "     , COALESCE(g.alg_gebouw_key, -1) alg_gebouw_key"
    + "     , COALESCE(g.alg_terreinsector_key, -1) alg_terreinsector_key"
    + "     , COALESCE(g.alg_verdieping_key, -1) alg_verdieping_key"
    + "     , COALESCE(g.alg_ruimte_key, -1) alg_ruimte_key"
    + "     , m.mld_melding_omschrijving"
    + "     , "+lcl.xsqla('s.mld_stdmelding_omschrijving','s.mld_stdmelding_key')
    + "     , s.mld_stdmelding_key"
    + "     , s.mld_ins_discipline_key"
    + "     , md.ins_srtdiscipline_key"
    + "     , sd.ins_srtdiscipline_prefix"
    + "     , l.alg_locatie_key"
    + "     , m.prs_kostenplaats_key"
    + "     , COALESCE(s.prs_kostensoort_key, md.prs_kostensoort_key) prs_kostensoort_key"
    + "     , m.mld_kosten_klant"
    + "     , m.mld_melding_ordernr"
    + "     , m.mld_alg_onroerendgoed_keys"
    + "     , m.prs_perslid_key"
    + "     , sd.ins_srtdiscipline_bes"
    + "     , m.mld_melding_einddatum"
    + "     , m.mld_melding_t_uitvoertijd.eenheid uitvoertijd_eenheid"
    + "     , m.mld_melding_kto_key"
    + "     , m.mld_melding_kto_type"
    + "  FROM mld_melding m"
    + "     , alg_v_allonrgoed_gegevens g"
    + "     , alg_locatie l"
    + "     , mld_stdmelding s"
    + "     , mld_discipline md"
    + "     , ins_srtdiscipline sd"
    + " WHERE m.mld_melding_key = " + mld_opdr.mld_key
    + "   AND s.mld_ins_discipline_key = md.ins_discipline_key"
    + "   AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key"
    + "   AND m.mld_stdmelding_key = s.mld_stdmelding_key"
    + "   AND m.mld_alg_locatie_key = l.alg_locatie_key(+)"
    + "   AND m.mld_alg_onroerendgoed_keys = g.alg_onroerendgoed_keys(+)";

oRs = Oracle.Execute(sql);

var loc_key = oRs("alg_locatie_key").Value;
var bld_key = oRs("alg_gebouw_key").Value;
var ter_key = oRs("alg_terreinsector_key").Value;
if (ter_key > 0 && bld_key == -1) bld_key = ter_key;
var flr_key = oRs("alg_verdieping_key").Value;
var room_key = oRs("alg_ruimte_key").Value;
var stdm = oRs("mld_stdmelding_omschrijving").Value;
var mld_stdkey = oRs("mld_stdmelding_key").Value;
var srtdisckey = oRs("ins_srtdiscipline_key").Value;
var prefix = oRs("ins_srtdiscipline_prefix").Value || "";
var defkp_key = oRs("prs_kostenplaats_key").Value;   // de defaultwaarde komt van de melding
var kosten_klant = oRs("mld_kosten_klant").Value;
var def_ordernr = oRs("mld_melding_ordernr").Value;  // de defaultwaarde
var onrgoed_key = oRs("mld_alg_onroerendgoed_keys").Value;
var mld_caller_key = oRs("prs_perslid_key").Value;
var mld_einddatum = new Date(oRs("mld_melding_einddatum").Value);
var mld_uitvoertijd_eenheid = oRs("uitvoertijd_eenheid").Value;
var kto_key = oRs("mld_melding_kto_key").Value;
var kto_type = oRs("mld_melding_kto_type").Value;

oRs.close();

var caller = new Perslid(mld_caller_key);

// Het defaultemailadres bepalen voor de functie opdr_mail():
// Externe uitvoerder: van prs_contactpersoon indien bekend, anders bedrijf_email
// Intern: van de medewerker dus.
var defemail_key = "";
var defemail_type = "P";
sql = " SELECT 1"
    + "      , o.prs_contactpersoon_key defemail_key"
    + "      , 'C' defemail_type"
    + "   FROM mld_opdr o"
    + "      , prs_contactpersoon c "
    + "  WHERE o.prs_contactpersoon_key = c.prs_contactpersoon_key"
    + "    AND o.mld_opdr_key = " + opdr_key
    + "    AND prs_contactpersoon_email IS NOT NULL"
    + " UNION ALL"
    + " SELECT 2"
    + "      , o.mld_uitvoerende_keys defemail_key"
    + "      , 'B' defemail_type"
    + "   FROM mld_opdr o"
    + "      , prs_bedrijf b "
    + "  WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key"
    + "    AND o.mld_opdr_key = " + opdr_key
    + "    AND b.prs_bedrijf_email IS NOT NULL"
    + " UNION ALL"
    + " SELECT 3"
    + "      , o.mld_uitvoerende_keys defemail_key"
    + "      , 'P' defemail_type"
    + "   FROM mld_opdr o"
    + "      , prs_perslid p "
    + "  WHERE o.mld_uitvoerende_keys = p.prs_perslid_key"
    + "    AND o.mld_opdr_key = " + opdr_key
    + "    AND p.prs_perslid_email IS NOT NULL "
    + " ORDER BY 1";
oRs2 = Oracle.Execute(sql);
if (!oRs2.eof)
{
  defemail_key = oRs2("defemail_key").Value;
  defemail_type = oRs2("defemail_type").Value;
}
oRs2.Close();
var subjectMail = L("lcl_mld_order_subject").format(prefix + mld_opdr.mld_key + "/" + mld_opdr.volgnr);

var urlMail = "../shared/queuemail.asp?pcode=ORDMAI&defemail_key=" + defemail_key
            + "&defemail_type=" + defemail_type
            + "&key=" + opdr_key
            + "&subject=" + Server.URLencode(subjectMail)
            + "&mailfrom=" + (hasBOread? 1 : 0)
            + "&pmodule=MLD"
            + "&pniveau=O";

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 = mld_opdr.t_cost;

// Als de opdrachten niet sequentieel uitgevoerd moeten worden, dan wordt er ook geen actieve opdracht gevonden.
if (mld_opdr.contactpers_key < 0)
  var activeopdr = mld.getactiveopdracht(opdr_key, user_key, mld_opdr.uitvoerende_key);
else
  var activeopdr = mld.getactiveopdracht(opdr_key);

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

// Kennisbankitems.
var has_faq = false;
var popup_faq = false;
var alg_key_arr = [];
if (bld_key && bld_key != -1)   alg_key_arr.push(bld_key);
if (flr_key && flr_key != -1)   alg_key_arr.push(flr_key);
if (room_key && room_key != -1) alg_key_arr.push(room_key);

// faq_info bepalen voor de vaste kennisbankitems bij de opdracht.
var faq_info = mld.faq_info(loc_key, alg_key_arr, mld_opdr.opdr_disc_key, mld_stdkey, mld_opdr.opdr_type, -1, -1, false, true);
for (i in faq_info.fixed_faq)
{
  faq_info.fixed_faq[i].safe_answer = safe.fclthtml(faq_info.fixed_faq[i].answer, { "faqlink": true, "file_params": { "module": "FAQA", "key": faq_info.fixed_faq[i].faq_key }});
  faq_info.fixed_faq[i].safe_answer2 = safe.fclthtml(faq_info.fixed_faq[i].answer2, { "faqlink": true, "file_params": { "module": "FAQB", "key": faq_info.fixed_faq[i].faq_key }});
}
%>

<html>
  <head>
<%
    FCLTHeader.Generate();
%>
    <script type="text/javascript">

      // Text strings used by mld_show_opdr.js
      var urole = "<%=urole%>";
      var opdr_key = <%=opdr_key%>;
      var opdr_disc_key = <%=mld_opdr.opdr_disc_key%>; // ter info
      var prefix = "<%=safe.jsstring(prefix)%>";
      var mld_key = <%=mld_opdr.mld_key%>;
      var volgnr = "<%=mld_opdr.volgnr%>";
      var defemail_key = <%=defemail_key||-1%>;
      var defemail_type = "<%=defemail_type%>";
      var setting_mld_accept_confirm = <%=S("mld_accept_confirm")? 1 : 0%>;
      var mld_opdr_refiat_preference = <%=S("mld_opdr_refiat_preference")? 1 : 0%>;
      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 kosten_verplicht_afr = <%=mld_opdr.tonen_totaal && (mld_opdr.typeopdr_kosten_verplicht & 4 || (mld_opdr.typeopdr_kosten_verplicht == 0 && mld_opdr.opdrkosten_verplicht & 4))? 1 : 0%> == 1;
      var opdr_kosten = <%=safe.jsfloat(mld_opdr.t_cost)%>;
      var refiat = <%=refiat? 1 : 0%> == 1;
      var activeopdr_key = <%=activeopdr.opdr_key%>;
      var activeopdracht = "<%=activeopdr.opdracht%>";
      var typeopdr_sequential = "<%=mld_opdr.typeopdr_sequential%>";
      var kenmerk_verplicht_status = "<%=mld_opdr.kenmerk_verplicht_status%>";
      var opdracht = "<%=(mld_opdr.srtdiscprefix || "") + mld_opdr.mld_key + "/" + mld_opdr.mld_opdr_bedrijfopdr_volgnr%>";

      $(function()
      {
        FcltMgr.setTitle(L("lcl_opdr_info") + " " + prefix + mld_key + "/" + volgnr, {hot:false});
        $('textarea').resize(function() { FcltMgr.resized(window) });
        $('textarea').autogrow();

        var JSONdata = "<%=safe.jsstring(JSON.stringify(faq_info))%>";
        mld_show_kennisbank(JSON.parse(JSONdata));
      });

      function opdr_mail()
      {
        var subject = "<%=safe.jsstring(subjectMail)%>";
        var url = "<%=safe.jsstring(protectQS.create(urlMail))%>";
        FcltMgr.openModalDetail(url, L("lcl_mld_noti_opdr_email"), { callback: opdrMailCallback });
      }

      function fin_verkoopfactuur ()
      {
          var url = "appl/fin/fin_verkoopfactuur.asp?mode=list&fin_verkoopfactuur_refkey=<%=opdr_key%>&fin_verkoopfactuur_xmlnode=opdracht";
          FcltMgr.openDetail(url, L("lcl_verkoopfacturen"));
      }

      function mld_show_goedkeurmodal()
      {
        params = { width: "auto",
                   height: "auto",
                   modal: true,
                   resizable: false,
                   position: { my: "center", at: "center", of: window },
                   title: L("lcl_message"),
                   buttons: { "<%=safe.jsstring(L("lcl_goedkeur"))%>" : function () { $("#dmodal").dialog('close'); opdr_goedkeur() },
                              "<%=safe.jsstring(L("lcl_cancel"))%>" :   function () { $("#dmodal").dialog('close'); }
                            },
                   create: FcltMgr.fnCreateCloseButton("div#dmodal")
                 }
        $('div#dmodal').dialog(params).dialog('open');
      }

    </script>


  </head>

  <body class="showmode">
<%
    function gen_afhandeling()
    {
        BLOCK_START("opdrOmschrijving", L("lcl_mld_inf_Opmerking"), { icon: "fa-comment-alt-lines" });
            ROTEXTAREATR("fldtxt", "", mld_opdr.opdr_opmerking, {suppressEmpty: true, mldlink: true, cntlink: true}); // Afhandeling
        BLOCK_END();
    }

  SUBFRAME_START();
    var buttons = [];
    if (this_opdr.canChange)
      buttons.push({ title: L("lcl_change"), icon: "fa-fclt-edit", action: "opdr_change('" + this_opdr.canChangeUrole + "')" });

    if (!mld_opdr.isTemplate)
    {
      if ((S("mld_ord_edit_plandates") & 2) && this_opdr.canPlanDatesChange)
      {
        buttons.push({ title: L("lcl_schedule_start"), icon: "fa-calendar-arrow-up", action: "opdr_schedule(1)", tooltip: L("lcl_mld_opdr_edit_plandate") });
        if (S("mld_use_plandate2") & 2)
          buttons.push({ title: L("lcl_schedule_end"), icon: "fa-calendar-arrow-down", action: "opdr_schedule(2)", tooltip: L("lcl_mld_opdr_edit_plandate2") });
      }

      if (this_opdr.canApprove)
        buttons.push({ title: L("lcl_approve"), icon: "fa-check", action: "opdr_approve()" });

      if (this_opdr.canGoedkeur ||
          this_opdr.canGoedkeur2 ||
          this_opdr.canGoedkeur3 ||
          this_opdr.canGoedkeur4 ||
          this_opdr.canGoedkeur5)
        buttons.push({ title: L("lcl_goedkeur"), icon: "fa-check", action: "opdr_goedkeur_preference()" });

      if (this_opdr.canSend) // Verstuur de opdracht digitaal
        buttons.push({ title: L("lcl_opdr_send"), icon: "fa-paper-plane", action: "opdr_send()" });

      if (this_opdr.canSetSent) // Registreer bij de opdracht dat deze verzonden is (en doe verder niets)
        buttons.push({ title: L("lcl_setsent"), icon: "fa-box-circle-check", action: "opdr_setsent()" });

      if (this_opdr.canAccept)
        buttons.push({ title: L("lcl_accept"), icon: "fa-check", action: "opdr_accept()" });

      if (this_opdr.canReject)
        buttons.push({ title: L("lcl_reject"), icon: "fa-times", action: "opdr_reject()" });

      if (this_opdr.canCancel)
        buttons.push({ title: L("lcl_mld_opdr_cancel_button"), icon: "fa-times", action: "opdr_cancel()"});

      // Onderbreken.
      if (this_opdr.canOnderbreken)
        buttons.push({ title: L("lcl_halt"), icon: "fa-pause", action: "opdr_onderbreken()" });
      // Hervatten.
      if (this_opdr.canHervatten)
      {
        var firststart = this_opdr.mld_opdr.extended_opdr_status == 8 && (this_opdr.mld_opdr.typeopdr_sequential & 4) == 4;
        buttons.push({ title: (firststart? L("lcl_resume_start") : L("lcl_resume")), icon: "fa-play", action: "opdr_hervatten()" });
      }

      if (this_opdr.canClose)
        buttons.push({ title: L("lcl_close"), icon: "fa-flag-checkered", action: "opdr_close()" });

      if (this_opdr.canTimeReg)
        buttons.push({ title: L("lcl_menu_mld_uren_fo"), icon: "fa-clock", action: "opdr_timereg()" });

      if (this_opdr.canFinish)
        buttons.push({ title: L("lcl_opdr_closekosten"), icon: "fa-flag-checkered", action: "opdr_finish('" + this_opdr.canChangeUrole + "')" });

      if (this_opdr.canVerwerk)
        buttons.push({ title: L("lcl_mld_opdr_verwerk"), icon: "fa-archive", action: "opdr_verwerk()", tooltip: L("lcl_mld_opdr_verwerk_hint") });

      if (this_opdr.canAcceptOffer)
        buttons.push({ title: L("lcl_accept"), icon: "fa-thumbs-up", action: "opdr_accept_offer()" });

      if (this_opdr.canRejectOffer)
        buttons.push({ title: L("lcl_reject"), icon: "fa-thumbs-down", action: "opdr_reject_offer()" });

      if (this_opdr.canCopy)
        buttons.push({ title: L("lcl_mld_copy"), icon: "fa-copy", action: "opdr_copy()" });

      // NOTE: de button naar bestaande facturen lijkt me niet echt nog nodig als we al een facturenframe hebben?
      if (false && this_opdr.canListFactuur)
        buttons.push({ title: L("lcl_mld_invoicing"), icon: "fa-coins", action: "opdr_list_invoice()" });
      else if (this_opdr.canAddFactuur)
        buttons.push({ title: L("lcl_mld_invoicing"), icon: "fa-coins", action: "opdr_add_invoice()" });

      buttons.push({ title: L("lcl_print"),      icon: "fa-print",    action: "opdr_print()" });
      buttons.push({ title: L("lcl_noti_email"), icon: "fa-envelope",    action: "opdr_mail()" });
      buttons.push({ title: L("lcl_mld_delen"),  icon: "fa-share-square", action: "opdr_delen()" });
    }

    if (user.has("WEB_FACFAC")) {
      buttons.push({ title: /* lcl */ "Leverancierscherm*",  icon: "fa-user-bounty-hunter", action: "testafmeldscherm()" });
    }

    IFRAMER_HEADER((mld_opdr.act_key > 0? L("lcl_opdr_frame_algemeen_actie") : L("lcl_opdr_frame_algemeen")), buttons);
      shared.notificatie_fail_BLOCK(opdr_key, 'opdracht');

      if (mld_opdr.recentgewijzigd)
      {
        var recent_txt = L("lcl_mld_opdr_changed") + toDateTimeString(mld_opdr.laatstgewijzigd);
        var buttons_rc = [{ title: L("lcl_mld_opdr_seen"), icon: "fa-check", action: "opdr_reset()" }];
        SIMPLE_BLOCK_START();%>
        <div class="recentlychanged"><%=recent_txt%><%
            CreateButtons(buttons_rc, { showIcons: true })
        %></div>
        <% SIMPLE_BLOCK_END();
      }
      var buttons_rp = [];
      buttons_rp.push({ title: L("lcl_goedkeur"), action: "$('div#dmodal').dialog('close').remove();" , icon: "fa-fclt-save"});
      buttons_rp.push({ title: L("lcl_cancel"), action: "$('div#dmodal').dialog('close').remove();", icon: "fa-fclt-cancel" });
%>
        <div id="dmodal" style="display:none">
          <div>
<%        ROFIELDTR("fld", "", "", {id: "modalsfatext"}); %>
        </div>
<%      // Als kostenplaats aangeeft dat er geen fiattering moet plaatsvinden, dan vinkje niet tonen.
        // Als het bedrag (bij refiat) boven het mandaat uitkomt, dan vinkje niet tonen.
        // Bepaling mandaat.
        // Bepaling oorspronkelijke (laatste) fiatteur, als die er was (pkey).
        var fiat_key = -1;
        var pkey = -1;
        sql = "SELECT pf.prs_perslid_key"
            + "  FROM fac_tracking tr"
            + "     , fac_srtnotificatie str"
            + "     , prs_v_perslid_fullnames_all pf"
            + " WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key"
            + "   AND tr.prs_perslid_key = pf.prs_perslid_key(+)"
            + "   AND (str.fac_srtnotificatie_code = 'ORDFOK'"
            + "    AND tr.fac_tracking_refkey = " + opdr_key
            + "    AND str.fac_srtnotificatie_xmlnode IN ('opdracht'))"
            + " ORDER BY fac_tracking_datum DESC"
            + "        , fac_tracking_key DESC"
        var oRs = Oracle.Execute(sql);
        if (!oRs.eof)
        {
          pkey = oRs("prs_perslid_key").Value;
        }
        else
        { // Dan waren de opdracht kosten onder het mandaat van mijzelf of de BO-medewerker.
          // Als de kostenplaats bij de opdracht overruled is dan wordt altijd tegen het profiel van de BO-medewerker getest.
          if (kosten_klant == 1 && defkp_key == mld_opdr.kp_key) //kostenplaats_key)
            pkey = mld_caller_key;  // Melder/aanvrager van melding
          else
            pkey = user_key; //getFParamInt("behandelaar"); // BO medewerker? dat is gewoon de user
        }
        oRs.Close();

        // Afhankelijk van de setting "mld_opdr_refiat_preference" fiatteren.
        // Bij herfiattering opnieuw fiatteren {0=(default) fiatteur moet opnieuw fiatteren, 1=goedkeurder kan aangeven of dat moet}
        // mld_opdr_refiat_preference = 0: - Herfiatteren als bedrag nu boven FVS limiet is en boven profiel limiet van de laatste fiatteur.
        // mld_opdr_refiat_preference = 1: - Goedkeuren met vinkje aan: Altijd herfiatteren als nieuwe opdracht.
        //                                 - Goedkeuren met vinkje uit: Niet fiatteren en direct naar volgende status.
        //                                 - Indien bedrag boven de profiel limiet komt, dan vinkje niet tonen en fiatteren als nieuwe opdracht (pkey = laatste fiatteur).
        if (refiat && S("mld_opdr_refiat_preference") == 1 && mld_opdr.kp_fiat && !budget.exceeds_profiel(mld_opdr.t_cost, pkey, mld_opdr.opdr_disc_key))
        {
          var mld_info = mld.mld_melding_info(mld_opdr.mld_key);
          var approver = mld.getFirstApprover(mld_info, mld_opdr);
          // Hoeft er wel gefiatteerd te worden?
          if (approver.for_approval)
          { // Er moet gefiatteerd worden.
            if (approver.approver_key < 0)
            { // Aan de logging toevoegen.
              // Er kan geen fiatteur gevonden worden. Er kan wel goedgekeurd worden maar niet gefiatteerd.
              // Na het goedkeuren zal de status in "Ter goedkeuring(10)" blijven hangen.
              __Log(L("lcl_bes_exceed_limit"));
            }
            else
              fiat_key = approver.approver_key;
            RWCHECKBOXTR("sendforapproval", "fldcheck", L("lcl_mld_sendfor_approval_to").format(approver.approver_name), 1, {boxfirst: true});
          }
        }
        //else // Bedrag komt boven de profiel limiet. Vinkje niet tonen en fiatteren als nieuwe opdracht.
%>
        </div>
<%
        var btns = [];
        // Ongebruikelijk weliswaar maar: in showmode een 'edit' knopje tonen voor wisselen opdrachttype
        // Wisselen zou te veel impact clientside hebben als het in editmode kan.
        if (this_opdr.canOpdrTypeChange && S("mld_ord_change_type") == 1)
        {
          var sql = "SELECT ts.mld_typeopdr_key"
                + " FROM mld_typeopdr_srtdiscipline ts"
                + " WHERE (ins_discipline_key = " + mld_opdr.opdr_disc_key /* en dan doet de srtdiscipline er echt niet meer toe */
                + "         OR (ts.ins_srtdiscipline_key = " + srtdisckey + " AND ins_discipline_key IS NULL))"
                + "   AND ts.mld_typeopdr_key !=  " + mld_opdr.opdr_type; // Huidige waarde niet laten zien.
          var oRs = Oracle.Execute(sql);
          if (!oRs.Eof) // er zijn andere mogelijk
          {
            btns.push({icon: "fa-fclt-edit", title: L("lcl_mld_typeopdr"), action: "mld_edit_typeopdr(this, " + opdr_key + ")", importance: 2});
          }
          oRs.Close();
        }

        BLOCK_START("opdrOpdracht", L("lcl_opdr_info"), {icon: "fa-user-tag", buttons: btns});
%>      <tr>
          <td class="label">
            <label class="selector"><%=L("lcl_mld_typeopdr")%></label>
          </td>
          <td>
<%
        if (user.has("WEB_PRSSYS"))  // kennelijk
        {
            var params = { infoPointer: { Url: "/appl/mgt/mld_typeopdr.asp?mode=wrap&id=" + mld_opdr.opdr_type } };
        } else {
            var params = {};
        }
        ROFIELD('fld', null, mld_opdr.opdr_type_omschr, params);
%>
        </tr>
<%
        ROFIELDTR("fld" + (mld_opdr.opdr_status == 2? " notapproved" : ""), L("lcl_mld_status"), mld.getextendedopdrstatustext(mld_opdr.extended_opdr_status, opdr_key)); // 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, mldlink: true, cntlink: true}); // Afhandeling, reden niet akkoord
        }

        if (fiat_key < 0)
        {
          // Laatste fiatteur mld_opdr_fiat_user is afgeleid van het veld mld_opdr_fiatbedrag dat wordt leeg gemaakt als de setting "mld_opdr_refiat_preference" op 1 staat
          // en de goedkeurder heeft aangegeven dat de opdracht opnieuw als een nieuwe opdracht moet worden gefiatteerd.
          // Er is dan wel "ORDFOK" tracking aanwezig terwijl de opdracht als nieuw behandeld moet worden (GEEN mld_opdr_fiat_user).
          var fiat_key = mld_opdr.mld_opdr_fiat_user; // Laatste fiatteur die gefiatteerd heeft
          if (mld_opdr.opdr_status == 3) // (nog) ter fiattering
          {
            if (fiat_key)
              fiat_key = prs.getFiatteur(mld_opdr.kp_key, (S("mld_opdr_reapproval_rate") >= 0? -1 : mld_opdr.mld_opdr_fiat_user), mld_opdr.t_cost, mld_opdr.opdr_disc_key, mld_opdr.fiatbedrag);
            else
            { // Als nieuw fiatteren. Ik kan nu de functie getFirstApprover gebruiken.
              var mld_info = mld.mld_melding_info(mld_opdr.mld_key);
              var approver = mld.getFirstApprover(mld_info, mld_opdr); // vier-ogenprincipe wordt nu ook meegenomen.
              fiat_key = approver.approver_key;
            }
          }
        }

        if (fiat_key > 0)
        {
              FCLTpersoonselector(
                  "Fiatteur",
                  "sgFiatteur",
                { perslidKey: fiat_key,
                  label: (mld_opdr.opdr_status == 3? L("lcl_mld_toapprove"): L("lcl_mld_approver")),
                  readonly: true,
                  moreinfo: !frontend
                });
        }
        FCLTuitvoerendeselector("uitvoerende",
                                  "sgUitv",
                                  { uitvoerendekey: mld_opdr.uitvoerende_key,
                                    label: mld_opdr.srtdiscbes ? L("lcl_bes_Supplier") : L("lcl_ord_company_uit"),
                                    moreinfo: !frontend,
                                    readonly: true
                                  });

        // Opmerking bij uitvoerende. Alleen zichtbaar voor de opdrachtgever, niet de uitvoerende zelf!
        if (user.has("WEB_ORDBOF"))
        {
          ROTEXTAREATR("fld", L("lcl_prs_companies_opmerking"), mld_opdr.uitv_opmerking, { html: "rows='3'", suppressEmpty: true });
        }

        // Contactpersoon uitvoerende
        FCLTcontactpersoonselector("contactpers",
                                   "sgCntPersUitv",
                                   { contactpersoonKey: mld_opdr.contactpersuitv_key,
                                     label: L("lcl_contact_pers"),
                                     filtercode: "U",
                                     moreinfo: !frontend,
                                     suppressEmpty: true,
                                     readonly: true
                                   });
        var params = { suppressEmpty: true };
        if (mld_opdr.contract_key && mld_opdr.contract_key>0)
             params.infoPointer = { Url: "appl/cnt/cnt_contract.asp?urole=" + urole + "&cnt_key=" + mld_opdr.contract_key,
                                    Title: L("lcl_contract")
                                  };
         ROFIELDTR("fld", L("lcl_contract"), mld_opdr.contract_naam, params); // Contract naam
         // (Interne) behandelaar
         FCLTpersoonselector("sgInternCntPers",
                             "sgInternCntPers",
                             { perslidKey: mld_opdr.contactpers_key,
                               label: L("lcl_mld_behandelaar"),
                               moreinfo: true,
                               readonly: true,
                               suppressEmpty: true
                             });

        if ((urole == "bo" || urole == "fo" || S("mld_performer_can_change_flags")) && mld_opdr.flag)
        {
          ROFIELDTR("fld", L("lcl_opdr_flags"), L("lcl_opdr_flag" + mld_opdr.flag), { icon: "fa-fclt-flag", iconclass: "opdrflag" + mld_opdr.flag });
        }

        var txt = "";
        if (((mld_opdr.actiecode & 128) && this_opdr.myRole == 2) || // Attentie bij BO (en ik ben BO)
            ((mld_opdr.actiecode & 512) && this_opdr.myRole == 4)) { // Attentie bij UITV (en ik ben UITV)
            txt = L("lcl_mld_actiecodeATT"); // Attentie
        } else if (S("mld_opdr_actiecode") > 0 && mld_opdr.actiecode & 1) { // Actie bij BO
            txt = L("lcl_opdr_actiecodeBO");
        }
        ROFIELDTR("opdrsubstatus badge bg-danger text-light", L("lcl_mld_actiecode"), txt, { suppressEmpty: true });

        ROTEXTAREATR("fldtxt", L("lcl_mld_opdr_description"), mld_opdr.opdr_omschr, {suppressEmpty: true, mldlink: true, cntlink: true});

        BLOCK_END();

        BLOCK_START("opdrMelding", L("lcl_mld_frame_algemeen"), {icon: "fa-exclamation-circle"});

        var params = { infoPointer: { Url: "appl/mld/mld_melding.asp?urole=" + urole + "&mld_key=" + mld_opdr.mld_key }};
        ROFIELDTR("fld", L("lcl_opdr_id"), mld_opdr.mld_opdr_id, { suppressEmpty: true }); // Evt. te gebruiken factuurkenmerk
        ROFIELDTR("fld", L("lcl_call_number"), (prefix||"") + mld_opdr.mld_key, params); // Melding
        if (mld_opdr.parent_key)
        {
          var paramsParentOpdr = { infoPointer: { Url: "appl/mld/mld_opdr.asp?opdr_key=" + mld_opdr.parent_key + "&urole=" + urole} };
          ROFIELDTR("fld", (mld_parent_opdr.typeopdr_isofferte==1 ? L("lcl_mld_opdr_parent") : L("lcl_opdr_info"))
                         , (mld_parent_opdr.srtdiscprefix != null? mld_parent_opdr.srtdiscprefix : "") + mld_parent_opdr.mld_key + "/" + mld_parent_opdr.volgnr, paramsParentOpdr); // Offer opdr_key
        }
        FCLTpersoonselector("sgCaller",
                            "sgCaller",
                            { perslidKey: mld_caller_key,
                              label: L("lcl_caller"),
                              readonly: true,
                              moreinfo: true //We stellen: in potentie klikbaar, eventueel leidt dit tot NietGeautoriseerd later.
                            });
        // Telefoon vd melder (AADS#16698). Externe behandelaar hebben niet altijd recht op doorklikken
        ROFIELDTR("fld", L("lcl_prs_person_phone"), (caller.prs_perslid_telefoonnr() || caller.prs_perslid_mobiel()), { suppressEmpty: true, type: "telefoon" });

        ROFIELDTR ("fld", L("lcl_complain"), mld_opdr.vakgroep + "/" + stdm); // Melding
        // Locatie, gebouw/terrein, verdieping, ruimte
        FCLTplaatsselector  (-1,
                             { locatiekey: loc_key,
                               gebouwkey: bld_key,
                               verdiepingkey: flr_key,
                               ruimtekey: room_key,
                               moreinfo: (backo || fronto) || hasBOread || hasBO2read || user.has(["WEB_ALGUSE","WEB_ALGMAN"]),
                               terrein: true,
                               readonly: true,
                               no_table: true,
                               suppressEmpty: true  // unsupported yet
                             });
        BLOCK_END();

        BLOCK_START("opdrPlanning", L("lcl_opdr_planning"), {icon: "fa-clock"});
         ROFIELDTR("flddatetime",
                   L("lcl_orderdate"),
                   toDateTimeString(mld_opdr.mld_opdr_datumbegin, false, false, true, true)); // Opdracht datum
        ROFIELDTR("flddatetime", L("lcl_opdr_plandate"), mld_opdr.mld_opdr_plandatum != null ? toDateTimeString(mld_opdr.mld_opdr_plandatum, false, false, true, true):null, { suppressEmpty: true }); // Geplande datum
         // Als de eindatum van de opdracht na de einddatum van de melding valt dan addClass toevoegen.
         var lclass = (mld_opdr.mld_opdr_einddatum && mld_einddatum.getTime() < mld_opdr.mld_opdr_einddatum.getTime()? " opdrgtmld" : "");
         var ltitle = (mld_opdr.mld_opdr_einddatum && mld_einddatum.getTime() < mld_opdr.mld_opdr_einddatum.getTime()? L("lcl_mld_opdr_afr_na_mld") : "");
         ROFIELDTR("flddatetime " + lclass,
                   L("lcl_opdr_enddate"),
                    toDateTimeString(mld_opdr.mld_opdr_einddatum, false, false, true, true),
                    { title: ltitle, suppressEmpty: true }); // Einddatum
        ROFIELDTR("flddatetime", L("lcl_opdr_plandate2"), mld_opdr.mld_opdr_plandatum2 != null ? toDateTimeString(mld_opdr.mld_opdr_plandatum2, false, false, true, true):null, { suppressEmpty: true }); // Geplande einddatum
        BLOCK_END();
        var ttl = L("lcl_opdr_kosten");
        if (mld_opdr.tonen_totaal)
            ttl += " " + (mld_opdr.inclBTW? L("lcl_shared_inclBTW") : L("lcl_shared_exclBTW"));

        BLOCK_START("opdrKosten", ttl, {icon: "fa-coins"});

        // Kostenplaats
        FCLTkostenplaatsselector("account",
                                 "sgAccount",
                                 user_key,
                                 { kostenplaatsKey: mld_opdr.kp_key,
                                   readonly: true,
                                   onChange: "changeAccount",
                                   extraParamField: "budgeth",
                                   extracode: "B", // extra informatie is budgethouder (B)
                                   defExtraParam: budgetholder_name,
                                   moreinfo: !frontend,
                                   label: L("lcl_mld_kosten"),
                                   suppressEmpty: true
                                 });

        // Toon de kostensoort of default kostensoort
        FCLTkostensoortselector( "srtkosten_x"
                               , "sgSrtkosten_x"
                               , { kostensoortKey: (mld_opdr.kostensoort_key ? mld_opdr.kostensoort_key : mld_opdr.kostensoort_def_key)
                                 , readonly: true
                                 , label: (mld_opdr.kostensoort_key ? L("lcl_mld_opdr_alt_charge_type") : L("lcl_charge_type") )
                                 , suppressEmpty: true
                                 });


        // <!-- VRIJWILLIG VERZOEK FIATTERING -->
        // 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) {
            ROFIELDTR("fldshort", L("lcl_mld_inf_Ordernr"), mld_opdr.mld_opdr_ordernr,{ suppressEmpty: true });
        }
        if (S("mld_ordermaterial_frame") == 0 && mld_opdr.typeopdr_materiaal >= 2)
        { // Materiaallijst
          sql = "SELECT COUNT(mld_opdr_materiaal_key) aantal"
              + " FROM mld_opdr_materiaal ud"
              + " WHERE mld_opdr_key = " + opdr_key;
          oRs = Oracle.Execute(sql);
          var mataantal = oRs("aantal").Value;

          var params = { datatype: "button",
                         html: "title='" + L("lcl_mld_opdr_materials_select") + (mataantal > 0? "' onclick='mld_melding_materiaal()'" : "'"),
                         opdr_key: opdr_key,
                         endicon: "fa-hammer"
                       }

          RWFIELDTR("materiallist_button", "button materiaal", L("lcl_mld_material"), L("lcl_mld_materialen") + " (" + mataantal + ")", params);
        }

        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;}
        }
        ROFIELDTR("flduren", flduren_label, mld_opdr.hours, {suppressEmpty: true, datatype: "hours"}); // Uren
        if (mld_opdr.typeopdr_uren == 3 || mld_opdr.typeopdr_uren == 4)
          ROFIELDTR("fldgeboekt",  L("lcl_mlduren_booked"), mld_opdr.booked, {suppressEmpty: true, datatype: "hours"}); // Geboekte uren
        if (mld_opdr.tonen_uren)
          ROFIELDTR("flduurtarief", L("lcl_hour_rate") + " " + L("lcl_valutasign"), mld_opdr.h_rate, {suppressEmpty: true, datatype: "currency"}); // Uurtarief
        if (mld_opdr.tonen_materiaal_bedrag)
          ROFIELDTR("fldmatkosten", L("lcl_mater_cost") + " " + L("lcl_valutasign"), mld_opdr.m_cost, {suppressEmpty: true, datatype: "currency"}); // Materiaal
        if (mld_opdr.tonen_correctie)
          ROFIELDTR("fldcorrkosten", L("lcl_correct") + " " + L("lcl_valutasign"), mld_opdr.corr_cost, {suppressEmpty: true, datatype: "currency"}); // Correctie
        if (mld_opdr.tonen_totaal)
          ROFIELDTR("fldtotkosten",  L("lcl_total_cost") + " " + L("lcl_valutasign"), mld_opdr.t_cost, {suppressEmpty: !mld_opdr.corr_cost, datatype: "currency"}); // Totaal
        BLOCK_END();

        BLOCK_START("mldFaq", L("lcl_faq_kennisbank"), { hidden: true, icon:"fa-book" });
            // hier komen vaste aanwijzingen
        BLOCK_END();

        if (mld_opdr.opdr_status == 1 || mld_opdr.opdr_status == 2 || mld_opdr.opdr_status == 6 || mld_opdr.opdr_status == 7)
            gen_afhandeling();

        BLOCK_START("mldIns", L("lcl_gerelateerdeobjecten"), { icon: "fa-hand-point-right" });
            mld.generate_relobject_block(mld_opdr.mld_key);

        // Heeft betrekking op
        if (kto_type && kto_key > 0)
        {
          mld.referentielink(kto_type, kto_key, L("lcl_mld_kto"), { tooltip: true });
        }
        BLOCK_END();

        // Flexkenmerken
        generateFlexKenmerkBlock({ opdr_key: opdr_key,
                                   opdr_type: mld_opdr.opdr_type,
                                   opdr_type_org: opdr_type_org,
                                   opdr_status: mld_opdr.opdr_status,
                                   showClose: this_opdr.couldClose || this_opdr.canClose || this_opdr.canHervatten || this_opdr.canSeeARFlex,
                                   reado: true,
                                   showConfidential : this_opdr.canViewConfidential
                                 });

        if (mld_opdr.opdr_status != 1 && mld_opdr.opdr_status != 2 && mld_opdr.opdr_status != 6 && mld_opdr.opdr_status != 7)
            gen_afhandeling();

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