CSUN#59537 Nieuwe import planning van meldingen (naar Frontoffice ipv csun_imp_mld)

svn path=/Customer/trunk/; revision=47259
This commit is contained in:
Sander Schepers
2020-06-26 15:24:55 +00:00
parent 973b41d9b1
commit f24e2ca8d2

View File

@@ -555,6 +555,7 @@ SELECT DISTINCT mld_melding_key, prs_perslid_email
WHERE alg_kenmerk_key = 1260) lse
WHERE m.mld_alg_locatie_key = lse.alg_onrgoed_key
AND m.mld_stdmelding_key != 41 -- ontvangen berichten
AND m.mld_melding_status in (4,5,6,7) -- Ivm CSUN#59537 moet deze notificatie ook pas wanneer deze bij Backoffice staat (status 2) ipv alleen nog in planning bij Frontoffice (status 0)
UNION ALL
SELECT m.mld_melding_key, prs_perslid_email, mld_melding_status, mld_stdmelding_key
FROM prs_perslid p,
@@ -565,6 +566,7 @@ SELECT DISTINCT mld_melding_key, prs_perslid_email
prs_kenmerklink kl
WHERE m.mld_alg_locatie_key = l.alg_locatie_key
AND m.mld_stdmelding_key != 41 -- ontvangen berichten
AND m.mld_melding_status in (4,5,6,7) -- Ivm CSUN#59537 moet deze notificatie ook pas wanneer deze bij Backoffice staat (status 2) ipv alleen nog in planning bij Frontoffice (status 0)
AND pwpg.alg_locatie_key = l2.alg_locatie_key
AND l.alg_district_key = l2.alg_district_key
AND pwpg.prs_perslid_key = p.prs_perslid_key
@@ -573,7 +575,7 @@ SELECT DISTINCT mld_melding_key, prs_perslid_email
AND fac.safe_to_number (prs_kenmerklink_waarde) = 1
AND kl.prs_link_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
AND p.prs_perslid_verwijder IS NULL
UNION ALL
SELECT m.mld_melding_key, prs_perslid_email, mld_melding_status, mld_stdmelding_key
FROM prs_perslid p,
@@ -581,6 +583,7 @@ SELECT DISTINCT mld_melding_key, prs_perslid_email
prs_v_perslidwerkplek_gegevens pwpg,
prs_kenmerklink kl
WHERE m.mld_stdmelding_key != 41 -- ontvangen berichten
AND m.mld_melding_status in (4,5,6,7) -- Ivm CSUN#59537 moet deze notificatie ook pas wanneer deze bij Backoffice staat (status 2) ipv alleen nog in planning bij Frontoffice (status 0)
AND pwpg.alg_locatie_key = m.mld_alg_locatie_key
AND pwpg.prs_perslid_key = p.prs_perslid_key
AND p.prs_srtperslid_key IN (4041, 50) -- Objectleider en Rayonleider
@@ -588,8 +591,8 @@ SELECT DISTINCT mld_melding_key, prs_perslid_email
AND fac.safe_to_number (prs_kenmerklink_waarde) = 1
AND kl.prs_link_key = p.prs_perslid_key
AND p.prs_perslid_email IS NOT NULL
AND p.prs_perslid_verwijder IS NULL
) g
AND p.prs_perslid_verwijder IS NULL
) g
WHERE g.mld_melding_status IN (0, 2, 3, 4, 7)
AND mld_stdmelding_key NOT IN (SELECT mld_stdmelding_key
FROM mld_stdmelding
@@ -4279,6 +4282,565 @@ AS
WHERE fac_srtnotificatie_key = 621 --CUST05 (641 in ACCP)
AND t.fac_tracking_refkey = m.mld_melding_key);
--CSUN#59537
CREATE OR REPLACE PROCEDURE csun_import_planning (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;
-- Eerst opschonen voor we beginnen
DELETE FROM csun_imp_planning;
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) = '??A???A>??A?'
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_planning (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_PLANNING/#ingelezen importregels: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'CSUN_PLANNING/#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_PLANNING afgebroken!');
END csun_import_planning;
/
--CSUN#59537
CREATE OR REPLACE PROCEDURE csun_update_planning (p_import_key IN NUMBER)
AS
v_fac_import_key NUMBER (10);
v_fac_import_index NUMBER (10);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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,
l.alg_locatie_key
FROM csun_imp_planning m, alg_v_locatie_gegevens l
WHERE l.alg_locatie_code = m.alg_locatie_code
AND m.mld_melding_key IS NULL;
BEGIN
FOR recmld IN cmld
LOOP
BEGIN
v_errorhint := 'Insert melding';
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')),
0, --Status = Bij Frontoffice
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;
v_errorhint := 'Tracking MLDNEW';
--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');
v_errorhint := 'Insert kenmerk Import Planning';
-- We zetten een vinkje om aan de melding te herkennen dat deze uit deze import komt.
-- Daarmee kunnen we de status ook aanpassen van de meldingen die gepland staan over 2 weken (status van 0 naar 4) in een export-procedure
INSERT INTO mld_kenmerkmelding (mld_melding_key,
mld_kenmerk_key,
mld_kenmerkmelding_waarde) -- Vinkje aan.
VALUES (v_mld_melding_key, 1301, -- Kenmerk 'Import planning'
1); -- Vinkje aan.
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_errorhint || ' ' || v_errormsg,
'Ingelezen regel kan niet worden weggeschreven!');
COMMIT;
END;
END LOOP;
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_errormsg,
'Inleesproces CSUN_UPDATE_PLANNING afgebroken!');
END csun_update_planning;
/
--CSUN#59537
CREATE OR REPLACE PROCEDURE csun_export_planning (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_perslid_key NUMBER (10) := 4; -- Facilitor
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_opdr_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 die nog in behandeling (status 0) staan en met kenmerk 'Planning melding' aan heeft. .
CURSOR cmld
IS
SELECT m.mld_melding_key,
m.mld_stdmelding_key,
m.mld_melding_onderwerp,
m.mld_melding_omschrijving,
m.mld_melding_datum,
m.mld_melding_einddatum,
m.mld_alg_locatie_key
FROM mld_melding m, mld_kenmerkmelding km
WHERE km.mld_melding_key = m.mld_melding_key
AND TRUNC (m.mld_melding_einddatum) <= TRUNC (SYSDATE) + 11
AND km.mld_kenmerk_key = 1301 -- Kenmerk 'Import planning' (checkbox die bij het importeren op 1 wordt gezet zodat herkend wordt dat deze vanuit de import komt).
AND km.mld_kenmerkmelding_waarde = 1
AND m.mld_melding_status = 0;
BEGIN
FOR recmld IN cmld
LOOP
BEGIN
UPDATE mld_melding
SET mld_melding_status = 4 --In behandeling ipv Frontoffice (0)
WHERE mld_melding_key = recmld.mld_melding_key
RETURNING mld_melding_key
INTO v_mld_melding_key;
--Tracking voor het doorzetten van Frontoffice naar Backoffice
fac.trackaction ('MLDDOO',
v_mld_melding_key,
v_perslid_key,
SYSDATE,
'Melding is aangemaakt vanuit planning');
v_errorhint := 'Select opdracht';
-- 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 = recmld.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
v_errorhint := 'Select bedrijfkey';
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.mld_alg_locatie_key
OR bdl.alg_locatie_key IS NULL);
IF v_bedrijf_key IS NOT NULL
THEN
v_errorhint := 'Insert opdracht';
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),
recmld.mld_melding_datum,
recmld.mld_melding_einddatum,
v_typeopdr_key,
v_perslid_key,
recmld.mld_melding_onderwerp
|| CHR (10)
|| recmld.mld_melding_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_export_planning;
/
------ payload end ------
SET DEFINE OFF