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

    File:         mld_change_opdrtype.asp
    Description:  Verander het opdracht type
                  Impliciet: mld_opdr.mld_typeopdr_key wordt aangepast
                  Expliciet: flexkenmerken moeten worden overgezet naar de nieuwe opdrachttype met zijn eigen kenmerk keys (mld_kenmerkopdr.mld_kenmerk_key)
    Parameters:   Moved from ALG to PRS. Might needs some adjusting
      opdr_key       Opdracht key
      opdr_type_new  Nieuwe opdracht type
      submitting     Mode {0=invoer / 1=opslaan}

    Context:      mld_showopdr.asp wijzigen opdrachttype
    Note:

*/ %>

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

<%
FCLTHeader.Requires({ plugins:["jQuery"] })

var opdr_key = getQParamInt("opdr_key");

var this_opdr = mld.func_enabled_opdracht(opdr_key);
user.anything_todo_or_abort(this_opdr.canOpdrTypeChange && S("mld_ord_change_type") == 1);
%>

<html>
  <head>
<%  FCLTHeader.Generate();
    var submitting = getQParamInt("submit", 0) == 1;
    if (submitting)
    {
      protectRequest.validateToken();
      var opdr_type_new = getFParamInt("opdr_type_new"); // Nieuwe opdrachttype

      // Bepaal huidige opdrachttype
      var sql = "SELECT o.mld_typeopdr_key"
              + " FROM mld_opdr o"
              + " WHERE o.mld_opdr_key = " + opdr_key;
      oRs = Oracle.Execute(sql);
      var opdr_type_current = oRs("mld_typeopdr_key").value;

      // Documentfolders hernoemen.
      if (opdr_type_current != opdr_type_new)
      { // Match de kenmerk keys van de oude en nieuwe type
        var flexsql = "SELECT k_old.mld_kenmerk_key k_old"
                  + ", k_new.mld_kenmerk_key k_new"
                  + "  FROM mld_srtkenmerk t"
                  + "     , mld_kenmerk k_old"
                  + "     , mld_kenmerk k_new"
                  + " WHERE t.mld_srtkenmerk_kenmerktype IN ('F', 'E', 'M')"
                  + "   AND (k_old.mld_typeopdr_key = " + opdr_type_current + " OR k_old.mld_typeopdr_key IS NULL)"
                  + "   AND k_old.mld_kenmerk_niveau IN ('P', 'O')"
                  + "   AND k_old.mld_kenmerk_verwijder IS NULL"
                  + "   AND k_old.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
                  + "   AND (k_new.mld_typeopdr_key = " + opdr_type_new + " OR k_new.mld_typeopdr_key IS NULL)"
                  + "   AND k_new.mld_kenmerk_niveau IN ('P', 'O')"
                  + "   AND k_new.mld_kenmerk_verwijder IS NULL"
                  + "   AND k_new.mld_srtkenmerk_key = t.mld_srtkenmerk_key"
                  + "   AND t.mld_srtkenmerk_verwijder IS NULL"
                  + "   AND k_old.mld_kenmerk_groep = k_new.mld_kenmerk_groep"
                  + "   AND k_old.mld_kenmerk_niveau = k_new.mld_kenmerk_niveau";
        RenameFlexFolders(flexsql, "MLD", "O", opdr_key);
      }

      sql_waarde = " (SELECT v.mld_kenmerkopdr_waarde"
                 + "   FROM mld_kenmerkopdr v"
                 + "      , mld_kenmerk vk"
                 + "  WHERE v.mld_opdr_key = " + opdr_key
                 + "    AND v.mld_kenmerk_key = vk.mld_kenmerk_key"
                 + "    AND (vk.mld_typeopdr_key = " + opdr_type_current + " OR vk.mld_typeopdr_key IS NULL)"
                 + "    AND vk.mld_srtkenmerk_key = k.mld_srtkenmerk_key"
                 + "    AND vk.mld_kenmerk_niveau IN ('P', 'O')"
                 + "    AND vk.mld_kenmerk_niveau = k.mld_kenmerk_niveau"
                 + "    AND vk.mld_kenmerk_groep = k.mld_kenmerk_groep)";

      sql_filter = "       mld_typeopdr s"
                 + " WHERE s.mld_typeopdr_key = " + opdr_type_new
                 + "   AND (k.mld_typeopdr_key = s.mld_typeopdr_key OR k.mld_typeopdr_key IS NULL)"
                 + "   AND k.mld_kenmerk_niveau IN ('P', 'O')";

      var sql = "SELECT k.mld_kenmerk_key new_kenmerk_key"
              + "     , t.mld_srtkenmerk_kenmerktype kenmerk_kenmerktype"
              + "     , " + sql_waarde + " kenmerk_waarde"
              + "  FROM mld_srtkenmerk t"
              + "     , mld_kenmerk k"
              + "     , " + sql_filter
              + "   AND k.mld_kenmerk_verwijder IS NULL"
              + "   AND k.mld_srtkenmerk_key=t.mld_srtkenmerk_key"
              + "   AND t.mld_srtkenmerk_verwijder IS NULL";
      oRs = Oracle.Execute(sql);

      // Verwijder eerst alle kenmerkwaarden van het oude opdrachttype
      sql = "DELETE FROM mld_kenmerkopdr"
          + " WHERE mld_opdr_key = " + opdr_key;
      Oracle.Execute(sql);

      while (!oRs.eof)
      {
        var new_kkey = oRs("new_kenmerk_key").value;
        var kwaarde = oRs("kenmerk_waarde").value;

        // Heeft het kenmerk een waarde.
        if (kwaarde)
        { // Kenmerkwaarde van het overeenkomende kenmerk opslaan voor het nieuwe opdrachttype
          sql = "INSERT INTO mld_kenmerkopdr"
              + "(mld_opdr_key"
              + ", mld_kenmerk_key"
              + ", mld_kenmerkopdr_waarde)"
              + " VALUES "
              + "(" + opdr_key
              + ", " + new_kkey
              + ", " + safe.quoted_sql(kwaarde) + ")";
          Oracle.Execute(sql);
        }
        oRs.MoveNext();
      }

      mld_opdr = mld.mld_opdr_info(opdr_key);
      var old_omschr = mld_opdr.opdr_type_omschr;
      // Nu nog opdrachttype aanpassen.
      sql = "UPDATE mld_opdr"
          + "   SET mld_typeopdr_key = " + opdr_type_new
          + " WHERE mld_opdr_key = " + opdr_key;
      Oracle.Execute(sql);
      // Tracking
      mld_opdr = mld.mld_opdr_info(opdr_key);
      var new_omschr = mld_opdr.opdr_type_omschr;

      var ins_srtdiscipline_prefix = mld.mld_prefix(mld_opdr.mld_key);
      var formattedID = ins_srtdiscipline_prefix + mld_opdr.mld_key + "/" + mld_opdr.volgnr;
      mld.trackopdrachtupdate(opdr_key, L("lcl_ord_is_ordupdtrack").format(formattedID) + "\n"
                                        + L("lcl_mld_typeopdr") + ": " + old_omschr + L("lcl_trackto") + new_omschr);


%>    <script type="text/javascript">
        FcltMgr.closeDetail(window, { refresh: true } );
      </script>
<%    Response.End;
    }
