362 lines
18 KiB
C++
362 lines
18 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
|
|
|
|
*/
|
|
%>
|
|
<!-- #include file="../Shared/notes.inc" -->
|
|
<%
|
|
// params: note_key, isFE, zichtFE
|
|
function mld_note_save(mld_key, note, params) {
|
|
var mld_info = mld.mld_melding_info(mld_key);
|
|
var result = {};
|
|
|
|
lcl.set_dialect(mld_info.srtdisc_key, "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 saveNote = !params.bijlage; // In het gaval van een het toevoegen van een bijlage (alleen door de FrontEnd)
|
|
// bij notities onder water de flags/status/notitificatie doen
|
|
// alsof er een notitie was getikt door die Frontend.
|
|
|
|
var eigenMelding = user.isCollega(mld_info.melder_key);
|
|
|
|
if (note) {
|
|
params.note = note;
|
|
params.module = "MLD";
|
|
params.table = "mld_melding";
|
|
|
|
// fenotes betekenis:
|
|
// 0 FE kan niet reageren, per notitie, default niet zichtbaar voor FE
|
|
// 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 = params.has_zichtbaarFE ? params.zichtFE : true; // default: zelf ingevoerd --> zichtbaar (tenzij anders aangegeven)
|
|
if (!eigenMelding)
|
|
{ // FOBO
|
|
zichtbaarFE = (mld_info.fenotes == 1); // Default waarden
|
|
if (mld_info.fenotes != 1)
|
|
{ // Afhankelijk van checkbox die door FOBO kan worden ingevuld.
|
|
if (params.has_zichtbaarFE)
|
|
zichtbaarFE = params.zichtFE;
|
|
else if (mld_info.publiek == 1) // use default when public and no checkbox for visibility present
|
|
zichtbaarFE = mld_info.fenotes == 3;
|
|
}
|
|
}
|
|
|
|
if (params.note_key > -1) { // bestaande notitie
|
|
var sql = "SELECT mld_melding_note_flag,"
|
|
+ " mld_melding_note_aanmaak"
|
|
+ " FROM mld_melding_note"
|
|
+ " WHERE mld_melding_note_key = " + params.note_key
|
|
+ " AND mld_melding_key = " + mld_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
var oldflag = oRs("mld_melding_note_flag").Value;
|
|
var noteaanmaak = new Date(oRs("mld_melding_note_aanmaak").Value);
|
|
oRs.Close();
|
|
var newflag = (zichtbaarFE ? 1 : 0);
|
|
|
|
newflag |= (oldflag & 64); // Bij edit de 'ismailnote' bit behouden
|
|
|
|
params.flag = newflag;
|
|
} else { // nieuwe notitie
|
|
var newflag = (zichtbaarFE ? 1 : 0) + (params.ismailnote ? 64 : 0);
|
|
|
|
params.flag = newflag;
|
|
}
|
|
|
|
if (saveNote) {
|
|
// Hier het daadwerkelijke opslaan van de notitie
|
|
// In het gaval van een bijlage wordt er niets opgeslagen.
|
|
var note_key = notes.note_save(mld_key, params);
|
|
}
|
|
|
|
if (params.note_key > -1) { // bestaande notitie
|
|
if (!zichtbaarFE && oldflag & 1) // Proberen MLDNOT notificatie terug te trekken. Geen garanties
|
|
{ // Merk op dat de volgorde notitie1 maken (zichtbaar),
|
|
// notitie2 maken (zichtbaar),
|
|
// notitie2 bewerken (onzichtbaarbaar maken)
|
|
// ingewikkeld is. Daarom de check op fac_notificatie_datum. Niet 100% maar goed genoeg.
|
|
var sql = "DELETE FROM fac_notificatie"
|
|
+ " WHERE fac_srtnotificatie_key = "
|
|
+ " (SELECT fac_srtnotificatie_key"
|
|
+ " FROM fac_srtnotificatie"
|
|
+ " WHERE fac_srtnotificatie_code = 'MLDNOT')"
|
|
+ " AND fac_notificatie_datum >= " + noteaanmaak.toSQL(true)
|
|
+ " AND fac_notificatie_refkey = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
}
|
|
} else { // Nieuwe '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 + "...";
|
|
var sender = getNotiSenderEmail(mld_key);
|
|
if (mfe.haveOnlyFErights) // Frontend gebruiker
|
|
{
|
|
if (eigenMelding && mld_info.mld_status != 5 &&
|
|
((params.action2BO && !(mld_info.actiecode & 1)) || // BO had de actie nog niet
|
|
(!params.has_action2BO && mld_info.actiecode & 1 && !(mld_info.actiecode & 128) ) // BO had de actie wel, maar de attentie nog niet
|
|
)
|
|
)
|
|
{
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = 1 + 128" // + actionBO + attentieBO (evt. - attentieFE)
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
shared.trackaction("MLDA2B", mld_key);
|
|
result.mustrefreshMLD = true;
|
|
} else if (mld_info.actiecode & 256) {
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = mld_melding_actiecode - 256" // - attentieFE
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
}
|
|
} else { // FOBO medewerker
|
|
if ((mld_info.actiecode & 128) == 128) { // Altijd attentie er af, *ik* heb hem blijkbaar gezien
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = BITAND(mld_melding_actiecode, 511 - 128)"
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
mld_info.actiecode &= ~128; // - attentieBO
|
|
result.mustrefreshMLD = true;
|
|
}
|
|
|
|
if (zichtbaarFE && params.notifyFE) {
|
|
// Notificatie (MLDNOT) indien notitie zichtbaar is voor FE.
|
|
// (tracking ervan is overkill: de notitie zelf is eigenlijk tracking)
|
|
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
|
+ "NULL"
|
|
+ ", " + mld_info.melder_key
|
|
+ ", 'MLDNOT'"
|
|
+ ", " + mld_key
|
|
+ ", " + safe.quoted_sql(txt)
|
|
+ ", NULL, NULL, NULL, NULL, 2, " + safe.quoted_sql(sender) + "); END;");
|
|
}
|
|
|
|
if (zichtbaarFE && mld_info.haschild && params.notifyFEchild) {
|
|
var sql = "SELECT mld_melding_key"
|
|
+ " , prs_perslid_key"
|
|
+ " FROM mld_melding"
|
|
+ " WHERE mld_melding_parentkey = " + mld_key;
|
|
var oRs = Oracle.Execute(sql);
|
|
while (!oRs.eof) {
|
|
var mld_child_key = oRs("mld_melding_key").Value;
|
|
var prs_child_key = oRs("prs_perslid_key").Value;
|
|
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
|
+ "NULL"
|
|
+ ", " + prs_child_key
|
|
+ ", 'MLDNOT'"
|
|
+ ", " + mld_child_key
|
|
+ ", " + safe.quoted_sql(txt)
|
|
+ ", NULL, NULL, NULL, NULL, 2, " + safe.quoted_sql(sender) + "); END;");
|
|
oRs.MoveNext();
|
|
}
|
|
oRs.Close();
|
|
}
|
|
|
|
if (zichtbaarFE && mld_info.canholdthirdparty && mld_info.email_ext && params.notifyExt) {
|
|
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
|
+ "NULL"
|
|
+ ", NULL"
|
|
+ ", 'MLDNOT'"
|
|
+ ", " + mld_key
|
|
+ ", " + safe.quoted_sql(txt)
|
|
+ ", 2, " + safe.quoted_sql(mld_info.email_ext) + ", NULL, NULL, 2, " + safe.quoted_sql(sender) + "); END;");
|
|
}
|
|
|
|
if (params.action2BO && !(mld_info.actiecode & 1)) { // action2BO
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = 1" // Actie nu bij BO. Zelf gedaan dus geen attentie
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
shared.trackaction("MLDA2B", mld_key);
|
|
result.mustrefreshMLD = true;
|
|
} else if ( params.notifyFE // notifyFE
|
|
|| S("mld_note_hidden_action2FE") && params.action2FE && !(mld_info.actiecode & 2)) { // action2FE
|
|
var mldActiecode = mld_info.actiecode | 256; // Huidige actiecode + attentieFE
|
|
if (params.action2FE && !(mld_info.actiecode & 2)) { // action2FE
|
|
mldActiecode &= ~3; // - action2BO/FE
|
|
mldActiecode |= 2; // + action2FE
|
|
shared.trackaction("MLDA2M", mld_key);
|
|
}
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = " + mldActiecode
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
result.mustrefreshMLD = true;
|
|
}
|
|
}
|
|
|
|
// Controleren of er ook naar het gebouw een mailtje gestuurd moet worden.
|
|
// Normaal gesproken gaat dit automatisch als het getrackt wordt. Maar hier wordt geen tracking gedaan. De notitie is de tracking.
|
|
// LET OP: Code komt uit de FAC_PAC.SRC package PROCEDURE notifytracking aan het einde van de lxmlnode "melding".
|
|
var sql_sng = "SELECT fac_srtnotificatie_gebouw"
|
|
+ " FROM fac_srtnotificatie"
|
|
+ " WHERE fac_srtnotificatie_code = 'MLDNOT'";
|
|
var oRs = Oracle.Execute(sql_sng);
|
|
var srtnotigebouw = oRs("fac_srtnotificatie_gebouw").Value;
|
|
oRs.Close();
|
|
|
|
var sql_ogk = "SELECT mld_alg_onroerendgoed_keys"
|
|
+ " FROM mld_melding"
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
var oRs = Oracle.Execute(sql_ogk);
|
|
var algonrgoedkey = oRs("mld_alg_onroerendgoed_keys").Value || -1;
|
|
oRs.Close();
|
|
|
|
if (srtnotigebouw == 1 && algonrgoedkey > 0 && zichtbaarFE) { // Stuur een notificatie naar het e-mail adres van het gebouw
|
|
var sql_ge = "SELECT g.alg_gebouw_email"
|
|
+ " FROM alg_v_allonroerendgoed aog"
|
|
+ " , alg_gebouw g"
|
|
+ " WHERE aog.alg_gebouw_key = g.alg_gebouw_key"
|
|
+ " AND aog.alg_onroerendgoed_keys = " + algonrgoedkey;
|
|
var oRs = Oracle.Execute(sql_ge);
|
|
var gebouwemail = oRs("alg_gebouw_email").Value;
|
|
oRs.Close();
|
|
|
|
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
|
+ "NULL"
|
|
+ ", NULL"
|
|
+ ", 'MLDNOT'"
|
|
+ ", " + mld_key
|
|
+ ", " + safe.quoted_sql(txt)
|
|
+ ", NULL"
|
|
+ ", " + safe.quoted_sql(gebouwemail)
|
|
+ ", NULL, NULL, 2, " + safe.quoted_sql(sender) + "); END;");
|
|
}
|
|
}
|
|
|
|
mld.lock(mld_key); // Voor zowel nieuwe als bestaande notitie de lock zetten als de notitie bewaard wordt
|
|
|
|
if (mld_info.nobnotify && params.note_key == -1) {
|
|
// De meest specifieke behandelaar nog een echte notificatie sturen bij nieuwe notitie
|
|
// naar jezelf hoeft dat niet.
|
|
var behandelaar_key = -1;
|
|
if (mld_info.behandel2_key > 0) {
|
|
if (mld_info.behandel2_key != user_key) {
|
|
behandelaar_key = mld_info.behandel2_key;
|
|
}
|
|
} else if (mld_info.behandel_key > 0 && mld_info.behandel_key != user_key) {
|
|
behandelaar_key = mld_info.behandel_key;
|
|
}
|
|
|
|
// Laat de Behandelaar weten dat er iemand (anders) een notitie heeft toegevoegd of gewijzigd
|
|
// only notify with a new note
|
|
if (behandelaar_key > 0) {
|
|
// 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();
|
|
var sender = getNotiSenderEmail(mld_key);
|
|
Oracle.Execute("BEGIN fac.putnotificationsrtprio("
|
|
+ (saveNote? "NULL" : user_key)
|
|
+ ", " + behandelaar_key
|
|
+ ", " + (saveNote? "'MLDNOB'" : "'MLDUPD'")
|
|
+ ", " + mld_key
|
|
+ ", mld.mldsprintf(" + safe.quoted_sql(saveNote? oms : params.note) + ", " + mld_key + ")"
|
|
+ ", NULL, NULL, NULL, NULL, 2, " + safe.quoted_sql(sender) + "); END;");
|
|
}
|
|
}
|
|
|
|
if (S("mld_rejected_is_open") && mld_info.mld_status == 1) {
|
|
// Aanpassen van een afgewezen melding werpt die weer opnieuw de molen in.
|
|
mld.setmeldingstatus(mld_key, 2);
|
|
result.mustrefreshMLD = true;
|
|
result.verynewnote = true;
|
|
}
|
|
|
|
if (eigenMelding && ((mld_info.actiecode & 256) == 256) && mld_info.mld_status == 5)
|
|
{ // De attentie van de FE er afhalen en de attentie op de FO/BO zetten.
|
|
var mldActiecode = mld_info.actiecode;
|
|
// Als de melder gereageerd heeft op de Attentie, dan deze er weer afhalen. Ook als de melder niet akkoord is.
|
|
mldActiecode -= 256; // - attentieFE (256).
|
|
|
|
if (params.has_assume_not_ok && params.assume_not_ok)
|
|
{ // Melder niet akkoord, dan de actiecodeFO/BO zetten.
|
|
mldActiecode |= 128; // + attentieFOBO (128).
|
|
}
|
|
|
|
var sql = "UPDATE mld_melding"
|
|
+ " SET mld_melding_actiecode = " + mldActiecode
|
|
+ " WHERE mld_melding_key = " + mld_key;
|
|
Oracle.Execute(sql);
|
|
}
|
|
}
|
|
|
|
result.mld_key = mld_key;
|
|
result.note_key = note_key || params.note_key;
|
|
result.canAccept = mfe.canAccept;
|
|
|
|
return result;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
function getNotiSenderEmail(mldkey) { // Deze functie volgt dezelfde logica als fac.notifytracking wat betreft het ophalen van het afzend emailadres
|
|
var sql = "SELECT COALESCE (d.ins_discipline_email,"
|
|
+ " l1.alg_locatie_email,"
|
|
+ " l2.alg_locatie_email)"
|
|
+ " sender"
|
|
+ " FROM mld_melding m,"
|
|
+ " mld_stdmelding stdm,"
|
|
+ " ins_tab_discipline d,"
|
|
+ " mld_adres ma,"
|
|
+ " alg_locatie l1,"
|
|
+ " alg_locatie l2"
|
|
+ " WHERE stdm.mld_stdmelding_key = m.mld_stdmelding_key"
|
|
+ " AND d.ins_discipline_key = stdm.mld_ins_discipline_key"
|
|
+ " AND m.mld_adres_key = ma.mld_adres_key(+)"
|
|
+ " AND ma.alg_locatie_key = l1.alg_locatie_key(+)"
|
|
+ " AND m.mld_alg_locatie_key = l2.alg_locatie_key(+)"
|
|
+ " AND m.mld_melding_key = " + mldkey;
|
|
var oRs = Oracle.Execute(sql);
|
|
var sender = oRs("sender").Value;
|
|
oRs.Close();
|
|
return sender;
|
|
}
|
|
|
|
%> |