SCHG#87578 -- Tijdelijke cust ctr.melding_voor_geplande_taken_maken omdat er op huidige nog geen taak-meldingen worden aangemaakt voor Persoons en Terrein gebonden objecten

svn path=/Customer/trunk/; revision=67928
This commit is contained in:
Jos Migo
2025-02-11 08:38:31 +00:00
parent d8ccb72039
commit 6aed6161dd

View File

@@ -2271,6 +2271,237 @@ SELECT mld_uitvoerende_key,
FROM schg_v_rap_opdrachten
ORDER BY geplande_aanvang_b ;
-- TIJDELIJK - ZIE SCHG#87578
--- ter vervanging van ctr.melding_voor_geplande_taken_maken
--- om ook objecten gekoppeld aan persoon en terrein mee te krijgen
--- ps. op basis plandatum en nog niet berekend xcp-record first time..
-- Uit ctr_pac.src
-- Automatische starten en ter uitvoering zetten van taken die voor vandaag of eerder zijn gepland (via plandatum of berekend).
-- Er wordt bij de taak ook direct een melding aangemaakt.
-- voorwaarden: 1) Er is een stdmelding gedefinieerd bij de periodieke taak.
-- 2) Alleen periodieke taken, GEEN mjob taken.
CREATE OR REPLACE PROCEDURE schg_ctr_start
AS
c_applname VARCHAR2 (50) := 'SCHG_MELDING_VOOR_GEPLANDE_TAKEN_MAKEN';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_aanduiding VARCHAR2 (200);
v_count_tot NUMBER (10);
l_prs_perslid_key prs_perslid.prs_perslid_key%TYPE;
l_new_deelsrtcontrole_key ins_deelsrtcontrole.ins_deelsrtcontrole_key%TYPE;
l_deelsrtcontrole_key ins_deelsrtcontrole.ins_deelsrtcontrole_key%TYPE;
mjb_approvedmld_desc fac_setting.fac_setting_default%TYPE;
mld_subject VARCHAR2 (200);
CURSOR c_taak_naar_ter_uitvoering
IS
SELECT idsc.ins_deelsrtcontrole_key,
idsc.ins_deel_key,
idsc.ins_srtcontrole_key,
idsc.ins_scenario_key,
xcp.mld_stdmelding_key,
sm.mld_stdmelding_default_disc,
sm.alg_onrgoed_niveau, -- H = Hide NULL = geen L,G,V,R = verplicht tot dat niveau
d.ins_alg_ruimte_type, -- R = Ruimte T = Terrein P = Persoon A = Afdeling
d.ins_alg_ruimte_key, -- key behorende bij type
COALESCE(xcp.prs_kostenplaats_key,
(SELECT prs_kostenplaats_key
FROM alg_gebouw
WHERE alg_gebouw_key = alg.alg_gebouw_key)) prs_kostenplaats_key,
xcp.ins_srtcontrole_omschrijving,
xcp.ins_srtcontrole_info,
isd.ins_srtdeel_omschrijving,
alg.alg_locatie_key,
alg.alg_onroerendgoed_keys,
CASE
WHEN (SELECT COUNT(ins_deelsrtcontrole_key)
FROM ins_deelsrtcontrole idsc2
WHERE idsc2.ins_deel_key = idsc.ins_deel_key
AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND idsc2.ins_scenario_key = idsc.ins_scenario_key
AND idsc2.ins_deelsrtcontrole_status = 6) >= 1
THEN
ins.nextcyclusdate(idsc.ins_deel_key, idsc.ins_srtcontrole_key, 1, 1)
ELSE NULL
END nextdate
FROM ins_deelsrtcontrole idsc,
ins_v_defined_inspect_xcp xcp,
ins_deel d,
ins_srtdeel isd,
alg_v_allonroerendgoed alg,
mld_stdmelding sm
WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND xcp.ins_deel_key = idsc.ins_deel_key
AND xcp.ins_scenario_key = idsc.ins_scenario_key
AND xcp.mld_stdmelding_key = sm.mld_stdmelding_key
AND d.ins_deel_key = idsc.ins_deel_key
AND d.ins_srtdeel_key = isd.ins_srtdeel_key
AND d.ins_alg_ruimte_key =
CASE WHEN d.ins_alg_ruimte_type IN ('T', 'R')
THEN alg.alg_onroerendgoed_keys(+)
END
AND TRUNC(idsc.ins_deelsrtcontrole_plandatum, 'dd')-1 <= TRUNC(SYSDATE, 'dd') -- Ik ga voor SCHG 1 dag eerder de taak-melding aanmaken zodat deze niet dubbel met de core aangemaakt wordt..
AND idsc.ins_scenario_key = 1
AND idsc.ins_deelsrtcontrole_status = 0
AND xcp.ctr_ismjob = 0
AND xcp.mld_stdmelding_key IS NOT NULL
UNION
-- BEREKEND - MET HISTORIE
SELECT NULL ins_deelsrtcontrole_key,
idsc.ins_deel_key,
idsc.ins_srtcontrole_key,
idsc.ins_scenario_key,
xcp.mld_stdmelding_key,
sm.mld_stdmelding_default_disc,
sm.alg_onrgoed_niveau, -- H = Hide NULL = geen verbergen L,G,V,R = verplicht tot dat niveau
d.ins_alg_ruimte_type, -- R = Ruimte T = Terrein P = Persoon A = Afdeling
d.ins_alg_ruimte_key, -- key behorende bij type
COALESCE(xcp.prs_kostenplaats_key,
(SELECT prs_kostenplaats_key
FROM alg_gebouw
WHERE alg_gebouw_key = alg.alg_gebouw_key)) prs_kostenplaats_key,
xcp.ins_srtcontrole_omschrijving,
xcp.ins_srtcontrole_info,
isd.ins_srtdeel_omschrijving,
alg.alg_locatie_key,
alg.alg_onroerendgoed_keys,
CASE
WHEN (SELECT COUNT(ins_deelsrtcontrole_key)
FROM ins_deelsrtcontrole idsc2
WHERE idsc2.ins_deel_key = idsc.ins_deel_key
AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND idsc2.ins_scenario_key = idsc.ins_scenario_key
AND idsc2.ins_deelsrtcontrole_status = 6) >= 1
THEN
ins.nextcyclusdate(idsc.ins_deel_key, idsc.ins_srtcontrole_key, 1, 1)
ELSE NULL
END nextdate
FROM ins_deelsrtcontrole idsc,
ins_v_defined_inspect_xcp xcp,
ins_deel d,
ins_srtdeel isd,
alg_v_allonroerendgoed alg,
mld_stdmelding sm
WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND xcp.ins_deel_key = idsc.ins_deel_key
AND xcp.ins_scenario_key = idsc.ins_scenario_key
AND xcp.mld_stdmelding_key = sm.mld_stdmelding_key
AND d.ins_deel_key = idsc.ins_deel_key
AND d.ins_srtdeel_key = isd.ins_srtdeel_key
AND d.ins_alg_ruimte_key =
CASE WHEN d.ins_alg_ruimte_type IN ('T', 'R')
THEN alg.alg_onroerendgoed_keys(+)
END
AND TRUNC(ins.nextcyclusdate(idsc.ins_deel_key, idsc.ins_srtcontrole_key, 1, 1), 'dd')-1 <= TRUNC(SYSDATE, 'dd') -- Ik ga voor SCHG 1 dag eerder de taak-melding aanmaken zodat deze niet dubbel met de core aangemaakt wordt..
AND idsc.ins_scenario_key = 1
AND idsc.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key)
FROM ins_deelsrtcontrole idsc2
WHERE idsc2.ins_deel_key = idsc.ins_deel_key
AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND idsc2.ins_scenario_key = idsc.ins_scenario_key
AND idsc2.ins_deelsrtcontrole_status = 6)
AND (SELECT MAX(ins_deelsrtcontrole_key)
FROM ins_deelsrtcontrole idsc2
WHERE idsc2.ins_deel_key = idsc.ins_deel_key
AND idsc2.ins_srtcontrole_key = idsc.ins_srtcontrole_key
AND idsc2.ins_scenario_key = idsc.ins_scenario_key
AND idsc2.ins_deelsrtcontrole_status != 6) IS NULL -- Er mag geen lopende taak aanwezig zijn.
AND xcp.ctr_ismjob = 0
AND xcp.mld_stdmelding_key IS NOT NULL
-- BREKEND - ZONDER HISTORIE
-- UNION
;
BEGIN
v_count_tot := 0;
FOR rec IN c_taak_naar_ter_uitvoering
LOOP
BEGIN
v_errormsg := 'Fout starten taak';
v_aanduiding := '[' || TO_CHAR (rec.ins_deel_key) || '/' || TO_CHAR (rec.ins_srtcontrole_key) || '] ';
BEGIN
SELECT prs_perslid_key
INTO l_prs_perslid_key
FROM prs_perslid
WHERE prs_perslid_oslogin = '_SYSTEEM' AND prs_perslid_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.putsystemnotification ('Invalid configuration: missing _SYSTEEM user', 1);
END;
-- Stap 1 is de taak starten.
IF rec.ins_deelsrtcontrole_key IS NULL
THEN
SELECT ins_s_ins_deelsrtcontrole_key.NEXTVAL INTO l_new_deelsrtcontrole_key FROM DUAL;
INSERT INTO ins_deelsrtcontrole (ins_deelsrtcontrole_key,
ins_deel_key,
ins_srtcontrole_key,
ins_deelsrtcontrole_status,
prs_perslid_key,
ins_deelsrtcontrole_datum_org)
VALUES (l_new_deelsrtcontrole_key,
rec.ins_deel_key,
rec.ins_srtcontrole_key,
2,
l_prs_perslid_key,
rec.nextdate);
l_deelsrtcontrole_key := l_new_deelsrtcontrole_key;
ELSE
l_deelsrtcontrole_key := rec.ins_deelsrtcontrole_key;
-- Het ins_deelsrtcontrole record bestaat al omdat de taak al is ingepland.
END IF;
ins.setinspectstatus(l_deelsrtcontrole_key, 2, NULL);
-- Stap 2 is de taak ter uitvoering brengen door een melding aan te maken en deze te koppelen aan de gestarte taak.
mjb_approvedmld_desc := fac.getsetting('mjb_approvedmelding_description');
IF mjb_approvedmld_desc = 2
THEN
mld_subject := rec.ins_srtcontrole_omschrijving;
ELSIF mjb_approvedmld_desc = 3
THEN
mld_subject := rec.ins_srtcontrole_omschrijving || ' (' || rec.ins_srtdeel_omschrijving || ')';
ELSE -- mjb_approvedmelding_description = 1
mld_subject := rec.ins_srtdeel_omschrijving;
END IF;
-- Melding aangmaken en koppelen.
ctr.taak_naar_ter_uitvoering(rec.mld_stdmelding_key,
mld_subject,
rec.ins_srtcontrole_info,
rec.prs_kostenplaats_key,
l_prs_perslid_key,
rec.mld_stdmelding_default_disc,
rec.alg_locatie_key,
rec.alg_onroerendgoed_keys,
rec.ins_deel_key,
l_deelsrtcontrole_key);
ins.setinspectstatus(l_deelsrtcontrole_key, 3, NULL);
v_count_tot := v_count_tot + 1;
IF MOD (v_count_tot, 500) = 0 THEN COMMIT; END IF;
END;
END LOOP;
fac.writelog (c_applname, 'S', '#Taken gestart: ' || TO_CHAR (v_count_tot), '');
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (c_applname, 'E', v_aanduiding || v_errormsg, 'Taak afgebroken!');
END;
/
-- Dagelijkse taak
@@ -2278,7 +2509,8 @@ CREATE OR REPLACE PROCEDURE schg_daily
AS
BEGIN
NULL;
-- NULL;
schg_ctr_start;
END;
/