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

    File:               cnt_edit_kenmerk_multi_save.asp
    Description:        Multi-edit wijzigen van overeenkomstige kenmerken van de geselecteerde contracten:
                        het save-script.
    Parameters:

    Context:
    Note:
*/
%>

<%
var JSON_Result = true;
%>

<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/kenmerk_common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="../cnt/cnt_flexkenmerk.inc" -->
<!-- #include file="../cnt/cnt.inc" -->

<%
protectRequest.validateToken();
var cnt_key_arr = getFParamIntArray("cnt_key");
var nameprefix = getFParamSafe("nameprefix");
var kenmerk_count = getFParamInt("k_all", 0);

// Heb ik rechten op de geselecteerde contracten.
var ingesloten = [];
for (i=0; i<cnt_key_arr.length; i++)
{
    var this_cnt = cnt.func_enabled_contract(cnt_key_arr[i]);
    if (this_cnt.canChange)
    {
        ingesloten.push(cnt_key_arr[i]);
    }
}

if (ingesloten.length > 0)
{   // Kenmerken van referentiecontract ophalen.
    var kkey_arr = getMultiRefKenmerken();

    // Bij elke contract de juiste kenmerken ophalen.
    // In _saveFlexKenmerken() zijn de kenmerk keys nodig die bij de betreffende contract horen.
    // De functie flexkenmerken2jsondata() leest echter de referentie kenmerken. Met onderstaande query
    // worden de kenmerken bepaald die horen bij het contract.
    var sql = "SELECT c.cnt_contract_key"
            + "     , k.cnt_srtkenmerk_key"
            + "     , k.cnt_kenmerk_key"
            + "     , r.cnt_kenmerk_key      ref_kenmerk_key"
            + "     , c.ins_discipline_key   contract_disc"
            + "     , k.cnt_srtcontract_key  kenmerk_disp"
            + "     , COALESCE(k.cnt_kenmerk_omschrijving, s.cnt_srtkenmerk_omschrijving) kenmerk_naam"
            + "  FROM cnt_srtkenmerk s"
            + "     , cnt_kenmerk k"
            + "     , cnt_kenmerk r"
            + "     , cnt_contract c"
            + " WHERE k.cnt_srtkenmerk_key = r.cnt_srtkenmerk_key"
            + "   AND k.cnt_srtkenmerk_key = s.cnt_srtkenmerk_key"
            + "   AND r.cnt_srtkenmerk_key = s.cnt_srtkenmerk_key"
            + "   AND k.cnt_kenmerk_verwijder IS NULL"
            + "   AND r.cnt_kenmerk_verwijder IS NULL"
            + "   AND (  (c.ins_discipline_key = k.cnt_srtcontract_key)"
            + "       OR (k.cnt_srtcontract_key IS NULL)"
            + "       )"
            + "   AND COALESCE (k.cnt_kenmerk_omschrijving, s.cnt_srtkenmerk_omschrijving) ="
            + "       COALESCE (r.cnt_kenmerk_omschrijving, s.cnt_srtkenmerk_omschrijving)"
            + "   AND r.cnt_kenmerk_key IN (" + kkey_arr.join(",") + ")"
            + "   AND c.cnt_contract_key IN (" + ingesloten.join(",") + ")"
            + " ORDER BY c.cnt_contract_key";

    var oRs = Oracle.Execute(sql);
    var data_arr = [];
    var old_key = -1;
    while (!oRs.eof)
    {
        var cnt_key = oRs("cnt_contract_key").Value;
        if (old_key != cnt_key)
        {
            old_key = cnt_key;
            var flx = { cnt_key: cnt_key
                      , ref_key: {}
                      };
            data_arr.push(flx);
        }
        flx.ref_key[oRs("ref_kenmerk_key").Value] = {kenmerk_key: oRs("cnt_kenmerk_key").Value};
        oRs.MoveNext();
    }
    oRs.Close();

    // Per contract de kenmerken aanpassen.
    for (var i=0; i<data_arr.length; i++)
    {
        var cnt_key = data_arr[i].cnt_key
        var knm_arr = [];
        for (var ref in data_arr[i].ref_key)
        {
            knm_arr.push(data_arr[i].ref_key[ref].kenmerk_key);
        }

        if (knm_arr.length > 0)
        {
            var currentKenmerkenSQL = "SELECT k.cnt_kenmerk_key"
                                    + "     , ok.cnt_kenmerkcontract_waarde"
                                    + "     , k.cnt_kenmerk_toonbaar"
                                    + "     , k.fac_functie_key"
                                    + "  FROM cnt_kenmerkcontract ok"
                                    + "     , cnt_kenmerk k"
                                    + " WHERE ok.cnt_kenmerk_key = k.cnt_kenmerk_key"
                                    + "   AND ok.cnt_kenmerkcontract_verwijder IS NULL"
                                    + "   AND k.cnt_kenmerk_key IN (" + knm_arr.join(",") + ")"
                                    + "   AND ok.cnt_contract_key(+) = " + cnt_key;

            var allKenmerkenSQL     = "SELECT COALESCE (" + lcl.xsql("k.cnt_kenmerk_omschrijving", "k.cnt_kenmerk_key")
                                    + "              ,  " + lcl.xsql("t.cnt_srtkenmerk_omschrijving", "t.cnt_srtkenmerk_key") + ") kenmerk_omschrijving"
                                    + "     , t.cnt_srtkenmerk_kenmerktype kenmerk_kenmerktype"
                                    + "     , t.cnt_srtkenmerk_systeem     kenmerk_systeem"
                                    + "     , k.cnt_kenmerk_toonbaar       kenmerk_readonly"
                                    + "     , k.cnt_kenmerk_uniek          kenmerk_uniek"
                                    + "     , fac_kenmerkdomein_key"
                                    + "  FROM cnt_kenmerk k"
                                    + "     , cnt_srtkenmerk t"
                                    + " WHERE k.cnt_srtkenmerk_key = t.cnt_srtkenmerk_key"
                                    + "   AND k.cnt_kenmerk_key = "; /* wordt in saveFlexkenmerken uitgebreid */

            var kenmerkParams = { kenmerkTable: "cnt_kenmerkcontract"
                                , kenmerkParentKey : "cnt_contract_key"
                                , kenmerkWaarde: "cnt_kenmerkcontract_waarde"
                                , kenmerkKey: "cnt_kenmerk_key"
                                , kenmerkToonbaar: "cnt_kenmerk_toonbaar"
                                , currentKenmerkenSQL: currentKenmerkenSQL
                                , allKenmerkenSQL: allKenmerkenSQL
                                , requestQF: Request.Form
                                , module: "CNT"
                                , flexPath: "CNT/C"
                                , tracking: true
                                , multiEdit: true
                                , noFlexCleanup: true
                                , multikenmerk: data_arr[i].ref_key
                                , isNew: false
                                };
            if (hasFParam("nameprefix"))
            {
                kenmerkParams.nameprefix = getFParamSafe("nameprefix", "");
                kenmerkParams.extraserie = true;
            }
            var flextrack = saveFlexKenmerken( cnt_key, kenmerkParams );
            shared.trackaction("CNTUPD", cnt_key, flextrack.join("\n"));
        }
    }
}

var result = {success: true, message: "", key: ingesloten.join(",")};
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>
