<%@ LANGUAGE="JavaScript" %>
<% /*
     $Revision$
     $Id$

    File:               kenmerk_fill.asp
    Status:
    Description:        Vraag in een modal popup naar de flexkenmerken van *een bestelitem*
    Parameters:         ??

    Context:            ShowModalDialog popup
    Note:               Er is geen interface binnen Facilitor om bestelitem kenmerken te wijzigen
*/ %>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/iface.inc" -->
<!-- #include file="../Shared/persoonselector.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="./bes.inc" -->

<%
  FCLTHeader.Requires({ plugins: ["suggest", "kenmerk"] });

  var bestel_item_key = getQParamInt("item_key", -1);
  var srtdeel_key = getQParamInt('srtdeel_key');
  var srtgroup_key = getQParamInt('srtgroup_key');
  var dis_key = getQParamInt('dis_key');
  var prs_key = getQParamInt('prs_key',-1);
  var urole = getQParamSafe("urole");
  var PRSreadlevel = getQParamInt('PRSreadlevel',-1);

  if (bestel_item_key == -1)
  {
    var km_key_arr = getQParamIntArray("km_key", []);
    var km_val_arr = getQParamArray("km_val", []);
  }
  var autfunction = {fo: 'WEB_BESFOF', bo: 'WEB_BESBOF'}[urole] || 'WEB_BESUSE';
  authparams = user.checkAutorisation(autfunction, true, dis_key);

  var bestelling_key = -1;
  var sql = "SELECT bes_bestelling_key"
          + "  FROM bes_bestelling_item"
          + " WHERE bes_bestelling_item_key = " + bestel_item_key;
  var oRs = Oracle.Execute(sql);
  if (!oRs.eof)
    bestelling_key = oRs("bes_bestelling_key").Value;
  oRs.Close();
  var bresult = bes.func_enabled_bestelitem(bestelling_key, srtdeel_key);

  // PRSreadlevel bepaalt de scope van de personen waarvan ik persoonsafhankelijke kenmerken kan gebruiken

  var prs_name = "";
  if (prs_key > 0) {
    prs_name = new Perslid(prs_key).naam();
  }

  var preview = 0;
  var prsflex = 0;
  // xml genereren als bes_srtdeel_opmaat = 1
  sql = "SELECT bes_srtdeel_preview"
      + ",      bes_srtdeel_prsflex"
      + ", " + lcl.xsqla('bes_srtdeel_omschrijving', 'bes_srtdeel_key')
      + "  FROM bes_srtdeel"
      + " WHERE bes_srtdeel_key = " + srtdeel_key
  oRs = Oracle.Execute(sql);
  if (!oRs.eof) {
    preview = oRs("bes_srtdeel_preview").value||0;
    prsflex = oRs("bes_srtdeel_prsflex").value||0;
    var desc = oRs("bes_srtdeel_omschrijving").Value;
  }
%>

