TDNL#89081 Automatische storingsmelding per object naar juiste leverancier regelen

svn path=/Website/trunk/; revision=70619
This commit is contained in:
Erik Groener
2025-10-15 12:44:22 +00:00
parent 968b796e26
commit c8730e0c10
4 changed files with 91 additions and 32 deletions

View File

@@ -7017,7 +7017,7 @@ mld = {
oRs.close();
},
dienst_controle: function (stdm_key, locatiekey, gebouwkey, ruimtekey, prs_key_voor, check_autoorder)
dienst_controle: function (stdm_key, locatiekey, gebouwkey, ruimtekey, obj_key_arr, prs_key_voor, check_autoorder)
{
var sql;
sql = "SELECT ms.mld_stdmelding_vereisdienst"
@@ -7064,7 +7064,12 @@ mld = {
else if (locatiekey > 0) // <20>berhaupt plaatsgegevens?
sql += " AND (bdl.alg_locatie_key = " + locatiekey + " OR bdl.alg_locatie_key IS NULL)";
oRs = Oracle.Execute(sql);
if (vereisdienst && oRs("aantal").Value == 0)
var bedrijf_aantal = oRs("aantal").Value;
var min_bedrijf_key = oRs("prs_bedrijf_key").Value;
var has_autoorder = oRs("autoorder").Value;
oRs.Close();
if (vereisdienst && bedrijf_aantal == 0)
{ // Er is geen enkele dienst gevonden.
err_msg = (check_autoorder ? L("lcl_mld_dienst_noautoorder") : "")
+ L("lcl_mld_dienstunavailablehere") + prs_dienst_desc;
@@ -7072,42 +7077,83 @@ mld = {
}
else if (check_autoorder)
{
if (oRs("autoorder").Value == 1)
if (has_autoorder == 1)
{ // Er is tenminste <20><>n autoorder waarde gevonden die niet is uitgesloten van automatische opdracht.
// De niet uitgesloten ophalen.
sql += " AND bdl.mld_autoorder = 1" // 0=Uitsluiten van automatische opdracht (vinkje AAN), 1=Autoorder van stdmelding gebruiken (vinkje UIT).
oRs2 = Oracle.Execute(sql);
if (oRs2("aantal").Value == 1)
var bedrijf_aantal2 = oRs2("aantal").Value;
var min_bedrijf_key2 = oRs2("prs_bedrijf_key").Value;
oRs2.Close();
if (bedrijf_aantal2 == 1)
{ // Bedrijf ophalen uit relatiebeheer.
prs_bedrijf_key = oRs2("prs_bedrijf_key").Value; // straks mogelijk vanzelf opdracht.
prs_bedrijf_key = min_bedrijf_key2; // straks mogelijk vanzelf opdracht.
}
else
{ // Bedrijf ophalen uit contractbeheer.
// Zoekt naar de best passende plaats: Als er een ruimtekey wordt meegegeven maar daarvoor bestaat geen cnt_contract_plaats
// dan wordt er gekeken of er wel een contract_plaats voor gebouw of locatie voor deze ruimte bestaat.
var sql_p = " SELECT c.cnt_prs_bedrijf_key"
+ " , c.cnt_contract_key"
+ " , CASE cp.cnt_alg_plaats_code"
+ " WHEN 'R' THEN 5"
+ " WHEN 'V' THEN 4"
+ " WHEN 'G' THEN 3"
+ " WHEN 'T' THEN 2"
+ " ELSE 1"
+ " END prio"
+ " FROM cnt_contract c"
+ " , cnt_disc_params cd"
+ " , cnt_contract_plaats cp"
+ " WHERE c.ins_discipline_key = cd.cnt_ins_discipline_key"
+ " AND c.cnt_contract_verwijder IS NULL"
+ " AND c.cnt_contract_status != 1" // niet inactief
+ " AND SYSDATE BETWEEN c.cnt_contract_looptijd_van"
+ " AND c.cnt_contract_looptijd_tot"
+ " AND c.prs_dienst_key = " + prs_dienst_key
+ " AND cd.cnt_srtcontract_type IN (3,5)"
+ " AND c.cnt_contract_key = cp.cnt_contract_key"
+ " AND (" + (locatiekey > 0 ? " (cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = " + locatiekey + ")" : "(1=1)")
+ " " + (gebouwkey > 0 ? "OR (cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key = " + gebouwkey + ")" : "")
+ " " + (ruimtekey > 0 ? "OR (cp.cnt_alg_plaats_code = 'R' AND cp.cnt_alg_plaats_key = " + ruimtekey + ")" : "")
+ " )";
var sql_o = " SELECT c.cnt_prs_bedrijf_key"
+ " , c.cnt_contract_key"
+ " , CASE WHEN co.cnt_ins_deel_key IS NULL"
+ " THEN 6"
+ " ELSE 7"
+ " END prio"
+ " FROM cnt_contract c"
+ " , cnt_disc_params cd"
+ " , cnt_contract_object co"
+ " WHERE c.ins_discipline_key = cd.cnt_ins_discipline_key"
+ " AND c.cnt_contract_verwijder IS NULL"
+ " AND c.cnt_contract_status != 1" // niet inactief
+ " AND SYSDATE BETWEEN c.cnt_contract_looptijd_van"
+ " AND c.cnt_contract_looptijd_tot"
+ " AND c.prs_dienst_key = " + prs_dienst_key
+ " AND cd.cnt_srtcontract_type IN (1,3)"
+ " AND c.cnt_contract_key = co.cnt_contract_key"
+ " AND ( ( co.cnt_ins_deel_key IS NOT NULL"
+ " AND co.cnt_ins_deel_key IN (" + obj_key_arr.join(",") + ")"
+ " )"
+ " OR ( co.cnt_ins_deel_key IS NULL"
+ " AND co.cnt_ins_srtdeel_key IN"
+ " (SELECT i.ins_srtdeel_key"
+ " FROM ins_deel i"
+ " WHERE i.ins_deel_key IN (" + obj_key_arr.join(",") + ")"
+ " )"
+ " )"
+ " )";
var sql_c = "SELECT cnt_prs_bedrijf_key"
+ " , cnt_contract_key"
+ " , prio"
+ " , COUNT(DISTINCT cnt_prs_bedrijf_key) aantal"
+ " FROM (SELECT c.cnt_prs_bedrijf_key"
+ " , c.cnt_contract_key"
+ " , CASE cp.cnt_alg_plaats_code WHEN 'R' THEN 3 WHEN 'G' THEN 2 ELSE 1 END prio"
+ " FROM cnt_contract c"
+ " , cnt_contract_plaats cp"
+ " , cnt_disc_params cd"
+ " WHERE cd.cnt_ins_discipline_key = c.ins_discipline_key"
+ " AND SYSDATE BETWEEN c.cnt_contract_looptijd_van"
+ " AND c.cnt_contract_looptijd_tot"
+ " AND c.cnt_contract_verwijder IS NULL"
+ " AND c.cnt_contract_status != 1" // niet inactief
+ " AND cd.cnt_srtcontract_type IN (3,5)"
+ " AND c.prs_dienst_key = " + prs_dienst_key
+ " AND c.cnt_contract_key = cp.cnt_contract_key"
+ " AND (" + (locatiekey > 0 ? " (cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = " + locatiekey + ")" : "(1=1)")
+ " " + (gebouwkey > 0 ? "OR (cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key = " + gebouwkey + ")" : "")
+ " " + (ruimtekey > 0 ? "OR (cp.cnt_alg_plaats_code = 'R' AND cp.cnt_alg_plaats_key = " + ruimtekey + ")" : "")
+ " )"
+ " )"
+ " FROM (" + sql_p
+ (obj_key_arr.length ? " UNION " + sql_o : "")
+ " )"
+ " GROUP BY cnt_prs_bedrijf_key, cnt_contract_key, prio"
+ " ORDER BY prio DESC"
+ " FETCH FIRST 1 ROW ONLY";
@@ -7118,7 +7164,6 @@ mld = {
}
oRs_c.Close();
}
oRs2.Close();
}
else
{
@@ -7126,11 +7171,10 @@ mld = {
prs_bedrijf_key = -2;
}
}
else if (oRs("aantal").Value == 1)
else if (bedrijf_aantal == 1)
{
prs_bedrijf_key = oRs("prs_bedrijf_key").Value;
prs_bedrijf_key = min_bedrijf_key;
}
oRs.Close();
}
if (locatiekey > 0 || gebouwkey > 0 || ruimtekey > 0)

View File

@@ -317,12 +317,12 @@ if (savemode)
}
if (multi)
var prs_bedrijf_key = mld.dienst_controle(stdm_key, user.alg_locatie_key(), user.alg_gebouw_key(), user.alg_ruimte_key(), user_key);
var prs_bedrijf_key = mld.dienst_controle(stdm_key, user.alg_locatie_key(), user.alg_gebouw_key(), user.alg_ruimte_key(), obj_arr, user_key);
else
{
// Als we geen locatiekey hadden dan is hierboven al via afleveradres naar locatiekey gezocht.
// Indien de gebouwkey een terrein is, gaan we kijken naar de locatie. Terrein heeft geen diensten. De ruimtekey is dan al null.
var prs_bedrijf_key = mld.dienst_controle(stdm_key, locatiekey, (bttype == "B"? gebouwkey : null), ruimtekey, prs_key_voor);
var prs_bedrijf_key = mld.dienst_controle(stdm_key, locatiekey, (bttype == "B"? gebouwkey : null), ruimtekey, obj_arr, prs_key_voor);
}
lcl.set_dialect(stdm_info.ins_srtdiscipline_key, "MLD_SRTDISCIPLINE_KEY");

View File

@@ -76,6 +76,7 @@ else
oRs = Oracle.Execute(sql);
var t_opdr = oRs("mld_typeopdr_key").Value;
var autoorderamount = oRs("mld_stdmelding_autoorderamount").Value;
oRs.Close();
if (!t_opdr)
// Beter dan error in de IIS log. Zonder de alert blijft het scherm te klein?
shared.simpel_page(L("lcl_orders_no_ordertype"));
@@ -122,7 +123,14 @@ if (isNew && uitvoerende < 0 && copyorder_key < 0)
locatiekey = oRs("alg_locatie_key").Value;
oRs.Close();
}
uitvoerende = mld.dienst_controle(mld_info.stdm_key, locatiekey, (mld_info.bttype == "B"? mld_info.bld_key : null), mld_info.room_key, mld_info.perslid_key_voor, true);
// Zijn er objecten aan de melding gekoppeld? Zet de ins_deel_keys in een array.
var obj_key_arr = [];
for (var i=0; i<mld_info.room_obj_arr.length; i++)
{
obj_key_arr.push(mld_info.room_obj_arr[i].ins_key);
}
uitvoerende = mld.dienst_controle(mld_info.stdm_key, locatiekey, (mld_info.bttype == "B"? mld_info.bld_key : null), mld_info.room_key, obj_key_arr, mld_info.perslid_key_voor, true);
}
if (isNew && copyorder_key < 0 && mld_typeopdr_isofferte == 1)

View File

@@ -64,7 +64,14 @@ if (locatiekey < 0 && mld_melding.deladdress_key > 0)
locatiekey = oRs("alg_locatie_key").Value;
oRs.Close();
}
var prs_bedrijf_key = mld.dienst_controle(new_stdm, locatiekey, (mld_melding.bttype == "B"? mld_melding.bld_key : null), mld_melding.room_key, mld_melding.perslid_key_voor);
// Zijn er objecten aan de melding gekoppeld? Zet de ins_deel_keys in een array.
var obj_key_arr = [];
for (var i=0; i<mld_info.room_obj_arr.length; i++)
{
obj_key_arr.push(mld_info.room_obj_arr[i].ins_key);
}
var prs_bedrijf_key = mld.dienst_controle(new_stdm, locatiekey, (mld_melding.bttype == "B"? mld_melding.bld_key : null), mld_melding.room_key, obj_key_arr, mld_melding.perslid_key_voor);
var sql = "SELECT m.mld_melding_opmerking"
+ " , m.mld_melding_spoed"