<% /*
     $Revision$
     $Id$

     File:          mld_edit_note.inc
     Description:   Functie vooor het echte bewaren van een melding notitie
     Context:       Vanuit mld_edit_note.asp

*/
%>
<%
// params: note_key, isFE, zichtFE
function note_save(mld_key, note, params)
{
    var mld_info = mld.mld_melding_info(mld_key);
    lcl.set_dialect(mld_info.srtdisc, "MLD_SRTDISCIPLINE_KEY");

    var mfe = mld.func_enabled_melding (mld_key);
    // Heb ik rechten om notities te wijzigen?
    user.auth_required_or_abort(mfe.canWriteNotes);

    var eigenMelding = user_key == mld_info.melder_key || user.isCollega(mld_info.melder_key);

    if (params.note != "")
    {
        var fields =  [ { dbs: "mld_melding_key",               typ: "key",     val: mld_key },
                        { dbs: "prs_perslid_key",               typ: "key",     val: user_key },
                        { dbs: "mld_melding_note_omschrijving", typ: "varchar", val: note, len: 4000 }
                      ]

        if (params.note_key > -1)
        {
            var sql = buildUpdate("mld_melding_note", fields)
                    + " mld_melding_note_key = " + params.note_key
                    + " AND prs_perslid_key = " + user_key; // Voorkom dat er een notitie van een ander aangepast wordt.
            Oracle.Execute(sql);
        }
        else
        {
            // fenotes betekenis:
            //   0 FE kan niet reageren, per notitie, default niet zichtbaar voor FE, raar als je dan ook S("mld_flag_on_fenote") zou hebben
            //   1 FE kan reageren, alle notities zichtbaar voor FE (transparantiemodus)
            //   2 FE kan reageren, per notitie, default niet zichtbaar voor FE
            //   3 FE kan reageren, per notitie, default wel zichtbaar voor FE
            // Let op: fenotes is geen bitwise codering (meer), gewoon 0-3

            var zichtbaarFE = true; // default: zelf ingevoerd-->zichtbaar
            if (!eigenMelding)
            {   // FOBO
                zichtbaarFE = (mld_info.fenotes == 1); // Default waarden
                if (mld_info.fenotes != 1)
                {   // Afhankelijk van checkbox die door FOBO kan worden ingevuld.
                    zichtbaarFE = params.zichtFE;
                }
            }

            fields.push({ dbs: "mld_melding_note_flag", typ: "number", val: (zichtbaarFE? 1 : 0) });
            fields.push({ dbs: "mld_melding_note_key",  typ: "key", seq: "mld_s_mld_melding_note_key" });

            var noteIns = buildInsert("mld_melding_note", fields);
            var note_key = noteIns.sequences["mld_melding_note_key"];

            Oracle.Execute(noteIns.sql);

            // Tracking (MLDNOT) indien notitie zichtbaar is voor FE.
            // PF: niemand zal er over zeuren, maar ik vind het (met huidige kennis) raar om sommige notities te tracken
            //     Ik denk eigenlijk dat het putnotificationsrtprio() zou moeten zijn: notificeren zonder tracken.
            //     Als niemand bezwaar heeft: TODO.
            if (zichtbaarFE)
            {   // 'Notitie bij {0}: {1}'
                var txt = L("lcl_mld_is_mldnotetrack").format((mld_info.prefix||"") + mld_key, note);
                var txt = txt.split("\n")[0].split("\r")[0]; // Altijd alleen eerste regel
                if (txt.length > 80)
                    txt = txt.substr(0, 80);
                txt = txt + "...";
                // Door de omschrijving expliciet te prefixen met een # wordt een event niet genotificeerd
                mld.trackaddnote(mld_key, (eigenMelding || !params.notifyFE? "#" : "") + txt); // MLDNOT tracking. Notificatie naar melder afhankelijk van setting voor fac_srtnotificatie_code
            }

            if (!params.isFE && zichtbaarFE)
            {
                if (S("mld_flag_on_fenote") > 0 && params.notifyFE) // Misschien 'notificeren' naar FE
                {
                    var sql = "UPDATE mld_melding"
                            + "   SET mld_melding_flag = " + S("mld_flag_on_fenote")
                            + " WHERE mld_melding_key = " + mld_key
                            + "   AND(   (mld_melding_flag = " + S("mld_flag_on_bonote") + ")"
                            + "       OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL)"
                            + "      )";
                }
                else
                {
                    var sql = "UPDATE mld_melding"
                            + "   SET mld_melding_flag = 0"
                            + " WHERE mld_melding_key = " + mld_key
                            + "   AND mld_melding_flag = " + S("mld_flag_on_bonote");
                }
                Oracle.Execute(sql);
            }
            else if (params.isFE)
            {
                if ((S("mld_flag_on_bonote") > 0) && eigenMelding) // Misschien 'notificeren' naar BO
                {
                    var sql = "UPDATE mld_melding"
                            + "   SET mld_melding_flag = " + S("mld_flag_on_bonote")
                            + " WHERE mld_melding_key = " + mld_key
                            + "   AND(  (mld_melding_flag = " + S("mld_flag_on_fenote") + ")"
                            + "      OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL)"
                            + "      )";
                }
                else if (S("mld_flag_on_fenote") > 0) // Misschien 'notificeren' naar FE
                {
                    var sql = "UPDATE mld_melding"
                            + "   SET mld_melding_flag = " + S("mld_flag_on_fenote")
                            + " WHERE mld_melding_key = " + mld_key
                            + "   AND(   (mld_melding_flag = " + S("mld_flag_on_bonote") + ")"
                            + "       OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL)"
                            + "      )";
                }
                else
                {
                    var sql = " UPDATE mld_melding"
                            + "    SET mld_melding_flag = 0"
                            + "  WHERE mld_melding_key = " + mld_key
                            + "    AND mld_melding_flag = " + S("mld_flag_on_fenote");
                }
                Oracle.Execute(sql);
            }
        }

        // Laat de Behandelaar weten dat er iemand (anders) een notitie heeft toegevoegd of gewijzigd
        if (mld_info.behandel_key && mld_info.behandel_key != user_key)
        {
            // putnotificationsrtprio doet geen vertaling van andere vars dan ##KEY## (notify_tracking zou dat wel doen)
            // dus doen we het hier zelf maar.
            var omssql = "SELECT fac_srtnotificatie_oms"
                       + "  FROM fac_srtnotificatie"
                       + " WHERE fac_srtnotificatie_code = 'MLDNOB'";
            var oRs = Oracle.Execute(omssql);
            var oms = L(oRs("fac_srtnotificatie_oms").Value, { autolcl: true });
            oRs.Close();
            Oracle.Execute("BEGIN fac.putnotificationsrtprio("
                          + "NULL"
                          + ", "
                          + mld_info.behandel_key
                          + ", 'MLDNOB'"
                          + ", "
                          + mld_key
                          + ", mld.mldsprintf(" + safe.quoted_sql(oms) + ", " + mld_key + ")"
                          + ", NULL, NULL, NULL, NULL, 2, NULL); END;");
        }
    }
    return note_key || params.note_key;
}

