Files
Facilitor/APPL/MLD/mld_edit_note.inc
Erik Groener ca7b7d2e76 PCHD#35087 Waarschuwing bij gelijktijdig editen notities
svn path=/Website/trunk/; revision=29624
2016-06-02 08:40:29 +00:00

188 lines
9.0 KiB
C++

<% /*
$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 is afhankelijk van de discipline (vakgroep) en geeft aan of FE notities mag zien.
// 00 (0) Notitie is default niet zichtbaar voor FE (&1 == 0)
// 01 (1) Notitie is default wel zichtbaar voor FE (&1 == 1)
// 10 (2) Door FOBO te kiezen (per notitie) of FE notitie mag zien. Default waarde volgens &1 is niet zien (&2 == 1 en &1 == 0)
// 11 (3) Door FOBO te kiezen (per notitie) of FE notitie mag zien. Default waarde volgens &1 is wel zien (&2 == 1 en &1 == 1)
var zichtbaarFE = true; // default: zelf ingevoerd-->zichtbaar
if (!eigenMelding)
{ // FOBO
zichtbaarFE = (mld_info.fenotes & 1); // Default waarden
if (mld_info.fenotes & 2 || (S("mld_note_mode") == 2 && mld_info.fenotes == 0))
{ // 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? "#" : "") + txt); // MLDNOT tracking. Notificatie naar melder afhankelijk van setting voor fac_srtnotificatie_code
}
if (!params.isFE && zichtbaarFE)
{
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_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 = oRs("fac_srtnotificatie_oms").Value;
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"
+ " , " + S("prs_pers_string") + " 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_perslid 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;
}
%>