354 lines
18 KiB
Plaintext
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(); %>
|