<script type="text/javaScript">
var preview = <%=preview%>
var prsflex = <%=prsflex%>
var bestelitem_key = <%=bestel_item_key%>

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

  var objReturn = new Array();
  objReturn[0] = new Array();  // bes_kenmerk_key
  objReturn[1] = new Array();  // bes_kenmerkbestell_waarde
  objReturn[2] = new Array();  // flexkenmerk omschrijving
  objReturn[3] = new Array();  // flexkenmerkwaarde omschrijving
  objReturn[4] = new Array();  // url
  objReturn[5] = {canWriteBESBOF: <%=(bresult.canChangeLine?1:0)%>}; // andere eigenschappen: canWriteBESBOF

  var nameprefix = 'k';
  for (var i=1; i<=window.document.getElementById("k_all").value; i++) {
    if (window.document.getElementById("k" + i + "val")) {

      var kval = window.document.getElementById("k" + i + "val"); // Waarde van het kenmerk.
      var tp = window.document.getElementById('k' + i + 't');     // Type van het kenmerk.
      if (tp.value == "N")
      { // De invoor is al gevalideerd met validateForm.
        // Numerieke(N) waarden slaan we altijd op met punten. Dit gebeurt normaal in saveFlexKenmerken -> flexkenmerken2jsondata.
        kval.value = kval.value.replace(",", ".");
      }
      if (tp != null) tp = tp.value; // bij types 'l', 'L' of 'M' bestaat dit veld niet
      if ((tp && tp != 'R' && tp != 'S' && kval.value != "") || (tp && (tp == 'R' || tp == 'S') && kval.value != -1))
      {
        var kkey = window.document.getElementById('k' + i + 'key').value;
        objReturn[0][objReturn[0].length] = kkey;
        if (kval.type == 'checkbox') {
          objReturn[1][objReturn[1].length] = (kval.checked?1:0);
        }
        else
          objReturn[1][objReturn[1].length] = kval.value;

        objReturn[2][objReturn[2].length] = $("label[for='k" + i + "val']").text();

        if (kval.type == 'checkbox') {
          objReturn[3][objReturn[3].length] = (kval.checked?1:0);
        }
        else if (tp && tp == 'R') {
          objReturn[3][objReturn[3].length] = $('#k' + i + 'val option:selected').text();
        }
        else if (tp && tp == 'S') {
          objReturn[3][objReturn[3].length] = $('#Suggest' + nameprefix + i + '_show').val();
        }
        else {
          objReturn[3][objReturn[3].length] = kval.value;
        }
      }
    }
  }

  if (bestelitem_key > -1)
  {
    var v_url = "../bes/bes_edit_item_kenmerk_save.asp?urole=<%=urole%>";
    var v_data = { item_key: bestelitem_key
                 , item_kenmerk_key: objReturn[0]
                 , item_kenmerk_val: objReturn[1]
                 };
    <% protectRequest.dataToken("v_data"); %>
    $.post( v_url, v_data, submitKenmerkCallback, "json");
    return true;
  }

  var isXmlOk = true;
  if (preview!=1)
  {
    FcltMgr.closeDetail(window, { objReturn: objReturn});
    return true;
  }

  // Ga een preview tonen
  var s = "../Bes/bes_show_item_kenmerk.asp?srtdeel_key=<%=srtdeel_key%>";
  objReturn[4][0] = s;

  FcltMgr.openModalDetail(s, L("lcl_bes_article_details"),
          { width: 500, xheight: 400,
            objReturn:objReturn,
            callback: function (data)
              {
                if (data.isXmlOk)
                {
                    parent.FcltMgr._modalCallback[1]( { objReturn: objReturn} );
                    parent.$('iframe#fcltmodal'+1).dialog('close');
                    //parent.FcltMgr.dialogClose();
                    return true;
                }
                else
                {
                    return false;
                }
              }
            });
  return false;
}

function submitKenmerkCallback(data, textStatus)
{
    if (data.success)
        FcltCallbackClose(data);

    return true;
}

var sgPerson;

function changeName(prs_key) {
    if (prs_key > 0)
    {
      var s = "./bes_edit_item_kenmerk.asp?srtdeel_key=<%=srtdeel_key%>"
        + "&urole=<%=urole%>"
        + "&srtgroup_key=<%=srtgroup_key%>"
        + "&dis_key=<%=dis_key%>"
        + "&prs_key=" + prs_key;
      window.location.href = s;
    }
}
</script>

<html>
<head>
<% FCLTHeader.Generate(); %>
<script>
  $(function()
  {
    FcltMgr.resized()
  });
</script>
</head>

