CSUN#59537 Import planning: Geen behandelaar meer vullen & oude import (meldingen) opruimen

svn path=/Customer/trunk/; revision=47735
This commit is contained in:
Sander Schepers
2020-08-12 11:27:00 +00:00
parent b4f021ebed
commit 8f629a95a7

View File

@@ -3486,519 +3486,6 @@ AS
NULL
FROM csun_v_rap_mldmail_nobo;
-- CSUN#54997: Import en aanmaken meldingen vanuit een (jaar)planning
CREATE OR REPLACE PROCEDURE csun_import_meldingen (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000);
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_ongeldig NUMBER (1);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_count_melding NUMBER := 1;
v_count_alglocatie NUMBER := 1;
-- De importvelden:
v_fac_import_key VARCHAR (256);
v_fac_import_index VARCHAR (256);
v_mld_stdmelding_key VARCHAR (256);
v_mld_stdmelding_oms VARCHAR (256);
v_alg_locatie_code VARCHAR (256);
v_alg_locatie_oms VARCHAR (256);
v_uitvoerjaar VARCHAR (256);
v_uitvoerweek VARCHAR (256);
v_onderwerp VARCHAR (256);
v_omschrijving VARCHAR (256);
v_aanvrageremail VARCHAR (256);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
DELETE FROM csun_imp_mld;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_fac_import_key := rec.fac_import_key;
v_fac_import_index := rec.fac_imp_file_index;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
v_ongeldig := 0;
IF SUBSTR (v_newline, 1, 3) = ''
THEN
-- EF BB BF aangetroffen
fac.imp_writelog (p_import_key,
'W',
'Byte Order Mark aangetroffen',
'Bestand heeft onbehandeld UTF-8 formaat.');
v_newline := SUBSTR (v_newline, 4);
END IF;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_key); -- Soort melding key
fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_oms); -- Soort melding omschrijving
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- Locatie key
fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_oms); -- Locatieomschrijving
fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerjaar); -- Uitvoerjaar
fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerweek); -- Uitvoerweek
fac.imp_getfield (v_newline, c_fielddelimitor, v_onderwerp); -- Onderwerp
fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving); -- Omschrijving
fac.imp_getfield (v_newline, c_fielddelimitor, v_aanvrageremail); --Emailadres aanvrager
IF (fac.safe_to_number (v_uitvoerweek) < 10)
THEN
v_uitvoerweek := (0 || v_uitvoerweek);
END IF;
v_aanduiding :=
'['
|| v_mld_stdmelding_key
|| '|'
|| v_alg_locatie_code
|| '|'
|| v_uitvoerjaar
|| '|'
|| v_uitvoerweek
|| '] ';
v_count_tot := v_count_tot + 1;
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (v_mld_stdmelding_key) = 'MELDING'
AND UPPER (v_mld_stdmelding_oms) = 'MELDINGOMSCHRIJVING'
AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
AND UPPER (v_alg_locatie_oms) = 'LOCATIE'
AND UPPER (v_uitvoerjaar) = 'UITVOERJAAR'
AND UPPER (v_uitvoerweek) = 'UITVOERWEEK'
AND UPPER (v_onderwerp) = 'ONDERWERP' --Lengte max 80
AND UPPER (v_omschrijving) = 'OMSCHRIJVING' --Lengte max 4000
AND UPPER (v_aanvrageremail) = 'AANVRAGEREMAIL' --Lengte max 4000
THEN
header_is_valid := 1;
END IF;
ELSE
--Controle of de opgegeven stdmelding wel aanwezig is
SELECT COUNT ( * )
INTO v_count_melding
FROM mld_stdmelding sm
WHERE v_mld_stdmelding_key = sm.mld_stdmelding_key
AND sm.mld_stdmelding_verwijder IS NULL;
IF v_count_melding = 0
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Meldingnummer bestaat niet',
'Melding wordt niet ingelezen!');
END IF;
--Controle of de opgegeven locatiecode wel aanwezig is
SELECT COUNT ( * )
INTO v_count_alglocatie
FROM alg_locatie l
WHERE l.alg_locatie_code = v_alg_locatie_code
AND l.alg_locatie_verwijder IS NULL;
IF v_count_alglocatie = 0
THEN
v_ongeldig := 1;
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Locatie (locatiecode) bestaat niet',
'Melding wordt niet ingelezen!');
END IF;
-- Controle of de melding wel ingelezen moet worden. Meldingen moeten worden ingelezen na volgende week.
-- Dus stel het is week 8, dan moeten meldingen ingelezen worden in week 10 en verder.
-- De routine om meldingen automatisch aan te maken (csun_export_meldingen) maakt namelijk op maandag meldingen voor volgende week aan.
IF TO_NUMBER (TO_CHAR (v_uitvoerjaar) || TO_CHAR (v_uitvoerweek)) <=
TO_NUMBER (
TO_CHAR (SYSDATE, 'YYYY') || TO_CHAR (SYSDATE, 'WW'))
+ 1
THEN
v_ongeldig := 1;
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'Melding niet in toekomst',
'Melding wordt niet ingelezen!');
END IF;
IF LENGTH (v_onderwerp) > 80
THEN
v_onderwerp := SUBSTR (v_onderwerp, 1, 80);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Onderwerp te lang',
'Onderwerp wordt afgebroken tot [' || v_onderwerp || ']');
END IF;
IF LENGTH (v_omschrijving) > 4000
THEN
v_omschrijving := SUBSTR (v_omschrijving, 1, 4000);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Omschrijving te lang',
'Omschrijving wordt afgebroken tot ['
|| v_omschrijving
|| ']');
END IF;
IF LENGTH (v_aanvrageremail) > 200
THEN
v_aanvrageremail := SUBSTR (v_aanvrageremail, 1, 200);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || 'Emailadres aanvrager te lang',
'Emailadres aanvrager wordt afgebroken tot ['
|| v_aanvrageremail
|| ']');
END IF;
IF LENGTH (v_alg_locatie_oms) > 60
THEN
v_alg_locatie_oms := SUBSTR (v_alg_locatie_oms, 1, 60);
END IF;
-- Insert geformatteerde import record
IF header_is_valid = 1 AND v_ongeldig = 0
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel csun_imp_mld';
INSERT INTO csun_imp_mld (fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
alg_locatie_code,
alg_locatie_oms,
uitvoerdatum,
uitvoerweek,
uitvoerjaar,
onderwerp,
omschrijving,
aanvrageremail)
VALUES (v_fac_import_key,
v_fac_import_index,
SYSDATE,
TO_NUMBER (v_mld_stdmelding_key),
v_mld_stdmelding_oms,
v_alg_locatie_code,
v_alg_locatie_oms,
NEXT_DAY (
TO_DATE ('04-jan-' || v_uitvoerjaar,
'dd-mm-yyyy')
+ (v_uitvoerweek - 2) * 7,
'vrijd'),
v_uitvoerweek,
v_uitvoerjaar,
v_onderwerp,
v_omschrijving,
v_aanvrageremail);
COMMIT;
v_count_import := v_count_import + 1;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END IF;
END IF;
END;
END LOOP;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
'Ongeldig importbestand',
'Geen header of header niet volgens specificatie!');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'CSUN_MELDINGEN/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'CSUN_MELDINGEN/#ongeldige niet ingelezen importregels incl header: '
|| TO_CHAR (v_count_tot - v_count_import),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg :=
v_errormsg
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Inleesproces CSUN_IMPORT_MELDINGEN afgebroken!');
END csun_import_meldingen;
/
-- CSUN#54997: Import en aanmaken meldingen vanuit een (jaar)planning
CREATE OR REPLACE PROCEDURE csun_update_meldingen (p_import_key IN NUMBER)
IS
BEGIN
INSERT INTO csun_imp_mld2 (fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
alg_locatie_key,
alg_locatie_oms,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
onderwerp,
omschrijving,
aanvrageremail,
mld_melding_key)
SELECT fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
MAX (l.alg_locatie_key),
alg_locatie_oms,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
onderwerp,
omschrijving,
aanvrageremail,
mld_melding_key
FROM csun_imp_mld imp, alg_locatie l
WHERE l.alg_locatie_code = imp.alg_locatie_code
GROUP BY fac_import_key,
fac_import_index,
fac_import_datum,
mld_stdmelding_key,
mld_stdmelding_oms,
l.alg_locatie_key,
alg_locatie_oms,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
onderwerp,
omschrijving,
aanvrageremail,
mld_melding_key;
END;
/
-- CSUN#54997: Import en aanmaken meldingen vanuit een (jaar)planning
CREATE OR REPLACE PROCEDURE csun_export_meldingen (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
v_fac_import_key NUMBER (10);
v_fac_import_index NUMBER (10);
v_mld_melding_key NUMBER (10);
v_mld_stdmelding_key NUMBER (10);
v_mld_melding_datum DATE;
v_opdr_key NUMBER (10);
v_perslid_key NUMBER (10) := 4; -- Facilitor
v_aanvrager_key NUMBER (10);
v_stdmelding_autoorder VARCHAR2 (200);
v_dienst_key NUMBER (10);
v_typeopdr_key NUMBER (10);
v_bedrijf_key NUMBER (10);
-- Haal alle meldingen op uit de tussentabel van volgende week en die nog niet zijn aangemaakt. Deze hebben een datum op de vrijdag volgende week.
CURSOR cmld
IS
SELECT m.*,
(SELECT fac.safe_to_number (km.alg_onrgoedkenmerk_waarde)
FROM alg_v_aanwezigonrgoedkenmerk km
WHERE km.alg_onrgoed_niveau = 'D'
AND km.alg_kenmerk_key = 1300 --Kenmerk bij district : Medewerker bedrijfsbureau
AND km.alg_onrgoed_key = l.alg_district_key)
AS mld_behandelaar_key,
COALESCE (
(SELECT MAX (prs_perslid_key) --prs_perslid_key van geimporteerde emailadres of anders Facilitor (perslid_key 4)
FROM prs_perslid
WHERE UPPER (prs_perslid_email) = UPPER (m.aanvrageremail)),
4)
AS aanvrager_key
FROM csun_imp_mld2 m, alg_v_locatie_gegevens l
WHERE l.alg_locatie_key = m.alg_locatie_key
AND TRUNC (m.uitvoerdatum) <= TRUNC (SYSDATE) + 11
AND m.mld_melding_key IS NULL;
BEGIN
FOR recmld IN cmld
LOOP
BEGIN
INSERT INTO mld_melding (prs_perslid_key,
mld_melding_module,
mld_meldbron_key,
mld_alg_locatie_key,
mld_melding_datum,
mld_stdmelding_key,
mld_melding_einddatum,
mld_melding_status,
mld_melding_spoed,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_behandelaar_key)
VALUES (recmld.aanvrager_key,
'MLD',
6, --Bron = Systeem
recmld.alg_locatie_key,
SYSDATE,
recmld.mld_stdmelding_key,
TO_DATE(CONCAT (
TO_CHAR (recmld.uitvoerdatum, 'YYYY-MM-DD'),
' 17:00:00')),
4, --Status = In behandeling
3, --Prioriteit = Normaal
recmld.onderwerp,
recmld.omschrijving,
recmld.mld_behandelaar_key)
RETURNING mld_melding_key, mld_stdmelding_key, mld_melding_datum
INTO v_mld_melding_key,
v_mld_stdmelding_key,
v_mld_melding_datum;
--PROCEDURE trackaction (pcode VARCHAR2, prefkey NUMBER, puserkey NUMBER, pdatum DATE, poms VARCHAR2);
--Dit zorgt voor een juiste datum 'Laatste actiedatum' in het meldingsoverzicht.
fac.trackaction ('MLDNEW',
v_mld_melding_key,
v_perslid_key,
SYSDATE,
'Melding is aangemaakt vanuit planning');
UPDATE csun_imp_mld imp1
SET imp1.mld_melding_key = v_mld_melding_key,
imp1.mld_melding_datum = v_mld_melding_datum
WHERE imp1.fac_import_key = recmld.fac_import_key
AND imp1.fac_import_index = recmld.fac_import_index;
UPDATE csun_imp_mld2 imp2
SET imp2.mld_melding_key = v_mld_melding_key,
imp2.mld_melding_datum = v_mld_melding_datum
WHERE imp2.fac_import_key = recmld.fac_import_key
AND imp2.fac_import_index = recmld.fac_import_index;
-- Nu kijken of we automatisch een opdracht kunnen aanmaken.
SELECT ms.mld_stdmelding_autoorder,
ms.prs_dienst_key,
ms.mld_typeopdr_key
INTO v_stdmelding_autoorder, v_dienst_key, v_typeopdr_key
FROM mld_stdmelding ms
WHERE ms.mld_stdmelding_key = v_mld_stdmelding_key;
-- Heb ik genoeg informatie om een opdracht aan te kunnen maken.
IF v_stdmelding_autoorder = 1
AND v_dienst_key IS NOT NULL
AND v_typeopdr_key IS NOT NULL
THEN
SELECT MIN (bdl.prs_bedrijf_key)
INTO v_bedrijf_key
FROM prs_bedrijfdienstlocatie bdl, prs_v_aanwezigbedrijf b
WHERE bdl.prs_bedrijf_key = b.prs_bedrijf_key
AND bdl.prs_dienst_key = v_dienst_key
AND (bdl.alg_locatie_key = recmld.alg_locatie_key
OR bdl.alg_locatie_key IS NULL);
IF v_bedrijf_key IS NOT NULL
THEN
INSERT INTO mld_opdr (mld_uitvoerende_keys,
mld_opdr_kosten,
mld_opdr_uurloon,
mld_melding_key,
mld_opdr_module,
mld_opdr_bedrijfopdr_volgnr,
mld_opdr_datumbegin,
mld_opdr_einddatum,
mld_typeopdr_key,
prs_perslid_key,
mld_opdr_omschrijving,
mld_opdr_uren,
mld_opdr_teverzenden)
VALUES (v_bedrijf_key,
0,
0,
v_mld_melding_key,
'MLD',
mld.bepaalopdrmeldingvolgnr (v_mld_melding_key),
v_mld_melding_datum,
recmld.uitvoerdatum,
v_typeopdr_key,
v_perslid_key,
recmld.onderwerp
|| CHR (10)
|| recmld.omschrijving,
0,
1)
RETURNING mld_opdr_key
INTO v_opdr_key;
END IF;
mld.setopdrachtstatus (v_opdr_key, 5, v_perslid_key); -- Uitgegeven
mld.updatemeldingstatus (v_mld_melding_key, 0, v_perslid_key);
END IF;
END;
END LOOP;
END;
/
--CSUN#53832 Deze notificatie zorgt ervoor dat de districtmanager wordt genotificeerd over alle notities die worden ingevoerd bij meldingen waaraan geen behandelaar is gekoppeld.
CREATE OR REPLACE VIEW csun_v_noti_mldnote_nobo
(
@@ -4043,65 +3530,6 @@ AS
AND TRUNC (n.mld_melding_note_aanmaak) =
TRUNC (SYSDATE) - 1));
CREATE OR REPLACE VIEW csun_v_rap_planning
(
fac_import_key,
fac_import_datum,
vakgroeptype,
vakgroep,
mld_stdmelding_key,
standaardmelding,
regio,
district,
fclt_3d_locatie_key,
locatie,
klant,
uitvoerdatum,
uitvoerweek,
uitvoermaand,
uitvoerjaar,
onderwerp,
omschrijving,
melding_key
)
AS
SELECT imp.fac_import_key,
imp.fac_import_datum,
sd.ins_srtdiscipline_omschrijving,
vg.ins_discipline_omschrijving,
imp.mld_stdmelding_key,
mld_stdmelding_oms,
r.alg_regio_omschrijving,
d.alg_district_omschrijving,
imp.alg_locatie_key,
imp.alg_locatie_oms,
(SELECT DISTINCT akm.alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk akm
WHERE akm.alg_kenmerk_key = 1000
AND akm.alg_onrgoed_key = imp.alg_locatie_key)
AS klant,
imp.uitvoerdatum,
imp.uitvoerweek,
imp.uitvoermaand,
imp.uitvoerjaar,
imp.onderwerp,
imp.omschrijving,
imp.mld_melding_key
FROM csun_imp_mld2 imp,
alg_locatie l,
alg_district d,
alg_regio r,
ins_srtdiscipline sd,
ins_tab_discipline vg,
mld_stdmelding sm
WHERE imp.alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = d.alg_district_key
AND d.alg_regio_key = r.alg_regio_key
AND sm.mld_stdmelding_key = imp.mld_stdmelding_key
AND vg.ins_discipline_key = sm.mld_ins_discipline_key
AND sd.ins_srtdiscipline_key = vg.ins_srtdiscipline_key
ORDER BY alg_locatie_oms, uitvoerdatum;
-- CSUN#60798 Notificatie om gebruikers te berichten wanneer een klant akkoord heeft gegeven in een workflow aanvraag contractmutatie
CREATE OR REPLACe VIEW csun_v_rap_wfcntraanvraag
(
@@ -4482,7 +3910,7 @@ BEGIN
THEN
BEGIN
v_errorhint :=
'Fout bij toevoegen regel aan importtabel csun_imp_mld';
'Fout bij toevoegen regel aan importtabel csun_imp_planning';
INSERT INTO csun_imp_planning (fac_import_key,
fac_import_index,
@@ -4653,7 +4081,7 @@ BEGIN
3, --Prioriteit = Normaal
recmld.onderwerp,
recmld.omschrijving,
recmld.mld_behandelaar_key)
NULL) --Op verzoek (CSUN#59537) toch niet vullen
RETURNING mld_melding_key, mld_stdmelding_key, mld_melding_datum
INTO v_mld_melding_key,
v_mld_stdmelding_key,