-- -- $Id$ -- -- Script containing customer specific db-configuration for SVRZ. DEFINE thisfile = 'SVRZ.SQL' DEFINE dbuser = '^SVRZ' 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 VIEW svrz_v_rap_import_log ( fclt_f_applicatie, datum, fclt_f_status, omschrijving, hint ) AS SELECT COALESCE (fac_import_app_code, imp_log_applicatie), TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'), imp_log_status, imp_log_omschrijving, imp_log_hint FROM imp_log il1, fac_import fi1, fac_import_app fia1 WHERE il1.fac_import_key = fi1.fac_import_key(+) AND fi1.fac_import_app_key = fia1.fac_import_app_key(+) AND NOT EXISTS (SELECT 1 FROM imp_log il2, fac_import fi2 WHERE il2.fac_import_key = fi2.fac_import_key AND fi2.fac_import_app_key = fi1.fac_import_app_key AND il2.fac_import_key > il1.fac_import_key); CREATE OR REPLACE PROCEDURE svrz_import_perslid (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errorhint := 'Generieke import'; -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE. prs.import_perslid ( p_import_key, '0;0;0;0;0;0;7;2;3;5;' || '4;0;0;0;0;15;16;17;0;1;' || '8;18;19;6;0;0;20;21;0;0;' || '0;0;0;0;0;0;0;0;0;0;' || '0;0;0;0;0;0', 'personeelsnummer;achternaam;tussenvoegsel;voorletters;voornaam;titel_aanhef;afdelingscode;functie;locatiecode;gebouwcode;bouwlaagvolgnummer;ruimtenummer;werkplekvolgnummer;omschrijving;telefoonnummer;mobiel;email;loginnaam;password;indienstdatum;uitdienstdatum%'); COMMIT; v_errorhint := 'Fout bepalen stamplaats'; -- Klantspecifieke aanpassingen. -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Afd.code-kolom -> Eigen tabel (key=101) -> -- Locatiecode en daaronder de alfabetisch eerste Fictieve ruimte! -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon naar -- naar de bepaalde Ruimte op import-locatie! -- Eventuele WPs onder andere vestigingen dan import-vestiging blijven ook ongewijzigd! UPDATE fac_imp_perslid i SET i.alg_locatie_code = (SELECT il.alg_locatie_code FROM fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie il WHERE ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND ud.fac_usrdata_upper = UPPER (i.prs_afdeling_naam) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code)), i.alg_gebouw_code = (SELECT g1.alg_gebouw_code FROM fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie l1, alg_v_aanweziggebouw g1, alg_v_aanwezigverdieping v1, alg_v_aanwezigruimte r1 WHERE ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND ud.fac_usrdata_upper = UPPER (i.prs_afdeling_naam) AND UPPER (ud.fac_usrdata_omschr) = UPPER (l1.alg_locatie_code) AND l1.alg_locatie_key = g1.alg_locatie_key AND g1.alg_gebouw_key = v1.alg_gebouw_key AND v1.alg_verdieping_key = r1.alg_verdieping_key AND r1.alg_srtruimte_key = 101 -- Fictieve ruimte AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r2, alg_verdieping v2, alg_gebouw g2 WHERE r2.alg_srtruimte_key = 101 -- Fictieve ruimte AND r2.alg_verdieping_key = v2.alg_verdieping_key AND v2.alg_gebouw_key = g2.alg_gebouw_key AND g2.alg_gebouw_code || v2.alg_verdieping_code || r2.alg_ruimte_nr < g1.alg_gebouw_code || v1.alg_verdieping_code || r1.alg_ruimte_nr AND g2.alg_locatie_key = g1.alg_locatie_key)), i.alg_verdieping_volgnr = (SELECT v1.alg_verdieping_volgnr FROM fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie l1, alg_v_aanweziggebouw g1, alg_v_aanwezigverdieping v1, alg_v_aanwezigruimte r1 WHERE ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND ud.fac_usrdata_upper = UPPER (i.prs_afdeling_naam) AND UPPER (ud.fac_usrdata_omschr) = UPPER (l1.alg_locatie_code) AND l1.alg_locatie_key = g1.alg_locatie_key AND g1.alg_gebouw_key = v1.alg_gebouw_key AND v1.alg_verdieping_key = r1.alg_verdieping_key AND r1.alg_srtruimte_key = 101 -- Fictieve ruimte AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r2, alg_verdieping v2, alg_gebouw g2 WHERE r2.alg_srtruimte_key = 101 -- Fictieve ruimte AND r2.alg_verdieping_key = v2.alg_verdieping_key AND v2.alg_gebouw_key = g2.alg_gebouw_key AND g2.alg_gebouw_code || v2.alg_verdieping_code || r2.alg_ruimte_nr < g1.alg_gebouw_code || v1.alg_verdieping_code || r1.alg_ruimte_nr AND g2.alg_locatie_key = g1.alg_locatie_key)), i.alg_ruimte_nr = (SELECT r1.alg_ruimte_nr FROM fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie l1, alg_v_aanweziggebouw g1, alg_v_aanwezigverdieping v1, alg_v_aanwezigruimte r1 WHERE ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND ud.fac_usrdata_upper = UPPER (i.prs_afdeling_naam) AND UPPER (ud.fac_usrdata_omschr) = UPPER (l1.alg_locatie_code) AND l1.alg_locatie_key = g1.alg_locatie_key AND g1.alg_gebouw_key = v1.alg_gebouw_key AND v1.alg_verdieping_key = r1.alg_verdieping_key AND r1.alg_srtruimte_key = 101 -- Fictieve ruimte AND NOT EXISTS (SELECT 1 FROM alg_v_aanwezigruimte r2, alg_verdieping v2, alg_gebouw g2 WHERE r2.alg_srtruimte_key = 101 -- Fictieve ruimte AND r2.alg_verdieping_key = v2.alg_verdieping_key AND v2.alg_gebouw_key = g2.alg_gebouw_key AND g2.alg_gebouw_code || v2.alg_verdieping_code || r2.alg_ruimte_nr < g1.alg_gebouw_code || v1.alg_verdieping_code || r1.alg_ruimte_nr AND g2.alg_locatie_key = g1.alg_locatie_key)) WHERE NOT EXISTS -- Nog geen WP op Locatie! (SELECT 1 FROM fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie il, prs_v_aanwezigperslid p, prs_perslidwerkplek pw, prs_werkplek cw, alg_v_aanwezigruimte cr, alg_verdieping cv, alg_gebouw cg, alg_locatie cl WHERE ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND ud.fac_usrdata_upper = UPPER (i.prs_afdeling_naam) AND UPPER (ud.fac_usrdata_omschr) = UPPER (il.alg_locatie_code) AND p.prs_perslid_nr = i.prs_perslid_nr AND p.prs_perslid_key = pw.prs_perslid_key AND pw.prs_werkplek_key = cw.prs_werkplek_key AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key AND cr.alg_verdieping_key = cv.alg_verdieping_key AND cv.alg_gebouw_key = cg.alg_gebouw_key AND cg.alg_locatie_key = il.alg_locatie_key); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') '; fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!'); END svrz_import_perslid; / CREATE OR REPLACE PROCEDURE svrz_update_perslid (p_import_key IN NUMBER) IS v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; CURSOR c_flex IS SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_kenmerk1, i.prs_kenmerk2 FROM prs_v_aanwezigperslid p, fac_imp_perslid i WHERE p.prs_perslid_nr = i.prs_perslid_nr AND i.prs_kenmerk2 IS NOT NULL AND fac.safe_to_date (prs_kenmerk2, 'dd-mm-yyyy') > p.prs_perslid_ingangsdatum -- Uitdienstdatum moet vóór indienstdatum liggen! ORDER BY 2; -- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid! -- Dubbele perslid_nr? Dan wordt iemand mogelijk niet verwijderd/INACTIEF! CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr FROM prs_v_aanwezigperslid p WHERE p.prs_perslid_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_perslid i WHERE UPPER (i.prs_perslid_nr) = UPPER (p.prs_perslid_nr)) ORDER BY 2; -- SVRZ#78202: Toekennen extra WP op TS of TSMAX. -- Voor personen volgens import HR-WP op Ter Schorre: Extra WP op Maxima, -- namelijk 5488=MAX-BG-A.0001 (tenzij al andere WP ergens op Maxima). -- Voor personen volgens import HR-WP op Maxima: Extra WP op Ter Schorre, -- namelijk 3041=TS-BG-A.0001 (tenzij al andere WP ergens op Ter Schorre). CURSOR c_ts_max IS SELECT DISTINCT p.prs_perslid_key, p.prs_perslid_nr, DECODE (wpg.alg_locatie_key, 141, 5488, 3041) extra_ruimte_key FROM prs_v_aanwezigperslid p, prs_perslidwerkplek pw, prs_v_werkplek_gegevens wpg WHERE p.prs_perslid_key = pw.prs_perslid_key ANd pw.prs_perslidwerkplek_volgnr = 2 -- Alleen de medewerkers met een HR-WP op TS of TSMAX! AND pw.prs_werkplek_key = wpg.prs_werkplek_key AND wpg.alg_locatie_key IN (141, 311) -- TS/TSMAX AND NOT EXISTS -- Nog geen WP op extra TS-locatie (SELECT 1 FROM prs_v_werkplekperslid_gegevens WHERE prs_perslid_key = p.prs_perslid_key AND alg_locatie_key = DECODE (wpg.alg_locatie_key, 141, 311, 141)) ORDER BY 2; BEGIN -- Generieke update. SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid; IF v_count < 1000 THEN fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie specificatie'); RETURN; END IF; -- Generieke update, waarbij - alleen vaste en niet virtuele - WP(s) tot op -- District-niveau worden verwijderd. v_errorhint := 'Fout generieke update'; prs.update_perslid (p_import_key, 'NR', 'D'); -- Update flexvelden. -- SVRZ#59828: Registreren uitdienstdatum (tbv. bezittingen-noti). v_errorhint := 'Fout bijwerken uitdienstdatum'; FOR rec IN c_flex LOOP --PRS.upsertkenmerk (-1, rec.prs_perslid_key, TO_CHAR (fac.safe_to_date (rec.prs_kenmerk1, 'dd-mm-yyyy'), 'dd-mm-yyyy')); -- Indienst --PRS.upsertkenmerk (-1, rec.prs_perslid_key, TO_CHAR (fac.safe_to_date (rec.prs_kenmerk2, 'dd-mm-yyyy'), 'dd-mm-yyyy')); -- Uitdienst --UPDATE prs_perslid -- SET prs_perslid_ingangsdatum = COALESCE (fac.safe_to_date (rec.prs_kenmerk1, 'dd-mm-yyyy'), prs_perslid_ingangsdatum), -- prs_perslid_einddatum = COALESCE (fac.safe_to_date (rec.prs_kenmerk2, 'dd-mm-yyyy'), prs_perslid_einddatum) -- WHERE prs_perslid_key = rec.prs_perslid_key; UPDATE prs_perslid SET prs_perslid_einddatum = COALESCE (fac.safe_to_date (rec.prs_kenmerk2, 'dd-mm-yyyy'), prs_perslid_einddatum) WHERE prs_perslid_key = rec.prs_perslid_key; COMMIT; END LOOP; -- Verwijder personen die niet meer in de import voorkomen. v_errorhint := 'Fout verwijderen persoon'; FOR rec IN c_del LOOP prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- SVRZ#73838: Ook verwijderen e-mail adres bij/vanaf inactivatie, want -- dit gebeurt (nog) niet in prs.delete_perslid(). UPDATE prs_perslid SET prs_perslid_email = NULL WHERE prs_perslid_key = rec.prs_perslid_key AND prs_perslid_email IS NOT NULL; -- SVRZ#76558: Ook verwijderen autorisaties bij/vanaf inactivatie, want -- dit gebeurt (nog) niet in prs.delete_perslid(). DELETE FROM fac_gebruikersgroep WHERE prs_perslid_key = rec.prs_perslid_key; END LOOP; COMMIT; -- Elke PRS-import alle HR-WP opnieuw bepalen (dus eerst alle 2-WP wissen)! v_errorhint := 'Fout bijwerken HR-WP'; UPDATE prs_perslidwerkplek SET prs_perslidwerkplek_volgnr = NULL WHERE prs_perslidwerkplek_volgnr = 2; COMMIT; UPDATE prs_perslidwerkplek pw1 SET pw1.prs_perslidwerkplek_volgnr = 2 WHERE EXISTS -- Alleen WP op HR-locatie van import-personen waarvoor afdeling in mapping! (SELECT 1 FROM fac_imp_perslid i, prs_v_aanwezigperslid p, fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie l, alg_v_aanweziggebouw g, alg_v_aanwezigverdieping v, alg_v_aanwezigruimte r, prs_werkplek wp, prs_perslidwerkplek pw2 WHERE i.prs_perslid_nr = p.prs_perslid_nr AND UPPER (i.prs_afdeling_naam) = ud.fac_usrdata_upper AND ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND UPPER (ud.fac_usrdata_omschr) = UPPER (l.alg_locatie_code) AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = wp.prs_alg_ruimte_key AND wp.prs_werkplek_virtueel = 0 -- Echte WP! AND wp.prs_werkplek_key = pw2.prs_werkplek_key AND pw2.prs_perslid_key = p.prs_perslid_key AND pw2.prs_perslid_key = pw1.prs_perslid_key AND pw2.prs_werkplek_key = pw1.prs_werkplek_key) AND NOT EXISTS -- Geen hogere/oudere echte WP op HR-locatie! (SELECT 1 FROM fac_imp_perslid i, prs_v_aanwezigperslid p, fac_v_aanwezigusrdata ud, -- Mapping BO4-Afdelingscode -> Locatiecode alg_v_aanweziglocatie l, alg_v_aanweziggebouw g, alg_v_aanwezigverdieping v, alg_v_aanwezigruimte r, prs_werkplek wp, prs_perslidwerkplek pw2 WHERE i.prs_perslid_nr = p.prs_perslid_nr AND UPPER (i.prs_afdeling_naam) = ud.fac_usrdata_upper AND ud.fac_usrtab_key = 101 -- MappingOrg2Loc-tabel AND UPPER (ud.fac_usrdata_omschr) = UPPER (l.alg_locatie_code) AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = v.alg_gebouw_key AND v.alg_verdieping_key = r.alg_verdieping_key AND r.alg_ruimte_key = wp.prs_alg_ruimte_key AND wp.prs_werkplek_virtueel = 0 -- Echte WP! AND wp.prs_werkplek_key = pw2.prs_werkplek_key AND pw2.prs_perslid_key = p.prs_perslid_key AND pw2.prs_perslid_key = pw1.prs_perslid_key AND COALESCE (pw2.prs_perslidwerkplek_volgnr, pw2.prs_perslidwerkplek_key + 10000) < COALESCE (pw1.prs_perslidwerkplek_volgnr, pw1.prs_perslidwerkplek_key + 10000)); COMMIT; -- Toekennen extra WP op TS of TSMAX. -- De bij voorgaande import toegekende extra WPs zijn hierboven met -- prs.update_perslid (p_import_key, 'NR', 'D') weer verwijderd, omdat TS -- en MAX onder hetzelfde District vallen! v_errorhint := 'Fout toekennen extra WP op TS of MAX'; FOR rec IN c_ts_max LOOP prs.movetoruimte (rec.prs_perslid_key, rec.extra_ruimte_key, NULL); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') '; fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Importproces personen afgebroken!'); END svrz_update_perslid; / /* Formatted on 16-6-2014 21:48:12 (QP5 v5.136.908.31019) */ CREATE OR REPLACE PROCEDURE svrz_import_bedrijf (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN fac_import_ext_bedrijf (p_import_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces relaties afgebroken!'); END svrz_import_bedrijf; / CREATE OR REPLACE PROCEDURE svrz_update_bedrijf (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; v_errorhint VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_new NUMBER (10); v_count_upd NUMBER (10); v_count_del NUMBER (10); v_aanduiding VARCHAR2 (200) := '-'; -- SUBPROC PROCEDURE add_bedrijf (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT * FROM fac_imp_ext_bedrijf ib WHERE NOT EXISTS (SELECT 1 FROM fac_imp_ext_bedrijf WHERE UPPER (prs_bedrijf_naam) = UPPER (ib.prs_bedrijf_naam) AND prs_leverancier_nr < ib.prs_leverancier_nr); v_bedrijf_key NUMBER (10); BEGIN v_count_tot := 0; v_count_new := 0; v_count_upd := 0; FOR rec IN c1 LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || rec.prs_bedrijf_naam || '|' || rec.prs_leverancier_nr || '] '; v_errorhint := 'Fout bepalen bedrijf'; IF rec.prs_leverancier_nr IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Leveranciernummer ongedefinieerd!', v_errorhint); COMMIT; ELSE SELECT COUNT ( * ) INTO v_count FROM prs_v_aanwezigbedrijf WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr); IF v_count = 0 THEN v_errorhint := 'Fout toevoegen bedrijf'; INSERT INTO prs_bedrijf (prs_bedrijf_naam, prs_leverancier_nr, prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_land, prs_bedrijf_post_adres, prs_bedrijf_post_postcode, prs_bedrijf_post_plaats, prs_bedrijf_post_land, prs_bedrijf_telefoon, prs_bedrijf_fax, prs_bedrijf_email, prs_bedrijf_contact_persoon, prs_bedrijf_contact_telefoon, prs_bedrijf_contact_fax, prs_bedrijf_leverancier, prs_bedrijf_uitvoerende, prs_bedrijf_contract, prs_bedrijf_huurder, prs_bedrijf_ingids, prs_bedrijf_uurloon, prs_overeenkomst_nr, prs_overeenkomst_datum, prs_bedrijf_opmerking) VALUES (rec.prs_bedrijf_naam, rec.prs_leverancier_nr, rec.prs_bedrijf_bezoek_adres, rec.prs_bedrijf_bezoek_postcode, rec.prs_bedrijf_bezoek_plaats, rec.prs_bedrijf_bezoek_land, rec.prs_bedrijf_post_adres, rec.prs_bedrijf_post_postcode, rec.prs_bedrijf_post_plaats, rec.prs_bedrijf_post_land, rec.prs_bedrijf_telefoon, rec.prs_bedrijf_fax, rec.prs_bedrijf_email, rec.prs_bedrijf_contact_persoon, rec.prs_bedrijf_contact_telefoon, rec.prs_bedrijf_contact_fax, DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL), DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL), DECODE (rec.prs_bedrijf_contract, 1, 1, NULL), DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL), DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL), rec.prs_bedrijf_uurloon, rec.prs_overeenkomst_nr, rec.prs_overeenkomst_datum, rec.prs_bedrijf_opmerking); v_count_new := v_count_new + 1; ELSE -- v_count > 0 SELECT prs_bedrijf_key INTO v_bedrijf_key FROM prs_v_aanwezigbedrijf WHERE UPPER (prs_leverancier_nr) = UPPER (rec.prs_leverancier_nr); v_errorhint := 'Fout bijwerken bedrijf'; UPDATE prs_bedrijf SET prs_bedrijf_naam = COALESCE (rec.prs_bedrijf_naam, prs_bedrijf_naam), prs_bedrijf_bezoek_adres = COALESCE (rec.prs_bedrijf_bezoek_adres, prs_bedrijf_bezoek_adres), prs_bedrijf_bezoek_postcode = COALESCE (rec.prs_bedrijf_bezoek_postcode, prs_bedrijf_bezoek_postcode), prs_bedrijf_bezoek_plaats = COALESCE (rec.prs_bedrijf_bezoek_plaats, prs_bedrijf_bezoek_plaats), prs_bedrijf_bezoek_land = COALESCE (rec.prs_bedrijf_bezoek_land, prs_bedrijf_bezoek_land), prs_bedrijf_post_adres = COALESCE (rec.prs_bedrijf_post_adres, prs_bedrijf_post_adres), prs_bedrijf_post_postcode = COALESCE (rec.prs_bedrijf_post_postcode, prs_bedrijf_post_postcode), prs_bedrijf_post_plaats = COALESCE (rec.prs_bedrijf_post_plaats, prs_bedrijf_post_plaats), prs_bedrijf_post_land = COALESCE (rec.prs_bedrijf_post_land, prs_bedrijf_post_land), prs_bedrijf_telefoon = COALESCE (rec.prs_bedrijf_telefoon, prs_bedrijf_telefoon), prs_bedrijf_fax = COALESCE (rec.prs_bedrijf_fax, prs_bedrijf_fax), prs_bedrijf_email = COALESCE (rec.prs_bedrijf_email, prs_bedrijf_email), prs_bedrijf_contact_persoon = COALESCE (rec.prs_bedrijf_contact_persoon, prs_bedrijf_contact_persoon), prs_bedrijf_contact_telefoon = COALESCE (rec.prs_bedrijf_contact_telefoon, prs_bedrijf_contact_telefoon), prs_bedrijf_contact_fax = COALESCE (rec.prs_bedrijf_contact_fax, prs_bedrijf_contact_fax), prs_bedrijf_leverancier = DECODE (rec.prs_bedrijf_leverancier, 1, 1, prs_bedrijf_leverancier), prs_bedrijf_uitvoerende = DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL), prs_bedrijf_contract = DECODE (rec.prs_bedrijf_contract, 1, 1, NULL), prs_bedrijf_huurder = DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL), prs_bedrijf_ingids = DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL), prs_bedrijf_uurloon = COALESCE (rec.prs_bedrijf_uurloon, prs_bedrijf_uurloon), prs_overeenkomst_nr = COALESCE (rec.prs_overeenkomst_nr, prs_overeenkomst_nr), prs_overeenkomst_datum = COALESCE (rec.prs_overeenkomst_datum, prs_overeenkomst_datum), prs_bedrijf_opmerking = COALESCE (rec.prs_bedrijf_opmerking, prs_bedrijf_opmerking) WHERE prs_bedrijf_key = v_bedrijf_key; v_count_upd := v_count_upd + 1; END IF; --COMMIT; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count_new), ''); fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #bijgewerkt: ' || TO_CHAR (v_count_upd), ''); COMMIT; END; -- SUBPROC PROCEDURE del_bedrijf (p_import_key IN NUMBER) AS CURSOR c1 IS SELECT * FROM prs_v_aanwezigbedrijf b WHERE b.prs_bedrijf_intern IS NULL AND b.prs_leverancier_nr IS NOT NULL AND NOT EXISTS (SELECT 1 FROM fac_imp_ext_bedrijf WHERE prs_leverancier_nr = b.prs_leverancier_nr); v_bedrijf_key NUMBER (10); BEGIN v_count_del := 0; FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || rec.prs_bedrijf_naam || '] '; v_errorhint := 'Fout verwijderen bedrijf'; UPDATE prs_bedrijf SET prs_bedrijf_verwijder = SYSDATE WHERE prs_bedrijf_key = rec.prs_bedrijf_key; v_count_del := v_count_del + 1; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Bedrijf: #verwijderd: ' || TO_CHAR (v_count_del), ''); COMMIT; END; -- MAIN BEGIN SELECT COUNT ( * ) INTO v_count FROM fac_imp_ext_bedrijf; IF v_count < 500 THEN fac.imp_writelog ( p_import_key, 'E', 'Het aantal te importeren relaties is te klein (' || TO_CHAR (v_count) || ')', 'Zie specificatie'); RETURN; END IF; add_bedrijf (p_import_key); --del_bedrijf (p_import_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Importproces relaties afgebroken!'); END svrz_update_bedrijf; / -- Multi variant voor automatische import via gen_import van Quarto POs. /* Formatted on 12-11-2014 16:30:30 (QP5 v5.136.908.31019) */ CREATE OR REPLACE PROCEDURE svrz_import_quarto (p_import_key IN NUMBER) AS c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200) := ''; header_is_valid NUMBER := 0; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1); -- De importvelden v_receiver VARCHAR2 (255); -- C25/prs_leverancier_nr v_receiverName VARCHAR2 (255); -- C100/ignore v_customer VARCHAR2 (255); -- C30/prs_perslid_voornaam? v_customerName VARCHAR2 (255); -- C100/ignore v_orderdatum VARCHAR2 (255); -- C50/bes_kenmerkbestell_waarde v_bestelnr VARCHAR2 (255); -- C50/bes_kenmerkbestell_waarde v_nummer VARCHAR2 (255); -- C32/bes_srtdeel_nr v_questornummer VARCHAR2 (255); -- C50/ignore (bes_srtdeel_opmerking?) v_questoromschrijving VARCHAR2 (255); -- C100/bes_srtdeel_omschrijving v_inkoopprijs VARCHAR2 (255); --N8,2/ignore (= prijs_per_verpakking / aantal_per_verpakking) v_aantal VARCHAR2 (255); --N5/bes_bestelling(/bestelopdr)_item_aantal v_prijs_per_verpakking VARCHAR2 (255); --N8,2/bes_srtdeel_prijs_prijs v_aantal_per_verpakking VARCHAR2 (255); --N6/bes_srtdeel_veelvoud v_btwperc VARCHAR2 (255); --N3/bes_srtdeel_btw v_uom VARCHAR2 (255); -- C30/bes_srtdeel_eenheid -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN --DELETE FROM svrz_imp_quartomulti q -- WHERE q.imp_log_run <> p_import_key -- OR EXISTS (SELECT 1 -- FROM fac_imp_file -- WHERE SUBSTR (fac_imp_file_line, -- INSTR (fac_imp_file_line, ';', 1, 5) -- + 1, -- INSTR (fac_imp_file_line, ';', 1, 6) -- - INSTR (fac_imp_file_line, ';', 1, 5) -- - 1) = q.bestelnr); DELETE FROM svrz_imp_quartomulti WHERE imp_log_run <> p_import_key; COMMIT; 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 -- receiver;receiverName;customer;customerName;orderdatum;bestelnr;nummer;questornummer;questoromschrijving;inkoopprijs;aantal;prijs_per_verpakking;aantal_per_verpakking;btwperc;uom fac.imp_getfield (v_newline, c_delim, v_receiver); fac.imp_getfield (v_newline, c_delim, v_receiverName); fac.imp_getfield (v_newline, c_delim, v_customer); fac.imp_getfield (v_newline, c_delim, v_customerName); fac.imp_getfield (v_newline, c_delim, v_orderdatum); fac.imp_getfield (v_newline, c_delim, v_bestelnr); fac.imp_getfield (v_newline, c_delim, v_nummer); fac.imp_getfield (v_newline, c_delim, v_questornummer); fac.imp_getfield (v_newline, c_delim, v_questoromschrijving); fac.imp_getfield (v_newline, c_delim, v_inkoopprijs); fac.imp_getfield (v_newline, c_delim, v_aantal); fac.imp_getfield (v_newline, c_delim, v_prijs_per_verpakking); fac.imp_getfield (v_newline, c_delim, v_aantal_per_verpakking); fac.imp_getfield (v_newline, c_delim, v_btwperc); fac.imp_getfield (v_newline, c_delim, v_uom); v_aanduiding := '[' || v_receiver || '|' || v_customer || '|' || v_orderdatum || '|' || v_bestelnr || '|' || v_nummer || '] '; -- 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 (TRIM (v_receiver)) = 'RECEIVER' AND UPPER (TRIM (v_receiverName)) = 'RECEIVERNAME' AND UPPER (TRIM (v_customer)) = 'CUSTOMER' AND UPPER (TRIM (v_customerName)) = 'CUSTOMERNAME' AND UPPER (TRIM (v_orderdatum)) = 'ORDERDATUM' AND UPPER (TRIM (v_bestelnr)) = 'BESTELNR' AND UPPER (TRIM (v_nummer)) = 'NUMMER' AND UPPER (TRIM (v_questornummer)) = 'QUESTORNUMMER' AND UPPER (TRIM (v_questoromschrijving)) = 'QUESTOROMSCHRIJVING' AND UPPER (TRIM (v_inkoopprijs)) = 'INKOOPPRIJS' AND UPPER (TRIM (v_aantal)) = 'AANTAL' AND UPPER (TRIM (v_prijs_per_verpakking)) = 'PRIJS_PER_VERPAKKING' AND UPPER (TRIM (v_aantal_per_verpakking)) = 'AANTAL_PER_VERPAKKING' AND UPPER (TRIM (v_btwperc)) = 'BTWPERC' AND UPPER (TRIM (v_uom)) = 'UOM' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Receiver ongeldig/ongedefinieerd of te lang'; v_receiver := TRIM (v_receiver); IF v_receiver IS NULL OR LENGTH (v_receiver) > 25 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'ReceiverName ongeldig/ongedefinieerd of te lang'; v_receiverName := TRIM (v_receiverName); IF v_receiverName IS NULL OR LENGTH (v_receiverName) > 28 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Customer ongeldig/ongedefinieerd of te lang'; v_customer := TRIM (v_customer); IF v_customer IS NULL OR LENGTH (v_customer) > 30 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- Don't care v_errormsg := 'CustomerName ongeldig'; v_customerName := TRIM (v_customerName); -- v_errormsg := 'Orderdatum ongeldig'; v_orderdatum := TRIM (v_orderdatum); IF fac.safe_to_date (v_orderdatum, 'yyyymmdd hh24:mi:ss') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Orderdatum wordt genegeerd!'); END IF; -- v_errormsg := 'Bestelnr ongeldig/ongedefinieerd of te lang'; v_bestelnr := TRIM (v_bestelnr); IF v_bestelnr IS NULL OR LENGTH (v_bestelnr) > 50 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Artikelnummer ongeldig/ongedefinieerd of te lang'; v_nummer := TRIM (v_nummer); IF v_nummer IS NULL OR LENGTH (v_nummer) > 32 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- Don't care v_errormsg := 'Questornummer ongeldig'; v_questornummer := TRIM (v_questornummer); -- v_errormsg := 'Artikelomschrijving ongeldig/ongedefinieerd'; v_questoromschrijving := TRIM (v_questoromschrijving); IF v_questoromschrijving IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'Inkoopprijs ongeldig'; v_inkoopprijs := REPLACE (v_inkoopprijs, ',', '.'); IF fac.safe_to_number (v_inkoopprijs) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Inkoopprijs wordt genegeerd!'); END IF; -- v_errormsg := 'Aantal ongeldig'; v_aantal := REPLACE (v_aantal, ',', '.'); IF fac.safe_to_number (v_aantal) IS NULL THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- v_errormsg := 'PrijsPerVerpakking ongeldig'; v_prijs_per_verpakking := REPLACE (v_prijs_per_verpakking, ',', '.'); IF fac.safe_to_number (v_prijs_per_verpakking) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'PrijsPerVerpakking wordt genegeerd!'); END IF; -- v_errormsg := 'AantalPerVerpakking ongeldig'; v_aantal_per_verpakking := REPLACE (v_aantal_per_verpakking, ',', '.'); IF fac.safe_to_number (v_aantal_per_verpakking) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'AantalPerVerpakking wordt genegeerd!'); END IF; -- v_errormsg := 'BTW-percentage ongeldig'; v_btwperc := REPLACE (v_btwperc, ',', '.'); IF fac.safe_to_number (v_btwperc) IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'BTW-percentage wordt genegeerd!'); END IF; -- Don't care v_errormsg := 'Eenheid ongeldig'; v_uom := TRIM (v_uom); -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout wegschrijven importregel'; INSERT INTO svrz_imp_quartomulti (imp_log_run, receiver, receiverName, customer, customerName, orderdatum, bestelnr, nummer, questornummer, questoromschrijving, inkoopprijs, aantal, prijs_per_verpakking, aantal_per_verpakking, btwperc, uom) VALUES (p_import_key, SUBSTR (v_receiver, 1, 25), SUBSTR (v_receiverName, 1, 100), SUBSTR (v_customer, 1, 30), SUBSTR (v_customerName, 1, 100), fac.safe_to_date (v_orderdatum, 'yyyymmdd hh24:mi:ss'), SUBSTR (v_bestelnr, 1, 50), SUBSTR (v_nummer, 1, 32), SUBSTR (v_questornummer, 1, 50), SUBSTR (v_questoromschrijving, 1, 100), fac.safe_to_number (v_inkoopprijs), fac.safe_to_number (v_aantal), fac.safe_to_number (v_prijs_per_verpakking), fac.safe_to_number (v_aantal_per_verpakking), fac.safe_to_number (v_btwperc), SUBSTR (v_uom, 1, 30)); 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, 'E', v_aanduiding || v_errormsg, ''); 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', 'Inleesproces/#ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'Inleesproces/#ongeldige niet ingelezen importregels: ' || TO_CHAR (v_count_tot - v_count_import), ''); END IF; DELETE FROM fac_imp_file WHERE fac_import_key = p_import_key; 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 Quarto afgebroken!'); END; / CREATE OR REPLACE PROCEDURE svrz_update_quarto (p_import_key IN NUMBER) AS -- Cursor loopt - op bestelnr! - over alle nieuw ingelezen Quarto POs. CURSOR c1 IS SELECT x.receiver, x.receiverName, b.lev_key, b.aantal lev_aant, d.cat_key, d.aantal cat_aant, x.customer, x.customerName, p.prs_key, p.afl_key, p.aantal prs_aant, k.bes_kenmerk_key, TO_CHAR (x.orderdatum, 'dd-mm-yyyy') orderdatum, x.bestelnr FROM (SELECT DISTINCT receiver, receiverName, customer, customerName, orderdatum, bestelnr FROM svrz_imp_quartomulti WHERE imp_log_run = p_import_key) x LEFT JOIN ( SELECT TRIM (prs_bedrijf_naam_upper) lev_id_upper, MAX (prs_bedrijf_key) lev_key, COUNT ( * ) aantal FROM prs_v_aanwezigbedrijf GROUP BY TRIM (prs_bedrijf_naam_upper)) b ON UPPER (x.receiverName) = b.lev_id_upper LEFT JOIN ( SELECT UPPER(TRIM(SUBSTR (ins_discipline_omschrijving, 3))) cat_id_upper, MAX (ins_discipline_key) cat_key, COUNT ( * ) aantal FROM bes_discipline WHERE ins_discipline_verwijder IS NULL GROUP BY UPPER(TRIM(SUBSTR (ins_discipline_omschrijving, 3)))) d ON UPPER (SUBSTR (x.receiverName, 1, 28)) = d.cat_id_upper LEFT JOIN ( SELECT UPPER (TRIM (prs_perslid_voornaam)) prs_id_upper, MAX (prs_perslid_key) prs_key, MAX (mld_adres_key) afl_key, COUNT ( * ) aantal FROM prs_v_aanwezigperslid GROUP BY UPPER (TRIM (prs_perslid_voornaam))) p ON UPPER (x.customer) = p.prs_id_upper LEFT JOIN (SELECT bes_srtinstallatie_key, bes_kenmerk_key FROM bes_kenmerk WHERE bes_kenmerk_verwijder IS NULL AND bes_srtkenmerk_key = 1 -- Opmerking intern AND bes_kenmerk_niveau = 'D') k ON UPPER (d.cat_key) = k.bes_srtinstallatie_key ORDER BY bestelnr; c_grp_oms VARCHAR2 (200) := 'Onbekend'; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_count_tot NUMBER (10) := 0; v_count_new NUMBER (10) := 0; v_count NUMBER; v_autoaccept bes_disc_params.bes_disc_params_autoacceptrfo%TYPE; v_auto_order bes_disc_params.bes_disc_params_auto_order%TYPE; v_leverdagen bes_disc_params.bes_disc_params_leverdagen%TYPE; v_kpn_key prs_kostenplaats.prs_kostenplaats_key%TYPE; v_bes_key bes_bestelling.bes_bestelling_key%TYPE; v_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE; BEGIN -- Loop over alle nieuw ingelezen Quarto POs. FOR po IN c1 LOOP BEGIN v_aanduiding := '[' || po.receiverName || '|' || po.customer || '|' || po.orderdatum || '|' || po.bestelnr || '] '; v_count_tot := v_count_tot + 1; -- Valideer dat configuratie 1-duidig is! v_errormsg := 'Fout controleren configuratie.'; IF po.lev_aant = 1 AND po.cat_aant = 1 AND po.prs_aant = 1 AND po.bes_kenmerk_key IS NOT NULL THEN v_errormsg := 'Fout bepalen catalogus.'; SELECT bes_disc_params_autoacceptrfo, bes_disc_params_auto_order, bes_disc_params_leverdagen INTO v_autoaccept, v_auto_order, v_leverdagen FROM bes_disc_params WHERE bes_ins_discipline_key = po.cat_key; v_errormsg := 'Fout bepalen kostenplaats.'; SELECT a.prs_kostenplaats_key INTO v_kpn_key FROM prs_perslid p, prs_afdeling a WHERE p.prs_perslid_key = po.prs_key AND p.prs_afdeling_key = a.prs_afdeling_key; v_errormsg := 'Fout controleren Quarto-bestelnr.'; SELECT COUNT ( * ) INTO v_count FROM bes_kenmerkbestell bk, bes_kenmerk k WHERE bk.bes_kenmerk_key = k.bes_kenmerk_key AND k.bes_srtkenmerk_key = 1 -- Opmerking intern AND INSTR (bk.bes_kenmerkbestell_waarde, po.bestelnr) > 0 ; IF v_count = 0 THEN v_errormsg := 'Fout toevoegen bestelling.'; INSERT INTO bes_bestelling (prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, bes_bestelling_leverdatum, mld_adres_key_lev, bes_bestelling_plaats, bes_bestelling_module, bes_bestelling_levkosten, bes_bestelling_korting) VALUES (po.prs_key, po.prs_key, v_kpn_key, TRUNC(fac.datumtijdplusuitvoertijd (SYSDATE, v_leverdagen, 'DAGEN')), po.afl_key, NULL, 'BES', 0, 0) RETURNING bes_bestelling_key INTO v_bes_key; -- Vul 'Opmerking intern'-kenmerkveld met bestelnr (orderdatum) -- uit Quarto! v_errormsg := 'Fout toevoegen kenmerk.'; INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (v_bes_key, po.bes_kenmerk_key, 'Quarto-bestelnr: ' || po.bestelnr || ' (' || po.orderdatum || ')'); -- Loop over alle orderitems per Quarto PO. FOR item IN ( SELECT nummer, questornummer, questoromschrijving, inkoopprijs, aantal, prijs_per_verpakking, aantal_per_verpakking, btwperc, uom FROM svrz_imp_quartomulti WHERE imp_log_run = p_import_key AND bestelnr = po.bestelnr ORDER BY nummer) LOOP BEGIN v_errormsg := 'Fout toevoegen artikel.'; bes.upsert_srtdeel (po.cat_key, -- ins_discipline_key c_grp_oms, -- bes_srtgroep_omschrijving item.questoromschrijving, item.prijs_per_verpakking, item.btwperc, item.uom, item.nummer, po.lev_key, NULL, -- Vervaldatum '', -- Image item.aantal_per_verpakking, '', -- Opmerking '', -- details_loc v_srtdeel_key); -- nieuwe bes_srtdeel_key v_errormsg := 'Fout toevoegen bestelling-item.'; INSERT INTO bes_bestelling_item (bes_bestelling_key, bes_srtdeel_key, bes_bestelling_item_aantal, bes_bestelling_item_brutoprijs, bes_bestelling_item_inkprijs, bes_bestelling_item_prijs) VALUES ( v_bes_key, v_srtdeel_key, item.aantal, bes.getsrtdeelprijs (v_srtdeel_key, NULL), bes.getsrtdeelinkprijs (v_srtdeel_key, NULL), item.prijs_per_verpakking ); 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, 'ITEM-loop'); END; END LOOP; fac.trackaction ('BESNEW', v_bes_key, po.prs_key, NULL, NULL); bes.setbestellingstatus (v_bes_key, po.prs_key, po.prs_key); IF v_auto_order = 1 THEN bes.makeOrders (po.prs_key, v_bes_key); END IF; COMMIT; v_count_new := v_count_new + 1; ELSE fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Quarto-bestelnr bestaat al'); END IF; ELSE fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inrichtingsfout'); 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, 'PO-loop'); END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'POs/#ingelezen: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'POs/#toegevoegd: ' || TO_CHAR (v_count_new), ''); 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_errormsg, 'Importproces Quarto afgebroken!'); END; / -- SVRZ#60631: Import van gescande ruimte-objecten en input om objecten te -- verplaatsen naar de correcte ruimte en per gescande ruimte te -- loggen welke objecten daar volgens Facilitor nog meer staan). CREATE OR REPLACE PROCEDURE svrz_import_ins_scan (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); header_is_valid NUMBER; v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); -- De importvelden: v_plaatsofobjectid VARCHAR2 (255); CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN DELETE FROM svrz_imp_ins_scan; COMMIT; v_count_tot := 0; v_count_import := 0; header_is_valid := 1; -- Geen header, dus altijd valid! FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen importregel'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_plaatsofobjectid); v_aanduiding := '[' || v_plaatsofobjectid || '] '; -- 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_plaatsofobjectid) = '' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'PlaatsOfObjectId ongeldig; ongedefinieerd of te lang'; v_plaatsofobjectid := TRIM (v_plaatsofobjectid); IF v_plaatsofobjectid IS NULL OR LENGTH (v_plaatsofobjectid) > 60 THEN v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Regel wordt overgeslagen!'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN v_errormsg := 'Fout wegschrijven importregel'; INSERT INTO svrz_imp_ins_scan (plaatsofobjectid, volgorde) VALUES (v_plaatsofobjectid, v_count_tot); 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', 'Ruimteobject/#ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog (p_import_key, 'S', 'Ruimteobject/#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 INS-scan afgebroken!'); END svrz_import_ins_scan; / CREATE OR REPLACE PROCEDURE svrz_update_ins_scan (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000) := '-'; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_importeur_key NUMBER (10); v_count_upd NUMBER (10); v_count_tmp NUMBER (10); v_plaatsofobjectid VARCHAR2 (255); v_cur_ruimte_key NUMBER (10) := NULL; v_cur_aanduiding VARCHAR2 (255) := ''; -- Bijwerken ruimteobjecten! CURSOR c1 IS SELECT i.volgorde, i.plaatsofobjectid, pa.alg_onroerendgoed_keys alg_ruimte_key, MIN (d.ins_deel_key) ins_deel_key, COUNT ( * ) aantal FROM (SELECT volgorde, plaatsofobjectid FROM svrz_imp_ins_scan) i LEFT JOIN alg_v_plaatsaanduiding pa ON UPPER (i.plaatsofobjectid) = UPPER (pa.alg_plaatsaanduiding) AND pa.alg_onroerendgoed_type = 'R' LEFT JOIN ins_v_aanwezigdeel d ON UPPER (i.plaatsofobjectid) = d.ins_deel_upper AND d.ins_alg_ruimte_type = 'R' GROUP BY i.volgorde, i.plaatsofobjectid, pa.alg_onroerendgoed_keys ORDER BY 1; CURSOR c2 IS SELECT DISTINCT alg_ruimte_key FROM svrz_imp_ins_scan ORDER BY 1; BEGIN v_errormsg := 'Fout bepalen importeur'; SELECT prs_perslid_key INTO v_importeur_key FROM fac_import WHERE fac_import_key = p_import_key; v_count_upd := 0; v_count_tmp := 0; FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || TO_CHAR (rec.volgorde) || '|' || rec.plaatsofobjectid || '] '; IF v_cur_ruimte_key IS NULL -- Op zoek naar ruimte#1 THEN IF rec.alg_ruimte_key IS NOT NULL -- Ruimte#1 THEN v_errormsg := 'Store ruimte#1'; v_cur_ruimte_key := rec.alg_ruimte_key; -- Store ruimte#1 v_cur_aanduiding := rec.plaatsofobjectid; ELSIF rec.ins_deel_key IS NOT NULL -- Objectregel THEN v_errormsg := 'Ruimte#1 verwacht, object gevonden'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Skip object'); ELSE -- Geen ruimteregel en ook geen objectregel v_errormsg := 'Ruimte#1 verwacht en niet gevonden'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Skip ruimte'); END IF; ELSE -- Ruimte#1 gevonden en op zoek naar ruimte#2 IF rec.alg_ruimte_key IS NOT NULL -- Ruimte#2 THEN IF v_cur_aanduiding = rec.plaatsofobjectid -- Ruimte-match? THEN v_errormsg := 'Reset ruimte#1'; v_cur_ruimte_key := NULL; -- Reset ruimte#1 v_cur_aanduiding := ''; COMMIT; v_count_upd := v_count_upd + v_count_tmp; v_count_tmp := 0; ELSE -- Uit sync (ontbrekende ruimteregel?) v_errormsg := 'Ruimte#2 verwacht en niet gevonden'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Sync ruimte'); v_cur_ruimte_key := rec.alg_ruimte_key; -- Store ruimte#1 v_cur_aanduiding := rec.plaatsofobjectid; ROLLBACK; v_count_tmp := 0; END IF; ELSIF rec.ins_deel_key IS NOT NULL -- Objectregel THEN IF rec.aantal = 1 -- Object uniek? THEN v_errormsg := 'Fout bijwerken object'; UPDATE ins_deel SET ins_alg_ruimte_key = v_cur_ruimte_key WHERE ins_deel_key = rec.ins_deel_key; fac.trackaction ('INSUPD', rec.ins_deel_key, v_importeur_key, NULL, 'Via scanner-import ruimte bijgewerkt naar: ' || v_cur_aanduiding); v_errormsg := 'Fout bijwerken import'; UPDATE svrz_imp_ins_scan SET alg_ruimte_key = v_cur_ruimte_key, ins_deel_key = rec.ins_deel_key WHERE volgorde = rec.volgorde; v_count_tmp := v_count_tmp + 1; ELSE v_errormsg := 'ObjectID niet uniek'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Skip object'); END IF; ELSE v_errormsg := 'Fout bepalen ruimte- of object'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Skip regel'); 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, 'Scan-loop'); ROLLBACK; v_count_tmp := 0; END; END LOOP; -- SVRZ#62674: Tot slot nog controleren dat de laatste regel de correcte -- ruimte#2 (heeft) bevat en anders ROLLBACK! IF v_cur_ruimte_key IS NOT NULL THEN v_errormsg := 'Ruimte#2 verwacht en einde bestand'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, 'Sync ruimte'); ROLLBACK; END IF; fac.imp_writelog (p_import_key, 'S', 'Ruimteobject/#bijgewerkt: ' || TO_CHAR (v_count_upd), ''); COMMIT; v_count_upd := 0; FOR rc1 IN c2 LOOP BEGIN v_aanduiding := '[' || TO_CHAR (rc1.alg_ruimte_key) || '] '; FOR rc2 IN ( SELECT pa.alg_onroerendgoed_keys alg_ruimte_key, pa.alg_plaatsaanduiding, d.ins_deel_key, d.ins_deel_upper FROM alg_v_plaatsaanduiding pa, ins_v_aanwezigdeel d WHERE pa.alg_onroerendgoed_keys = rc1.alg_ruimte_key AND pa.alg_onroerendgoed_type = 'R' AND pa.alg_onroerendgoed_keys = d.ins_alg_ruimte_key AND d.ins_alg_ruimte_type = 'R' AND NOT EXISTS (SELECT 1 FROM svrz_imp_ins_scan WHERE ins_deel_key = d.ins_deel_key) ORDER BY 1, 2, 3) LOOP BEGIN v_aanduiding := '[' || rc2.alg_plaatsaanduiding || '|' || rc2.ins_deel_upper || '] '; fac.imp_writelog (p_import_key, 'I', 'Niet gescand en volgens CMDB ook in ruimte ' || rc2.alg_plaatsaanduiding || ': ' || rc2.ins_deel_upper, ''); v_count_upd := v_count_upd + 1; END; END LOOP; 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, 'Rest-loop'); COMMIT; END; END LOOP; fac.imp_writelog (p_import_key, 'S', 'Ruimteobject/#misgelopen: ' || TO_CHAR (v_count_upd), ''); 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_errormsg, 'Importproces INS-scan afgebroken!'); END svrz_update_ins_scan; / /* Formatted on 30-3-2015 23:36:24 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW svrz_v_export_nachtwerk ( RESULT, result_order ) AS SELECT 'CALL GENEREER1BESOPDRPDF.BAT ' || TO_CHAR (bo.bes_bestelopdr_key) || ' PUR-C1' || REPLACE ( SUBSTR ('0000000' || bo.bes_bestelopdr_id, INSTR ('0000000' || bo.bes_bestelopdr_id, '/') - 6), '/', '-'), bes_bestelopdr_key FROM bes_bestelopdr bo, fac_tracking t WHERE bo.bes_bestelopdr_status = 4 -- In bestelling AND bo.bes_bestelopdr_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = 142 -- BES2SN AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE - 1) UNION ALL SELECT 'CALL GENEREER1MLDOPDRPDF.BAT ' || TO_CHAR (o.mld_opdr_key) || ' PUR-N1' || SUBSTR ('0000000' || TO_CHAR (o.mld_melding_key), -6) || '-' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr), mld_opdr_key FROM mld_opdr o, fac_tracking t WHERE o.mld_statusopdr_key = 5 -- Uitgegeven AND o.mld_opdr_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key = 91 -- ORDSNT AND TRUNC (t.fac_tracking_datum) = TRUNC (SYSDATE - 1); -- Dummy export NACHTWERK! CREATE OR REPLACE PROCEDURE svrz_select_nachtwerk (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS c_lev_cond_srtk NUMBER (10) := 81; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); -- Cursor loopt over alle bestelopdracht-items met status 'In bestelling'; -- deze worden verondersteld te zijn geleverd na 'leverdagen'+'notidagen'! CURSOR cboi IS SELECT DISTINCT bo.bes_bestelopdr_key FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_bestelling b, bes_srtdeel sd, bes_srtgroep sg, bes_disc_params dp WHERE bo.bes_bestelopdr_status = 4 -- In bestelling AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND sd.bes_srtgroep_key = sg.bes_srtgroep_key --AND sg.ins_discipline_key = -1 AND sg.ins_discipline_key = dp.bes_ins_discipline_key AND dp.bes_disc_params_noti_dagen IS NOT NULL AND (b.bes_bestelling_datum IS NULL OR fac.datumtijdplusuitvoertijd (b.bes_bestelling_leverdatum, dp.bes_disc_params_noti_dagen, 'DAGEN') < SYSDATE); -- Cursor loopt over alle bestelling-items met status 'Besteld' waarvan -- de bijbehorende bestelopdracht-items zijn geleverd; deze worden dan ook -- gesloten! CURSOR cbi IS SELECT DISTINCT b.bes_bestelling_key FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE b.bes_bestelling_status = 5 -- Besteld AND b.bes_bestelling_key = bi.bes_bestelling_key --AND bi.bes_bestelling_item_aantal != COALESCE (bi.bes_bestelling_item_aantalontv, 0) AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND boi.bes_bestelopdr_item_aantal = boi.bes_bestelopdr_item_aantalontv; -- SVRZ#55788: Cursor loopt over de bestel-catalogi en maakt Label-kenmerk -- aan met (een kopie van) de Leveringscondities zoals bij de -- betreffende relatie ingevuld (en indien nog niet aangemaakt). CURSOR ccat IS SELECT dp.bes_ins_discipline_key, kl.prs_kenmerklink_waarde lev_condities FROM bes_disc_params dp, prs_kenmerklink kl WHERE dp.bes_disc_params_punch_bedr_key = kl.prs_link_key AND kl.prs_kenmerk_key = 1000 -- Leveringscondities AND NOT EXISTS (SELECT 1 FROM bes_kenmerk WHERE bes_srtkenmerk_key = c_lev_cond_srtk AND bes_srtinstallatie_key = dp.bes_ins_discipline_key) UNION ALL SELECT DISTINCT dp.bes_ins_discipline_key, kl.prs_kenmerklink_waarde lev_condities FROM bes_disc_params dp, bes_srtgroep sg1, bes_srtdeel sd1, prs_kenmerklink kl WHERE dp.bes_disc_params_punch_bedr_key IS NULL AND dp.bes_ins_discipline_key = sg1.ins_discipline_key AND sg1.bes_srtgroep_key = sd1.bes_srtgroep_key AND sd1.prs_bedrijf_key = kl.prs_link_key AND kl.prs_kenmerk_key = 1000 -- Leveringscondities AND NOT EXISTS (SELECT 1 FROM bes_srtgroep sg2, bes_srtdeel sd2 WHERE sg2.bes_srtgroep_key = sd2.bes_srtgroep_key AND sg2.ins_discipline_key = sg1.ins_discipline_key AND sd2.prs_bedrijf_key != sd1.prs_bedrijf_key) AND NOT EXISTS (SELECT 1 FROM bes_kenmerk WHERE bes_srtkenmerk_key = c_lev_cond_srtk AND bes_srtinstallatie_key = dp.bes_ins_discipline_key); BEGIN v_errormsg := 'Fout leveren bestelopdracht'; FOR rec IN cboi LOOP -- Zeg dat alles geleverd is wat besteld is. UPDATE bes_bestelopdr_item SET bes_bestelopdr_item_aantalontv = bes_bestelopdr_item_aantal WHERE bes_bestelopdr_key = rec.bes_bestelopdr_key; bes.updatebestelopdrstatus (rec.bes_bestelopdr_key, NULL); END LOOP; v_errormsg := 'Fout sluiten bestelaanvraag'; FOR rec IN cbi LOOP -- Sluit alle aanvraagregels af die nu geheel geleverd zijn. UPDATE bes_bestelling_item SET bes_bestelling_item_aantalontv = bes_bestelling_item_aantal WHERE bes_bestelling_key = rec.bes_bestelling_key; bes.updatebestellingstatus (rec.bes_bestelling_key, NULL); END LOOP; COMMIT; v_errormsg := 'Fout toevoegen leveringscondities'; FOR rec IN ccat LOOP INSERT INTO bes_kenmerk (bes_srtkenmerk_key, bes_srtinstallatie_key, bes_kenmerk_type, bes_kenmerk_niveau, bes_kenmerk_volgnummer, bes_kenmerk_default) VALUES (c_lev_cond_srtk, rec.bes_ins_discipline_key, 'B', 'D', 1, rec.lev_condities); END LOOP; 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.writelog (p_applname, 'E', 'Proces NACHTWERK afgebroken!', v_errormsg); END svrz_select_nachtwerk; / /* Formatted on 12-9-2014 17:42:24 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW svrz_v_imp_bes_artikel_sync ( fclt_f_catalogusnaam, leverancier, catdatum, artikelnr, groep, omschrijving, prijs, eenheid, picture, orderaantal, tax, duedate, inkoopprijs, minimum, staffeltabel, wijzigdagen, annuleerdagen, opmerking ) AS SELECT td.ins_discipline_omschrijving, b.prs_bedrijf_naam, TO_CHAR (td.ins_discipline_aanmaak, 'yyyymmdd'), sd.bes_srtdeel_nr, sg.bes_srtgroep_omschrijving, sd.bes_srtdeel_omschrijving, TO_CHAR (bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL)), sd.bes_srtdeel_eenheid, sd.bes_srtdeel_image, TO_CHAR (sd.bes_srtdeel_veelvoud), TO_CHAR (sd.bes_srtdeel_btw), TO_CHAR (sd.bes_srtdeel_vervaldatum, 'yyyymmdd'), TO_CHAR (bes.getsrtdeelinkprijs (sd.bes_srtdeel_key, NULL)), NULL, bs.bes_staffeltabel_naam, TO_CHAR (sd.bes_srtdeel_wijzigdagen), TO_CHAR (sd.bes_srtdeel_annuleerdagen), sd.bes_srtdeel_opmerking FROM ins_tab_discipline td, bes_srtgroep sg, bes_srtdeel sd, prs_bedrijf b, bes_staffeltabel bs WHERE td.ins_discipline_module = 'BES' AND td.ins_discipline_verwijder IS NULL AND td.ins_discipline_key = sg.ins_discipline_key AND sg.bes_srtgroep_verwijder IS NULL AND sg.bes_srtgroep_key = sd.bes_srtgroep_key AND sd.bes_srtdeel_verwijder IS NULL AND sd.prs_bedrijf_key = b.prs_bedrijf_key AND bs.bes_staffeltabel_key(+) = sd.bes_staffeltabel_key; /* Formatted on 3-11-2014 16:36:24 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW svrz_v_afleveradres_lijst ( adres_id, adres_naam, adres, postcode, plaats, land ) AS SELECT COALESCE (a.mld_adres_gebouw_ruimte, l.alg_locatie_code) || SUBSTR ( a.mld_adres_bezoek_adres, DECODE (INSTR (a.mld_adres_bezoek_adres, ' ', -1), 0, 100, INSTR (a.mld_adres_bezoek_adres, ' ', -1) + 1)) adres_id, a.mld_adres_naam adres_naam, a.mld_adres_bezoek_adres adres, a.mld_adres_bezoek_postcode postcode, a.mld_adres_bezoek_plaats plaats, a.mld_adres_bezoek_land land FROM mld_adres a, alg_locatie l WHERE a.mld_adres_verwijder IS NULL AND a.mld_adres_afleveradres = 1 AND a.alg_locatie_key = l.alg_locatie_key; CREATE OR REPLACE VIEW svrz_v_afleveradres_check ( loc_key, loc_code, loc_oms, loc_badres, loc_bposcode, loc_bplaats, loc_bland, loc_padres, loc_ppostcode, loc_pplaats, loc_pland, geb_key, geb_code, geb_naam, afl_key, afl_loc_key, afl_naam, afl_geb_ruimte, afl_badres, afl_bpostcode, afl_bplaats, afl_bland, afl_padres, afl_ppostcode, afl_pplaats, afl_pland ) AS SELECT TO_CHAR (x.alg_locatie_key) loc_key, x.alg_locatie_code loc_code, x.alg_locatie_omschrijving loc_oms, x.alg_locatie_adres loc_badres, x.alg_locatie_postcode loc_bposcode, x.alg_locatie_plaats loc_bplaats, x.alg_locatie_land loc_bland, x.alg_locatie_post_adres loc_padres, x.alg_locatie_post_postcode loc_ppostcode, x.alg_locatie_post_plaats loc_pplaats, x.alg_locatie_post_land loc_pland, TO_CHAR (x.alg_gebouw_key) geb_key, x.alg_gebouw_upper geb_code, x.alg_gebouw_naam geb_naam, TO_CHAR (y.mld_adres_key) afl_key, TO_CHAR (y.alg_locatie_key) afl_loc_key, y.mld_adres_naam afl_naam, y.mld_adres_gebouw_ruimte gebouw_ruimte, y.mld_adres_bezoek_adres afl_badres, y.mld_adres_bezoek_postcode afl_bpostcode, y.mld_adres_bezoek_plaats afl_bplaats, y.mld_adres_bezoek_land afl_bland, y.mld_adres_post_adres afl_padres, y.mld_adres_post_postcode afl_ppostcode, y.mld_adres_post_plaats afl_pplaats, y.mld_adres_post_land afl_pland FROM (SELECT l.alg_locatie_key, l.alg_locatie_code, l.alg_locatie_omschrijving, l.alg_locatie_adres, l.alg_locatie_postcode, l.alg_locatie_plaats, l.alg_locatie_land, l.alg_locatie_post_adres, l.alg_locatie_post_postcode, l.alg_locatie_post_plaats, l.alg_locatie_post_land, g.alg_gebouw_key, g.alg_gebouw_upper, g.alg_gebouw_naam, g.mld_adres_key FROM alg_v_aanweziglocatie l, alg_v_aanweziggebouw g WHERE l.alg_locatie_key = g.alg_locatie_key) x FULL JOIN (SELECT ma.mld_adres_key, ma.mld_adres_naam, ma.mld_adres_gebouw_ruimte, ma.mld_adres_bezoek_adres, ma.mld_adres_bezoek_postcode, ma.mld_adres_bezoek_plaats, ma.mld_adres_bezoek_land, ma.mld_adres_post_adres, ma.mld_adres_post_postcode, ma.mld_adres_post_plaats, ma.mld_adres_post_land, ma.alg_locatie_key FROM mld_adres ma WHERE ma.mld_adres_afleveradres = 1 AND ma.mld_adres_verwijder IS NULL) y ON x.mld_adres_key = y.mld_adres_key; /* Formatted on 21-4-2015 15:52:25 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW svrz_v_noti_order_afschrift ( code, sender, receiver, text, key, par1, par2, xkey ) AS -- Afschrift C-orders! SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, b.prs_perslid_key, -- Besteller REPLACE ( sn.fac_srtnotificatie_oms, '##CNR##', 'PUR-C1' || SUBSTR ('0000000' || bo.bes_bestelopdr_id, INSTR ('0000000' || bo.bes_bestelopdr_id, '/') - 6)), bo.bes_bestelopdr_key, NULL, NULL, NULL FROM fac_tracking t, bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi, bes_bestelling b, fac_srtnotificatie sn, fac_notificatie_job nj WHERE t.fac_srtnotificatie_key = 142 -- BES2SN AND t.fac_tracking_refkey = bo.bes_bestelopdr_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_bestelling_key = b.bes_bestelling_key AND sn.fac_srtnotificatie_code = 'CUST01' AND nj.fac_notificatie_job_view = 'SVRZ_V_NOTI_ORDER_AFSCHRIFT' AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun UNION ALL -- Afschrift N-orders! SELECT sn.fac_srtnotificatie_code, NULL, m.prs_perslid_key, -- Aanvrager REPLACE ( sn.fac_srtnotificatie_oms, '##NNR##', 'PUR-N1' || SUBSTR ('0000000' || TO_CHAR (o.mld_melding_key), -6) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr)), o.mld_opdr_key, NULL, NULL, NULL FROM fac_tracking t, mld_opdr o, mld_melding m, mld_stdmelding sm, ins_tab_discipline td, fac_srtnotificatie sn, fac_notificatie_job nj WHERE t.fac_srtnotificatie_key = 91 -- ORDSNT AND t.fac_tracking_refkey = o.mld_opdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = td.ins_discipline_key AND td.ins_srtdiscipline_key = 1 -- Inkoop AND sn.fac_srtnotificatie_code = 'CUST02' AND nj.fac_notificatie_job_view = 'SVRZ_V_NOTI_ORDER_AFSCHRIFT' AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun; CREATE OR REPLACE VIEW svrz_v_noti_cntreminder ( code, sender, receiver, text, key, xkey ) AS SELECT '', NULL, c.prs_perslid_key_beh, 'RappŠl: Contract ' || c.cnt_contract_nummer_intern || ' (' || 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, NULL FROM cnt_v_aanwezigcontract c, prs_bedrijf b WHERE c.ins_discipline_key != 1541 -- Onderhoudscontracten HO niet notificeren! AND c.cnt_contract_status = 0 -- Actief AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key); CREATE OR REPLACE VIEW svrz_v_rap_contactafdeling ( afdeling, bedrijf, post_adres, post_postcode, post_plaats, post_land, bezoek_adres, bezoek_postcode, bezoek_plaats, bezoek_land, telefoon, fax, telefoon2, contactpersoon, contactpersoon_telefoon, contactpersoon_fax, opmerking, everancier_nr, overeenkomst_nr, overeenkomst_datum, email, fclt_h_afdeling_key ) AS SELECT DISTINCT a.prs_afdeling_naam, b.prs_bedrijf_naam, b.prs_bedrijf_post_adres, b.prs_bedrijf_post_postcode, b.prs_bedrijf_post_plaats, b.prs_bedrijf_post_land, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_telefoon, b.prs_bedrijf_fax, b.prs_bedrijf_telefoon2, b.prs_bedrijf_contact_persoon, b.prs_bedrijf_contact_telefoon, b.prs_bedrijf_contact_fax, b.prs_bedrijf_opmerking, b.prs_leverancier_nr, b.prs_overeenkomst_nr, b.prs_overeenkomst_datum, b.prs_bedrijf_email, a.prs_afdeling_key FROM cnt_contract c, prs_bedrijf b, prs_v_afdeling a WHERE cnt_contract_verwijder IS NULL AND c.cnt_contract_status = 0 AND a.prs_afdeling_key = c.prs_afdeling_key_eig AND b.prs_bedrijf_key = c.cnt_prs_bedrijf_key; /* Formatted on 19-5-2016 10:42:24 (QP5 v5.136.908.31019) */ CREATE OR REPLACE VIEW svrz_v_rap_ho_contracten ( hide_f_sortering, fclt_x_eindjaar, cnt_contract_key, contractnr, locatie, beschrijving, contractpartij, contractbedrag, -- Toegevoegd met SVRZ#37644 einddatum ) AS SELECT x.prs_bedrijf_naam || x.cnt_contract_nummer_intern || '.' || x.cnt_contract_versie, TO_CHAR (x.cnt_contract_looptijd_tot, 'yyyy'), x.cnt_contract_key, x.cnt_contract_nummer_intern || DECODE (x.cnt_contract_versie, NULL, '', 0, '', '.' || x.cnt_contract_versie), cp.scope locatie, x.cnt_contract_omschrijving, x.prs_bedrijf_naam, x.cnt_contract_kosten, x.cnt_contract_looptijd_tot FROM (SELECT c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_versie, c.cnt_contract_omschrijving, b.prs_bedrijf_naam, c.cnt_contract_kosten, c.cnt_contract_looptijd_tot FROM cnt_v_aanwezigcontract c, prs_bedrijf b WHERE c.ins_discipline_key = 1541 -- Onderhoudscontracten HO AND c.cnt_contract_status = 0 -- Actief AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'yyyy') AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) x LEFT JOIN ( SELECT cp.cnt_contract_key, LISTAGG (cp.locatie, CHR (13) || CHR (10)) WITHIN GROUP (ORDER BY cp.locatie) scope FROM (SELECT cp.cnt_contract_key, l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie FROM cnt_contract_plaats cp, alg_locatie l WHERE cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = l.alg_locatie_key UNION SELECT cp.cnt_contract_key, l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie FROM cnt_contract_plaats cp, alg_gebouw g, alg_locatie l WHERE cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key) cp GROUP BY cp.cnt_contract_key) cp ON x.cnt_contract_key = cp.cnt_contract_key; /* -- SVRZ#38249 CREATE OR REPLACE VIEW svrz_v_rap_contractoverzicht ( hide_f_sortering, fclt_3d_discipline_key, cnt_contract_key, fclt_f_contractsoort, fclt_x_eindjaar, contractnr, locatie, beschrijving, contractpartij, contractbedrag, einddatum ) AS SELECT x.ins_discipline_omschrijving || x.prs_bedrijf_naam || x.cnt_contract_nummer_intern || '.' || x.cnt_contract_versie, x.ins_discipline_key, x.cnt_contract_key, x.ins_discipline_omschrijving, TO_CHAR (x.cnt_contract_looptijd_tot, 'yyyy'), x.cnt_contract_nummer_intern || DECODE (x.cnt_contract_versie, NULL, '', 0, '', '.' || x.cnt_contract_versie), cp.scope locatie, x.cnt_contract_omschrijving, x.prs_bedrijf_naam, x.cnt_contract_kosten, x.cnt_contract_looptijd_tot FROM (SELECT c.ins_discipline_key, c.cnt_contract_key, td.ins_discipline_omschrijving, c.cnt_contract_nummer_intern, c.cnt_contract_versie, c.cnt_contract_omschrijving, b.prs_bedrijf_naam, c.cnt_contract_kosten, c.cnt_contract_looptijd_tot FROM cnt_v_aanwezigcontract c, ins_tab_discipline td, prs_bedrijf b WHERE c.cnt_contract_status = 0 -- Actief AND c.cnt_contract_looptijd_tot > TRUNC (SYSDATE, 'yyyy') AND c.ins_discipline_key = td.ins_discipline_key AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key) x LEFT JOIN ( SELECT cp.cnt_contract_key, LISTAGG (cp.locatie, CHR (13) || CHR (10)) WITHIN GROUP (ORDER BY cp.locatie) scope FROM (SELECT cp.cnt_contract_key, l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie FROM cnt_contract_plaats cp, alg_locatie l WHERE cp.cnt_alg_plaats_code = 'L' AND cp.cnt_alg_plaats_key = l.alg_locatie_key UNION SELECT cp.cnt_contract_key, l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' locatie FROM cnt_contract_plaats cp, alg_gebouw g, alg_locatie l WHERE cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key) cp GROUP BY cp.cnt_contract_key) cp ON x.cnt_contract_key = cp.cnt_contract_key; */ /* Formatted on 11-3-2016 9:42:24 (QP5 v5.136.908.31019) */ /* Tbv. demo Bedrijfskleding in Acceptatie; met SVRZ#36013 binnenkort misschien definitief (en anders weg)!!! CREATE OR REPLACE VIEW svrz_v_kleding_artikelen ( bes_srtdeel_key, bes_srtdeel_oms, bes_srtdeel_vvd ) AS SELECT sd.bes_srtdeel_key, sd.bes_srtdeel_omschrijving, sd.bes_srtdeel_verwijder FROM bes_srtgroep sg, bes_srtdeel sd WHERE sg.ins_discipline_key = 1721 -- Wessels B.V. AND sd.bes_srtgroep_key = sg.bes_srtgroep_key; */ -- SVRZ#51694: Notificatie bij update of verwijdering van objecten die vallen -- onder de disciplines 'Uitleen personeel' en 'Werkkleding'. -- SVRZ#59377: Of onder de objectsoorten 'Mobiel (svrz)' en 'Tablet (TB0)'. CREATE OR REPLACE VIEW svrz_v_rap_bezittingen ( ins_deel_key, extra_key, -- Moet zo heten! gebruiker, identificatie, objectsoort, beschrijving, registratiedatum, verwijderdatum, tonen, inleverdatum ) AS SELECT d.ins_deel_key, d.ins_alg_ruimte_key, -- Gebruiker pf.prs_perslid_naam_friendly, d.ins_deel_omschrijving, sd.ins_srtdeel_omschrijving, d.ins_deel_opmerking, d.ins_deel_aanmaak, d.ins_deel_verwijder, DECODE (d.ins_deel_verwijder, NULL, DECODE (SIGN (ADD_MONTHS (d.ins_deel_vervaldatum, 1) - SYSDATE), -1, 0, 1), 0) tonen, DECODE (SIGN (d.ins_deel_vervaldatum - SYSDATE), -1, d.ins_deel_vervaldatum, NULL) inleverdatum FROM ins_deel d, -- Inclusief recent verwijderde objecten! prs_v_perslid_fullnames_all pf, ins_srtdeel sd WHERE (d.ins_discipline_key IN (781, 2261) -- Uitleen Personeel/Werkkleding OR d.ins_srtdeel_key IN (701, 707)) -- Mobiel (svrz)/Tablet (TB0) AND d.ins_alg_ruimte_type = 'P' AND d.ins_alg_ruimte_key = pf.prs_perslid_key AND COALESCE (d.ins_deel_verwijder, SYSDATE) >= TRUNC (SYSDATE - 1) AND d.ins_srtdeel_key = sd.ins_srtdeel_key; CREATE OR REPLACE VIEW svrz_v_noti_bezittingen ( code, sender, receiver, text, key, xkey ) AS SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, v.extra_key, REPLACE (sn.fac_srtnotificatie_oms, '##AANT##', (SELECT COUNT ( * ) FROM svrz_v_rap_bezittingen WHERE extra_key = v.extra_key)), r.fac_usrrap_key, v.extra_key FROM svrz_v_rap_bezittingen v, fac_tracking t, fac_usrrap r, fac_srtnotificatie sn WHERE v.ins_deel_key = t.fac_tracking_refkey AND t.fac_srtnotificatie_key IN (93, 94) -- INSNEW/INSUPD AND NOT EXISTS -- Niet tijdens een import gedaan! (SELECT 1 FROM fac_import WHERE fac_import_app_key = 42 -- INS AND prs_perslid_key = t.prs_perslid_key AND t.fac_tracking_datum BETWEEN fac_import_datum_gelezen AND fac_import_datum_verwerkt) AND t.fac_tracking_datum > DECODE ( TO_CHAR (SYSDATE + 5 / 1440, 'HH24'), '09', TO_DATE (TO_CHAR (SYSDATE - 1, 'dd-mm-yyyy') || ' 18:00', 'dd-mm-yyyy hh24:mi'), '12', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 09:00', 'dd-mm-yyyy hh24:mi'), '15', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 12:00', 'dd-mm-yyyy hh24:mi'), '18', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 15:00', 'dd-mm-yyyy hh24:mi'), SYSDATE + 5 / 1440) AND UPPER (r.fac_usrrap_view_name) = 'SVRZ_V_RAP_BEZITTINGEN' AND sn.fac_srtnotificatie_code = 'CUST03' AND BITAND (sn.fac_srtnotificatie_mode, 2) = 2 UNION -- INSDEL wordt niet getrackt, dus op basis van ins_deel_verwijder! SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, v.extra_key, REPLACE (sn.fac_srtnotificatie_oms, '##AANT##', (SELECT COUNT ( * ) FROM svrz_v_rap_bezittingen WHERE extra_key = v.extra_key)), r.fac_usrrap_key, v.extra_key FROM svrz_v_rap_bezittingen v, ( SELECT d1.ins_deel_key, COUNT ( * ) aantal FROM ins_deel d1, ins_deel d2 WHERE d1.ins_discipline_key IN (781, 2261) AND d1.ins_deel_verwijder > TRUNC (SYSDATE - 1) -- Sinds gisteren verwijderd tegelijk met andere objecten AND d1.ins_deel_verwijder BETWEEN d2.ins_deel_verwijder - 1 / 86400 AND d2.ins_deel_verwijder + 1 / 86400 GROUP BY d1.ins_deel_key) d, fac_usrrap r, fac_srtnotificatie sn WHERE v.ins_deel_key = d.ins_deel_key AND d.aantal < 10 AND v.verwijderdatum > DECODE ( TO_CHAR (SYSDATE + 5 / 1440, 'HH24'), '09', TO_DATE (TO_CHAR (SYSDATE - 1, 'dd-mm-yyyy') || ' 18:00', 'dd-mm-yyyy hh24:mi'), '12', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 09:00', 'dd-mm-yyyy hh24:mi'), '15', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 12:00', 'dd-mm-yyyy hh24:mi'), '18', TO_DATE (TO_CHAR (SYSDATE, 'dd-mm-yyyy') || ' 15:00', 'dd-mm-yyyy hh24:mi'), SYSDATE + 5 / 1440) AND UPPER (r.fac_usrrap_view_name) = 'SVRZ_V_RAP_BEZITTINGEN' AND sn.fac_srtnotificatie_code = 'CUST03' AND BITAND (sn.fac_srtnotificatie_mode, 2) = 2 UNION -- SVRZ#59828: Precies 2 weken voor uitdienst de in te leveren bezittingen notificeren! SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, v.extra_key, REPLACE (sn.fac_srtnotificatie_oms, '##AANT##', (SELECT COUNT ( * ) FROM svrz_v_rap_bezittingen WHERE extra_key = v.extra_key)), r.fac_usrrap_key, v.extra_key FROM svrz_v_rap_bezittingen v, prs_v_aanwezigperslid p, fac_usrrap r, fac_srtnotificatie sn WHERE v.extra_key = p.prs_perslid_key AND TRUNC (p.prs_perslid_einddatum) = TRUNC (SYSDATE + 14) AND TO_CHAR (SYSDATE + 5 / 1440, 'HH24') = '07' AND UPPER (r.fac_usrrap_view_name) = 'SVRZ_V_RAP_BEZITTINGEN' AND sn.fac_srtnotificatie_code = 'CUST04' AND BITAND (sn.fac_srtnotificatie_mode, 2) = 2; CREATE OR REPLACE VIEW svrz_v_perslid_nr_all ( prs_perslid_key, prs_perslid_naam_full, prs_perslid_naam_friendly, prs_perslid_verwijder ) AS SELECT pf.prs_perslid_key, pf.prs_perslid_naam_full || ' [' || p.prs_perslid_nr || ']', pf.prs_perslid_naam_friendly || ' [' || p.prs_perslid_nr || ']', p.prs_perslid_verwijder FROM prs_perslid p, prs_v_perslid_fullnames_all pf WHERE SUBSTR (p.prs_perslid_oslogin, 1, 1) != '_' AND p.prs_perslid_key = pf.prs_perslid_key; CREATE OR REPLACE VIEW svrz_v_relaties_u_ict ( prs_bedrijf_key, prs_bedrijf_naam, prs_bedrijf_verwijder ) AS SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, b.prs_bedrijf_verwijder FROM prs_bedrijf b WHERE b.prs_bedrijf_uitvoerende = 1; -- SVRZ#55239: Mail2Melding bij migratie Topdesk naar FACILITOR. Twee stromen: -- - HELPDESK -: Soortmelding 1691 (Hardware/Computer) onder Vakgroep 3038 -- (Helpdesk I+A) onder Vakgroeptype 161! -- - CLIENTPORTAAL -: Soortmelding 1697 (Clientportaal) onder Vakgroep 3042 -- (Servicedesk MijnCaress) onder Vakgroeptype 161! -- SVRZ#71487: Nieuwe stroom: OWSTAB -- SVRZ#72786: Nieuwe stroom: AFAS-BEHEER -- SVRZ#75271: Nieuwe stroom: TELECOM-SVRZ -- SVRZ#82889: Nieuwe stroom: PRIVACY-SVRZ CREATE OR REPLACE PROCEDURE SVRZ_processemail ( pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS c_onbekend_key NUMBER (10) := 36281; -- Onbekende gebruiker v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_exist_ticket VARCHAR2 (255) := ''; v_perslid_key NUMBER (10); v_kostenplaats_key NUMBER (10); v_locatie_key NUMBER (10); v_discipline_key NUMBER (10); v_stdmelding_key NUMBER (10); v_behandelteam_key NUMBER (10); v_melding_key NUMBER (10); v_folder_kkey NUMBER (10); v_count NUMBER (10); BEGIN CASE WHEN UPPER (pto) LIKE 'HELPDESK@%' THEN -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 61=Servicecentrum! SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=1691=Harware/Computer! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key INTO v_discipline_key, v_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_key = 1691; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, 3141) -- BT Helpdesk I+A RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; WHEN UPPER (pto) LIKE 'CLIENTPORTAAL@%' THEN -- Melder/noteur per definitie Onbekend en 61=Servicecentrum! v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=1697=Clientportaal! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key INTO v_discipline_key, v_stdmelding_key FROM mld_stdmelding WHERE mld_stdmelding_key = 1697; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, 3061) -- BT Medewerkers Cliëntportaal RETURNING mld_melding_key INTO v_melding_key; v_errormsg := 'Fout toevoegen Emailadres'; INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) VALUES (v_melding_key, 1101, -- Emailadres SUBSTR (pfrom, 1, 50)); mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; WHEN UPPER (pto) LIKE 'OWSTAB@%' THEN -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 61=Servicecentrum! SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=2661=OWS / ESS (roosterprogramma)! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key, mld_stdmelding_default_disc INTO v_discipline_key, v_stdmelding_key, v_behandelteam_key FROM mld_stdmelding WHERE mld_stdmelding_key = 2661; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, v_behandelteam_key) -- BT Logistiek & Planning RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; WHEN UPPER (pto) LIKE 'AFAS-BEHEER@%' THEN -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 61=Servicecentrum! SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=3121=Afas beheer! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key, mld_stdmelding_default_disc INTO v_discipline_key, v_stdmelding_key, v_behandelteam_key FROM mld_stdmelding WHERE mld_stdmelding_key = 3121; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, v_behandelteam_key) -- BT Afas beheer RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; WHEN UPPER (pto) LIKE 'TELECOM-SVRZ@%' THEN -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 61=Servicecentrum! SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=1741=Zorgalarmering (deur-, bewegingssensoren, etc.)! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key, mld_stdmelding_default_disc INTO v_discipline_key, v_stdmelding_key, v_behandelteam_key FROM mld_stdmelding WHERE mld_stdmelding_key = 1741; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, v_behandelteam_key) -- BT Telecom & Zorgalarmering RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; WHEN UPPER (pto) LIKE 'PRIVACY-SVRZ@%' THEN -- Bepaal de melder/noteur op basis van e-mail adres zoals in pfrom? v_errormsg := 'Fout bepalen melder ' || COALESCE (pfrom, '???'); SELECT COUNT (*) INTO v_count FROM prs_v_aanwezigperslid WHERE UPPER (prs_perslid_email) LIKE UPPER (pfrom) || '%'; IF v_count = 1 THEN SELECT p.prs_perslid_key, a.prs_kostenplaats_key, MIN (wpg.alg_locatie_key) INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a, (SELECT pw.prs_perslid_key, pw.prs_werkplek_key FROM prs_perslidwerkplek pw WHERE NOT EXISTS (SELECT 1 FROM prs_perslidwerkplek WHERE prs_perslid_key = pw.prs_perslid_key AND prs_perslidwerkplek_key > pw.prs_perslidwerkplek_key)) pw, prs_v_werkplekperslid_gegevens wpg WHERE p.prs_afdeling_key = a.prs_afdeling_key AND UPPER (p.prs_perslid_email) LIKE UPPER (pfrom) || '%' AND p.prs_perslid_key = pw.prs_perslid_key(+) AND pw.prs_werkplek_key = wpg.prs_werkplek_key(+) GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; ELSE -- Melder kan niet 1-duidig worden bepaald, dus Onbekend en 61=Servicecentrum! SELECT p.prs_perslid_key, a.prs_kostenplaats_key, 61 INTO v_perslid_key, v_kostenplaats_key, v_locatie_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_perslid_key = c_onbekend_key; END IF; v_errormsg := 'Fout bepalen bestaande melding'; v_exist_ticket := psubject; IF REGEXP_INSTR (v_exist_ticket, '\d') > 0 THEN v_exist_ticket := SUBSTR (v_exist_ticket, REGEXP_INSTR (v_exist_ticket, '\d')) || 'x'; -- Gedeelte vanaf eerste cijfer in v_exist_ticket plus 'x'! v_exist_ticket := SUBSTR (v_exist_ticket, 1, REGEXP_INSTR (v_exist_ticket, '\D') - 1); -- Gedeelte tot eerste niet-cijfer in v_exist_ticket! ELSE v_exist_ticket := 'x'; END IF; SELECT COUNT (*) INTO v_count FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); -- Om te voorkomen dat huisnummers in het Onderwerp resulteren in het -- toevoegen van Notities, dit alleen doen voor nummers > 16000! IF v_count = 1 AND fac.safe_to_number (v_exist_ticket) > 16000 THEN -- Notitie bij bestaande melding! SELECT mld_stdmelding_key, mld_melding_key INTO v_stdmelding_key, v_melding_key FROM mld_melding WHERE mld_melding_key = fac.safe_to_number (v_exist_ticket); v_errormsg := 'Fout toevoegen notitie'; INSERT INTO mld_melding_note (mld_melding_key, prs_perslid_key, mld_melding_note_omschrijving, mld_melding_note_flag) VALUES (v_melding_key, v_perslid_key, pfrom || CHR (13) || CHR (10) || psubject || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), 0); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Notitie onder exist-melding ' || v_melding_key); -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet! IF fac.getsetting ('mld_melding_actiecode') = 1 THEN UPDATE mld_melding SET mld_melding_actiecode = 1 + 128 -- BO + Attentie WHERE mld_melding_key = v_melding_key; END IF; ELSE -- Nieuwe melding! -- Bepaal de afgesproken soortmelding met key=3201=Privacy + Security! v_errormsg := 'Fout bepalen soortmelding'; SELECT mld_ins_discipline_key, mld_stdmelding_key, mld_stdmelding_default_disc INTO v_discipline_key, v_stdmelding_key, v_behandelteam_key FROM mld_stdmelding WHERE mld_stdmelding_key = 3201; -- Suggested extensions: -- - Check for MLDUSE-write autorisations -- - Parse the subject to find the appropriate stdmelding, if uniquely possible -- - Append (as a note?) to an existing melding if #key is found in the subject v_errormsg := 'Fout toevoegen melding'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_t_uitvoertijd, prs_kostenplaats_key, prs_perslid_key, prs_perslid_key_voor, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp, mld_melding_behandelaar2_key, mld_ins_discipline_key) VALUES ('MLD', 4, -- email v_locatie_key, NULL, --v_onrgoed_keys, SYSDATE, pfrom || CHR (13) || CHR (10) || SUBSTR (pbody, 1, 2000), v_stdmelding_key, NULL, v_kostenplaats_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal SUBSTR (psubject, 1, 80), NULL, v_behandelteam_key) -- BT Telecom & Zorgalarmering RETURNING mld_melding_key INTO v_melding_key; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); END IF; -- Find the lowest volgnummer of the Folder-flexfield. SELECT MIN (k1.mld_kenmerk_key) INTO v_folder_kkey FROM mld_stdmelding sm1, ins_tab_discipline td1, mld_kenmerk k1, mld_srtkenmerk sk1 WHERE sm1.mld_stdmelding_key = v_stdmelding_key AND sm1.mld_ins_discipline_key = td1.ins_discipline_key AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_srtkenmerk_key = sk1.mld_srtkenmerk_key AND sk1.mld_srtkenmerk_kenmerktype = 'M' AND ((k1.mld_stdmelding_key = sm1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = td1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = td1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND NOT EXISTS (SELECT 1 FROM mld_stdmelding sm2, ins_tab_discipline td2, mld_kenmerk k2, mld_srtkenmerk sk2 WHERE sm2.mld_stdmelding_key = v_stdmelding_key AND sm2.mld_ins_discipline_key = td2.ins_discipline_key AND k2.mld_kenmerk_verwijder IS NULL AND k2.mld_srtkenmerk_key = sk2.mld_srtkenmerk_key AND sk2.mld_srtkenmerk_kenmerktype = 'M' AND ((k2.mld_stdmelding_key = sm2.mld_stdmelding_key AND k2.mld_kenmerk_niveau = 'S') OR (k2.mld_stdmelding_key = td2.ins_discipline_key AND k2.mld_kenmerk_niveau = 'D') OR (k2.mld_stdmelding_key = td2.ins_srtdiscipline_key AND k2.mld_kenmerk_niveau = 'T')) AND k2.mld_kenmerk_volgnummer < k1.mld_kenmerk_volgnummer); IF v_folder_kkey IS NOT NULL THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || v_folder_kkey || '\'); END IF; -- Handle workflow actions for completion (in case of new melding). IF v_count = 0 THEN MLD.mld_nextworkflowstep (v_melding_key, -1); -- -1=Initial END IF; ELSE INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Ontvanger ongeldig - Neem contact op met uw systeembeheerder '); END CASE; 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.writelog ('PROCESSEMAIL', 'E', 'SVRZ_processemail afgebroken!', '[' || pfrom || '] ' || v_errormsg); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Database fout - Neem contact op met uw systeembeheerder '); COMMIT; END; / -- Notificatie naar externe clientportaal-melders (per e-mail binnengelopen via -- SVRZ_processemail()). CREATE OR REPLACE VIEW svrz_v_noti_clientportaal ( sender, receiver, text, code, key, xkey, xsender, xemail, xmobile, attachments ) AS SELECT NULL, NULL, REPLACE ( REPLACE ( REPLACE ( lcl.x ('fac_srtnotificatie_oms', sn.fac_srtnotificatie_key, sn.fac_srtnotificatie_oms), '##KEY##', TO_CHAR (x.mld_melding_key)), '##STDMLD##', TO_CHAR (x.mld_stdmelding_omschrijving)), '##DISC##', TO_CHAR (x.ins_discipline_omschrijving)), sn.fac_srtnotificatie_code, -- TODO:Of CUSTxx? x.mld_melding_key, NULL, 'clientportaal@svrz.nl', x.receiver, NULL, DECODE ( sn.fac_srtnotificatie_key, 341, 'MLD/M' || SUBSTR (LPAD (TO_CHAR (x.mld_melding_key), 7, '0'), 1, 4) || '___/M' || TO_CHAR (x.mld_melding_key) || '/' || TO_CHAR (y.mld_kenmerk_key) || '/*', -- Bijlage(n) bij MLDNOT! NULL) FROM (SELECT m.mld_melding_key, sm.mld_stdmelding_key, md.ins_discipline_key, md.ins_srtdiscipline_key, sm.mld_stdmelding_omschrijving, md.ins_discipline_omschrijving, km.mld_kenmerkmelding_waarde receiver, t.fac_srtnotificatie_key FROM mld_melding m, mld_stdmelding sm, mld_discipline md, mld_kenmerkmelding km, (SELECT t1.fac_tracking_refkey, t1.fac_tracking_datum, t1.fac_srtnotificatie_key FROM fac_tracking t1 WHERE t1.fac_srtnotificatie_key = 22 -- MLDAFM AND NOT EXISTS (SELECT 1 FROM fac_tracking t2 WHERE t2.fac_srtnotificatie_key = 22 AND t2.fac_tracking_refkey = t1.fac_tracking_refkey AND t2.fac_tracking_key > t1.fac_tracking_key) UNION ALL SELECT mn1.mld_melding_key fac_tracking_refkey, mn1.mld_melding_note_aanmaak fac_tracking_datum, 341 fac_srtnotificatie_key -- MLDNOT FROM mld_melding_note mn1 WHERE MOD (mn1.mld_melding_note_flag, 2) = 1 AND NOT EXISTS (SELECT 1 FROM mld_melding_note mn2 WHERE MOD (mn2.mld_melding_note_flag, 2) = 1 AND mn2.mld_melding_key = mn1.mld_melding_key AND mn2.mld_melding_note_key > mn1.mld_melding_note_key)) t, -- Zichtbaar voor melder fac_notificatie_job nj WHERE m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND m.mld_melding_key = km.mld_melding_key AND km.mld_kenmerkmelding_verwijder IS NULL AND km.mld_kenmerk_key = 1101 -- Emailadres AND m.mld_melding_key = t.fac_tracking_refkey AND nj.fac_notificatie_job_view = 'SVRZ_V_NOTI_CLIENTPORTAAL' AND t.fac_tracking_datum BETWEEN nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24) AND nj.fac_notificatie_job_nextrun) x LEFT JOIN (SELECT mld_stdmelding_key, mld_kenmerk_niveau, mld_kenmerk_key FROM mld_kenmerk WHERE mld_kenmerk_verwijder IS NULL AND mld_srtkenmerk_key = 521) y -- Naar cliënt te notificeren bijlagen (bij MLDNOT) ON ((x.mld_stdmelding_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'S') OR (x.ins_discipline_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'D') OR (x.ins_srtdiscipline_key = y.mld_stdmelding_key AND y.mld_kenmerk_niveau = 'T')) LEFT JOIN fac_srtnotificatie sn ON x.fac_srtnotificatie_key = sn.fac_srtnotificatie_key; -- SVRZ#62692: CMDB-objecten per plaats! CREATE OR REPLACE VIEW svrz_v_rap_cmdb_plaats ( ins_deel_key, discipline, groep, objectsoort, objectsoortcode, objectid, objectbeschr, districtomschr, locatiecode, locatieomschr, merk, component ) AS SELECT x.ins_deel_key, x.ins_discipline_omschrijving, x.ins_srtgroep_omschrijving, x.ins_srtdeel_omschrijving, x.ins_srtdeel_code, x.ins_deel_omschrijving, x.ins_deel_opmerking, x.district, x.locatiecode, x.locatieomschr, COALESCE ((SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = fac.safe_to_number (kd2.ins_kenmerkdeel_waarde)), (SELECT fac_usrdata_omschr FROM fac_usrdata WHERE fac_usrdata_key = fac.safe_to_number (kd3.ins_kenmerkdeel_waarde))) merk, DECODE (x.ins_discipline_key, 3082, DECODE (x.ins_srtdeel_code, 'PRT', 'Printer', 'PC', 'Werkstation - Desktop', 'LT', 'Werkstation - Laptop', 'TC', 'Werkstation - Terminal', 'Anders (Hardware)'), DECODE (x.ins_srtdeel_code, 'TB', DECODE (kd3.ins_kenmerkdeel_waarde, '1142', 'iPad', '1144', 'Dell Latitude', '1148', 'Surface', '1152', 'Samsung SM-T595', 'Anders (Telefonie/TB)'), DECODE (kd3.ins_kenmerkdeel_waarde, '1150', 'Telefoon - GSM', '1152', 'Telefoon - Smartphone', 'Anders (Telefonie)'))) component FROM (SELECT d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_opmerking, td.ins_discipline_key, td.ins_discipline_omschrijving, sg.ins_srtgroep_key, sg.ins_srtgroep_omschrijving, sd.ins_srtdeel_key, sd.ins_srtdeel_omschrijving, sd.ins_srtdeel_code, 'Onbekend' district, 'ONB' locatiecode, 'Onbekend' locatieomschr FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_tab_discipline td WHERE d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type = 'A' AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key AND td.ins_discipline_key IN (3082, 3083) -- Hardware/Telefonie UNION ALL SELECT d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_opmerking, td.ins_discipline_key, td.ins_discipline_omschrijving, sg.ins_srtgroep_key, sg.ins_srtgroep_omschrijving, sd.ins_srtdeel_key, sd.ins_srtdeel_omschrijving, sd.ins_srtdeel_code, --COALESCE (di.alg_district_omschrijving, 'Onbekend') district, --l.alg_locatie_code locatiecode, --l.alg_locatie_omschrijving locatieomschr 'Onbekend' district, 'ONB' locatiecode, 'Onbekend' locatieomschr FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_tab_discipline td, ( SELECT p.prs_perslid_key, MAX (pw.prs_werkplek_key) prs_werkplek_key FROM prs_v_aanwezigperslid p, prs_perslidwerkplek pwp, prs_werkplek pw WHERE p.prs_perslid_key = pwp.prs_perslid_key AND pwp.prs_werkplek_key = pw.prs_werkplek_key GROUP BY p.prs_perslid_key) pwp, prs_v_werkplek_gegevens wpg, alg_locatie l, alg_district di WHERE d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type = 'P' AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key AND td.ins_discipline_key IN (3082, 3083) -- Hardware/Telefonie AND d.ins_alg_ruimte_key = pwp.prs_perslid_key(+) AND pwp.prs_werkplek_key = wpg.prs_werkplek_key(+) AND wpg.alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = di.alg_district_key(+) UNION ALL SELECT d.ins_deel_key, d.ins_deel_omschrijving, d.ins_deel_opmerking, td.ins_discipline_key, td.ins_discipline_omschrijving, sg.ins_srtgroep_key, sg.ins_srtgroep_omschrijving, sd.ins_srtdeel_key, sd.ins_srtdeel_omschrijving, sd.ins_srtdeel_code, DECODE (d.ins_alg_ruimte_key, 8582, 'Voorraad SC', di.alg_district_omschrijving) district, -- 8582=b1.10 (Opslag I&A) DECODE (d.ins_alg_ruimte_key, 8582, 'Voorraad SC', l.alg_locatie_code) locatiecode, -- 8582=b1.10 (Opslag I&A) DECODE (d.ins_alg_ruimte_key, 8582, 'Voorraad SC', l.alg_locatie_code) locatieomschr -- 8582=b1.10 (Opslag I&A) FROM ins_v_aanwezigdeel d, ins_srtdeel sd, ins_srtgroep sg, ins_tab_discipline td, --ins_v_alg_overzicht o, alg_locatie l, alg_district di WHERE d.ins_deel_parent_key IS NULL AND d.ins_alg_ruimte_type IN ('T', 'R', 'W') AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = td.ins_discipline_key AND td.ins_discipline_key IN (3082, 3083) -- Hardware/Telefonie --AND d.ins_alg_ruimte_key = o.alg_onroerendgoed_keys --AND d.ins_alg_ruimte_type = o.alg_onroerendgoed_type AND d.ins_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = di.alg_district_key) x LEFT JOIN ins_v_aanwezigkenmerkdeel kd1 ON x.ins_deel_key = kd1.ins_deel_key AND kd1.ins_kenmerk_key IN (69, 82) -- Status (resp. Hardware en Telefonie) LEFT JOIN ins_v_aanwezigkenmerkdeel kd2 ON x.ins_deel_key = kd2.ins_deel_key AND kd2.ins_kenmerk_key = 62 -- MerkHardware (igv. Hardware) LEFT JOIN ins_v_aanwezigkenmerkdeel kd3 ON x.ins_deel_key = kd3.ins_deel_key AND kd3.ins_kenmerk_key = 75 -- MerkTelefonie (igv. Telefonie) WHERE kd1.ins_kenmerkdeel_waarde = '841' -- Actief ; /* AND DECODE (x.ins_discipline_key, 3082, DECODE (x.ins_srtdeel_code, 'PRT', 'Printer', 'PC', 'Werkstation - Desktop', 'LT', 'Werkstation - Laptop', 'TC', 'Werkstation - Terminal', 'Anders (Hardware)'), DECODE (kd2.ins_kenmerkdeel_waarde, 'Nokia', 'Telefoon - GSM', 'Samsung', 'Telefoons - Smartphone', 'Anders (Telefonie)')) NOT LIKE 'Anders%'; */ -- SVRZ#66464: UDR_V_INS_DEEL inclusief organisatie (en personeelsnummer)! CREATE OR REPLACE VIEW SVRZ_V_INS_DEEL ( DEEL_KEY, DISCIPLINE, GROEP, SOORTCODE, SOORT, OMSCHRIJVING, PLAATSEIGENAAR, PLAATSEIGENAARTYPE, PLAATSAANDUIDING, EIGENAAR_KEY, EIGENAAR, EIGENAAR_NR, -- Extra toegevoegd EIGENAAR_AFDCODE, -- Extra toegevoegd EIGENAAR_AFDOMS, -- Extra toegevoegd OPMERKING, REGIO, DISTRICT, LOCATIE_CODE, LOCATIE_OMSCHRIJVING, LOCATIE_PLAATS, GEBOUWCODE, GEBOUW, TERREINSECTORCODE, TERREINSECTOR, VERDIEPINGCODE, RUIMTENR, WERKPLEKVOLGNR, WERKPLEK, UITLEENBAAR, UITGELEEND, RES_OPMERKING, BEHEERDER, VERVALDATUM, ACTIEF, AANTAL, STATE, STATEDATE, FCLT_3D_DISCIPLINE_KEY, FCLT_3D_AFDELING_KEY, FCLT_3D_LOCATIE_KEY ) AS SELECT d.deel_key, d.discipline, d.groep, d.soortcode, d.soort, d.omschrijving, d.plaatseigenaar, d.plaatseigenaartype, d.plaatsaanduiding, d.eigenaar_key, d.eigenaar, p.prs_perslid_nr, a.prs_afdeling_naam, a.prs_afdeling_omschrijving, d.opmerking, d.regio, d.district, d.locatie_code, d.locatie_omschrijving, d.locatie_plaats, d.gebouwcode, d.gebouw, d.terreinsectorcode, d.terreinsector, d.verdiepingcode, d.ruimtenr, d.werkplekvolgnr, d.werkplek, d.uitleenbaar, d.uitgeleend, d.res_opmerking, d.beheerder, d.vervaldatum, d.actief, d.aantal, d.state, d.statedate, d.fclt_3d_discipline_key, d.fclt_3d_afdeling_key, d.fclt_3d_locatie_key FROM ins_v_udr_deel d, prs_perslid p, prs_afdeling a WHERE d.eigenaar_key = p.prs_perslid_key(+) AND p.prs_afdeling_key = a.prs_afdeling_key(+); CREATE OR REPLACE VIEW SVRZ_V_RAP_PRS_GEG ( medewerker1, medewerker2, personeelsnummer, functie, profiel, adres_naam, adres_gebouw_ruimte, bezoek_adres, bezoek_postcode, bezoek_plaats, post_adres, post_postcode, post_plaats ) AS SELECT pf.prs_perslid_naam_full, pf.prs_perslid_naam_friendly, p.prs_perslid_nr, sp.prs_srtperslid_omschrijving, pr.fac_profiel_omschrijving, a.mld_adres_naam, a.mld_adres_gebouw_ruimte, a.mld_adres_bezoek_adres, a.mld_adres_bezoek_postcode, a.mld_adres_bezoek_plaats, a.mld_adres_post_adres, a.mld_adres_post_postcode, a.mld_adres_post_plaats FROM prs_v_aanwezigperslid p, prs_v_perslid_fullnames pf, prs_srtperslid sp, fac_profiel pr, mld_adres a WHERE p.prs_perslid_key = pf.prs_perslid_key AND p.prs_srtperslid_key = sp.prs_srtperslid_key(+) AND p.fac_profiel_key = pr.fac_profiel_key(+) AND p.mld_adres_key = a.mld_adres_key(+); -- SVRZ#76093: Rapportage Bedrijf! CREATE OR REPLACE VIEW SVRZ_V_RAP_REL_GEG ( bedrijf, leveranciersnummer, bezoek_adres, bezoek_postcode, bezoek_plaats, bezoek_land, post_adres, post_postcode, post_plaats, post_land, telefoon, email, l, u, c, h, kanaal_type, kanaal_opdrachttype, kanaal_url, kanaal_xsl ) AS SELECT b.prs_bedrijf_naam, b.prs_leverancier_nr, b.prs_bedrijf_bezoek_adres, b.prs_bedrijf_bezoek_postcode, b.prs_bedrijf_bezoek_plaats, b.prs_bedrijf_bezoek_land, b.prs_bedrijf_post_adres, b.prs_bedrijf_post_postcode, b.prs_bedrijf_post_plaats, b.prs_bedrijf_post_land, b.prs_bedrijf_telefoon, b.prs_bedrijf_email, b.prs_bedrijf_leverancier l, b.prs_bedrijf_uitvoerende u, b.prs_bedrijf_contract c, b.prs_bedrijf_huurder h, ba.prs_bedrijfadres_type kanaal_type, DECODE (ba.prs_bedrijfadres_type, 'O', DECODE (ot.mld_typeopdr_key, NULL, 'Overige', ot.mld_typeopdr_omschrijving), NULL) kanaal_opdrachttype, ba.prs_bedrijfadres_url kanaal_url, ba.prs_bedrijfadres_xsl kanaal_xsl FROM prs_v_aanwezigbedrijf b, prs_bedrijfadres ba, mld_typeopdr ot WHERE b.prs_bedrijf_key = ba.prs_bedrijf_key(+) AND ba.mld_typeopdr_key = ot.mld_typeopdr_key(+); ------ 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