Files
Customer/AAGB/aagb.sql
Arthur Egberink 9e65ce0415 AAGB#74170 -- Implementatie Alliance Automotive Groep Benelux B.V.
svn path=/Customer/trunk/; revision=58748
2023-01-20 11:46:48 +00:00

521 lines
21 KiB
SQL
Raw Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'AAGB.SQL'
DEFINE dbuser = 'AAGB'
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 PACKAGE AAGB
AS
PROCEDURE tsk_ins_index (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY AAGB
AS
PROCEDURE tsk_ins_index (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
CURSOR c IS
SELECT d.ins_deel_key, kbedrag.ins_kenmerkdeel_key, kbedrag.ins_kenmerk_key, kbedrag.waarde bedrag, kindex.waarde indexatie
FROM ins_deel d,
(SELECT kd.ins_kenmerkdeel_waarde waarde,
kd.ins_kenmerkdeel_key,
kd.ins_deel_key
FROM ins_kenmerk k, ins_kenmerkdeel kd
WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 224 -- indexatiedatum
) kdatum,
(SELECT kd.ins_kenmerkdeel_waarde waarde,
kd.ins_kenmerkdeel_key,
kd.ins_deel_key
FROM ins_kenmerk k, ins_kenmerkdeel kd
WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 223 -- indexatie
) kindex,
(SELECT kd.ins_kenmerkdeel_waarde waarde,
k.ins_kenmerk_key,
kd.ins_kenmerkdeel_key,
kd.ins_deel_key
FROM ins_kenmerk k, ins_kenmerkdeel kd
WHERE k.ins_kenmerk_key = kd.ins_kenmerk_key
AND k.ins_srtkenmerk_key = 226 -- bedrag
) kbedrag
WHERE d.ins_deel_key = kdatum.ins_deel_key
AND d.ins_deel_key = kindex.ins_deel_key
AND d.ins_deel_key = kbedrag.ins_deel_key
AND FAC.SAFE_TO_DATE(kdatum.waarde, 'dd-mm-yyyy') = TRUNC(SYSDATE)
AND FAC.SAFE_TO_NUMBER(kbedrag.waarde) <> 0
ORDER BY ins_deel_key;
v_deel_key_prev NUMBER;
BEGIN
v_deel_key_prev := -1;
FOR rec IN c
LOOP
FLX.setflex ('INS', rec.ins_kenmerk_key, rec.ins_deel_key, rec.bedrag * (1 + rec.indexatie/100));
IF v_deel_key_prev <> rec.ins_deel_key
THEN
fac.trackaction ('INSUPD', rec.ins_deel_key, 3, SYSDATE, 'Object ge<67>ndexeerd met ' || rec.indexatie || '%');
v_deel_key_prev := rec.ins_deel_key;
END IF;
END LOOP;
END;
END;
/
-- Tijdelijke importroutine voor contactpersonen
CREATE OR REPLACE PROCEDURE aagb_import_contactpersoon (
p_import_key IN NUMBER)
IS
c_delim VARCHAR2 (2) := fac.import_delimiter (p_import_key);
v_newline fac_imp_file.fac_imp_file_line%TYPE; -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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_prs_bedrijf_naam VARCHAR2 (255); -- VARCHAR2(60),
v_prs_leverancier_nr VARCHAR2 (255); -- VARCHAR2(50),
v_prs_bedrijf_key NUMBER (10);
v_prs_bedrijfadres_type VARCHAR2 (255); -- VARCHAR2(1),
v_mld_typeopdr_omschrijving VARCHAR2 (255); -- NUMBER(10),
v_mld_typeopdr_key NUMBER (10);
v_prs_bedrijfadres_url VARCHAR2 (1000); -- VARCHAR2(512),
v_prs_bedrijfadres_ordermode VARCHAR2 (255); -- NUMBER(3),
v_prs_bedrijfadres_certificate VARCHAR2 (1000); -- VARCHAR2(255),
v_prs_bedrijfadres_xsl VARCHAR2 (1000); -- VARCHAR2(256),
v_prs_bedrijfadres_ext VARCHAR2 (255); -- VARCHAR2(10),
v_prs_bedrijfadres_attachfile VARCHAR2 (1000); -- VARCHAR2(256),
v_prs_bedrijfadres_username VARCHAR2 (255); -- VARCHAR2(32),
v_prs_bedrijfadres_password VARCHAR2 (1000); -- VARCHAR2(320)),
v_prs_bedrijfadres_sender VARCHAR2 (1000); -- VARCHAR2(512),
v_prs_bedrijfadres_lockuser VARCHAR2 (255); -- NUMBER(10),
v_lockuser_key NUMBER (10);
v_prs_bedrijfadres_lockexpire VARCHAR2 (255);
CURSOR c1 IS
SELECT fac_imp_csv_col01 prs_bedrijf_naam,
fac_imp_csv_col02 prs_leverancier_nr,
fac_imp_csv_col03 prs_persoonmatch_code,
fac_imp_csv_col04 prs_persoonmatch_waarde,
fac_imp_csv_col05 prs_achternaam,
fac_imp_csv_col06 prs_tussenvoegsel,
fac_imp_csv_col07 prs_voorletters,
fac_imp_csv_col08 prs_voornaam,
fac_imp_csv_col09 prs_titel,
fac_imp_csv_col10 prs_aanhef,
fac_imp_csv_col11 prs_telefoonnummer,
fac_imp_csv_col12 prs_mobiel,
fac_imp_csv_col13 prs_email,
fac_imp_csv_col14 prs_functie,
fac_imp_csv_col15 prs_opmerking,
fac_imp_csv_col16 prs_link_portal,
fac_imp_csv_col17 prs_locatie_code,
fac_imp_csv_key
FROM fac_imp_csv
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_csv_key;
BEGIN
--
fac_import_genericcsv (p_import_key);
-- Eerst opruiming
v_count_tot := 0;
v_count_import := 0;
header_is_valid := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_aanduiding :=
'['
|| rec1.prs_bedrijf_naam -- bedrijfsnaam
|| '|'
|| rec1.prs_achternaam -- achternaam
|| '] ';
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
-- de juiste kolomkop
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
IF (header_is_valid = 0)
THEN
IF UPPER (rec1.prs_bedrijf_naam) = 'BEDRIJFSNAAM'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
v_errormsg := 'Bedrijf niet gevonden';
BEGIN
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE COALESCE (prs_bedrijf_intern, 0) <> 1
AND prs_bedrijf_verwijder IS NULL
AND UPPER (prs_leverancier_nr) =
UPPER (TRIM (rec1.prs_leverancier_nr));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
BEGIN
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE COALESCE (prs_bedrijf_intern, 0) <> 1
AND prs_bedrijf_verwijder IS NULL
AND UPPER (prs_bedrijf_naam) =
UPPER (TRIM (rec1.prs_bedrijf_naam));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END;
END;
v_errormsg := 'Achternaam niet ingevuld';
IF rec1.prs_achternaam IS NULL
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
'Regel wordt overgeslagen');
v_ongeldig := 1;
END IF;
IF v_ongeldig = 0
THEN
UPDATE fac_imp_csv
SET fac_imp_csv_col18 = v_prs_bedrijf_key
WHERE fac_imp_csv_key = rec1.fac_imp_csv_key;
COMMIT;
v_count_import := v_count_import + 1;
END IF;
END IF;
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,
'');
COMMIT;
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',
'Adressen/aantal ingelezen importregels: '
|| TO_CHAR (v_count_tot),
'');
fac.imp_writelog (
p_import_key,
'S',
'Adressen/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 adressen afgebroken!');
END aagb_import_contactpersoon;
/
-- Notificatie om een mail te versturen als de einddatum van een locatie bereikt is.
CREATE OR REPLACE VIEW aagb_v_noti_loc_einddatum
(
sender,
receiver,
text,
code,
key,
xkey,
xsender,
xemail,
xmobile,
attachments
)
AS
SELECT NULL,
NULL,
'Locatie '
|| alg_locatie_code
|| ' - '
|| alg_locatie_omschrijving
|| ' heeft de einddatum bereikt',
'CUST01',
l.alg_locatie_key,
NULL,
NULL,
'inkoopfacility@allianceautomotive.nl',
NULL,
NULL
FROM alg_locatie l, alg_onrgoedkenmerk aogk
WHERE l.alg_locatie_key = aogk.alg_onrgoed_key
AND aogk.alg_kenmerk_key = 1160 -- einddatum
AND fac.safe_to_date (aogk.alg_onrgoedkenmerk_waarde,
'dd-mm-yyyy') =
TRUNC (SYSDATE);
-- Gestyled rapport met locatiegegevens. De kenmerken worden er bij gejoined zodat er per kenmerk een regel komt.
-- In de stylesheet kunnen we dan kiezen welke kenmerken er getoond worden.
CREATE OR REPLACE VIEW aagb_v_locatie_gegevens
AS
SELECT k.alg_locatie_key,
k.alg_locatie_code,
k.vm_email,
k.vm_telefoonnr,
k.rm_email,
k.rm_telefoonnr,
k.alg_locatie_omschrijving,
k.alg_locatie_adres,
k.alg_locatie_postcode,
k.alg_locatie_plaats,
k.alg_locatie_verantw_tel,
k.alg_kenmerk_key,
k.alg_kenmerk_omschrijving,
k.alg_kenmerk_volgnr,
k.alg_kenmerk_kenmerktype,
aog.alg_onrgoedkenmerk_waarde
FROM (SELECT l.*,
k.alg_kenmerk_key,
k.alg_kenmerk_omschrijving,
k.alg_kenmerk_volgnr,
k.alg_kenmerk_kenmerktype,
vm.prs_perslid_email vm_email,
vm.prs_perslid_telefoonnr vm_telefoonnr,
rm.prs_perslid_email rm_email,
rm.prs_perslid_telefoonnr rm_telefoonnr
FROM alg_kenmerk k,
alg_locatie l,
(SELECT prs_perslid_email,
prs_perslid_telefoonnr,
vmk.alg_onrgoed_key alg_locatie_key
FROM prs_perslid p, alg_onrgoedkenmerk vmk
WHERE vmk.alg_kenmerk_key = 1141
AND FAC.safe_to_number (vmk.alg_onrgoedkenmerk_waarde) =
p.prs_perslid_key) vm,
(SELECT prs_perslid_email,
prs_perslid_telefoonnr,
rmk.alg_onrgoed_key alg_locatie_key
FROM prs_perslid p, alg_onrgoedkenmerk rmk
WHERE rmk.alg_kenmerk_key = 1142
AND FAC.safe_to_number (rmk.alg_onrgoedkenmerk_waarde) =
p.prs_perslid_key) rm
WHERE alg_locatie_verwijder IS NULL
AND k.alg_kenmerk_niveau = 'L'
AND k.alg_kenmerk_kenmerktype NOT IN ('M', 'l')
AND k.alg_kenmerk_verwijder IS NULL
AND l.alg_locatie_key = vm.alg_locatie_key(+)
AND l.alg_locatie_key = rm.alg_locatie_key(+)) k
LEFT JOIN
(SELECT aog.alg_kenmerk_key,
aog.alg_onrgoed_key,
DECODE (
ak.alg_kenmerk_kenmerktype,
'R', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key,
alg_onrgoedkenmerk_waarde),
'S', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key,
alg_onrgoedkenmerk_waarde),
alg_onrgoedkenmerk_waarde) alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aog, alg_kenmerk ak
WHERE aog.alg_kenmerk_key = ak.alg_kenmerk_key) aog
ON k.alg_kenmerk_key = aog.alg_kenmerk_key
AND k.alg_locatie_key = aog.alg_onrgoed_key;
-- kenmerken van delen en locaties. Het gestylede rapport zorgt ervoor dat de kenmerken naar kolommen
-- omgezet worden.
CREATE OR REPLACE view aagb_v_deel_gegevens
AS
SELECT k.ins_srtdeel_omschrijving,
k.ins_srtgroep_omschrijving,
k.ins_discipline_omschrijving,
k.ins_deel_key,
'O-' || k.ins_kenmerk_omschrijving ins_kenmerk_omschrijving,
k.ins_kenmerk_volgnummer,
k.ins_srtkenmerk_kenmerktype,
ikd.ins_kenmerkdeel_waarde
FROM (SELECT d.ins_deel_omschrijving,
sd.ins_srtdeel_omschrijving,
sg.ins_srtgroep_omschrijving,
di.ins_discipline_omschrijving,
d.ins_deel_key,
k.ins_kenmerk_key,
k.ins_kenmerk_omschrijving,
1000 + k.ins_kenmerk_volgnummer ins_kenmerk_volgnummer,
sk.ins_srtkenmerk_kenmerktype
FROM ins_srtkenmerk sk,
ins_kenmerk k,
ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline di
WHERE ins_deel_verwijder IS NULL
AND sk.ins_srtkenmerk_key = k.ins_srtkenmerk_key
AND k.ins_srtinstallatie_key = d.ins_srtdeel_key
-- AND k.ins_kenmerk_niveau = 'D'
AND sk.ins_srtkenmerk_kenmerktype NOT IN ('M', 'l')
AND k.ins_kenmerk_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = di.ins_discipline_key) k
LEFT JOIN
(SELECT ikd.ins_kenmerk_key,
ikd.ins_deel_key,
DECODE (sk.ins_srtkenmerk_kenmerktype,
'R', FLX.getdomeinwaarde (sk.fac_kenmerkdomein_key, ins_kenmerkdeel_waarde),
'S', FLX.getdomeinwaarde (sk.fac_kenmerkdomein_key, ins_kenmerkdeel_waarde),
ins_kenmerkdeel_waarde) ins_kenmerkdeel_waarde
FROM ins_kenmerkdeel ikd, ins_kenmerk ik, ins_srtkenmerk sk
WHERE ikd.ins_kenmerk_key = ik.ins_kenmerk_key AND ik.ins_srtkenmerk_key = sk.ins_srtkenmerk_key) ikd
ON k.ins_kenmerk_key = ikd.ins_kenmerk_key AND k.ins_deel_key = ikd.ins_deel_key
UNION ALL
SELECT sd.ins_srtdeel_omschrijving,
sg.ins_srtgroep_omschrijving,
di.ins_discipline_omschrijving,
d.ins_deel_key,
'O-' || 'Omschrijving' ins_kenmerk_omschrijving,
1000,
'K',
d.ins_deel_omschrijving
FROM ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline di
WHERE ins_deel_verwijder IS NULL
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = di.ins_discipline_key
UNION ALL
SELECT ins_srtdeel_omschrijving,
ins_srtgroep_omschrijving,
ins_discipline_omschrijving,
ins_deel_key,
'L-' || k.alg_kenmerk_omschrijving,
k.alg_kenmerk_volgnr,
k.alg_kenmerk_kenmerktype,
aog.alg_onrgoedkenmerk_waarde
FROM (SELECT l.alg_locatie_key,
d.ins_deel_omschrijving,
sd.ins_srtdeel_omschrijving,
sg.ins_srtgroep_omschrijving,
di.ins_discipline_omschrijving,
d.ins_deel_key,
k.alg_kenmerk_key,
k.alg_kenmerk_omschrijving,
k.alg_kenmerk_volgnr,
k.alg_kenmerk_kenmerktype
FROM alg_kenmerk k,
alg_locatie l,
ins_deel d,
ins_srtdeel sd,
ins_srtgroep sg,
ins_discipline di
WHERE alg_locatie_verwijder IS NULL
AND k.alg_kenmerk_niveau = 'L'
AND k.alg_kenmerk_kenmerktype NOT IN ('M', 'l')
AND k.alg_kenmerk_verwijder IS NULL
AND l.alg_locatie_key = d.ins_alg_locatie_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
AND sg.ins_discipline_key = di.ins_discipline_key) k
LEFT JOIN
(SELECT aog.alg_kenmerk_key,
aog.alg_onrgoed_key,
DECODE (ak.alg_kenmerk_kenmerktype,
'R', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde),
'S', FLX.getdomeinwaarde (ak.fac_kenmerkdomein_key, alg_onrgoedkenmerk_waarde),
alg_onrgoedkenmerk_waarde) alg_onrgoedkenmerk_waarde
FROM alg_onrgoedkenmerk aog, alg_kenmerk ak
WHERE aog.alg_kenmerk_key = ak.alg_kenmerk_key) aog
ON k.alg_kenmerk_key = aog.alg_kenmerk_key AND k.alg_locatie_key = aog.alg_onrgoed_key;
CREATE OR REPLACE PROCEDURE aagb_daily
AS
BEGIN
-- indexering van de objecten
AAGB.tsk_ins_index('INS_INDEXERING', 'SYSDATE');
END;
/
------ 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