Files
Customer/MARE/mare.sql
Sander Schepers 7520385290 MARE#81813 Uitgaande e-mail komt (niet) meer aan.
svn path=/Customer/trunk/; revision=63176
2024-01-15 20:46:48 +00:00

1373 lines
49 KiB
SQL
Raw Permalink Blame History

-- Script containing customer specific configuration sql statements for Provalu (voorheen De Maregroep)
-- $Revision$
-- $Id$
DEFINE thisfile = 'MARE.SQL'
DEFINE dbuser = 'MARE'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
CREATE OR REPLACE PROCEDURE mare_import_perslid (p_import_key IN NUMBER)
AS
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
v_aantal_in_fclt NUMBER;
BEGIN
-- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ;
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, ',', ';')
WHERE fac_import_key = p_import_key;
v_errorhint := 'Generieke update';
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid procedure
-- Afdeling (nr7) tijdelijk gevuld met achternaam (wordt later altijd Provalu)
-- Login (nr 22) wordt bij de import nog wel uit het bestand gehaald 3e kolom, maar later omgezet naar emailadres.
-- Let op, tov het daadwerkelijke bestand staat hieronder ; ipv ,
prs.import_perslid (
p_import_key,
'0;0;0;0;0;0;2;2;0;1;'
|| '0;0;0;0;0;0;0;5;0;0;'
|| '2;3;0;0;0;0;0;0;0;4;'
|| '0;0;0;0;0;0;0;0;0;0;'
|| '0;0;0;0;0;0',
';;;;;"Firstname;LastName;Login;JobTitle;EmailAdress;"');
-- Afdeling bepalen
UPDATE fac_imp_perslid
SET prs_afdeling_naam = 'Provalu';
-- Loginnaam afleiden van emailadres
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
(SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))
WHERE UPPER (prs_perslid_email) LIKE '%PROVALU.NL%';
-- Loginnaam afleiden van emailadres
UPDATE fac_imp_perslid
SET prs_perslid_oslogin =
(SUBSTR (prs_perslid_email,
0,
INSTR (prs_perslid_email, '@') - 1))
WHERE UPPER (prs_perslid_email) LIKE '%SERVICEPUNT-WERK.NL%';
-- Functie is niet altijd gevuld, functie eerst gevuld met achternaam, nu vullen met kenmerk (of 'Onbekend').
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving =
DECODE (prs_kenmerk4, NULL, 'Onbekend', prs_kenmerk4);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END mare_import_perslid;
/
CREATE OR REPLACE PROCEDURE mare_update_perslid (p_import_key IN NUMBER)
IS
-- Alle personen verwijderen die niet meer in het import import bestand voorkomen
-- Personen in de juiste autorisatiegroep zetten.
-- Match bij Provalu is Email.
-- Geen acties tenzij het aantal records in de importtabel meer dan 50 medewerkers betreft.
CURSOR c_del
IS
SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
FROM prs_perslid p, prs_v_perslid_fullnames pf
WHERE (UPPER (p.prs_perslid_email) LIKE '%PROVALU.NL%' OR UPPER (p.prs_perslid_email) LIKE '%SERVICEPUNT-WERK.NL%')
AND UPPER (p.prs_perslid_email) NOT IN
(SELECT UPPER (prs_perslid_email) FROM fac_imp_perslid)
AND pf.prs_perslid_key = p.prs_perslid_key;
v_count NUMBER;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (400);
v_errorhint VARCHAR2 (400);
BEGIN
v_errorhint := 'Niet genoeg personen in bestand, import afgebroken';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count >= 50
THEN
v_errorhint := 'Verwerken persoonsgegevens';
-- Geldig importbestand wat betreft aantal personen
COMMIT;
-- Eerst de functie omzetten.
UPDATE fac_imp_perslid
SET prs_srtperslid_omschrijving = COALESCE (prs_kenmerk4, 'Onbekend');
-- generic update
-- 'EMAIL' betekent dat op basis van Email wordt gematched.
-- 'NULL' betekent altijd geen werkplekken verwijderen
prs.update_perslid (p_import_key, 'EMAIL', NULL);
v_errorhint := 'Verwijderen persoonsgegevens';
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
BEGIN
prs.delete_perslid (p_import_key, rec.prs_perslid_key);
END;
END LOOP;
ELSE
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
COMMIT;
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END mare_update_perslid;
/
CREATE OR REPLACE VIEW mare_v_objectnummers
(
ins_deel_key,
ins_deel_module,
ins_srtdeel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_deel_aantal,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_deel_upper,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_verwijder,
ins_deel_getekend,
ins_discipline_key,
ins_alg_locatie_key,
ins_deel_parent_key,
ins_deel_omtrek,
ins_deel_oppervlak,
ins_deel_dwgx,
ins_deel_dwgy,
ins_deel_dwgz,
ins_deel_dwgrotatie,
ins_deel_dwgschaal,
ins_deel_x,
ins_deel_y,
ins_alg_ruimte_key_org,
ins_alg_ruimte_type_org,
ins_deel_state,
ins_deel_statedate,
ins_deel_t_uitvoertijd,
ins_deel_actief,
ins_deel_image,
ins_deel_mjb_score1,
ins_deel_mjb_score2,
prs_perslid_key_beh,
res_rsv_deel_key,
bes_bestelopdr_key,
ultimonummer,
uniek_nummer
)
AS
SELECT ins_deel_key,
ins_deel_module,
ins_srtdeel_key,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_deel_aantal,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_deel_upper,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_verwijder,
ins_deel_getekend,
ins_discipline_key,
ins_alg_locatie_key,
ins_deel_parent_key,
ins_deel_omtrek,
ins_deel_oppervlak,
ins_deel_dwgx,
ins_deel_dwgy,
ins_deel_dwgz,
ins_deel_dwgrotatie,
ins_deel_dwgschaal,
ins_deel_x,
ins_deel_y,
ins_alg_ruimte_key_org,
ins_alg_ruimte_type_org,
ins_deel_state,
ins_deel_statedate,
ins_deel_t_uitvoertijd,
ins_deel_actief,
ins_deel_image,
ins_deel_mjb_score1,
ins_deel_mjb_score2,
prs_perslid_key_beh,
res_rsv_deel_key,
bes_bestelopdr_key,
(SELECT fac.safe_to_number (kmd.ins_kenmerkdeel_waarde)
FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_srtkenmerk skm
WHERE kmd.ins_deel_key = d.ins_deel_key
AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
AND km.ins_srtkenmerk_key = skm.ins_srtkenmerk_key
AND skm.ins_srtkenmerk_key = 9), -- Kenmerksoort Ultimonummer
COALESCE (
(SELECT fac.safe_to_number (kmd.ins_kenmerkdeel_waarde)
FROM ins_kenmerkdeel kmd, ins_kenmerk km, ins_srtkenmerk skm
WHERE kmd.ins_deel_key = d.ins_deel_key
AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
AND km.ins_srtkenmerk_key = skm.ins_srtkenmerk_key
AND skm.ins_srtkenmerk_key = 9), -- Kenmerksoort Ultimonummer
d.ins_deel_key + 100000)
FROM ins_v_aanwezigdeel d;
CREATE OR REPLACE PROCEDURE mare_import_insp_metrel (p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errorhint VARCHAR2 (400);
header_is_valid NUMBER;
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR (200);
-- De importvelden:
v_projekt VARCHAR2 (60);
v_ruimte VARCHAR2 (60);
v_apparaat_nummer VARCHAR2 (60);
v_apparaat_naam VARCHAR2 (60);
v_status VARCHAR2 (60);
v_gebruiker VARCHAR2 (60);
v_testdatum VARCHAR2 (60);
v_geldig_tot VARCHAR2 (60);
v_locatie VARCHAR2 (60);
v_activiteit VARCHAR2 (60);
v_commentaar VARCHAR2 (60);
v_reparatie_code VARCHAR2 (60);
v_visuele_test VARCHAR2 (60);
v_isolatie_sonde VARCHAR2 (60);
v_vermogen VARCHAR2 (60);
v_beschermingsleiding VARCHAR2 (60);
v_isolatie VARCHAR2 (60);
-- Overig:
v_ins_controle_datum_d DATE; -- DATE
CURSOR c1
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
DELETE FROM mare_imp_insp_metrel;
COMMIT;
-- Het aangeleverde bestand heeft de gegevens komma gescheiden ipv ;
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, '","', ';')
WHERE fac_import_key = p_import_key;
-- Ook heeft het aangeleverde bestand "" om de string staan, na bovenstaand om de gehele string zelfs.
v_errorhint := 'Delimiter goed zetten';
UPDATE fac_imp_file
SET fac_imp_file_line = REPLACE (fac_imp_file_line, '"', '')
WHERE fac_import_key = p_import_key;
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_errormsg := 'Fout bij opvragen importregel';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_delim, v_projekt);
fac.imp_getfield (v_newline, c_delim, v_ruimte);
fac.imp_getfield (v_newline, c_delim, v_apparaat_nummer);
fac.imp_getfield (v_newline, c_delim, v_apparaat_naam);
fac.imp_getfield (v_newline, c_delim, v_status);
fac.imp_getfield (v_newline, c_delim, v_gebruiker);
fac.imp_getfield (v_newline, c_delim, v_testdatum);
fac.imp_getfield (v_newline, c_delim, v_geldig_tot);
fac.imp_getfield (v_newline, c_delim, v_locatie);
fac.imp_getfield (v_newline, c_delim, v_activiteit);
fac.imp_getfield (v_newline, c_delim, v_commentaar);
fac.imp_getfield (v_newline, c_delim, v_reparatie_code);
fac.imp_getfield (v_newline, c_delim, v_visuele_test);
fac.imp_getfield (v_newline, c_delim, v_isolatie_sonde);
fac.imp_getfield (v_newline, c_delim, v_vermogen);
fac.imp_getfield (v_newline, c_delim, v_beschermingsleiding);
fac.imp_getfield (v_newline, c_delim, v_isolatie);
v_aanduiding :=
'[' || v_apparaat_nummer || ' (' || v_apparaat_naam || ')] ';
-- 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_projekt) = 'PROJEKT'
AND UPPER (v_ruimte) = 'RUIMTE'
AND UPPER (v_apparaat_nummer) = 'APPARAAT/PROJECT' --Deze header is de enige die qua naam afwijkt van naam variabele
AND UPPER (v_apparaat_naam) = 'APPARAAT NAAM'
AND UPPER (v_status) = 'STATUS'
AND UPPER (v_gebruiker) = 'GEBRUIKER'
AND UPPER (v_testdatum) = 'TESTDATUM'
AND UPPER (v_geldig_tot) = 'GELDIG TOT'
AND UPPER (v_locatie) = 'LOCATIE'
AND UPPER (v_activiteit) = 'ACTIVITEIT'
AND UPPER (v_commentaar) = 'COMMENTAAR'
AND UPPER (v_reparatie_code) = 'REPARATIE CODE'
AND UPPER (v_visuele_test) = 'VISUELE TEST'
AND UPPER (v_isolatie_sonde) = 'ISOLATIE SONDE'
AND UPPER (v_vermogen) = 'VERMOGEN'
AND UPPER (v_beschermingsleiding) = 'BESCHERMINGSLEIDING'
AND UPPER (v_isolatie) = 'ISOLATIE'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Locatiecode ongeldig';
v_projekt := TRIM (v_projekt);
IF LENGTH (v_projekt) > 60
THEN
v_projekt := SUBSTR (v_projekt, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Projekt wordt afgebroken tot [' || v_projekt || ']');
END IF;
v_ruimte := TRIM (v_ruimte);
IF LENGTH (v_ruimte) > 60
THEN
v_ruimte := SUBSTR (v_ruimte, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Ruimte wordt afgebroken tot [' || v_ruimte || ']');
END IF;
v_apparaat_nummer := TRIM (v_apparaat_nummer);
IF LENGTH (v_apparaat_nummer) > 60
THEN
v_apparaat_nummer := SUBSTR (v_apparaat_nummer, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Apparaat nummer wordt afgebroken tot ['
|| v_apparaat_nummer
|| ']');
END IF;
v_apparaat_naam := TRIM (v_apparaat_naam);
IF LENGTH (v_apparaat_naam) > 60
THEN
v_apparaat_naam := SUBSTR (v_apparaat_naam, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Apparaat naam wordt afgebroken tot ['
|| v_apparaat_naam
|| ']');
END IF;
v_status := TRIM (v_status);
IF LENGTH (v_status) > 60
THEN
v_status := SUBSTR (v_status, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Status wordt afgebroken tot [' || v_status || ']');
END IF;
v_gebruiker := TRIM (v_gebruiker);
IF LENGTH (v_gebruiker) > 60
THEN
v_gebruiker := SUBSTR (v_gebruiker, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Gebruiker wordt afgebroken tot [' || v_gebruiker || ']');
END IF;
v_testdatum := TRIM (v_testdatum);
IF LENGTH (v_testdatum) > 60
THEN
v_testdatum := SUBSTR (v_testdatum, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Testdatum wordt afgebroken tot [' || v_testdatum || ']');
END IF;
v_geldig_tot := TRIM (v_geldig_tot);
IF LENGTH (v_geldig_tot) > 60
THEN
v_geldig_tot := SUBSTR (v_geldig_tot, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Geldig tot wordt afgebroken tot [' || v_geldig_tot || ']');
END IF;
v_locatie := TRIM (v_locatie);
IF LENGTH (v_locatie) > 60
THEN
v_locatie := SUBSTR (v_locatie, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Locatie wordt afgebroken tot [' || v_locatie || ']');
END IF;
v_activiteit := TRIM (v_activiteit);
IF LENGTH (v_activiteit) > 60
THEN
v_activiteit := SUBSTR (v_activiteit, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Activiteit wordt afgebroken tot [' || v_activiteit || ']');
END IF;
v_commentaar := TRIM (v_commentaar);
IF LENGTH (v_commentaar) > 60
THEN
v_commentaar := SUBSTR (v_commentaar, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Commentaar wordt afgebroken tot [' || v_commentaar || ']');
END IF;
v_reparatie_code := TRIM (v_reparatie_code);
IF LENGTH (v_reparatie_code) > 60
THEN
v_reparatie_code := SUBSTR (v_reparatie_code, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Reparatiecode wordt afgebroken tot ['
|| v_reparatie_code
|| ']');
END IF;
v_visuele_test := TRIM (v_visuele_test);
IF LENGTH (v_visuele_test) > 60
THEN
v_visuele_test := SUBSTR (v_visuele_test, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Visuele test wordt afgebroken tot ['
|| v_visuele_test
|| ']');
END IF;
v_isolatie_sonde := TRIM (v_isolatie_sonde);
IF LENGTH (v_isolatie_sonde) > 60
THEN
v_isolatie_sonde := SUBSTR (v_isolatie_sonde, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Isolatie sonde wordt afgebroken tot ['
|| v_isolatie_sonde
|| ']');
END IF;
v_vermogen := TRIM (v_vermogen);
IF LENGTH (v_vermogen) > 60
THEN
v_vermogen := SUBSTR (v_vermogen, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Vermogen wordt afgebroken tot [' || v_vermogen || ']');
END IF;
v_beschermingsleiding := TRIM (v_beschermingsleiding);
IF LENGTH (v_beschermingsleiding) > 60
THEN
v_beschermingsleiding := SUBSTR (v_beschermingsleiding, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Beschermingsgeleiding wordt afgebroken tot ['
|| v_beschermingsleiding
|| ']');
END IF;
v_isolatie := TRIM (v_isolatie);
IF LENGTH (v_isolatie) > 60
THEN
v_isolatie := SUBSTR (v_isolatie, 1, 60);
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Isolatie wordt afgebroken tot [' || v_isolatie || ']');
END IF;
-- Insert geformatteerde import record
IF v_ongeldig = 0
THEN
BEGIN
v_errormsg := 'Fout bij wegschrijven importregel';
INSERT INTO mare_imp_insp_metrel (alg_locatie_code,
ins_deel_omschrijving,
ins_srtcontrole_omschrijving,
ins_deelsrtcontrole_datum,
ins_deelsrtcontrole_opmerking,
apparaatnummer,
gebruiker,
status,
visuele_test,
isolatie_sonde,
vermogen,
beschermingsleiding,
isolatie)
VALUES (v_locatie,
v_apparaat_naam,
'Metrel',
v_testdatum,
v_commentaar,
v_apparaat_nummer,
v_gebruiker,
v_status,
v_visuele_test,
v_isolatie_sonde,
v_vermogen,
v_beschermingsleiding,
v_isolatie);
COMMIT;
v_count_import := v_count_import + 1;
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,
'W',
v_aanduiding || v_errormsg,
'');
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',
'Inspectieobjecten/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Inspectieobjecten/aantal ongeldige niet ingelezen importregels: '
|| 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 inspectieobjecten afgebroken!' || v_errorhint);
END mare_import_insp_metrel;
/
CREATE OR REPLACE PROCEDURE mare_update_insp_metrel (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER (10);
v_count_tot NUMBER (10);
v_count_cupdate NUMBER (10);
v_aanduiding VARCHAR (200);
CURSOR c1
IS
SELECT i.alg_locatie_code,
i.ins_deel_omschrijving,
i.ins_srtcontrole_omschrijving,
i.ins_deelsrtcontrole_datum,
i.ins_deelsrtcontrole_opmerking,
i.apparaatnummer,
i.gebruiker,
i.status,
i.visuele_test,
i.isolatie_sonde,
i.vermogen,
i.beschermingsleiding,
i.isolatie,
ad.ins_srtdeel_key,
g.ins_srtgroep_key,
ad.ins_discipline_key,
al.alg_locatie_key,
sc.ins_srtcontrole_key,
sc.ins_srtinstallatie_key,
ad.ins_deel_key,
u.ultimonummer,
u.uniek_nummer
FROM mare_imp_insp_metrel i,
ins_srtcontrole sc,
ins_v_aanwezigdeel ad,
ins_srtdeel sd,
ins_srtgroep g,
alg_v_aanweziglocatie al,
mare_v_objectnummers u
WHERE fac.safe_to_number (i.apparaatnummer) = u.uniek_nummer
AND ad.ins_deel_key = u.ins_deel_key(+)
AND sd.ins_srtdeel_key(+) = ad.ins_srtdeel_key
AND g.ins_srtgroep_key(+) = sd.ins_srtgroep_key
AND al.alg_locatie_key(+) = ad.ins_alg_locatie_key
AND sd.ins_srtdeel_key = sc.ins_srtinstallatie_key
AND sc.ins_srtcontrole_niveau = 'S'
AND UPPER (sc.ins_srtcontrole_omschrijving) LIKE '%METREL%';
v_deel_key NUMBER (10);
v_kenmerk_key NUMBER (10);
v_kenmerkdeel_key NUMBER (10);
v_srtcontrole_id VARCHAR2 (20);
v_controlemode_succes_key NUMBER (10);
v_controlemode_afkeur_key NUMBER (10);
v_deelsrtcontrole_key NUMBER (10);
BEGIN
v_count := 0;
v_count_tot := 0;
v_count_cupdate := 0;
v_aanduiding := '';
--
FOR rec IN c1
LOOP
BEGIN
v_count_tot := v_count_tot + 1;
v_aanduiding :=
'['
|| rec.ins_deel_omschrijving
|| '|'
|| rec.alg_locatie_code
|| '|'
|| rec.ins_srtcontrole_omschrijving
|| '|'
|| rec.ins_deelsrtcontrole_datum
|| '] ';
-- We kunnen alleen iets met objecten die we kennen!
IF (rec.ins_deel_key IS NULL OR rec.alg_locatie_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Objectcode onbekend (binnen locatie); regel wordt overgeslagen',
v_aanduiding);
CONTINUE;
END IF;
-- Zonder datum doen we niks
IF (rec.ins_deelsrtcontrole_datum IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen datum ingevuld; regel wordt overgeslagen',
v_aanduiding);
CONTINUE;
END IF;
-- Kennen we de srtcontrole uberhaupt?
IF (rec.ins_srtcontrole_key IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Soort taak onbekend; regel wordt overgeslagen',
v_aanduiding);
CONTINUE;
END IF;
-- En hoort die srtcontrole ook bij deze objectsoort/-groep/discipline?
v_errormsg := 'srtcontrole bij objectsoort';
SELECT COUNT ( * )
INTO v_count
FROM ins_srtcontrole sc
WHERE sc.ins_srtcontrole_key = rec.ins_srtcontrole_key
AND sc.ins_srtinstallatie_key =
DECODE (sc.ins_srtcontrole_niveau,
'S', rec.ins_srtdeel_key,
'G', rec.ins_srtgroep_key,
'D', rec.ins_discipline_key);
-- Nee --> overslaan
IF (v_count = 0)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Soort taak hoort niet bij object; regel wordt overgeslagen',
v_aanduiding);
CONTINUE;
END IF;
-- TODO: kan een srtcontrole meerdere malen aan een object gekoppeld zijn? Dan dat nog specifieker bepalen?
IF (rec.ins_deelsrtcontrole_datum IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen datum opgegeven; regel wordt overgeslagen',
v_aanduiding);
CONTINUE;
END IF;
v_errormsg := 'Fout bij bepalen controlemethode succes';
SELECT MIN (cm.ins_controlemode_key)
INTO v_controlemode_succes_key
FROM ins_controlemode cm, ctr_disc_params dp, ins_srtcontrole sc
WHERE cm.ins_controlemode_success = 1
AND cm.ins_srtcontrole_type =
dp.ctr_disc_params_controle_type
AND dp.ctr_ins_discipline_key = sc.ctr_discipline_key
AND sc.ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_errormsg := 'Fout bij bepalen controlemethode afgekeurd';
SELECT MIN (cm.ins_controlemode_key)
INTO v_controlemode_afkeur_key
FROM ins_controlemode cm, ctr_disc_params dp, ins_srtcontrole sc
WHERE cm.ins_controlemode_success = 0
AND cm.ins_srtcontrole_type =
dp.ctr_disc_params_controle_type
AND dp.ctr_ins_discipline_key = sc.ctr_discipline_key
AND sc.ins_srtcontrole_key = rec.ins_srtcontrole_key;
-- TODO: ins_deelsrtcontrole_datum_org is de datum waarop de taak eigenlijk gedaan had
-- moeten worden. Die staat bij taken met standaardperiode 0 in ins_srtcontroledl_xcp en
-- zal doorgaans afwijken van de datum in het importbestand.
v_errormsg := 'Fout bij toevoegen controle';
INSERT INTO ins_deelsrtcontrole (ins_deel_key,
ins_srtcontrole_key,
ins_deelsrtcontrole_datum,
ins_deelsrtcontrole_datum_org,
ins_controlemode_key,
ins_deelsrtcontrole_opmerking)
VALUES (rec.ins_deel_key,
rec.ins_srtcontrole_key,
SYSDATE,
SYSDATE,
DECODE (NULL, --rec.afgekeurd
NULL, v_controlemode_succes_key,
v_controlemode_afkeur_key),
rec.ins_deelsrtcontrole_opmerking)
RETURNING ins_deelsrtcontrole_key
INTO v_deelsrtcontrole_key;
IF (rec.status IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Status';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 41; --Taakkenmerk 'Status'
v_errormsg := 'Kenmerk Status vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.status);
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,
v_aanduiding);
END;
END IF;
IF (rec.visuele_test IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Visuele test';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 42; --Taakkenmerk 'Visuele test'
v_errormsg := 'Kenmerk Visuele test vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key,
v_kenmerk_key,
rec.visuele_test);
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,
v_aanduiding);
END;
END IF;
IF (rec.isolatie_sonde IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Isolatie sonde';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 43; --Taakkenmerk 'Isolatie sonde'
v_errormsg := 'Kenmerk Isolatie sonde vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key,
v_kenmerk_key,
rec.isolatie_sonde);
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,
v_aanduiding);
END;
END IF;
IF (rec.vermogen IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Vermogen';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 44; --Taakkenmerk 'Vermogen'
v_errormsg := 'Kenmerk Vermogen vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.vermogen);
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,
v_aanduiding);
END;
END IF;
IF (rec.beschermingsleiding IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Beschermingsleiding';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 45; --Taakkenmerk 'Beschermingsleiding'
v_errormsg := 'Kenmerk Beschermingsleiding vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key,
v_kenmerk_key,
rec.beschermingsleiding);
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,
v_aanduiding);
END;
END IF;
IF (rec.isolatie IS NOT NULL)
THEN
BEGIN
v_errormsg := 'Fout bij bepalen kenmerk Isolatie';
SELECT MIN (ins_kenmerk_key)
INTO v_kenmerk_key
FROM ins_kenmerk k, ins_srtkenmerk sk, ins_srtcontrole sc
WHERE k.ins_kenmerk_niveau = 'C'
AND k.ins_srtinstallatie_key = sc.ins_srtcontrole_key
AND k.ins_kenmerk_verwijder IS NULL
AND k.ins_srtinstallatie_key = rec.ins_srtcontrole_key
AND k.ins_srtkenmerk_key = 46; --Taakkenmerk 'Isolatie'
v_errormsg := 'Kenmerk Isolatie vastleggen';
INSERT INTO ins_kmdeelsrtcontr (ins_deelsrtcontrole_key,
ins_kenmerk_key,
ins_kmdeelsrtcontr_waarde)
VALUES (v_deelsrtcontrole_key, v_kenmerk_key, rec.isolatie);
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,
v_aanduiding);
END;
END IF;
v_count_cupdate := v_count_cupdate + 1;
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,
v_aanduiding);
END;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'Aantal ingelezen taken: ' || TO_CHAR (v_count_tot),
'');
fac.imp_writelog (p_import_key,
'S',
'Aantal verwerkte taken: ' || TO_CHAR (v_count_cupdate),
'');
COMMIT;
END mare_update_insp_metrel;
/
CREATE OR REPLACE VIEW MARE_V_NOTI_CNTREMINDER
(
CODE,
SENDER,
RECEIVER,
TEXT,
KEY,
PAR1,
PAR2,
XKEY,
XEMAIL,
XMOBILE,
FAC_SRTNOTIFICATIE_KEY,
ATTACHMENTS,
XSENDER,
PRS_BEDRIJFADRES_KEY
)
AS
SELECT '',
'',
c.prs_perslid_key_beh, -- Contractbeheerder
--beh.prs_perslid_key, -- Contractbeheerders
'Rappel: Contract '
|| c.cnt_contract_nummer_intern
|| DECODE (cnt_contract_versie,
NULL, '',
'.' || cnt_contract_versie)
|| ' ('
|| c.cnt_contract_omschrijving
|| ' '
|| b.prs_bedrijf_naam
|| ')'
|| ' moet uiterlijk per '
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
cnt.cnt_getopzegdatum (c.cnt_contract_key),
NULL,
NULL
xemail,
NULL
xmobile,
NULL
fac_srtnotificatie_key,
NULL
attachments,
NULL
xsender,
NULL
prs_bedrijfadres_key
FROM cnt_v_aanwezigcontract c, prs_bedrijf b--, fac_gebruikersgroep beh
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
--AND beh.fac_groep_key = 81 -- Autorisatiegroep Contractbeheerders
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
UNION ALL
SELECT '',
'',
c.prs_perslid_key_eig, -- Eigenaar / verantwoordelijk manager
'Rappel: Contract '
|| c.cnt_contract_nummer_intern
|| DECODE (cnt_contract_versie,
NULL, '',
'.' || cnt_contract_versie)
|| ' ('
|| c.cnt_contract_omschrijving
|| ' '
|| b.prs_bedrijf_naam
|| ')'
|| ' moet uiterlijk per '
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
cnt.cnt_getopzegdatum (c.cnt_contract_key),
NULL,
NULL
xemail,
NULL
xmobile,
NULL
fac_srtnotificatie_key,
NULL
attachments,
NULL
xsender,
NULL
prs_bedrijfadres_key
FROM cnt_v_aanwezigcontract c, prs_bedrijf b
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND c.prs_perslid_key_eig IS NOT NULL
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
AND cnt.cnt_getopzegdatum (c.cnt_contract_key))
UNION ALL
SELECT '',
'',
mt.prs_perslid_key,
'Rappel: Contract '
|| c.cnt_contract_nummer_intern
|| DECODE (cnt_contract_versie,
NULL, '',
'.' || cnt_contract_versie)
|| ' ('
|| c.cnt_contract_omschrijving
|| ' '
|| b.prs_bedrijf_naam
|| ')'
|| ' moet uiterlijk per '
|| TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key),
'DD-MM-YYYY')
|| ' worden verlengd of opgezegd.',
c.cnt_contract_key,
c.cnt_contract_nummer_intern,
cnt.cnt_getopzegdatum (c.cnt_contract_key),
NULL,
NULL
xemail,
NULL
xmobile,
NULL
fac_srtnotificatie_key,
NULL
attachments,
NULL
xsender,
NULL
prs_bedrijfadres_key
FROM cnt_v_aanwezigcontract c, prs_bedrijf b, fac_gebruikersgroep mt
WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
AND cnt_contract_verwijder IS NULL
AND cnt_contract_status = 0
AND c.cnt_contract_kosten >= 25000 -- MT leden enkel bij contractwaarde > <20>25000,-
AND mt.fac_groep_key = 181 -- Autorisatiegroep Contractinzage MT
AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key)
AND cnt.cnt_getopzegdatum (c.cnt_contract_key));
CREATE OR REPLACE VIEW mare_v_noti_restaurant
(
code,
sender,
receiver,
text,
key,
xkey,
xemail,
xmobile
)
AS
SELECT DISTINCT
'CUST01'
AS code,
NULL,
NULL,
'Notificatie melding '
|| m.mld_melding_key
|| ' '
|| m.mld_melding_onderwerp
|| ' ('
|| b.prs_bedrijf_naam
|| ')',
mo.mld_opdr_key,
NULL,
'reserveringen.bedrijfsrestaurant@provalu.nl',
NULL
FROM mld_melding M,
mld_opdr mo,
fac_tracking t,
prs_bedrijf b,
prs_bedrijfdienstlocatie bd,
fac_notificatie_job nj
WHERE mo.mld_melding_key = m.mld_melding_key
AND mo.mld_opdr_key = t.fac_tracking_refkey
AND mo.mld_uitvoerende_keys = b.prs_bedrijf_key
AND t.fac_srtnotificatie_key = 75 -- ORDNEW
AND b.prs_bedrijf_key = bd.prs_bedrijf_key
AND bd.prs_dienst_key = 2 -- Dienst Bakker
AND mo.mld_opdr_key NOT IN
(SELECT n.fac_tracking_refkey
FROM fac_tracking n
WHERE UPPER(fac_tracking_oms) like '%NOTIFICATIE CUST01 VERSTUURD AAN%')
AND t.fac_tracking_datum > nj.fac_notificatie_job_lastrun
AND nj.fac_notificatie_job_view = 'MARE_V_NOTI_RESTAURANT';
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile