Files
Facilitor/APPL/MLD/mld_edit_bord_save.asp
Jos Groot Lipman cd60d99ee3 Merge 2025.2 Gold D patches
svn path=/Website/trunk/; revision=70450
2025-09-29 15:04:28 +00:00

354 lines
18 KiB
Plaintext

<%@ language = "JavaScript" %>
<% /*
$Revision$
$Id$
File: mld_edit_bord_save.asp
Description: Past de melding aan
Parameters:
mld_key De melding
type -2: Primaire behandelaar
-3: Behandelteam
-4: Actieve behandelaar
>0: Kenmerk
new_key update naar deze key
Context:
Note:
*/ %>
<%
var JSON_Result = true;
%>
<!-- #include file="../Shared/common.inc" -->
<!-- #include file="../Shared/save2db.inc" -->
<!-- #include file="mld.inc" -->
<!-- #include file="../Shared/Suggest/persoonFilter.inc" -->
<%
protectRequest.validateToken();
var mld_key_arr = getFParamKeyArray("mld_key");
var type = getFParamInt("type");
if (type > 0) {
var kenmerk_omschrijving = getFParam("type_descr", "");
}
var from_key = getFParamInt("from_key", -1);
var to_key = getFParamInt("to_key", -1);
var result = {
success: true
};
// Geeft wat relevante informatie terug
function mld_bord_info(mld_key) {
var sql = "SELECT m.prs_perslid_key"
+ " , COALESCE(m.mld_alg_locatie_key, -1) alg_locatie_key"
+ " , m.mld_melding_behandelaar_key"
+ " , m.mld_melding_behandelaar2_key"
+ " , m.mld_melding_status"
+ " , m.mld_ins_discipline_key"
+ " , s.mld_ins_discipline_key stdm_ins_discipline_key"
+ " , dp.mld_disc_params_srtgroep"
+ " , dp.mld_disc_params_primairbeh"
+ " FROM mld_melding m"
+ " , mld_stdmelding s"
+ " , ins_tab_discipline d"
+ " , mld_disc_params dp"
+ " WHERE m.mld_melding_key = " + mld_key
+ " AND m.mld_stdmelding_key = s.mld_stdmelding_key"
+ " AND s.mld_ins_discipline_key = d.ins_discipline_key"
+ " AND d.ins_discipline_key = dp.mld_ins_discipline_key";
var oRs = Oracle.Execute(sql);
var result = {
prs_key: oRs("prs_perslid_key").Value,
loc_key: oRs("alg_locatie_key").Value,
behandel_key: oRs("mld_melding_behandelaar_key").Value,
behandel2_key: oRs("mld_melding_behandelaar2_key").Value || -1,
mld_status: oRs("mld_melding_status").Value,
disc_key: oRs("stdm_ins_discipline_key").Value,
mld_ins_discipline_key: oRs("mld_ins_discipline_key").Value,
srtgroep: oRs("mld_disc_params_srtgroep").Value,
primaire_behandelaar: oRs("mld_disc_params_primairbeh").Value
};
oRs.Close();
return result;
}
for (var i = 0; i < mld_key_arr.length; i++) {
var this_mld = mld.func_enabled_melding(mld_key_arr[i]); // Wat heb ik zoal aan rechten op deze specifieke melding
user.auth_required_or_abort(this_mld.canChange);
if (from_key != to_key) { // Zou niet voor moeten komen
if (type > 0) { // Kenmerk
var srtkenmerk_key = type;
var sql_k = "SELECT k.mld_kenmerk_key"
+ " , k.mld_kenmerk_verplicht"
+ " , sk.fac_kenmerkdomein_key"
+ " FROM mld_melding m"
+ " JOIN mld_stdmelding sm ON m.mld_stdmelding_key = sm.mld_stdmelding_key"
+ " JOIN ins_tab_discipline d"
+ " ON sm.mld_ins_discipline_key = d.ins_discipline_key"
+ " JOIN mld_kenmerk k"
+ " ON ( k.mld_kenmerk_niveau = 'A'"
+ " OR ( k.mld_kenmerk_niveau = 'S'"
+ " AND k.mld_stdmelding_key = sm.mld_stdmelding_key)"
+ " OR ( k.mld_kenmerk_niveau = 'D'"
+ " AND k.mld_stdmelding_key = sm.mld_ins_discipline_key)"
+ " OR ( k.mld_kenmerk_niveau = 'T'"
+ " AND k.mld_stdmelding_key = d.ins_srtdiscipline_key))"
+ " JOIN mld_srtkenmerk sk ON k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key"
+ " WHERE m.mld_melding_key = " + mld_key_arr[i]
+ " AND k.mld_srtkenmerk_key = " + srtkenmerk_key
+ " AND COALESCE(k.mld_kenmerk_omschrijving, sk.mld_srtkenmerk_omschrijving) = " + safe.quoted_sql(kenmerk_omschrijving)
+ " AND k.mld_kenmerk_verwijder IS NULL";
var oRs_k = Oracle.Execute(sql_k);
var kenmerk_key = oRs_k("mld_kenmerk_key").Value;
var verplicht = oRs_k("mld_kenmerk_verplicht").Value == 1;
var domein_key = oRs_k("fac_kenmerkdomein_key").Value;
oRs_k.Close();
// Check of de toegewezen waarde niet vervallen is
if (to_key > -1) {
var sql = "SELECT fac_kenmerkdomein_objectnaam"
+ " , fac_kenmerkdomein_kolomnaam"
+ " , fac_kenmerkdomein_kolomtxt"
+ " , fac_kenmerkdomein_xmlnode"
+ " , fac_kenmerkdomein_verval"
+ " , fac_usrtab_key"
+ " FROM fac_kenmerkdomein"
+ " WHERE fac_kenmerkdomein_key = " + domein_key;
var oRs = Oracle.Execute(sql);
var objectnaam = oRs("fac_kenmerkdomein_objectnaam").Value;
var usrtab_key = oRs("fac_usrtab_key").Value;
var vervalkolom = oRs("fac_kenmerkdomein_verval").Value;
oRs.Close();
var vervallen;
if (objectnaam === "FAC_USRDATA") {
sql = "SELECT 'dummy'"
+ " FROM fac_usrdata"
+ " WHERE fac_usrtab_key = " + usrtab_key
+ " AND fac_usrdata_key = " + to_key
+ " AND (fac_usrdata_vervaldatum IS NULL OR fac_usrdata_vervaldatum > SYSDATE)"
+ " AND fac_usrdata_verwijder IS NULL";
oRs = Oracle.Execute(sql);
vervallen = oRs.EOF;
oRs.Close();
} else if (vervalkolom !== null) { // Anders hoeven we niet te checken op een vervaldatum ..
sql = "SELECT 'dummy'"
+ " FROM " + objectnaam
+ " WHERE " + oRs("fac_kenmerkdomein_kolomnaam").Value + " = " + to_key
+ " AND (" + vervalkolom + " IS NULL OR " + vervalkolom + " > SYSDATE)";
oRs = Oracle.Execute(sql);
vervallen = oRs.EOF;
oRs.Close();
}
if (vervallen) {
abort_with_warning(L("lcl_mld_error_kenmerk_value_invalid"));
}
}
if (from_key === -1) { // Dan was deze leeg, dus: INSERT
var sql = "INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)"
+ " VALUES (" + mld_key_arr[i] + ", " + kenmerk_key + ", " + to_key + ")";
} else if (to_key === -1) { // Dan wordt deze leeg, dus: DELETE
if (verplicht) {
abort_with_warning(L("lcl_mld_error_kenmerk_required"));
}
var sql = "DELETE FROM mld_kenmerkmelding"
+ " WHERE mld_melding_key = " + mld_key_arr[i]
+ " AND mld_kenmerk_key = " + kenmerk_key
+ " AND mld_kenmerkmelding_waarde = " + from_key;
} else { // Anders is het een UPDATE
var sql = "UPDATE mld_kenmerkmelding"
+ " SET mld_kenmerkmelding_waarde = " + to_key
+ " WHERE mld_melding_key = " + mld_key_arr[i]
+ " AND mld_kenmerk_key = " + kenmerk_key;
}
Oracle.Execute(sql);
var vold = "";
var vnew = "";
// Onderstaande uit kenmerk_common;
var sql_track = "SELECT COALESCE (" + lcl.xsql("k.mld_kenmerk_omschrijving", "k.mld_kenmerk_key")
+ " , " + lcl.xsql("sk.mld_srtkenmerk_omschrijving", "sk.mld_srtkenmerk_key") + ") kenmerk_omschrijving"
+ " , sk.fac_kenmerkdomein_key"
+ " , mld_srtkenmerk_systeem"
+ " kenmerk_systeem"
+ " FROM mld_kenmerk k, mld_srtkenmerk sk"
+ " WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key"
+ " AND k.mld_kenmerk_key = " + kenmerk_key;
var oRsk = Oracle.Execute(sql_track);
var label = oRsk("kenmerk_omschrijving").Value;
var kdomein_key = oRsk("fac_kenmerkdomein_key").Value;
var confidential = oRsk("kenmerk_systeem").Value & 4;
oRsk.Close();
if (confidential) {
vold = vnew = L("lcl_confidential_mask");
} else {
if (from_key > 0) {
var oRsd = Oracle.Execute("SELECT fac.getdomeinwaarde(" + kdomein_key + ", " + from_key + ") domeinwaarde FROM DUAL");
vold = oRsd("domeinwaarde").Value;
oRsd.Close();
}
if (to_key > 0) {
var oRsd = Oracle.Execute("SELECT fac.getdomeinwaarde(" + kdomein_key + ", " + to_key + ") domeinwaarde FROM DUAL");
vnew = oRsd("domeinwaarde").Value;
oRsd.Close();
}
}
var trackingStr = label + ": " + buildTrackText("varchar", vold, vnew, { nodiff: true });
shared.trackaction("MLDUPD", mld_key_arr[i], trackingStr);
} else {
if (type === -2) { // Primaire Behandelaar
// Kijk of ik van deze melding de afhandeling (en dus de primaire behandelaar) wel mag aanpassen;
if (!this_mld.canAfhandChange) {
abort_with_warning(L("lcl_no_auth"));
}
// Kijk of ik deze behandelaar wel mag kiezen bij deze melding;
var mld_bord_info = mld_bord_info(mld_key_arr[i]);
if (to_key > 0) { // Vullen / aanpassen
if (mld_bord_info.primaire_behandelaar == 0) { // Dit zou niet moeten voorkomen
abort_with_warning(L("lcl_no_auth"));
}
var filtClause = getFiltClausePersoon(mld_bord_info.mld_status == 0 ? "BEHF" : "BEHB", mld_bord_info);
var sql_prs = "SELECT 'dummy'"
+ " FROM prs_perslid p"
+ " , prs_v_afdeling_boom d"
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ filtClause
+ " AND p.prs_perslid_key = " + to_key;
var oRs_prs = Oracle.Execute(sql_prs);
var valid = !oRs_prs.EOF;
oRs_prs.Close();
if (!valid) {
abort_with_warning(L("lcl_forward_error_processor"));
}
} else { // Leegmaken
if (mld_bord_info.primaire_behandelaar == 2) { // Hij is verplicht, dus leegmaken mag niet
abort_with_warning(L("lcl_mld_error_backoffice_required"));
}
}
// Alle checks doorstaan, updaten maar
var sql = "UPDATE mld_melding"
+ " SET mld_melding_behandelaar_key = " + (to_key === -1 ? "NULL" : to_key)
+ " WHERE mld_melding_key = " + mld_key_arr[i];
Oracle.Execute(sql);
// Tracking + notificatie
mld.trackbehandelaar(mld_key_arr[i], to_key, to_key === user_key);
} else if (type === -3) { // Behandelteam
// Controleer de soort vakgroep
var mld_bord_info = mld_bord_info(mld_key_arr[i]);
if (to_key > 0 && !(mld_bord_info.srtgroep & 5)) {
abort_with_warning(L("lcl_forward_error_team")); // 'Dit behandelteam behandelt dit soort meldingen niet'
}
// Controleer de vakgroep<>behandelteams restricties
var valid = false;
sql_vak = "SELECT mld_discipline_key2"
+ " FROM mld_discipline_discipline"
+ " WHERE mld_discipline_key1 = " + mld_bord_info.disc_key;
oRs_vak = Oracle.Execute(sql_vak);
if (!oRs_vak.EOF) { // Er geldt een beperking; ga kijken of het nieuwe team wordt toegestaan
while (!oRs_vak.EOF && !valid) {
valid = to_key == oRs_vak("mld_discipline_key2").Value;
oRs_vak.MoveNext();
}
oRs_vak.Close();
if (!valid) {
abort_with_warning(L("lcl_forward_error_team")); // 'Dit behandelteam behandelt dit soort meldingen niet'
}
} else { /* Geen beperking, geen probleem */ }
var new_behandel2_key = mld_bord_info.behandel2_key;
if (to_key === -1) {
new_behandel2_key = -1;
} else if (to_key > 0 && mld_bord_info.behandel2_key > 0) {
// Check dan of de oude actieve behandelaar nog compatible is met het nieuwe team (en maak deze anders leeg)
var prsFiltParams = {
disc_key: to_key, // Dit moet hier het nieuwe behandelteam zijn
prs_key: mld_bord_info.prs_key,
loc_key: mld_bord_info.loc_key
}
var filtClause = getFiltClausePersoon(mld_bord_info.mld_status == 0 ? "BH2F" : "BH2B", prsFiltParams);
var sql_prs = "SELECT 'dummy'"
+ " FROM prs_perslid p"
+ " , prs_v_afdeling_boom d"
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ filtClause
+ " AND p.prs_perslid_key = " + mld_bord_info.behandel2_key;
var oRs_prs = Oracle.Execute(sql_prs);
var valid = !oRs_prs.EOF;
oRs_prs.Close();
if (!valid) {
new_behandel2_key = -1;
}
}
// Alle checks doorstaan, updaten maar
var sql = "UPDATE mld_melding"
+ " SET mld_ins_discipline_key = " + (to_key === -1 ? "NULL" : to_key)
+ (new_behandel2_key === -1
? " , mld_melding_behandelaar2_key = NULL" // Actieve behandelaar ook leegmaken dan
: "")
+ " WHERE mld_melding_key = " + mld_key_arr[i];
Oracle.Execute(sql);
// Tracking + notificatie
mld.trackAndNotifyBehandelteam(mld_key_arr[i], to_key);
if (mld_bord_info.behandel2_key !== new_behandel2_key) { // old != new
mld.trackbehandelaar2(mld_key_arr[i], new_behandel2_key);
}
} else if (type === -4) { // Actieve behandelaar
// Kijk of ik deze actieve behandelaar wel mag kiezen bij deze melding;
if (to_key > 0) { // Leegmaken mag altijd
var mld_bord_info = mld_bord_info(mld_key_arr[i]);
var prsFiltParams = {
disc_key: mld_bord_info.mld_ins_discipline_key, // Dit moet hier de behandelteam_key zijn
prs_key: mld_bord_info.prs_key,
loc_key: mld_bord_info.loc_key
}
var filtClause = getFiltClausePersoon(mld_bord_info.mld_status == 0 ? "BH2F" : "BH2B", prsFiltParams);
var sql_prs = "SELECT 'dummy'"
+ " FROM prs_perslid p"
+ " , prs_v_afdeling_boom d"
+ " WHERE p.prs_afdeling_key = d.prs_afdeling_key"
+ filtClause
+ " AND p.prs_perslid_key = " + to_key;
var oRs_prs = Oracle.Execute(sql_prs);
var valid = !oRs_prs.EOF;
oRs_prs.Close();
if (!valid) {
abort_with_warning(L("lcl_forward_error_processor")); // 'Deze persoon mag deze melding niet behandelen'
}
}
// Alle checks doorstaan, updaten maar
var sql = "UPDATE mld_melding"
+ " SET mld_melding_behandelaar2_key = " + (to_key === -1 ? "NULL" : to_key)
+ " WHERE mld_melding_key = " + mld_key_arr[i];
Oracle.Execute(sql);
// Tracking + notificatie
mld.trackbehandelaar2(mld_key_arr[i], to_key, to_key === user_key);
}
}
}
}
if (result.success) {
result.toaster = L("lcl_mld_is_mldupd");
}
Response.Write(JSON.stringify(result));
%>
<% ASPPAGE_END(); %>