function note_recently_changed(mld_key, lastdate)
{
        // Is de melding recent nog gewijzigd.
        var changedby = "";
        var sql_t = "SELECT t.fac_tracking_datum"
                  + "     , prs_perslid_naam_friendly naam"
                  + "  FROM (SELECT f.fac_tracking_datum"
                          + "     , f.prs_perslid_key"
                          + "     , f.fac_tracking_refkey mld_melding_key"
                          + "  FROM fac_tracking f"
                          + "     , fac_srtnotificatie n"
                          + " WHERE f.fac_srtnotificatie_key = n.fac_srtnotificatie_key"
                          + "   AND n.fac_srtnotificatie_xmlnode = 'melding'"
                          + " UNION "
                          + "SELECT mld_melding_note_aanmaak"
                          + "     , prs_perslid_key"
                          + "     , mld_melding_key"
                          + "  FROM mld_melding_note"
                          + ") t"
                  + "     , prs_v_perslid_fullnames_all p"
                  + " WHERE t.prs_perslid_key = p.prs_perslid_key"
                  + "   AND t.mld_melding_key = " + mld_key
                  + "   AND t.prs_perslid_key <> " + user_key
                  + "   AND t.fac_tracking_datum > " + lastdate.toSQL(true)
                  + " ORDER BY t.fac_tracking_datum DESC";
        var oRs_t = Oracle.Execute(sql_t);
        if (!oRs_t.eof)
        {
            changedby = oRs_t("naam").Value;
        }
        oRs_t.Close();
    return changedby;
}
%>