<body class="fclt-modal" id="mod_bes_kenmerk">
<% MODAL_START(); %>
<form name="u2" onSubmit="return false">
<%  if (prsflex) {
  MODAL_BLOCK_START("contact_prs", L("lcl_name"), { icon: "fa-user" });

     FCLTpersoonselector(
                "person",
                "sgPerson",
              { autlevel: authparams.PRSreadlevel,
                perslidKey: prs_key>0?prs_key:user_key,
                label: L("lcl_name"),
                onChange: "changeName"
              });
  MODAL_BLOCK_END();
}
MODAL_BLOCK_START("besItemFlex" , L("lcl_flexible_properties") + ": " + desc, { icon: "fa-question" } );
  var sql_km_key = "(SELECT w.bes_kenmerkbesteli_waarde"
                 + "   FROM bes_kenmerkbesteli w"
                 + "  WHERE w.bes_bestelling_item_key = " + bestel_item_key
                 + "    AND w.bes_kenmerk_key = k.bes_kenmerk_key"
                 + ")";

  var sql_km_new = "";
  if (bestel_item_key == -1 && km_key_arr.length > 0)
  {
    sql_km_new = "DECODE(k.bes_kenmerk_key";
    // de waarden die al ingevuld zijn.
    for (k=0; k<km_key_arr.length; k++)
    {
        sql_km_new += "," + km_key_arr[k] + "," + safe.quoted_sql(km_val_arr[k]);
    }
    sql_km_new += "," + lcl.xsql("k.bes_kenmerk_default", "k.bes_kenmerk_key")
                + ")";
  }

  sql = "SELECT k.bes_kenmerk_key                   kenmerk_key"
      + "     , 1                                   kenmerk_key_count"
      + "     , sk.bes_srtkenmerk_key               srtkenmerk_key"
      + "     , COALESCE (" + lcl.xsql("k.bes_kenmerk_omschrijving", "k.bes_kenmerk_key")
      + "              ,  " + lcl.xsql("sk.bes_srtkenmerk_omschrijving", "sk.bes_srtkenmerk_key") + ") kenmerk_omschrijving"
      + "     , sk.bes_srtkenmerk_kenmerktype       kenmerk_kenmerktype"
      + "     , sk.fac_kenmerkdomein_key            kenmerkdomein_key"
      + "     , sk.bes_srtkenmerk_lengte            kenmerk_lengte"
      + "     , sk.bes_srtkenmerk_dec               kenmerk_dec"
      + "     , sk.bes_srtkenmerk_nmin              kenmerk_nmin"
      + "     , sk.bes_srtkenmerk_nmax              kenmerk_nmax"
      + "     , sk.bes_srtkenmerk_systeem           kenmerk_systeem"
      + ( bestel_item_key > -1
        ? "   , " + sql_km_key
        : (sql_km_new == ""
          ? " , " + lcl.xsql("k.bes_kenmerk_default", "k.bes_kenmerk_key")
          : " , " + sql_km_new
          )
        ) + " kenmerk_waarde"
      + "     , k.bes_kenmerk_volgnummer            kenmerk_volgnr"
      + "     , k.bes_kenmerk_rolcode               kenmerk_rolcode"
      + "     , " + lcl.xsql("sk.bes_srtkenmerk_dimensie", "sk.bes_srtkenmerk_key") + " kenmerk_dimensie"
      + "     , " + lcl.xsql("k.bes_kenmerk_hint", "k.bes_kenmerk_key") + " kenmerk_hint"
      + "     , " + lcl.xsql("k.bes_kenmerk_default", "k.bes_kenmerk_key") + " kenmerk_default"
      + "     , k.bes_kenmerk_show_expr         	  kenmerk_show_expr"
      + "     , k.bes_kenmerk_verplicht             kenmerk_verplicht"
      + "     , k.bes_kenmerk_groep                 kenmerk_groep"
      + "     , NULL otherpath"
      + "     , k.bes_kenmerk_toonbaar              kenmerk_toonbaar"
      + "     , k.bes_kenmerk_uniek                 kenmerk_uniek"
      + "     , k.bes_kenmerk_regexp                kenmerk_regexp"
      + "     , k.fac_functie_key"
      + "  FROM bes_srtkenmerk sk"
      + "     , bes_kenmerk k"
      + " WHERE (k.bes_srtinstallatie_key = " + dis_key + " AND k.bes_kenmerk_niveau LIKE 'D'"
      + "     OR k.bes_srtinstallatie_key = " + srtgroup_key + " AND k.bes_kenmerk_niveau LIKE 'G'"
      + "     OR k.bes_srtinstallatie_key = " + srtdeel_key + " AND k.bes_kenmerk_niveau LIKE 'S')"
      + "   AND k.bes_kenmerk_verwijder IS NULL"
      + "   AND k.bes_srtkenmerk_key = sk.bes_srtkenmerk_key"
      + "   AND sk.bes_srtkenmerk_verwijder IS NULL"
      + "   AND k.bes_kenmerk_type = 'I'"
      + "   AND sk.bes_srtkenmerk_kenmerktype NOT IN ('F', 'M', 'E')" // Bestelitemregels hebben geen bijlages of bestanden.
      + " ORDER BY k.bes_kenmerk_volgnummer"
      + "        , UPPER( COALESCE (" + lcl.xsql("k.bes_kenmerk_omschrijving", "k.bes_kenmerk_key")
      + "                        ,  " + lcl.xsql("sk.bes_srtkenmerk_omschrijving", "sk.bes_srtkenmerk_key") + "))";

      listKenmerk(sql,
                  "BES",
                  -1,
                  {
                    kenmerk_search: false,
                    prs_key: prs_key,
                    hideVervallen: true // Wijzigen kennen we toch (nog) niet
                    }
                 );
MODAL_BLOCK_END();
buttons = [{title: (preview ? L("lcl_bes_preview"):L("lcl_submit")), icon: "fa-fclt-save", action: "doSubmit();", singlepress: true, id: "btn_itemkenmerk_submit", importance: 1},
           {title: L("lcl_back"), icon: "fa-fclt-cancel", action: "FcltMgr.closeDetail(window, { cancel: true });", importance: 3}
          ];
SIMPLE_BLOCK_START();
CreateButtons(buttons);
SIMPLE_BLOCK_END();
IFACE.FORM_END();
%>
</form>
<% MODAL_END(); %>
</body>
</html>
<% ASPPAGE_END(); %>
