Files
Customer/onces/AA/AAGN/AAGN#62728.sql
2020-07-30 14:55:14 +00:00

348 lines
12 KiB
SQL

--
-- $Id$
--
-- Script om alle voorwaarden voor Uitvoerende en Contactanten goed te zetten als vaste bijlage in technisch kanaal.
-- Op basis aangeleverde excellijst (zie ticket 62728)
DEFINE thisfile = 'AAGN#62728.SQL'
DEFINE dbuser = 'AAGN'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
-- Hulpview
CREATE OR REPLACE VIEW aaxx_v_bedradres_voorwaarden
AS
SELECT t.prs_relatietype_omschrijving,
b.prs_bedrijf_key,
b.prs_bedrijf_naam,
b.prs_bedrijf_uitvoerende,
b.prs_bedrijf_contract,
b.prs_overeenkomst_nr,
(SELECT kw.prs_kenmerklink_waarde
FROM prs_kenmerk k, prs_kenmerklink kw
WHERE kw.prs_link_key = b.prs_bedrijf_key
AND kw.prs_kenmerk_key = k.prs_kenmerk_key
AND k.prs_kenmerk_upper = 'OVEREENKOMST'
AND k.prs_kenmerk_niveau = 'B'
AND kw.prs_kenmerklink_verwijder IS NULL)
AS overeenkomst,
a.prs_bedrijfadres_key,
a.mld_typeopdr_key,
a.prs_bedrijfadres_type, -- O of C
DECODE (
a.prs_bedrijfadres_type,
'C', 'Contracten',
'O', COALESCE (o.mld_typeopdr_omschrijving,
'Geen/Overige opdrachten'),
'<?>')
AS Opdrachttype,
a.prs_bedrijfadres_flexfiles
AS BijlageMeesturen, -- 0 of 1 is JA , 2 = NEE -- ECHTER deze nemen we niet als voorwaarde mee in de bepaling of er wel/geen vaste bijlage mee moet. Staat daar namelijk los van...
a.prs_bedrijfadres_attachfile,
a.prs_bedrijfadres_url
FROM prs_bedrijf b,
prs_bedrijfadres a,
prs_relatietype t,
mld_typeopdr o
WHERE b.prs_relatietype_key = t.prs_relatietype_key
AND a.mld_typeopdr_key = o.mld_typeopdr_key(+)
AND b.prs_bedrijf_key = a.prs_bedrijf_key
AND b.prs_bedrijf_verwijder IS NULL
AND b.prs_bedrijf_intern IS NULL
AND (b.prs_bedrijf_uitvoerende = 1 OR b.prs_bedrijf_contract = 1)
AND a.prs_bedrijfadres_type in ('C','O') -- Dus alle relaties zonder kanalen op O en C worden niet meegenomen (er vanuitgaande dat dit ook geen actuele relaties zijn...
ORDER BY b.prs_bedrijf_key, a.prs_bedrijfadres_key
;
-- PROCEDURE om:
---- 1. De juiste bestanden als vaste bijlage te koppelen
---- 2. Projectkanaal aan te maken
CREATE OR REPLACE PROCEDURE aaxx_update_voorwaarden (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS
v_aanduiding VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- Per klantomgeving te vullen
v_cp_voorwaarden VARCHAR2 (1000) := 'HEYDAY_Algemene Inkoopvoorwaarden_Versie februari 2018.pdf' ;
v_ma_voorwaarden VARCHAR2 (1000) := '20 07 02 Inkoopvoorwaarden Gemeente Nijmegen.pdf' ;
v_projecttype_1 VARCHAR2 (1000) := 'Project RFQ' ;
v_projecttype_2 VARCHAR2 (1000) := 'Projectorder' ;
v_gedeeld_geheim VARCHAR2 (1000) := 'zaGtB7Wbne0DleYzcToWqDsU2cmqWkiK' ;
-- v_gedeeld_geheim_2 VARCHAR2 (1000) := 'S1QmqAnilEqxz2xydvLiSP6poS3UMhXA' ;
--- Overige
v_mld_typeopdr_key NUMBER (10);
v_custcode VARCHAR2 (10);
v_afmelder1_key NUMBER (10);
v_email_url VARCHAR2 (1000);
CURSOR cp
IS
SELECT *
FROM
aaxx_v_bedradres_voorwaarden v
WHERE v.prs_relatietype_omschrijving = 'Contracting party' ;
CURSOR ma
IS
SELECT *
FROM
aaxx_v_bedradres_voorwaarden v
WHERE v.prs_relatietype_omschrijving = 'Managing agent' ;
CURSOR pr
IS
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_bedrijf_email, v_projecttype_1 as projecttype
FROM prs_bedrijf b, aaxx_v_bedradres_voorwaarden v
WHERE b.prs_bedrijf_key = v.prs_bedrijf_key
AND b.prs_bedrijf_uitvoerende = 1
-- AND b.prs_bedrijf_email IS NOT NULL
AND NOT EXISTS
(SELECT v.prs_bedrijf_key
FROM aaxx_v_bedradres_voorwaarden v
WHERE v.prs_bedrijf_key = b.prs_bedrijf_key
AND v.opdrachttype = v_projecttype_1)
GROUP BY b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_bedrijf_email
UNION
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_bedrijf_email, v_projecttype_2 as projecttype
FROM prs_bedrijf b, aaxx_v_bedradres_voorwaarden v
WHERE b.prs_bedrijf_key = v.prs_bedrijf_key
AND b.prs_bedrijf_uitvoerende = 1
-- AND b.prs_bedrijf_email IS NOT NULL
AND NOT EXISTS
(SELECT v.prs_bedrijf_key
FROM aaxx_v_bedradres_voorwaarden v
WHERE v.prs_bedrijf_key = b.prs_bedrijf_key
AND v.opdrachttype = v_projecttype_2)
GROUP BY b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_bedrijf_email ;
BEGIN
-- Algemene waarden ophalen
SELECT fac_version_cust
INTO v_custcode
FROM fac_version ;
SELECT max(prs_perslid_key)
INTO v_afmelder1_key
FROM prs_perslid
WHERE prs_perslid_naam = 'Afmelder1' ;
FOR rec IN cp
LOOP
v_errorhint := 'Update prs_bedrijfadres CP: ' || rec.prs_bedrijf_key || ' ' || rec.prs_bedrijfadres_key;
-- standaard voorwaarden voor cp
IF v_cp_voorwaarden IS NULL -- Indien ze er niet zijn, dan leegmaken..
THEN
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = ''
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND rec.prs_bedrijfadres_attachfile IS NOT NULL
;
ELSE -- indien ze er wel zijn dan koppelen waar nodig..
IF rec.prs_overeenkomst_nr IS NULL AND rec.overeenkomst IS NULL AND INSTR(upper(rec.opdrachttype),'PROJECT')=0
THEN
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = v_cp_voorwaarden
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND (rec.prs_bedrijfadres_attachfile <>v_cp_voorwaarden OR rec.prs_bedrijfadres_attachfile IS NULL)
;
ELSE -- en anders weghalen
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = ''
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND rec.prs_bedrijfadres_attachfile IS NOT NULL
;
END IF;
END IF;
END LOOP;
FOR rec IN ma
LOOP
v_errorhint := 'Update prs_bedrijfadres MA: ' || rec.prs_bedrijf_key || ' ' || rec.prs_bedrijfadres_key;
-- standaard voorwaarden voor ma
IF v_ma_voorwaarden IS NULL -- Indien ze er niet zijn, dan leegmaken..
THEN
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = ''
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND rec.prs_bedrijfadres_attachfile IS NOT NULL
;
ELSE -- indien ze er wel zijn dan koppelen waar nodig..
IF rec.prs_overeenkomst_nr IS NULL AND rec.overeenkomst IS NULL AND INSTR(upper(rec.opdrachttype),'PROJECT')=0
THEN
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = v_ma_voorwaarden
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND (rec.prs_bedrijfadres_attachfile <>v_ma_voorwaarden OR rec.prs_bedrijfadres_attachfile IS NULL)
;
ELSE -- en anders weghalen
UPDATE prs_bedrijfadres
SET prs_bedrijfadres_attachfile = ''
WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key AND rec.prs_bedrijfadres_attachfile IS NOT NULL
;
END IF;
END IF;
END LOOP;
-- Vervolgens nog voor alle uitvoerders waar nog geen projectkanaal op aangemaakt is nog de projectkanalen toevoegen (zonder attachement)
FOR rec IN pr
LOOP
v_errorhint := 'Insert projectkanalen: ' || rec.prs_bedrijf_key;
SELECT mld_typeopdr_key
INTO v_mld_typeopdr_key
FROM mld_typeopdr
WHERE mld_typeopdr_omschrijving = rec.projecttype ;
-- url voor projectkanaal bepalen: Gelijk aan 'Geen/Overige opdrachten' (mits mailto:..). Anders pakken we (mits gevuld) emailadres uit bedrijf
SELECT max(a.prs_bedrijfadres_url)
INTO v_email_url
FROM aaxx_v_bedradres_voorwaarden v, prs_bedrijfadres a
WHERE v.prs_bedrijf_key = rec.prs_bedrijf_key
AND v.prs_bedrijfadres_key = a.prs_bedrijfadres_key
AND v.opdrachttype = 'Geen/Overige opdrachten'
AND INSTR (a.PRS_BEDRIJFADRES_URL, 'mailto:') > 0 ;
IF v_email_url IS NULL AND rec.prs_bedrijf_email IS NOT NULL
THEN
v_email_url := 'mailto:' || rec.prs_bedrijf_email ;
END IF;
-- Toevoegen kanaal
-- als email gevuld.... + afmelder 1 bekend
IF v_email_url IS NOT NULL AND v_afmelder1_key IS NOT NULL
THEN
INSERT INTO prs_bedrijfadres (prs_bedrijfadres_type,
mld_typeopdr_key,
alg_district_key,
alg_locatie_key,
prs_bedrijfadres_url,
prs_bedrijfadres_sender,
prs_bedrijfadres_replyaddress,
prs_bedrijfadres_username,
prs_bedrijfadres_password,
prs_bedrijfadres_authmethod,
prs_bedrijfadres_ordermode,
prs_bedrijfadres_soapaction,
prs_bedrijfadres_certificate,
prs_bedrijfadres_xsl,
prs_bedrijfadres_error_handler,
prs_bedrijfadres_ext,
prs_bedrijfadres_lockuser_key,
prs_bedrijfadres_locksecret,
prs_bedrijfadres_lockexpire,
prs_bedrijfadres_loglevel,
prs_bedrijfadres_attachfile,
prs_bedrijfadres_flexfiles,
prs_bedrijfadres_encoding,
prs_bedrijfadres_charset,
prs_bedrijf_key)
VALUES ('O',
v_mld_typeopdr_key,
NULL,
NULL,
v_email_url, --'mailto:j.migo@facilitor.nl',
NULL,
NULL,
NULL,
NULL,
0,
0,
NULL,
NULL,
'xsl/' || v_custcode || '.xsl',
0,
NULL,
v_afmelder1_key,
v_gedeeld_geheim, --'O043MgvfGJTvvR4QnypfngGLKjeMXpMX',
30,
0,
NULL,
0,
0,
NULL,
rec.prs_bedrijf_key) ;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
fac.writelog (p_applname,
'E',
v_errormsg,
v_errorhint);
END aaxx_update_voorwaarden;
/
-- Procedure uitvoeren
begin aaxx_update_voorwaarden ('update_voorwaarden',null);
end;
/
-- Alles weer droppen
DROP VIEW aaxx_v_bedradres_voorwaarden ;
DROP PROCEDURE aaxx_update_voorwaarden ;
------ 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