From ee58dab7eb316b2723a1cda5ba04b8a626ae8e21 Mon Sep 17 00:00:00 2001 From: Jos Migo Date: Thu, 23 Dec 2021 16:26:39 +0000 Subject: [PATCH] AAIT#69749 -- Algemene inkoopvoorwaarden voor MA en CP doorvoeren + check/herstel afmelder1 en locksecret1 - per klantomgeving oncescript svn path=/Customer/; revision=54293 --- onces/AA/SMKA/SMKA#69749.sql | 410 +++++++++++++++++++++++++++++++++++ 1 file changed, 410 insertions(+) create mode 100644 onces/AA/SMKA/SMKA#69749.sql diff --git a/onces/AA/SMKA/SMKA#69749.sql b/onces/AA/SMKA/SMKA#69749.sql new file mode 100644 index 000000000..6adfd898b --- /dev/null +++ b/onces/AA/SMKA/SMKA#69749.sql @@ -0,0 +1,410 @@ +-- +-- $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 = 'SMKA#69749.SQL' +DEFINE dbuser = 'SMKA' + +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) := '' ; + v_projecttype_1 VARCHAR2 (1000) := 'Project RFQ' ; + v_projecttype_2 VARCHAR2 (1000) := 'Projectorder' ; + v_gedeeld_geheim VARCHAR2 (1000) := 'R-Fpe28qAzcKxSQ4covegMDoHRGq8gup' ; + -- 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.. + 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, + NULL, + NULL, + NULL, + NULL, + 0, + 0, + NULL, + NULL, + 'xsl/' || v_custcode || '.xsl', + 0, + NULL, + v_afmelder1_key, + DBMS_RANDOM.string('a', 32), + 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 \ No newline at end of file