%>
    <script type="text/javascript">
      async function mld_submit()
      {
          document.activeElement.blur(); // trigger laatste onChanges
          if (!await validateForm("u2"))
              return false;
          document.forms.u2.submit();
      }
      function mld_cancel()
      {
          FcltMgr.closeDetail(window);
      }
    </script>
  </head>

  <body class="fclt-modal" id="mod_changeopdrtype">
    <% MODAL_START(); %>
    <form name="u2"
          action="mld_change_opdrtype.asp?submit=1<%=buildTransitParam(["opdr_key"])%>"
          method="post"
          onSubmit="mld_submit();">
<%
      MODAL_BLOCK_START("opdrtypeInfo", L("lcl_select_typeopdr"), { icon: "fa-file-signature" });
      // Opdrachttype
      // Geef een lijst en laat een opdrachttype selecteren
      // Bepaal eerst disckey en srtdisckey
      sql = "SELECT o.mld_typeopdr_key"
          + ", std.mld_ins_discipline_key"
          + ", md.ins_srtdiscipline_key"
          + " FROM mld_opdr o"
          + ", mld_melding m"
          + ", mld_stdmelding std"
          + ", mld_discipline md"
          + " WHERE o.mld_melding_key = m.mld_melding_key"
          + " AND m.mld_stdmelding_key = std.mld_stdmelding_key"
          + " AND std.mld_ins_discipline_key = md.ins_discipline_key"
          + " AND o.mld_opdr_key = " + opdr_key;
      oRs = Oracle.Execute(sql);
      var opdrtypekey = oRs("mld_typeopdr_key").value;
      var disckey = oRs("mld_ins_discipline_key").value;
      var srtdisckey = oRs("ins_srtdiscipline_key").value;

      sql_typeopdr = "SELECT t.mld_typeopdr_key"   /* markeer de specifiekste met een * */
                   + ",      CASE WHEN ins_discipline_key IS NULL THEN '' ELSE '*' END || " + lcl.xsqla("t.mld_typeopdr_omschrijving", "t.mld_typeopdr_key")
                   + " FROM mld_typeopdr t"
                   + ",     mld_typeopdr_srtdiscipline ts"
                   + " WHERE t.mld_typeopdr_key = ts.mld_typeopdr_key"
                   + "   AND (ins_discipline_key = " + disckey /* en dan doet de srtdiscipline er echt niet meer toe */
                   + "        OR (ts.ins_srtdiscipline_key = " + srtdisckey + " AND ins_discipline_key IS NULL))"
                   + "   AND t.mld_typeopdr_key !=  " + opdrtypekey // Huidige waarde niet laten zien.
                   + "   AND t.mld_typeopdr_isofferte != 1" // Niet de offerte opdrachten laten zien.
                   + " ORDER BY 2";
      FCLTselector("opdr_type_new",
                   sql_typeopdr,
                   { emptyOption: L("lcl_select_typeopdr"),
                     required: true,
                     label: L("lcl_mld_typeopdr")
                   });
      MODAL_BLOCK_END();
      SIMPLE_BLOCK_START();
      CreateButtons([{ title: L("lcl_submit"), action: "mld_submit()", icon: "fa-fclt-save", importance: 1},
                     { title: L("lcl_cancel"), action: "mld_cancel()", icon: "fa-fclt-cancel", importance: 3}]);
      SIMPLE_BLOCK_END();
IFACE.FORM_END();
%>
    </form>
    <% MODAL_END(); %>
  </body>
</html>
<% ASPPAGE_END(); %>
