diff --git a/PNBR/pnbr.sql b/PNBR/pnbr.sql index 0cc2be456..932c8b8f5 100644 --- a/PNBR/pnbr.sql +++ b/PNBR/pnbr.sql @@ -3760,6 +3760,232 @@ AS AND tr.fac_tracking_refkey(+) = m.mld_melding_key AND tr2.fac_tracking_refkey(+) = m.mld_melding_key; + +--- PNBR#36004 Functie voor het 'uitlezen' van de mail body vanuit SAP voor een 'Choose Your Own Device' aanvraag +CREATE OR REPLACE FUNCTION pnbr_get_html_value (p_text IN VARCHAR2, + p_start IN VARCHAR2) + RETURN VARCHAR2 +AS + v_pos NUMBER; + v_pos_begin NUMBER; + v_pos_eind NUMBER; + v_result VARCHAR2(4000); +BEGIN + + -- Controleer of de begintag aanwezig is. Zo nee, dan hebben we niets te tonen. + -- Bepaal de positie waar de opgegeven start tekst begint + v_pos := INSTR (p_text, p_start); + + -- Als de opgegeven start tekst niet gevonden wordt dan is v_pos 0 + IF v_pos = 0 + THEN + RETURN NULL; + END IF; + + -- Bij pnbr staat de beginpositie op dezelfde regel. + -- De beginpositie wordt bepaald door startpositie van de opgegeven start tekst Personeelsnummer de lengte van de starttekst + carriage return (CHR13) + linefeed (CHR10) + v_pos_begin := + INSTR (p_text, CHR (13) || CHR (10) || p_start ) + + LENGTH (p_start) + + 2; + + --- Eind positie is altijd einde van de regel + v_pos_eind := + INSTR (p_text, + CHR (13) || CHR (10), + v_pos_begin, + 1); + + -- v_result is alles vanaf de startpositie tot aan het einde + v_result := SUBSTR (p_text, v_pos_begin, v_pos_eind - v_pos_begin); + + -- Soms wordt een tag niet gevonden. Dan wordt de hele body inclusief CSS meegestuurd. + -- Dat willen we natuurlijk niet. Daarom maken we daar maar een lege tag van. + IF LENGTH(v_result) > 1000 + THEN + v_result := p_start; + END IF; + + RETURN v_result; +END; + + +-- PNBR#36004 Procedure voor het verwerken van 'Choose Your Own Device' aanvraag vanuit SAP +CREATE OR REPLACE PROCEDURE pnbr_processemail + (pfrom IN VARCHAR2, + pto IN VARCHAR2, + psubject IN VARCHAR2, + pbody IN VARCHAR2, + psessionid IN VARCHAR2, + puserkey IN NUMBER DEFAULT NULL) +AS + sender prs_perslid.prs_perslid_key%TYPE; + persnr prs_perslid.prs_perslid_nr%type; + kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE; + v_mldkey mld_melding.mld_melding_key%TYPE; + defaultstdmelding fac_setting.fac_setting_default%TYPE; + errormsg fac_result.fac_result_waarde%TYPE; + v_soort_aanvraag VARCHAR2(50); + v_model_omschrijving VARCHAR2(40); + v_plus_standaard VARCHAR2(30); + v_eigen_bijdrage VARCHAR2(8); + v_from VARCHAR2 (1000); + v_mld_meldbron_key NUMBER (10); + +BEGIN + + -- Choose Your Own Device aanvragen vanuit SAP naar mld_stdmelding_key 7441 (Tablet) of mld_stdmelding_key 7442 (Telefoon) + v_soort_aanvraag := pnbr_get_html_value (pbody,'Soort Choose Your Own : '); + + IF v_soort_aanvraag='Tablet' + THEN + defaultstdmelding := '7441'; + END IF; + + IF v_soort_aanvraag='Telefoon' + THEN + defaultstdmelding := '7442'; + END IF; + + -- Meldbron = SAP, dus systeem = 6 + v_mld_meldbron_key := 6; + + -- Bij PNBR is de melder terug te halen uit de body van de email obv personeelsnummer aanvrager + -- Op basis van dit personeelsnummer kan de melder en de kostenplaats bepaald worden + persnr := pnbr_get_html_value (pbody,'Personeelsnummer aanvrager : '); + + SELECT prs_perslid_key, d.prs_kostenplaats_key + INTO sender, kostenplaats + FROM prs_perslid p, prs_afdeling d + WHERE p.prs_afdeling_key = d.prs_afdeling_key + AND prs_perslid_nr = persnr + AND prs_perslid_verwijder is null; + + -- Bepaal de kenmerkwaarden die bij de melding moeten worden weggeschreven + v_model_omschrijving := pnbr_get_html_value (pbody,'Model omschrijving : '); + v_plus_standaard := pnbr_get_html_value (pbody,'Plus/standaard model : '); + v_eigen_bijdrage := pnbr_get_html_value (pbody,'Eigen bijdrage : '); + +-- Registreer de melding in Facilitor + BEGIN + INSERT INTO mld_melding (mld_melding_module, + mld_meldbron_key, + mld_melding_datum, + mld_alg_locatie_key, + mld_melding_omschrijving, + mld_melding_status, + mld_stdmelding_key, + prs_perslid_key, + prs_perslid_key_voor, + prs_kostenplaats_key, + mld_melding_spoed) + VALUES ('MLD', + v_mld_meldbron_key, + SYSDATE, + 2, -- Provinciehuis Provincie Noord Brabant, alg_locatie_key=2 + SUBSTR ( + psubject || CHR (13) + || REPLACE ( + SUBSTR (pbody, + 1, + 4000 - (LENGTH (psubject) + 2)), + CHR (13) || CHR (10) || CHR (13) || CHR (10), + CHR (13) || CHR (10)), + 1, + 4000), -- verwijder onnodige witregels + NULL, + defaultstdmelding, + sender, + sender, + kostenplaats, + 3) + RETURNING mld_melding_key + INTO v_mldkey; + + -- Vullen van kenmerk Model omschrijving (key = 9161) voor CYO aanvraag tablet (mld_key 7441) + IF v_model_omschrijving is not null and defaultstdmelding='7441' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9161 , v_model_omschrijving); + END IF; + + -- Vullen van kenmerk Plus/standaard (key = 9162) voor CYO aanvraag tablet (mld_key 7441) + IF v_plus_standaard is not null and defaultstdmelding='7441' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9162 , v_plus_standaard); + END IF; + + -- Vullen van kenmerk Eigen bijdrag (key = 9163) voor CYO aanvraag tablet (mld_key 7441) + IF v_eigen_bijdrage is not null and defaultstdmelding='7441' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9163 , v_eigen_bijdrage); + END IF; + + -- Vullen van kenmerk Model omschrijving (key = 9164) voor CYO aanvraag telefoon (mld_key 7442) + IF v_model_omschrijving is not null and defaultstdmelding='7442' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9164 , v_model_omschrijving); + END IF; + + -- Vullen van kenmerk Plus/standaard (key = 9162) voor CYO aanvraag telefoon (mld_key 7442) + IF v_plus_standaard is not null and defaultstdmelding='7442' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9165 , v_plus_standaard); + END IF; + + -- Vullen van kenmerk Eigen bijdrag (key = 9163) voor CYO aanvraag telefoon (mld_key 7442) + IF v_eigen_bijdrage is not null and defaultstdmelding='7442' + THEN + INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) + VALUES (v_mldkey, 9166 , v_eigen_bijdrage); + END IF; + + mld.setmeldingstatus (v_mldkey, 2, sender); + + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey); + + END; + + + IF errormsg IS NOT NULL + THEN + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, 'errormsg', errormsg); + END IF; +EXCEPTION + WHEN OTHERS + THEN + fac.writelog ( + 'PROCESSEMAIL', + 'W', + 'Mail kon niet verwerkt worden afzender: ' + || pfrom + || '[' + || errormsg + || ']', + 'OTHERS (error ' + || SQLCODE + || '/' + || SUBSTR (SQLERRM, 1, 100) + || ')'); + INSERT INTO fac_result (fac_result_sessionid, + fac_result_naam, + fac_result_waarde) + VALUES (psessionid, + 'errormsg', + 'Database fout - Neem contact op met uw systeembeheerder'); +END; +/ + BEGIN adm.systrackscriptId('$Id$', 0); END; /