-- -- $Id$ -- -- Script om alle voorwaarden voor Uitvoerende en Contactanten goed te zetten als vaste bijlage in technisch kanaal. -- Onder ticket 62728 en 69749 is dit in 2020 en 2021 al voor heel HEYDAY/breed uitgevoerd. Voor AAES gelden nu net wat andere condities omdat ze alleen nog maar conform CP werken ---- Allen voor Projectorders + ProjectRFQ op 1-10 doorgevoerd. In kader van 69749 deze opnieuw gedraaid, dit maal voor alle CP-kanalen ---- Voor alle CP-Relaties (ook al heeft men via 'Overeenkomstnr' andere overeenkomst) de Heyday_algemene_voorwaarden koppelen DEFINE thisfile = 'AAES#68038.SQL' DEFINE dbuser = 'AAES' 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, a.prs_bedrijfadres_lockuser_key, p.prs_perslid_naam, a.prs_bedrijfadres_locksecret, CASE WHEN a.prs_bedrijfadres_type = 'O' THEN COALESCE(t.totaal, 0) ELSE NULL END totaal, CASE WHEN a.prs_bedrijfadres_type = 'O' THEN DECODE(a.mld_typeopdr_key, NULL, NULL, COALESCE(st.subtotaal, 0)) ELSE NULL END subtotaal FROM prs_bedrijf b, prs_bedrijfadres a, prs_relatietype t, mld_typeopdr o, prs_perslid p, (SELECT mld_uitvoerende_keys, COUNT (*) totaal FROM mld_opdr WHERE mld_statusopdr_key IN (3, 4, 5, 8, 10) -- lopende opdrachten GROUP BY mld_uitvoerende_keys) t, -- totaal (SELECT mld_uitvoerende_keys, mld_typeopdr_key, COUNT (*) subtotaal FROM mld_opdr WHERE mld_statusopdr_key IN (3, 4, 5, 8, 10) -- lopende opdrachten GROUP BY mld_uitvoerende_keys, mld_typeopdr_key) st -- subtotaal 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... AND a.prs_bedrijfadres_lockuser_key = p.prs_perslid_key (+) AND b.prs_bedrijf_key = t.mld_uitvoerende_keys (+) AND (b.prs_bedrijf_key = st.mld_uitvoerende_keys (+) AND o.mld_typeopdr_key = st.mld_typeopdr_key (+) ) ORDER BY b.prs_bedrijf_key, a.prs_bedrijfadres_key ; -- PROCEDURE om: ---- 0. Te checken en corrigeren dat op elk Opdracht-kanaal ook de afmelder1 en uniek lock_secret is aangemaakt ---- 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 november 2021.pdf' ; v_ma_voorwaarden VARCHAR2 (1000) := NULL ; -- Uit 2020 - 'RWE Algemene Technische Inkoopvoorwaarden 2017 v1.3.pdf' ; v_projecttype_1 VARCHAR2 (1000) := 'Project RFQ' ; v_projecttype_2 VARCHAR2 (1000) := 'Projectorder' ; v_gedeeld_geheim VARCHAR2 (1000) := '45CfjXHOCDdhedyMNdDEzkVsN8QvHXcg' ; -- v_gedeeld_geheim_2 VARCHAR2 (1000) := '' ; --- Overige v_mld_typeopdr_key NUMBER (10); v_custcode VARCHAR2 (10); v_afmelder1_key NUMBER (10); v_email_url VARCHAR2 (1000); CURSOR ch -- Voor check en herstel van opdrachtkanalen. Moeten gevuld zijn met afmelder1 en gevuld met uniek gedeeld geheim IS SELECT * FROM aaxx_v_bedradres_voorwaarden v WHERE v.prs_bedrijfadres_type = 'O' ; 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' AND prs_perslid_verwijder IS NULL ; FOR rec IN ch LOOP v_errorhint := 'Check en herstel: ' || rec.prs_bedrijf_key || ' ' || rec.prs_bedrijfadres_key; -- gedeeld geheim op projectkanaal 2020 aangemaakt - vullen met random-waarde IF (rec.opdrachttype = v_projecttype_1 OR rec.opdrachttype = v_projecttype_2) AND rec.prs_bedrijfadres_locksecret = v_gedeeld_geheim AND rec.SUBTOTAAL = 0 -- Geen lopende opdrachten op!! THEN UPDATE prs_bedrijfadres SET prs_bedrijfadres_locksecret = DBMS_RANDOM.string('a', 32) WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key ; END IF; -- afmelder1 vullen waar nodig IF v_afmelder1_key IS NOT NULL AND rec.prs_bedrijfadres_lockuser_key IS NULL THEN UPDATE prs_bedrijfadres SET prs_bedrijfadres_lockuser_key = v_afmelder1_key, prs_bedrijfadres_locksecret = DBMS_RANDOM.string('a', 32) WHERE prs_bedrijfadres_key = rec.prs_bedrijfadres_key ; END IF; END LOOP; 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.. --- WAS 2020: IF rec.prs_overeenkomst_nr IS NULL AND rec.overeenkomst IS NULL AND INSTR(upper(rec.opdrachttype),'PROJECT')=0 --- WORDT NU - voor ALLE KANALEN -- IF 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) ; --- WAS 2020: ELSE -- en anders weghalen --- WORDT: Verder laten we alles zo staan /* 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 ---- 2020 - toen was er nog een MA-voorwaarden-PDF. ---- Nu niet meer dus we gaan voor volledigheid voor alle MA-leveranciers overal waar nog zo'n document gekoppeld is, deze verwijderen. 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; -- WAS 2020 - Vervolgens nog voor alle uitvoerders waar nog geen projectkanaal op aangemaakt is nog de projectkanalen toevoegen (zonder attachement) -- WORDT - Toevoegen inclusief Attachment v_cp_voorwaarden 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, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, 'xsl/' || v_custcode || '.xsl', 0, NULL, v_afmelder1_key, DBMS_RANDOM.string('a', 32), 30, 0, v_cp_voorwaarden, -- Was: 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