-- -- $Id$ -- -- Script containing customer specific configuration sql statements for aads: Arcadis Aqumen Facility Management DEFINE thisfile = 'YKPN.SQL' DEFINE dbuser = '^YKPN' 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 PACKAGE YKPN AS PROCEDURE mail_evenementaanvraag(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); PROCEDURE set_bez_pincode (p_bezoekers_key IN NUMBER); PROCEDURE update_bezoeker (p_bezoekers_key IN NUMBER); PROCEDURE set_kenmerk(p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER, p_kenmerk_waarde IN VARCHAR2, p_history IN NUMBER); FUNCTION get_kenmerk(p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER) RETURN VARCHAR2; PROCEDURE mld_after_insert (p_melding_key IN NUMBER); PROCEDURE opdracht_after_save (p_opdr_key IN NUMBER); FUNCTION res_presave (p_user_key IN NUMBER, p_rsv_ruimte_key IN NUMBER, p_activiteit_key IN NUMBER, p_res_deel_key IN NUMBER, p_datum_van IN DATE, p_datum_tot IN DATE, p_volgnr IN NUMBER) RETURN VARCHAR2; FUNCTION bes_checkrfo (p_user_key IN NUMBER, p_urole in VARCHAR2, p_srtdeel_keys in VARCHAR2) RETURN VARCHAR2; PROCEDURE res_after_insert (p_rsv_ruimte_key IN NUMBER); PROCEDURE set_nedap_status(p_bezoekers_key IN NUMBER, p_type IN VARCHAR2, p_nedap_id IN VARCHAR2); PROCEDURE fin_set_approver (p_factuur_key IN NUMBER); PROCEDURE add_xml_row (p_bestand IN VARCHAR2, p_regel IN VARCHAR2); PROCEDURE add_xml_element (p_bestand IN VARCHAR2, p_tag IN VARCHAR2, p_value IN VARCHAR2); PROCEDURE refreshscore(pUserKey IN NUMBER); FUNCTION get_flex_value (pmodule IN VARCHAR2, p_kenmerk_key IN NUMBER, p_ref_key IN NUMBER, p_kenmerkdomein_key IN NUMBER, p_niveau IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2; PROCEDURE update_ruimte_contract (p_ruimte_key IN NUMBER, p_afdeling_key IN NUMBER); PROCEDURE cleanup_room_dep_contracts; PROCEDURE mail_werkplekinrichting(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); PROCEDURE mail_werkpleklocatie (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER); PROCEDURE autoorder; PROCEDURE tsk_bevr_contract(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_mail_locman(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_bez_buitmld(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_bez_cleanup(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_cnt_index (p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_mld_keuring (p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_bes_geleverd(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_mld_thuiswerkwinkel(p_applname IN VARCHAR2, p_applrun IN VARCHAR2); PROCEDURE tsk_mldbes_approve (p_applname IN VARCHAR2, p_applrun IN VARCHAR2); END; / CREATE OR REPLACE PACKAGE BODY YKPN AS PROCEDURE mail_evenementaanvraag(pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS CURSOR sel (p_table IN VARCHAR2) is SELECT fud.fac_usrdata_omschr Tekstlabel, fud.fac_usrdata_omschr2 controle, (SELECT mld_stdmelding_key FROM mld_stdmelding sm WHERE sm.mld_stdmelding_key = fud.FAC_USRDATA_PRIJS AND sm.mld_stdmelding_verwijder IS NULL AND ( sm.mld_stdmelding_vervaldatum IS NULL OR sm.mld_stdmelding_vervaldatum > SYSDATE)) stdmelding_key FROM fac_usrdata fud, fac_usrtab fut WHERE UPPER (fut.fac_usrtab_naam) = UPPER ('EvenementAanvraa') AND fud.fac_usrtab_key = fut.fac_usrtab_key -- AND UPPER (fud.fac_usrdata_code) LIKE UPPER ('Formulier%') AND fud.FAC_USRDATA_VERWIJDER IS NULL AND ( fud.FAC_USRDATA_VERVALDATUM IS NULL OR fud.FAC_USRDATA_VERVALDATUM > SYSDATE); v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_error NUMBER; v_eigentabel VARCHAR2(20); v_value VARCHAR2(4000); v_kenmerk_key NUMBER; v_reserveringnr_label VARCHAR2 (1000); v_omschrijving_label VARCHAR2 (1000); v_aanvrager_label VARCHAR2 (1000); v_onderwerp_label VARCHAR2 (1000); v_datum_label VARCHAR2 (1000); v_starttijd_label VARCHAR2 (1000); v_eindtijd_label VARCHAR2 (1000); v_genodigden_label VARCHAR2 (1000); v_locatie_label VARCHAR2 (1000); v_catering_label VARCHAR2 (1000); v_bhv_label VARCHAR2 (1000); v_stdmelding_key NUMBER; v_melding_key NUMBER; v_onrgoed_key NUMBER; v_locatie_key NUMBER; v_perslid_key NUMBER; v_rrr_key NUMBER; v_reservering_key NUMBER; v_message VARCHAR2(250); v_reservering_nr VARCHAR2(200); v_aanvrager_email prs_perslid.prs_perslid_email%TYPE; v_aanvrager VARCHAR2(100); v_onderwerp mld_melding.mld_melding_onderwerp%type; v_omschrijving VARCHAR2(4000); v_alg_gebouw_key alg_gebouw.alg_gebouw_key%TYPE; v_datum VARCHAR2(4000); v_starttijd VARCHAR2(4000); v_eindtijd VARCHAR2(4000); v_genodigden VARCHAR2(4000); v_locatie VARCHAR2(4000); v_catering VARCHAR2(4000); v_cateraar_email VARCHAR2(200); v_bhv VARCHAR2(4000); v_stdmelding_uvt mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie FUNCTION findstr (p_body IN VARCHAR2, p_begin IN VARCHAR2, p_eind IN VARCHAR2) RETURN VARCHAR2 AS BEGIN RETURN SUBSTR ( p_body, INSTR (p_body, p_begin) + LENGTH (p_begin), INSTR (p_body, p_eind, INSTR (p_body, p_begin) + LENGTH (p_begin)) - (INSTR (p_body, p_begin) + LENGTH (p_begin))); END; FUNCTION getKenmerkKey (p_kenmerk_label IN VARCHAR2, p_stmelding_key IN NUMBER) RETURN NUMBER AS v_kenmerk_key NUMBER; BEGIN v_kenmerk_key:=-1; SELECT mld_kenmerk_key INTO v_kenmerk_key FROM mld_kenmerk k WHERE UPPER(k.mld_kenmerk_omschrijving) = UPPER(p_kenmerk_label) AND k.mld_kenmerk_verwijder IS NULL AND k.MLD_STDMELDING_KEY=p_stmelding_key; RETURN v_kenmerk_key; END; BEGIN v_eigentabel:='EvenementAanvraa'; v_errorhint:='Ophalen eigen tabel met instellingen'; v_stdmelding_key:=3801; -- Ondersteuning evenementen v_errormsg:='Ophalen standaardmelding mislukt'; -- SELECT mld_stdmelding_key -- INTO v_stdmelding_key -- from fac_usrdata fud, fac_usrtab fut, mld_stdmelding sm -- WHERE UPPER(fut.FAC_USRTAB_NAAM)=UPPER(v_eigentabel) -- AND fud.fac_usrtab_key = fut.fac_usrtab_key -- AND UPPER(fud.fac_usrdata_code)='STDMELDING' -- AND sm.mld_stdmelding_key=fac.safe_to_number(fud.fac_usrdata_omschr); v_error:=0; v_reserveringnr_label:='Reserveringsnummer:'; v_omschrijving_label:='Geef een omschrijving van het evenement:'; v_aanvrager_label:='Wie is de opdrachtgever?'; v_onderwerp_label:='Wat is de naam van het evenement?'; v_datum_label:='Wanneer vindt het evenement plaats?'; v_starttijd_label:='Wat is de beoogde aanvangstijd?'; v_eindtijd_label:='Wat is de beoogde eindtijd?'; v_locatie_label := 'Om welke KPN locatie gaat het?'; v_catering_label:='Heb je catering nodig bij jouw evenement?'; DELETE imp_log WHERE imp_log_applicatie = 'MAIL_EVENEMENTAANVRAAG'; -- AND imp_log_datum < SYSDATE - 14; -- De bais velden inlezen v_errorhint := 'Opzoeken velden in de mail'; v_reservering_nr := findstr(pbody, v_reserveringnr_label,CHR(10)); v_aanvrager_email := findstr(pbody, v_aanvrager_label|| CHR(10),CHR(10)); v_onderwerp := findstr(pbody, v_onderwerp_label|| CHR(10),CHR(10)); v_omschrijving := findstr(pbody, v_omschrijving_label|| CHR(10),CHR(10)); v_locatie := findstr(pbody, v_locatie_label|| CHR(10),CHR(10)); v_catering := findstr(pbody, v_catering_label|| CHR(10),CHR(10)); v_datum := findstr(pbody, v_datum_label|| CHR(10),CHR(10)); v_starttijd :=findstr(pbody, v_starttijd_label|| CHR(10),CHR(10)); v_eindtijd := findstr(pbody, v_eindtijd_label|| CHR(10),CHR(10)); --fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_reservering_nr='||v_reservering_nr ,''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_aanvrager_email='||v_aanvrager_email, ''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_onderwerp='||v_onderwerp ,''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_omschrijving='||v_omschrijving, ''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_locatie_key='||v_locatie_key ,''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_onrgoed_key='||v_onrgoed_key ,''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_rrr_key='||v_rrr_key ,''); -- fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'catering ='||v_catering ,''); v_errormsg:='Ophalen aanvrager mislukt'; BEGIN SELECT prs_perslid_key ,prs_perslid_voornaam||' '||prs_perslid_naam INTO v_perslid_key , v_aanvrager FROM prs_perslid WHERE UPPER(prs_perslid_email) = UPPER(v_aanvrager_email) AND prs_perslid_verwijder IS NULL AND (prs_perslid_inactief IS NULL OR prs_perslid_inactief > SYSDATE); EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key:=3; v_aanvrager:=NULL; END; fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_perslid_key='||v_perslid_key ,''); v_errormsg:='Ophalen reservering mislukt'; IF LENGTH(v_reservering_nr)>1 THEN BEGIN SELECT DECODE(m.alg_onrgoed_niveau, 'L', a.alg_locatie_key, 'G', a.alg_gebouw_key, 'V', a.alg_verdieping_key, 'R', a.alg_ruimte_key, 'H', NULL, NULL) v_onrgoed_key, a.alg_locatie_key, rrr.res_rsv_ruimte_key, rrr.res_reservering_key INTO v_onrgoed_key, v_locatie_key, v_rrr_key, v_reservering_key FROM mld_stdmelding m, res_rsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rar, alg_v_allonrgoed_gegevens a WHERE rrr.res_reservering_key = fac.safe_to_number(v_reservering_nr) AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rar.res_ruimte_key = rr.res_ruimte_key AND a.alg_ruimte_key = rar.alg_ruimte_key AND m.mld_stdmelding_key=v_stdmelding_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errormsg:='De reservering Nr is niet gevonden'; v_onrgoed_key:=-1; v_locatie_key:=-1; v_reservering_key:=-1; v_rrr_key:=NULL; v_error:=1; END; ELSE v_onrgoed_key:=-1; v_locatie_key:=-1; END IF; IF (v_onrgoed_key<0 AND v_locatie<0) THEN v_errormsg:='De gebouw omschrijving niet gevonden'; BEGIN SELECT MIN (alg_onrgoed_key) alg_gebouw_key, alg_locatie_key INTO v_onrgoed_key, v_locatie_key FROM ALG_ONRGOEDKENMERK aok, alg_kenmerk ak, ALG_V_ONROERENDGOED_GEGEVENS a WHERE ak.ALG_KENMERK_CODE = 'GEBOUW_CODE_EVENTS' AND aok.ALG_KENMERK_KEY = ak.ALG_KENMERK_KEY AND aok.ALG_ONRGOED_NIVEAU = 'G' AND UPPER (aok.ALG_ONRGOEDKENMERK_WAARDE) = UPPER (v_locatie) AND aok.ALG_ONRGOEDKENMERK_VERWIJDER IS NULL AND a.ALG_GEBOUW_KEY=alg_onrgoed_key GROUP BY a.alg_locatie_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_onrgoed_key:=30721; -- default naar gebou landelijk v_locatie_key:=841; -- default locatie landelijk END; END IF; IF v_error=0 THEN v_errormsg:='Toevoegen melding mislukt'; INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_melding_t_uitvoertijd, mld_stdmelding_key, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed, mld_melding_kto, res_rsv_ruimte_key) VALUES ('MLD', 4, -- email v_locatie_key, v_onrgoed_key, SYSDATE, v_onderwerp, v_omschrijving, 2, v_stdmelding_uvt, v_stdmelding_key, v_perslid_key, v_perslid_key, NULL, 3, -- prio normaal 0, DECODE(v_rrr_key,-1,NULL,v_rrr_key)) RETURNING mld_melding_key INTO v_melding_key; fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'v_melding_key='||v_melding_key ,''); -- Gaan we de reservereing updaten met de melding_key v_errormsg := 'Fout bij updte reservering'; IF v_reservering_key>0 THEN UPDATE res_reservering set mld_melding_key=v_melding_key WHERE res_reservering_key=v_reservering_key; END IF; -- Mail in de notitie v_errormsg := 'Fout bij toevoegen melding notitie'; INSERT INTO mld_melding_note(mld_melding_key, mld_melding_note_aanmaak, prs_perslid_key, mld_melding_note_flag, mld_melding_note_omschrijving) VALUES(v_melding_key, SYSDATE, 3, 0, pbody); -- update we nu de kenmerken v_errormsg := 'Fout bij toevoegen toevoegen kenmerk'; FOR rec IN sel(v_eigentabel) LOOP v_errormsg := 'Fout bij opzoeken van label '||rec.Tekstlabel; v_value:=findstr(pbody, rec.Tekstlabel|| CHR(10),CHR(10)); v_errormsg := 'Fout bij toevoegen toevoegen kenmerk '||rec.Tekstlabel; v_kenmerk_key := getKenmerkKey(rec.Tekstlabel, v_stdmelding_key); IF LENGTH(v_value)>0 AND v_kenmerk_key>0 THEN fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', rec.Tekstlabel||'-'||v_value||'('||v_kenmerk_key||')', ''); mld.upsertmeldingkenmerk(v_kenmerk_key, v_melding_key, v_value); END IF; END LOOP; v_errormsg := 'Fout bij toevoegen notificatie'; IF INSTR(UPPER(v_catering),'JA')>0 THEN BEGIN -- Notificatie naar de cateraar versturen SELECT aok.alg_onrgoedkenmerk_waarde INTO v_cateraar_email FROM alg_onrgoedkenmerk aok, alg_kenmerk ak WHERE ak.alg_kenmerk_code = 'CIRFOODEVENT_EMAIL' -- Email adres cateraar AND aok.alg_kenmerk_key = ak.alg_kenmerk_key AND aok.alg_onrgoed_niveau = 'G' AND aok.alg_onrgoed_key =v_locatie_key AND aok.alg_onrgoedkenmerk_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_cateraar_email:='kpnrotterdam883.nl@cirfood.com'; END; FAC.trackaction ('CUST26', v_melding_key, NULL, NULL, '#Mail naar cateraar gestuurd naar: ' || v_cateraar_email); v_message:='Op '||v_datum||' heeft aanvrager '||v_aanvrager||' een event van '||v_starttijd||' tot '||v_eindtijd||'. Hiervoor heeft aanvrager catering nodig. Graag contact opnemen met '||v_aanvrager_email; INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_email, prs_perslid_key_receiver, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit) VALUES (901, -- CUST26 2, -- mail v_cateraar_email, -- email null, v_message, v_melding_key, NULL, 2); fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'Notificatie naar cateraar'|| v_cateraar_email, ''); END IF; -- De email body wegschrijvinen in een kenmerk v_errormsg := 'Fout bij toevoegen kenmerk'; mld.upsertmeldingkenmerk(9961, v_melding_key, SUBSTR(pbody,1,4000)); -- D=9921, A=9961 -- Starten we nu de workflow MLD.mld_nextworkflowstep (v_melding_key, -1); fac.writelog('MAIL_EVENEMENTAANVRAAG', 'I', 'Workflow gestart', ''); COMMIT; ELSE fac.writelog('MAIL_EVENEMENTAANVRAAG', 'E', 'Melding niet aangemaakt ', ''); fac.writelog('MAIL_EVENEMENTAANVRAAG', 'E', 'Reden : '||v_errormsg, ''); END IF; EXCEPTION WHEN OTHERS THEN fac.writelog ( 'MAIL_EVENEMENTAANVRAAG', 'W', 'Mail kon niet verwerkt worden afzender: ' || pfrom || '[' || v_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; PROCEDURE set_bez_pincode (p_bezoekers_key IN NUMBER) AS v_count NUMBER; v_found NUMBER; v_code VARCHAR2 (5); v_exists NUMBER; v_date DATE; v_aanmaak DATE; v_kenmerkwaarde_key NUMBER; v_actie_key NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_aanduiding VARCHAR2 (100); BEGIN v_count := 0; v_found := 0; v_aanduiding := 'Bezoeker_key: ' || p_bezoekers_key; SELECT TRUNC (bez_afspraak_datum), kw.bez_kenmerkwaarde_aanmaak, kw.bez_kenmerkwaarde_waarde, a.bez_actie_key INTO v_date, v_aanmaak, v_code, v_actie_key FROM bez_afspraak a, bez_bezoekers b, res_rsv_deel rrd, res_deel rd, ins_v_deel_gegevens d, (SELECT bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1020) kw WHERE a.bez_afspraak_key = b.bez_afspraak_key AND b.bez_bezoekers_key = p_bezoekers_key AND b.bez_bezoekers_key = kw.bez_bezoekers_key(+) AND b.bez_bezoekers_key = rrd.bez_bezoekers_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key; WHILE v_found = 0 AND v_count < 1000 LOOP --DBMS_OUTPUT.put_line (COALESCE (v_code, '-1')); SELECT COUNT ( * ) INTO v_exists FROM bez_bezoekers b, bez_kenmerkwaarde kw, bez_afspraak a WHERE a.bez_afspraak_key = b.bez_afspraak_key AND kw.bez_bezoekers_key = b.bez_bezoekers_key AND b.bez_bezoekers_key <> p_bezoekers_key AND kw.bez_kenmerk_key = 1020 -- Pincode AND kw.bez_kenmerkwaarde_waarde = COALESCE (v_code, '-1') AND bez_afspraak_datum BETWEEN v_date -1 AND v_date + 2; IF v_exists > 0 OR v_code IS NULL THEN v_code := TRUNC (DBMS_RANDOM.VALUE (9999, 100000)); --DBMS_OUTPUT.put_line ('Nieuwe code:' || v_code); ELSE v_found := 1; ykpn.set_kenmerk('BEZ', 1020, p_bezoekers_key, v_code, 0); END IF; v_count := v_count + 1; END LOOP; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN -- Verwijder de pincode ykpn.set_kenmerk('BEZ', 1020, p_bezoekers_key, NULL, 0); -- Bezoeker heeft geen parkeerplaats oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error '||oracle_err_num||'/'||oracle_err_mes||')'; fac.writelog ('YKPN.set_bez_pincode', 'E', v_aanduiding || ': ' || v_errormsg, ''); END; -- Deze procedure wordt aangeroepen via de hook functie. PROCEDURE update_bezoeker (p_bezoekers_key IN NUMBER) AS v_count NUMBER; v_found NUMBER; v_code VARCHAR2 (5); v_exists NUMBER; v_date DATE; v_aanmaak DATE; v_kenmerkwaarde_key NUMBER; v_actie_key NUMBER; v_afspraak_key BEZ_AFSPRAAK.BEZ_AFSPRAAK_KEY%TYPE; v_locatie_omschrijving ALG_LOCATIE.ALG_LOCATIE_OMSCHRIJVING%TYPE; v_autorisator_key NUMBER; v_perslid_email PRS_PERSLID.PRS_PERSLID_EMAIL%TYPE; v_count_pp NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_aanduiding VARCHAR2 (100); BEGIN v_count := 0; v_found := 0; SELECT count(*) INTO v_count FROM bez_bezoekers WHERE bez_bezoekers_key = p_bezoekers_key; IF v_count = 1 THEN -- Als gebouw kenmerk procuartie heeft dan moet de aanvraag eerst geoedgekeurd worden. SELECT COUNT(*) INTO v_count FROM bez_bezoekers bez, bez_afspraak af, alg_onrgoedkenmerk ken WHERE bez.bez_bezoekers_key = p_bezoekers_key AND af.bez_afspraak_key=bez.bez_afspraak_key AND ken.alg_onrgoed_key = af.alg_onrgoed_keys AND ken.alg_kenmerk_key = 2120 -- checkbox kenmerk : bepaald of gebouw parkpl autorizatie heeft. 2060 = ACC, 2120= PROD AND ken.alg_onrgoedkenmerk_waarde = '1'; IF v_count=1 THEN v_aanduiding := 'Bezoekers_key: ' || p_bezoekers_key; SELECT a.bez_afspraak_key, bez_afspraak_datum, kw.bez_kenmerkwaarde_aanmaak, a.bez_actie_key, kp.bez_kenmerkwaarde_waarde, l.alg_locatie_omschrijving, FAC.SAFE_TO_NUMBER(ka.prs_perslid_key), ka.prs_perslid_email INTO v_afspraak_key, v_date, v_aanmaak, v_actie_key, v_code, v_locatie_omschrijving, v_autorisator_key, v_perslid_email FROM bez_afspraak a, bez_bezoekers b, alg_locatie l, (SELECT bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1002) kw, -- Aanmaak, kenmerk wordt door hook functie bij iedere bezoeker gezet (SELECT bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1020) kp, -- Pincode (SELECT p.prs_perslid_naam, prs_perslid_email, prs_perslid_key, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw, prs_perslid p WHERE bez_kenmerk_key = 1003 AND FAC.SAFE_TO_NUMBER(bez_kenmerkwaarde_waarde) = p.prs_perslid_key) ka -- Autorisator WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND b.bez_bezoekers_key = p_bezoekers_key AND b.bez_bezoekers_key = kw.bez_bezoekers_key(+) AND b.bez_bezoekers_key = kp.bez_bezoekers_key(+) AND b.bez_bezoekers_key = ka.bez_bezoekers_key(+); --DBMS_OUTPUT.put_line ('Bestaande code:' || v_code); v_aanduiding := 'Zet initiele kenmerken, Bezoekers_key: ' || p_bezoekers_key; IF v_aanmaak IS NULL THEN ykpn.set_kenmerk('BEZ', 1002, p_bezoekers_key, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI'), 0); -- Aanmaak ELSIF v_aanmaak > sysdate - 5/(24*60*60) -- kenmerk is de afgelopen 5 seconden aangemaakt. Het betreft dan een herhaal actie. THEN ykpn.set_kenmerk('BEZ', 1002, p_bezoekers_key, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI'), 0); -- Aanmaak ykpn.set_kenmerk('BEZ', 1004, p_bezoekers_key, NULL, 0); -- Reden afwijzing ykpn.set_kenmerk('BEZ', 1020, p_bezoekers_key, NULL, 0); -- Pincode ykpn.set_kenmerk('BEZ', 1120, p_bezoekers_key, NULL, 0); -- Geldig ID ykpn.set_kenmerk('BEZ', 1060, p_bezoekers_key, NULL, 0); -- Nedap ID ykpn.set_kenmerk('BEZ', 1042, p_bezoekers_key, NULL, 0); -- Nedap Verzonden ykpn.set_kenmerk('BEZ', 1160, p_bezoekers_key, NULL, 0); -- Kenteken respons ykpn.set_kenmerk('BEZ', 1161, p_bezoekers_key, NULL, 0); -- Kenteken Verzonden ykpn.set_kenmerk('BEZ', 1043, p_bezoekers_key, NULL, 0); -- SMS Verzonden v_code := NULL; END IF; v_aanduiding := 'Bewaar locatie omschrijving, Bezoekers_key: ' || p_bezoekers_key; ykpn.set_kenmerk('BEZ', 1200, p_bezoekers_key, v_locatie_omschrijving, 0); -- Locatie omschrijving voor bezoekersnotificatie -- Als de parkeerplaats goedgekeurd was gaan we de pincode nog even checken -- Deze kan aangepast moeten worden als de afspraak in tijd verplaatst wordt en -- er een andere afspraak staat met dezelfde pincode -- Voor de historie kijken we ook naar records die al een pincode hebben. SELECT count(*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE fac_tracking_refkey = p_bezoekers_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'CUST04'; IF v_count > 1 OR v_code IS NOT NULL THEN set_bez_pincode (p_bezoekers_key); END IF; IF v_actie_key = 1 THEN ykpn.set_kenmerk('BEZ', 1140, p_bezoekers_key, 'Let op: Een parkeerplaats op eigen standplaats reserveren is niet toegestaan, dit i.v.m. het tekort aan bezoekersparkeerplaatsen wat dan ontstaat.', 0); END IF; -- Controleer of de autorisator ingevuld is. SELECT COUNT(*) INTO v_count_pp FROM res_rsv_deel WHERE bez_bezoekers_key = p_bezoekers_key; -- Hebben we al een notificatie van ongeldige aanvraag gestuurd? SELECT count(*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE fac_tracking_refkey = p_bezoekers_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'CUST06'; -- parkeerplaatsaanvraag zonder autorisator en nog geen notificatie gestuurd IF v_count_pp = 1 AND v_autorisator_key IS NULL AND v_count = 0 THEN FAC.trackaction ('CUST06', v_afspraak_key, NULL, NULL, 'Ongeldige parkeerplaatsaanvraag: Geen autorisator ingevuld!'); END IF; -- parkeerplaatsaanvraag met autorisator en nog geen notificatie naar goedkeurder gestuurd. IF v_count_pp = 1 AND v_autorisator_key IS NOT NULL THEN -- Hebben we al een notificatie naar de goedkeurder gestuurd? SELECT count(*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE fac_tracking_refkey = v_afspraak_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'CUST07'; IF v_count = 0 THEN FAC.trackaction ('CUST07', v_afspraak_key, NULL, NULL, '#Mail naar autorisator gestuurd naar: ' || v_perslid_email); INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_email, prs_perslid_key_receiver, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit) VALUES (281, -- CUST07 2, -- mail v_perslid_email, -- email v_autorisator_key, 'Goedkeuring verzocht voor parkeerplaatsaanvraag', v_afspraak_key, NULL, 2); END IF; END IF; ELSE -- Het betreft een bestaande bezoeker. Ook bij het verwijderen wordt de functie aangeroepen. v_aanduiding := 'Bezoekers_key: ' || p_bezoekers_key; SELECT a.bez_afspraak_key, bez_afspraak_datum, kw.bez_kenmerkwaarde_aanmaak, a.bez_actie_key, kp.bez_kenmerkwaarde_waarde, l.alg_locatie_omschrijving INTO v_afspraak_key, v_date, v_aanmaak, v_actie_key, v_code, v_locatie_omschrijving FROM bez_afspraak a, bez_bezoekers b, alg_locatie l, (SELECT bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1002) kw, -- Aanmaak, kenmerk wordt door hook functie bij iedere bezoeker gezet (SELECT bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerkwaarde_key, bez_bezoekers_key FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1020) kp -- Pincode WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND b.bez_bezoekers_key = p_bezoekers_key AND b.bez_bezoekers_key = kw.bez_bezoekers_key(+) AND b.bez_bezoekers_key = kp.bez_bezoekers_key(+); --DBMS_OUTPUT.put_line ('Bestaande code:' || v_code); v_aanduiding := 'Zet initiele kenmerken, Bezoekers_key: ' || p_bezoekers_key; IF v_aanmaak IS NULL THEN ykpn.set_kenmerk('BEZ', 1002, p_bezoekers_key, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI'), 0); -- Aanmaak ELSIF v_aanmaak > sysdate - 5/(24*60*60) -- kenmerk is de afgelopen 5 seconden aangemaakt. Het betreft dan een herhaal actie. THEN ykpn.set_kenmerk('BEZ', 1002, p_bezoekers_key, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MI'), 0); -- Aanmaak ykpn.set_kenmerk('BEZ', 1020, p_bezoekers_key, NULL, 0); -- Pincode ykpn.set_kenmerk('BEZ', 1120, p_bezoekers_key, NULL, 0); -- Geldig ID ykpn.set_kenmerk('BEZ', 1060, p_bezoekers_key, NULL, 0); -- Nedap ID ykpn.set_kenmerk('BEZ', 1042, p_bezoekers_key, NULL, 0); -- Nedap Verzonden ykpn.set_kenmerk('BEZ', 1160, p_bezoekers_key, NULL, 0); -- Kenteken respons ykpn.set_kenmerk('BEZ', 1161, p_bezoekers_key, NULL, 0); -- Kenteken Verzonden ykpn.set_kenmerk('BEZ', 1043, p_bezoekers_key, NULL, 0); -- SMS Verzonden v_code := NULL; END IF; v_aanduiding := 'Bewaar locatie omschrijving, Bezoekers_key: ' || p_bezoekers_key; ykpn.set_kenmerk('BEZ', 1200, p_bezoekers_key, v_locatie_omschrijving, 0); -- Locatie omschrijving voor bezoekersnotificatie -- Heb ik wel een parkeerplaats bij de bezoekaanvraag geboekt? SELECT COUNT(*) INTO v_count FROM res_rsv_deel WHERE bez_bezoekers_key = p_bezoekers_key; IF v_count = 1 THEN -- We doen geen procuratie meer op parkeerplaatsen. Dus we mogen direct de pincode invullen set_bez_pincode (p_bezoekers_key); END IF; END IF; END IF; COMMIT; EXCEPTION WHEN NO_DATA_FOUND THEN -- Verwijder de pincode ykpn.set_kenmerk('BEZ', 1020, p_bezoekers_key, NULL, 0); -- Bezoeker heeft geen parkeerplaats oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error '||oracle_err_num||'/'||oracle_err_mes||')'; fac.writelog ('YKPN.update_bezoeker', 'E', v_aanduiding || ': ' || v_errormsg, ''); END; PROCEDURE set_kenmerk(p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER, p_kenmerk_waarde IN VARCHAR2, p_history IN NUMBER) AS v_count NUMBER; v_niveau VARCHAR2 (1); BEGIN CASE p_module WHEN 'PRS' THEN -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt -- opgeslagen (da's dus redundant..?) SELECT prs_kenmerk_niveau INTO v_niveau FROM prs_kenmerk WHERE prs_kenmerk_key = p_kenmerk_key; SELECT COUNT ( * ) INTO v_count FROM prs_kenmerklink WHERE prs_link_key = p_link_key AND prs_kenmerk_key = p_kenmerk_key AND prs_kenmerklink_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE prs_kenmerklink WHERE prs_link_key = p_link_key AND prs_kenmerk_key = p_kenmerk_key AND prs_kenmerklink_verwijder IS NULL; ELSE UPDATE prs_kenmerklink SET prs_kenmerklink_waarde = p_kenmerk_waarde WHERE prs_link_key = p_link_key AND prs_kenmerk_key = p_kenmerk_key AND prs_kenmerklink_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO prs_kenmerklink (prs_kenmerk_key, prs_link_key, prs_kenmerklink_niveau, prs_kenmerklink_waarde) VALUES (p_kenmerk_key, p_link_key, v_niveau, p_kenmerk_waarde); END IF; END IF; WHEN 'ALG' THEN -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt -- opgeslagen (da's dus redundant..?) SELECT alg_kenmerk_niveau INTO v_niveau FROM alg_kenmerk WHERE alg_kenmerk_key = p_kenmerk_key; SELECT COUNT ( * ) INTO v_count FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = p_link_key AND alg_kenmerk_key = p_kenmerk_key AND alg_onrgoedkenmerk_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE alg_onrgoedkenmerk WHERE alg_onrgoed_key = p_link_key AND alg_kenmerk_key = p_kenmerk_key AND alg_onrgoedkenmerk_verwijder IS NULL; ELSE UPDATE alg_onrgoedkenmerk SET alg_onrgoedkenmerk_waarde = p_kenmerk_waarde WHERE alg_onrgoed_key = p_link_key AND alg_kenmerk_key = p_kenmerk_key AND alg_onrgoedkenmerk_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO alg_onrgoedkenmerk (alg_kenmerk_key, alg_onrgoed_key, alg_onrgoed_niveau, alg_onrgoedkenmerk_waarde) VALUES (p_kenmerk_key, p_link_key, v_niveau, p_kenmerk_waarde); END IF; END IF; WHEN 'BEZ' THEN SELECT COUNT ( * ) INTO v_count FROM bez_kenmerkwaarde WHERE bez_bezoekers_key = p_link_key AND bez_kenmerk_key = p_kenmerk_key AND bez_kenmerkwaarde_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE bez_kenmerkwaarde WHERE bez_bezoekers_key = p_link_key AND bez_kenmerk_key = p_kenmerk_key AND bez_kenmerkwaarde_verwijder IS NULL; ELSE UPDATE bez_kenmerkwaarde SET bez_kenmerkwaarde_waarde = p_kenmerk_waarde WHERE bez_bezoekers_key = p_link_key AND bez_kenmerk_key = p_kenmerk_key AND bez_kenmerkwaarde_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO bez_kenmerkwaarde (bez_kenmerk_key, bez_bezoekers_key, bez_kenmerkwaarde_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; WHEN 'MLD' THEN -- melding- of opdrachtkenmerk? SELECT mld_kenmerk_niveau INTO v_niveau FROM mld_kenmerk WHERE mld_kenmerk_key = p_kenmerk_key; CASE v_niveau WHEN 'O' THEN SELECT COUNT ( * ) INTO v_count FROM mld_kenmerkopdr WHERE mld_opdr_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE mld_kenmerkopdr WHERE mld_opdr_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL; ELSE UPDATE mld_kenmerkopdr SET mld_kenmerkopdr_waarde = p_kenmerk_waarde WHERE mld_opdr_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; WHEN 'S' THEN SELECT COUNT ( * ) INTO v_count FROM mld_kenmerkmelding WHERE mld_melding_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkmelding_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE mld_kenmerkmelding WHERE mld_melding_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkmelding_verwijder IS NULL; ELSE UPDATE mld_kenmerkmelding SET mld_kenmerkmelding_waarde = p_kenmerk_waarde WHERE mld_melding_key = p_link_key AND mld_kenmerk_key = p_kenmerk_key AND mld_kenmerkmelding_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO mld_kenmerkmelding (mld_kenmerk_key, mld_melding_key, mld_kenmerkmelding_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; END CASE; WHEN 'FIN' THEN -- niveau van prs_kenmerk ophalen, omdat deze ook in prs_kenmerklink wordt -- opgeslagen (da's dus redundant..?) SELECT fin_kenmerk_type INTO v_niveau FROM fin_kenmerk WHERE fin_kenmerk_key = p_kenmerk_key; IF v_niveau = 'F' THEN SELECT COUNT ( * ) INTO v_count FROM fin_kenmerkfactuur WHERE fin_factuur_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactuur_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE fin_kenmerkfactuur WHERE fin_factuur_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactuur_verwijder IS NULL; ELSE UPDATE fin_kenmerkfactuur SET fin_kenmerkfactuur_waarde = p_kenmerk_waarde WHERE fin_factuur_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactuur_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO fin_kenmerkfactuur (fin_kenmerk_key, fin_factuur_key, fin_kenmerkfactuur_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; ELSE -- Kenmerk bij factuurregel SELECT COUNT ( * ) INTO v_count FROM fin_kenmerkfactregel WHERE fin_factuurregel_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactregel_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE fin_kenmerkfactregel WHERE fin_factuurregel_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactregel_verwijder IS NULL; ELSE UPDATE fin_kenmerkfactregel SET fin_kenmerkfactregel_waarde = p_kenmerk_waarde WHERE fin_factuurregel_key = p_link_key AND fin_kenmerk_key = p_kenmerk_key AND fin_kenmerkfactregel_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO fin_kenmerkfactregel (fin_kenmerk_key, fin_factuurregel_key, fin_kenmerkfactregel_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; END IF; WHEN 'RES' THEN -- res_rsv_ruimte kenmerk SELECT COUNT ( * ) INTO v_count FROM res_kenmerkwaarde WHERE res_rsv_ruimte_key = p_link_key AND res_kenmerk_key = p_kenmerk_key AND res_kenmerkwaarde_verwijder IS NULL; IF v_count = 1 THEN IF p_kenmerk_waarde IS NULL THEN DELETE res_kenmerkwaarde WHERE res_rsv_ruimte_key = p_link_key AND res_kenmerk_key = p_kenmerk_key AND res_kenmerkwaarde_verwijder IS NULL; ELSE UPDATE res_kenmerkwaarde SET res_kenmerkreservering_waarde = p_kenmerk_waarde WHERE res_rsv_ruimte_key = p_link_key AND res_kenmerk_key = p_kenmerk_key AND res_kenmerkwaarde_verwijder IS NULL; END IF; ELSE IF p_kenmerk_key IS NOT NULL AND p_kenmerk_waarde IS NOT NULL THEN INSERT INTO res_kenmerkwaarde (res_kenmerk_key, res_rsv_ruimte_key, res_kenmerkreservering_waarde) VALUES (p_kenmerk_key, p_link_key, p_kenmerk_waarde); END IF; END IF; END CASE; END; FUNCTION get_kenmerkwaarde ( p_kenmerk_type VARCHAR2, p_kenmerkdomein_key NUMBER, p_kenmerk_waarde VARCHAR2) RETURN VARCHAR2 AS v_result VARCHAR2(4000); BEGIN IF p_kenmerk_type = 'R' OR p_kenmerk_type = 'S' THEN v_result := fac.getdomeinwaarde (p_kenmerkdomein_key, p_kenmerk_waarde); ELSIF p_kenmerk_type = 'D' THEN v_result := TO_CHAR (fac.safe_to_date (p_kenmerk_waarde, 'dd-mm-yyyy'), 'yyyy-mm-dd'); ELSE v_result := p_kenmerk_waarde; END IF; return v_result; END; FUNCTION get_kenmerk (p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER) RETURN VARCHAR2 AS v_kenmerk_type mld_srtkenmerk.mld_srtkenmerk_kenmerktype%TYPE; v_kenmerk_waarde mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE; v_kenmerkdomein_key fac_kenmerkdomein.fac_kenmerkdomein_key%TYPE; v_kenmerk_niveau ins_kenmerk.ins_kenmerk_niveau%TYPE; BEGIN CASE p_module WHEN 'MLD' THEN SELECT mld_srtkenmerk_kenmerktype, sk.fac_kenmerkdomein_key, km.mld_kenmerkmelding_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM mld_v_aanwezigkenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk WHERE km.mld_melding_key = p_link_key AND km.mld_kenmerk_key = p_kenmerk_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key; WHEN 'CNT' THEN SELECT cnt_srtkenmerk_kenmerktype, sk.fac_kenmerkdomein_key, kc.cnt_kenmerkcontract_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM cnt_kenmerkcontract kc, cnt_kenmerk k, cnt_srtkenmerk sk WHERE kc.cnt_contract_key = p_link_key AND kc.cnt_kenmerk_key = p_kenmerk_key AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_srtkenmerk_key = sk.cnt_srtkenmerk_key; WHEN 'ALG' THEN SELECT alg_kenmerk_kenmerktype, k.fac_kenmerkdomein_key, aogk.alg_onrgoedkenmerk_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_kenmerk k WHERE aogk.alg_onrgoed_key = p_link_key AND aogk.alg_kenmerk_key = p_kenmerk_key AND aogk.alg_kenmerk_key = k.alg_kenmerk_key; WHEN 'INS' THEN SELECT k.ins_kenmerk_niveau INTO v_kenmerk_niveau FROM ins_kenmerk k WHERE ins_kenmerk_key = p_kenmerk_key; IF v_kenmerk_niveau = 'C' THEN SELECT sk.ins_srtkenmerk_kenmerktype, sk.fac_kenmerkdomein_key, ikds.ins_kmdeelsrtcontr_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM ins_kmdeelsrtcontr ikds, ins_kenmerk k, ins_srtkenmerk sk WHERE ikds.ins_deelsrtcontrole_key = p_link_key AND ikds.ins_kmdeelsrtcontr_verwijder IS NULL AND ikds.ins_kenmerk_key = p_kenmerk_key AND ikds.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; ELSE SELECT sk.ins_srtkenmerk_kenmerktype, sk.fac_kenmerkdomein_key, ikd.ins_kenmerkdeel_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM ins_kenmerkdeel ikd, ins_kenmerk k, ins_srtkenmerk sk WHERE ikd.ins_deel_key = p_link_key AND ikd.ins_kenmerkdeel_verwijder IS NULL AND ikd.ins_kenmerk_key = p_kenmerk_key AND ikd.ins_kenmerk_key = k.ins_kenmerk_key AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key; END IF; END CASE; RETURN ykpn.get_kenmerkwaarde (v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde); END; PROCEDURE mld_after_insert (p_melding_key IN NUMBER) AS CURSOR c IS SELECT mk.mld_kenmerk_key, ogk.alg_onrgoedkenmerk_waarde FROM mld_melding m, alg_v_onroerendgoed og, alg_onrgoedkenmerk ogk, alg_kenmerk ak, mld_kenmerk mk, mld_srtkenmerk msk WHERE mld_melding_key = p_melding_key AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys AND mk.mld_srtkenmerk_key = msk.mld_srtkenmerk_key AND mk.mld_stdmelding_key = m.mld_stdmelding_key AND ak.alg_kenmerk_omschrijving = msk.mld_srtkenmerk_omschrijving AND mk.mld_kenmerk_groep = 1 AND ak.alg_kenmerk_kenmerktype <> 'L' AND ak.alg_kenmerk_key = ogk.alg_kenmerk_key AND ogk.alg_onrgoed_key = og.alg_gebouw_key; CURSOR c_pk IS SELECT prs_kenmerk_key, prs_kenmerk_hint FROM prs_kenmerk pk WHERE prs_kenmerk_kenmerktype = 'V' AND (LENGTH (prs_kenmerk_hint) = 5 OR prs_kenmerk_hint = 'TP') AND prs_kenmerk_verwijder IS NULL ORDER BY prs_kenmerk_omschrijving; v_count NUMBER; v_stdmelding_key NUMBER; v_stdmeldinggroep_key NUMBER; v_melding_status NUMBER; v_perslid_key NUMBER; v_oms VARCHAR2 (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN SELECT m.mld_stdmelding_key, std.mld_stdmeldinggroep_key INTO v_stdmelding_key, v_stdmeldinggroep_key FROM mld_melding m, mld_stdmelding std WHERE m.mld_stdmelding_key = std.mld_stdmelding_key(+) AND m.mld_melding_key = p_melding_key; IF v_stdmelding_key = 481 -- Parkeerplaattelling THEN v_errorhint := 'Fout bij invoer parkeerplaatstelling'; -- Zijn er al kenmerken gevuld door de after_insert? -- Deze kenmerken zitten allemaal in groep 1 en worden door deze procedure bevroren vanuit het gebouw SELECT count(*) INTO v_count FROM mld_melding m, mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND km.mld_melding_key = m.mld_melding_key AND k.mld_stdmelding_key = m.mld_stdmelding_key AND m.mld_melding_key = p_melding_key AND k.mld_kenmerk_groep = 1; IF v_count = 0 THEN FOR rec IN c LOOP v_errorhint := 'Fout bij invoer parkeerplaatstelling (loop)'; YKPN.set_kenmerk('MLD', rec.mld_kenmerk_key, p_melding_key, rec.alg_onrgoedkenmerk_waarde, 0); END LOOP; END IF; END IF; IF v_stdmelding_key = 2361 -- Pandbrief THEN v_errorhint := 'Fout bij invoer pandbriefvoorkeur'; SELECT prs_perslid_key INTO v_perslid_key FROM mld_melding m WHERE m.mld_melding_key = p_melding_key; FOR rec IN c_pk LOOP v_errorhint := 'Fout bij invoer pandbriefvoorkeur (loop)'; SELECT COUNT(*) INTO v_count FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk WHERE rec.prs_kenmerk_hint = sk.mld_srtkenmerk_code AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND km.mld_melding_key = p_melding_key; -- We gaan geen kenmerken aanmaken voor alle locaties die niet geselecteerd zijn. IF v_count <> 1 THEN v_count := NULL; END IF; ykpn.set_kenmerk('PRS', rec.prs_kenmerk_key, v_perslid_key, v_count, 0); END LOOP; END IF; IF v_stdmelding_key IN (2801, 3141) -- Office Depot buiten catalogus / navraag bestelling THEN IF v_stdmelding_key = 2801 THEN v_oms := 'Bestelling buiten catalogus'; END IF; IF v_stdmelding_key = 3141 THEN v_oms := 'Navraag bestelling'; END IF; v_errorhint := v_oms; SELECT mld_melding_status INTO v_melding_status FROM mld_melding m WHERE m.mld_melding_key = p_melding_key; IF v_melding_status = 2 -- Nieuw THEN FAC.trackaction ('CUST12', p_melding_key, 3, NULL, '#' || v_oms || ' naar Viking verzonden'); INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_email, prs_perslid_key_receiver, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit) VALUES (441, -- CUST12 2, -- mail 'hans.vandijk@vikingoffice.eu', -- email NULL, v_oms || ' B' || p_melding_key, p_melding_key, NULL, 2); v_errormsg := 'Fout bij statuswijziging naar geaccepteerd door Facilitor'; mld.setmeldingstatus (p_melding_key, 4, 3); v_errormsg := 'Fout bij statuswijziging naar afgemeld door Facilitor'; mld.setmeldingstatus (p_melding_key, 5, 3); END IF; END IF; IF v_stdmeldinggroep_key = 21 -- prioriteit THEN FLX.setflex ('MLD', 9021, -- kenmerk_prio p_melding_key, 'SLA'); ELSE FLX.deleteflex ('MLD', 9021, -- kenmerk_prio p_melding_key, NULL, -- niveau NULL); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('YKPN.mld_after_insert', 'E', v_errormsg, v_errorhint); END; -- Vul het mandaatbedrag in een readonly kenmerk zodat de leverancier -- deze niet kan aanpassen. PROCEDURE opdracht_after_save (p_opdr_key IN NUMBER) AS v_mandaat VARCHAR2(100); v_kenmerk_key NUMBER; BEGIN SELECT mld_kenmerkopdr_waarde, mld_kenmerk_key INTO v_mandaat, v_kenmerk_key FROM mld_kenmerkopdr WHERE mld_opdr_key = p_opdr_key AND mld_kenmerk_key IN (5021, 5041); -- Mandaatopdr. met contract IF v_kenmerk_key = 5021 THEN MLD.upsertopdrachtkenmerk (6201, p_opdr_key, v_mandaat); END IF; -- Mandaatopdr. zonder contract IF v_kenmerk_key = 5041 THEN MLD.upsertopdrachtkenmerk (6241, p_opdr_key, v_mandaat); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN -- Deze opdracht bevatte geen mandaat bedrag als kenmerk NULL; END; -- Controleer of er eerder bestellingen van artikelen uit catalogus werkplek zijn gedaan en of er uit groep brureaus niet meerder artikelen zijn besteld FUNCTION bes_checkrfo (p_user_key IN NUMBER, p_urole in VARCHAR2, p_srtdeel_keys in VARCHAR2) RETURN VARCHAR2 AS v_catalog CONSTANT NUMBER:= 2981; -- key voor catalogus Thuiswerkplek acc 2981 TEST 3061 v_groep CONSTANT NUMBER:= 287; -- key voor artikelgoep bureaus acc 287 Test 321 CURSOR besteld IS SELECT item.bes_srtdeel_key key, srt.bes_srtgroep_key groep, count(item.bes_bestelling_item_aantal) aantal FROM bes_bestelling bes, bes_bestelling_item item, bes_srtdeel srt, bes_srtgroep grp WHERE bes.prs_perslid_key = p_user_key -- alle bestelingen voor deze user AND item.bes_bestelling_key=bes.bes_bestelling_key -- alle items bij de vreschllende bstelligen AND srt.bes_srtdeel_key = item.bes_srtdeel_key AND grp.bes_srtgroep_key = srt.bes_srtgroep_key AND grp.ins_discipline_key=v_catalog GROUP BY (item.bes_srtdeel_key, srt.bes_srtgroep_key); v_result VARCHAR2(300); v_count NUMBER; v_srtdeel_key NUMBER; v_bureauCount NUMBER; v_amount NUMBER; v_counter NUMBER; v_currentgroep NUMBER:=0; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); BEGIN v_result :='OK'; IF UPPER(p_urole) = 'FE' THEN v_bureauCount:=0; v_counter:=0; FOR rec IN besteld LOOP IF rec.groep = v_groep AND rec.aantal>0 THEN v_bureauCount:=v_bureauCount+1; END IF; v_counter:=1; LOOP FAC.imp_getField_nr(p_srtdeel_keys,',',v_counter,v_srtdeel_key); IF rec.key = v_srtdeel_key THEN v_result:='Artikel is al eerder besteld'; END IF; v_counter:=v_counter+1; EXIT WHEN v_srtdeel_key IS NULL OR v_counter>20; END LOOP; END LOOP; -- COntrole of er nu meerdere bureau besteld worden SELECT count(*) INTO v_count FROM bes_srtdeel srt WHERE srt.bes_srtgroep_key = v_groep AND srt.bes_srtdeel_key IN ( SELECT regexp_substr(p_srtdeel_keys,'[^,]+', 1, level) FROM DUAL CONNECT BY regexp_substr(p_srtdeel_keys, '[^,]+', 1, level) IS NOT NULL); IF (v_count+v_bureauCount>1) THEN v_result:='Er is al een artikel uit de groep bureau besteld.'; END IF; END IF; RETURN v_result; END; FUNCTION res_presave (p_user_key IN NUMBER, p_rsv_ruimte_key IN NUMBER, p_activiteit_key IN NUMBER, p_res_deel_key IN NUMBER, p_datum_van IN DATE, p_datum_tot IN DATE, p_volgnr IN NUMBER) RETURN VARCHAR2 AS v_result VARCHAR2 (300); v_date DATE; v_count NUMBER; v_discipline_key NUMBER; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (200); v_errorhint VARCHAR2 (200); BEGIN v_result := 'OK'; v_errorhint := 'Controleer activiteit: ' || p_activiteit_key; -- Flexplek reservereing beperking er af gehaald, op 24-6-2021 -- Laten staan mocht het nog weer aangeschakeld moeten worden --IF p_activiteit_key = 110 -- Flexplek --THEN -- v_errorhint := 'Zit ik in de Corona werkplekken groep'; -- SELECT COUNT (*) -- INTO v_count -- FROM fac_gebruikersgroep -- WHERE fac_groep_key = 2201 -- 2201 Corona werkplekken -- AND prs_perslid_key = p_user_key; -- BEGIN -- v_errorhint := 'Zoek de catalogus res_deel_key: ' || p_res_deel_key; -- SELECT res_discipline_key -- INTO v_discipline_key -- FROM res_deel -- WHERE res_deel_key = p_res_deel_key; -- EXCEPTION WHEN NO_DATA_FOUND -- THEN v_discipline_key := 2421; END; -- Als ik in de groep 2201 Corona werkplekken zit dan mag ik altijd boeken -- Beperking op aantal geld alleen voor de catalogus Flexplekken KPN -- En de beperking geldt niet op vrijdag -- IF v_count = 0 AND v_discipline_key = 2421 AND TO_CHAR(p_datum_tot, 'D') <> 6 -- THEN -- v_errorhint := 'Kijk of ik al een reservering heb'; -- SELECT count(*) -- INTO v_count -- FROM res_rsv_ruimte rrr -- WHERE rrr.res_rsv_ruimte_verwijder IS NULL -- AND rrr.res_activiteit_key = 110 -- 110 Flexplek -- AND rrr.res_rsv_ruimte_host_key = p_user_key -- AND rrr.res_rsv_ruimte_key <> p_rsv_ruimte_key -- AND TRUNC(res_rsv_ruimte_van, 'MM') = TRUNC (p_datum_tot, 'MM') -- AND TO_CHAR(res_rsv_ruimte_van, 'D') IN (2,3,4,5); -- IF v_count > 3 -- THEN -- v_result := 'Beste collega,' || CHR(10) || -- 'We hebben deze maand al vier reserveringen van je gevonden. Je maximaal aantal te reserveren werkplekken per maand is dus bereikt.' || CHR(10) || -- 'Hartelijke groet, KPN Facilities'; -- END IF; -- END IF; -- END IF; IF p_activiteit_key = 150 -- Team area's THEN -- Team area IF v_discipline_key = 2581 -- Team area (ruimte) THEN v_errorhint := 'Kijk of ik al een reservering heb'; SELECT count(*) INTO v_count FROM res_rsv_ruimte rrr WHERE rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_activiteit_key = 150 -- 150 Team area AND rrr.res_rsv_ruimte_host_key = p_user_key AND rrr.res_rsv_ruimte_key <> p_rsv_ruimte_key -- AND TRUNC(res_rsv_ruimte_van) BETWEEN TRUNC (p_datum_tot) -14 AND TRUNC (p_datum_tot) + 14; AND TRUNC(res_rsv_ruimte_van, 'MM') = TRUNC(p_datum_tot, 'MM'); IF v_count > 1 THEN v_result := 'Beste collega,' || CHR(10) || 'Team areas mogen maar twee keer per maand geboekt worden.' || CHR(10) || 'Hartelijke groet, KPN Facilities'; END IF; END IF; END IF; RETURN v_result; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; RETURN v_result; END; PROCEDURE res_after_insert (p_rsv_ruimte_key IN NUMBER) AS CURSOR c IS SELECT rrr.res_rsv_ruimte_key FROM res_rsv_ruimte rrrn, res_rsv_ruimte rrr WHERE rrrn.res_rsv_ruimte_host_key = rrr.res_rsv_ruimte_host_key AND rrrn.res_activiteit_key = rrr.res_activiteit_key AND rrrn.res_activiteit_key = 110 AND rrrn.res_rsv_ruimte_van = rrr.res_rsv_ruimte_van AND rrrn.res_rsv_ruimte_tot = rrr.res_rsv_ruimte_tot AND rrrn.res_rsv_ruimte_key = p_rsv_ruimte_key AND rrrn.res_rsv_ruimte_key <> rrr.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_verwijder IS NULL; v_activiteit_key NUMBER(10); v_host_key NUMBER(10); BEGIN -- Functionaliteit wordt voorlopig niet gebruikt en is in de core opgelost. RETURN; FOR rec in c LOOP UPDATE res_rsv_ruimte SET res_rsv_ruimte_verwijder = SYSDATE WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key; END LOOP; COMMIT; END; PROCEDURE set_nedap_status(p_bezoekers_key IN NUMBER, p_type IN VARCHAR2, p_nedap_id IN VARCHAR2) AS v_kenmerkwaarde_key NUMBER; BEGIN IF p_type = 'PINCODE' THEN ykpn.set_kenmerk('BEZ', 1060, p_bezoekers_key, p_nedap_id, 0); -- Nedap ID PINCODE ELSIF p_type = 'KENTEKEN' THEN ykpn.set_kenmerk('BEZ', 1160, p_bezoekers_key, p_nedap_id, 0); -- Nedap ID KENTEKEN END IF; COMMIT; END; PROCEDURE fin_set_approver (p_factuur_key IN NUMBER) AS v_count NUMBER; v_perslid_key_beh mld_opdr.prs_perslid_key%TYPE; v_perslid_key_goedkeur fin_factuur.prs_perslid_key_goedkeur%TYPE; v_factuur_statuses_key fin_factuur.fin_factuur_statuses_key%TYPE; v_factuur_totaal fin_factuur.fin_factuur_totaal%TYPE; v_perslid_naam_goedkeur VARCHAR2 (100); v_opdr_key mld_opdr.mld_opdr_key%TYPE; v_contract_key cnt_contract.cnt_contract_key%TYPE; v_bestelopdr_key bes_bestelopdr.bes_bestelopdr_key%TYPE; v_eerste_fiatteur prs_perslid.prs_perslid_key%TYPE; v_tweede_fiatteur prs_perslid.prs_perslid_key%TYPE; v_derde_fiatteur prs_perslid.prs_perslid_key%TYPE; v_count_cnt NUMBER; v_count_intern NUMBER; v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Nieuwe situatie na 1 mei v_eerste_fiatteur := 127574; -- Jesse Arts/Ralph Vermin >15K <=50K v_tweede_fiatteur := 135671; -- Rob Grevenstette >50K <=150K (Oude key 93969) v_derde_fiatteur := 92323; -- Walter van der Wilt >150K v_errorhint := 'Bepaal type factuur'; -- Laten we eens eerst kijken of we het over een contract of een opdracht hebben SELECT mld_opdr_key, cnt_contract_key, bes_bestelopdr_key, fin_factuur_statuses_key, fin_factuur_totaal INTO v_opdr_key, v_contract_key, v_bestelopdr_key, v_factuur_statuses_key, v_factuur_totaal FROM fin_factuur WHERE fin_factuur_key = p_factuur_key; -- We kennen op dit moment nog geen functionaliteit voor bestelopdrachten IF v_opdr_key IS NOT NULL OR v_contract_key IS NOT NULL THEN IF v_factuur_statuses_key = 2 -- ingevoerd THEN -- We gaan eerst twee zaken uitoeken -- betreft het een opdracht met een contract type vast, var of suppletie en geen vinkje uitsluiten voor rev billing -- Dan Annemiek als goedkeurder SELECT COUNT(*) INTO v_count_cnt FROM cnt_contract c, mld_opdr o, mld_kenmerkopdr mo,mld_kenmerk mk WHERE o.mld_opdr_key=v_opdr_key AND c.cnt_contract_key=o.cnt_contract_key AND c.ins_discipline_key IN (421,461,2221) AND c.cnt_contract_key not in (SELECT ckw.cnt_contract_key FROM cnt_kenmerkcontract ckw, cnt_kenmerk ck , cnt_srtkenmerk csk WHERE ckw.cnt_contract_key = c.cnt_contract_key AND ckw.cnt_kenmerk_key = ck.cnt_kenmerk_key AND csk.CNT_SRTKENMERK_KEY = ck.CNT_SRTKENMERK_KEY AND csk.cnt_srtkenmerk_omschrijving='Uitsluiten voor reverse billing') AND mo.mld_opdr_key = o.mld_opdr_key AND mk.mld_kenmerk_key = mo.mld_kenmerk_key AND mk.mld_kenmerk_omschrijving='Gereed voor facturatie' AND mo.mld_kenmerkopdr_waarde='1'; -- Betreft het een opdarcht van Uitvoeren Uren intern (381) dan ook aan Annemiek toewijzen SELECT COUNT(*) INTO v_count_intern FROM mld_opdr o WHERE mld_opdr_key=v_opdr_key AND o.mld_typeopdr_key = 381; IF v_count_cnt>0 OR v_count_intern>0 THEN -- het gaat dus om opdrachet die voor de persoon vermeld in eigen tabel VFS GOEDK. INTER staat -- Fall back is naar Ralp Vermin BEGIN SELECT p.prs_perslid_key, p.prs_perslid_naam_friendly INTO v_perslid_key_beh, v_perslid_naam_goedkeur FROM fac_usrdata fud, fac_usrtab fut, prs_v_perslid_fullnames p WHERE UPPER(fut.fac_usrtab_naam) = 'VFS GOEDK. INTER' AND fut.fac_usrtab_key = fud.fac_usrtab_key AND fut.fac_usrtab_verwijder IS NULL AND fac.safe_to_number (fud.fac_usrdata_code) = p.prs_perslid_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key_beh:=103062; -- Ralph Vermin v_perslid_key_goedkeur:=NULL; v_perslid_naam_goedkeur:='Ralph Vermin'; END; ELSE -- controleer of de behandelaar van de opdracht rechten heeft om de factuur -- te mogen goedkeuren v_errorhint := 'Controleer rechten opdracht'; SELECT o.prs_perslid_key, prs_perslid_key_goedkeur, pf.prs_perslid_naam_friendly INTO v_perslid_key_beh, v_perslid_key_goedkeur, v_perslid_naam_goedkeur FROM mld_opdr o, fin_factuur f, prs_v_perslid_fullnames_all pf WHERE o.mld_opdr_key = f.mld_opdr_key AND f.fin_factuur_key = p_factuur_key AND o.prs_perslid_key = pf.prs_perslid_key; END IF; -- kijk of de behandelaar FINGOE rechten heeft v_errorhint := 'Kijk of de behandelaar FINGOE rechten heeft'; SELECT COUNT (*) INTO v_count FROM fac_v_webgebruiker wg, fac_functie f WHERE wg.fac_functie_key = f.fac_functie_key AND f.fac_functie_code = 'WEB_FINGOE' AND wg.prs_perslid_key = v_perslid_key_beh; -- Behandelaar heeft rechten en goedkeurder was nog niet gezet. IF v_count > 0 AND v_perslid_key_goedkeur IS NULL THEN -- Als status van de factuur nog ingevoerd is dan zetten we de status naar Ter goedkeuring (5) v_errorhint := 'Zet de status naar Ter Goedkeuring'; fac.trackaction ( 'FINFOK', p_factuur_key, 3, NULL, 'Expliciete goedkeuring door aangewezen goedkeurder: ' || v_perslid_naam_goedkeur); UPDATE fin_factuur SET fin_factuur_statuses_key = 5 WHERE fin_factuur_key = p_factuur_key; UPDATE fin_factuur SET prs_perslid_key_goedkeur = v_perslid_key_beh WHERE fin_factuur_key = p_factuur_key; END IF; ELSIF v_factuur_statuses_key = 5 -- ter goedkeuring THEN NULL; ELSIF v_factuur_statuses_key = 6 -- akkoord THEN v_perslid_key_goedkeur := NULL; IF v_factuur_totaal <= 15000 THEN -- geen goedkeuring nodig NULL; ELSE -- Heeft de eerste fiatteur de factuur al goedgekeurd? v_errorhint := 'Heeft de eerste fiatteur de factuur al goedgekeurd?'; SELECT COUNT (*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'FINGOE' AND t.prs_perslid_key = v_eerste_fiatteur AND t.fac_tracking_refkey = p_factuur_key; IF v_count = 0 THEN -- bedrag is groter dan 15000 en Ralph heeft nog niet goedgekeurd v_perslid_key_goedkeur := v_eerste_fiatteur; ELSIF v_factuur_totaal > 50000 -- AND v_factuur_totaal <= 150000 THEN -- De eerste fiatteur heeft goedgekeurd maar het bedrag is hoger dan 50000, dus de tweede fiatteur moet ook goedkeuren -- Heeft de tweede fiatteur de factuur al goedgekeurd? v_errorhint := 'Bedrag is hoger dan 50000'; SELECT COUNT (*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'FINGOE' AND t.prs_perslid_key = v_tweede_fiatteur AND t.fac_tracking_refkey = p_factuur_key; IF v_count = 0 THEN -- Rob heeft nog niet goedgekeurd v_perslid_key_goedkeur := v_tweede_fiatteur; ELSIF v_factuur_totaal > 150000 THEN -- De eerste en tweede fiatteur heeft goedgekeurd maar het bedrag is hoger dan 150000, dus de derde fiatteur moet ook goedkeuren -- Heeft de derde fiatteur de factuur al goedgekeurd? v_errorhint := 'Bedrag is hoger dan 50000'; SELECT COUNT (*) INTO v_count FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'FINGOE' AND t.prs_perslid_key = v_derde_fiatteur AND t.fac_tracking_refkey = p_factuur_key; IF v_count = 0 THEN -- Walter heeft nog niet goedgekeurd v_perslid_key_goedkeur := v_derde_fiatteur; END IF; END IF; END IF; END IF; v_errorhint := 'Set status en goedkeurder'; IF v_perslid_key_goedkeur IS NOT NULL THEN UPDATE fin_factuur SET fin_factuur_statuses_key = 5 WHERE fin_factuur_key = p_factuur_key; UPDATE fin_factuur SET prs_perslid_key_goedkeur = v_perslid_key_goedkeur WHERE fin_factuur_key = p_factuur_key; -- We sturen een notificatie naar de persoon die de factuur moet goedkeuren. BEGIN fac.putnotificationsrtprio(NULL, v_perslid_key_goedkeur, 'FIN2GO', p_factuur_key, 'Uw goedkeuring is vereist voor factuur '|| p_factuur_key, NULL, NULL, NULL, NULL, 2, NULL); END; END IF; END IF; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.writelog ('YKPN.fin_set_approver', 'E', v_errormsg || ' (' || p_factuur_key || ')' , v_errorhint); END; PROCEDURE add_xml_row ( p_bestand IN VARCHAR2, p_regel IN VARCHAR2) AS v_index NUMBER; BEGIN SELECT COALESCE( MAX(fac_rapport_volgnr), 0) + 1 INTO v_index FROM fac_rapport WHERE fac_rapport_node = p_bestand; INSERT INTO fac_rapport ( fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES (p_bestand, v_index, p_regel); END; PROCEDURE add_xml_element ( p_bestand IN VARCHAR2, p_tag IN VARCHAR2, p_value IN VARCHAR2) AS BEGIN ykpn.add_xml_row(p_bestand, '<' || p_tag || '>' || xml.char_to_html(p_value) || ''); END; PROCEDURE refreshscore(pUserKey IN NUMBER) AS BEGIN -- Waarden van de huidige periode(s) verwijderen. -- TODO: tricky met KPI's op basis van storingsmeldingen, klachten etc; daar kan voor een -- periode maar zo een extra melding afgemeld worden, waardoor de score opnieuw berekend wordt DELETE FROM kpi_score; -- Opnieuw genereren van KPI scores INSERT INTO kpi_score ( kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels) SELECT * FROM ykpn_v_kpi_all; COMMIT; END; FUNCTION get_flex_value (pmodule IN VARCHAR2, p_kenmerk_key IN NUMBER, p_ref_key IN NUMBER, p_kenmerkdomein_key IN NUMBER, p_niveau IN VARCHAR2 DEFAULT NULL) RETURN VARCHAR2 AS v_value VARCHAR2 (4000); v_kenmerkdomein_key NUMBER (10); BEGIN v_value := flx.getflex (pmodule, p_kenmerk_key, p_ref_key, p_niveau); IF p_kenmerkdomein_key IS NOT NULL THEN v_value := flx.getdomeinwaarde (p_kenmerkdomein_key, v_value); END IF; RETURN v_value; END; -- Procedure om bij het koppelen van een afdeling aan een ruimte via Graphics voor iedere -- combinatie van afdeling en gebouw een contract aan te maken. Hier kunnen dan specifieke zaken -- vastgelegd worden. Het opruimten van deze contracten wordt gedaan in de daily task. PROCEDURE update_ruimte_contract ( p_ruimte_key IN NUMBER, p_afdeling_key IN NUMBER) AS v_contract_key NUMBER; v_gebouw_key NUMBER; v_gebouw_code ALG_GEBOUW.ALG_GEBOUW_CODE%TYPE; v_afdeling_oms PRS_AFDELING.PRS_AFDELING_OMSCHRIJVING%TYPE; BEGIN IF p_afdeling_key > 0 THEN SELECT alg_gebouw_key, alg_gebouw_upper INTO v_gebouw_key, v_gebouw_code FROM alg_v_ruimte_gegevens WHERE alg_ruimte_key = p_ruimte_key; SELECT prs_afdeling_omschrijving INTO v_afdeling_oms FROM prs_afdeling WHERE prs_afdeling_key = p_afdeling_key; BEGIN SELECT DISTINCT (c.cnt_contract_key) INTO v_contract_key FROM cnt_contract c, cnt_contract_plaats cp, alg_v_ruimte_gegevens rg WHERE c.cnt_contract_key = cp.cnt_contract_key AND rg.alg_gebouw_key = cp.cnt_alg_plaats_key AND rg.alg_ruimte_key = p_ruimte_key AND cp.cnt_alg_plaats_code = 'G' AND c.prs_afdeling_key_eig = p_afdeling_key AND c.ins_discipline_key = 2201 AND c.cnt_contract_status = 0 AND c.cnt_contract_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO cnt_contract (ins_discipline_key, prs_perslid_key_beh, prs_afdeling_key_eig, cnt_prs_bedrijf_key, cnt_contract_status, cnt_contract_looptijd_van, cnt_contract_looptijd_tot, cnt_contract_opzegtermijn, cnt_contract_rappeltermijn, cnt_contract_omschrijving) VALUES (2201, 89881, -- Contractbeheer. p_afdeling_key, 21, 0, SYSDATE, TO_DATE ('20500101', 'yyyymmdd'), 1, 1, SUBSTR(v_gebouw_code || ' - ' || v_afdeling_oms, 1, 50)) RETURNING cnt_contract_key INTO v_contract_key; INSERT INTO cnt_contract_plaats (cnt_contract_key, cnt_alg_plaats_code, cnt_alg_plaats_key) VALUES (v_contract_key, 'G', v_gebouw_key); END; END IF; END; -- Verwijder ruimte afdeling contracten die contactgegevens weergeven van de huuurder (afdeling) -- in dat gebouw. PROCEDURE cleanup_room_dep_contracts AS BEGIN UPDATE cnt_contract c SET cnt_contract_verwijder = SYSDATE WHERE ins_discipline_key = 2201 -- Ruimte bezetting contracten AND NOT EXISTS (SELECT cp.cnt_contract_plaats_key FROM cnt_contract_plaats cp, alg_v_ruimte_gegevens rg, prs_ruimteafdeling ra WHERE cp.cnt_contract_key = c.cnt_contract_key AND cp.cnt_alg_plaats_key = rg.alg_gebouw_key AND rg.alg_ruimte_key = ra.alg_ruimte_key AND ra.prs_afdeling_key = c.prs_afdeling_key_eig AND ra.prs_ruimteafdeling_verwijder IS NULL); END; -- Ontvangen mailbericht voor goedkeuring werkplek inrichting bestellingen. -- De mail wordt verstuurd als de medewerker de voorlichting gevolgd heeft. -- Daarna mag deze een werkplek reserveren. PROCEDURE mail_werkplekinrichting (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_ruisnaam VARCHAR2 (200); v_email VARCHAR2 (200); v_voornaam VARCHAR2 (200); v_achternaam VARCHAR2 (200); v_besteller_key NUMBER; BEGIN DELETE imp_log WHERE imp_log_applicatie = 'MAIL_WERKPLEKINRICHTING' AND imp_log_datum < SYSDATE - 14; v_errorhint := 'Opzoeken velden in de mail'; v_ruisnaam := SUBSTR(pbody, INSTR(pbody, 'Ruisnaam:')+ 9, INSTR(pbody, CHR (10), INSTR(pbody, 'Ruisnaam:'))-(INSTR(pbody, 'Ruisnaam:')+ 9)); v_email := SUBSTR(pbody, INSTR(pbody, 'Email:')+ 6, INSTR(pbody, CHR (10), INSTR(pbody, 'Email:'))-(INSTR(pbody, 'Email:')+ 6)); v_voornaam := SUBSTR(pbody, INSTR(pbody, 'Voornaam:')+ 9, INSTR(pbody, CHR (10), INSTR(pbody, 'Voornaam:'))-(INSTR(pbody, 'Voornaam:')+ 9)); v_achternaam := SUBSTR(pbody, INSTR(pbody, 'Achternaam:')+ 11, INSTR(pbody, CHR (10), INSTR(pbody, 'Achternaam:'))-(INSTR(pbody, 'Achternaam:')+ 11)); fac.writelog ('MAIL_WERKPLEKINRICHTING', 'I', 'v_ruisnaam:' || v_ruisnaam, ''); fac.writelog ('MAIL_WERKPLEKINRICHTING', 'I', 'v_email:' || v_email, ''); fac.writelog ('MAIL_WERKPLEKINRICHTING', 'I', 'v_voornaam:' || v_voornaam, ''); fac.writelog ('MAIL_WERKPLEKINRICHTING', 'I', 'v_achternaam:' || v_achternaam, ''); v_errorhint := 'Zoek de persoon op adhv de ruisnaam: ' || v_ruisnaam; SELECT prs_perslid_key INTO v_besteller_key FROM prs_v_aanwezigperslid WHERE prs_perslid_oslogin = UPPER(v_ruisnaam); v_errorhint := 'Voeg de persoon toe aan de autorisatiegroep: ' || v_ruisnaam || '-' || v_besteller_key; INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) SELECT 2741, v_besteller_key FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM fac_gebruikersgroep WHERE fac_groep_key = 2741 AND prs_perslid_key = v_besteller_key); v_errorhint := 'Toevoegen resultaat'; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Rechten voor werkplekinrichting toegekend aan: ' || v_ruisnaam); EXCEPTION WHEN NO_DATA_FOUND 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 ('MAIL_WERKPLEKINRICHTING', 'E', v_errormsg, v_errorhint); DELETE fac_rapport WHERE fac_rapport_node = 'WERKPLEKINR' AND fac_rapport_volgnr < TO_CHAR(SYSDATE-100, 'YYMMDDHH24MI'); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('WERKPLEKINR', TO_CHAR(SYSDATE, 'YYMMDDHH24MI'), 'Onbekende besteller:'||v_ruisnaam || '-' || v_email || '-' || v_voornaam || '-' || v_achternaam); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Fout bij inlezen mail werkplekinrichting: ' || v_ruisnaam); END; -- Update procdure van de werkplek objecten naar de juiste ruimteNr -- Er wordt op basis van QR code een email body gemaakt met -- Key van de ruimte en daarop volgend de key van de objecten die in deze ruimte staan -- https://ykpn.facilitor.nl/?u=Pu3JoBgoXxydA5Jv&ruimte_key=16653 -- https://ykpn.facilitor.nl/?u=123489289832&ins_deel_key=9366 -- https://ykpn.facilitor.nl/?u=123489289832&ins_deel_key=9367 -- https://ykpn.facilitor.nl/?u=Pu3JoBgoXxydA5Jv&ruimte_key=16634 -- https://ykpn.facilitor.nl/?u=123489289832&ins_deel_key=9368 -- https://ykpn.facilitor.nl/?u=123489289832&ins_deel_key=9369 PROCEDURE mail_werkpleklocatie (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_body VARCHAR2(4000); v_line VARCHAR2(1000); v_param VARCHAR2(100); v_ruimtestr VARCHAR2(50); v_ruimteid VARCHAR2(50); v_objectstr VARCHAR2(50); v_objectid VARCHAR2(50); v_rmtcount NUMBER; v_objcount NUMBER; BEGIN v_errorhint:='Fout bij verwerken email'; v_body :=REPLACE (pbody, CHR(13)); WHILE LENGTH(v_body)>2 LOOP fac.imp_getfield(v_body, CHR(10), v_line); IF v_line IS NOT NULL THEN v_param := SUBSTR(v_line,INSTR(v_line,'?')+1,LENGTH(v_line)); IF INSTR(v_param,'ruimte_key')>0 THEN v_errorhint:='Fout bij controle ruimte'; v_rmtcount:=0; v_ruimtestr := SUBSTR(v_param,INSTR(v_param,'&')+1,LENGTH(v_param)); v_ruimteid := SUBSTR(v_ruimtestr,INSTR(v_ruimtestr,'=')+1,LENGTH(v_ruimtestr)); SELECT COUNT(*) INTO v_rmtcount FROM alg_ruimte r WHERE r.alg_ruimte_key=v_ruimteid AND r.alg_ruimte_verwijder IS NULL; --dbms_output.put_line ('Ruimte ' || v_ruimteid|| ' aanwezig :'||v_rmtcount); ELSE v_errorhint:='Fout bij controle Werkplek'; v_objcount:=0; v_objectstr := SUBSTR(v_param,INSTR(v_param,'&')+1,LENGTH(v_param)); v_objectid := SUBSTR(v_objectstr,INSTR(v_objectstr,'=')+1,LENGTH(v_objectstr)); SELECT COUNT(*) INTO v_objcount FROM ins_deel i WHERE i.ins_deel_key=v_objectid AND i.ins_deel_verwijder IS NULL; --dbms_output.put_line ('WP ' || v_objectid || ' aanwezig :'||v_objcount); END IF; IF v_rmtcount=1 AND v_objcount=1 THEN v_errorhint:='Fout bij update werkplek'; UPDATE ins_deel i SET i.ins_alg_ruimte_key=v_ruimteid WHERE i.ins_deel_key=v_objectid AND i.ins_deel_verwijder IS NULL; v_objcount:=0; END IF; END IF; 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.writelog ('mail_werkpleklocatie', 'E', 'Fout verwerken email!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE autoorder AS CURSOR c IS SELECT m.mld_melding_key, m.prs_kostenplaats_key, TO_CHAR(m.mld_melding_omschrijving) mld_melding_omschrijving, MAX (bdl.prs_bedrijf_key) prs_bedrijf_key, std.mld_typeopdr_key, m.mld_melding_einddatum, m.mld_melding_status FROM mld_melding m, mld_stdmelding std, prs_bedrijfdienstlocatie bdl WHERE m.mld_melding_status IN (2, 3, 4) -- Ingevoerd, Ingezien, Geaccepteerd AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_stdmelding_autoorder = 1 AND std.prs_dienst_key = bdl.prs_dienst_key AND mld_melding_datum > SYSDATE - 1 -- voorkom dat oude meldingen ineens verstuurd gaan worden AND mld_melding_datum < SYSDATE - (1 / 96) -- voorkom dat meldingen die nog bezig zijn met aanmaken al aangepast worden. AND std.mld_typeopdr_key IS NOT NULL AND m.mld_alg_locatie_key = bdl.alg_locatie_key AND NOT EXISTS (SELECT mld_melding_key FROM mld_opdr o WHERE mld_melding_key = m.mld_melding_key) GROUP BY mld_melding_key, m.prs_kostenplaats_key, TO_CHAR(m.mld_melding_omschrijving), mld_typeopdr_key, mld_melding_einddatum, mld_melding_status; CURSOR c_flex (c_melding_key NUMBER) IS SELECT sk.mld_srtkenmerk_kenmerktype, sk.mld_srtkenmerk_omschrijving, DECODE ( sk.mld_srtkenmerk_kenmerktype, 'S', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, mld_kenmerkmelding_waarde), 'R', fac.getdomeinwaarde (sk.fac_kenmerkdomein_key, mld_kenmerkmelding_waarde), mld_kenmerkmelding_waarde) waarde FROM mld_kenmerkmelding km, mld_kenmerk k, mld_srtkenmerk sk WHERE mld_melding_key = c_melding_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key ORDER BY k.mld_kenmerk_volgnummer; v_opdr_key NUMBER; v_notificatie_code VARCHAR2 (20); v_mld_opdr_bedrijfopdr_volgnr NUMBER; v_melding_omschrijving VARCHAR2 (4000); BEGIN FOR rec IN c LOOP BEGIN -- eerst even de status naar geaccepteerd zetten. IF rec.mld_melding_status <> 4 THEN MLD.setmeldingstatus (rec.mld_melding_key, 4, 3); -- Geaccepteerd, Facilitor END IF; v_melding_omschrijving := NULL; FOR rec_flex IN c_flex (rec.mld_melding_key) LOOP BEGIN v_melding_omschrijving := v_melding_omschrijving || rec_flex.mld_srtkenmerk_omschrijving || ': ' || rec_flex.waarde || CHR (10); END; END LOOP; v_mld_opdr_bedrijfopdr_volgnr := mld.BepaalOpdrMeldingVolgnr (rec.mld_melding_key); INSERT INTO mld_opdr (mld_melding_key, prs_kostenplaats_key, mld_typeopdr_key, prs_perslid_key, mld_uitvoerende_keys, mld_opdr_datumbegin, mld_opdr_einddatum, mld_opdr_module, mld_opdr_omschrijving, mld_opdr_bedrijfopdr_volgnr, mld_opdr_teverzenden) VALUES ( rec.mld_melding_key, rec.prs_kostenplaats_key, rec.mld_typeopdr_key, 3 -- facilitor , rec.prs_bedrijf_key, SYSDATE, rec.mld_melding_einddatum, 'MLD', v_melding_omschrijving || rec.mld_melding_omschrijving, v_mld_opdr_bedrijfopdr_volgnr, 1) RETURNING mld_opdr_key INTO v_opdr_key; MLD.setopdrachtstatus (v_opdr_key, 5, 3); -- uitgegeven, Facilitor SELECT DECODE (u.TYPE, 'P', 'ORDMLI', 'ORDMLE') INTO v_notificatie_code FROM mld_v_uitvoerende u WHERE u.mld_uitvoerende_key = rec.prs_bedrijf_key; FAC.trackaction (v_notificatie_code, v_opdr_key, 3, NULL, NULL); -- update melding status MLD.updatemeldingstatus (rec.mld_melding_key, 0, 3); -- facilitor EXCEPTION WHEN OTHERS THEN fac.writelog ( 'AutoOrder', 'E', 'OTHERS (error ' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100) || ')', 'Fout bij aanmaken opdracht: ' || rec.mld_melding_key); END; END LOOP; END; PROCEDURE tsk_bevr_contract(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- bevriezen van contractgegevens v_errorhint := 'Bevriezen contractgegevens'; IF TO_CHAR (SYSDATE, 'DD') = '01' THEN INSERT INTO ykpn_freeze_contract (freezedate, boekmaand, cnt_contract_key, cnt_contract_nummer, cnt_contract_versie, cnt_contract_nummer_intern, cnt_contract_omschrijving, cnt_contract_opmerking, cnt_contract_kosten, cnt_contract_termijnkosten, cnt_contract_termijntermijn, cnt_prs_bedrijf_key, ins_discipline_key, prs_kostenplaats_key, cnt_contract_status, cnt_contract_plaats_key, cnt_alg_plaats_key, cnt_alg_plaats_code, cnt_contract_plaats_gewicht, cnt_contract_plaats_aanmaak, cnt_contract_plaats_verwijder) (SELECT SYSDATE, TO_CHAR (SYSDATE - 1, 'yyyy-mm'), c.cnt_contract_key, cnt_contract_nummer, cnt_contract_versie, cnt_contract_nummer_intern, cnt_contract_omschrijving, cnt_contract_opmerking, cnt_contract_kosten, cnt_contract_termijnkosten, cnt_contract_termijntermijn, cnt_prs_bedrijf_key, ins_discipline_key, prs_kostenplaats_key, cnt_contract_status, cnt_contract_plaats_key, cnt_alg_plaats_key, cnt_alg_plaats_code, cnt_contract_plaats_gewicht, cnt_contract_plaats_aanmaak, cnt_contract_plaats_verwijder FROM cnt_contract c, cnt_contract_plaats cp WHERE c.cnt_contract_key = cp.cnt_contract_key AND cnt_contract_plaats_verwijder IS NULL); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_mail_locman(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c(p_not_key NUMBER) IS SELECT a.bez_afspraak_key, prs_perslid_email, p.prs_perslid_key, aantal, bez_afspraak_datum, alg_locatie_omschrijving FROM ( SELECT af.bez_afspraak_key, af.alg_locatie_key, af.bez_afspraak_datum, COUNT (af.bez_afspraak_key) aantal FROM bez_afspraak af, bez_bezoekers b, res_rsv_deel rrd WHERE af.bez_afspraak_key = b.bez_afspraak_key AND b.BEZ_BEZOEKERS_KEY = rrd.BEZ_BEZOEKERS_KEY GROUP BY af.bez_afspraak_key, af.alg_locatie_key, af.bez_afspraak_datum) a, prs_v_perslidwerkplek_gegevens pwpg, alg_locatie l, prs_perslid p, fac_gebruikersgroep gg WHERE gg.fac_groep_key = 1741 -- was eerst locatiemanagement (28) u YASK FM (1741) AND gg.prs_perslid_key = pwpg.prs_perslid_key AND a.alg_locatie_key = pwpg.alg_locatie_key AND pwpg.prs_perslid_key = p.prs_perslid_key AND a.alg_locatie_key = l.alg_locatie_key AND a.aantal > 5 AND a.bez_afspraak_datum > SYSDATE AND NOT EXISTS (SELECT fac_tracking_key FROM fac_tracking t WHERE t.fac_srtnotificatie_key = p_not_key -- cust11 AND t.fac_tracking_refkey = a.bez_afspraak_key); v_oms VARCHAR2 (200); v_not_key FAC_SRTNOTIFICATIE.FAC_SRTNOTIFICATIE_KEY%TYPE; v_not_mode FAC_SRTNOTIFICATIE.FAC_SRTNOTIFICATIE_MODE%TYPE; v_tracking_key NUMBER (10); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Stuur locatiemanagement een mail als grote groepen komen parkeren. v_errorhint := 'Mail locatiemanagement bij grote groepen'; SELECT fac_srtnotificatie_key, fac_srtnotificatie_mode INTO v_not_key, v_not_mode FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'CUST11'; FOR rec IN c(v_not_key) LOOP -- Controleer of de tracking al gezet is. Er kunnen namelijk meer mensen genotificeerd worden per afspraak BEGIN SELECT fac_tracking_key INTO v_tracking_key FROM fac_tracking t WHERE t.fac_srtnotificatie_key = v_not_key -- CUST11 AND t.fac_tracking_refkey = rec.bez_afspraak_key; EXCEPTION WHEN NO_DATA_FOUND THEN FAC.trackaction ( 'CUST11', rec.bez_afspraak_key, 3, NULL, '#Notificatie grote groep parkeren uitgestuurd'); END; v_oms := 'Grote groep (' || rec.aantal || ') parkeerplaatsen geboekt nr:' || rec.bez_afspraak_key || ' op ' || TO_CHAR (rec.bez_afspraak_datum, 'dd-mm-yyyy hh24:mi') || ', locatie: ' || rec.alg_locatie_omschrijving; INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_email, prs_perslid_key_receiver, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit) VALUES (v_not_key, -- CUST11 v_not_mode, -- mail rec.prs_perslid_email, -- email rec.prs_perslid_key, v_oms, rec.bez_afspraak_key, NULL, 2); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_bez_buitmld(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR ykpn_bez_out_c IS SELECT b.bez_bezoekers_key, b.bez_afspraak_key, b.bez_bezoekers_done FROM BEZ_AFSPRAAK ba, BEZ_BEZOEKERS b WHERE ba.bez_afspraak_key = b.bez_afspraak_key AND b.bez_bezoekers_done IS NOT NULL AND b.bez_bezoekers_out IS NULL AND TRUNC (ba.bez_afspraak_datum) = TRUNC (SYSDATE); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Automatisch buitenmelden bezoekers (moet gepland tussen 22:00 en 0:00 uur). Ticket 56012. v_errorhint := 'Automatisch bezoek buitenmelden'; FOR rec IN ykpn_bez_out_c LOOP BEGIN UPDATE bez_bezoekers SET bez_bezoekers_out = SYSDATE WHERE bez_bezoekers_key = rec.bez_bezoekers_key; fac.trackaction ('BEZOUT', rec.bez_bezoekers_key, NULL, NULL, NULL); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_bez_cleanup(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Van bezoekers die langer dan een maand geleden een afspraak hadden gaan we een aantal -- niet belangrijke kenmerken verwijderden. v_errorhint := 'Opschonen oude bezoekers'; DELETE bez_kenmerkwaarde WHERE bez_kenmerkwaarde_key IN (SELECT bez_kenmerkwaarde_key FROM bez_bezoekers b, bez_kenmerkwaarde kw, bez_afspraak a WHERE b.bez_bezoekers_key = kw.bez_bezoekers_key AND b.bez_afspraak_key = a.bez_afspraak_key AND kw.bez_kenmerk_key IN (1002, -- Aanmaak 1020, -- Pincode 1042, -- Nedap verzonden 1043, -- SMS verzonden 1060, -- Nedap id 1140, -- Uitleg parkeerbeleid 1160, -- Kenteken response id 1200) -- Gebouwomschrijving AND bez_afspraak_datum < SYSDATE - 30); -- Email, Kenteken en Telefoon worden nu bij bezoekr opgeslagen en moeten daar opgeschoond worden ipv kenmerken UPDATE bez_bezoekers bz SET bz.bez_bezoekers_telefoon = NULL, bz.bez_bezoekers_email = NULL, bz.bez_bezoekers_kenteken =NULL WHERE bz.bez_afspraak_key IN (SELECT a.bez_afspraak_key FROM bez_afspraak a WHERE a.bez_afspraak_datum < SYSDATE-30); 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', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_cnt_index (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR cnt_indexatie IS SELECT c.cnt_contract_key, kci.cnt_kenmerkcontract_waarde indexatie, kcd.cnt_kenmerkcontract_key datum_key, kci.cnt_kenmerkcontract_key index_key FROM cnt_contract c, cnt_kenmerkcontract kci, cnt_kenmerk ki, cnt_kenmerkcontract kcd, cnt_kenmerk kd WHERE c.cnt_contract_key = kcd.cnt_contract_key AND kcd.cnt_kenmerk_key = kd.cnt_kenmerk_key AND kd.cnt_srtkenmerk_key = 81 AND kcd.cnt_kenmerkcontract_waarde = TO_CHAR (SYSDATE, 'dd-mm-yyyy') AND c.cnt_contract_key = kci.cnt_contract_key AND kci.cnt_kenmerk_key = ki.cnt_kenmerk_key AND ki.cnt_srtkenmerk_key = 82; v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Contractindexatie v_errorhint := 'Contract indexatie'; FOR rec IN cnt_indexatie LOOP UPDATE cnt_contract_plaats SET cnt_contract_plaats_gewicht = cnt_contract_plaats_gewicht * (1 + (rec.indexatie /100)) WHERE cnt_contract_key = rec.cnt_contract_key; UPDATE cnt_contract c SET c.cnt_contract_termijnkosten = c.cnt_contract_kosten /12 WHERE c.cnt_contract_key = rec.cnt_contract_key; UPDATE cnt_contract c SET c.cnt_contract_kosten = (SELECT SUM (cnt_contract_plaats_gewicht) FROM cnt_contract_plaats cp WHERE cp.cnt_contract_key = rec.cnt_contract_key) WHERE c.cnt_contract_key = rec.cnt_contract_key; fac.trackaction ( 'CNTUPD', rec.cnt_contract_key, 3, SYSDATE, 'Contract geïndexeerd met ' || rec.indexatie || '%'); -- Verwijder de kenmerken voor de indexatie DELETE cnt_kenmerkcontract WHERE cnt_kenmerkcontract_key = rec.datum_key; DELETE cnt_kenmerkcontract WHERE cnt_kenmerkcontract_key = rec.index_key; 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_mld_keuring (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c_keuring IS SELECT kd.ins_kenmerkdeel_waarde, dg.ins_deel_key, dg.alg_locatie_key, dg.alg_gebouw_key, dg.ins_deel_omschrijving, dg.alg_plaatsaanduiding FROM ins_v_deel_gegevens dg, ins_kenmerkdeel kd WHERE ins_discipline_key = 1501 AND dg.ins_deel_key = kd.ins_deel_key AND kd.ins_kenmerk_key = 47 --Volgende keuring AND TO_DATE (ins_kenmerkdeel_waarde, 'dd-mm-yyyy') = TRUNC(SYSDATE) + 60 ORDER BY dg.alg_gebouw_key; v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_old_gebouw_key NUMBER; v_stdmelding_key NUMBER; v_melding_key NUMBER; v_perslid_key NUMBER; v_stdmelding_uvt mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie BEGIN -- Aanmaken melding voor periodieke keuring van objecten. We maken een melding per gebouw aan. v_errorhint := 'Aanmaken melding voor Keuringsmiddelen keuren'; v_old_gebouw_key := -1; v_stdmelding_key := 2961; -- Keuringsmiddelen keuren v_perslid_key := 3; -- Facilitor SELECT mld_stdmelding_t_uitvoertijd INTO v_stdmelding_uvt FROM mld_stdmelding WHERE mld_stdmelding_key = v_stdmelding_key; FOR rec IN c_keuring LOOP BEGIN IF rec.alg_gebouw_key <> v_old_gebouw_key THEN INSERT INTO mld_melding (mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_alg_onroerendgoed_keys, mld_melding_datum, mld_melding_onderwerp, mld_melding_omschrijving, mld_melding_status, mld_melding_t_uitvoertijd, mld_stdmelding_key, mld_ins_discipline_key, -- behandelteam prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ( 'MLD', 6, -- system rec.alg_locatie_key, rec.alg_gebouw_key, SYSDATE, 'Keuringsmiddelen keuren', 'Keuring noodzakelijk voor de bijgevoegde keuringsmiddelen', NULL, v_stdmelding_uvt, v_stdmelding_key, 1721, -- Yask locatiemanagement v_perslid_key, v_perslid_key, NULL, 3) -- prio normaal RETURNING mld_melding_key INTO v_melding_key; v_errormsg := 'Fout bij statuswijziging'; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); v_old_gebouw_key := rec.alg_gebouw_key; END IF; INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key) VALUES (v_melding_key, rec.ins_deel_key); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_bes_geleverd(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c_bes IS SELECT distinct b.bes_bestelling_key, bo.bes_bestelopdr_key FROM bes_bestelling b, bes_bestelopdr bo, bes_bestelling_Item bsi, bes_bestelopdr_item boi, bes_srtdeel bsd, bes_srtgroep bsg, bes_discipline bd WHERE TRUNC(b.bes_bestelling_datum) < TRUNC(SYSDATE-14) AND b.bes_bestelling_status=5 AND bsi.bes_bestelling_key = b.bes_bestelling_key AND boi.bes_bestelopdr_item_key = bsi.bes_bestelopdr_item_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bsi.bes_srtdeel_key = bsd.bes_srtdeel_key AND bsg.bes_srtgroep_key = bsd.bes_srtgroep_key AND bd.ins_discipline_key = bsg.ins_discipline_key AND bd.ins_discipline_key=1741; -- Office depot catalogus CURSOR c_bes_item(p_bes_bestelling_key NUMBER) IS SELECT bsi.bes_bestelopdr_item_key FROM bes_bestelling_Item bsi, bes_bestelopdr_item boi WHERE bsi.bes_bestelling_key = p_bes_bestelling_key AND boi.bes_bestelopdr_item_key = bsi.bes_bestelopdr_item_key; v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errorhint :='Alle Viking bestelling op geleverd zetten'; FOR rec in c_bes LOOP FOR rec_o IN c_bes_item(rec.bes_bestelling_key) LOOP UPDATE bes_bestelopdr_item boi SET boi.bes_bestelopdr_item_status=6, -- Geleverd boi.bes_bestelopdr_item_aantalontv= boi.bes_bestelopdr_item_aantal -- alles is ontvangen WHERE boi.bes_bestelopdr_item_key = rec_o.bes_bestelopdr_item_key; UPDATE bes_bestelling_item bbi SET bbi.bes_bestelling_item_status=6, bbi.bes_bestelling_item_aantalontv = bbi.bes_bestelling_item_aantal wHERE bbi.bes_bestelopdr_item_key = rec_o.bes_bestelopdr_item_key; END LOOP; UPDATE bes_bestelopdr bo SET bo.BES_BESTELOPDR_STATUS=6 WHERE bo.BES_BESTELOPDR_KEY = rec.bes_bestelopdr_key; fac.trackaction ( 'BES2AF', rec.bes_bestelopdr_key, 3, SYSDATE, 'Bestelopdracht is geleverd (vanuit Daily)'); UPDATE bes_bestelling b SET b.bes_bestelling_status=6 WHERE b.bes_bestelling_key= rec.bes_bestelling_key; fac.trackaction ( 'BESOTV', rec.bes_bestelling_key, 3, SYSDATE, 'Bestelling is geleverd (vanuit Daily)'); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_mld_thuiswerkwinkel(p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR sel IS SELECT m.mld_melding_key, o.mld_opdr_key FROM mld_melding m, mld_stdmelding ms, mld_discipline md, mld_opdr o WHERE m.mld_stdmelding_key = ms.mld_stdmelding_key AND md.ins_discipline_key = ms.mld_ins_discipline_key AND ms.mld_ins_discipline_key = 3481 -- 14 Vragen Thuiswerkwinkel AND o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key = 5 -- Toegekend AND m.mld_melding_status = 7; -- Uitgegeven; v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errorhint :='Alle uitgegeven thuiswerkwinkel meldingen op geleverd zetten'; FOR rec IN sel LOOP -- update we de status van de opdracht nara afgemeld UPDATE mld_opdr o SET o.mld_statusopdr_key=6, o.mld_opdr_opmerking='Dank voor je melding! We nemen contact met je op vanuit de Thuiswerkwinkel mailbox en zullen daarom deze opdracht sluiten.' WHERE o.mld_opdr_key= rec.mld_opdr_key; fac.trackaction ('ORDAFM', rec.mld_opdr_key, 3, SYSDATE, 'Opdracht is afgemeld vanuit daily.'); -- update we de status van de melding naar afgemeld UPDATE mld_melding m SET m.mld_melding_status = 5, m.mld_melding_opmerking='Dank voor je melding! We nemen contact met je op vanuit de Thuiswerkwinkel mailbox en zullen daarom deze melding sluiten.' WHERE m.mld_melding_key= rec.mld_melding_key; fac.trackaction ('MLDAFM', rec.mld_melding_key, 3, SYSDATE, 'Melding is afgemeld vanuit daily.'); 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.writelog (p_applname, 'E', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; PROCEDURE tsk_mldbes_approve (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR sel IS SELECT MAX(M.MLD_MELDING_KEY) mld_melding_key, m.prs_perslid_key, SUBSTR(sm.mld_stdmelding_code,INSTR(sm.mld_stdmelding_code,'_')+1) aut_groep_key FROM mld_melding m, mld_stdmelding sm WHERE sm.mld_stdmelding_code like 'BESTOEGANG%' AND m.mld_stdmelding_key=sm.mld_stdmelding_key AND m.mld_melding_status=2 GROUP BY m.prs_perslid_key,SUBSTR(sm.mld_stdmelding_code,INSTR(sm.mld_stdmelding_code,'_')+1); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; BEGIN v_errorhint :='Alle bestecatalogus toegangs meldingen op verwerkt zetten'; FOR rec IN sel LOOP IF LENGTH(rec.aut_groep_key)>1 THEN v_errorhint:='Ophalen autorisatiegroep gaat fout'; SELECT count(*) INTO v_count from fac_gebruikersgroep fgg, fac_groep fg WHERE fg.fac_groep_key=rec.aut_groep_key AND fgg.fac_groep_key=fg.fac_groep_key AND fgg.prs_perslid_key=rec.prs_perslid_key; IF v_count=0 THEN INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key) VALUES(rec.aut_groep_key, rec.prs_perslid_key); END IF; UPDATE mld_melding SET mld_melding_status=5, mld_melding_opmerking='Dank voor je melding! Je aanvraag is goedgekeurd en verwerkt. ' WHERE mld_melding_key=rec.mld_melding_key; fac.trackaction ('MLDAFM', rec.mld_melding_key, 3, SYSDATE, 'Melding is afgemeld vanuit daily.'); END IF; END LOOP; END; END; / -- EINDE BODY -- BASISVIEW voor procedure CONTRACTSCOPE (ticket 60365) CREATE OR REPLACE VIEW YKPN_V_RAP_CNT_EXPORT ( CONTRACT_TYPE, CONTRACT_NR, CONTRACT_OMSCHR, CONTRACT_PARTIJ, SCOPE_PLAATS, SCOPE_CODE, SCOPE_OMSCHR, SCOPE_BEDRAG, CONTRACT_KEY ) AS SELECT d.ins_discipline_omschrijving, c.cnt_contract_nummer_intern || '.' || COALESCE(c.cnt_contract_versie, '0'), c.cnt_contract_omschrijving, b.prs_bedrijf_naam, sc.plaats, sc.code, sc.omschrijving, sc.cnt_contract_plaats_gewicht, c.cnt_contract_key FROM cnt_contract c, prs_bedrijf b, ins_tab_discipline d, (SELECT p.cnt_contract_key, l.alg_locatie_code AS Code, l.alg_locatie_omschrijving AS Omschrijving, p.cnt_contract_plaats_gewicht, 'L' Plaats FROM cnt_contract_plaats p, alg_locatie l WHERE p.cnt_alg_plaats_code = 'L' AND p.cnt_alg_plaats_key = l.alg_locatie_key AND cnt_contract_plaats_verwijder IS NULL AND l.alg_locatie_verwijder IS NULL UNION ALL SELECT p.cnt_contract_key, g.alg_gebouw_code AS Code, g.alg_gebouw_omschrijving AS Omschrijving, p.cnt_contract_plaats_gewicht, 'G' Plaats FROM cnt_contract_plaats p, alg_gebouw g WHERE p.cnt_alg_plaats_code = 'G' AND p.cnt_alg_plaats_key = g.alg_gebouw_key AND cnt_contract_plaats_verwijder IS NULL AND g.alg_gebouw_verwijder IS NULL ) sc WHERE c.ins_discipline_key = d.ins_discipline_key AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND d.ins_discipline_module = 'CNT' AND d.ins_discipline_verwijder IS NULL AND c.cnt_contract_status = 0 AND c.cnt_contract_looptijd_tot >= trunc(sysdate) AND c.cnt_contract_key = sc.cnt_contract_key ORDER BY c.cnt_contract_nummer_intern,sc.code; CREATE OR REPLACE PROCEDURE ykpn_pre_putorders AS -- Bepalen welke opdrachten een notitie hebben CURSOR sel_servicenow IS SELECT DISTINCT o.mld_opdr_key FROM mld_opdr o , mld_melding m, mld_opdr_note ono, prs_bedrijf b WHERE o.mld_opdr_externnr LIKE 'INC#%' AND o.mld_uitvoerende_keys = b.prs_bedrijf_key AND b.prs_bedrijf_naam_upper = 'SERVICE NOW API' AND o.mld_melding_key = m.mld_melding_key AND o.mld_statusopdr_key IN (5, 8) AND o.mld_opdr_teverzenden=0 AND ono.mld_opdr_key = o.mld_opdr_key AND ono.prs_perslid_key=m.prs_perslid_key AND ono.mld_opdr_note_aanmaak > o.mld_opdr_externsyncdate; BEGIN NULL; -- Weke opdrachten naar servicenow moeten we opneiwue versturen --FOR rec IN sel_servicenow --LOOP -- UPDATE mld_opdr o -- SET o.mld_opdr_teverzenden=2, o.mld_opdr_verzonden=NULL -- WHERE o.mld_opdr_key=rec.mld_opdr_key; --END LOOP; END; / CREATE OR REPLACE PROCEDURE ykpn_import_contractscope (p_import_key IN NUMBER) AS c_fielddelimitor 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 NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); -- v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_cnt_nr VARCHAR2 (100); v_cnt_omschrijving VARCHAR2 (100); v_cnt_partij VARCHAR2 (100); v_cnt_plaats VARCHAR2 (100); v_cnt_scopecode VARCHAR2 (100); v_cnt_scopeomschr VARCHAR2 (100); v_cnt_scopebedrag VARCHAR2 (100); v_cnt_contract_key NUMBER (10); v_cnt_alg_plaats_key NUMBER (10); v_check_aantal_gebouwcode NUMBER (10); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Vorige inlees eerst verwijderen DELETE FROM ykpn_imp_contractscope; COMMIT; header_is_valid := 0; v_ongeldig := 0; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec IN c LOOP BEGIN v_newline := rec.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; -- Lees alle veldwaarden: contractnummer;contract omschrijving;contract partij;plaats;code;scope omschrijving;bedrag v_errormsg := 'Fout opvragen te importeren rij (contractnummer)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_nr); v_errormsg := 'Fout opvragen te importeren rij (contract omschrijving)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_omschrijving); v_errormsg := 'Fout opvragen te importeren rij (contract partij)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_partij); v_errormsg := 'Fout opvragen te importeren rij (plaats)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_plaats); v_errormsg := 'Fout opvragen te importeren rij (code)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_scopecode); v_errormsg := 'Fout opvragen te importeren rij (scope omschrijving)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_scopeomschr); v_errormsg := 'Fout opvragen te importeren rij (bedrag)'; fac.imp_getfield (v_newline, c_fielddelimitor, v_cnt_scopebedrag); v_aanduiding := v_cnt_nr || '|' || v_cnt_scopecode || '|' || v_cnt_scopeomschr; v_count_tot := v_count_tot + 1; -- Skip until the header is found IF header_is_valid = 0 THEN IF v_cnt_nr = 'contractnummer' AND v_cnt_omschrijving = 'contract omschrijving' AND v_cnt_partij = 'contract partij' AND v_cnt_plaats = 'plaats' AND v_cnt_scopecode = 'code' AND v_cnt_scopeomschr = 'scope omschrijving' AND v_cnt_scopebedrag = 'bedrag' THEN header_is_valid := 1; END IF; ELSE -- Header OK. Vanaf hier in de LOOP de variabele vullen (v_cnt_contract_key , v_cnt_alg_plaats_key, v_check_aantal_gebouwcode ) ---- Aanvullen = Contract_key + Dubbele of geen gebouwcode + Gebouwkey ---- Check = Contract_key gevuld + Gebouwkey gevuld - Zo niet dan v_ongeldig = 1 zetten -- 1. Contract-key erbij zoeken BEGIN v_errormsg := 'Intern contractnummer matchen met contract_key '; v_cnt_contract_key := 0; SELECT DISTINCT c.cnt_contract_key INTO v_cnt_contract_key FROM cnt_contract c WHERE c.cnt_contract_nummer_intern || '.' || COALESCE (c.cnt_contract_versie, '0') = v_cnt_nr; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Geen contract_key gevonden', rec.fac_imp_file_index || ' - ' || v_aanduiding); v_ongeldig := 1; END; -- 2. Aantal gebouwcodes vullen - Check of er 1 gevonden wordt -- We lopen de kans dat Excel de voorloopnullen van het gebouw verwijderd. Daarom maar even weer toevoegen v_cnt_scopecode := TO_CHAR (v_cnt_scopecode, 'FM00000'); BEGIN v_errormsg := 'Aantal gebouwcodes ophalen - check moet 1 zijn '; SELECT alg_gebouw_key INTO v_cnt_alg_plaats_key FROM alg_gebouw WHERE v_cnt_scopecode = alg_gebouw_code AND v_cnt_plaats = 'G'; EXCEPTION WHEN OTHERS THEN fac.imp_writelog ( p_import_key, 'E', 'Gebouwcode kan niet unieke gevonden worden', rec.fac_imp_file_index || ' - ' || v_aanduiding); v_ongeldig := 1; END; INSERT INTO ykpn_imp_contractscope (cnt_nr, cnt_omschrijving, cnt_partij, scope_plaats, scope_gebouwcode, scope_omschrijving, scope_bedrag, cnt_contract_key, cnt_alg_plaats_key, check_aantal_gebouwcode) VALUES ( v_cnt_nr, v_cnt_omschrijving, v_cnt_partij, v_cnt_plaats, v_cnt_scopecode, v_cnt_scopeomschr, REPLACE ( REPLACE (COALESCE (v_cnt_scopebedrag, '0'), ',', '.'), ' ', ''), v_cnt_contract_key, v_cnt_alg_plaats_key, 0); 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 -- Afsluiting: Rollback/Delete tabel als er fouten in csv zitten... IF v_ongeldig > 0 THEN DELETE FROM ykpn_imp_contractscope; fac.imp_writelog ( p_import_key, 'E', 'Niet ingelezen. Staan aantal ongeldige regels in csv-bestand. Zie bovenstaande ERRORS. Pas deze eerst aan!', ''); ELSE fac.imp_writelog ( p_import_key, 'S', 'Aantal ingelezen regels: ' || TO_CHAR (v_count_import), ''); END IF; END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog ( p_import_key, 'E', v_errormsg || ' - Check scopebedrag - Op lege spaties OF ipv van komma een punt gebruikt OF ..): ' || v_aanduiding, ''); END ykpn_import_contractscope; / CREATE OR REPLACE PROCEDURE ykpn_update_contractscope ( p_import_key IN NUMBER) AS v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (150); currentversion fac_module.fac_module_version%TYPE; v_aanduiding VARCHAR (100); v_count NUMBER; v_totaalbedrag_scope NUMBER (10); v_totaalbedrag_cnt NUMBER (10); -- Cursor met alle contract_keys DISTINCT - Voor de uiteindelijke recount van totaalbedrag op basis nieuwe scope-waarden CURSOR c IS SELECT DISTINCT cnt_contract_key, cnt_nr FROM ykpn_imp_contractscope; -- Cursor met alle plaats_keys te verwijderen - als bedrag =0 CURSOR c_del IS SELECT i.cnt_contract_key, i.cnt_nr, i.cnt_alg_plaats_key, i.scope_gebouwcode FROM ykpn_imp_contractscope i, cnt_contract_plaats cp WHERE i.scope_bedrag = 0 AND i.cnt_contract_key = cp.cnt_contract_key AND i.cnt_alg_plaats_key = cp.cnt_alg_plaats_key; -- Cursor met alle plaats_keys updaten - Reeds bestaand in huidige contract en afwijkende scope-bedrag CURSOR c_update IS SELECT i.cnt_contract_key, i.cnt_nr, i.cnt_alg_plaats_key, i.scope_gebouwcode, i.scope_bedrag, cp.cnt_contract_plaats_gewicht FROM ykpn_imp_contractscope i, cnt_contract_plaats cp WHERE i.scope_bedrag <> 0 AND i.cnt_contract_key = cp.cnt_contract_key AND i.cnt_alg_plaats_key = cp.cnt_alg_plaats_key AND i.scope_bedrag <> cp.cnt_contract_plaats_gewicht; -- Cursor met alle plaats_keys toevoegen - Scope nog niet in contract bekend CURSOR c_toev IS SELECT i.cnt_contract_key, i.cnt_nr, i.cnt_alg_plaats_key, i.scope_gebouwcode, i.scope_bedrag scope_bedrag FROM ykpn_imp_contractscope i WHERE i.scope_bedrag <> 0 AND i.cnt_alg_plaats_key IS NOT NULL AND i.cnt_alg_plaats_key NOT IN (SELECT cp.cnt_alg_plaats_key FROM cnt_contract_plaats cp WHERE cp.cnt_contract_key = i.cnt_contract_key AND cp.cnt_alg_plaats_code = 'G'); BEGIN FOR rec IN c_del LOOP v_aanduiding := 'Contract gewijzigd ' || CHR(10) || 'Gebouw verwijderd: ' || rec.scope_gebouwcode; v_errorhint := 'gebouwcode verwijderen uit contract_scope'; DELETE FROM cnt_contract_plaats WHERE cnt_contract_key = rec.cnt_contract_key AND cnt_alg_plaats_key = rec.cnt_alg_plaats_key AND cnt_alg_plaats_code = 'G'; fac.trackaction ( 'CNTUPD', rec.cnt_contract_key, 3, SYSDATE, v_aanduiding); END LOOP; FOR rec IN c_update LOOP v_aanduiding := 'Contract gewijzigd ' || CHR(10) || 'Scopebedrag op gebouw ' || rec.scope_gebouwcode || ': ' || rec.cnt_contract_plaats_gewicht || ' --> ' || rec.scope_bedrag; v_errorhint := 'scopebedrag aanpassen'; UPDATE cnt_contract_plaats SET cnt_contract_plaats_gewicht = rec.scope_bedrag WHERE cnt_contract_key = rec.cnt_contract_key AND cnt_alg_plaats_key = rec.cnt_alg_plaats_key AND cnt_alg_plaats_code = 'G'; fac.trackaction ( 'CNTUPD', rec.cnt_contract_key, 3, SYSDATE, v_aanduiding); END LOOP; FOR rec IN c_toev LOOP v_aanduiding := 'Contract gewijzigd ' || CHR(10) || 'Gebouw toegevoegd: ' || rec.scope_gebouwcode || ' met bedrag ' || rec.scope_bedrag; v_errorhint := 'gebouw toevoegen'; INSERT INTO cnt_contract_plaats (cnt_contract_key, cnt_alg_plaats_code, cnt_alg_plaats_key, cnt_contract_plaats_gewicht) VALUES (rec.cnt_contract_key, 'G', rec.cnt_alg_plaats_key, rec.scope_bedrag); fac.trackaction ( 'CNTUPD', rec.cnt_contract_key, 3, SYSDATE, v_aanduiding); END LOOP; FOR rec IN c LOOP v_totaalbedrag_scope := 0; v_totaalbedrag_cnt := 0; v_aanduiding := 'Contract gewijzigd ' || CHR(10) || 'Op contract ' || rec.cnt_nr || ' is totaalbedrag aangepast'; v_errorhint := 'Totaalbedrag aanpassen'; BEGIN SELECT SUM (cnt_contract_plaats_gewicht) INTO v_totaalbedrag_scope FROM cnt_contract_plaats cp WHERE cp.cnt_contract_key = rec.cnt_contract_key AND cp.cnt_contract_plaats_verwijder IS NULL; SELECT c.cnt_contract_kosten INTO v_totaalbedrag_cnt FROM cnt_contract c WHERE c.cnt_contract_key = rec.cnt_contract_key; IF v_totaalbedrag_cnt <> v_totaalbedrag_scope THEN UPDATE cnt_contract c SET c.cnt_contract_kosten = v_totaalbedrag_scope, c.cnt_contract_termijnkosten = v_totaalbedrag_scope /12 WHERE c.cnt_contract_key = rec.cnt_contract_key; v_aanduiding := 'Contract gewijzigd ' || CHR(10) || 'Contractbedrag: ' || v_totaalbedrag_cnt || ' --> ' || v_totaalbedrag_scope; fac.trackaction ( 'CNTUPD', rec.cnt_contract_key, 3, SYSDATE, v_aanduiding); END IF; END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg || v_aanduiding, v_errorhint); END ykpn_update_contractscope; / CREATE OR REPLACE PROCEDURE ykpn_select_daily_task (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errorhint := 'Starten daily task'; YKPN.tsk_bevr_contract(p_applname, p_applrun); YKPN.tsk_mail_locman(p_applname, p_applrun); YKPN.tsk_bez_buitmld(p_applname, p_applrun); YKPN.tsk_bez_cleanup(p_applname, p_applrun); YKPN.tsk_cnt_index(p_applname, p_applrun); YKPN.tsk_mld_keuring(p_applname, p_applrun); YKPN.cleanup_room_dep_contracts; -- maak opdrachten aan die volgens autoorder aangemaakt hadden moeten worden -- onder workflowmeldingen. -- YKPN.autoorder; -- YKPN.tsk_mail_retail(p_applname, p_applrun); Rapportages worden nu door PowerBI via API request opgehaald. YKPN.tsk_bes_geleverd(p_applname, p_applrun); YKPN.tsk_mld_thuiswerkwinkel(p_applname, p_applrun); YKPN.tsk_mldbes_approve(p_applname, p_applrun); 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', 'Daily task afgebroken!: ' || v_errormsg, v_errorhint); COMMIT; END; / CREATE OR REPLACE VIEW ykpn_v_rap_cnt_indexatie AS SELECT fac_tracking_datum, cnt_contract_nummer_intern, cnt_contract_omschrijving, prs_bedrijf_naam, fac_tracking_oms FROM fac_tracking t, fac_srtnotificatie sn, cnt_contract c, prs_bedrijf b WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_xmlnode = 'contract' AND fac_tracking_oms LIKE 'Contract geïndexeerd met%' AND t.fac_tracking_refkey = c.cnt_contract_key AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key; CREATE OR REPLACE PROCEDURE YKPN_IMPORT_AFDELING_COSTCENTRE(p_import_key IN NUMBER) AS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE YKPN_UPDATE_AFDELING_COSTCENTRE(p_import_key IN NUMBER) AS CURSOR sel IS SELECT fac_imp_csv_col01 prs_afdeling_key, fac_imp_csv_col02 prs_afdeling_naam, fac_imp_csv_col03 prs_afdeling_omschrijving, fac_imp_csv_col04 prs_kostenplaats_nr from fac_imp_csv where fac_import_key=p_import_key ORDER by fac_imp_csv_index; v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_mes VARCHAR2 (150); oracle_err_num NUMBER; v_aanduiding VARCHAR (100); v_message VARCHAR2 (100); v_afdeling_key NUMBER; v_new_kostenplaats_key NUMBER; v_org_kostenplaats_key NUMBER; BEGIN FOR rec IN sel LOOP IF (rec.prs_afdeling_key ='PRS_AFDELING_KEY' AND rec.prs_afdeling_naam = 'PRS_AFDELING_NAAM' AND rec.prs_afdeling_omschrijving ='PRS_AFDELING_OMSCHRIJVING' AND rec.prs_kostenplaats_nr = 'PRS_KOSTENPLAATS_NR') THEN fac.imp_writelog (p_import_key, 'W', 'Skipping header', ''); ELSE v_afdeling_key:=0; v_new_kostenplaats_key:=0; v_org_kostenplaats_key:=0; IF rec.prs_kostenplaats_nr IS NOT NULL THEN v_aanduiding:='Afdeling: '||rec.prs_afdeling_naam||' niet gevonden of verwijderde afdeling.'; BEGIN IF rec.prs_afdeling_key IS NOT NULL OR LENGTH(rec.prs_afdeling_key)<1 THEN SELECT prs_afdeling_key, prs_kostenplaats_key INTO v_afdeling_key, v_org_kostenplaats_key from prs_afdeling where prs_afdeling_key=rec.prs_afdeling_key and prs_afdeling_verwijder IS NULL; ELSE SELECT prs_afdeling_key, prs_kostenplaats_key INTO v_afdeling_key, v_org_kostenplaats_key from prs_afdeling where prs_afdeling_naam=rec.prs_afdeling_naam and prs_afdeling_verwijder IS NULL; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding, ''); END; BEGIN v_aanduiding:=' Fout bij ophalen kostenplaats :' ||rec.prs_kostenplaats_nr; SELECT prs_kostenplaats_key INTO v_new_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_nr=rec.prs_kostenplaats_nr AND prs_kostenplaats_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog (p_import_key, 'E', v_aanduiding, ''); END; IF v_afdeling_key>0 AND v_new_kostenplaats_key>0 THEN UPDATE prs_afdeling set prs_kostenplaats_key=v_new_kostenplaats_key WHERE prs_afdeling_key=v_afdeling_key; fac.imp_writelog (p_import_key, 'I', 'Afdeling '||rec.prs_afdeling_omschrijving||' is geupdate naar kostenplaats '|| rec.prs_kostenplaats_nr, ''); END IF; ELSE fac.imp_writelog (p_import_key, 'W', 'Kostenplaats veld in afdeling '||rec.prs_afdeling_naam||' is leeg dus slaan we deze over', ''); END IF; END IF; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END; / CREATE OR REPLACE PROCEDURE ykpn_import_organisatie (p_import_key IN NUMBER) AS c_fielddelimitor 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 NUMBER; v_ongeldig NUMBER (1); v_mode NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_dpt_name VARCHAR2 (100); v_dpt_parent_dep_id VARCHAR2 (100); v_dpt_id VARCHAR2 (100); v_dpt_tree VARCHAR2 (100); v_dpt_name_long VARCHAR2 (100); v_dpt_code VARCHAR2 (100); v_budgethouder VARCHAR2 (100); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN COMMIT; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec IN c LOOP BEGIN v_errormsg := 'Fout FETCH te importeren rij'; v_newline := rec.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_name); fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_parent_dep_id); fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_id); fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_tree); fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_name_long); fac.imp_getfield (v_newline, c_fielddelimitor, v_dpt_code); fac.imp_getfield (v_newline, c_fielddelimitor, v_budgethouder); v_aanduiding := v_dpt_id || '|' || v_dpt_name_long || '|' || v_dpt_code || '| '; v_count_tot := v_count_tot + 1; -- Insert geformatteerde import record IF header_is_valid = 0 THEN IF v_dpt_name = 'dpt_name' AND v_dpt_name_long = 'dpt_name_long' AND v_dpt_code = 'dpt_code' THEN header_is_valid := 1; DELETE FROM ykpn_imp_organisatie; ELSE IF rec.fac_imp_file_index = 1 THEN fac.imp_writelog (p_import_key, 'E', 'Geen geldige header aangetroffen', v_dpt_name || '-' || v_dpt_name_long || '-' || v_dpt_code); END IF; END IF; ELSE v_errormsg := 'Fout bij toevoegen te impoteren bedrijf/afdeling [' || v_aanduiding || ']'; INSERT INTO ykpn_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_naam_parent, prs_afdeling_omschrijving, prs_kostenplaats_nr, prs_budgethouder, fac_imp_file_index) VALUES ('KPN', v_dpt_id, v_dpt_parent_dep_id, v_dpt_name_long, v_dpt_code, v_budgethouder, rec.fac_imp_file_index); END IF; END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END ykpn_import_organisatie; / CREATE OR REPLACE PROCEDURE ykpn_update_organisatie (p_import_key IN NUMBER) AS BEGIN NULL; -- update wordt door scheduled taak uitgevoerd. END; / CREATE OR REPLACE PROCEDURE ykpn_import_organisatie_sched (p_import_key IN NUMBER) AS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE ykpn_update_organisatie_sched (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM ykpn_imp_organisatie i ORDER BY fac_imp_file_index; --SELECT i.*, a.prs_afdeling_key --FROM ykpn_imp_organisatie i, prs_afdeling a, prs_kostenplaats k --WHERE i.prs_afdeling_naam = a.prs_afdeling_naam(+) --WHERE i.prs_afdeling_naam = k.prs_kostenplaats_nr(+) --AND a.prs_kostenplaats_key(+)= k.prs_kostenplaats_key --ORDER BY fac_imp_file_index; CURSOR c_del IS SELECT a.prs_afdeling_key, a.prs_afdeling_naam, a.prs_afdeling_omschrijving, k.prs_kostenplaats_key, k.prs_kostenplaats_nr FROM prs_afdeling a, prs_kostenplaats k WHERE a.prs_afdeling_verwijder IS NULL AND a.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND a.prs_afdeling_key <> 1 -- afdeling onbekend AND SUBSTR(a.prs_afdeling_naam,1,1) <> '_' AND a.prs_afdeling_naam NOT IN (SELECT prs_afdeling_naam FROM ykpn_imp_organisatie); v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_mes VARCHAR2 (150); oracle_err_num NUMBER; v_maxvariation NUMBER; currentversion fac_module.fac_module_version%TYPE; v_aanduiding VARCHAR (100); v_message VARCHAR2 (100); v_prs_bedrijf_key NUMBER; v_prs_afd_parent_key NUMBER; v_prs_kostenplaats_key NUMBER; v_prs_afdeling_key NUMBER; v_prs_afd_niveau_parent NUMBER; v_budgethouder_key NUMBER; v_count NUMBER; v_newcount NUMBER; v_oldcount NUMBER; v_impcount NUMBER; BEGIN -- de topelementen mogen geen parent hebben. UPDATE ykpn_imp_organisatie SET prs_afdeling_naam_parent = NULL WHERE prs_afdeling_naam_parent = 62206; FOR rec IN c LOOP v_aanduiding := rec.prs_afdeling_naam; v_errorhint := 'Kijk of bedrijf al bestaat'; -- Bestaat het bedrijf al? BEGIN SELECT prs_bedrijf_key INTO v_prs_bedrijf_key FROM prs_bedrijf WHERE UPPER (prs_bedrijf_naam) = UPPER (rec.prs_bedrijf_naam) AND prs_bedrijf_verwijder IS NULL; BEGIN IF rec.prs_budgethouder IS NOT NULL THEN v_errorhint := 'Zoek de budgethouder van de kostenplaats op: ' || rec.prs_budgethouder; SELECT prs_perslid_key INTO v_budgethouder_key FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = rec.prs_budgethouder; ELSE v_budgethouder_key := NULL; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint || '-' || v_aanduiding); v_budgethouder_key := NULL; END; v_errorhint := 'Kijk of kostenplaats al bestaat'; IF rec.prs_kostenplaats_nr IS NOT NULL THEN BEGIN SELECT prs_kostenplaats_key INTO v_prs_kostenplaats_key FROM prs_kostenplaats WHERE prs_kostenplaats_verwijder IS NULL AND prs_kostenplaats_nr = rec.prs_kostenplaats_nr; UPDATE prs_kostenplaats SET prs_kostenplaats_omschrijving = rec.prs_afdeling_omschrijving, prs_perslid_key = v_budgethouder_key, prs_kostenplaats_eind = NULL WHERE prs_kostenplaats_key = v_prs_kostenplaats_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Nieuwe kostenplaats toevoegen'; INSERT INTO prs_kostenplaats ( prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_kostenplaats_module, prs_perslid_key ) VALUES ( rec.prs_kostenplaats_nr, rec.prs_afdeling_omschrijving, 'PRS', v_budgethouder_key ) RETURNING prs_kostenplaats_key INTO v_prs_kostenplaats_key; END; ELSE v_prs_kostenplaats_key := NULL; END IF; v_errorhint := 'Kijk of parent bestaat'; IF rec.prs_afdeling_naam_parent IS NOT NULL THEN SELECT prs_afdeling_key INTO v_prs_afd_parent_key FROM prs_afdeling WHERE prs_afdeling_verwijder IS NULL AND prs_afdeling_naam = rec.prs_afdeling_naam_parent; ELSE v_prs_afd_parent_key := NULL; END IF; v_errorhint := 'Zoek het niveau van de parent'; IF v_prs_afd_parent_key IS NOT NULL THEN SELECT prs_kenmerklink_waarde INTO v_prs_afd_niveau_parent FROM prs_kenmerklink WHERE prs_kenmerk_key = 2 -- afdelingsniveau AND prs_link_key = v_prs_afd_parent_key; ELSE v_prs_afd_niveau_parent := 0; END IF; v_prs_afd_niveau_parent := v_prs_afd_niveau_parent +1; v_prs_afdeling_key:=-1; -- We gaan eerst de afdeling op zowel kostenplaats als naam opzoeken, SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_prs_afdeling_key FROM prs_afdeling a, prs_kostenplaats k WHERE (k.prs_kostenplaats_nr=rec.prs_kostenplaats_nr AND a.prs_kostenplaats_key=k.prs_kostenplaats_key AND a.prs_afdeling_naam = rec.prs_kostenplaats_nr AND a.prs_afdeling_verwijder IS NULL); -- ALs niet gevonden gaan we hem op basis van de kostenplaats opzoeken IF v_prs_afdeling_key=-1 THEN SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_prs_afdeling_key FROM prs_afdeling a, prs_kostenplaats k WHERE (k.prs_kostenplaats_nr=rec.prs_kostenplaats_nr AND a.prs_kostenplaats_key=k.prs_kostenplaats_key AND a.prs_afdeling_verwijder IS NULL); END IF; -- Indien nog steeds niet gevonden gaan we hem op basis van de afdelingnaam opzoeken (dit is vaak de oude code die IAM niet meer heeft) IF v_prs_afdeling_key=-1 THEN SELECT COALESCE(MAX(prs_afdeling_key),-1) INTO v_prs_afdeling_key FROM prs_afdeling a WHERE a.prs_afdeling_naam = rec.prs_kostenplaats_nr AND a.prs_afdeling_verwijder IS NULL; END IF; IF v_prs_afdeling_key = -1 THEN -- toevoegen afdeling v_errorhint := 'Toevoegen afdeling'||rec.prs_afdeling_naam; INSERT INTO prs_afdeling ( prs_bedrijf_key, prs_afdeling_parentkey, prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_key ) VALUES ( v_prs_bedrijf_key, NULL, rec.prs_afdeling_naam, rec.prs_afdeling_omschrijving, v_prs_kostenplaats_key ) RETURNING prs_afdeling_key INTO v_prs_afdeling_key; ELSE -- aanpassen afdeling v_errorhint := 'Aanpassen afdeling'; UPDATE prs_afdeling SET prs_bedrijf_key = v_prs_bedrijf_key, prs_afdeling_parentkey = NULL, prs_afdeling_naam = rec.prs_afdeling_naam, prs_afdeling_omschrijving = rec.prs_afdeling_omschrijving, prs_kostenplaats_key = v_prs_kostenplaats_key WHERE prs_afdeling_key = v_prs_afdeling_key; -- v_prs_afdeling_key := rec.prs_afdeling_key; END IF; ykpn.set_kenmerk('PRS', 1, v_prs_afdeling_key, v_prs_afd_parent_key, 0); ykpn.set_kenmerk('PRS', 2, v_prs_afdeling_key, v_prs_afd_niveau_parent, 0); EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || SQLCODE || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || '-' || v_aanduiding ); END; END LOOP; -- Legenda's bijwerken voor de thema's /* INSERT INTO cad_legendawaarde (cad_legenda_key, cad_legendawaarde_value, cad_legendawaarde_rgb, cad_legendawaarde_omschr) SELECT DISTINCT 61, -- huurder niveau 4 waarde, TO_CHAR (DBMS_UTILITY.get_hash_value (WAARDE, 0, POWER (2, 24)), '0XXXXX'), waarde FROM ykpn_v_thema_huurder thv WHERE waarde IS NOT NULL AND NOT EXISTS (SELECT cl.cad_legendawaarde_value FROM cad_legendawaarde cl WHERE cl.cad_legendawaarde_value = thv.waarde AND cl.cad_legenda_key = 61); INSERT INTO cad_legendawaarde (cad_legenda_key, cad_legendawaarde_value, cad_legendawaarde_rgb, cad_legendawaarde_omschr) SELECT DISTINCT 141, -- huurder niveau 3 waarde, TO_CHAR (DBMS_UTILITY.get_hash_value (WAARDE, 0, POWER (2, 24)), '0XXXXX'), waarde FROM ykpn_v_thema_huurder3 thv WHERE waarde IS NOT NULL AND NOT EXISTS (SELECT cl.cad_legendawaarde_value FROM cad_legendawaarde cl WHERE cl.cad_legendawaarde_value = thv.waarde AND cl.cad_legenda_key = 141); INSERT INTO cad_legendawaarde (cad_legenda_key, cad_legendawaarde_value, cad_legendawaarde_rgb, cad_legendawaarde_omschr) SELECT DISTINCT 181, -- huurder niveau 2 waarde, TO_CHAR (DBMS_UTILITY.get_hash_value (WAARDE, 0, POWER (2, 24)), '0XXXXX'), waarde FROM ykpn_v_thema_huurder2 thv WHERE waarde IS NOT NULL AND NOT EXISTS (SELECT cl.cad_legendawaarde_value FROM cad_legendawaarde cl WHERE cl.cad_legendawaarde_value = thv.waarde AND cl.cad_legenda_key = 181); */ -- afdelingen verwijderen; FOR rec IN c_del LOOP BEGIN -- Verwijder ruimte afdelingen SELECT COUNT(*) INTO v_count FROM prs_ruimteafdeling ra WHERE ra.prs_afdeling_key = rec.prs_afdeling_key; IF v_count > 0 THEN fac.imp_writelog (p_import_key, 'I', 'Ruimteafdeling bezetting wordt verwijderd (' || v_count || '): ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving, ''); DELETE prs_ruimteafdeling WHERE prs_afdeling_key = rec.prs_afdeling_key; END IF; SELECT MAX (fac_message_code) INTO v_message FROM prs_v_afd_verplichting v WHERE v.PRS_AFDELING_KEY = rec.prs_afdeling_key; IF v_message IS NOT NULL THEN fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet verwijder worden: ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' ## ' || v_message, ''); ELSE UPDATE prs_afdeling a SET prs_afdeling_verwijder = SYSDATE WHERE a.prs_afdeling_key = rec.prs_afdeling_key; BEGIN -- kijk of de bijbehorende kostenplaats nog voorkomt in de import. SELECT count(*) INTO v_count FROM ykpn_imp_organisatie WHERE prs_kostenplaats_nr = rec.prs_kostenplaats_nr; IF v_count = 0 THEN UPDATE prs_kostenplaats SET prs_kostenplaats_eind = SYSDATE WHERE prs_kostenplaats_key = rec.prs_kostenplaats_key; END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'W', 'Kostenplaats kan niet komen te vervallen: ' || rec.prs_kostenplaats_nr || '-' || rec.prs_afdeling_omschrijving || ' ## ' || v_errormsg, ''); END; fac.imp_writelog (p_import_key, 'I', 'Afdeling is verwijderd: ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving, ''); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; IF INSTR (oracle_err_mes, 'm015') > 0 THEN fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet verwijder worden:: ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' ## ' || 'Afdeling bevat personen', ''); ELSIF INSTR (oracle_err_mes, 'PRS_RUIMTEAFDELING-records') > 0 THEN fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet verwijder worden:: ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' ## ' || 'Afdeling is gekoppeld aan ruimte', ''); ELSE fac.imp_writelog (p_import_key, 'E', 'Afdeling kan niet verwijder worden:: ' || rec.prs_afdeling_naam || '-' || rec.prs_afdeling_omschrijving || ' @@ ' || v_errormsg, ''); END IF; END; END LOOP; END ykpn_update_organisatie_sched; / -- Handmatig import die ter vervanging is van de door IAM aangeroepen import aangezien IAM niet meer over de juiste data beschikt (zie YKPN#85953). CREATE OR REPLACE PROCEDURE ykpn_import_organisatie_man (p_import_key IN NUMBER) AS BEGIN ykpn_import_organisatie(p_import_key); END; / CREATE OR REPLACE PROCEDURE ykpn_update_organisatie_man (p_import_key IN NUMBER) AS BEGIN ykpn_update_organisatie_sched(p_import_key); END; / CREATE OR REPLACE PROCEDURE ykpn_import_perslid (p_import_key IN NUMBER) AS CURSOR c IS SELECT (SELECT prs_perslid_nr FROM prs_perslid p WHERE prs_perslid_verwijder IS NULL AND p.prs_perslid_oslogin = UPPER (i.prs_perslid_oslogin)) prs_perslid_nr, prs_perslid_oslogin, COUNT ( * ) FROM fac_imp_perslid i GROUP BY prs_perslid_oslogin HAVING COUNT (prs_perslid_oslogin) > 1; CURSOR org IS SELECT DISTINCT prs_kenmerk8 prs_kostenplaats_nr, prs_kenmerk7 prs_afdeling_omschrijving, prs_kenmerk5 prs_budgethouder FROM fac_imp_perslid WHERE fac_import_key=p_import_key; v_seq_of_columns VARCHAR(255); v_count NUMBER; BEGIN v_count:=0; -- we plaaten de functie in kenmerkx -- de functie wordt tijdelijk gevuld met de key van het record. Puur om een waarde -- erin te hebben staan. UPDATE fac_imp_file SET fac_imp_file_line = REPLACE(fac_imp_file_line, 'NULL') WHERE fac_import_key = p_import_key; v_seq_of_columns := '14;14;0;0;0;0;8;6;5;24;4;17;16;20;0;11;0;9;0;2;1;3;0;0;0;0;1;8;23;24;25;26;21;8;14;0;0;0;0;0;0;0;0;0;0;0'; prs.import_perslid(p_import_key, v_seq_of_columns, 'emp_cbl_number;emp_number;emp_ruis_id;prs_name_initials;prs_name_prefix;prs_name_last;emp_sup_name;emp_dep_code;emp_email;emp_active;emp_phone;emp_mobile;emp_sms_authentication;emp_loc_code;emp_date_termination;prs_name_partner_prefix;prs_name_partner_last;prs_umra_name_prefix;prs_umra_name_last;prs_name_last_pref;emp_dep_name;emp_fnc_code;emp_fnc_name;prs_name_call%'); -- eerst maar opschonen DELETE FROM ykpn_imp_organisatie; -- Gaan we nu de orgnistie structuur opbouwen zonder de relatie tussen de afdelingen, dat zijn we nu dus kwijt. FOR rec_org IN org LOOP v_count:=v_count+1; INSERT INTO ykpn_imp_organisatie (prs_bedrijf_naam, prs_afdeling_naam, prs_afdeling_naam_parent, prs_afdeling_omschrijving, prs_kostenplaats_nr, prs_budgethouder, fac_imp_file_index) VALUES ('KPN', rec_org.prs_kostenplaats_nr, NULL, rec_org.prs_afdeling_omschrijving, rec_org.prs_kostenplaats_nr, rec_org.prs_budgethouder, v_count); END LOOP; -- Maak standaard verdieping aan voor de werkplek INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_code, alg_verdieping_volgnr, alg_verdieping_omschrijving) SELECT alg_gebouw_key, '_', 99, 'Dummy' FROM alg_gebouw g WHERE alg_gebouw_verwijder IS NULL AND NOT EXISTS (SELECT v.alg_gebouw_key FROM alg_verdieping v WHERE v.alg_gebouw_key = g.alg_gebouw_key AND v.alg_verdieping_code = '_'); -- Maak standaard ruimte aan voor de werkplek INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr, alg_srtruimte_key) SELECT v.alg_verdieping_key, '_', 1 FROM alg_verdieping v WHERE alg_verdieping_verwijder IS NULL AND NOT EXISTS (SELECT r.alg_verdieping_key FROM alg_ruimte r WHERE r.alg_verdieping_key = v.alg_verdieping_key AND r.alg_ruimte_nr = '_'); UPDATE fac_imp_perslid SET alg_verdieping_volgnr = '99', alg_ruimte_nr = '_' WHERE alg_locatie_code IS NOT NULL; UPDATE fac_imp_perslid i SET alg_locatie_code = ( SELECT alg_locatie_code FROM alg_v_aanweziglocatie l, alg_v_aanweziggebouw g WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_code = i.alg_gebouw_code); UPDATE fac_imp_perslid SET prs_perslid_nr = TO_CHAR (prs_perslid_nr, 'fm000000') WHERE fac.safe_to_number (prs_perslid_nr) IS NOT NULL; UPDATE fac_imp_perslid SET prs_srtperslid_omschrijving = COALESCE(prs_kenmerk3, 'Extern'); -- Verwijder dubbele records (personen met één login en meerdere personeelsnummers -- Anders krijgen we allemaal onnodige logging FOR rec IN c LOOP DELETE fac_imp_perslid WHERE prs_perslid_oslogin = rec.prs_perslid_oslogin AND prs_perslid_nr <> rec.prs_perslid_nr; END LOOP; -- Mensen zonder werkplek zetten we onder een standaard locatie zodat hierop gezocht kan worden. UPDATE fac_imp_perslid SET alg_locatie_code = '00000', alg_gebouw_code = '00000', alg_verdieping_volgnr = '99', alg_ruimte_nr = '_' WHERE alg_locatie_code IS NULL; -- De afdelingscode uit het persoonsbestand komt overeen met de kostenplaats. Dus zoeken we a.d.h.v. -- de kostenplaats de juiste afdelingscode op. -- YKPN#58764: Er kunnen natuurlijk >1 afdelingen zijn met dezelfde kostenplaats en dan ketst(e) -- deze import met een "Enkele-rij subselect retourneert meer dan één rij". Dit opgelost -- door voortaan de MIN (= alfabetisch 1e) te pakken en geen verwijderde entries meer -- te beschouwen. -- NB. En als >1 afdelingen dezelfde prs_afdeling_naam hebben (wat ook kan), dan lost de -- standaard prs.update_perslid () dit maar op (door een fout te loggen)? /*UPDATE fac_imp_perslid i SET prs_kenmerk2 = prs_afdeling_naam, prs_afdeling_naam =prs_afdeling_naam; (SELECT MIN(k.prs_kostenplaats_nr) --MIN (a.prs_afdeling_naam) FROM prs_afdeling a, prs_v_aanwezigkostenplaats k WHERE a.prs_afdeling_verwijder IS NULL AND a.prs_kostenplaats_key = k.prs_kostenplaats_key AND k.prs_kostenplaats_nr = i.prs_afdeling_naam); */ -- KPN gebruikt een andere codering voor het gebruik van de partnernaam daarom gaan we deze even omzetten -- KPN code 1 eigennaam wordt 0 -- KPN code 2 partnernaam wordt 2 -- KPN code 3 partner - eigen naam wordt 1 -- KPN code 4 eigen - partner naam wordt 3 UPDATE fac_imp_perslid i SET prs_perslid_naamgebruik_code = DECODE(prs_perslid_naamgebruik_code,1,0,2,2,3,1,4,3,0); -- -- KPN retail (winkels) aanpassingen -- -- Pas de werkplek van de winkel accounts aan naar de locatie waar de winkel staat. -- Voor PMF accounts en KPN accounts geldt dat de code op positie 4 t/m 6 in de login voor winkelaccounts overeenkomt met de locatiecode UPDATE fac_imp_perslid SET alg_locatie_code = SUBSTR(prs_perslid_oslogin, 4,3), alg_gebouw_code = '_', alg_verdieping_volgnr = '99', alg_ruimte_nr = '_' WHERE UPPER(prs_perslid_oslogin) LIKE 'PMF%' OR UPPER(prs_perslid_oslogin) LIKE 'KPN%'; -- Voor andere locaies is bij de locatie een kenmerk 'Ruisnaamprefix' (key 1260) aangemaakt. Deze string bevat de prefix van de ruisnamen -- die aan deze locatie gekoppeld moeten worden. UPDATE fac_imp_perslid i SET alg_locatie_code = (SELECT l.alg_locatie_code FROM alg_locatie l, alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = 1260 AND aogk.alg_onrgoed_key = l.alg_locatie_key AND UPPER(i.prs_perslid_oslogin) LIKE UPPER(aogk.alg_onrgoedkenmerk_waarde) || '%'), alg_gebouw_code = '_', alg_verdieping_volgnr = '99', alg_ruimte_nr = '_' WHERE EXISTS ( SELECT ok.alg_onrgoedkenmerk_key FROM alg_onrgoedkenmerk ok WHERE ok.alg_kenmerk_key = 1260 AND UPPER(i.prs_perslid_oslogin) LIKE UPPER(ok.alg_onrgoedkenmerk_waarde) || '%'); -- Zet voor de winkels de voornaam gelijk aan de ruisnaam en de achternaam op de omschrijving van de locatie UPDATE fac_imp_perslid i SET prs_perslid_naam = COALESCE( (SELECT l.alg_locatie_omschrijving FROM alg_locatie l WHERE i.alg_locatie_code = l.alg_locatie_code AND l.alg_locatie_verwijder IS NULL), prs_perslid_naam), prs_perslid_voornaam = LOWER(prs_perslid_oslogin) WHERE EXISTS ( SELECT l.alg_locatie_code FROM alg_v_locatie_gegevens l WHERE i.alg_locatie_code = l.alg_locatie_code AND l.alg_regio_upper = 'RETAIL'); -- Voeg voor alle retaillocaties een afleveradres toe. INSERT INTO mld_adres (mld_adres_naam, alg_locatie_key, mld_adres_afleveradres) SELECT alg_locatie_omschrijving, alg_locatie_key, 1 FROM alg_v_locatie_gegevens lg WHERE alg_regio_key IN (3,21) AND NOT EXISTS (SELECT mld_adres_key FROM mld_adres m WHERE m.alg_locatie_key = lg.alg_locatie_key); UPDATE mld_adres m SET (mld_adres_naam, mld_adres_bezoek_adres, mld_adres_bezoek_postcode, mld_adres_bezoek_plaats) = (SELECT alg_locatie_omschrijving, alg_locatie_adres, alg_locatie_postcode, alg_locatie_plaats FROM alg_locatie l WHERE l.alg_locatie_key = m.alg_locatie_key) WHERE m.mld_adres_afleveradres = 1 AND m.alg_locatie_key IS NOT NULL; END ykpn_import_perslid; / CREATE OR REPLACE PROCEDURE ykpn_update_perslid (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR(255); BEGIN NULL; -- de daadwerkelijke update wordt door een scheduled task (ykpn_update_perslid_sched) in de nacht uitgevoerd. END ykpn_update_perslid; / CREATE OR REPLACE PROCEDURE ykpn_import_perslid_sched (p_import_key IN NUMBER) AS BEGIN NULL; END; / CREATE OR REPLACE PROCEDURE ykpn_update_perslid_sched (p_import_key IN NUMBER) AS CURSOR c_kenmerk IS SELECT p.prs_perslid_key, i.prs_kenmerk5 leidingg, i.prs_kenmerk6 bhv FROM prs_v_aanwezigperslid p, fac_imp_perslid i WHERE p.prs_perslid_nr = i.prs_perslid_nr; CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full, p.prs_perslid_oslogin FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf WHERE p.prs_perslid_nr = i.prs_perslid_nr(+) AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_nr IS NOT NULL AND i.prs_perslid_nr IS NULL AND p.prs_perslid_verwijder IS NULL; -- cursor om het mobiele telefoonnummer van de clustermanager toe te voegen aan de locatie. CURSOR c_upd_retail_mob_clusterm IS SELECT (SELECT prs_perslid_mobiel FROM prs_perslid WHERE prs_perslid_key = fac.safe_to_number (alg_onrgoedkenmerk_waarde)) mob, aog.alg_onrgoed_key FROM alg_onrgoedkenmerk aog WHERE alg_kenmerk_key = 1360; v_perslid_nr PRS_PERSLID.PRS_PERSLID_NR%TYPE; v_leidingg_key NUMBER; v_bhv NUMBER; v_errormsg VARCHAR2 (1000); v_hint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; BEGIN -- gn we eerst de organisatie bijwerken aange\ien de update_oragnisat_ssched niet meer wordt aangeroepen doro IAM. -- Controleer of er wel genoeg mensen in de database staan -- Veilige check is 10000 medewerkers SELECT COUNT(*) INTO v_count FROM fac_imp_perslid; IF v_count > 10000 THEN -- Voordat we gaan importeren gaan we op zoek of we nog mensen moeten verwijderen die niet in de import voorkomen. -- Nu komt het ook regelmatig voor dat mensen een ander personeelsnummer krijgen terwijl ze de login behouden. Deze -- mensen proberen we om te hangen en het personeelsnummer aan te passen. FOR rec IN c_del LOOP BEGIN v_hint := 'Zoek naar bestaande logincode: ' || rec.prs_perslid_nr || '-' || rec.prs_perslid_oslogin; SELECT MIN(prs_perslid_nr) INTO v_perslid_nr FROM fac_imp_perslid i WHERE UPPER(i.prs_perslid_oslogin) = rec.prs_perslid_oslogin AND NOT EXISTS (SELECT prs_perslid_key FROM prs_perslid p WHERE p.prs_perslid_nr = i.prs_perslid_nr); IF v_perslid_nr IS NOT NULL THEN v_hint := 'Pas login van te verwijderen persoon aan: ' || rec.prs_perslid_nr || '->' || v_perslid_nr || '-' || rec.prs_perslid_oslogin; fac.imp_writelog (p_import_key, 'I', 'Te verwijderen persoon op login gevonden: ' || rec.prs_perslid_nr || '->' || v_perslid_nr || '-' || rec.prs_perslid_oslogin, ''); UPDATE prs_perslid p SET prs_perslid_nr = v_perslid_nr WHERE p.prs_perslid_key = rec.prs_perslid_key; ELSE prs.delete_perslid (p_import_key, rec.prs_perslid_key); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_hint); END; END LOOP; prs.update_perslid (p_import_key, 'NR', 'A'); -- Vul de kenmerken bhv en leidinggevende FOR rec IN c_kenmerk LOOP BEGIN v_hint := 'Bepaal de leidinggevende: ' || rec.leidingg; SELECT prs_perslid_key INTO v_leidingg_key FROM prs_v_aanwezigperslid WHERE prs_perslid_nr = rec.leidingg; v_hint := 'Vul het kenmerk leidinggevende: ' || rec.prs_perslid_key || '-' || v_leidingg_key; -- Er is een veld voor de verntw bij de persoon die gaan we ook zetten UPDATE prs_perslid SET prs_perslid_key_verantw=v_leidingg_key WHERE prs_perslid_key=rec.prs_perslid_key AND prs_perslid_verwijder IS NULL; ykpn.set_kenmerk('PRS', 1160, rec.prs_perslid_key, v_leidingg_key, 0); v_hint := 'Vul het kenmerk BHV: ' || rec.prs_perslid_key || '-' || rec.bhv; v_bhv := 0; IF rec.bhv = 'BHV' THEN v_bhv := 1; END IF; ykpn.set_kenmerk('PRS', 1161, rec.prs_perslid_key, v_bhv, 0); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'W', v_errormsg, v_hint); -- Omgezet van Error naar Waarschuwing ivm met groet hoeveelheden notificaties END; END LOOP; -- Iedereen mag op elke kostenplaats boeken. INSERT INTO prs_perslidkostenplaats (prs_perslid_key, prs_perslidkostenplaats_boeken) SELECT prs_perslid_key, 1 FROM prs_perslid p WHERE prs_perslid_verwijder IS NULL AND NOT EXISTS (SELECT prs_perslidkostenplaats_key FROM prs_perslidkostenplaats pk WHERE pk.prs_perslid_key = p.prs_perslid_key); -- Vul het mobiele nummer in als mensen een telefoonnummer hebben dat begint met +316 UPDATE prs_perslid SET prs_perslid_mobiel = prs_perslid_telefoonnr WHERE prs_perslid_telefoonnr LIKE '+316%'; ELSE fac.imp_writelog (p_import_key, 'E', 'Te weinig personen in de database om te verwijderen: ' || v_count, ''); END IF; -- -- KPN Retail (winkels) aanpassingen -- BEGIN -- Verwijdere KPN Retail winkels uit de _Default groep v_hint := 'Verwijder KPN retail uit _Default groep '; DELETE fac_gebruikersgroep WHERE prs_perslid_key IN (SELECT prs_perslid_key FROM prs_v_perslidwerkplek_gegevens wpg, alg_locatie l, alg_district d WHERE wpg.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND wpg.prs_werkplek_virtueel = 0) AND fac_groep_key = 1; -- Verwijder de externe retail gebruikers uit de _Default groep v_hint := 'Verwijder externe retail uit _default groep '; DELETE fac_gebruikersgroep WHERE prs_perslid_key IN (SELECT prs_perslid_key FROM prs_perslid WHERE REGEXP_SUBSTR ( prs_perslid_oslogin, '[[:alpha:]]{2}[[:digit:]]{3}V[[:digit:]]{2}') IS NOT NULL) AND fac_groep_key = 1; -- Voeg KPN retail medewerkers toe aan de autorisatiegroep: KPN Retail Winkel (Key = 301) v_hint := 'Voeg Retail toe aan aut. groep (301)'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT prs_perslid_key, 301 FROM prs_perslid p WHERE p.prs_perslid_key IN (SELECT prs_perslid_key FROM prs_v_perslidwerkplek_gegevens wpg, alg_locatie l, alg_district d WHERE wpg.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND wpg.prs_werkplek_virtueel = 0) AND NOT EXISTS (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = p.prs_perslid_key AND fac_groep_key = 301); -- Vervolgens gaan we de winkels koppelen aan een extra groep voor de verschillende winkels. -- Hierbij maken we onderscheid tussen: -- XL winkels - Deze hebben kenmerk 3 (Formule) die gelinkt is aan eigen tabel met key 241. De key 682 is dan een XL winkel -- 1.0 winkels - Deze hebben kenmerk 4 (Formule aanduiding) die gelinkt is aan eigen tabel met key 242. De key 684 is 1.0 -- 2.0 winkels - Deze hebben kenmerk 4 (Formule aanduiding) die gelinkt is aan eigen tabel met key 242. De key 685 is 2.0 en key 1221 is 2.1 en key 2981 is 2Go -- Autorisatiegroep voor 1.0 is 2041 -- Autorisatiegroep voor 2.0 is 2042 -- Autorisatiegroep voor XL is 2043 -- Autorisatiegroep voor 2Go is 2801 v_hint := 'Koppel winkels aan extra groep'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT prs_perslid_key, fac_groep_key FROM (SELECT prs_perslid_key, DECODE ( ykpn.get_kenmerk ('ALG', 3, l.alg_locatie_key), 'kpn XL winkel', 2043, DECODE ( ykpn.get_kenmerk ('ALG', 4, l.alg_locatie_key), -- '1.0', 2041, '2.0', 2042, '2.1', 2042, '2 Go', 2801)) fac_groep_key FROM prs_v_perslidwerkplek_gegevens wpg, alg_locatie l, alg_district d WHERE wpg.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND wpg.prs_perslid_key IS NOT NULL AND wpg.prs_werkplek_virtueel = 0) p WHERE fac_groep_key IS NOT NULL AND NOT EXISTS (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = p.prs_perslid_key AND fac_groep_key IN (2042, 2043, 2801)); -- Maak voor iedere winkel een autorisatiegroep aan zodat alle accounts per winkel vervangers van elkaar zijn. v_hint := 'Maak auto. groep per winkel'; INSERT INTO fac_groep (fac_groep_omschrijving, fac_groep_collega, fac_groep_opmerking) SELECT DISTINCT '_Retail_' || alg_locatie_code, 1, 'Retail vervangers voor de winkel ' || alg_locatie_code FROM alg_locatie l, alg_district d WHERE l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND NOT EXISTS (SELECT fac_groep_key FROM fac_groep WHERE fac_groep_omschrijving = '_Retail_' || alg_locatie_code); -- Koppel vervolgens de medewerkers aan deze vervangers groep v_hint := 'Koppel medew. aan winkel auto. groep'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT wpg.prs_perslid_key, (SELECT fac_groep_key FROM fac_groep g WHERE fac_groep_omschrijving = '_Retail_' || l.alg_locatie_code) FROM prs_v_perslidwerkplek_gegevens wpg, alg_locatie l, alg_district d WHERE wpg.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND wpg.prs_werkplek_virtueel = 0 AND wpg.prs_perslid_key IS NOT NULL AND NOT EXISTS (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg, fac_groep g WHERE g.fac_groep_key = gg.fac_groep_key AND gg.prs_perslid_key = wpg.prs_perslid_key AND fac_groep_omschrijving = '_Retail_' || l.alg_locatie_code); -- Voeg de clustermanagers toe aan de autorisatiegroep KPN Retail Cluster Manager (key 1561) v_hint := 'Voeg clusterm. toe auto. groep (1561)'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT DISTINCT FAC.safe_to_number(alg_onrgoedkenmerk_waarde), 1561 FROM alg_onrgoedkenmerk aog WHERE aog.alg_kenmerk_key = 1360 -- Cluster manager AND NOT EXISTS (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = FAC.safe_to_number(alg_onrgoedkenmerk_waarde) AND gg.fac_groep_key = 1561); v_hint := 'Verwijder uit auto. groep 1561'; DELETE fac_gebruikersgroep gg WHERE gg.fac_groep_key = 1561 AND NOT EXISTS (SELECT aog.alg_onrgoedkenmerk_key FROM alg_onrgoedkenmerk aog WHERE aog.alg_kenmerk_key = 1360 -- Cluster manager AND gg.prs_perslid_key = FAC.safe_to_number(alg_onrgoedkenmerk_waarde)); -- De gebruikers uit de winkels willen graag MLDUPD notificaties ontvangen via de mail -- De KPN Res (_default) gebruikers willen dat niet. -- MLDUPD is dus te overrullen en hier wordt de juiste instelling bij de personen gemaakt. v_hint := 'Update notificatie voor KPN Res'; UPDATE prs_perslid p SET prs_perslid_srtnoti_mode = 1 -- noti in portal WHERE EXISTS (SELECT prs_perslid_key FROM fac_gebruikersgroep gg WHERE fac_groep_key = 1 -- default AND gg.prs_perslid_key = p.prs_perslid_key); v_hint := 'Update notificatie voor KPN Retail'; UPDATE prs_perslid p SET prs_perslid_srtnoti_mode = 3 -- noti in portal + mail WHERE EXISTS (SELECT prs_perslid_key FROM fac_gebruikersgroep gg WHERE fac_groep_key = 301 -- KPN Retail winkel AND gg.prs_perslid_key = p.prs_perslid_key); -- Voeg KPN retail backoffice medewerkers toe aan de autorisatiegroep: KPN Retail Winkel Backoffice (Key = 1461) -- Dit zijn medewerkers die op de backoffice PC achterin de winkel inloggen. v_hint := 'Voeg KPN Retail BO toe auto. groep (1461)'; INSERT INTO fac_gebruikersgroep (prs_perslid_key, fac_groep_key) SELECT prs_perslid_key, 1461 FROM prs_perslid p WHERE -- De lengte van de digits in de loginnaam = 3 LENGTH(REGEXP_SUBSTR (prs_perslid_oslogin, '[[:digit:]]{3}.*')) = 3 -- En de prefix van de loginnaam is KPN of PMF, in dat geval zijn de drie digits account de bo medewerker -- Of de login eindigt op '600', dit wordt soms voor de XL winkels gebruikt. AND (SUBSTR(prs_perslid_oslogin,1,3) IN ('KPN', 'PMF') OR REGEXP_SUBSTR (prs_perslid_oslogin, '[[:digit:]]{3}.*') = '600') -- We hebben een werkplek onder een Retail regio. AND p.prs_perslid_key IN (SELECT prs_perslid_key FROM prs_v_perslidwerkplek_gegevens wpg, alg_locatie l, alg_district d WHERE wpg.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- KPN Retail AND wpg.prs_werkplek_virtueel = 0) AND NOT EXISTS (SELECT fac_gebruikersgroep_key FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = p.prs_perslid_key AND fac_groep_key = 1461); FOR rec_mob IN c_upd_retail_mob_clusterm LOOP ALG.upsertkenmerk (1440, rec_mob.alg_onrgoed_key, rec_mob.mob); -- mobiel nummer clustermanager END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_hint); END; END ykpn_update_perslid_sched; / CREATE OR REPLACE PROCEDURE ykpn_import_onrgoed2 (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; header_found BOOLEAN; v_newline VARCHAR2 (2000); v_aanduiding VARCHAR2 (1000); -- Import line v_field VARCHAR2 (1000); -- Import field v_fielddelimitor VARCHAR2 (1); -- Field seperator v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_gebouw_code alg_gebouw.alg_gebouw_code%TYPE; v_locatie_code alg_locatie.alg_locatie_code%TYPE; v_verdieping_volgnr alg_verdieping.alg_verdieping_volgnr%TYPE; v_ruimte_nr alg_ruimte.alg_ruimte_nr%TYPE; v_srtruimte_omschrijving alg_srtruimte.alg_srtruimte_omschrijving%TYPE; v_ruimte_omschrijving alg_ruimte.alg_ruimte_omschrijving%TYPE; v_k1940_doorb VARCHAR2 (100); v_k1941_afd VARCHAR2 (100); v_k1942_nvo VARCHAR2 (100); v_k1943_incl VARCHAR2 (100); v_k1044_vvo VARCHAR2 (100); v_dummy VARCHAR2 (100); BEGIN -- Init header_found := FALSE; v_fielddelimitor := ';'; -- Clear my previous imported rows DELETE FROM fac_imp_onrgoed2; FOR rec IN c LOOP BEGIN v_newline := rec.fac_imp_file_line; v_aanduiding := v_newline; IF SUBSTR (v_newline, 1, 3) = '?' THEN -- EF BB BF aangetroffen fac.imp_writelog (p_import_key, 'W', 'Byte Order Mark aangetroffen', 'Bestand heeft onbehandeld UTF-8 formaat.'); v_newline := SUBSTR (v_newline, 4); END IF; -- Skip until a valid header is found IF UPPER (rec.fac_imp_file_line) LIKE 'OBJECTNUMMER;ADRES;VERDIEPING;BOUWDEEL;RUIMTENUMMER;RUIMTE OMSCHRIJVING;RUIMTE TOEPASSING;RUIMTESOORT;AFDELINGSCODE;AFDELINGSNAAM;TYPE LEEGSTAND;NVO;VVO;VVO INCL. TOESLAG ALGEMENE RUIMTEN;VERHUURD #;LEEGSTAND #;GEEN BEHEER/LEEGSTAND #%' THEN -- Sla de kopregel over. header_found := TRUE; ELSIF (header_found AND SUBSTR(v_newline, 1, 1) <> ';') THEN v_errorhint := 'Inlezen velden'; fac.imp_getfield (v_newline, v_fielddelimitor, v_gebouw_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_verdieping_volgnr); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); v_ruimte_nr := SUBSTR(v_dummy, 1, 10); fac.imp_getfield (v_newline, v_fielddelimitor, v_srtruimte_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_ruimte_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_k1940_doorb); fac.imp_getfield (v_newline, v_fielddelimitor, v_k1941_afd); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_dummy); fac.imp_getfield (v_newline, v_fielddelimitor, v_k1942_nvo); fac.imp_getfield (v_newline, v_fielddelimitor, v_k1044_vvo); fac.imp_getfield (v_newline, v_fielddelimitor, v_k1943_incl); v_errorhint := 'Aanpassen gebouwcode'; v_gebouw_code := TO_CHAR(v_gebouw_code, 'FM00000'); v_errorhint := 'Opzoeken locatiecode'; SELECT alg_locatie_code INTO v_locatie_code FROM alg_locatie l, alg_v_aanweziggebouw g WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_code = v_gebouw_code; INSERT INTO fac_imp_onrgoed2 (alg_locatie_code, alg_gebouw_code, alg_verdieping_volgnr, alg_srtruimte_omschrijving, alg_ruimte_nr, alg_ruimte_omschrijving, alg_kenmerkwaarde1, alg_kenmerkwaarde2, alg_kenmerkwaarde3, alg_kenmerkwaarde4, alg_kenmerkwaarde5) VALUES (v_locatie_code, v_gebouw_code, v_verdieping_volgnr, v_srtruimte_omschrijving, v_ruimte_nr, v_ruimte_omschrijving, '1940=' || v_k1940_doorb, '1941=' || v_k1941_afd, '1942=' || REPLACE(REPLACE(v_k1942_nvo, '.'), ',', '.'), '1044=' || REPLACE(REPLACE(v_k1044_vvo, '.'), ',', '.'), '1943=' || REPLACE(REPLACE(v_k1943_incl, '.'), ',', '.')); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_errorhint || ' - ' || v_aanduiding); END; END LOOP; IF NOT header_found THEN fac.imp_writelog (p_import_key, 'E', 'Geen geldige header aangetroffen', 'Bestand is geen geldig toegang importbestand.'); END IF; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', SUBSTR (v_errormsg, 1, 1000), v_aanduiding); END; / CREATE OR REPLACE PROCEDURE ykpn_update_onrgoed2 (p_import_key IN NUMBER) AS CURSOR c IS SELECT alg_key, kenmerk_key, newvalue FROM ( SELECT alg.alg_ruimte_key alg_key, alg.ALG_RUIMTE_NR, 1943 kenmerk_key, -- 1943 = VV0 Incl kenmerk key to_number(knminc.alg_onrgoedkenmerk_waarde,'9999.99') oldValue, fctr.factor, DECODE(INSTR(io.alg_kenmerkwaarde1,'=D'),0,NULL,ROUND((to_number(knm.alg_onrgoedkenmerk_waarde,'9999.99')*fctr.factor),2)) newValue FROM alg_ruimte alg, FAC_IMP_ONRGOED2 io, (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk kenm where kenm.alg_kenmerk_key=1044) knm, -- 1044 = VVO kenmerk key (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk kenm where kenm.alg_kenmerk_key=1943) knminc, -- 1943 = VVO incl kenmerk key (SELECT alg_gebouw_code, (1+(oppTotaal/DECODE(oppKantoor,0,1,oppKantoor))) factor FROM (SELECT i.alg_gebouw_code , (SELECT COALESCE(SUM(TO_NUMBER(SUBSTR(alg_kenmerkwaarde4,6,LENGTH(alg_kenmerkwaarde4)-1),'9999.99')),0) FROM fac_imp_onrgoed2 io1 WHERE alg_kenmerkwaarde1 LIKE ('%=D') AND i.alg_gebouw_code= io1.alg_gebouw_code) oppKantoor, (SELECT COALESCE(SUM(TO_NUMBER(SUBSTR(alg_kenmerkwaarde4,6,LENGTH(alg_kenmerkwaarde4)-1),'9999.99')),0) FROM fac_imp_onrgoed2 io2 WHERE alg_kenmerkwaarde1 NOT LIKE ('%=D') AND i.alg_gebouw_code=io2.alg_gebouw_code) oppTotaal FROM fac_imp_onrgoed2 i GROUP BY i.alg_gebouw_code)) fctr WHERE alg.alg_ruimte_key=io.res_ruimte_nr AND alg.alg_ruimte_key=knm.alg_onrgoed_key(+) AND alg.alg_ruimte_key=knminc.alg_onrgoed_key(+) AND fctr.alg_gebouw_code=io.alg_gebouw_code ) rslt WHERE COALESCE(rslt.oldValue,0) <> rslt.newValue; BEGIN fac_update_onrgoed2 (p_import_key); -- voor de verdere afhandeling is het handig als we de key van de gekoppelde ruimte hebben -- daarom slaan we deze op in het veld res_ruimte_nr UPDATE fac_imp_onrgoed2 i SET res_ruimte_nr = (SELECT alg_ruimte_key FROM alg_v_ruimte_gegevens rg WHERE i.alg_gebouw_code = rg.alg_gebouw_upper AND i.alg_verdieping_volgnr = rg.alg_verdieping_volgnr AND i.alg_ruimte_nr = rg.alg_ruimte_nr); UPDATE alg_ruimte r SET alg_ruimte_omschrijving = COALESCE ((SELECT alg_ruimte_omschrijving FROM fac_imp_onrgoed2 i WHERE i.res_ruimte_nr = r.alg_ruimte_key), r.alg_ruimte_omschrijving), alg_srtruimte_key = COALESCE ( (SELECT alg_srtruimte_key FROM alg_srtruimte sr, fac_imp_onrgoed2 i WHERE UPPER (i.alg_srtruimte_omschrijving) = UPPER (sr.alg_srtruimte_omschrijving) AND sr.alg_srtruimte_verwijder IS NULL AND i.res_ruimte_nr = r.alg_ruimte_key), r.alg_srtruimte_key) WHERE alg_ruimte_key IN (SELECT io.res_ruimte_nr -- Optimalisatie query zodat API request geen timeout geeft FROM FAC_IMP_ONRGOED2 io); FOR rec IN c LOOP BEGIN ALG.upsertkenmerk(rec.kenmerk_key, rec.alg_key, rec.newValue); END; END LOOP; END; / -- Rapport om aan te geven welke ruimten met de afgelopen import zijn toegevoegd, -- welke riumten verwijder mogen worden en welke ruimten onveranderd zijn. CREATE OR REPLACE VIEW ykpn_v_rap_leegstand AS SELECT 'Toegevoegd' status, rg.* FROM alg_ruimte r, alg_v_ruimte_gegevens rg WHERE rg.alg_ruimte_key = r.alg_ruimte_key AND alg_ruimte_aanmaak > (SELECT MAX (fac_import_datum_gelezen) FROM fac_import WHERE fac_import_app_key = 61) -- Leegstandsimport UNION ALL SELECT 'Te verwijderen', rg.* FROM alg_v_ruimte_gegevens rg WHERE NOT EXISTS (SELECT 1 FROM fac_imp_onrgoed2 i WHERE i.alg_gebouw_code = rg.alg_gebouw_upper AND i.alg_verdieping_volgnr = rg.alg_verdieping_volgnr AND i.alg_ruimte_nr = rg.alg_ruimte_nr) AND EXISTS (SELECT 1 FROM fac_imp_onrgoed2 i WHERE i.alg_gebouw_code = rg.alg_gebouw_upper) AND alg_ruimte_nr <> '_' UNION ALL SELECT 'Niet aangepast', rg.* FROM alg_v_ruimte_gegevens rg, alg_ruimte r, fac_imp_onrgoed2 i WHERE r.alg_ruimte_key = rg.alg_ruimte_key AND i.alg_gebouw_code = rg.alg_gebouw_upper AND i.alg_verdieping_volgnr = rg.alg_verdieping_volgnr AND i.alg_ruimte_nr = rg.alg_ruimte_nr AND alg_ruimte_aanmaak < (SELECT MAX (fac_import_datum_gelezen) FROM fac_import WHERE fac_import_app_key = 61); CREATE OR REPLACE PROCEDURE ykpn_import_fac_gebruikersgrp ( p_import_key IN NUMBER) IS v_errormsg VARCHAR (1000); oracle_err_mes VARCHAR2 (200); v_afdeling_key NUMBER; v_count NUMBER; v_niveau NUMBER; CURSOR c IS SELECT * FROM fac_imp_fac_gebruikersgroep WHERE email IS NOT NULL; BEGIN fac_import_fac_gebruikersgroep (p_import_key); FOR rec IN c LOOP BEGIN SELECT prs_afdeling_key INTO v_afdeling_key FROM prs_afdeling WHERE UPPER (prs_afdeling_omschrijving) = UPPER (rec.email) AND prs_afdeling_verwijder IS NULL; SELECT niveau INTO v_niveau FROM ykpn_v_afdeling_boom WHERE prs_afdeling_key = v_afdeling_key; INSERT INTO fac_imp_fac_gebruikersgroep (groep, login) SELECT rec.groep, prs_perslid_oslogin FROM prs_perslid p, ykpn_v_afdeling_boom ab WHERE prs_perslid_verwijder IS NULL AND ( (v_niveau = 1 AND ab.prs_afdeling_key1 = v_afdeling_key) OR (v_niveau = 2 AND ab.prs_afdeling_key2 = v_afdeling_key) OR (v_niveau = 3 AND ab.prs_afdeling_key3 = v_afdeling_key) OR (v_niveau = 4 AND ab.prs_afdeling_key4 = v_afdeling_key) OR (v_niveau = 5 AND ab.prs_afdeling_key5 = v_afdeling_key) OR (v_niveau = 6 AND ab.prs_afdeling_key6 = v_afdeling_key) OR (v_niveau = 7 AND ab.prs_afdeling_key7 = v_afdeling_key) OR (v_niveau = 8 AND ab.prs_afdeling_key8 = v_afdeling_key) OR (v_niveau = 9 AND ab.prs_afdeling_key9 = v_afdeling_key) ) AND p.prs_afdeling_key = ab.prs_afdeling_key AND NOT EXISTS (SELECT login FROM fac_imp_fac_gebruikersgroep gg WHERE UPPER (gg.login) = p.prs_perslid_oslogin AND UPPER (gg.groep) = UPPER (rec.groep)); EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', rec.email, 'Fout bij toevoegen afdeling aan importtabel FAC_IMP_GEBRUIKERSGROEP. ' || v_errormsg); END; END LOOP; DELETE fac_imp_fac_gebruikersgroep WHERE email IS NOT NULL; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces gebruikersgroepen afgebroken!'); END; / CREATE OR REPLACE PROCEDURE ykpn_update_fac_gebruikersgrp (p_import_key IN NUMBER) AS CURSOR c IS SELECT DISTINCT groep FROM fac_imp_fac_gebruikersgroep; v_errormsg VARCHAR (1000); oracle_err_mes VARCHAR2 (200); v_groep_key NUMBER; BEGIN fac_update_fac_gebruikersgroep (p_import_key); -- TODO verwijderen van personen FOR rec IN c LOOP SELECT fac_groep_key INTO v_groep_key FROM fac_groep WHERE UPPER(fac_groep_omschrijving) = UPPER(rec.groep); DELETE fac_gebruikersgroep gg WHERE gg.fac_groep_key = v_groep_key AND NOT EXISTS (SELECT login FROM fac_imp_fac_gebruikersgroep igg, prs_perslid p WHERE UPPER(igg.groep) = UPPER(rec.groep) AND UPPER(igg.login) = p.prs_perslid_oslogin AND gg.prs_perslid_key = p.prs_perslid_key); END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'OTHERS (error ' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Verwerkproces gebruikersgroepen afgebroken!'); END; / CREATE OR REPLACE PROCEDURE ykpn_export_bezoekers_com ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2) AS CURSOR c IS SELECT DECODE (pp.res_rsv_deel_key, NULL, 'De afspraak is geregistreerd', 'De parkeerplaats is geregistreerd') text, 'CUST02' code, (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'CUST02') fac_srtnotificatie_key, b.bez_afspraak_key, b.bez_bezoekers_key, a.bez_afspraak_datum, pp.res_deel_key, b.bez_bezoekers_email xemail, COALESCE (d.alg_gebouw_key, (SELECT alg_onrgoed_key FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoedkenmerk_key = g.alg_onrgoedkenmerk_key)) alg_gebouw_key, COALESCE (d.alg_gebouw_key, (SELECT alg_onrgoed_key FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoedkenmerk_key = pg.alg_onrgoedkenmerk_key)) alg_gebouw_key_pg, COALESCE ( (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoed_key = d.alg_gebouw_key AND alg_kenmerk_key = 1040), (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoedkenmerk_key = g.alg_onrgoedkenmerk_key)) bijlage, COALESCE ( (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoed_key = d.alg_gebouw_key AND alg_kenmerk_key = 2040), (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoedkenmerk_key = pg.alg_onrgoedkenmerk_key)) bijlage_pg FROM bez_afspraak a, bez_bezoekers b, bez_kenmerkwaarde kwp, res_rsv_deel pp, (SELECT rd.res_deel_key, v.alg_gebouw_key FROM res_deel rd, ins_deel id, alg_ruimte r, alg_verdieping v WHERE rd.res_ins_deel_key = id.ins_deel_key AND id.ins_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key) d, ( SELECT g.alg_locatie_key, MAX (alg_onrgoedkenmerk_key) alg_onrgoedkenmerk_key FROM alg_gebouw g, alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1040 AND aogk.alg_onrgoed_key = g.alg_gebouw_key AND aogk.alg_onrgoedkenmerk_verwijder IS NULL GROUP BY alg_locatie_key) g, -- bijlage met routebeschrijving ( SELECT g.alg_locatie_key, MAX (alg_onrgoedkenmerk_key) alg_onrgoedkenmerk_key FROM alg_gebouw g, alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 2040 AND aogk.alg_onrgoed_key = g.alg_gebouw_key AND aogk.alg_onrgoedkenmerk_verwijder IS NULL GROUP BY alg_locatie_key) pg -- bijlage met plattegrond WHERE COALESCE ( (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kwlog WHERE bez_kenmerk_key = 1042 AND kwlog.bez_bezoekers_key = b.bez_bezoekers_key), 'QueQueleQue') <> TO_CHAR (bez_afspraak_datum, 'yyyy-mm-dd hh24:mi:ss') || ';' || COALESCE (pp.res_deel_key, -1) || ';' || b.bez_bezoekers_email AND b.bez_afspraak_key = a.bez_afspraak_key AND b.bez_bezoekers_key = pp.bez_bezoekers_key AND pp.res_deel_key = d.res_deel_key(+) AND b.bez_bezoekers_key = kwp.bez_bezoekers_key AND kwp.bez_kenmerk_key = 1020 -- pincode -- AND pp.res_deel_key IS NOT NULL -- voorlopig alleen parkeerplaatsen. Anders ook outer join bij pp.bez_bezoekerskey toevoegen. AND a.alg_locatie_key = g.alg_locatie_key AND a.alg_locatie_key = pg.alg_locatie_key AND a.bez_afspraak_datum > SYSDATE + 2 / 24; CURSOR cs IS SELECT a.bez_afspraak_key, b.bez_bezoekers_key, b.bez_bezoekers_telefoon mobiel, sn.fac_srtnotificatie_code, sn.fac_srtnotificatie_key, 'Uw parkeerplaatscode op ' || TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yyyy hh24:mi') || '-' || TO_CHAR(a.bez_afspraak_eind, 'hh24:mi') || ' is ' || kwp.bez_kenmerkwaarde_waarde || '#, ' || COALESCE(afw.afw_adres, g.alg_gebouw_naam) || '. Legitimatie verplicht. Afz. KPN RES' text -- EVT extra TRANSLATE om de speciale karakters om te zetten naar standaard karakter -- translate('my ,string@éwith áäèëéòóöôúùüÀÁÄÈÉËÖÚÙÜ .special chars','àáäâèëéêìíïîòóöôúùüûÀÁÄÂÈÉËÊÌÍÏÎÒÓÖÔÚÙÜÛ', 'aaaaeeeeiiiioooouuuuAAAAEEEEIIIIOOOOUUUU') FROM bez_afspraak a, bez_bezoekers b, bez_kenmerkwaarde kwp, -- pincode 1020 fac_srtnotificatie sn, res_rsv_deel rd, res_v_ins_deel d, alg_gebouw g, (SELECT alg_onrgoedkenmerk_waarde afw_adres, alg_onrgoed_key alg_gebouw_key FROM alg_onrgoedkenmerk afw WHERE alg_kenmerk_key = 1180) afw -- afwijkend parkeeradres WHERE sn.fac_srtnotificatie_code = 'CUST03' AND b.bez_afspraak_key = a.bez_afspraak_key AND kwp.bez_bezoekers_key = b.bez_bezoekers_key AND kwp.bez_kenmerk_key = 1020 AND b.bez_bezoekers_key = rd.bez_bezoekers_key AND rd.res_deel_key = d.res_deel_key AND d.alg_gebouw_key = g.alg_gebouw_key AND g.alg_gebouw_key = afw.alg_gebouw_key(+) AND a.bez_afspraak_datum < SYSDATE + 2/24 AND a.bez_afspraak_datum > SYSDATE AND b.bez_bezoekers_telefoon IS NOT NULL -- alleen voor die bezoekers die ook een telefoonnr hebben (YKPN#68883) AND NOT EXISTS (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kws WHERE bez_kenmerk_key = 1043 -- sms verzonden AND kws.bez_bezoekers_key = b.bez_bezoekers_key); -- Verwijder kenmerken die gekopieerd zijn met de herhaal functie CURSOR ckd IS SELECT kw.bez_kenmerkwaarde_key, b.bez_bezoekers_key FROM bez_kenmerkwaarde kw, bez_bezoekers b, bez_afspraak a WHERE TRUNC (bez_kenmerkwaarde_aanmaak) <> TRUNC (a.bez_afspraak_datum) AND bez_kenmerk_key = 1043 -- SMS verzonden op yyyy-mm-dd hh-mi-ss AND kw.bez_bezoekers_key = b.bez_bezoekers_key AND b.bez_afspraak_key = a.bez_afspraak_key AND a.bez_afspraak_datum > SYSDATE; v_bijlagen VARCHAR2(4000); BEGIN FOR rec IN c LOOP -- hebben we meerdere wijzigingen dan is alleen de laatste interessant. DELETE fac_notificatie WHERE fac_srtnotificatie_key = rec.fac_srtnotificatie_key AND fac_notificatie_extrakey = rec.bez_bezoekers_key; v_bijlagen := NULL; IF rec.bijlage IS NOT NULL THEN v_bijlagen := '/ALG/A' || SUBSTR (TO_CHAR (rec.alg_gebouw_key, 'fm0000000'), 1, 4) || '___' || '/A' || rec.alg_gebouw_key || '/1040/' || rec.bijlage; IF rec.bijlage_pg IS NOT NULL THEN v_bijlagen := v_bijlagen || ','; END IF; END IF; IF rec.bijlage_pg IS NOT NULL THEN v_bijlagen := v_bijlagen || '/ALG/A' || SUBSTR (TO_CHAR (rec.alg_gebouw_key_pg, 'fm0000000'), 1, 4) || '___' || '/A' || rec.alg_gebouw_key_pg || '/2040/' || rec.bijlage_pg; END IF; INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_email, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit, fac_notificatie_attachments) VALUES (rec.fac_srtnotificatie_key, 2, -- mail rec.xemail, -- email rec.text, rec.bez_afspraak_key, rec.bez_bezoekers_key, 2, v_bijlagen); YKPN.set_kenmerk('BEZ', 1042, rec.bez_bezoekers_key, TO_CHAR (rec.bez_afspraak_datum, 'yyyy-mm-dd hh24:mi:ss') || ';' || COALESCE (rec.res_deel_key, -1) || ';' || rec.xemail, 0); END LOOP; -- Door bezoekers/afspraken te herhalen worden ook kenmerken gekopieerd. Dit heeft als gevolg dat er dan geen -- SMS meer verzonden wordt. Onderstaande verwijdert gekopieerde kenmerken met daarin het tijdstip dat de SMS verzonden -- is voor kenmerken waarvan de datum niet gelijk is aan de afspraakdatum. FOR rec IN ckd LOOP ykpn.set_kenmerk('BEZ', 1120, rec.bez_bezoekers_key, NULL, 0); -- Geldig ID ykpn.set_kenmerk('BEZ', 1060, rec.bez_bezoekers_key, NULL, 0); -- Nedap ID ykpn.set_kenmerk('BEZ', 1042, rec.bez_bezoekers_key, NULL, 0); -- Nedap Verzonden ykpn.set_kenmerk('BEZ', 1160, rec.bez_bezoekers_key, NULL, 0); -- Kenteken respons ykpn.set_kenmerk('BEZ', 1161, rec.bez_bezoekers_key, NULL, 0); -- Kenteken Verzonden ykpn.set_kenmerk('BEZ', 1043, rec.bez_bezoekers_key, NULL, 0); -- SMS Verzonden END LOOP; -- en nu de SMS berichten versturen FOR rec IN cs LOOP INSERT INTO fac_notificatie (fac_srtnotificatie_key, fac_notificatie_status, fac_notificatie_receiver_phone, fac_notificatie_oms, fac_notificatie_refkey, fac_notificatie_extrakey, fac_notificatie_prioriteit) VALUES (rec.fac_srtnotificatie_key, 4, -- sms rec.mobiel, -- email rec.text, -- text rec.bez_afspraak_key, rec.bez_bezoekers_key, 2); YKPN.set_kenmerk('BEZ', 1043, rec.bez_bezoekers_key, TO_CHAR (SYSDATE, 'yyyy-mm-dd hh24:mi:ss'),0); END LOOP; END; / -- view om zoekresultaten in kaart te brengen YKPN#58692 CREATE OR REPLACE VIEW ykpn_v_rap_searchresult ( fclt_f_datum, fclt_f_persoon, fclt_f_zoekterm, resultaat, fclt_f_keuze_type, keuze_url, keuze_omschrijving ) AS SELECT fac_gui_counter_date datum, prs_perslid_naam_full persoon, fgc.fac_gui_counter_info zoekterm, COALESCE (result.result, 'Geen') resultaat, COALESCE (choice.TYPE, 'Geen') keuze_type, choice.url keuze_url, choice.oms keuze_omschrijving FROM fac_gui_counter fgc, prs_v_perslid_fullnames pf, (SELECT fac_gui_counter_refkey, fac_gui_counter_info url, 'Reserveerbaar artikel' TYPE, res_artikel_omschrijving oms FROM fac_gui_counter fgc, res_artikel ra WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%res_artikel%' AND ra.res_artikel_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, 'key=') + 4) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Reserveerbaar object', res_deel_omschrijving FROM fac_gui_counter fgc, res_deel rd WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%res_deel%' AND rd.res_deel_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, 'key=') + 4) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Melding', std.mld_stdmelding_omschrijving oms FROM fac_gui_counter fgc, mld_stdmelding std WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%stdm%' AND std.mld_stdmelding_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, '=') + 1) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Kennisbank', fac_faq_question oms FROM fac_gui_counter fgc, fac_faq faq WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%faq%' AND fac_faq_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, '=') + 1) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Reserveerbare ruimte', res_ruimte_nr oms FROM fac_gui_counter fgc, res_ruimte WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%res_ruimte%' AND res_ruimte_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, '=') + 1) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Bestelling', ins_discipline_omschrijving FROM fac_gui_counter fgc, bes_discipline WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%bes%' AND ins_discipline_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, 'dis_key=') + 8) )) UNION SELECT fac_gui_counter_refkey, fac_gui_counter_info, 'Telefoonboek', prs_perslid_naam_full FROM fac_gui_counter fgc, prs_v_perslid_fullnames pf WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchchoice' AND fac_gui_counter_info LIKE '%phone%' AND pf.prs_perslid_key(+) = fac.safe_to_number(SUBSTR ( fac_gui_counter_info, (INSTR (fac_gui_counter_info, '=') + 1) ))) choice, (SELECT fac_gui_counter_refkey, REPLACE (REPLACE (fac_gui_counter_info, '{', ''), '}', '') result FROM fac_gui_counter fgc WHERE fac_gui_counter_info IS NOT NULL AND fac_gui_counter_group = 'searchresult') result WHERE fac_gui_counter_group = 'search' AND fgc.fac_gui_counter_info IS NOT NULL AND fgc.prs_perslid_key = pf.prs_perslid_key AND choice.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key AND result.fac_gui_counter_refkey(+) = fgc.fac_gui_counter_key; -- meldt de parkeerplaats twee uur van te voren aan bij Nedap CREATE OR REPLACE VIEW ykpn_v_parkeerplaats_nedap ( naam, pincode, v_van, v_tot, template, countergroup, bez_bezoekers_key ) AS SELECT xml.char_to_html (bez_afspraak_naam), pincode, d_van, v_tot, template, countergroup, bez_bezoekers_key FROM (SELECT b.bez_afspraak_naam, kw_p.bez_kenmerkwaarde_waarde pincode, TO_CHAR (a.bez_afspraak_datum, 'yyyy-mm-dd hh:mi:ss') d_van, TO_CHAR (a.bez_afspraak_eind, 'yyyy-mm-dd hh:mi:ss') v_tot, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1041 AND aogk.alg_onrgoed_key = d.alg_gebouw_key) template, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1042 AND aogk.alg_onrgoed_key = d.alg_gebouw_key) countergroup, b.bez_bezoekers_key FROM bez_bezoekers b, bez_afspraak a, bez_kenmerkwaarde kw_p, res_rsv_deel rrd, res_deel rd, ins_v_deel_gegevens d WHERE b.bez_afspraak_key = a.bez_afspraak_key AND b.bez_bezoekers_key = kw_p.bez_bezoekers_key AND kw_p.bez_kenmerk_key = 1020 -- pincode AND b.bez_bezoekers_key = rrd.bez_bezoekers_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key AND NOT EXISTS (SELECT bez_kenmerkwaarde_key FROM bez_kenmerkwaarde kw WHERE kw.bez_kenmerk_key = 1060 -- Nedap id AND kw.bez_bezoekers_key = b.bez_bezoekers_key) AND bez_afspraak_datum BETWEEN SYSDATE AND SYSDATE + (2 / 24)) WHERE template IS NOT NULL; -- En vul de gegevens bij nedap aan met kenteken info CREATE OR REPLACE VIEW ykpn_v_kenteken_nedap ( kenteken, pincode, bez_bezoekers_key ) AS SELECT REGEXP_REPLACE (UPPER (b.bez_bezoekers_kenteken), '[^A-Z0-9À-Ý]+', '') kenteken, (SELECT kp.bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kp WHERE b.bez_bezoekers_key = kp.bez_bezoekers_key AND kp.bez_kenmerk_key = 1020), -- Pincode b.bez_bezoekers_key FROM bez_bezoekers b, bez_afspraak a, res_rsv_deel rrd, res_deel rd, ins_v_deel_gegevens d, alg_onrgoedkenmerk aogkk WHERE b.bez_afspraak_key = a.bez_afspraak_key AND aogkk.alg_kenmerk_key = 1160 -- kentekenherkenning aanwezig AND aogkk.alg_onrgoed_key = d.alg_gebouw_key AND aogkk.alg_onrgoedkenmerk_waarde = '1' AND b.bez_bezoekers_key = rrd.bez_bezoekers_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key -- We hebben nog geen kenteken gegevens verstuurd AND NOT EXISTS (SELECT bez_kenmerkwaarde_key FROM bez_kenmerkwaarde kw WHERE kw.bez_kenmerk_key = 1160 -- Kenteken response AND kw.bez_bezoekers_key = b.bez_bezoekers_key) -- We hebben al wel een pincode id gestuurd zodat we nu een update met kenteken info kunnen doen. AND EXISTS (SELECT bez_kenmerkwaarde_key FROM bez_kenmerkwaarde kw WHERE kw.bez_kenmerk_key = 1060 -- Pincode response AND kw.bez_bezoekers_key = b.bez_bezoekers_key) -- we sturen de pincode en kenteken informatie 2 uur van te voren. AND bez_afspraak_datum BETWEEN SYSDATE AND SYSDATE + (2 / 24); -- Videoconferencing CREATE OR REPLACE VIEW ykpn_v_vc_gegevens ( res_reservering_key, res_rsv_ruimte_key, res_rsv_ruimte_volgnr, t_van, t_tot, omschrijving, ruimte, contact_naam, contact_telefoon, contact_email, idnummertnf, aantal, vertrouwelijk, vc_id, externe_locatie, sip_ip, ipadres, last_upd, last_sync ) AS SELECT rrr.res_reservering_key, rrr.res_rsv_ruimte_key, rrr.res_rsv_ruimte_volgnr, TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm-dd') || 'T' || TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi:ss') t_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'yyyy-mm-dd') || 'T' || TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi:ss') t_tot, xml.char_to_html (res_rsv_ruimte_omschrijving) omschrijving, rr.res_ruimte_nr ruimte, pf.prs_perslid_naam_friendly contact_naam, p.prs_perslid_telefoonnr contact_telefoon, p.prs_perslid_email contact_email, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoed_key = rar.alg_ruimte_key AND alg_kenmerk_key = 1003) idnummertnf, (SELECT COUNT ( * ) FROM res_rsv_ruimte rrr2 WHERE rrr.res_reservering_key = rrr2.res_reservering_key AND rrr2.res_rsv_ruimte_verwijder IS NULL AND rrr2.res_activiteit_key = 30) -- VC + (SELECT count(*) FROM res_kenmerkwaarde rk, res_kenmerk k, res_rsv_ruimte rrrk WHERE rk.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 5 AND rk.res_rsv_ruimte_key = rrrk.res_rsv_ruimte_key AND rrr.res_reservering_key = rrrk.res_reservering_key AND rrrk.res_rsv_ruimte_verwijder IS NULL) aantal, COALESCE ( (SELECT fac.safe_to_number (res_kenmerkreservering_waarde) FROM res_kenmerkwaarde WHERE res_kenmerk_key = 31 -- vertrouwelijk AND res_kenmerkwaarde_verwijder IS NULL AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key), 0) vertrouwelijk, COALESCE ( (SELECT fac.safe_to_number (res_kenmerkreservering_waarde) FROM res_kenmerkwaarde WHERE res_kenmerk_key = 2 -- vc id AND res_kenmerkwaarde_verwijder IS NULL AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key), 0) vc_id, NULL externe_locatie, NULL sip_ip, NULL ipadres, COALESCE ( (SELECT MAX (fac_tracking_datum) FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_xmlnode = 'reservering' AND fac_tracking_refkey = rrr.res_rsv_ruimte_key AND fac_srtnotificatie_code <> 'CUST01'), SYSDATE - 100) last_upd, COALESCE ( (SELECT MAX (fac_tracking_datum) FROM fac_tracking t, fac_srtnotificatie sn WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_xmlnode = 'reservering' AND fac_tracking_refkey = rrr.res_rsv_ruimte_key AND fac_srtnotificatie_code = 'CUST01'), SYSDATE - 100) last_sync FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr, prs_perslid p, ( SELECT res_ruimte_key, MIN (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar, prs_v_perslid_fullnames pf WHERE rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = 73 AND rrr.res_activiteit_key = 30 AND rrr.res_rsv_ruimte_verwijder IS NULL AND rar.res_ruimte_key = rr.res_ruimte_key AND rrr.res_rsv_ruimte_van > SYSDATE UNION ALL SELECT rrr.res_reservering_key, rrr.res_rsv_ruimte_key, rrr.res_rsv_ruimte_volgnr, TO_CHAR (rrr.res_rsv_ruimte_van, 'yyyy-mm-dd') || 'T' || TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi:ss') t_van, TO_CHAR (rrr.res_rsv_ruimte_tot, 'yyyy-mm-dd') || 'T' || TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi:ss') t_tot, xml.char_to_html (res_rsv_ruimte_omschrijving) omschrijving, rr.res_ruimte_nr ruimte, pf.prs_perslid_naam_friendly contact_naam, p.prs_perslid_telefoonnr contact_telefoon, p.prs_perslid_email contact_email, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoed_key = rar.alg_ruimte_key AND alg_kenmerk_key = 1003) idnummertnf, (SELECT COUNT ( * ) FROM res_rsv_ruimte rrr2 WHERE rrr.res_reservering_key = rrr2.res_reservering_key AND rrr2.res_rsv_ruimte_verwijder IS NULL AND rrr2.res_activiteit_key = 30) -- VC + (SELECT count(*) FROM res_kenmerkwaarde rk, res_kenmerk k, res_rsv_ruimte rrrk WHERE rk.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 5 AND rk.res_rsv_ruimte_key = rrrk.res_rsv_ruimte_key AND rrr.res_reservering_key = rrrk.res_reservering_key AND rrrk.res_rsv_ruimte_verwijder IS NULL) aantal, 0, COALESCE ( (SELECT fac.safe_to_number (res_kenmerkreservering_waarde) FROM res_kenmerkwaarde WHERE res_kenmerk_key = 2 -- vc id AND res_kenmerkwaarde_verwijder IS NULL AND res_rsv_ruimte_key = rrr.res_rsv_ruimte_key), 0) vc_id, locatie externe_locatie, sip_ip, ipadres, NULL, NULL FROM res_rsv_ruimte rrr, res_ruimte_opstelling ro, res_ruimte rr, prs_perslid p, ( SELECT res_ruimte_key, MIN (alg_ruimte_key) alg_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY res_ruimte_key) rar, prs_v_perslid_fullnames pf, (SELECT locatie, sip_ip, ipadres, kl.res_rsv_ruimte_key FROM (SELECT res_kenmerkreservering_waarde locatie, res_rsv_ruimte_key, res_kenmerk_groep groep FROM res_kenmerkwaarde rk, res_kenmerk k WHERE rk.res_kenmerk_key = k.res_kenmerk_key AND res_srtkenmerk_key = 6) kl, (SELECT DECODE (res_kenmerkreservering_waarde, 81, 'IP', 82, 'SIP', NULL) sip_ip, res_rsv_ruimte_key, res_kenmerk_groep groep FROM res_kenmerkwaarde rk, res_kenmerk k WHERE rk.res_kenmerk_key = k.res_kenmerk_key AND res_srtkenmerk_key = 4) ks, (SELECT res_kenmerkreservering_waarde ipadres, res_rsv_ruimte_key, res_kenmerk_groep groep FROM res_kenmerkwaarde rk, res_kenmerk k WHERE rk.res_kenmerk_key = k.res_kenmerk_key AND k.res_srtkenmerk_key = 5) ki WHERE kl.res_rsv_ruimte_key = ks.res_rsv_ruimte_key AND ks.res_rsv_ruimte_key = ki.res_rsv_ruimte_key AND kl.groep = ks.groep AND ks.groep = ki.groep) ext WHERE rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND p.prs_perslid_key = pf.prs_perslid_key AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key AND ro.res_ruimte_key = rr.res_ruimte_key AND rr.res_discipline_key = 73 AND rrr.res_activiteit_key = 30 AND rrr.res_rsv_ruimte_verwijder IS NULL AND rar.res_ruimte_key = rr.res_ruimte_key AND rrr.res_rsv_ruimte_key = ext.res_rsv_ruimte_key AND rrr.res_rsv_ruimte_van > SYSDATE; -- Verwijderde video conferenties. CREATE OR REPLACE VIEW ykpn_v_cancel_vc ( res_reservering_key, vc_id ) AS SELECT r.res_reservering_key, res_kenmerkreservering_waarde FROM res_reservering r, res_rsv_ruimte rrr, res_kenmerkwaarde kw WHERE res_reservering_verwijder IS NOT NULL AND r.res_reservering_key = rrr.res_reservering_key AND rrr.res_activiteit_key = 30 -- video conferentie AND kw.res_kenmerk_key = 2 -- vc_id AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key AND res_rsv_ruimte_van > SYSDATE GROUP BY r.res_reservering_key, res_kenmerkreservering_waarde; -- HUUR / Doorbelasting CREATE OR REPLACE VIEW ykpn_v_ruimtegebruik ( fac_usrdata_omschr, fac_usrdata_key, fac_usrdata_vervaldatum ) AS SELECT fac_usrdata_code || ' (' || fac_usrdata_omschr || ')', fac_usrdata_key, COALESCE (fac_usrdata_verwijder, fac_usrdata_vervaldatum) FROM fac_usrdata WHERE fac_usrtab_key = 21; CREATE OR REPLACE VIEW ykpn_v_huur_gegevens ( alg_gebouw_upper, alg_gebouw_omschrijving, alg_verdieping_code, alg_ruimte_nr, alg_ruimte_omschrijving, alg_srtruimte_omschrijving, alg_ruimte_bruto_vloeropp, huurder, vvo, factor ) AS SELECT alg_gebouw_upper, alg_gebouw_omschrijving, alg_verdieping_code, alg_ruimte_nr, alg_ruimte_omschrijving, alg_srtruimte_omschrijving, alg_ruimte_bruto_vloeropp, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1047) huurder, (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1044) vvo, (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1045) factor FROM alg_v_ruimte_gegevens r; CREATE OR REPLACE VIEW ykpn_v_afd_gegevens ( alg_gebouw_upper, alg_gebouw_omschrijving, alg_verdieping_code, alg_ruimte_nr, alg_ruimte_omschrijving, alg_srtruimte_omschrijving, alg_ruimte_bruto_vloeropp, huurder, vvo, factor, afdeling ) AS SELECT alg_gebouw_upper, alg_gebouw_omschrijving, alg_verdieping_code, alg_ruimte_nr, alg_ruimte_omschrijving, alg_srtruimte_omschrijving, alg_ruimte_bruto_vloeropp, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1047) huurder, (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1044) vvo, (SELECT fac.safe_to_number (alg_onrgoedkenmerk_waarde) FROM alg_onrgoedkenmerk WHERE alg_onrgoed_key = r.alg_ruimte_key AND alg_kenmerk_key = 1045) factor, (SELECT d.prs_afdeling_omschrijving FROM prs_v_afdeling d WHERE d.prs_afdeling_key = ra.prs_afdeling_key) afdeling FROM alg_v_ruimte_gegevens r, prs_ruimteafdeling ra WHERE ra.alg_ruimte_key(+) = r.alg_ruimte_key; CREATE OR REPLACE VIEW ykpn_v_huurder ( prs_afdeling_key4, prs_afdeling_oms4, prs_afdeling_key3, prs_afdeling_oms3, prs_afdeling_key2, prs_afdeling_oms2 ) AS SELECT a4.prs_afdeling_key, a4.prs_afdeling_omschrijving, a3.prs_afdeling_key, a3.prs_afdeling_omschrijving, a2.prs_afdeling_key, a2.prs_afdeling_omschrijving FROM prs_afdeling a4, prs_afdeling a3, prs_afdeling a2, (SELECT COALESCE (a4.prs_afdeling_key, a3.prs_afdeling_key, a2.prs_afdeling_key) afd4, COALESCE (a3.prs_afdeling_key, a2.prs_afdeling_key) afd3, a2.prs_afdeling_key afd2 FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey(+) = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey(+) = a3.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL) ab WHERE a4.prs_afdeling_key = afd4 AND a3.prs_afdeling_key = afd3 AND a2.prs_afdeling_key = afd2; -- Thema op afdelingsniveau 2 CREATE OR REPLACE VIEW ykpn_v_thema_huurder2 ( alg_ruimte_key, waarde ) AS SELECT r.alg_ruimte_key, DECODE(do.aantal, 1, DECODE (COALESCE(rac.aantal,0), 1, h.prs_afdeling_oms2, 0, DECODE(le.aantal, 1, '_[Leegstand]', '_[Niet bekend]'), '_[Meerdere]'), '_[Niet doorbelasten]') FROM prs_ruimteafdeling ra, ykpn_v_huurder h, alg_ruimte r, (SELECT alg_ruimte_key, count(distinct prs_afdeling_oms2) aantal FROM prs_ruimteafdeling ra2, ykpn_v_huurder h2 WHERE ra2.prs_afdeling_key = h2.prs_afdeling_key4 GROUP BY alg_ruimte_key) rac, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1941 -- Leegstand AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = '001' GROUP BY alg_onrgoed_key) le, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1940 -- Doorbelasten AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = 'D' GROUP BY alg_onrgoed_key) do WHERE ra.prs_afdeling_key = h.prs_afdeling_key4(+) AND r.alg_ruimte_key = ra.alg_ruimte_key(+) AND r.alg_ruimte_key = rac.alg_ruimte_key(+) AND r.alg_ruimte_key = le.alg_ruimte_key(+) AND r.alg_ruimte_key = do.alg_ruimte_key(+) UNION ALL SELECT DISTINCT NULL, h.prs_afdeling_oms2 FROM ykpn_v_huurder h WHERE NOT EXISTS (SELECT 1 FROM prs_ruimteafdeling ra WHERE ra.prs_afdeling_key = h.prs_afdeling_key4); -- Thema op afdelingsniveau 3 CREATE OR REPLACE VIEW ykpn_v_thema_huurder3 ( alg_ruimte_key, waarde ) AS SELECT r.alg_ruimte_key, DECODE(do.aantal, 1, DECODE (COALESCE(rac.aantal,0), 1, h.prs_afdeling_oms3, 0, DECODE(le.aantal, 1, '_[Leegstand]', '_[Niet bekend]'), '_[Meerdere]'), '_[Niet doorbelasten]') FROM prs_ruimteafdeling ra, ykpn_v_huurder h, alg_ruimte r, (SELECT alg_ruimte_key, count(distinct prs_afdeling_oms3) aantal FROM prs_ruimteafdeling ra2, ykpn_v_huurder h2 WHERE ra2.prs_afdeling_key = h2.prs_afdeling_key4 GROUP BY alg_ruimte_key) rac, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1941 -- Leegstand AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = '001' GROUP BY alg_onrgoed_key) le, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1940 -- Doorbelasten AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = 'D' GROUP BY alg_onrgoed_key) do WHERE ra.prs_afdeling_key = h.prs_afdeling_key4(+) AND r.alg_ruimte_key = ra.alg_ruimte_key(+) AND r.alg_ruimte_key = rac.alg_ruimte_key(+) AND r.alg_ruimte_key = le.alg_ruimte_key(+) AND r.alg_ruimte_key = do.alg_ruimte_key(+) UNION ALL SELECT DISTINCT NULL, h.prs_afdeling_oms3 FROM ykpn_v_huurder h WHERE NOT EXISTS (SELECT 1 FROM prs_ruimteafdeling ra WHERE ra.prs_afdeling_key = h.prs_afdeling_key4); -- Keys van speciale ruimte types -- 0 Niet bekend (in feite een ongeldige situatie, alle niet leegstandsruimten moeten toegekend zijn aan een afdeling) -- -1 Leegstand -- -2 Niet doorbelasten -- -3 Meerder huurders CREATE OR REPLACE VIEW ykpn_v_thema_huurder ( alg_ruimte_key, waarde, waarde_key ) AS SELECT r.alg_ruimte_key, DECODE(do.aantal, 1, DECODE (COALESCE(rac.aantal,0), 1, a.prs_afdeling_omschrijving, 0, DECODE(le.aantal, 1, '_[Leegstand]', '_[Niet bekend]'), '_[Meerdere]'), '_[Niet doorbelasten]'), DECODE(do.aantal, 1, DECODE (COALESCE(rac.aantal,0), 1, a.prs_afdeling_key, 0, DECODE(le.aantal, 1, -1, 0), -3), -2) FROM prs_ruimteafdeling ra, prs_afdeling a, alg_ruimte r, (SELECT alg_ruimte_key, count(*) aantal FROM prs_ruimteafdeling GROUP BY alg_ruimte_key) rac, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1941 -- Leegstand AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = '001' GROUP BY alg_onrgoed_key) le, (SELECT alg_onrgoed_key alg_ruimte_key, count(*) aantal FROM alg_onrgoedkenmerk aogk WHERE alg_kenmerk_key = 1940 -- Doorbelasten AND alg_onrgoedkenmerk_verwijder IS NULL AND alg_onrgoedkenmerk_waarde = 'D' GROUP BY alg_onrgoed_key) do WHERE ra.prs_afdeling_key = a.prs_afdeling_key(+) AND r.alg_ruimte_key = ra.alg_ruimte_key(+) AND r.alg_ruimte_key = rac.alg_ruimte_key(+) AND r.alg_ruimte_key = le.alg_ruimte_key(+) AND r.alg_ruimte_key = do.alg_ruimte_key(+) UNION ALL SELECT NULL, h.prs_afdeling_oms4, h.prs_afdeling_key4 FROM ykpn_v_huurder h WHERE NOT EXISTS (SELECT 1 -- Huurders die al gekoppeld zijn willen we niet in het lijstje zien -- Uitzondering voor huurders die met meerder huurders een ruimte bezetten -- Die staan namelijk hierboven onder het thema _Meerdere FROM prs_ruimteafdeling ra2, ( SELECT alg_ruimte_key, COUNT (prs_afdeling_key) aantal FROM prs_ruimteafdeling ra GROUP BY alg_ruimte_key) ra3 WHERE ra3.aantal = 1 AND ra3.alg_ruimte_key = ra2.alg_ruimte_key AND ra2.prs_afdeling_key = h.prs_afdeling_key4); CREATE OR REPLACE TRIGGER ykpn_v_thema_huurder_i_iu INSTEAD OF INSERT OR UPDATE ON ykpn_v_thema_huurder BEGIN IF UPDATING -- oude hard weggooien; dus DELETE (lekker opruimen)! THEN IF :new.waarde_key > -1 THEN DELETE FROM prs_ruimteafdeling ra WHERE ra.alg_ruimte_key = :new.alg_ruimte_key AND ra.prs_afdeling_key <> :new.waarde_key; END IF; END IF; DECLARE v_doorbelasting VARCHAR2(100); v_leegstand VARCHAR2(100); BEGIN SELECT kd.alg_onrgoedkenmerk_waarde doorbelasting, kl.alg_onrgoedkenmerk_waarde leegstand INTO v_doorbelasting, v_leegstand FROM alg_ruimte r, (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1940) kd, (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1941) kl WHERE r.alg_ruimte_key = kd.alg_onrgoed_key(+) AND r.alg_ruimte_key = kl.alg_onrgoed_key(+) AND r.alg_ruimte_key = :new.alg_ruimte_key; IF :new.waarde_key > 0 AND v_leegstand <> '001' AND v_doorbelasting = 'D' THEN INSERT INTO prs_ruimteafdeling (alg_ruimte_key, prs_afdeling_key, prs_ruimteafdeling_bezetting) VALUES (:new.alg_ruimte_key, :new.waarde_key, 100); END IF; ykpn.update_ruimte_contract(:new.alg_ruimte_key, :new.waarde_key); EXCEPTION WHEN DUP_VAL_ON_INDEX -- was al aanwezig THEN NULL; END; END; / CREATE OR REPLACE VIEW ykpn_v_thema_leegstand ( alg_ruimte_key, waarde ) AS SELECT r.alg_ruimte_key, DECODE(alg_onrgoedkenmerk_waarde, '001', 'Leegstand', 'Bezet') FROM alg_ruimte r, (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1941) kl WHERE r.alg_ruimte_key = kl.alg_onrgoed_key(+); CREATE OR REPLACE VIEW ykpn_v_thema_doorbelast ( alg_ruimte_key, waarde ) AS SELECT r.alg_ruimte_key, alg_onrgoedkenmerk_waarde FROM alg_ruimte r, (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk WHERE alg_kenmerk_key = 1940) kd WHERE r.alg_ruimte_key = kd.alg_onrgoed_key(+); -- Rapportage om inzicht te krijgen welke ruimten bezet zijn door vervallen afdelingen. CREATE OR REPLACE VIEW ykpn_v_rap_afd_bezetting_fout AS SELECT prs_afdeling_naam, prs_afdeling_omschrijving, alg_ruimte_aanduiding, alg_locatie_omschrijving, alg_locatie_key FROM prs_ruimteafdeling ra, prs_afdeling a, alg_v_ruimte_gegevens rg WHERE a.prs_afdeling_key IN (SELECT prs_afdeling_key FROM prs_afdeling a2 WHERE a2.prs_afdeling_verwijder IS NULL AND NOT EXISTS (SELECT prs_afdeling_naam FROM ykpn_imp_organisatie i WHERE i.prs_afdeling_naam = a2.prs_afdeling_naam)) AND ra.prs_afdeling_key = a.prs_afdeling_key AND ra.alg_ruimte_key = rg.alg_ruimte_key; -- rapport om QR code per ruimte(soort) te printen. CREATE OR REPLACE VIEW ykpn_v_rap_ruimte_qr AS SELECT user omgeving, alg_locatie_omschrijving, ud.fac_usrdata_omschr, alg_ruimte_nr, b.fac_bookmark_id, b.fac_bookmark_path, fac_bookmark_query, r.alg_ruimte_key FROM fac_bookmark b, alg_v_ruimte_gegevens r, alg_onrgoedkenmerk aogk, fac_usrdata ud WHERE r.alg_ruimte_key = aogk.alg_onrgoed_key AND aogk.alg_kenmerk_key = 1064 -- Ruimtegebruik AND fac.safe_to_number(aogk.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key AND ud.fac_usrdata_code = b.fac_bookmark_id; CREATE OR REPLACE VIEW ykpn_v_thema_ruimtegebruik ( alg_ruimte_key, waarde, waarde_key ) AS SELECT r.alg_ruimte_key, fac_usrdata_omschr, fac_usrdata_key FROM alg_ruimte r, (SELECT alg_onrgoed_key, fac_usrdata_omschr, fac_usrdata_key FROM alg_onrgoedkenmerk, fac_usrdata WHERE alg_kenmerk_key = 1064 AND alg_onrgoedkenmerk_verwijder IS NULL AND FAC.safe_to_number(alg_onrgoedkenmerk_waarde) = fac_usrdata_key) aogk -- Ruimtegebruik WHERE r.alg_ruimte_key = aogk.alg_onrgoed_key(+) UNION ALL SELECT NULL, fac_usrdata_omschr, fac_usrdata_key FROM fac_usrdata WHERE fac_usrtab_key = 21 AND fac_usrdata_verwijder IS NULL AND NOT EXISTS (SELECT 1 FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = 1064 AND aogk.alg_onrgoedkenmerk_verwijder IS NULL AND FAC.safe_to_number(alg_onrgoedkenmerk_waarde) = fac_usrdata_key); CREATE OR REPLACE TRIGGER ykpn_v_thema_ruimtegebr_i_iu INSTEAD OF INSERT OR UPDATE ON ykpn_v_thema_ruimtegebruik BEGIN IF UPDATING -- oude hard weggooien; dus DELETE (lekker opruimen)! THEN IF :new.waarde_key > -1 THEN DELETE FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoed_key = :new.alg_ruimte_key AND aogk.alg_kenmerk_key = 1064; END IF; END IF; BEGIN ALG.upsertkenmerk (1064, :new.alg_ruimte_key, :new.waarde_key); EXCEPTION WHEN DUP_VAL_ON_INDEX -- was al aanwezig THEN NULL; END; END; / -- afdelingsboom views. KPN heeft te veel afdelingsniveaus. Daarom maar een platte structuur met een -- view om de boom op te stellen. CREATE OR REPLACE VIEW ykpn_v_afdeling ( prs_bedrijf_key, prs_afdeling_key, prs_afdeling_parentkey ) AS SELECT a.prs_bedrijf_key, a.prs_afdeling_key, kl.prs_afdeling_parentkey FROM prs_afdeling a, (SELECT prs_link_key prs_afdeling_key, prs_kenmerklink_waarde prs_afdeling_parentkey FROM prs_kenmerklink WHERE prs_kenmerk_key = 1) kl WHERE a.prs_afdeling_key = kl.prs_afdeling_key(+); CREATE OR REPLACE VIEW ykpn_v_afdeling_boom ( niveau, prs_bedrijf_key, prs_afdeling_key, prs_afdeling_key1, prs_afdeling_key2, prs_afdeling_key3, prs_afdeling_key4, prs_afdeling_key5, prs_afdeling_key6, prs_afdeling_key7, prs_afdeling_key8, prs_afdeling_key9, prs_afdeling_key10, prs_afdeling_key11 ) AS SELECT '1' niveau, a1.prs_bedrijf_key, a1.prs_afdeling_key, a1.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1 WHERE a1.prs_afdeling_parentkey IS NULL UNION SELECT '2' niveau, a1.prs_bedrijf_key, a2.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '3' niveau, a1.prs_bedrijf_key, a3.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '4' niveau, a1.prs_bedrijf_key, a4.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '5' niveau, a1.prs_bedrijf_key, a5.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '6' niveau, a1.prs_bedrijf_key, a6.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '7' niveau, a1.prs_bedrijf_key, a7.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, a7.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6, ykpn_v_afdeling a7 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '8' niveau, a1.prs_bedrijf_key, a8.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, a7.prs_afdeling_key, a8.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6, ykpn_v_afdeling a7, ykpn_v_afdeling a8 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '9' niveau, a1.prs_bedrijf_key, a9.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, a7.prs_afdeling_key, a8.prs_afdeling_key, a9.prs_afdeling_key, TO_NUMBER (NULL), TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6, ykpn_v_afdeling a7, ykpn_v_afdeling a8, ykpn_v_afdeling a9 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key AND a9.prs_afdeling_parentkey = a8.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '10' niveau, a1.prs_bedrijf_key, a10.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, a7.prs_afdeling_key, a8.prs_afdeling_key, a9.prs_afdeling_key, a10.prs_afdeling_key, TO_NUMBER (NULL) FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6, ykpn_v_afdeling a7, ykpn_v_afdeling a8, ykpn_v_afdeling a9, ykpn_v_afdeling a10 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key AND a9.prs_afdeling_parentkey = a8.prs_afdeling_key AND a10.prs_afdeling_parentkey = a9.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL UNION SELECT '11' niveau, a1.prs_bedrijf_key, a10.prs_afdeling_key, a1.prs_afdeling_key, a2.prs_afdeling_key, a3.prs_afdeling_key, a4.prs_afdeling_key, a5.prs_afdeling_key, a6.prs_afdeling_key, a7.prs_afdeling_key, a8.prs_afdeling_key, a9.prs_afdeling_key, a10.prs_afdeling_key, a11.prs_afdeling_key FROM ykpn_v_afdeling a1, ykpn_v_afdeling a2, ykpn_v_afdeling a3, ykpn_v_afdeling a4, ykpn_v_afdeling a5, ykpn_v_afdeling a6, ykpn_v_afdeling a7, ykpn_v_afdeling a8, ykpn_v_afdeling a9, ykpn_v_afdeling a10, ykpn_v_afdeling a11 WHERE a2.prs_afdeling_parentkey = a1.prs_afdeling_key AND a3.prs_afdeling_parentkey = a2.prs_afdeling_key AND a4.prs_afdeling_parentkey = a3.prs_afdeling_key AND a5.prs_afdeling_parentkey = a4.prs_afdeling_key AND a6.prs_afdeling_parentkey = a5.prs_afdeling_key AND a7.prs_afdeling_parentkey = a6.prs_afdeling_key AND a8.prs_afdeling_parentkey = a7.prs_afdeling_key AND a9.prs_afdeling_parentkey = a8.prs_afdeling_key AND a10.prs_afdeling_parentkey = a9.prs_afdeling_key AND a11.prs_afdeling_parentkey = a10.prs_afdeling_key AND a1.prs_afdeling_parentkey IS NULL; -- rapport om communicatie met Nedap opgeslagen in kenmerken inzichtelijk te maken. CREATE OR REPLACE VIEW ykpn_v_rap_bez_kenmerk ( bez_afspraak_key, bez_afspraak_naam, bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerk_omschrijving ) AS SELECT bez_afspraak_key, bez_afspraak_naam, bez_kenmerkwaarde_waarde, bez_kenmerkwaarde_aanmaak, bez_kenmerk_omschrijving FROM bez_kenmerkwaarde kw, bez_kenmerk k, bez_bezoekers b WHERE k.bez_kenmerk_key = kw.bez_kenmerk_key AND kw.bez_bezoekers_key = b.bez_bezoekers_key; CREATE OR REPLACE VIEW ykpn_v_rap_park_nedap_status AS SELECT alg_locatie_omschrijving, bez_afspraak_datum, l.alg_locatie_key, bez_afspraak_gastheer, bez_afspraak_naam, bez_afspraak_bedrijf, (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kw WHERE kw.bez_bezoekers_key = b.bez_bezoekers_key AND bez_kenmerk_key = 1220) lastseen, (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kw WHERE kw.bez_bezoekers_key = b.bez_bezoekers_key AND bez_kenmerk_key = 1080) kenteken_oud, b.bez_bezoekers_kenteken kenteken_nieuw FROM bez_bezoekers b, bez_afspraak a, alg_locatie l, res_rsv_deel rrd WHERE a.alg_locatie_key = l.alg_locatie_key AND b.bez_afspraak_key = a.bez_afspraak_key AND b.bez_bezoekers_key = rrd.bez_bezoekers_key; -- fiatteringsoverzicht inclusief afdeling. CREATE OR REPLACE VIEW ykpn_v_fiat_huisvesting ( mld_opdr_key, vervanger_key, aanvraagnummer, datum, prs_perslid_naam_full, afdeling, afdeling2, kostenplaats_nr, kostenplaats_oms, bedrag, module, TYPE, fiatstatus, request_key, statuskey, categorie, fiatteur, locatie, actie ) AS SELECT op.mld_opdr_key, c.vervanger, sd.ins_srtdiscipline_prefix || op.mld_melding_key || '/' || op.mld_opdr_bedrijfopdr_volgnr aanvraagnummer, mld_opdr_datumbegin datum, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving, a2.prs_afdeling_omschrijving prs_afdeling_omschrijving2, km.prs_kostenplaats_nr, km.prs_kostenplaats_omschrijving, mld_opdr_kosten bedrag, 'MLD' module, mld_typeopdr_omschrijving TYPE, 'open' fiatstatus, op.mld_opdr_key request_key, op.mld_statusopdr_key statuskey, td.ins_discipline_omschrijving categorie, p2.prs_perslid_naam_full fiatteur, CASE WHEN l.alg_locatie_key IS NULL THEN NULL ELSE l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' END locatie, (SELECT SUBSTR ( on1.mld_opdr_note_omschrijving, 2, DECODE (INSTR (on1.mld_opdr_note_omschrijving, ' '), 0, 15, INSTR (on1.mld_opdr_note_omschrijving, ' ') - 2)) FROM mld_opdr_note on1 WHERE SUBSTR (mld_opdr_note_omschrijving, 1, 1) = '#' AND on1.mld_opdr_key = op.mld_opdr_key AND NOT EXISTS (SELECT mld_opdr_note_key FROM mld_opdr_note on2 WHERE on1.mld_opdr_key = on2.mld_opdr_key AND SUBSTR (on2.mld_opdr_note_omschrijving, 1, 1) = '#' AND on2.mld_opdr_note_key > on1.mld_opdr_note_key)) actie FROM mld_melding m, mld_stdmelding sm, mld_opdr op, mld_typeopdr ot, prs_v_perslid_fullnames_all pf, ykpn_v_afdeling_boom b, prs_afdeling a, prs_afdeling a2, prs_perslid p, prs_kostenplaats km, prs_kostenplaats k, ins_tab_discipline td, ins_srtdiscipline sd, fac_tracking ft, fac_srtnotificatie fno, ( SELECT kg.prs_perslid_key, k2.prs_kostenplaats_key FROM prs_kostenplaats k2, prs_kostenplaatsgrp kg WHERE kg.prs_kostenplaatsgrp_key = k2.prs_kostenplaatsgrp_key AND kg.prs_perslid_key IN (3) GROUP BY kg.prs_perslid_key, k2.prs_kostenplaats_key) ver, prs_v_perslid_fullnames_all p2, alg_locatie l, (SELECT prs_perslid_key fiatteur, prs_perslid_key vervanger FROM prs_perslid UNION ALL SELECT prs_perslid_key, prs_perslid_key_alt FROM prs_collega) c WHERE op.mld_melding_key = m.mld_melding_key AND m.prs_kostenplaats_key = km.prs_kostenplaats_key(+) AND op.mld_typeopdr_key = ot.mld_typeopdr_key AND COALESCE (op.prs_kostenplaats_key, m.prs_kostenplaats_key) = k.prs_kostenplaats_key AND k.prs_kostenplaats_key = ver.prs_kostenplaats_key(+) AND pf.prs_perslid_key = m.prs_perslid_key AND ft.fac_tracking_refkey = op.mld_opdr_key AND ft.fac_srtnotificatie_key = fno.fac_srtnotificatie_key AND op.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 sd.ins_srtdiscipline_key = td.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND fno.fac_srtnotificatie_code = 'ORDFIA' AND op.mld_statusopdr_key = 3 AND c.fiatteur = p2.prs_perslid_key AND p2.prs_perslid_key = p.prs_perslid_key AND p.prs_afdeling_key = b.prs_afdeling_key AND b.prs_afdeling_key = a.prs_afdeling_key AND b.prs_afdeling_key2 = a2.prs_afdeling_key AND p2.prs_perslid_key = CASE WHEN NOT EXISTS (SELECT prs_perslid_key FROM fac_tracking t, fac_srtnotificatie st WHERE t.fac_srtnotificatie_key = st.fac_srtnotificatie_key AND st.fac_srtnotificatie_code = 'ORDFOK' AND fac_tracking_refkey = op.mld_opdr_key) THEN prs.getkpverantwoordelijke (op.prs_kostenplaats_key, 1, -1) ELSE ver.prs_perslid_key END; -- Opdrachten op naam van intern bedrijf KPN boordeling Res (42702) worden goedgekeurd -- door ASA (Anita, Ada en Suzanne) CREATE OR REPLACE VIEW ykpn_v_beoord_huisvesting ( mld_opdr_key, aanvraagnummer, datum, prs_perslid_naam_full, afdeling, afdeling2, kostenplaats_nr, kostenplaats_oms, bedrag, TYPE, status, categorie, locatie, actie ) AS SELECT op.mld_opdr_key, sd.ins_srtdiscipline_prefix || op.mld_melding_key || '/' || op.mld_opdr_bedrijfopdr_volgnr aanvraagnummer, mld_opdr_datumbegin datum, pf.prs_perslid_naam_full, a.prs_afdeling_omschrijving, a2.prs_afdeling_omschrijving prs_afdeling_omschrijving2, k.prs_kostenplaats_nr, k.prs_kostenplaats_omschrijving, mld_opdr_kosten bedrag, mld_typeopdr_omschrijving TYPE, so.mld_statusopdr_omschrijving, td.ins_discipline_omschrijving categorie, CASE WHEN l.alg_locatie_key IS NULL THEN NULL ELSE l.alg_locatie_omschrijving || ' (' || l.alg_locatie_code || ')' END locatie, (SELECT SUBSTR ( on1.mld_opdr_note_omschrijving, 2, DECODE (INSTR (on1.mld_opdr_note_omschrijving, ' '), 0, 15, INSTR (on1.mld_opdr_note_omschrijving, ' ') - 2)) FROM mld_opdr_note on1 WHERE SUBSTR (mld_opdr_note_omschrijving, 1, 1) = '#' AND on1.mld_opdr_key = op.mld_opdr_key AND NOT EXISTS (SELECT mld_opdr_note_key FROM mld_opdr_note on2 WHERE on1.mld_opdr_key = on2.mld_opdr_key AND SUBSTR (on2.mld_opdr_note_omschrijving, 1, 1) = '#' AND on2.mld_opdr_note_key > on1.mld_opdr_note_key)) actie FROM mld_melding m, mld_stdmelding sm, mld_opdr op, mld_typeopdr ot, prs_v_perslid_fullnames_all pf, ykpn_v_afdeling_boom b, prs_perslid p, prs_afdeling a, prs_afdeling a2, prs_kostenplaats k, ins_tab_discipline td, ins_srtdiscipline sd, alg_locatie l, mld_statusopdr so WHERE op.mld_melding_key = m.mld_melding_key AND op.mld_typeopdr_key = ot.mld_typeopdr_key AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND pf.prs_perslid_key = m.prs_perslid_key AND p.prs_perslid_key = m.prs_perslid_key AND op.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 sd.ins_srtdiscipline_key = td.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND op.mld_statusopdr_key IN (5, 8) AND b.prs_afdeling_key = a.prs_afdeling_key AND b.prs_afdeling_key2 = a2.prs_afdeling_key AND p.prs_afdeling_key = b.prs_afdeling_key AND op.mld_statusopdr_key = so.mld_statusopdr_key AND op.mld_uitvoerende_keys = 42702; CREATE OR REPLACE VIEW ykpn_v_gebouw_parkeer_info AS SELECT alg_gebouw_code, alg_gebouw_naam, alg_gebouw_key, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = 1140 AND aogk.alg_onrgoed_key = g.alg_gebouw_key) betaald, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = 1141 AND aogk.alg_onrgoed_key = g.alg_gebouw_key) gratis, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = 1142 AND aogk.alg_onrgoed_key = g.alg_gebouw_key) opmerking FROM alg_gebouw g WHERE alg_gebouw_verwijder IS NULL AND EXISTS (SELECT alg_onrgoedkenmerk_key FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key IN (1140, 1141, 1142) AND aogk.alg_onrgoed_key = g.alg_gebouw_key AND aogk.alg_onrgoedkenmerk_verwijder IS NULL); -- Rapport om misbruik van parkeerplaatsen op eigen locatie te rapporteren. CREATE OR REPLACE VIEW ykpn_v_rap_pp_eigen_gebruik ( gebouw, actie, aangemeld_door, bezoeker, bedrijf, email_bezoeker, afspraak_datum ) AS SELECT d.alg_gebouw_upper, ba.bez_actie_omschrijving, pf.prs_perslid_naam_full, bez_afspraak_naam, bez_afspraak_bedrijf, LOWER (prs_perslid_email), bez_afspraak_datum FROM bez_afspraak a, bez_actie ba, bez_bezoekers b, res_rsv_deel rrd, res_v_aanwezigdeel rd, ins_v_deel_gegevens d, prs_perslid p, prs_v_perslid_fullnames pf, prs_v_werkplekperslid_gegevens pwp WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.bez_actie_key = ba.bez_actie_key AND b.bez_bezoekers_key = rrd.bez_bezoekers_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_ins_deel_key = d.ins_deel_key AND UPPER (b.bez_bezoekers_email) = UPPER (p.prs_perslid_email) AND p.prs_perslid_key = pwp.prs_perslid_key AND pwp.alg_locatie_key = d.alg_locatie_key AND TRUNC (bez_afspraak_datum, 'mm') = ADD_MONTHS (TRUNC (SYSDATE, 'mm'), -1) AND p.prs_perslid_key = pf.prs_perslid_key; CREATE OR REPLACE VIEW ykpn_v_rap_parkeerpl_telling AS SELECT pg.*, ROUND((medewerkers / g_medewerkers) * 100) p_medewerkers, ROUND((bezoek / g_bezoek) * 100) p_bezoek, ROUND((miva / g_miva) * 100) p_miva, ROUND((leverancier / g_leverancier) * 100) p_leverancier, ROUND((oplaadpunt / g_oplaadpunt) * 100) p_oplaadpunt, ROUND((rvb / g_rvb) * 100) p_rvb, ROUND((slagboom / g_slagboom) * 100) p_slagboom, ROUND((rondom / g_rondom) * 100) p_rondom, ROUND((illegaal / g_illegaal) * 100) p_illegaal, ROUND((loods / g_loods) * 100) p_loods FROM ( SELECT mld_melding_key, og.alg_gebouw_code, og.alg_gebouw_naam, FAC.safe_to_date((SELECT km.mld_kenmerkmelding_waarde FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 581 AND km.mld_melding_key = m.mld_melding_key), 'dd-mm-yyyy') datum, (SELECT ud.fac_usrdata_omschr FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata ud WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 601 AND km.mld_melding_key = m.mld_melding_key AND fac.safe_to_number (mld_kenmerkmelding_waarde) = ud.fac_usrdata_key) tijdstip, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 621 AND km.mld_melding_key = m.mld_melding_key)) medewerkers, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 622 AND km.mld_melding_key = m.mld_melding_key)) bezoek, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 623 AND km.mld_melding_key = m.mld_melding_key)) miva, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 624 AND km.mld_melding_key = m.mld_melding_key)) leverancier, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 626 AND km.mld_melding_key = m.mld_melding_key)) oplaadpunt, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 630 AND km.mld_melding_key = m.mld_melding_key)) rvb, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 627 AND km.mld_melding_key = m.mld_melding_key)) slagboom, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 628 AND km.mld_melding_key = m.mld_melding_key)) rondom, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 629 AND km.mld_melding_key = m.mld_melding_key)) illegaal, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 0 AND mld_srtkenmerk_key = 625 AND km.mld_melding_key = m.mld_melding_key)) loods, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 621 AND km.mld_melding_key = m.mld_melding_key)) g_medewerkers, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 622 AND km.mld_melding_key = m.mld_melding_key)) g_bezoek, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 623 AND km.mld_melding_key = m.mld_melding_key)) g_miva, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 624 AND km.mld_melding_key = m.mld_melding_key)) g_leverancier, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 626 AND km.mld_melding_key = m.mld_melding_key)) g_oplaadpunt, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 630 AND km.mld_melding_key = m.mld_melding_key)) g_rvb, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 627 AND km.mld_melding_key = m.mld_melding_key)) g_slagboom, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 628 AND km.mld_melding_key = m.mld_melding_key)) g_rondom, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 629 AND km.mld_melding_key = m.mld_melding_key)) g_illegaal, FAC.safe_to_number((SELECT DECODE(km.mld_kenmerkmelding_waarde, 0, NULL, km.mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerk_groep = 1 AND mld_srtkenmerk_key = 625 AND km.mld_melding_key = m.mld_melding_key)) g_loods FROM mld_melding m, alg_v_onroerendgoed_gegevens og WHERE mld_stdmelding_key = 481 -- parkeerplaatstellingen AND mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys) pg; -- Management info bezoekers CREATE OR REPLACE VIEW ykpn_v_mi_bezoekers AS SELECT a.bez_afspraak_datum, l.alg_locatie_omschrijving, ac.bez_actie_omschrijving, DECODE (b.prs_perslid_key, NULL, 'Extern', 'Intern') InternExtern, DECODE (bez_bezoekers_done, NULL, 0,1) checkIn, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 7, 1, 0) u7, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 8, 1, 0) u8, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 9, 1, 0) u9, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 10, 1, 0) u10, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 11, 1, 0) u11, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 12, 1, 0) u12, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 13, 1, 0) u13, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 14, 1, 0) u14, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 15, 1, 0) u15, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 16, 1, 0) u16, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 17, 1, 0) u17, DECODE (TO_CHAR (a.bez_afspraak_datum, 'HH24'), 18, 1, 0) u18 FROM bez_bezoekers b, bez_afspraak a, bez_actie ac, alg_locatie l WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.bez_actie_key = ac.bez_actie_key AND a.alg_locatie_key = l.alg_locatie_key; -- Taak om goedgekeuurde aanvragen die toegewezen zijn aan Arnoud Pleij en bedrijf KPN RES services -- na acceptatie af te melden. -- OBSOLETE? Scheduling gestopt met FCLT#58274. Mss tzt ook maar de procedure opruimen CREATE OR REPLACE PROCEDURE ykpn_import_afmelden_opdracht ( p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM mld_opdr -- Arnoud Pleij en bedrijf KPN RES services WHERE mld_uitvoerende_keys IN (7676, 42702) -- status geaccepteerd AND mld_statusopdr_key = 8; BEGIN FOR rec IN c LOOP mld.setopdrachtstatus (rec.mld_opdr_key, 6, 3); -- afgemeld door Facilitor mld.updatemeldingstatusav (rec.mld_melding_key, 0, NULL, 0); END LOOP; END; / ----------------------------------------- -- Pandbrieven ----------------------------------------- -- view om bij de melding pandbrief de default uit de persoonskenmerken te halen CREATE OR REPLACE VIEW ykpn_v_prs_perslid_pandbrief ( prs_perslid_key, alg_locatie_code, waarde ) AS SELECT prs_link_key, prs_kenmerk_hint, prs_kenmerklink_waarde FROM prs_kenmerklink kl, prs_kenmerk k WHERE kl.prs_kenmerk_key = k.prs_kenmerk_key AND prs_kenmerk_kenmerktype = 'V' AND (LENGTH(prs_kenmerk_hint) = 5 OR prs_kenmerk_hint = 'TP'); -- rapportage om distributielijst met pandbrieven uit te draaien -- Uitzondering voor Rob grevenstette (135671) en Walter van der Wilt (92323) CREATE OR REPLACE VIEW ykpn_v_rap_distr_pandbrief AS SELECT alg_locatie_code, alg_locatie_omschrijving, prs_perslid_email FROM prs_perslid p, prs_v_perslidwerkplek_gegevens wpg, alg_locatie l WHERE p.prs_perslid_key = wpg.prs_perslid_key AND wpg.alg_locatie_key = l.alg_locatie_key AND p.prs_perslid_email IS NOT NULL AND alg_locatie_code IN (SELECT prs_kenmerk_hint FROM prs_kenmerk WHERE prs_kenmerk_verwijder IS NULL) AND p.prs_perslid_key NOT IN (135671,92323) AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_inactief IS NULL UNION SELECT k.prs_kenmerk_hint, l.alg_locatie_omschrijving, p.prs_perslid_email FROM prs_kenmerklink kl, prs_perslid p, prs_kenmerk k, alg_locatie l WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = k.prs_kenmerk_key AND (LENGTH (k.prs_kenmerk_hint) = 5 OR k.prs_kenmerk_hint = 'TP') AND p.prs_perslid_email IS NOT NULL AND k.prs_kenmerk_hint = l.alg_locatie_code AND p.prs_perslid_verwijder IS NULL AND p.prs_perslid_inactief IS NULL AND p.prs_perslid_key NOT IN (135671,92323); -- View om voorbeeld pandbrief op te vragen via rapportages CREATE OR REPLACE VIEW ykpn_v_rap_pandbrief AS SELECT m.mld_melding_key, mld_melding_onderwerp, mld_melding_omschrijving mld_melding_omschrijving, alg_locatie_omschrijving, alg_locatie_key, alg_locatie_key extra_key, kmb.bijlage, kmo.volgorde FROM mld_melding m, alg_locatie l, (SELECT mld_melding_key, mld_kenmerkmelding_waarde bijlage FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 5161) kmb, -- bijlage (SELECT mld_melding_key, mld_kenmerkmelding_waarde verzending FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 5163) kmv, -- klaar voor verzending (SELECT mld_melding_key, mld_kenmerkmelding_waarde alle FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 5162) kma, -- alle locaties (SELECT mld_melding_key, mld_kenmerkmelding_waarde volgorde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 5181) kmo -- alle locaties WHERE mld_stdmelding_key = 2461 AND m.mld_melding_status = 4 -- geaccepteerd AND ( m.mld_alg_locatie_key = l.alg_locatie_key OR ( kma.alle = '1' AND l.alg_locatie_code IN (SELECT prs_kenmerk_hint FROM prs_kenmerk))) AND m.mld_melding_key = kmb.mld_melding_key(+) AND m.mld_melding_key = kmv.mld_melding_key(+) AND m.mld_melding_key = kma.mld_melding_key(+) AND m.mld_melding_key = kmo.mld_melding_key(+); -- Gebouwpaspoort CREATE OR REPLACE VIEW ykpn_v_rap_gebouw_info AS SELECT g.alg_gebouw_image bld_img, -- ykpn.get_kenmerk ('ALG', 1680, alg_gebouw_key) bld_img, ykpn.get_kenmerk ('ALG', 1641, alg_gebouw_key) openingst, ykpn.get_kenmerk ('ALG', 2260, alg_gebouw_key) openingst_pand, ykpn.get_kenmerk ('ALG', 1640, alg_gebouw_key) tel_bev, ykpn.get_kenmerk ('ALG', 1620, alg_gebouw_key) tel_rec, ykpn.get_kenmerk ('ALG', 1403, alg_gebouw_key) naam_fm, ykpn.get_kenmerk ('ALG', 1483, alg_gebouw_key) email_fm, ykpn.get_kenmerk ('ALG', 1401, alg_gebouw_key) tel_fm, ykpn.get_kenmerk ('ALG', 1980, alg_gebouw_key) img_fm, ykpn.get_kenmerk ('ALG', 2001, alg_gebouw_key) naam_fm1, ykpn.get_kenmerk ('ALG', 2000, alg_gebouw_key) img_fm1, ykpn.get_kenmerk ('ALG', 2003, alg_gebouw_key) naam_fm2, ykpn.get_kenmerk ('ALG', 2002, alg_gebouw_key) img_fm2, ykpn.get_kenmerk ('ALG', 2005, alg_gebouw_key) naam_fm3, ykpn.get_kenmerk ('ALG', 2004, alg_gebouw_key) img_fm3, ykpn.get_kenmerk ('ALG', 1404, alg_gebouw_key) naam_fc, ykpn.get_kenmerk ('ALG', 1484, alg_gebouw_key) email_fc, ykpn.get_kenmerk ('ALG', 1402, alg_gebouw_key) tel_fc, ykpn.get_kenmerk ('ALG', 1960, alg_gebouw_key) img_fc, ykpn.get_kenmerk ('ALG', 2080, alg_gebouw_key) naam_fc2, ykpn.get_kenmerk ('ALG', 2083, alg_gebouw_key) email_fc2, ykpn.get_kenmerk ('ALG', 2082, alg_gebouw_key) tel_fc2, ykpn.get_kenmerk ('ALG', 2081, alg_gebouw_key) img_fc2, ykpn.get_kenmerk ('ALG', 2320, alg_gebouw_key) naam_fc3, ykpn.get_kenmerk ('ALG', 2321, alg_gebouw_key) email_fc3, ykpn.get_kenmerk ('ALG', 2322, alg_gebouw_key) tel_fc3, ykpn.get_kenmerk ('ALG', 2323, alg_gebouw_key) img_fc3, ykpn.get_kenmerk ('ALG', 2023, alg_gebouw_key) naam_sm, ykpn.get_kenmerk ('ALG', 2022, alg_gebouw_key) email_sm, ykpn.get_kenmerk ('ALG', 2021, alg_gebouw_key) tel_sm, ykpn.get_kenmerk ('ALG', 2020, alg_gebouw_key) img_sm, ykpn.get_kenmerk ('ALG', 1740, alg_gebouw_key) naam_em, ykpn.get_kenmerk ('ALG', 1760, alg_gebouw_key) email_em, ykpn.get_kenmerk ('ALG', 1742, alg_gebouw_key) tel_em, ykpn.get_kenmerk ('ALG', 1981, alg_gebouw_key) img_em, ykpn.get_kenmerk ('ALG', 1420, alg_gebouw_key) not_pbo, ykpn.get_kenmerk ('ALG', 1140, alg_gebouw_key) bet_park, ykpn.get_kenmerk ('ALG', 1141, alg_gebouw_key) grat_park, ykpn.get_kenmerk ('ALG', 1142, alg_gebouw_key) opm_park, ykpn.get_kenmerk ('ALG', 1040, alg_gebouw_key) route, ykpn.get_kenmerk ('ALG', 2040, alg_gebouw_key) plattegrond, ykpn.get_kenmerk ('ALG', 1485, alg_gebouw_key) ebike, ykpn.get_kenmerk ('ALG', 1481, alg_gebouw_key) leenf, ykpn.get_kenmerk ('ALG', 1320, alg_gebouw_key) parkp_medw, ykpn.get_kenmerk ('ALG', 1321, alg_gebouw_key) parkp_bez, ykpn.get_kenmerk ('ALG', 1322, alg_gebouw_key) parkp_miva, ykpn.get_kenmerk ('ALG', 1323, alg_gebouw_key) parkp_lev, ykpn.get_kenmerk ('ALG', 1325, alg_gebouw_key) oplaadpnt_auto, ykpn.get_kenmerk ('ALG', 1326, alg_gebouw_key) parkp_ingslagbm, ykpn.get_kenmerk ('ALG', 1327, alg_gebouw_key) parkp_rondompp, ykpn.get_kenmerk ('ALG', 1328, alg_gebouw_key) parkp_illegaal, ykpn.get_kenmerk ('ALG', 1324, alg_gebouw_key) parloods, ykpn.get_kenmerk ('ALG', 1487, alg_gebouw_key) koffie, ykpn.get_kenmerk ('ALG', 2100, alg_gebouw_key) rookv, ykpn.get_kenmerk ('ALG', 2140, alg_gebouw_key) opmerking, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1487, alg_gebouw_key)) koffie_key, ykpn.get_kenmerk ('ALG', 1900, alg_gebouw_key) paragon, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1900, alg_gebouw_key)) paragon_key, ykpn.get_kenmerk ('ALG', 1880, alg_gebouw_key) yask, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1880, alg_gebouw_key)) yask_key, ykpn.get_kenmerk ('ALG', 1488, alg_gebouw_key) walk, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1488, alg_gebouw_key)) walk_key, ykpn.get_kenmerk ('ALG', 1500, alg_gebouw_key) kolfruimte, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1500, alg_gebouw_key)) kolf_key, ykpn.get_kenmerk ('ALG', 1489, alg_gebouw_key) douches, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1489, alg_gebouw_key)) douches_key, ykpn.get_kenmerk ('ALG', 1501, alg_gebouw_key) it_serv, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1720 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) it_serv_plat, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1501, alg_gebouw_key)) it_serv_key, ykpn.get_kenmerk ('ALG', 1486, alg_gebouw_key) loc_rest, ykpn.get_kenmerk ('ALG', 2240, alg_gebouw_key) loc_gebedsr, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 2240, alg_gebouw_key)) loc_gebedsr_key, ykpn.get_kenmerk ('ALG', 2220, alg_gebouw_key) openingstijd_rest, (SELECT fud.fac_usrdata_omschr FROM alg_v_aanwezigonrgoedkenmerk ak, fac_usrdata fud WHERE ak.alg_onrgoed_key= g.alg_gebouw_key AND ak.alg_onrgoed_niveau='G' AND ak.alg_kenmerk_key=2221 AND fud.Fac_Usrdata_Key=ak.alg_onrgoedkenmerk_waarde) coffeecorner, ykpn.get_kenmerk ('ALG', 2222, alg_gebouw_key) openingstijd_coffeec, ykpn.get_kenmerk ('ALG', 1061, alg_gebouw_key) cat_manager, ( SELECT MAX(alg_ruimte_key) FROM alg_v_ruimte_gegevens rg, cad_imp_contour c, cad_tekening t WHERE rg.alg_gebouw_key = g.alg_gebouw_key AND rg.alg_ruimte_nr = c.cad_imp_contour_nr AND c.cad_imp_contour_concept = 0 AND rg.alg_verdieping_key = t.alg_verdieping_key AND t.cad_tekening_key = c.cad_tekening_key AND alg_ruimte_nr = ykpn.get_kenmerk ('ALG', 1486, alg_gebouw_key)) loc_rest_key, xml.char_to_html(ykpn.get_kenmerk ('ALG', 1700, alg_gebouw_key)) banq_map, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1920 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) banq_map_file, ykpn.get_kenmerk ('ALG', 1063, alg_gebouw_key) email_cat, (SELECT alg_kenmerk_hint from alg_kenmerk where alg_kenmerk_key=1063) email_hint, ykpn.get_kenmerk ('ALG', 1062, alg_gebouw_key) tel_cat, ykpn.get_kenmerk ('ALG', 1580, alg_gebouw_key) email_paragon, ykpn.get_kenmerk ('ALG', 1540, alg_gebouw_key) tel_paragon, ykpn.get_kenmerk ('ALG', 1600, alg_gebouw_key) centr_repro, ykpn.get_kenmerk ('ALG', 2160, alg_gebouw_key) beveiliging, ykpn.get_kenmerk ('ALG', 2180, alg_gebouw_key) bev_openingtd, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1420 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) bew_ovl, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1780 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) pandbr, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1820 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) bes_form, ( SELECT LISTAGG (xml.char_to_html(b.fac_bijlagen_filename), ',') WITHIN GROUP (ORDER BY fac_bijlagen_key DESC) AS bijlagen FROM fac_bijlagen b WHERE fac_bijlagen_refkey = g.alg_gebouw_key AND b.fac_bijlagen_kenmerk_key = 1840 AND b.fac_bijlagen_module = 'ALG' AND b.fac_bijlagen_verwijder IS NULL GROUP BY fac_bijlagen_refkey) rie, l.alg_locatie_adres, l.alg_locatie_postcode, l.alg_locatie_plaats, xml.char_to_html(alg_gebouw_omschrijving) geb_oms, g.* FROM alg_gebouw g, alg_locatie l WHERE alg_gebouw_verwijder IS NULL AND ( alg_gebouw_vervaldatum IS NULL OR TRUNC(alg_gebouw_vervaldatum) > TRUNC(SYSDATE)) AND g.alg_locatie_key = l.alg_locatie_key AND ykpn.get_kenmerk ('ALG', 1641, alg_gebouw_key) IS NOT NULL; -- CAD VIEWS CREATE OR REPLACE VIEW ykpn_v_thema_resruimtesensor ( ALG_RUIMTE_KEY, WAARDE ) AS -- en dan de ruimten zonder sensor SELECT r.alg_ruimte_key, DECODE (rr.res_ruimte_key, -- is dit een vergaderruimte? NULL, '*', DECODE (r2a.res_reservering_key, NULL, 'Vrij', 'Bezet')) -- 0 uit / 1 noshow / 2 aan FROM alg_v_aanwezigruimte r, alg_srtruimte sr, (SELECT rr2a.res_reservering_key, rr2a.alg_ruimte_key FROM res_v_rsv_ruimte_2_alg_ruimte rr2a WHERE res_rsv_ruimte_dirtlevel = 0 AND rr2a.res_alg_ruimte_verwijder IS NULL AND rr2a.res_rsv_ruimte_van BETWEEN TRUNC (SYSDATE) AND SYSDATE AND rr2a.res_rsv_ruimte_tot BETWEEN SYSDATE AND TRUNC (SYSDATE + 1)) r2a, ( SELECT alg_ruimte_key, MAX (res_ruimte_key) res_ruimte_key FROM res_alg_ruimte WHERE res_alg_ruimte_verwijder IS NULL GROUP BY alg_ruimte_key) rr WHERE r.alg_srtruimte_key = sr.alg_srtruimte_key(+) AND r.alg_ruimte_key = r2a.alg_ruimte_key(+) AND r.alg_ruimte_key = rr.alg_ruimte_key(+) AND NOT EXISTS (SELECT r.alg_ruimte_key FROM ins_deel d, ins_srtdeel sd WHERE d.ins_deel_verwijder IS NULL AND d.ins_alg_ruimte_type = 'R' AND d.ins_alg_ruimte_key = r.alg_ruimte_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = fac.getSetting ( 'ins_occupationsensors_srtgroep_key') AND d.ins_deel_state IS NOT NULL); -- Thema voor werkplekbezetting. Beschikbaar geeft andere kleur bij andere catalogus -- waarde1: Voor hele dagen: Vrij(0) of Bezet (3) -- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW ykpn_v_thema_deel_res_datum AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datum fclt_f_datum, ins_deel_key, MIN (res_rsv_deel_van) min_van, MAX (res_rsv_deel_tot) max_tot, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE (res_discipline_key, 2341, 4, 2421, 0, 5) -- 2341 flex cn, 2421 flex KPN ELSE 3 -- Bezet END waarde1, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN DECODE (res_discipline_key, 2341, 4, 2421, 0, 3661, 6, 5) -- 2341 flex cn, 2421 flex KPN 3661 buroblokken WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') <= 18 AND res_discipline_key = 2341 THEN 1 -- dag bezet (flex cn) WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') >= 16 AND res_discipline_key = 2341 THEN 2 -- avond bezet (flex cn) WHEN res_discipline_key = 2961 AND count(*) = 1 THEN 1 -- één blok bezet, catalogus proef Zo werken wij CS WHEN res_discipline_key = 2961 AND count(*) = 2 THEN 2 -- twee blokken bezet, catalogus proef Zo werken wij CS ELSE 3 -- hele dag bezet END waarde, COUNT (res_rsv_deel_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, res_ins_deel_key ins_deel_key, res_rsv_deel_van, res_rsv_deel_tot, res_discipline_key FROM res_v_aanwezigdeel r, ins_deel d, datums, (SELECT datum, res_deel_key, res_rsv_deel_van, res_rsv_deel_tot FROM datums, res_v_aanwezigrsv_deel rrd WHERE datum+1 >= res_rsv_deel_van AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen WHERE r.res_deel_key = blokkerend.res_deel_key(+) AND datums.datum = blokkerend.datum(+) AND ( r.res_deel_vervaldatum IS NULL OR r.res_deel_vervaldatum > datums.datum) AND d.ins_deel_key = r.res_ins_deel_key) GROUP BY datum, ins_deel_key, res_discipline_key ORDER BY datum, ins_deel_key; -- Thema voor buroblokken. Beschikbaar geeft andere kleur bij andere catalogus -- waarde1: Voor hele dagen: Vrij(0) of Bezet (3) -- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW ykpn_v_thema_buroblk_res_datum AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 28) -- 4 weken voorruit SELECT datum fclt_f_datum, ins_deel_key, MIN (res_rsv_deel_van) min_van, MAX (res_rsv_deel_tot) max_tot, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 -- vrij ELSE 3 -- Bezet END waarde1, CASE WHEN MAX (res_rsv_deel_tot) IS NULL THEN 0 -- Vij WHEN TO_CHAR (MIN (res_rsv_deel_van), 'HH24') < 10 AND TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') > 15 THEN 3 WHEN TO_CHAR (MAX (res_rsv_deel_tot), 'HH24') < 13 THEN 1 -- ochtend bezet WHEN TO_CHAR (MAX (res_rsv_deel_van), 'HH24') >= 13 THEN 2 -- middag bezet ELSE 3 -- hele dag bezet END waarde, COUNT (res_rsv_deel_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, res_ins_deel_key ins_deel_key, res_rsv_deel_van, res_rsv_deel_tot, res_discipline_key FROM res_v_aanwezigdeel r, ins_deel d, datums, (SELECT datum, res_deel_key, res_rsv_deel_van, res_rsv_deel_tot FROM datums, res_v_aanwezigrsv_deel rrd WHERE datum+1 >=res_rsv_deel_van AND datum < res_rsv_deel_tot) blokkerend -- vandaag en nog niet afgelopen WHERE r.res_deel_key = blokkerend.res_deel_key(+) AND datums.datum = blokkerend.datum(+) AND ( r.res_deel_vervaldatum IS NULL OR r.res_deel_vervaldatum > datums.datum) AND d.ins_deel_key = r.res_ins_deel_key AND r.res_discipline_key in (3661,4021)) -- Teamarea werkplekblok 3661 en catalogus tijdelijk houten 4021 GROUP BY datum, ins_deel_key, res_discipline_key ORDER BY datum, ins_deel_key; -- Thema voor vergaderruimte bezetting. Beschikbaar geeft andere kleur bij andere catalogus -- waarde1: Voor hele dagen: Vrij(0) of Bezet (3) -- waarde: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW ykpn_v_thema_vergad_res_datum AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datum fclt_f_datum, alg_ruimte_key, MIN (res_rsv_ruimte_van) min_van, MAX (res_rsv_ruimte_tot) max_tot, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END -- Bezet END waarde1, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END -- Bezet END waarde, COUNT (res_rsv_ruimte_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, rar.alg_ruimte_key alg_ruimte_key, res_ruimte_nr, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_discipline_key, blokkerend.res_status_fo_key FROM res_v_aanwezigruimte rr, res_alg_ruimte rar, datums, (SELECT datum, res_ruimte_key, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_status_fo_key FROM datums, res_rsv_ruimte rrd, res_ruimte_opstelling ro WHERE datum+1 >= res_rsv_ruimte_van AND rrd.res_rsv_ruimte_verwijder IS NULL AND ro.res_ruimte_opstel_key = rrd.res_ruimte_opstel_key AND datum < res_rsv_ruimte_tot) blokkerend WHERE rr.res_ruimte_key = blokkerend.res_ruimte_key(+) AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.res_alg_ruimte_verwijder is null AND datums.datum = blokkerend.datum(+) AND res_discipline_key = 72 --Vergader zalen AND (rr.res_ruimte_vervaldatum IS NULL OR rr.res_ruimte_vervaldatum > datums.datum)) GROUP BY datum, alg_ruimte_key, res_ruimte_nr, res_discipline_key, res_status_fo_key ORDER BY datum, alg_ruimte_key; -- Thema voor vergaderruimte bezetting. Beschikbaar geeft andere kleur bij andere catalogus -- waarde: Voor bloktijden: Vrij(0), ochtend (bezet), Middag(bezet) of Gehele dag Bezet (3) -- waarde1: Voor halve dagen: Vrij(0), Ochtendbezet(1), MiddagBezet(2), Helemaalbezet(3) -- waarde3: Voor tellen: Het aantal reservering op de dag, met 0 is dus Vrij CREATE OR REPLACE VIEW ykpn_v_thema_vrgd_blktd_res AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datum fclt_f_datum, alg_ruimte_key, MIN (res_rsv_ruimte_van) min_van, MAX (res_rsv_ruimte_tot) max_tot, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN TO_CHAR (MAX (res_rsv_ruimte_tot), 'HH24') < 13 THEN 'ochtend' -- ochtend bezet WHEN TO_CHAR (MAX (res_rsv_ruimte_van), 'HH24') >= 13 THEN 'middag' -- middag bezet ELSE 'gehele dag' -- gehele dag bezet END END waarde, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END -- Bezet END waarde1, COUNT (res_rsv_ruimte_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, rar.alg_ruimte_key alg_ruimte_key, res_ruimte_nr, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_discipline_key, blokkerend.res_status_fo_key FROM res_v_aanwezigruimte rr, res_alg_ruimte rar, datums, (SELECT datum, res_ruimte_key, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_status_fo_key FROM datums, res_rsv_ruimte rrd, res_ruimte_opstelling ro WHERE datum+1 >= res_rsv_ruimte_van AND rrd.res_rsv_ruimte_verwijder IS NULL AND ro.res_ruimte_opstel_key = rrd.res_ruimte_opstel_key AND datum < res_rsv_ruimte_tot) blokkerend WHERE rr.res_ruimte_key = blokkerend.res_ruimte_key(+) AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.res_alg_ruimte_verwijder is null AND datums.datum = blokkerend.datum(+) AND res_discipline_key = 72 --Vergader zalen AND (rr.res_ruimte_vervaldatum IS NULL OR rr.res_ruimte_vervaldatum > datums.datum)) GROUP BY datum, alg_ruimte_key, res_ruimte_nr, res_discipline_key, res_status_fo_key ORDER BY datum, alg_ruimte_key; CREATE OR REPLACE VIEW ykpn_v_thema_wp_noshow AS SELECT TRUNC(SYSDATE) datum, rd.res_deel_key ins_deel_key, rrr.res_rsv_ruimte_key, 'bezet' waarde FROM res_rsv_ruimte rrr,res_rsv_deel rrd, res_deel rd, res_activiteit ra WHERE TRUNC(rrr.res_rsv_ruimte_van)=TRUNC(SYSDATE) AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_activiteit_key=ra.res_activiteit_key AND ra.res_activiteit_key=110 AND rrd.res_rsv_ruimte_key= rrr.res_rsv_ruimte_key AND rd.res_deel_key=rrd.res_deel_key; CREATE OR REPLACE VIEW ykpn_v_thema_inventarisatie ( alg_ruimte_key, waarde ) AS SELECT alg.alg_ruimte_key alg_ruimte_key, CASE WHEN rui.alg_srtruimte_key NOT IN ( 83, -- Videoconferentieruimte 39, -- COMMERCIEEL_RMT 24, -- KANTOORRUIMTE 82, -- Vergaderruimte 162)-- STILTERUIMTE THEN 3 WHEN TO_CHAR(done.DATUM,'YYYYMMDD')>TO_CHAR(TRUNC(SYSDATE)-30,'YYYYMMDD') -- we kijken 30 dagen terug THEN 1 ELSE 0 END waarde FROM ALG_V_ALLONRGOED_GEGEVENS alg, ALG_V_RUIMTE_GEGEVENS rui, (SELECT mld.mld_alg_onroerendgoed_keys alg_ruimte_key, mld.mld_melding_datum datum FROM mld_melding mld WHERE mld.mld_stdmelding_key=3401 ) done WHERE alg.alg_ruimte_key IS NOT NULL --IN (20982,26221) AND alg.alg_ruimte_key = done.alg_ruimte_key(+) AND rui.alg_ruimte_key = alg.alg_ruimte_key; CREATE OR REPLACE VIEW ykpn_v_thema_iot ( ins_deel_key, waarde ) AS SELECT ins.ins_deel_key ins_deel_key, kn.ins_kenmerkdeel_waarde waarde FROM ins_deel ins, ins_kenmerkdeel kn WHERE ins.ins_discipline_key=3142 -- Discipline IoT DEV=3101 ACC=3142, PROD=3282 AND kn.ins_deel_key = ins.ins_deel_key AND kn.ins_kenmerk_key= 461 -- Kenmerk Waarde DEV=241, ACC=461, PROD= AND ins.ins_deel_verwijder IS NULL and kn.ins_kenmerkdeel_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_thema_kpniot ( ins_deel_key, waarde ) AS SELECT ins.ins_deel_key ins_deel_key, kn.ins_kenmerkdeel_waarde waarde FROM ins_deel ins, ins_kenmerkdeel kn WHERE ins.ins_discipline_key=3141 -- Discipline IoT_KPN DEV=3123, ACC=3141, prod=3281 AND kn.ins_deel_key = ins.ins_deel_key AND kn.ins_kenmerk_key= 481 -- Kenmerk Waarde DEV=301, ACC=481, PROD= AND ins.ins_deel_verwijder IS NULL and kn.ins_kenmerkdeel_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_thema_ruimte_res_datum ( fclt_f_datum, alg_ruimte_key, res_ruimte_key, min_van, max_tot, waarde1, waarde, waarde3 ) AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 21) SELECT datum fclt_f_datum, alg_ruimte_key, res_ruimte_key, MIN (res_rsv_ruimte_van) min_van, MAX (res_rsv_ruimte_tot) max_tot, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END END waarde1, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END END waarde, COUNT (res_rsv_ruimte_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, rr.res_ruimte_key, rar.alg_ruimte_key alg_ruimte_key, res_ruimte_nr, res_rsv_ruimte_van, res_rsv_ruimte_tot, blokkerend.res_status_fo_key FROM res_v_aanwezigruimte rr, res_alg_ruimte rar, datums, (SELECT datum, res_ruimte_key, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_status_fo_key FROM datums, res_rsv_ruimte rrr, res_ruimte_opstelling rro WHERE res_rsv_ruimte_van > TRUNC (SYSDATE) - 1 -- negeer alle irrelevante historie sowieso AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key --AND datum >= TRUNC (res_rsv_ruimte_van) --AND datum < TRUNC (res_rsv_ruimte_tot) + 1) AND datum+1 >= res_rsv_ruimte_van AND datum < res_rsv_ruimte_tot) blokkerend -- vandaag en nog niet afgelopen WHERE rr.res_ruimte_key = blokkerend.res_ruimte_key(+) AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.res_alg_ruimte_verwijder is null AND datums.datum = blokkerend.datum(+) AND res_discipline_key IN (2581,3541) -- Team areas AND ( rr.res_ruimte_vervaldatum IS NULL OR rr.res_ruimte_vervaldatum > datums.datum)) GROUP BY datum, alg_ruimte_key, res_ruimte_key, res_ruimte_nr, res_status_fo_key; -- Thema voor team area's kleur op de achtergrond van werkplekblokken CREATE OR REPLACE VIEW ykpn_v_thema_teamarea_kleur AS SELECT rar.alg_ruimte_key, ra.res_ruimte_nr waarde, ra.res_ruimte_key waarde_key FROM res_v_aanwezigruimte ra, res_alg_ruimte rar WHERE ra.res_discipline_key IN (2581) AND rar.res_ruimte_key = ra.res_ruimte_key AND rar.res_alg_ruimte_verwijder IS NULL; -- Specifiek them voor team area rotterdam CREATE OR REPLACE VIEW ykpn_v_thema_afdspc_res_datum ( fclt_f_datum, alg_ruimte_key, res_ruimte_key, min_van, max_tot, waarde1, waarde, waarde3 ) AS WITH datums AS ( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum FROM DUAL CONNECT BY LEVEL <= 42) SELECT datum fclt_f_datum, alg_ruimte_key, res_ruimte_key, MIN (res_rsv_ruimte_van) min_van, MAX (res_rsv_ruimte_tot) max_tot, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END END waarde1, CASE WHEN MAX (res_rsv_ruimte_tot) IS NULL THEN res_ruimte_nr ELSE CASE WHEN res_status_fo_key=3 -- geblokkeerd THEN 'geblokkeerd' ELSE 'bezet' END END waarde, COUNT (res_rsv_ruimte_tot) -- aantal reservering deze dag waarde3 FROM (SELECT datums.datum, rr.res_ruimte_key, rar.alg_ruimte_key alg_ruimte_key, res_ruimte_nr, res_rsv_ruimte_van, res_rsv_ruimte_tot, blokkerend.res_status_fo_key FROM res_v_aanwezigruimte rr, res_alg_ruimte rar, datums, (SELECT datum, res_ruimte_key, res_rsv_ruimte_van, res_rsv_ruimte_tot, res_status_fo_key FROM datums, res_rsv_ruimte rrr, res_ruimte_opstelling rro WHERE res_rsv_ruimte_van > TRUNC (SYSDATE) - 1 -- negeer alle irrelevante historie sowieso AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key --AND datum >= TRUNC (res_rsv_ruimte_van) --AND datum < TRUNC (res_rsv_ruimte_tot) + 1) AND datum+1 >= res_rsv_ruimte_van AND datum < res_rsv_ruimte_tot) blokkerend -- vandaag en nog niet afgelopen WHERE rr.res_ruimte_key = blokkerend.res_ruimte_key(+) AND rr.res_ruimte_key = rar.res_ruimte_key AND rar.res_alg_ruimte_verwijder is null AND datums.datum = blokkerend.datum(+) AND res_discipline_key = 3581 -- Team areas AND ( rr.res_ruimte_vervaldatum IS NULL OR rr.res_ruimte_vervaldatum > datums.datum)) GROUP BY datum, alg_ruimte_key, res_ruimte_key, res_ruimte_nr, res_status_fo_key; -- View om inzicht in het aantal omruil acties incl kenmerken CREATE OR REPLACE VIEW ykpn_v_rap_omruilactie AS SELECT res_rsv_ruimte_key, nummer, datum, gastheer, prs_perslid_email, locatie_omschrijving, verdieping, ruimte, voorziening_product, voorziening_van, voorziening_tot, DECODE(TB_laptopst,'1','Ja','Nee') tb_laptopstd, DECODE(tb_stoel,'1','Ja','Nee') tb_stoel, DECODE(tb_monitor,'1','Ja','Nee') tb_monitor, TB_thw, DECODE(ah_laptopst,'1','Ja','Nee') ah_laptopstd, DECODE(ah_stoel,'1','Ja','Nee') ah_stoel, DECODE(ah_monitor,'1','Ja','Nee') ah_monitor, ah_thw FROM ( SELECT vw.res_rsv_ruimte_key, vw.nummer, vw.datum, vw.gastheer, vw.prs_perslid_email, vw.locatie_omschrijving, vw.verdieping, vw.ruimte, vw.voorziening_product, vw.voorziening_van, vw.voorziening_tot, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=303 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) TB_laptopst, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=305 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) TB_stoel, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=321 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) TB_monitor, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=306 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) TB_thw, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=308 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) AH_laptopst, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=309 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) AH_stoel, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=341 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) AH_monitor, (SELECT knw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde knw WHERE knw.res_kenmerk_key=310 AND res_rsv_ruimte_key=vw.res_rsv_ruimte_key) AH_thw FROM ykpn_v_rap_corona_bez vw WHERE vw.voorziening_catalogus='Omruilactie'); -- View om inzicht in het aantal bezoeker bij teameareas te krijgen. -- Teamarea's UNION met Flexplekken CREATE OR REPLACE VIEW ykpn_v_rap_corona_bez AS SELECT rrr.res_rsv_ruimte_key, rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr nummer, res_rsv_ruimte_van datum, hk.prs_perslid_naam_full gastheer, p.prs_perslid_email, alg_locatie_omschrijving locatie_omschrijving, alg_verdieping_volgnr verdieping, MAX(alg_ruimte_nr) ruimte, res_activiteit_omschrijving activiteit, rd.ins_discipline_omschrijving voorziening_catalogus, rr.res_ruimte_nr voorziening_product, rrr.res_rsv_ruimte_van voorziening_van, rrr.res_rsv_ruimte_tot voorziening_tot, b.bez_afspraak_naam bezoeker, b.bez_afspraak_bedrijf bedrijf, b.bez_bezoekers_email bezoeker_email, DECODE(rrr.res_rsv_ruimte_dirtlevel, 0, '', 'Ongeldig') status, DECODE(bhv.prs_kenmerklink_waarde, 1, 1, NULL) bhv, DECODE(COALESCE(rrd.res_deel_key,0), 0,0,1) aantal_park, DECODE(COALESCE(b.bez_bezoekers_key,0), 0,0,1) aantal_bez FROM res_rsv_ruimte rrr, res_ruimte_opstelling rro, res_alg_ruimte rar, res_ruimte rr, res_rsv_deel rrd, prs_v_perslid_fullnames hk, prs_perslid p, res_activiteit a, alg_v_ruimte_gegevens rg, bez_afspraak af, bez_bezoekers b, res_discipline rd, (SELECT prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink kl WHERE kl.prs_kenmerk_key = 1161) bhv WHERE rrr.res_rsv_ruimte_host_key = hk.prs_perslid_key AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND rrr.res_rsv_ruimte_host_key = bhv.prs_link_key(+) AND rrr.res_activiteit_key = a.res_activiteit_key AND rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rro.res_ruimte_key = rr.res_ruimte_key AND rro.res_ruimte_key = rar.res_ruimte_key AND rr.res_discipline_key = rd.ins_discipline_key AND rar.alg_ruimte_key = rg.alg_ruimte_key AND rar.res_alg_ruimte_verwijder IS NULL AND rrr.res_rsv_ruimte_verwijder IS NULL -- AND rrr.res_activiteit_key = 150 AND rrr.res_rsv_ruimte_key = af.res_rsv_ruimte_key(+) AND af.bez_afspraak_key = b.bez_afspraak_key(+) AND rrr.alg_ruimte_key IS NULL AND rrd.bez_bezoekers_key(+)=b.bez_bezoekers_key GROUP BY rrr.res_rsv_ruimte_key, rrr.res_reservering_key, res_rsv_ruimte_volgnr, res_rsv_ruimte_van, hk.prs_perslid_naam_full, p.prs_perslid_email, alg_locatie_omschrijving, alg_verdieping_volgnr, res_activiteit_omschrijving, DECODE(rrr.res_rsv_ruimte_dirtlevel, 0, '', 'Ongeldig'), rr.res_ruimte_nr, rrr.res_rsv_ruimte_van, rrr.res_rsv_ruimte_tot, b.bez_afspraak_naam, b.bez_afspraak_bedrijf, b.bez_bezoekers_email, prs_kenmerklink_waarde, rd.ins_discipline_omschrijving, rrd.res_deel_key, b.bez_bezoekers_key UNION ALL SELECT rrr.res_rsv_ruimte_key, rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr nummer, res_rsv_ruimte_van datum, hk.prs_perslid_naam_full gastheer, p.prs_perslid_email, alg_locatie_omschrijving locatie_omschrijving, alg_verdieping_volgnr verdieping, alg_ruimte_nr ruimte, res_activiteit_omschrijving activiteit, d.ins_discipline_omschrijving voorziening_catalogus, rd.res_deel_omschrijving voorziening_product, rrd.res_rsv_deel_van voorziening_van, rrd.res_rsv_deel_tot voorziening_tot, b.bez_afspraak_naam bezoeker, b.bez_afspraak_bedrijf bedrijf, b.bez_bezoekers_email bezoeker_email, NULL status, DECODE(bhv.prs_kenmerklink_waarde, 1, 1, NULL) bhv, DECODE(COALESCE(rrp.res_deel_key,0), 0,0,1) aantal_park, DECODE(COALESCE(b.bez_bezoekers_key,0), 0,0,1) aantal_bez FROM res_rsv_ruimte rrr, res_rsv_deel rrd, res_rsv_deel rrp, res_deel rd, res_discipline d, prs_v_perslid_fullnames hk, prs_perslid p, res_activiteit a, alg_v_ruimte_gegevens rg, bez_afspraak af, bez_bezoekers b, ( SELECT prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink kl WHERE kl.prs_kenmerk_key = 1161) bhv WHERE rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key AND rrd.res_deel_key = rd.res_deel_key AND rd.res_discipline_key = d.ins_discipline_key AND rrr.res_rsv_ruimte_host_key = hk.prs_perslid_key AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key AND rrr.res_rsv_ruimte_host_key = bhv.prs_link_key(+) AND rrr.res_activiteit_key = a.res_activiteit_key AND rrr.alg_ruimte_key = rg.alg_ruimte_key AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_rsv_ruimte_key = af.res_rsv_ruimte_key(+) AND af.bez_afspraak_key = b.bez_afspraak_key(+) AND rrp.bez_bezoekers_key(+)=b.bez_bezoekers_key UNION -- was eerst een UNION ALL SELECT a.bez_afspraak_key, null, a.bez_afspraak_datum datum, hk.prs_perslid_naam_full gastheer, p.prs_perslid_email, lg.alg_locatie_omschrijving locatie_omschrijving, NULL verdieping, NULL ruimte, NULL activiteit, NULL voorziening_catalogus, NULL voorziening_product, a.bez_afspraak_datum voorziening_van, a.bez_afspraak_eind voorziening_tot, b.bez_afspraak_naam bezoeker, b.bez_afspraak_bedrijf bedrijf, b.bez_bezoekers_email bezoeker_email, NULL status, DECODE(bhv.prs_kenmerklink_waarde, 1, 1, NULL) bhv, DECODE(COALESCE(rrp.res_deel_key,0), 0,0,1) aantal_park, DECODE(COALESCE(b.bez_bezoekers_key,0), 0,0,1) aantal_bez FROM bez_afspraak a, bez_bezoekers b, prs_v_perslid_fullnames hk, prs_perslid p, alg_v_locatie_gegevens lg, res_rsv_deel rrp, (SELECT prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink kl WHERE kl.prs_kenmerk_key = 1161) bhv WHERE a.res_rsv_ruimte_key IS NULL AND a.bez_afspraak_key = b.bez_afspraak_key(+) AND a.bez_afspraak_host_key= hk.PRS_PERSLID_KEY AND a.bez_afspraak_host_key=p.prs_perslid_key AND a.bez_afspraak_host_key = bhv.prs_link_key(+) AND a.alg_locatie_key = lg.alg_locatie_key AND rrp.bez_bezoekers_key(+)=b.bez_bezoekers_key; -- View om een herinnering voor werkplek reserveringen te sturen. CREATE OR REPLACE VIEW ykpn_v_noti_flex_wp_reminder AS SELECT 'CUST15' code , NULL sender , rrr.res_rsv_ruimte_contact_key receiver , 'Reminder reservering werkplek op ' || TO_CHAR (rrr.res_rsv_ruimte_van, 'DD-MM') || ' in ons kantoor ' || l.alg_locatie_omschrijving text , rrr.res_reservering_key key , rrr.res_rsv_ruimte_key xkey FROM res_rsv_ruimte rrr, alg_v_ruimte_gegevens rg, alg_locatie l WHERE res_activiteit_key IN (110) -- werkplek reserveringen AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.alg_ruimte_key = rg.alg_ruimte_key AND rg.alg_locatie_key = l.alg_locatie_key AND FAC.count_Work_Days (SYSDATE, res_rsv_ruimte_van) = 1 AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) > 2 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7) -- niet op zaterdag en zondag of op een feestdag een bericht sturen. AND NOT EXISTS (SELECT 1 FROM mld_vrije_dagen v WHERE v.mld_vrije_dagen_datum = TRUNC (SYSDATE)); -- View om een herinnering voor werkplek reserveringen te sturen. CREATE OR REPLACE VIEW ykpn_v_noti_flex_wpblok_rmndr AS SELECT 'CUST21' code , NULL sender , rrr.res_rsv_ruimte_contact_key receiver , 'Reminder reservering werkplekblok op ' || TO_CHAR (rrr.res_rsv_ruimte_van, 'DD-MM') || ' in ons kantoor ' || l.alg_locatie_omschrijving text , rrr.res_reservering_key key , rrr.res_rsv_ruimte_key xkey FROM res_rsv_ruimte rrr, alg_v_ruimte_gegevens rg, alg_locatie l WHERE res_activiteit_key IN (250) -- werkplekblok reserveringen AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.alg_ruimte_key = rg.alg_ruimte_key AND rg.alg_locatie_key = l.alg_locatie_key AND FAC.count_Work_Days (SYSDATE, res_rsv_ruimte_van) = 1 AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) > 2 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7) -- niet op zaterdag en zondag of op een feestdag een bericht sturen. AND NOT EXISTS (SELECT 1 FROM mld_vrije_dagen v WHERE v.mld_vrije_dagen_datum = TRUNC (SYSDATE)); -- View om een herinnering voor vergader reserveringen te sturen. CREATE OR REPLACE VIEW ykpn_v_noti_vergader_reminder AS SELECT 'CUST19' code , NULL sender , rrr.res_rsv_ruimte_contact_key receiver , 'Reminder reservering vergaderzaal op ' || TO_CHAR (rrr.res_rsv_ruimte_van, 'DD-MM') || ' in ons kantoor ' || l.alg_locatie_omschrijving text , rrr.res_reservering_key key , rrr.res_rsv_ruimte_key xkey , rrr.res_rsv_ruimte_van FROM res_rsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rar, alg_v_ruimte_gegevens rg, alg_locatie l WHERE res_activiteit_key IN (10) -- vergadzerzaal AND rrr.res_rsv_ruimte_verwijder IS NULL AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rar.res_ruimte_key = rr.res_ruimte_key AND rg.alg_ruimte_key = rar.alg_ruimte_key AND rg.alg_locatie_key = l.alg_locatie_key AND FAC.count_Work_Days (SYSDATE, rrr.res_rsv_ruimte_van) = 2 AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) >= 2 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7) -- niet op zaterdag en zondag of op een feestdag een bericht sturen. AND NOT EXISTS (SELECT 1 FROM mld_vrije_dagen v WHERE v.mld_vrije_dagen_datum = TRUNC (SYSDATE)); -- View om een herinnering voor teamarea reserveringen te sturen. CREATE OR REPLACE VIEW ykpn_v_noti_teama_reminder AS SELECT 'CUST19' code , NULL sender , rrr.res_rsv_ruimte_contact_key receiver , 'Reminder reservering teamarea op ' || TO_CHAR (rrr.res_rsv_ruimte_van, 'DD-MM') || ' in ons kantoor ' || rr.RES_RUIMTE_NR ||' ('||l.ALG_LOCATIE_OMSCHRIJVING||')' text , rrr.res_reservering_key key , rrr.res_rsv_ruimte_key xkey , rrr.res_rsv_ruimte_van FROM res_rsv_ruimte rrr, res_ruimte_opstelling rro, res_ruimte rr, alg_v_ruimte_gegevens rg, alg_locatie l WHERE res_activiteit_key IN (150) -- vergadzerzaal of teamarea AND rrr.res_rsv_ruimte_verwijder IS NULL AND rro.res_ruimte_opstel_key = rrr.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rg.alg_ruimte_key = (SELECT MIN(rar.alg_ruimte_key) FROM res_alg_ruimte rar WHERE rar.res_ruimte_key = rr.res_ruimte_key) AND rg.alg_locatie_key = l.alg_locatie_key AND FAC.count_Work_Days (SYSDATE, rrr.res_rsv_ruimte_van) = 1 AND FAC.count_Work_Days (rrr.res_rsv_ruimte_aanmaak, SYSDATE) >= 0 -- als kort van te voren (2 dagen) aangemaakt dan sturen we geen noti AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7) -- niet op zaterdag en zondag of op een feestdag een bericht sturen. AND NOT EXISTS (SELECT 1 FROM mld_vrije_dagen v WHERE v.mld_vrije_dagen_datum = TRUNC (SYSDATE)); CREATE OR REPLACE VIEW ykpn_v_noti_vbgo_schoonmaak AS SELECT o.mld_opdr_key key, 'CUST24' code, NULL sender, NULL receiver, 'Opdracht '|| m.mld_melding_key||'/'||o.MLD_OPDR_BEDRIJFOPDR_VOLGNR||' is uitgegegeven aan vebego Cleaning Service' text, (SELECT LISTAGG(cp.prs_contactpersoon_email,';') from prs_contactpersoon cp, prs_contactpersoon_locatie cpl where cp.prs_bedrijf_key= b.prs_bedrijf_key AND cpl.prs_contactpersoon_key = cp.prs_contactpersoon_key AND cpl.alg_locatie_key = m.mld_alg_locatie_key AND cp.prs_contactpersoon_verwijder IS NULL) xemail, NULL xmobile FROM mld_opdr o, mld_melding m, mld_statusopdr so, mld_typeopdr ot, prs_bedrijf b, fac_tracking ft, fac_notificatie_job nj WHERE o.mld_statusopdr_key = so.mld_statusopdr_key AND so.mld_statusopdr_omschrijving = 'Toegekend' AND m.mld_melding_key = o.mld_melding_key AND ot.mld_typeopdr_key = o.mld_typeopdr_key AND ( UPPER(ot.mld_typeopdr_omschrijving)='CONTRACTOPDR. LEVERANCIERS' OR UPPER(ot.mld_typeopdr_omschrijving)='CONTRACTOPDR. FS') AND b.prs_bedrijf_key = o.mld_uitvoerende_keys AND b.prs_leverancier_nr='836034' AND ft.fac_tracking_refkey=o.mld_opdr_key AND ft.FAC_SRTNOTIFICATIE_KEY=61 -- ORDNEW AND ft.FAC_TRACKING_DATUM > nj.FAC_NOTIFICATIE_JOB_LASTRUN AND nj.FAC_NOTIFICATIE_JOB_OMS='Notificatie Vebego cleaningservices'; -- Laat koffieautomaten op de plattegrond zien. Als er een openstaande melding is wordt deze rood. CREATE OR REPLACE VIEW ykpn_v_thema_vending ( ins_deel_key, alg_ruimte_key, waarde ) AS SELECT ins_deel_key, ins_alg_ruimte_key, DECODE ((SELECT COUNT (*) FROM mld_melding m, mld_melding_object mo WHERE m.mld_melding_key = mo.mld_melding_key AND mo.ins_deel_key = d.ins_deel_key AND mld_melding_status IN (0, 2, 3, 4, 7, 99)), 0, 'Normaal', 'Defect') ins_status FROM ins_deel d WHERE ins_discipline_key = 101; -- Label thema met alleen ruimtenummer. CREATE OR REPLACE VIEW ykpn_v_label_ruimte_nr ( alg_ruimte_key, waarde ) AS SELECT alg_ruimte_key, alg_ruimte_nr FROM alg_ruimte; ----------------------------------------- -- Koppeling met Strukton ----------------------------------------- CREATE OR REPLACE PROCEDURE ykpn_import_opdrstat_strukton ( p_import_key IN NUMBER) AS c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (4000); -- Input line v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (4000); v_dummy VARCHAR2 (200); header_is_valid NUMBER := 0; v_count NUMBER; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1) := 0; -- 0= Goed, 1= Error, 2=Waarschuwing -- De importvelden v_mld_opdr_opmerking VARCHAR2 (4000); v_mld_opdr_key NUMBER (10); v_mld_opdr_key_tekst VARCHAR2 (100); v_extern_nummer VARCHAR2 (100); v_status NUMBER (10); v_status_tekst VARCHAR2 (100); v_status_code VARCHAR2 (100); v_datumtijd DATE; v_datumtijd_tekst VARCHAR2 (100); v_opmerking VARCHAR2 (4000); v_totaal NUMBER (8,2); v_totaal_str VARCHAR2 (100); -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Eerst opruiming DELETE FROM ykpn_imp_opdrstat_strukton; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; fac.imp_getfield (v_newline, c_delim, v_mld_opdr_key_tekst); fac.imp_getfield (v_newline, c_delim, v_extern_nummer); fac.imp_getfield (v_newline, c_delim, v_status_code); -- typeID fac.imp_getfield (v_newline, c_delim, v_datumtijd_tekst); fac.imp_getfield (v_newline, c_delim, v_status_tekst); fac.imp_getfield (v_newline, c_delim, v_opmerking); fac.imp_getfield (v_newline, c_delim, v_totaal_str); v_totaal := fac.safe_to_number(v_totaal_str); fac.imp_writelog (p_import_key, 'I', 'v_totaal_str:' || v_totaal_str || ' v_totaal:' || v_totaal || ' fac.safe_to_number(v_totaal_str):' || fac.safe_to_number(v_totaal_str),''); --v_opmerking := substr(v_opmerking, 1, 1000); -- verwijder de markering voor cr/lf die we zelf in de stylesheet toegevoegd hebben. v_opmerking := replace(v_opmerking, '@@',CHR (13) || CHR (10)); v_aanduiding := '[' || v_extern_nummer || '|' || v_mld_opdr_key_tekst || '|' || v_status_tekst || '|' || SUBSTR(v_opmerking,1,300) || '] '; -- 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_mld_opdr_key_tekst)) = 'REFERENCEID' AND UPPER (TRIM (v_extern_nummer)) = 'SERVICEREQUESTID' AND UPPER (TRIM (v_status_code)) = 'TYPEID' AND UPPER (TRIM (v_datumtijd_tekst)) = 'DATETIME' AND UPPER (TRIM (v_opmerking)) = 'REMARKS' AND UPPER (TRIM (v_totaal_str)) = 'TOTAL' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden v_errormsg := 'Fout inlezen mld_opdr_key [' || v_aanduiding || ']'; v_mld_opdr_key := TRIM (v_mld_opdr_key); BEGIN SELECT o.mld_opdr_key, o.mld_opdr_opmerking INTO v_mld_opdr_key, v_mld_opdr_opmerking FROM mld_opdr o, mld_melding m, ins_tab_discipline d, ins_srtdiscipline sd, mld_stdmelding std WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = v_mld_opdr_key_tekst; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN fac.imp_writelog (p_import_key, 'W', 'Opdracht kan niet gevonden worden. [' || v_aanduiding || ']', ''); -- kijk nu of de opdracht gevonden kan worden a.d.h.v het Struktonnummer SELECT o.mld_opdr_key, o.mld_opdr_opmerking INTO v_mld_opdr_key, v_mld_opdr_opmerking FROM mld_opdr o, mld_kenmerkopdr ko, mld_kenmerk k WHERE o.mld_opdr_key = ko.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 35 AND ko.mld_kenmerkopdr_waarde = v_extern_nummer; EXCEPTION WHEN OTHERS THEN v_ongeldig := 1; v_errormsg := 'Opdracht kan niet gevonden worden (intern/externnr). [' || v_aanduiding || ']'; v_mld_opdr_key := NULL; END; END; IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij bepalen status [' || v_aanduiding || ']'; CASE WHEN v_status_code = '5' THEN v_status := 5; -- uitgegeven WHEN v_status_code = '10' THEN v_status := 8; -- geaccepteerd WHEN v_status_code = '20' -- monteur gereed THEN v_status := 6; -- afgemeld WHEN v_status_code = '25' -- specialist gereed THEN v_status := 6; -- afgemeld WHEN v_status_code = '30' -- technisch gereed THEN v_status := 6; -- afgemeld -- YKPN#32991 WHEN v_status_code = '40' -- uitgeprijst THEN v_status := NULL; -- afgerond v_ongeldig := 2; -- status niet bekend dus geven waarschuwing ipv error WHEN v_status_code = '70' THEN v_status := 1; -- geannuleerd WHEN v_status_code = '80' THEN v_status := 1; -- afgewezen WHEN v_status_code = '200' -- onderbroken THEN --TODO: Notitie toevoegen (incl. reden?) v_status := NULL; -- ongewijzigd WHEN v_status_code = '210' -- herpland THEN --TODO: Notitie toevoegen v_status := NULL; -- ongewijzigd ELSE v_status := NULL; v_ongeldig := 1; -- nog te bezien. END CASE; END IF; -- Lees alle veldwaarden IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij converteren datumtijd [' || v_aanduiding || ']'; v_datumtijd := fac.safe_to_date ( REPLACE ( SUBSTR (v_datumtijd_tekst, 1, INSTR (v_datumtijd_tekst, '.') - 1), 'T', ' '), 'yyyy-mm-dd hh24:mi:ss'); IF v_datumtijd = NULL THEN v_ongeldig := 0; END IF; END IF; IF v_ongeldig = 0 THEN v_errormsg := 'Fout bij aanvullen opmerking [' || v_aanduiding || ']'; -- controleer of de opmerking niet leeg is en of dezelfde opmerking al bij een eerdere statusovergang -- gemeld is. IF v_opmerking IS NOT NULL AND INSTR(COALESCE(v_mld_opdr_opmerking, 'QueQuLeQue'), v_opmerking) = 0 THEN v_opmerking := SUBSTR( '[' || v_datumtijd_tekst || '] - ' || v_status_tekst || CHR (13) || CHR (10) || v_opmerking, 1, 3900); ELSE v_opmerking := '[' || v_datumtijd_tekst || '] - ' || v_status_tekst; END IF; END IF; -- Insert geformatteerde import record IF (v_ongeldig = 0) THEN BEGIN v_errormsg := 'Fout toevoegen opdracht status [' || v_aanduiding || ']'; INSERT INTO ykpn_imp_opdrstat_strukton (mld_opdr_key, extern_nummer, status, datumtijd, opmerking, totaal) VALUES (v_mld_opdr_key, v_extern_nummer, v_status, v_datumtijd, v_opmerking, v_totaal); 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, 'Fout bij toevoegen regel aan importtabel ykpn_imp_opdr_status_strukton.'); END; ELSE IF (v_ongeldig = 2) THEN fac.imp_writelog (p_import_key, 'W', v_errormsg, ''); ELSE fac.imp_writelog (p_import_key, 'E', v_errormsg, ''); END IF; 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!'); 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', SUBSTR(v_aanduiding || v_errormsg, 1, 1000), 'Inleesproces opdrachtstatusberichten afgebroken!'); END; / CREATE OR REPLACE PROCEDURE ykpn_update_opdrstat_strukton ( p_import_key IN NUMBER) AS -- Cursor loopt - in volgorde! - over alle ingelezen opdrachtstatusberichten. CURSOR c1 IS SELECT mld_opdr_key, extern_nummer, datumtijd, status, opmerking, totaal FROM ykpn_imp_opdrstat_strukton ORDER BY 1, 3; CURSOR cp ( c_opdr_key IN NUMBER) IS SELECT pf.prs_perslid_key FROM fac_tracking tr, fac_srtnotificatie str, prs_v_perslid_fullnames_all pf WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key AND tr.prs_perslid_key = pf.prs_perslid_key(+) AND (str.fac_srtnotificatie_code = 'ORDFOK' AND tr.fac_tracking_refkey = c_opdr_key AND str.fac_srtnotificatie_xmlnode IN ('opdracht')) ORDER BY fac_tracking_datum DESC, fac_tracking_key DESC; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_count_tot NUMBER (10); v_count NUMBER (10); v_mld_key NUMBER (10) := 0; v_opdr_key NUMBER (10) := 0; v_opdr_status NUMBER (10) := 0; v_user_key NUMBER (10) := 0; v_opdr_approved mld_opdr.mld_opdr_approved%TYPE; v_approver_key prs_perslid.prs_perslid_key%TYPE; v_mld_typeopdr_key mld_typeopdr.mld_typeopdr_key%TYPE; v_mld_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE; v_mld_kenmerkopdr_key mld_kenmerkopdr.mld_kenmerkopdr_key%TYPE; v_mld_srtkenmerk_key mld_srtkenmerk.mld_srtkenmerk_key%TYPE; v_perslid_key prs_perslid.prs_perslid_key%TYPE; v_opdr_kosten mld_opdr.mld_opdr_kosten%TYPE; v_typeopdr_gvs mld_typeopdr.mld_typeopdr_gvs%TYPE; v_mld_kk mld_melding.mld_kosten_klant%TYPE; v_mld_kostenpl_key mld_melding.prs_kostenplaats_key%TYPE; v_opdr_kostenpl_key mld_opdr.prs_kostenplaats_key%TYPE; v_mld_perslid_key mld_melding.prs_perslid_key%TYPE; v_mld_disc_key ins_tab_discipline.ins_discipline_key%TYPE; v_refiat NUMBER (1); v_reapprove NUMBER (1); BEGIN -- Loop door alle geimporteerde opdrachtstatusberichten en verwerk deze. v_count_tot := 0; -- Stel de key in van het srtkenmerk 'Ref. Nr. Leverancier'. Hier wordt -- het nummer dat Strukton aan de call gegeven heeft geregistreerd. v_mld_srtkenmerk_key := 18; v_user_key := 32652; -- Strukton user FOR rec IN c1 LOOP BEGIN v_aanduiding := '[' || rec.mld_opdr_key || '|' || SUBSTR (rec.opmerking, 1, 100) || '] '; v_count_tot := v_count_tot + 1; v_count := 0; -- Key van melding/opdracht bepalen en externnr bij opdracht opslaan. IF (rec.mld_opdr_key IS NOT NULL) THEN v_errormsg := 'Fout bij bepalen opdracht.'; SELECT mld_melding_key, mld_opdr_key, mld_statusopdr_key, mld_typeopdr_key INTO v_mld_key, v_opdr_key, v_opdr_status, v_mld_typeopdr_key FROM mld_opdr WHERE mld_opdr_key = rec.mld_opdr_key; v_errormsg := 'Fout bij bepalen kenmerk extern nummer.'; SELECT k.mld_kenmerk_key INTO v_mld_kenmerk_key FROM mld_kenmerk k WHERE k.mld_srtkenmerk_key = v_mld_srtkenmerk_key AND k.mld_typeopdr_key = v_mld_typeopdr_key; v_errormsg := 'Fout bij bepalen kenmerkopdracht extern nummer.'; SELECT MAX (ko.mld_kenmerkopdr_key) INTO v_mld_kenmerkopdr_key FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key = v_opdr_key AND v_mld_kenmerk_key = ko.mld_kenmerk_key; v_errormsg := 'Fout bij aanpassen extern nummer.'; IF v_mld_kenmerkopdr_key IS NULL THEN -- kenmerk toevoegen INSERT INTO mld_kenmerkopdr (mld_kenmerk_key, mld_opdr_key, mld_kenmerkopdr_waarde) VALUES (v_mld_kenmerk_key, v_opdr_key, rec.extern_nummer); ELSE -- kenmerk aanpassen UPDATE mld_kenmerkopdr SET mld_kenmerkopdr_waarde = rec.extern_nummer WHERE mld_kenmerkopdr_key = v_mld_kenmerkopdr_key; END IF; IF rec.status IS NOT NULL THEN v_errormsg := 'Fout bij bijwerken opdracht-opmerking.'; v_count := LENGTH (rec.opmerking) + 5; -- Beetje speling qua lengte! UPDATE mld_opdr SET mld_opdr_opmerking = DECODE ( mld_opdr_opmerking, NULL, rec.opmerking, rec.opmerking || CHR (13) || CHR (10) || SUBSTR (mld_opdr_opmerking, 1, (4000 - v_count))) WHERE mld_opdr_key = v_opdr_key; IF v_opdr_status <> rec.status -- Voegt niets toe, want hieronder alleen wat gedaan als v_opdr_status <> rec.status! THEN IF rec.status = 8 AND v_opdr_status = 5 THEN -- Accepteer opdracht als de opdracht uitgegeven was mld.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor ELSIF rec.status = 6 AND v_opdr_status = 5 THEN -- Meld de opdracht af als deze uitgegeven was mld.setopdrachtstatus (v_opdr_key, 8, v_user_key); -- Facilitor, eerst accepteren mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor ELSIF rec.status = 6 AND v_opdr_status = 8 THEN -- Meld de opdracht af als deze geaccepteerd was mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor ELSIF rec.status = 1 AND v_opdr_status = 5 THEN -- Opdracht is afgewezen op het moment dat de opdracht nog niet geaccepteerd is. mld.setopdrachtstatus (v_opdr_key, 1, v_user_key); -- Facilitor mld.updatemeldingstatusav (v_mld_key, 0, v_user_key, 0); ELSIF rec.status = 1 AND v_opdr_status = 8 THEN -- Opdracht is afgewezen op het moment dat de opdracht al geaccepteerd is. mld.setopdrachtstatus (v_opdr_key, 6, v_user_key); -- Facilitor --MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0); ELSIF rec.status = 9 AND v_opdr_status = 6 THEN -- Opdracht is afgerond en opdrachtstatus was afgemeld. mld.setopdrachtstatus (v_opdr_key, 9, v_user_key); -- Facilitor END IF; IF rec.status = 6 AND v_opdr_status <> 6 THEN -- Sinds AADO#30922 wordt de melding niet meer automatisch afgemeld. MLD.updatemeldingstatusAV (v_mld_key, 0, v_user_key, 0); ELSE IF rec.status = 9 AND v_opdr_status <> 9 THEN -- Oorspronkelijke gegevens opdracht ophalen. -- var opdr_info = mld.mld_opdr_info(opdr_key); SELECT mld_opdr_kosten, mld_typeopdr_gvs, mld_kosten_klant, m.prs_kostenplaats_key, o.prs_kostenplaats_key, m.prs_perslid_key, std.mld_ins_discipline_key INTO v_opdr_kosten, v_typeopdr_gvs, v_mld_kk, v_mld_kostenpl_key, v_opdr_kostenpl_key, v_mld_perslid_key, v_mld_disc_key FROM mld_opdr o, mld_melding m, mld_typeopdr t, mld_stdmelding std WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND o.mld_typeopdr_key = t.mld_typeopdr_key AND o.mld_opdr_key = v_opdr_key; -- Hergoedkeuring (Ter goedkeuring) wordt (pas) vereist als het opdrachtbedrag hoger is dan al is goedgekeurd en boven de GVS-grens uitkomt. -- Herfiattering (Ter fiattering) wordt (pas) vereist indien het bedrag boven het mandaat van de oorspronkelijke (laatste) fiatteur uitkomt -- en boven de GVS-grens uitkomt. -- Hergoedkeuring en herfiattering kan alleen als het totaalbedrag van de opdracht is verhoogd en alleen in de statussen 5, 8, 6 en 9 (de uitvoeringsfase en de afhandelingsfase). -- Hergoedkeuring en herfiattering kan leiden tot een tijdelijke terugkeer naar de voorfase status 3 of 10. IF rec.totaal > v_opdr_kosten THEN fac.imp_writelog (p_import_key, 'I', 'rec.totaal > v_opdr_kosten: ' || rec.totaal || ' - ' || v_opdr_kosten, ''); -- Hergoedkeuring (Ter goedkeuring) wordt (pas) vereist als het opdrachtbedrag hoger is dan al is goedgekeurd en boven de GVS-grens uitkomt. IF rec.totaal > COALESCE (v_opdr_approved, 0) AND rec.totaal > v_typeopdr_gvs THEN v_reapprove := 1; ELSE v_reapprove := 0; END IF; fac.imp_writelog (p_import_key, 'I', 'hergoedkeuring: ' || v_reapprove || ' - ' || v_opdr_approved || ' - ' || v_typeopdr_gvs, ''); -- Herfiattering (Ter fiattering) wordt (pas) vereist indien het bedrag boven het mandaat van de oorspronkelijke (laatste) fiatteur uitkomt -- en boven de GVS-grens uitkomt. -- Bepaal het mandaat van de oorspronkelijke (laatste) fiatteur. -- Ook als er de vorige keer geen kosten waren dan moet pas worden geherfiatteerd als (tot_kosten > mandaat), -- waarbij de mandaat van de Melder/aanvrager van melding of de user is. v_perslid_key := NULL; IF rec.totaal > v_opdr_kosten AND rec.totaal > 0 AND rec.totaal > v_typeopdr_gvs THEN fac.imp_writelog (p_import_key, 'I', 'F - rec.totaal > v_opdr_kosten: ' || rec.totaal || ' - ' || v_opdr_kosten || ' - ' || v_typeopdr_gvs, ''); -- De totale kosten zijn verhoogd en het bedrag zit boven de GVS-grens. -- Bepaling oorspronkelijke (laatste) fiatteur, als die er was. v_perslid_key := NULL; FOR rec2 IN cp (v_opdr_key) LOOP BEGIN v_perslid_key := rec2.prs_perslid_key; END; END LOOP; fac.imp_writelog (p_import_key, 'I', 'F - laatste fiatteur: ' || v_perslid_key, ''); IF v_perslid_key IS NULL THEN -- Dan waren de opdracht kosten onder het mandaat van mijzelf of de BO-medewerker. -- Als de kostenplaats bij de opdracht overruled is dan wordt altijd tegen het profiel van de BO-medewerker getest. IF v_mld_kk = 1 AND v_mld_kostenpl_key = v_opdr_kostenpl_key THEN v_perslid_key := v_mld_perslid_key; -- Melder/aanvrager van melding END IF; END IF; fac.imp_writelog (p_import_key, 'I', 'F - indien onbekend terugvallen op melder: ' || v_perslid_key, ''); IF fac.getsetting ('mld_use_order_approval') = 1 AND (rec.totaal > fac.getsetting ('can_selfapprove') OR rec.totaal > prs.getprofiellimiet (v_perslid_key, v_mld_disc_key)) THEN -- Er moet (opnieuw) gefiatteerd worden. Is er wel iemand met voldoende mandaat? Indien er niemand gevonden kan worden mag de wijziging niet doorgaan. -- Het mandaat is al te hoog voor de melder/aanvrager van de melding of mijzelf. v_approver_key := prs.getkpverantwoordelijke ( v_opdr_kostenpl_key, fac.getsetting ('prs_approvemethod'), v_user_key); v_refiat := 1; -- er moet (her)fiattering plaatsvinden fac.imp_writelog (p_import_key, 'I', 'F - (her)fiatteur: ' || v_approver_key, ''); END IF; END IF; END IF; IF v_reapprove = 1 OR v_refiat = 1 THEN -- Zet de refiat waarden. Het hergoedkeurings- en/of herfiatteringstraject wordt opnieuw ingegaan. // Tracking hiervan is niet nodig. IF v_opdr_kosten > 0 THEN UPDATE mld_opdr SET mld_opdr_materiaal_refiat = mld_opdr_materiaal, mld_opdr_kosten_refiat = mld_opdr_kosten WHERE mld_opdr_key = v_opdr_key; END IF; -- Ook voor status 5 wordt refiatstatus gezet zodat bekend is dat het om een herfiattering gaat. De fiatteringsvoorwaarde is dan iets anders. UPDATE mld_opdr SET mld_statusopdr_key_refiat = mld_statusopdr_key WHERE mld_opdr_key = v_opdr_key; -- Goedkeuring opnieuw ingaan kan alleen als het approved bedrag leeg is. UPDATE mld_opdr SET mld_opdr_approved_refiat = mld_opdr_approved WHERE mld_opdr_key = v_opdr_key; UPDATE mld_opdr SET mld_opdr_approved = NULL, mld_opdr_materiaal = rec.totaal, mld_opdr_kosten = rec.totaal WHERE mld_opdr_key = v_opdr_key; ELSE UPDATE mld_opdr SET mld_opdr_materiaal = rec.totaal, mld_opdr_kosten = rec.totaal WHERE mld_opdr_key = v_opdr_key; END IF; -- geef in de tracking aan dat de kosten via de interface aangepast zijn. IF v_opdr_kosten <> rec.totaal THEN fac.trackaction ('ORDUPD', v_opdr_key, v_user_key, SYSDATE, 'Gewijzigd' || CHR (13) || CHR (10) || 'Materiaal: ' || v_opdr_kosten || ' --> ' || rec.totaal || CHR (13) || CHR (10) || 'Totaal: ' || v_opdr_kosten || ' --> ' || rec.totaal); END IF; IF v_reapprove = 1 THEN -- Zetten van de status van de gewijzigde opdracht op "Ter goedkeuring" en afhandelen van de tracking (status + uitvoerende tracking) en daarmee notificatie. -- status = 10; Ter goedkeuring. mld.setopdrachtstatus (v_opdr_key, 10, v_user_key); ELSE IF v_refiat = 1 THEN -- Zetten van de status van de gewijzigde opdracht op "Ter fiattering" en afhandelen van de tracking (status + uitvoerende tracking) en daarmee notificatie. -- status = 3; // Ter fiattering. mld.setopdrachtstatus (v_opdr_key, 3, v_user_key); END IF; END IF; END IF; END IF; END IF; ELSE -- rec.status IS NULL (= Onderbroken/Herpland), dan toevoegen Notitie! -- YAXX#59749: Toevoegen Notitie! v_errormsg := 'Fout toevoegen Notitie (opdracht).'; INSERT INTO mld_opdr_note (mld_opdr_key, mld_opdr_note_omschrijving, prs_perslid_key) VALUES (v_opdr_key, rec.opmerking, v_user_key); END IF; END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout bij verwerken opdrachtstatusbericht.'); END; END LOOP; COMMIT; END; / -- Importeren KPN Retail winkels CREATE OR REPLACE PROCEDURE ykpn_import_loc_retail (p_import_key IN NUMBER) AS c_fielddelimitor VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); v_error_hint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count NUMBER; v_index NUMBER; v_key NUMBER; v_dummy VARCHAR2 (100); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_all_null BOOLEAN; v_count_error NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); -- De importvelden: v_locatie_code VARCHAR2 (100); v_formule VARCHAR2 (100); v_formule_aanduiding VARCHAR2 (100); v_locatie_omschrijving VARCHAR2 (100); v_locatie_adres VARCHAR2 (100); v_locatie_postcode VARCHAR2 (100); v_locatie_plaats VARCHAR2 (100); v_email VARCHAR2 (100); v_manager_naam VARCHAR2 (100); v_manager_mobiel VARCHAR2 (100); v_regio VARCHAR2 (100); v_regio_manager VARCHAR2 (100); v_regio_manager_naam VARCHAR2 (100); v_cluster VARCHAR2 (100); v_cluster_manager VARCHAR2 (100); v_centercode VARCHAR2 (100); v_res_nummer VARCHAR2 (100); v_x_coord VARCHAR2 (100); v_y_coord VARCHAR2 (100); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; PROCEDURE imp_getfield_str (p_parseline IN VARCHAR2, p_fielddelimitor IN VARCHAR2, p_colname IN VARCHAR2, p_field OUT VARCHAR2) AS v_colnr NUMBER; BEGIN SELECT fac_rapport_volgnr INTO v_colnr FROM fac_rapport WHERE fac_rapport_node = 'IMPORT' AND UPPER(fac_rapport_regel) = UPPER(p_colname); fac.imp_getfield_nr (p_parseline, p_fielddelimitor, v_colnr, p_field); RETURN; END; BEGIN COMMIT; v_count_error := 0; header_is_valid := 0; v_count_tot := 0; v_count_import := 0; FOR rec IN c LOOP BEGIN v_error_hint := 'Fout FETCH te importeren rij'; v_ongeldig := 0; v_newline := rec.fac_imp_file_line; v_aanduiding := ''; IF rec.fac_imp_file_index = 1 THEN -- We zijn nu bij de header. Deze gaan we opslaan in fac_rapport. We kunnen dan geindexeerd -- de data opvragen v_error_hint := 'Niet alle kolommen bestaan in dit bestand'; v_index := 0; v_dummy := 'QueQeLeQue'; DELETE fac_rapport WHERE fac_rapport_node = 'IMPORT'; WHILE v_dummy IS NOT NULL AND v_index < 100 LOOP fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy); v_index := v_index + 1; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('IMPORT', v_index, v_dummy); END LOOP; DELETE FROM ykpn_imp_loc_retail; ELSE -- Lees alle veldwaarden v_error_hint := 'Fout opvragen te importeren rij'; imp_getfield_str (v_newline, c_fielddelimitor, 'Winkelnummer', v_locatie_code); imp_getfield_str (v_newline, c_fielddelimitor, 'Formulenaam', v_formule); imp_getfield_str (v_newline, c_fielddelimitor, 'Formuleaanduiding', v_formule_aanduiding); imp_getfield_str (v_newline, c_fielddelimitor, 'Locatie', v_locatie_omschrijving); imp_getfield_str (v_newline, c_fielddelimitor, 'Straat', v_locatie_adres); imp_getfield_str (v_newline, c_fielddelimitor, 'Huisnummer', v_dummy); -- Huisnummer v_locatie_adres := v_locatie_adres || ' ' || TRIM (v_dummy); imp_getfield_str (v_newline, c_fielddelimitor, 'Toev.', v_dummy); -- Toevoeging IF v_dummy IS NOT NULL THEN IF fac.safe_to_number (v_dummy) IS NULL THEN v_locatie_adres := v_locatie_adres || v_dummy; ELSE v_locatie_adres := v_locatie_adres || '-' || v_dummy; END IF; END IF; imp_getfield_str (v_newline, c_fielddelimitor, 'Postcode', v_locatie_postcode); imp_getfield_str (v_newline, c_fielddelimitor, 'Plaats', v_locatie_plaats); imp_getfield_str (v_newline, c_fielddelimitor, 'E-mailadres', v_email); imp_getfield_str (v_newline, c_fielddelimitor, 'Supervisor voornaam', v_manager_naam); imp_getfield_str (v_newline, c_fielddelimitor, 'Supervisor tuss.', v_dummy); -- tussenvoegsels IF v_dummy IS NOT NULL THEN v_manager_naam := v_manager_naam || ' ' || v_dummy; END IF; imp_getfield_str (v_newline, c_fielddelimitor, 'Supervisor achternaam', v_dummy); -- achternaam v_manager_naam := v_manager_naam || ' ' || v_dummy; imp_getfield_str (v_newline, c_fielddelimitor, 'Supervisor mobiel nummer', v_manager_mobiel); imp_getfield_str (v_newline, c_fielddelimitor, 'Cluster-manager email', v_cluster_manager); imp_getfield_str (v_newline, c_fielddelimitor, 'Cluster', v_cluster); imp_getfield_str (v_newline, c_fielddelimitor, 'Regio afkorting', v_regio); imp_getfield_str (v_newline, c_fielddelimitor, 'Regio-manager', v_regio_manager_naam); imp_getfield_str (v_newline, c_fielddelimitor, 'Centercode', v_centercode); imp_getfield_str (v_newline, c_fielddelimitor, 'Latitude', v_x_coord); imp_getfield_str (v_newline, c_fielddelimitor, 'Longitude', v_y_coord); v_aanduiding := v_locatie_code || '|' || v_locatie_omschrijving || '|' || v_locatie_plaats || '| '; v_count_tot := v_count_tot + 1; v_error_hint := 'Fout bij zoeken naar formule'; BEGIN SELECT fac_usrdata_key INTO v_key FROM fac_usrdata ud WHERE UPPER (v_formule) = UPPER (ud.fac_usrdata_omschr) AND ud.fac_usrtab_key = 241; v_formule := v_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Formule niet gevonden:' || v_formule, v_aanduiding); v_ongeldig := 1; END; v_error_hint := 'Fout bij zoeken naar formule aanduiding'; IF v_formule_aanduiding IS NOT NULL THEN BEGIN SELECT fac_usrdata_key INTO v_key FROM fac_usrdata ud WHERE UPPER (v_formule_aanduiding) = UPPER (ud.fac_usrdata_omschr) AND ud.fac_usrtab_key = 242; v_formule_aanduiding := v_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Formule aanduiding niet gevonden:' || v_formule_aanduiding, v_aanduiding); v_ongeldig := 1; END; END IF; v_error_hint := 'Fout bij zoeken naar regio'; IF v_regio IS NOT NULL THEN BEGIN SELECT alg_district_key INTO v_key FROM alg_district WHERE UPPER (v_regio) = UPPER (alg_district_omschrijving) AND alg_regio_key = 21; -- Retail v_regio := v_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Regio aanduiding niet gevonden:' || v_regio, v_aanduiding); v_ongeldig := 1; END; END IF; v_error_hint := 'Fout bij zoeken naar cluster manager'; BEGIN -- We zoeken naar het gedeelte voor het @ teken. Managers hebben nog wel eens een @telfort of @kpn domein. SELECT prs_perslid_key INTO v_key FROM prs_perslid WHERE UPPER (SUBSTR(prs_perslid_email, 1, INSTR(prs_perslid_email, '@'))) = UPPER (SUBSTR(v_cluster_manager, 1, INSTR(v_cluster_manager, '@'))) AND prs_perslid_verwijder IS NULL; v_cluster_manager := v_key; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'W', 'Cluster manager niet gevonden:' || v_cluster_manager, v_aanduiding); END; IF v_ongeldig = 0 THEN v_error_hint := 'Fout bij toevoegen te impoteren locatie'; INSERT INTO ykpn_imp_loc_retail ( alg_locatie_code, formule, formule_aanduiding, alg_locatie_omschrijving, alg_locatie_adres, alg_locatie_postcode, alg_locatie_plaats, email, manager_naam, manager_mobiel, cluster_oms, cluster_manager, regio, regio_manager_naam, centercode, x_coord, y_coord) VALUES ( SUBSTR (v_locatie_code, 1, 10), FAC.safe_to_number (v_formule), FAC.safe_to_number ( v_formule_aanduiding), SUBSTR (v_locatie_omschrijving, 1, 60), SUBSTR (v_locatie_adres, 1, 50), SUBSTR (v_locatie_postcode, 1, 12), SUBSTR (v_locatie_plaats, 1, 30), SUBSTR (v_email, 1, 100), SUBSTR (v_manager_naam, 1, 30), SUBSTR (v_manager_mobiel, 1, 15), SUBSTR (v_cluster, 1, 20), FAC.safe_to_number (v_cluster_manager), FAC.safe_to_number (v_regio), SUBSTR (v_regio_manager_naam, 1, 100), SUBSTR (v_centercode, 1, 5), FAC.safe_to_number ( REPLACE (v_x_coord, ',', '.')), FAC.safe_to_number ( REPLACE (v_y_coord, ',', '.'))); END IF; END IF; END; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_error_hint || ' ' || v_aanduiding); END ykpn_import_loc_retail; / CREATE OR REPLACE PROCEDURE ykpn_update_loc_retail (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM ykpn_imp_loc_retail; CURSOR c_del IS SELECT l.* FROM alg_locatie l, alg_district d WHERE l.alg_district_key = d.alg_district_key AND d.alg_regio_key = 21 -- RETAIL AND l.alg_locatie_verwijder IS NULL AND l.alg_locatie_code <> '999' AND NOT EXISTS (SELECT alg_locatie_code FROM ykpn_imp_loc_retail i WHERE FAC.safe_to_number (i.alg_locatie_code) = FAC.safe_to_number (l.alg_locatie_code)); CURSOR c_cm IS SELECT cluster_manager, alg_ruimte_key FROM ykpn_imp_loc_retail i, alg_v_ruimte_gegevens rg WHERE fac.safe_to_number (i.alg_locatie_code) = fac.safe_to_number (rg.alg_locatie_code) AND LENGTH (rg.alg_locatie_code) = 3 AND NOT EXISTS (SELECT prs_perslidwerkplek_key FROM prs_v_perslidwerkplek_gegevens pwpg WHERE pwpg.prs_perslid_key = i.cluster_manager AND pwpg.alg_ruimte_key = rg.alg_ruimte_key); CURSOR c_cm_del IS SELECT prs_werkplek_key FROM prs_v_perslidwerkplek_gegevens pwpg, alg_locatie l WHERE pwpg.alg_locatie_key = l.alg_locatie_key AND LENGTH (alg_locatie_code) = 3 AND prs_werkplek_virtueel = 1 AND prs_perslidwerkplek_bezetting = 99 AND NOT EXISTS (SELECT cluster_manager FROM ykpn_imp_loc_retail i WHERE fac.safe_to_number (i.alg_locatie_code) = fac.safe_to_number (l.alg_locatie_code) AND i.cluster_manager = pwpg.prs_perslid_key); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count_error NUMBER (10); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_locatie_key NUMBER (10); v_locatie_omschrijving VARCHAR2 (60); v_formule VARCHAR2 (100); v_formule_aanduiding VARCHAR2 (100); BEGIN FOR rec IN c LOOP v_errorhint := 'Opzoeken formule'; BEGIN SELECT fac_usrdata_omschr INTO v_formule FROM fac_usrdata WHERE fac_usrdata_key = rec.formule; v_locatie_omschrijving := rec.alg_locatie_omschrijving || ' ' || v_formule; EXCEPTION WHEN NO_DATA_FOUND THEN v_formule := NULL; END; v_errorhint := 'Opzoeken formule aanduiding'; BEGIN SELECT fac_usrdata_omschr INTO v_formule_aanduiding FROM fac_usrdata WHERE fac_usrdata_key = rec.formule_aanduiding; v_locatie_omschrijving := v_locatie_omschrijving || ' ' || v_formule_aanduiding; EXCEPTION WHEN NO_DATA_FOUND THEN v_formule_aanduiding := NULL; END; v_errorhint := 'Opzoeken locatie'; v_aanduiding := rec.alg_locatie_code || '-' || rec.alg_locatie_omschrijving; BEGIN SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie l WHERE FAC.safe_to_number(rec.alg_locatie_code) = FAC.safe_to_number(l.alg_locatie_code) AND alg_locatie_verwijder IS NULL AND LENGTH(alg_locatie_code) = 3; UPDATE alg_locatie SET alg_district_key = rec.regio, alg_locatie_omschrijving = v_locatie_omschrijving, alg_locatie_adres = rec.alg_locatie_adres, alg_locatie_postcode = rec.alg_locatie_postcode, alg_locatie_plaats = rec.alg_locatie_plaats, alg_locatie_verantw = rec.manager_naam, alg_locatie_verantw_tel = rec.manager_mobiel, alg_locatie_x = rec.x_coord, alg_locatie_y = rec.y_coord, mld_dienstniveau_key = 119 WHERE alg_locatie_key = v_locatie_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Toevoegen locatie'; INSERT INTO alg_locatie (alg_district_key, alg_locatie_code, alg_locatie_omschrijving, alg_locatie_adres, alg_locatie_postcode, alg_locatie_plaats, alg_locatie_verantw, alg_locatie_verantw_tel, alg_locatie_x, alg_locatie_y, mld_dienstniveau_key) VALUES ( rec.regio, TO_CHAR(rec.alg_locatie_code, 'FM009'), v_locatie_omschrijving, rec.alg_locatie_adres, rec.alg_locatie_postcode, rec.alg_locatie_plaats, rec.manager_naam, rec.manager_mobiel, rec.x_coord, rec.y_coord, 119) RETURNING alg_locatie_key INTO v_locatie_key; fac.imp_writelog (p_import_key, 'I', 'Locatie toegevoegd: ' || v_aanduiding, ''); END; v_errorhint := 'Aanpassen locatie kenmerken'; ALG.upsertkenmerk (1, v_locatie_key, rec.centercode); ALG.upsertkenmerk (3, v_locatie_key, rec.formule); ALG.upsertkenmerk (4, v_locatie_key, rec.formule_aanduiding); ALG.upsertkenmerk (5, v_locatie_key, rec.email); ALG.upsertkenmerk (1340, v_locatie_key, rec.cluster_oms); ALG.upsertkenmerk (1360, v_locatie_key, rec.cluster_manager); v_errorhint := 'Aanpassen district kenmerken'; ALG.upsertkenmerk (1380, rec.regio, rec.regio_manager_naam); END LOOP; FOR rec IN c_del LOOP fac.imp_writelog (p_import_key, 'W', 'Locatie komt niet voor in import: ' || rec.alg_locatie_code || ' ' || rec.alg_locatie_omschrijving, ''); END LOOP; -- De cluster manager krijgt een virtuele werkplek in de winkel. Deze markeren we met een bezetting van 99 zodat we straks deze mensen weer kunnen verwijderen. FOR rec IN c_cm LOOP v_errorhint := 'Koppelen cluster manager ' || rec.cluster_manager; PRS.movetoruimte (rec.cluster_manager, rec.alg_ruimte_key, 'L', 1); UPDATE prs_perslidwerkplek SET prs_perslidwerkplek_bezetting = 99 WHERE prs_perslid_key = rec.cluster_manager AND prs_werkplek_key IN (SELECT prs_werkplek_key FROM prs_werkplek WHERE prs_alg_ruimte_key = rec.alg_ruimte_key); END LOOP; FOR rec IN c_cm_del LOOP v_errorhint := 'Verwijderen werkplek cluster manager ' || rec.prs_werkplek_key; DELETE prs_werkplek WHERE prs_werkplek_key = rec.prs_werkplek_key; END LOOP; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint || ' ' || v_aanduiding); END; / -- Nu de KPI import voor KPN CREATE OR REPLACE PROCEDURE ykpn_import_kpi_definitie (p_import_key IN NUMBER) IS c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); -- Input line v_errormsg VARCHAR2 (1000); v_errorhint 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_kpi_definitie_code VARCHAR2(255); --15 BYTE), v_kpi_definitie_omschrijving VARCHAR2(255); --60 BYTE), v_kpi_definitie_info VARCHAR2(4000); -- 4000 BYTE), v_kpi_definitie_categorie1 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_categorie2 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_categorie3 VARCHAR2(255); -- 50 BYTE), v_kpi_definitie_drempels_0 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_70 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_90 VARCHAR2(255); -- 20 BYTE), v_kpi_definitie_drempels_100 VARCHAR2(255); -- 20 BYTE) v_kpi_definitie_drempels_tot VARCHAR2(255); -- 20 BYTE), -- Overige velden: CURSOR c1 IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN -- Eerst opruiming DELETE FROM YKPN_IMP_KPI_DEFINITIE; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; COMMIT; FOR rec1 IN c1 LOOP BEGIN v_newline := rec1.fac_imp_file_line; v_errormsg := 'Fout opvragen te importeren rij'; v_aanduiding := ''; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie1); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_categorie2); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_code); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_omschrijving); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_info); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_0); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_70); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_90); fac.imp_getfield (v_newline, c_delim, v_kpi_definitie_drempels_100); v_aanduiding := '|' || v_kpi_definitie_categorie1 || '|' || v_kpi_definitie_categorie2 || '|' || v_kpi_definitie_code || '| '; -- 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_kpi_definitie_categorie1) = 'KPI CATEGORIE 1' AND UPPER (v_kpi_definitie_categorie2) = 'KPI CATEGORIE 2' AND UPPER (v_kpi_definitie_code) = 'KPI CODE' AND UPPER (v_kpi_definitie_omschrijving) = 'KPI OMSCHRIJVING' AND UPPER (v_kpi_definitie_info) = 'KPI INFORMATIE' AND UPPER (v_kpi_definitie_drempels_0) = 'KPI DREMPEL 0' AND UPPER (v_kpi_definitie_drempels_70) = 'KPI DREMPEL 70' AND UPPER (v_kpi_definitie_drempels_90) = 'KPI DREMPEL 90' AND UPPER (v_kpi_definitie_drempels_100) = 'KPI DREMPEL 100' THEN header_is_valid := 1; END IF; ELSE v_count_tot := v_count_tot + 1; -- Controleer alle veldwaarden IF v_kpi_definitie_categorie1 IS NOT NULL THEN v_kpi_definitie_categorie1 := TRIM (v_kpi_definitie_categorie1); IF LENGTH (v_kpi_definitie_categorie1) > 50 THEN v_kpi_definitie_categorie1 := SUBSTR (TRIM (v_kpi_definitie_categorie1), 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Categorie 1 wordt afgebroken tot [' || v_kpi_definitie_categorie1 || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 1 mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_categorie2 IS NOT NULL THEN v_kpi_definitie_categorie2 := TRIM (v_kpi_definitie_categorie2); IF LENGTH (v_kpi_definitie_categorie2) > 50 THEN v_kpi_definitie_categorie2 := SUBSTR (TRIM (v_kpi_definitie_categorie2), 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Categorie 2 wordt afgebroken tot [' || v_kpi_definitie_categorie2 || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Categorie 2 mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_code IS NOT NULL THEN v_kpi_definitie_code := TRIM (v_kpi_definitie_code); IF LENGTH (v_kpi_definitie_code) > 15 THEN v_kpi_definitie_code := SUBSTR (TRIM (v_kpi_definitie_code), 1, 15); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Code wordt afgebroken tot [' || v_kpi_definitie_code || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Code mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; IF v_kpi_definitie_omschrijving IS NOT NULL THEN v_kpi_definitie_omschrijving := TRIM (v_kpi_definitie_omschrijving); IF LENGTH (v_kpi_definitie_omschrijving) > 60 THEN v_kpi_definitie_omschrijving := SUBSTR (TRIM (v_kpi_definitie_omschrijving), 1, 60); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Omschrijving wordt afgebroken tot [' || v_kpi_definitie_omschrijving || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Omschrijving mag NIET leeg zijn: deze regel wordt overgeslagen'); END IF; v_kpi_definitie_info := TRIM (v_kpi_definitie_info); IF LENGTH (v_kpi_definitie_info) > 4000 THEN v_kpi_definitie_info := SUBSTR (TRIM (v_kpi_definitie_info), 1, 4000); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Informatie wordt afgebroken tot [' || v_kpi_definitie_info || ']'); END IF; IF v_kpi_definitie_drempels_0 IS NOT NULL AND v_kpi_definitie_drempels_70 IS NOT NULL AND v_kpi_definitie_drempels_90 IS NOT NULL AND v_kpi_definitie_drempels_100 IS NOT NULL THEN v_kpi_definitie_drempels_tot := TRIM (v_kpi_definitie_drempels_0 || '|' || v_kpi_definitie_drempels_70 || '|' || v_kpi_definitie_drempels_90 || '|' || v_kpi_definitie_drempels_100); IF LENGTH (v_kpi_definitie_drempels_tot) > 20 THEN v_kpi_definitie_drempels_tot := SUBSTR (TRIM (v_kpi_definitie_drempels_tot), 1, 20); fac.imp_writelog ( p_import_key, 'W', v_aanduiding, 'Dermpels wordt afgebroken tot [' || v_kpi_definitie_drempels_tot || ']'); END IF; ELSE v_ongeldig := 1; fac.imp_writelog (p_import_key, 'W', v_aanduiding, 'Alle drempeles MOETEN gevuld zijn: deze regel wordt overgeslagen'); END IF; -- Insert geformatteerde import record IF v_ongeldig = 0 THEN BEGIN INSERT INTO YKPN_IMP_KPI_DEFINITIE ( KPI_DEFINITIE_CODE, KPI_DEFINITIE_OMSCHRIJVING, KPI_DEFINITIE_INFO, KPI_DEFINITIE_CATEGORIE1, KPI_DEFINITIE_CATEGORIE2, KPI_DEFINITIE_DREMPELS) VALUES (v_kpi_definitie_code, v_kpi_definitie_omschrijving, v_kpi_definitie_info, v_kpi_definitie_categorie1, v_kpi_definitie_categorie2, v_kpi_definitie_drempels_tot); v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'E', v_aanduiding || v_errormsg, 'Fout bij toevoegen regel aan importtabel YKPN_IMP_KPI_DEFINITIE.'); 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', 'KPI Definitie: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), ''); fac.imp_writelog ( p_import_key, 'S', 'KPI Definitie: aantal 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, 100); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_errormsg, 'Inleesproces KPI Definitie afgebroken!'); END YKPN_IMPORT_KPI_DEFINITIE; / CREATE OR REPLACE PROCEDURE ykpn_update_kpi_definitie (p_import_key IN NUMBER) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_count_error NUMBER (10); v_count NUMBER (10); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_ongeldig NUMBER (1); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); CURSOR c_kpi_defs IS SELECT * FROM YKPN_IMP_KPI_DEFINITIE; -- MAIN BEGIN FOR rec_ins IN c_kpi_defs LOOP BEGIN v_count_tot := v_count_tot + 1; v_aanduiding := rec_ins.kpi_definitie_code || ' - ' || rec_ins.kpi_definitie_categorie1 || '-' || rec_ins.kpi_definitie_categorie2; v_errorhint := 'Fout bij insert van kpi definitie'; IF rec_ins.kpi_definitie_code IS NOT NULL AND rec_ins.kpi_definitie_categorie1 IS NOT NULL AND rec_ins.kpi_definitie_categorie2 IS NOT NULL AND rec_ins.kpi_definitie_omschrijving IS NOT NULL AND rec_ins.kpi_definitie_drempels IS NOT NULL THEN INSERT INTO kpi_definitie ( KPI_DEFINITIE_CODE, KPI_DEFINITIE_OMSCHRIJVING, KPI_DEFINITIE_INFO, KPI_DEFINITIE_CATEGORIE1, KPI_DEFINITIE_CATEGORIE2, KPI_DEFINITIE_DREMPELS) VALUES (rec_ins.kpi_definitie_code, rec_ins.kpi_definitie_omschrijving, rec_ins.kpi_definitie_info, rec_ins.kpi_definitie_categorie1, rec_ins.kpi_definitie_categorie2, rec_ins.kpi_definitie_drempels ); ELSE fac.imp_writelog ( p_import_key, 'E', v_aanduiding, 'Code, Omschrijving, Categorie1 en 2 en drempels mogen niet leeg zijn'); END IF; EXCEPTION WHEN OTHERS THEN v_count_error := v_count_error + 1; oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, v_errorhint); COMMIT; END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 150); v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', 'Importproces KPI Definitie afgebroken!', v_errormsg); END YKPN_UPDATE_KPI_DEFINITIE; / -- Hieronder alle KPI views -- KPI Kwaliteit: Jaarplan CREATE OR REPLACE VIEW ykpn_v_kpi1 AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'BK1'), scores_kpn AS (SELECT m.mld_melding_key, dloc.alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, COALESCE(fac.safe_to_number(BK_1.mld_kenmerkmelding_waarde),0) BK1_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 3424) BK_1, alg_locatie dloc WHERE m.mld_stdmelding_key = 1841 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND BK_1.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, BK1_score score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_kpn k) m; -- KPI Kwaliteit: Jaarplan CREATE OR REPLACE VIEW ykpn_v_kpi2 AS WITH normen AS (SELECT kpi_definitie_key, kpi_definitie_code kpi_code, kpi_definitie_categorie1 kpi_cat1, kpi_definitie_categorie2 kpi_cat2, kpi_definitie_drempels normscores, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 1)) n000, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 2)) n070, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 3)) n090, fac.safe_to_number(REGEXP_SUBSTR(kpi_definitie_drempels, '[^|]+', 1, 4)) n100 FROM kpi_definitie WHERE kpi_definitie_code = 'JP'), scores_kpn AS (SELECT m.mld_melding_key, dloc.alg_locatie_key, TRUNC(m.mld_melding_einddatum, 'MM') periode, DECODE (COALESCE(fac.safe_to_number(JP_1.mld_kenmerkmelding_waarde),0), 1601, 1, 1602, 2, 1603, 3, 0) JP_score FROM mld_melding m, (SELECT * FROM mld_kenmerkmelding WHERE mld_kenmerkmelding_verwijder IS NULL AND mld_kenmerk_key = 3447) JP_1, alg_locatie dloc WHERE m.mld_stdmelding_key = 1841 AND m.mld_melding_status NOT IN (1) AND dloc.alg_locatie_key = m.mld_alg_locatie_key AND JP_1.mld_melding_key(+) = m.mld_melding_key ) SELECT kpi_definitie_key, periode kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, mld_melding_key kpi_score_refkey, n000, n070, n090, n100, kpi.getNormScore(score, n000, n070, n090, n100) kpi_score_score, normscores kpi_score_norm_score, SUBSTR( TO_CHAR(score), 1, 20) kpi_score_drempels FROM ( SELECT n.kpi_definitie_key, n.normscores, k.mld_melding_key, k.alg_locatie_key, k.periode, n.kpi_cat1 proces, n.kpi_cat2 onderdeel, JP_score score, n.n000, n.n070, n.n090, n.n100 FROM normen n, scores_kpn k) m; -- KPI Kwaliteit: samengevoegd CREATE OR REPLACE VIEW ykpn_v_kpi_kwaliteit ( kpi_definitie_key, kpi_score_datum, alg_locatie_key, kpi_score_xmlnode, kpi_score_refkey, kpi_score_score, kpi_score_norm_score, kpi_score_drempels ) AS SELECT kpi_definitie_key, kpi_score_datum, alg_locatie_key, 'melding' kpi_score_xmlnode, NULL kpi_score_refkey, kpi.getNormScore (SUM (kpi_score_drempels), n000, n070, n090, n100), MIN (KPI_SCORE_NORM_SCORE), SUM (kpi_score_drempels) FROM ( SELECT * FROM ykpn_v_kpi1 UNION SELECT * FROM ykpn_v_kpi2) GROUP BY kpi_definitie_key, kpi_score_datum, alg_locatie_key, n000, n070, n090, n100; -- Verzamel alle KPI scores CREATE OR REPLACE VIEW ykpn_v_kpi_all AS SELECT * FROM ykpn_v_kpi_kwaliteit --UNION ALL -- SELECT * FROM ykpn_v_kpi_etc ; -- EINDE KPI -- Rapport voor alle attributen voor de kunstobjecten CREATE OR REPLACE VIEW ykpn_v_rap_kunst AS SELECT ins_deel_omschrijving id, d.ins_deel_key, d.alg_gebouw_omschrijving gebouw, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 102 AND d.ins_deel_key = ikd.ins_deel_key) titel, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 61 AND d.ins_deel_key = ikd.ins_deel_key) n_advies, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 62 AND d.ins_deel_key = ikd.ins_deel_key) n_uit, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 63 AND d.ins_deel_key = ikd.ins_deel_key) n_top, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 64 AND d.ins_deel_key = ikd.ins_deel_key) n_rate, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 65 AND d.ins_deel_key = ikd.ins_deel_key) n_collectie, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 81 AND d.ins_deel_key = ikd.ins_deel_key) afmeting, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 82 AND d.ins_deel_key = ikd.ins_deel_key) galerie, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 85 AND d.ins_deel_key = ikd.ins_deel_key) ruimte_hiskia, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 86 AND d.ins_deel_key = ikd.ins_deel_key) aankoop_bedrag, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 87 AND d.ins_deel_key = ikd.ins_deel_key) aankoopdatum, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 88 AND d.ins_deel_key = ikd.ins_deel_key) categorie, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 89 AND d.ins_deel_key = ikd.ins_deel_key) geschatte_waarde, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 90 AND d.ins_deel_key = ikd.ins_deel_key) geschatte_waarde_yask, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 91 AND d.ins_deel_key = ikd.ins_deel_key) oplage, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 92 AND d.ins_deel_key = ikd.ins_deel_key) status, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 101 AND d.ins_deel_key = ikd.ins_deel_key) vakgebied, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 103 AND d.ins_deel_key = ikd.ins_deel_key) kunstenaar, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 104 AND d.ins_deel_key = ikd.ins_deel_key) materiaal, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 121 AND d.ins_deel_key = ikd.ins_deel_key) jaar, (SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel ikd WHERE ins_kenmerk_key = 281 AND d.ins_deel_key = ikd.ins_deel_key) yask_verant FROM ins_v_deel_gegevens d WHERE ins_discipline_key = 1521 ORDER BY 4, 1; -- YKPN#55423 Rapport voor verwijderde afspraken CREATE OR REPLACE VIEW ykpn_v_rap_bezdel AS SELECT t.fac_tracking_key, t.fac_tracking_datum, t.fac_srtnotificatie_key, t.fac_tracking_refkey, t.fac_tracking_oms, t.prs_perslid_key, sn.fac_srtnotificatie_code, p.prs_perslid_naam_full as prs_perslid_naam FROM fac_tracking t, fac_srtnotificatie sn, prs_v_perslid_fullnames_all p WHERE p.prs_perslid_key = t.prs_perslid_key AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key AND SUBSTR (sn.fac_srtnotificatie_code, 1, 3) = 'BEZ' AND SUBSTR (UPPER (t.fac_tracking_oms), 1, 22) = 'AFSPRAAK IS VERWIJDERD' ORDER BY t.fac_tracking_refkey, t.fac_tracking_datum DESC; CREATE OR REPLACE VIEW ykpn_v_graph_servicedesk ( discipline, aantal ) AS SELECT d.ins_discipline_omschrijving, COUNT ( * ) FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND TRUNC (mld_melding_datum, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) AND std.mld_ins_discipline_key IN (34, 48, 38) -- compliment AND std.mld_ins_discipline_key = d.ins_discipline_key GROUP BY ins_discipline_omschrijving UNION ALL SELECT 'Melding', COUNT ( * ) FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND TRUNC (mld_melding_datum, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) AND std.mld_ins_discipline_key NOT IN (34, 48, 38) -- compliment AND std.mld_ins_discipline_key = d.ins_discipline_key UNION ALL SELECT 'Reservering', COUNT ( * ) FROM res_rsv_ruimte WHERE TRUNC (res_rsv_ruimte_van, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) AND res_rsv_ruimte_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_graph_meldingen ( discipline, aantal ) AS SELECT d.ins_discipline_omschrijving, COUNT ( * ) FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND TRUNC (mld_melding_datum, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) AND std.mld_ins_discipline_key NOT IN (34, 48, 38) -- compliment AND std.mld_ins_discipline_key = d.ins_discipline_key GROUP BY ins_discipline_omschrijving; CREATE OR REPLACE VIEW ykpn_v_graph_bezoekers ( locatie, aantal ) AS SELECT alg_locatie_omschrijving, COUNT ( * ) FROM bez_bezoekers b, bez_afspraak a, alg_locatie l WHERE b.bez_afspraak_key = a.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND TRUNC (bez_afspraak_datum, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) GROUP BY alg_locatie_omschrijving; CREATE OR REPLACE VIEW ykpn_v_graph_parkeerplaats ( locatie, aantal ) AS SELECT alg_locatie_omschrijving, COUNT ( * ) FROM bez_bezoekers b, bez_afspraak a, alg_locatie l, res_rsv_deel rrd WHERE b.bez_afspraak_key = a.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND b.bez_bezoekers_key = rrd.bez_bezoekers_key AND TRUNC (bez_afspraak_datum, 'MM') = ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -1) GROUP BY alg_locatie_omschrijving; CREATE OR REPLACE VIEW ykpn_v_rap_facturatie AS SELECT m.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr, ot.mld_typeopdr_omschrijving, m.mld_melding_datum, o.mld_opdr_datumbegin, d.alg_district_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving, aog.alg_gebouw_code, aog.alg_gebouw_naam, ins_discipline_omschrijving, mld_stdmelding_omschrijving, TO_CHAR(SUBSTR(mld_melding_omschrijving,1,4000)) mld_melding_omschrijving, ok.prs_kostenplaats_nr, op.prs_perslid_naam_full, uit.naam, mld_statuses_omschrijving, mld_statusopdr_omschrijving, m.mld_melding_einddatum, mld.getmeldingstatusdate(m.mld_melding_key, 5) mld_melding_afgemeld, o.mld_opdr_omschrijving, mld.getopdrachtstatusdate(o.mld_opdr_key, 6) mld_opdr_afgemeld, DECODE (o.mld_typeopdr_key, 101, mld_opdr_kosten, -- procuratie opdracht 2481, mld_opdr_kosten, -- procuratie zonder goedkeuring 2482, mld_opdr_kosten -- procuratie evenementen ) procuratiebedrag, mld_opdr_materiaal opdrachtbedrag, (SELECT mld_kenmerkopdr_aanmaak FROM mld_kenmerkopdr ko, mld_kenmerk k where ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 221) factuuraanmaak, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k where ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 221) factuurbedrag, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k where ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 381) po_nummer, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k where ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 401) afdeling FROM mld_melding m, mld_opdr o, mld_typeopdr ot, alg_locatie l, alg_district d, mld_stdmelding std, ins_tab_discipline di, prs_kostenplaats ok, prs_v_perslid_fullnames op, mld_v_uitvoerende uit, alg_v_allonrgoed_gegevens aog, mld_statuses ms, mld_statusopdr os WHERE m.mld_melding_key = o.mld_melding_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = di.ins_discipline_key AND o.prs_kostenplaats_key = ok.prs_kostenplaats_key(+) AND o.prs_perslid_key = op.prs_perslid_key(+) AND o.mld_uitvoerende_keys = uit.mld_uitvoerende_key(+) AND m.mld_melding_status = ms.mld_statuses_key AND o.mld_statusopdr_key = os.mld_statusopdr_key(+) AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND NOT EXISTS (SELECT mld_kenmerkopdr_key FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 301 AND fac.safe_to_number(mld_kenmerkopdr_waarde) = 1) UNION ALL SELECT m.mld_melding_key, 0 mld_opdr_bedrijfopdr_volgnr, NULL mld_typeopdr_omschrijving, m.mld_melding_datum, NULL mld_opdr_datumbegin, d.alg_district_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving, aog.alg_gebouw_code, aog.alg_gebouw_naam, ins_discipline_omschrijving, mld_stdmelding_omschrijving, TO_CHAR(SUBSTR(mld_melding_omschrijving,1,4000)) mld_melding_omschrijving, NULL prs_kostenplaats_nr, NULL prs_perslid_naam_full, NULL naam, mld_statuses_omschrijving, NULL procuratiebedrag, m.mld_melding_einddatum, mld.getmeldingstatusdate(m.mld_melding_key, 5) mld_melding_afgemeld, NULL mld_opdr_omschrijving, NULL mld_opdr_afgemeld, NULL procuratiebedrag, NULL opdrachtbedrag, (SELECT mld_kenmerkmelding_aanmaak FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 221) factuuraanmaak, (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde) FROM mld_kenmerkmelding km, mld_kenmerk k WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 221) factuurbedrag, NULL po_nummer, NULL afdeling FROM mld_melding m, alg_locatie l, alg_district d, mld_stdmelding std, ins_tab_discipline di, alg_v_allonrgoed_gegevens aog, mld_statuses ms WHERE m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = di.ins_discipline_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys; -- Rapportage 1: -- Alle hoofdmeldingen of onderliggende opdrachten waar het veld 'bedrag gefactureerd' staat ingevuld. -- Alle procuraties die zijn doorlopen (ongeacht de status open / afgemeld / etc) CREATE OR REPLACE VIEW ykpn_v_rap_facturatie1 AS SELECT * FROM YKPN_V_RAP_FACTURATIE WHERE factuurbedrag IS NOT NULL OR procuratiebedrag IS NOT NULL UNION SELECT * FROM YKPN_V_RAP_FACTURATIE WHERE mld_opdr_bedrijfopdr_volgnr = 0 AND mld_melding_key IN (SELECT mld_melding_key FROM YKPN_V_RAP_FACTURATIE WHERE factuurbedrag IS NOT NULL OR procuratiebedrag IS NOT NULL); -- Rapportage 2: -- Alle opdrachten met opdrachttypes 'uitvoer opdracht' en 'bestelling' waar het veld 'bedrag gefactureerd' niet is ingevuld CREATE OR REPLACE VIEW ykpn_v_rap_facturatie2 AS SELECT * FROM YKPN_V_RAP_FACTURATIE WHERE mld_typeopdr_omschrijving = 'Uitvoering opdracht' OR mld_typeopdr_omschrijving = 'Bestelling' UNION SELECT * FROM YKPN_V_RAP_FACTURATIE WHERE mld_opdr_bedrijfopdr_volgnr = 0 AND mld_melding_key IN (SELECT mld_melding_key FROM YKPN_V_RAP_FACTURATIE WHERE mld_typeopdr_omschrijving = 'Uitvoering opdracht' OR mld_typeopdr_omschrijving = 'Bestelling'); -- Gewijzigde financiele rapportage gebasseerd op afgeronde procuraties. CREATE OR REPLACE VIEW ykpn_v_rap_fin_facturatie_p AS -- YKPN#89422: Kolom 'totaal_kosten' toegevoegd; 'Opdracht_kosten' veranderd naar 'materiaal_kosten'; kolom 'Correctie' toegevoegd; en 3 kolommen betreft fee percentage SELECT m.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr, ot.mld_typeopdr_omschrijving, m.mld_melding_datum, o.mld_opdr_datumbegin, d.alg_district_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving, aog.alg_gebouw_code, aog.alg_gebouw_naam, ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_melding_omschrijving, ok.prs_kostenplaats_nr, op.prs_perslid_naam_full behandelaar, (SElECT prs_perslid_email FROM prs_perslid WHERE prs_perslid_key=o.prs_perslid_key) email_behandelaar, uit.naam, mld_statuses_omschrijving, mld_statusopdr_omschrijving, m.mld_melding_einddatum, mld.getmeldingstatusdate (m.mld_melding_key, 5) mld_melding_afgemeld, o.mld_opdr_omschrijving, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) mld_opdr_afgemeld, (SELECT SUM(ROUND(mom.MLD_OPDR_MATERIAAL_AANTAL*mom.MLD_OPDR_MATERIAAL_PRIJS,2)) from mld_opdr_materiaal mom, fac_usrdata fud where mom.mld_opdr_key=o.mld_opdr_key AND mom.FAC_USRDATA_KEY=fud.FAC_USRDATA_KEY AND fud.FAC_USRDATA_OMSCHR LIKE 'VFS 3%' AND fud.FAC_USRDATA_VERWIJDER IS NULL) vfs_3p_fee, -- fee 3p (SELECT SUM(ROUND(mom.MLD_OPDR_MATERIAAL_AANTAL*mom.MLD_OPDR_MATERIAAL_PRIJS,2)) from mld_opdr_materiaal mom, fac_usrdata fud where mom.mld_opdr_key=o.mld_opdr_key AND mom.FAC_USRDATA_KEY=fud.FAC_USRDATA_KEY AND fud.FAC_USRDATA_OMSCHR LIKE 'VFS 4%' AND fud.FAC_USRDATA_VERWIJDER IS NULL) vfs_4p_fee, -- fee 4p (SELECT SUM(ROUND(mom.MLD_OPDR_MATERIAAL_AANTAL*mom.MLD_OPDR_MATERIAAL_PRIJS,2)) from mld_opdr_materiaal mom, fac_usrdata fud where mom.mld_opdr_key=o.mld_opdr_key AND mom.FAC_USRDATA_KEY=fud.FAC_USRDATA_KEY AND fud.FAC_USRDATA_OMSCHR LIKE 'VFS afwijkende%' AND fud.FAC_USRDATA_VERWIJDER IS NULL) vfs_afw_fee, -- afwijkende fee mld_opdr_materiaal materiaal_bedrag, -- materiaal kosten mld_opdr_kosten - mld_opdr_materiaal correctie, -- totale kosten minus materiaal kosten mld_opdr_kosten totaal_kosten, -- totale kosten NULL datum_goedkeuring, -- fingoe fg.totaal, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 381) -- PO Nummer po_nummer, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 401) -- Bedrag wordt gefinancieerd door andere afdeling afdeling, (SELECT ud.fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5001 AND ud.fac_usrdata_key=ko.mld_kenmerkopdr_waarde) -- Capex/Opex capex_opex, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 1821) -- startdatum startDatum, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 1822) -- verwachte oplosdatum oplosdatum FROM mld_melding m, mld_opdr o, mld_typeopdr ot, alg_locatie l, alg_district d, mld_stdmelding std, ins_tab_discipline di, prs_kostenplaats ok, prs_v_perslid_fullnames op, mld_v_uitvoerende uit, alg_v_allonrgoed_gegevens aog, mld_statuses ms, mld_statusopdr os, ( SELECT o2.mld_melding_key, SUM (fin_factuurregel_totaal) totaal FROM fin_factuur f, fin_factuurregel fr, mld_opdr o2 WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.fin_factuur_verwijder IS NULL AND f.mld_opdr_key = o2.mld_opdr_key GROUP BY o2.mld_melding_key) fg WHERE m.mld_melding_key = o.mld_melding_key AND m.mld_melding_key = fg.mld_melding_key(+) AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = di.ins_discipline_key AND o.prs_kostenplaats_key = ok.prs_kostenplaats_key(+) AND o.prs_perslid_key = op.prs_perslid_key(+) AND o.mld_uitvoerende_keys = uit.mld_uitvoerende_key(+) AND m.mld_melding_status = ms.mld_statuses_key AND o.mld_statusopdr_key = os.mld_statusopdr_key(+) AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND ot.mld_typeopdr_key IN (101, 2481, 2482) -- procuratie, procuratie zonder goedkeuring, procuratie evenementen AND NOT EXISTS (SELECT mld_kenmerkopdr_key FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 181 -- ongeldige procuratie AND fac.safe_to_number(mld_kenmerkopdr_waarde) = 1); -- Gewijzigde financiele rapportage gebasseerd op ingelegde facturen. -- Depricated YKPN#59688 CREATE OR REPLACE VIEW ykpn_v_rap_fin_facturatie AS SELECT m.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr, ot.mld_typeopdr_omschrijving, m.mld_melding_datum, o.mld_opdr_datumbegin, d.alg_district_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving, aog.alg_gebouw_code, aog.alg_gebouw_naam, ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_melding_omschrijving, ok.prs_kostenplaats_nr, op.prs_perslid_naam_full, uit.naam, mld_statuses_omschrijving, mld_statusopdr_omschrijving, m.mld_melding_einddatum, mld.getmeldingstatusdate (m.mld_melding_key, 5) mld_melding_afgemeld, o.mld_opdr_omschrijving, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) mld_opdr_afgemeld, mld_opdr_materiaal opdrachtbedrag, DECODE (fin_factuur_statuses_key, 6, COALESCE (datum_goedkeuring, datum_fiattering), 7, COALESCE (datum_goedkeuring, datum_fiattering)) datum_goedkeuring, -- fingoe fg.totaal, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 381) po_nummer, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 401) afdeling FROM mld_melding m, mld_opdr o, mld_typeopdr ot, alg_locatie l, alg_district d, mld_stdmelding std, ins_tab_discipline di, prs_kostenplaats ok, prs_v_perslid_fullnames op, mld_v_uitvoerende uit, alg_v_allonrgoed_gegevens aog, mld_statuses ms, mld_statusopdr os, (SELECT mld_opdr_key, fin_factuur_key, totaal, fin_factuur_statuses_key, (SELECT MIN (fac_tracking_datum) FROM fac_tracking t WHERE t.fac_tracking_refkey = fgg.fin_factuur_key AND t.fac_srtnotificatie_key = 132) datum_goedkeuring, -- fingoe (SELECT MIN (fac_tracking_datum) FROM fac_tracking t WHERE t.fac_tracking_refkey = fgg.fin_factuur_key AND t.fac_srtnotificatie_key = 131) datum_fiattering -- finfia FROM ( SELECT f.mld_opdr_key, f.fin_factuur_key, SUM (fin_factuurregel_totaal) totaal, fin_factuur_statuses_key FROM fin_factuur f, fin_factuurregel fr WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.fin_factuur_verwijder IS NULL GROUP BY mld_opdr_key, f.fin_factuur_key, fin_factuur_statuses_key) fgg) fg WHERE m.mld_melding_key = o.mld_melding_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = di.ins_discipline_key AND o.prs_kostenplaats_key = ok.prs_kostenplaats_key(+) AND o.prs_perslid_key = op.prs_perslid_key(+) AND o.mld_uitvoerende_keys = uit.mld_uitvoerende_key(+) AND m.mld_melding_status = ms.mld_statuses_key AND o.mld_statusopdr_key = os.mld_statusopdr_key(+) AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND o.mld_opdr_key = fg.mld_opdr_key AND NOT EXISTS (SELECT o2.mld_opdr_key FROM mld_opdr o2 WHERE o2.mld_typeopdr_key IN (101, 2481, 2482) -- procuratie, procuratie zonder goedkeuring, procuratie evenementen AND o2.mld_melding_key = o.mld_melding_key AND o2.mld_statusopdr_key = 6 -- afgemeld AND NOT EXISTS (SELECT mld_kenmerkopdr_key FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o2.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 181 -- ongeldige procuratie AND fac.safe_to_number(mld_kenmerkopdr_waarde) = 1)); CREATE OR REPLACE VIEW ykpn_v_rap_fin_facturatie_f AS SELECT m.mld_melding_key, o.mld_opdr_bedrijfopdr_volgnr, ot.mld_typeopdr_omschrijving, m.mld_melding_datum, o.mld_opdr_datumbegin, d.alg_district_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving, aog.alg_gebouw_code, aog.alg_gebouw_naam, ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_melding_omschrijving, ok.prs_kostenplaats_nr, op.prs_perslid_naam_full, (SELECT p.prs_perslid_email FROM prs_perslid p WHERE p.prs_perslid_key=o.prs_perslid_key) prs_perslid_email, uit.naam, mld_statuses_omschrijving, mld_statusopdr_omschrijving, m.mld_melding_einddatum, mld.getmeldingstatusdate (m.mld_melding_key, 5) mld_melding_afgemeld, o.mld_opdr_omschrijving, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) mld_opdr_afgemeld, mld_opdr_materiaal opdrachtbedrag, mld_opdr_kosten opdrachttotaal, DECODE (fin_factuur_statuses_key, 6, 'Akkoord', 7, 'Akkoord') factuur_akkoord, DECODE (fin_factuur_statuses_key, 6, COALESCE (datum_goedkeuring, datum_fiattering), 7, COALESCE (datum_goedkeuring, datum_fiattering)) datum_goedkeuring, -- fingoe fg.totaal, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 381) po_nummer, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 401) afdeling, pr.mld_statusopdr_key, pr.po_nummer po_nummer_mld, DECODE (pr.mld_statusopdr_key, 6, 'OK', 'NOK') procuratie_status, DECODE (pr.mld_statusopdr_key, 6, DECODE (pr.po_nummer, NULL, 'NOK', 'OK'), 'NOK') procuratie_PO_status, ma.mandaat FROM mld_melding m, mld_opdr o, mld_typeopdr ot, alg_locatie l, alg_district d, mld_stdmelding std, ins_tab_discipline di, prs_kostenplaats ok, prs_v_perslid_fullnames op, mld_v_uitvoerende uit, alg_v_allonrgoed_gegevens aog, mld_statuses ms, mld_statusopdr os, (SELECT mld_opdr_key, fin_factuur_key, totaal, fin_factuur_statuses_key, (SELECT MAX (fac_tracking_datum) FROM fac_tracking t WHERE t.fac_tracking_refkey = fgg.fin_factuur_key AND t.fac_srtnotificatie_key = 132) datum_goedkeuring, -- fingoe (SELECT MIN (fac_tracking_datum) FROM fac_tracking t WHERE t.fac_tracking_refkey = fgg.fin_factuur_key AND t.fac_srtnotificatie_key = 131) datum_fiattering -- finfia FROM ( SELECT f.mld_opdr_key, f.fin_factuur_key, SUM (fin_factuurregel_totaal) totaal, fin_factuur_statuses_key FROM fin_factuur f, fin_factuurregel fr WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.fin_factuur_verwijder IS NULL GROUP BY mld_opdr_key, f.fin_factuur_key, fin_factuur_statuses_key) fgg) fg, ( SELECT o2.mld_melding_key, MAX (o2.mld_statusopdr_key) mld_statusopdr_key, MAX (po_nummer) po_nummer FROM mld_opdr o2, (SELECT kop.mld_opdr_key, mld_kenmerkopdr_waarde po_nummer FROM mld_kenmerkopdr kop, mld_kenmerk kp WHERE kop.mld_kenmerk_key = kp.mld_kenmerk_key AND kp.mld_srtkenmerk_key = 381 -- PO Nummer ) po WHERE o2.mld_typeopdr_key IN (101, 2481, 2482) -- procuratie, procuratie zonder goedkeuring, procuratie evenementen AND o2.mld_opdr_key = po.mld_opdr_key(+) AND NOT EXISTS (SELECT mld_kenmerkopdr_key FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o2.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 181 -- ongeldige procuratie AND fac.safe_to_number ( ko.mld_kenmerkopdr_waarde) = 1) GROUP BY o2.mld_melding_key) pr, ( SELECT ko.mld_opdr_key, FAC.safe_to_number(ko.mld_kenmerkopdr_waarde) mandaat FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 3521 -- mandaatbedrag AND ko.mld_kenmerkopdr_verwijder IS NULL) ma WHERE m.mld_melding_key = o.mld_melding_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = d.alg_district_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = di.ins_discipline_key AND o.prs_kostenplaats_key = ok.prs_kostenplaats_key(+) AND o.prs_perslid_key = op.prs_perslid_key(+) AND o.mld_uitvoerende_keys = uit.mld_uitvoerende_key(+) AND m.mld_melding_status = ms.mld_statuses_key AND o.mld_statusopdr_key = os.mld_statusopdr_key(+) AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND o.mld_opdr_key = fg.mld_opdr_key(+) AND o.mld_opdr_key = ma.mld_opdr_key(+) AND o.mld_melding_key = pr.mld_melding_key(+) AND TRUNC(o.mld_opdr_datumbegin)>=TO_DATE('01-01-2020','DD-MM-YYYY'); -- Facturatie tabblad F --CREATE OR REPLACE VIEW ykpn_v_rap_fin_facturatie_f --AS -- SELECT * -- FROM ykpn_v_rap_fin_facturatie f; -- Overzicht van opdrachten zonder factuur. CREATE OR REPLACE VIEW ykpn_v_opdr_zonder_factuur AS SELECT m.mld_melding_key, mld_opdr_key, m.mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr mld_opdr_id, mld_melding_datum, mld_opdr_datumbegin, d.ins_discipline_omschrijving, mld_stdmelding_omschrijving, mld_melding_onderwerp, b.prs_bedrijf_naam, mld_opdr_kosten, alg_locatie_code, alg_locatie_omschrijving, mld_statusopdr_omschrijving, mld_typeopdr_omschrijving FROM mld_opdr o, mld_melding m, alg_locatie l, mld_stdmelding std, ins_tab_discipline d, prs_bedrijf b, mld_statusopdr so, mld_typeopdr t WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND o.mld_uitvoerende_keys = b.prs_bedrijf_key AND o.mld_statusopdr_key = so.mld_statusopdr_key AND o.mld_typeopdr_key = t.mld_typeopdr_key AND o.mld_typeopdr_key IN (42, -- Uitvoering_opdracht 5, -- Uitvoering melding 143, -- Uitvoering offerte 142, -- Bestelling 381 -- Uitvoering uren intern ) AND NOT EXISTS (SELECT fin_factuur_key FROM fin_factuur f WHERE f.mld_opdr_key = o.mld_opdr_key); -- Overzicht ontvangen facturen t.o.v. contractafspraken CREATE OR REPLACE VIEW ykpn_v_cntfinalg_kosten AS SELECT c.boekmaand, g.alg_gebouw_naam gebouw, cnt_contract_nummer_intern contractnummer, cnt_contract_omschrijving omschrijving, COALESCE((SELECT SUM (fin_factuurregel_totaal) FROM fin_factuur f, fin_factuurregel fr, fin_kenmerkfactregel kfr WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.cnt_contract_key = c.cnt_contract_key AND fr.fin_factuurregel_key = kfr.fin_factuurregel_key AND fac.safe_to_number (kfr.fin_kenmerkfactregel_waarde) = g.alg_gebouw_key AND f.fin_factuur_boekmaand = c.boekmaand),0) bedrag, COALESCE (ROUND ((cnt_contract_plaats_gewicht) / 12, 2), 0) contractwaarde, COALESCE (ROUND ((cnt_contract_plaats_gewicht) / 12, 2), 0) - COALESCE((SELECT SUM (fin_factuurregel_totaal) FROM fin_factuur f, fin_factuurregel fr, fin_kenmerkfactregel kfr WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.cnt_contract_key = c.cnt_contract_key AND fr.fin_factuurregel_key = kfr.fin_factuurregel_key AND fac.safe_to_number (kfr.fin_kenmerkfactregel_waarde) = g.alg_gebouw_key AND f.fin_factuur_boekmaand = c.boekmaand),0) delta FROM ykpn_freeze_contract c, alg_gebouw g WHERE c.cnt_alg_plaats_key = g.alg_gebouw_key AND ins_discipline_key IN (421,2221) -- key voor contractsoorten 421=Vast(a), 2221=Suppletie(a) AND c.freezedate > SYSDATE - 365; -- En nu een variant die we vergelijken met de verkoop contracten (lees de contractafspraken met KPN) CREATE OR REPLACE VIEW ykpn_v_cntfinalg_verk_kosten AS SELECT c.boekmaand, g.alg_gebouw_naam gebouw, cnt_contract_nummer_intern contractnummer, cnt_contract_omschrijving omschrijving, COALESCE((SELECT SUM (fin_factuurregel_totaal) FROM fin_factuur f, fin_factuurregel fr, fin_kenmerkfactregel kfr, ykpn_freeze_contract c_in WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.cnt_contract_key = c_in.cnt_contract_key AND fr.fin_factuurregel_key = kfr.fin_factuurregel_key AND fac.safe_to_number (kfr.fin_kenmerkfactregel_waarde) = g.alg_gebouw_key AND c_in.cnt_contract_nummer_intern LIKE REPLACE(c.cnt_contract_nummer_intern, 'V', '%') AND c_in.ins_discipline_key IN (421, 2221) -- vast A(421) en suppletie contract a(2221) AND c_in.cnt_alg_plaats_key = c.cnt_alg_plaats_key AND f.fin_factuur_boekmaand = c.boekmaand),0) bedrag, COALESCE (ROUND ((cnt_contract_plaats_gewicht) / 12, 2), 0) contractwaarde, COALESCE (ROUND ((cnt_contract_plaats_gewicht) / 12, 2), 0) - COALESCE((SELECT SUM (fin_factuurregel_totaal) FROM fin_factuur f, fin_factuurregel fr, fin_kenmerkfactregel kfr, ykpn_freeze_contract c_in WHERE f.fin_factuur_key = fr.fin_factuur_key AND f.cnt_contract_key = c_in.cnt_contract_key AND fr.fin_factuurregel_key = kfr.fin_factuurregel_key AND fac.safe_to_number (kfr.fin_kenmerkfactregel_waarde) = g.alg_gebouw_key AND c_in.cnt_contract_nummer_intern LIKE REPLACE(c.cnt_contract_nummer_intern, 'V', '%') AND c_in.ins_discipline_key IN (421, 2221) -- vast A(421) en suppletie contract a(2221) AND c_in.cnt_alg_plaats_key = c.cnt_alg_plaats_key AND f.fin_factuur_boekmaand = c.boekmaand),0) delta FROM ykpn_freeze_contract c, alg_gebouw g WHERE c.cnt_alg_plaats_key = g.alg_gebouw_key AND ins_discipline_key = 902 -- vast a verkoop AND c.freezedate > SYSDATE - 365; -- Het rapport bevat trackingsregels van procuratieopdrachten waarbij de aanpassing aan de kosten van de procuratieopdracht -- later gemaakt is dan de datum waarop de procuratieopdracht is afgemeld. We kijken maximaal 1 jaar terug. Om de aanpassing -- in kosten te kunnen vinden in de tracking wordt gezocht op de tekst 'Totaal' in de tracking. CREATE OR REPLACE VIEW ykpn_v_rap_procuratie_wijz AS SELECT fac_tracking_datum, fac_tracking_oms, pf.prs_perslid_naam_full FROM mld_opdr o, fac_tracking t, fac_srtnotificatie sn, prs_v_perslid_fullnames_all pf WHERE mld_typeopdr_key = 101 -- procuratieopdracht AND mld.getopdrachtstatusdate (o.mld_opdr_key, 6) < t.fac_tracking_datum AND t.fac_tracking_refkey = o.mld_opdr_key AND t.prs_perslid_key = pf.prs_perslid_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_xmlnode = 'opdracht' AND fac_tracking_oms LIKE '%Totaal%'; -- Notificatie naar de behandelaar als een procuratieopdracht afgemeld is. CREATE OR REPLACE VIEW ykpn_v_noti_procuratie_afm ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT DISTINCT 'CUST08', NULL, o.prs_perslid_key, 'Procuratieopdracht is afgemeld ' || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr, o.mld_opdr_key, NULL FROM mld_opdr o, fac_tracking t WHERE mld_typeopdr_key IN (101, 2481, 2482) -- procuratie, procuratie zonder goedkeuring, procuratie evenementen AND t.fac_tracking_refkey = o.mld_opdr_key AND t.fac_srtnotificatie_key = 60 -- ORDAFM AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_AFM') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_AFM'); -- Notificatie naar de behandelaar als een notitie is toegevoegd aan een procuratieopdracht of beoordeling RES. CREATE OR REPLACE VIEW ykpn_v_noti_procuratie_note ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT DISTINCT 'CUST08', NULL, o.prs_perslid_key, 'Notitie aan procuratie/beoording toegevoegd ' || o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr, o.mld_opdr_key, NULL FROM mld_opdr_note n, mld_opdr o WHERE n.mld_opdr_key = o.mld_opdr_key AND o.mld_typeopdr_key IN (101, 2481, 2482, 141) -- procuratie, procuratie zonder goedkeuring, procuratie evenement, beoordeling RES AND n.prs_perslid_key <> o.prs_perslid_key -- we gaan geen notificatie sturen als je als behandelaar zelf iets noteert. AND COALESCE (n.mld_opdr_note_wijzigdatum, n.mld_opdr_note_aanmaak) BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_NOTE') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_NOTE'); -- Notificatie die per mail naar de behandelaar van een melding wordt gestuurd indien de hoofdmelding wordt afgemeld, -- maar er onder de hoofdmelding een of meerdere procuraties hangen waar een het veld 'PO nummer' wel is voorzien van cijfers, -- maar waar geen vinkje is gezet bij het veld 'PO bedrag doorbelasten?'. (YKPN#55218) CREATE OR REPLACE VIEW ykpn_v_noti_procuratie_afm_po ( code, sender, receiver, text, key, xkey ) AS SELECT DISTINCT 'CUST09', NULL, o.prs_perslid_key, 'Melding ' || m.mld_melding_key || ' is recent afgemeld. Bij de procuratie is nog niet aangevinkt of het PO bedrag doorbelast moet worden.', m.mld_melding_key, NULL FROM mld_melding m, fac_tracking t, fac_srtnotificatie sn, mld_opdr o, mld_kenmerkopdr koPO, mld_kenmerk kPO WHERE t.fac_tracking_refkey = m.mld_melding_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'MLDAFM' AND m.mld_melding_key = o.mld_melding_key AND ( o.mld_typeopdr_key = 101 -- procuratie OR o.mld_typeopdr_key = 2481 -- procuratie zonder goedkeuring OR o.mld_typeopdr_key = 2482) -- procuratie evenementen AND o.mld_opdr_key = koPO.mld_opdr_key AND koPO.mld_kenmerk_key = kPO.mld_kenmerk_key AND kPO.mld_srtkenmerk_key = 381 -- PO Nummer AND fac.safe_to_number (koPO.mld_kenmerkopdr_waarde) IS NOT NULL AND NOT EXISTS (SELECT koBD.mld_kenmerkopdr_key FROM mld_kenmerkopdr koBD WHERE koBD.mld_kenmerk_key IN (3701, 5408, 5448) -- PO BEDRAG DOORBELASTEN? AND koBD.mld_opdr_key = o.mld_opdr_key AND koBD.mld_kenmerkopdr_waarde = '1') AND t.fac_tracking_datum BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_AFM_PO') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_PROCURATIE_AFM_PO'); -- YKPN#52215: CREATE OR REPLACE view ykpn_v_standplts_aanvr_res AS SELECT p.prs_perslid_naam_full AS aanvrager, pp.prs_perslid_email as email, wp.alg_locatie_code AS standplaats, a.bez_afspraak_key AS afspraaknr, a.bez_afspraak_datum AS afspraakdatum, a.bez_afspraak_gastheer AS gastheer, b.bez_afspraak_naam AS bezoeker, b.bez_afspraak_bedrijf AS bedrijf, ak.bez_actie_omschrijving AS actie, bkw.bez_kenmerkwaarde_waarde AS pincode, l.alg_locatie_code AS afspraakloc, l.alg_locatie_omschrijving AS afspraaklocatie, b.bez_bezoekers_done AS aangemeld, b.bez_bezoekers_out AS afgemeld FROM bez_bezoekers b, bez_kenmerkwaarde bkw, bez_afspraak a, bez_actie ak, prs_v_perslid_fullnames p, prs_perslid pp, alg_locatie l, prs_v_werkplek_gegevens wp, prs_v_werkplekperslid_gegevens wpp WHERE a.prs_perslid_key = p.prs_perslid_key AND a.alg_locatie_key = l.alg_locatie_key AND ak.bez_actie_key = a.bez_actie_key AND b.bez_afspraak_key = a.bez_afspraak_key AND bkw.bez_bezoekers_key = b.bez_bezoekers_key AND wpp.prs_werkplek_key = wp.prs_werkplek_key AND p.prs_perslid_key = wpp.prs_perslid_key AND p.prs_perslid_key = pp.prs_perslid_key AND bkw.bez_kenmerk_key = '1020' AND wp.alg_locatie_code = l.alg_locatie_code AND l.alg_locatie_code = wp.alg_locatie_code --AND a.bez_afspraak_datum >= TO_DATE ('01-01-2018', 'DD-MM-YYYY') ; -- De uren bij opdrachten worden geboekt door medewerkers van YASK. Bij de -- opdracht vullen zij met een kenmerk in welke werkzaamheden zij verrichten. -- Per gebouw is een projectcode (kenmerk bij gebouw) ingericht die match-d met -- de werkzaamheden bij de opdracht. CREATE OR REPLACE VIEW ykpn_v_opdrachturen AS SELECT m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdrid, o.mld_opdr_key, ou.mld_opdr_uren_key, g.alg_gebouw_omschrijving, g.alg_gebouw_upper, d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, std.mld_stdmelding_key, so.mld_statusopdr_omschrijving, o.mld_opdr_datumbegin, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) afgemeld, ou.mld_opdr_uren_datum, ou.mld_opdr_uren_besteed, o.mld_opdr_uurloon, ou.mld_opdr_uren_besteed * o.mld_opdr_uurloon totaal, ud.fac_usrdata_omschr soortwerk, pf.prs_perslid_naam_full, pf.prs_perslid_key, COALESCE ((SELECT aogk.alg_onrgoedkenmerk_waarde FROM alg_kenmerk ak, alg_onrgoedkenmerk aogk WHERE alg_kenmerk_hint = ud.fac_usrdata_omschr AND ak.alg_kenmerk_key = aogk.alg_kenmerk_key AND aogk.alg_onrgoed_key = aog.alg_gebouw_key) , DECODE(ud.fac_usrdata_omschr, 'Projectmanager extra werk', 'P800995.012', 'Eventmanager extra werk', 'P800995.010', 'Applicatiebeheer extra werk', 'P800995.023')) projectcode, ou.mld_opdr_uren_status FROM mld_opdr_uren ou, mld_opdr o, mld_statusopdr so, prs_v_perslid_fullnames_all pf, mld_melding m, mld_stdmelding std, ins_tab_discipline d, alg_v_onroerendgoed aog, alg_gebouw g, fac_usrdata ud, (SELECT ko.mld_opdr_key, fac.safe_to_number(ko.mld_kenmerkopdr_waarde) waarde FROM mld_kenmerkopdr ko WHERE ko.mld_kenmerk_key = 5301 -- soort werkzaamheden ) sw WHERE ou.mld_opdr_key = o.mld_opdr_key AND ou.prs_perslid_key = pf.prs_perslid_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND o.mld_opdr_key = sw.mld_opdr_key(+) AND sw.waarde = ud.fac_usrdata_key(+) AND o.mld_statusopdr_key = so.mld_statusopdr_key AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys AND aog.alg_gebouw_key = g.alg_gebouw_key; CREATE OR REPLACE VIEW ykpn_v_export_uren_yask (result, result_order) AS SELECT ou.soortwerk || ';' || ou.projectcode || ';' || to_char (ou.mld_opdr_uren_datum, 'dd-mm-yyyy') || ';' || ou.mld_opdr_uren_besteed, to_char (ou.mld_opdr_uren_datum, 'yyyymmdd') FROM ykpn_v_opdrachturen ou, mld_opdr_uren u WHERE ou.mld_opdr_uren_key = u.mld_opdr_uren_key AND u.mld_opdr_uren_status <> 4 AND TRUNC(ou.mld_opdr_uren_datum, 'mm') = TRUNC(ADD_MONTHS (SYSDATE, -1), 'mm'); -- Bevriezen van de opdracht uren CREATE OR REPLACE PROCEDURE ykpn_export_uren_yask ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS v_verkoopfactuurkop_key NUMBER; BEGIN -- bevries de uren in de opdracht uren tabel -- Goedgekeurde uren op verwerkt zetten. -- Status 3 = Goedgekeurd -- Status 4 = Verwerkt INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES ('Uren ' || TO_CHAR (SYSDATE, 'yyyy-mm-dd')) RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key; INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key, fin_verkoopfactuur_id, fin_verkoopfactuur_datum, fin_verkoopfactuur_omschr, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_bedrag, fin_verkoopfactuur_n1, -- uurloon fin_verkoopfactuur_n2, -- uren fin_verkoopfactuur_n3, -- stdmelding_key fin_verkoopfactuur_n4, -- opdr_uren_key fin_verkoopfactuur_c1, -- soortwerk fin_verkoopfactuur_c2, -- projectcode fin_verkoopfactuur_d1, -- opdr_uren_datum fin_verkoopfactuur_c3) -- opdr_uren_maand SELECT v_verkoopfactuurkop_key, opdrid || '-' || prs_perslid_nr || '-' || TO_CHAR (mld_opdr_uren_datum, 'yyyymmdd'), SYSDATE, opdrid || '-' || ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving || '-' || prs_perslid_naam_full || '-' || TO_CHAR (mld_opdr_uren_datum, 'yyyymmdd'), 'opdracht', mld_opdr_key, totaal, mld_opdr_uurloon, mld_opdr_uren_besteed, mld_stdmelding_key, mld_opdr_uren_key, soortwerk, projectcode, mld_opdr_uren_datum, TO_CHAR (ADD_MONTHS (SYSDATE, -1), 'yyyy-mm') FROM ykpn_v_opdrachturen ou, prs_perslid p WHERE ou.mld_opdr_uren_status <> 4 AND ou.prs_perslid_key = p.prs_perslid_key AND TRUNC(mld_opdr_uren_datum, 'mm') = TRUNC(ADD_MONTHS (SYSDATE, -1), 'mm'); UPDATE mld_opdr_uren SET mld_opdr_uren_status = 4 WHERE mld_opdr_uren_status <> 4 AND mld_opdr_uren_key IN (SELECT mld_opdr_uren_key FROM ykpn_v_opdrachturen WHERE TRUNC(mld_opdr_uren_datum, 'MM') = TRUNC(ADD_MONTHS (SYSDATE, -1), 'mm')); COMMIT; END; / -- Overzicht van bevroren uren CREATE OR REPLACE VIEW ykpn_v_opdrachturen_hist AS SELECT ou.opdrid, ou.mld_opdr_key, ou.mld_opdr_uren_key, ou.alg_gebouw_omschrijving, ou.alg_gebouw_upper, ou.ins_discipline_omschrijving, ou.mld_stdmelding_omschrijving, ou.mld_stdmelding_key, ou.mld_statusopdr_omschrijving, ou.mld_opdr_datumbegin, ou.afgemeld, ou.mld_opdr_uren_datum, ou.mld_opdr_uren_besteed, vf.fin_verkoopfactuur_n1 mld_opdr_uurloon, vf.fin_verkoopfactuur_bedrag totaal, vf.fin_verkoopfactuur_c1 soortwerk, ou.prs_perslid_naam_full, ou.prs_perslid_key, vf.fin_verkoopfactuur_c2 projectcode, vf.fin_verkoopfactuur_c3 maand FROM ykpn_v_opdrachturen ou, fin_verkoopfactuur vf WHERE ou.mld_opdr_uren_key = vf.fin_verkoopfactuur_n4; CREATE OR REPLACE VIEW ykpn_v_rap_fact_imp_uren AS SELECT null leveranciersnr, '' factuurnr, '' factuurdatum, 'M' || opdrid ordernr, alg_gebouw_upper locatie, null afleverdatum, 'Uren ' || maand omschrijving, null aantal, totaal kostprijs, null btwbedrag, '0' btw, null docid, '' debiteurnr, null opmerking, 'Ja' BTW_verlegd, null kenmerk1, null kenmerk2, null kenmerk3, null kenmerk4, null kenmerk5, maand boekmaand, projectcode, maand FROM ykpn_v_opdrachturen_hist WHERE TRUNC(mld_opdr_uren_datum, 'mm') BETWEEN TRUNC(ADD_MONTHS (SYSDATE, -3), 'mm') AND TRUNC(ADD_MONTHS (SYSDATE, -1), 'mm'); -- Overzicht besteding projecturen door projectmanagers CREATE OR REPLACE VIEW ykpn_v_besteding_proj_uren AS SELECT o.mld_melding_key, o.mld_opdr_key, o.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht_id, (SELECT top.mld_typeopdr_omschrijving FROM mld_typeopdr top WHERE top.mld_typeopdr_key=o.mld_typeopdr_key) opdracht_type, o.mld_opdr_uren, so.mld_statusopdr_omschrijving, ms.mld_statuses_omschrijving, o.mld_opdr_datumbegin, o.mld_opdr_einddatum, m.mld_melding_datum mld_startdatum, m.mld_melding_einddatum mld_einddatum, fac.count_work_days (o.mld_opdr_datumbegin,o.mld_opdr_einddatum) doorlooptijd, SUBSTR (o.mld_opdr_omschrijving, 1, 60) omschrijving, o.mld_uitvoerende_keys, p.prs_perslid_naam_full uitvoerende, (select prs_perslid_naam_full from prs_v_perslid_fullnames where prs_perslid_key=m.mld_melding_behandelaar2_key) huidige_behandelaar, (SELECT i.ins_discipline_omschrijving from INS_TAB_DISCIPLINE i WHERE i.ins_discipline_module ='MLD' AND i.ins_discipline_key=m.mld_ins_discipline_key) behandel_team, (SELECT SUM (u.mld_opdr_uren_besteed) FROM mld_opdr_uren u WHERE u.mld_opdr_key = o.mld_opdr_key) besteed, (SELECT ok.mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ok WHERE ok.mld_opdr_key= o.mld_opdr_key AND ok.mld_kenmerk_key in (8263, 8264,8302)) verwacht_oplosdatum, (SELECT ok.mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ok WHERE ok.mld_opdr_key= o.mld_opdr_key AND ok.mld_kenmerk_key in (8262, 8261,8301)) verwacht_startdatum, (SELECT fud.fac_usrdata_omschr FROM fac_usrdata fud, mld_kenmerkmelding mkm, mld_kenmerk mk, mld_srtkenmerk msk WHERE fud.fac_usrdata_key= mkm.mld_kenmerkmelding_waarde AND mkm.mld_melding_key=m.mld_melding_key AND UPPER(msk.mld_srtkenmerk_omschrijving)='PROJECTSTATUS' AND mk.mld_srtkenmerk_key=msk.mld_srtkenmerk_key AND mkm.mld_kenmerk_key = mk.mld_kenmerk_key) projectstatus, (SELECT a.alg_gebouw_code||'-'||a.alg_gebouw_naam FROM alg_v_allonrgoed_gegevens a WHERE a.alg_onroerendgoed_keys=m.mld_alg_onroerendgoed_keys) gebouw FROM mld_melding m, mld_opdr o, prs_v_perslid_fullnames p,mld_statusopdr so, mld_statuses ms WHERE m.mld_melding_key=o.mld_melding_key AND m.mld_ins_discipline_key=1781 -- Alleen behandelteam project Management AND o.mld_uitvoerende_keys=p.prs_perslid_key(+) AND o.mld_statusopdr_key = so.mld_statusopdr_key AND m.mld_melding_status= ms.mld_statuses_key; -- Reverse billing zoals bij Schiphol CREATE OR REPLACE VIEW ykpn_v_rap_actual_cost_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, fclt_f_leverancier, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS -- Vaste contractkosten over de ACTUAL termijn SELECT c.prs_afdeling_key, TO_CHAR (SYSDATE, 'yyyy-mm') maand, -- Deze maand volgende maand factureren (achteraf) 'C' broc_flag, c.prs_bedrijf_naam bedrijf, c.cnt_contract_nummer_intern, -- Uit deze maand lopend contract, anders geen vaste kosten c.cnt_contract_omschrijving, c.cnt_contract_nummer, 0 aantal, ROUND ( DECODE (COALESCE (c.cnt_contract_termijnkosten, 0), 0, c.cnt_contract_kosten / 12, c.cnt_contract_termijnkosten), 2) + fac.safe_to_number (COALESCE (ce.cnt_kenmerkcontract_waarde, '0')) + fac.safe_to_number (COALESCE (bm.cnt_kenmerkcontract_waarde, '0')) kosten -- Wat als looptijd < jaar? FROM (SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_afdeling_key, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, c.cnt_contract_kosten, c.cnt_contract_termijnkosten FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp WHERE c.ins_discipline_key IN (421, 2221) -- vast A(421) en suppletie contract a (2221) --AND c.cnt_contract_status = 0 -- NIET Gesloten AND TRUNC (c.cnt_contract_looptijd_van) < TRUNC (LAST_DAY (SYSDATE)) AND c.cnt_contract_looptijd_tot >= TRUNC (LAST_DAY (SYSDATE)) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND NOT EXISTS (SELECT cnt_kenmerkcontract_key FROM cnt_kenmerk k, cnt_kenmerkcontract kc WHERE kc.cnt_contract_key = c.cnt_contract_key AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_srtkenmerk_key = 121)) c -- Uitsluiten voor rev. billing LEFT JOIN cnt_kenmerkcontract ce ON ce.cnt_kenmerk_key = -1 -- Credit/extra kosten TODO AND c.cnt_contract_key = ce.cnt_contract_key LEFT JOIN cnt_kenmerkcontract bm ON bm.cnt_kenmerk_key = -1 -- Bonus/malus TODO AND c.cnt_contract_key = bm.cnt_contract_key UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten SELECT pcp.prs_afdeling_key, TO_CHAR (SYSDATE, 'yyyy-mm') maand, -- Deze maand ORDAFR, volgende maand factureren (achteraf) 'O' broc_flag, b.prs_bedrijf_naam, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, COUNT ( * ) aantal, SUM (o.mld_opdr_kosten) kosten -- Netto bedrag, want alle bedragen excl. BTW, toch? FROM mld_opdr o, --fac_tracking t, cnt_contract c, cnt_contract mc, prs_bedrijf b, prs_contactpersoon cp, prs_perslid pcp WHERE o.mld_statusopdr_key = 9 --AND o.mld_opdr_key = t.fac_tracking_refkey --AND t.fac_srtnotificatie_key = 76 -- ORDAFR --AND t.fac_tracking_datum > TRUNC (SYSDATE, 'mm') -- Actual = deze maand Afgerond (en nog niet Verwerkt) AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) > TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) -- AND NOT EXISTS -- Niet gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND EXISTS -- gemarkeerd als facturabel! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5521 -- Facturabel AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key AND c.ins_discipline_key IN (461, 903) -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) GROUP BY pcp.prs_afdeling_key, TO_CHAR (SYSDATE, 'yyyy-mm'), 'O', b.prs_bedrijf_naam, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer; -- Actual regels en basis voor oa. te exporteren/bevriezen regels op de 10e van -- de maand; voor de output geldt: -- Dat deze de actual vaste contractkosten toont (over afgelopen maand). -- Dat deze de actual variabele opdrachtkosten toont (voor 1e ORDAFR). -- Dat deze tot de 10e van de huidige maand alleen nog door Yask wijzigbaar is. CREATE OR REPLACE VIEW ykpn_v_actual_fact -- Tbv. FACT_EXPORT! ( prs_afdeling_key, maand, prs_bedrijf_key, prs_bedrijf_naam, cp_perslid_key, cp_aanhef, cp_naam, cp_email, cnt_contract_key, contractnr, beschrijving, inkoopordernr, cm_aanhef, cm_naam, bes_bestelopdr_key, res_rsv_ruimte_key, mld_opdr_key, bro_id, aantal, kosten, ins_discipline_key ) AS SELECT c.prs_afdeling_key, -- Vaste contractkosten over de ACTUAL termijn TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Afgelopen maand deze maand factureren (achteraf) c.prs_bedrijf_key, c.prs_bedrijf_naam, c.prs_perslid_key, c.cp_aanhef, c.cp_naam, c.cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, -- Uit afgelopen maand lopend contract, anders geen vaste kosten c.cm_aanhef, c.cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, NULL mld_opdr_key, NULL bro_id, 0 aantal, ROUND ( DECODE (COALESCE (c.cnt_contract_termijnkosten, 0), 0, c.cnt_contract_kosten / 12, c.cnt_contract_termijnkosten), 2) + fac.safe_to_number (COALESCE (ce.cnt_kenmerkcontract_waarde, '0')) + fac.safe_to_number (COALESCE (bm.cnt_kenmerkcontract_waarde, '0')) kosten, -- Wat als looptijd < jaar? ins_discipline_key FROM (SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_afdeling_key, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, c.cnt_contract_kosten, c.cnt_contract_termijnkosten, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE ( pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, c.ins_discipline_key FROM cnt_v_aanwezigcontract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm WHERE c.ins_discipline_key IN (421, 2221, 902) -- Vaste contracten a(421) en supppletie contract a(2221) en verkoopcontracten (902) --AND c.cnt_contract_status = 0 -- NIET Gesloten AND TRUNC (c.cnt_contract_looptijd_van) < TRUNC (SYSDATE, 'mm') - 1 AND c.cnt_contract_looptijd_tot >= TRUNC (SYSDATE, 'mm') - 1 AND NOT EXISTS -- Nog geen entry in eigen tabel (SELECT 1 FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_xmlnode = 'contract' AND fin_verkoopfactuur_refkey = c.cnt_contract_key AND fin_verkoopfactuur_c3 = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm')) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND NOT EXISTS (SELECT cnt_kenmerkcontract_key FROM cnt_kenmerk k, cnt_kenmerkcontract kc WHERE kc.cnt_contract_key = c.cnt_contract_key AND kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_srtkenmerk_key = 121)) c LEFT JOIN cnt_kenmerkcontract ce ON ce.cnt_kenmerk_key = -1 -- Credit/extra kosten TODO AND c.cnt_contract_key = ce.cnt_contract_key LEFT JOIN cnt_kenmerkcontract bm ON bm.cnt_kenmerk_key = -1 -- Bonus/malus TODO AND c.cnt_contract_key = bm.cnt_contract_key UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten SELECT pcp.prs_afdeling_key, TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf) b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, 1 aantal, o.mld_opdr_kosten kosten, -- Netto bedrag, want alle bedragen excl. BTW, toch? c.ins_discipline_key -- maar even gekozen om de discipline van het contract te gebruiken FROM mld_opdr o, --fac_tracking t, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm WHERE o.mld_statusopdr_key = 9 --AND o.mld_opdr_key = t.fac_tracking_refkey --AND t.fac_srtnotificatie_key = 76 -- ORDAFR --AND t.fac_tracking_datum > TO_DATE ('20190101', 'yyyymmdd') --AND t.fac_tracking_datum < TRUNC (SYSDATE, 'mm') AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) -- AND NOT EXISTS -- Niet gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND EXISTS -- gemarkeerd als facturabel! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5521 -- Facturabel AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key AND c.ins_discipline_key IN (461,903) -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key UNION ALL -- Variabele kosten uit ACTUAL opdrachten op variabele contracten-DISPUUT SELECT pcp.prs_afdeling_key, TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') maand, -- Voor 1e ORDAFR, deze maand factureren (achteraf) b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email cp_email, c.cnt_contract_key, COALESCE (c.cnt_contract_nummer_intern, '') || '/DISPUUT' cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, 1 aantal, o.mld_opdr_kosten kosten, -- Netto bedrag, want alle bedragen excl. BTW, toch? c.ins_discipline_key FROM mld_opdr o, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm WHERE o.mld_statusopdr_key = 9 AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- Actual = Deze maand Afgerond (en nog niet Verwerkt) -- AND EXISTS -- Gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND NOT EXISTS -- gemarkeerd als facturabel! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5521 -- Facturabel AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND o.cnt_contract_key = c.cnt_contract_key AND c.ins_discipline_key IN (461,903) -- Variabele contracten AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key; -- Te exporteren/bevriezen totalen over voorgaande maand (vast en variabel). CREATE OR REPLACE VIEW ykpn_v_rap_actual_fact_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, --hide_f_bedrijf_key, fclt_f_leverancier, --hide_f_contract_key, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS SELECT prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag, --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr, SUM (aantal), SUM (kosten) FROM ykpn_v_actual_fact WHERE coalesce(ins_discipline_key, -1) <> 902 -- verkoopcontracten uitsluiten GROUP BY prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'), --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr; -- Te exporteren/bevriezen variabele opdrachtkosten over voorgaande maand (details). CREATE OR REPLACE VIEW ykpn_v_rap_actual_fact_mld ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! fclt_3d_locatie_key, maand, prio, mld_melding_key, mld_opdr_key, opdr_id, plaats, -- Gebouw ruimte, mld_stdmelding_oms, opdrachttype, omschrijving, begindatum, einddatum, afronddatum, meldingstatus, opdrachtstatus, afhandeling, fclt_f_leverancier, materiaal, kosten, mandaat, dispuut, facturabel, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district, behandelaar ) AS SELECT v.prs_afdeling_key, l.alg_locatie_key, v.maand, TO_CHAR (m.mld_melding_spoed), m.mld_melding_key, o.mld_opdr_key, COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id, og.alg_gebouw_naam || ' (' || og.alg_gebouw_code || ')' plaats, DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte, sm.mld_stdmelding_omschrijving, ot.mld_typeopdr_omschrijving, o.mld_opdr_omschrijving, o.mld_opdr_datumbegin begindatum, --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum, fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) afronddatum, ms.mld_statuses_omschrijving, os.mld_statusopdr_omschrijving, o.mld_opdr_opmerking, v.prs_bedrijf_naam, o.mld_opdr_materiaal, v.kosten, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 3521) mandaat, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 3881) dispuut, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 5521) facturabel, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving, pf.prs_perslid_naam_full behandelaar FROM ykpn_v_actual_fact v, mld_opdr o, mld_statusopdr os, mld_typeopdr ot, mld_melding m, mld_statuses ms, mld_stdmelding sm, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, alg_v_onroerendgoed_gegevens og, prs_v_perslid_fullnames pf WHERE v.mld_opdr_key = o.mld_opdr_key AND o.mld_statusopdr_key = os.mld_statusopdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND o.prs_perslid_key = pf.prs_perslid_key(+); -- Frozen regels en basis voor oa. de notificatie op de 11e van de maand; voor -- de output geldt: -- Dat deze de frozen vaste contractkosten toont. -- Dat deze de frozen variabele opdrachtkosten toont. -- Dat de laatst bevroren maand per bedrijf op de 11e wordt genotificeerd (via -- extra_key-principe) met daarin de bedragen gegroepeerd per inkoopordernr. CREATE OR REPLACE VIEW ykpn_v_frozen_fact ( prs_afdeling_key, maand, --prs_bedrijf_key, extra_key, -- Moet zo heten! prs_bedrijf_naam, cp_perslid_key, cp_aanhef, cp_naam, cp_email, cnt_contract_key, contractnr, beschrijving, inkoopordernr, cm_aanhef, cm_naam, bes_bestelopdr_key, res_rsv_ruimte_key, mld_opdr_key, bro_id, factuur_naar_sg, aantal, kosten, alg_gebouw_key, ins_discipline_key ) AS SELECT pcp.prs_afdeling_key, -- Vaste contractkosten over de FROZEN termijnen fin_verkoopfactuur_c3 maand, -- yyyy-mm b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, NULL mld_opdr_key, NULL bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee') fact2sg, 0 aantal, vk.fin_verkoopfactuur_bedrag kosten, fin_verkoopfactuur_n3, -- alg_gebouw_key fin_verkoopfactuur_n1 -- discipline FROM fin_verkoopfactuur vk, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm, (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 99999) kl -- Factuur rechtstreeks naar SG! WHERE vk.fin_verkoopfactuur_xmlnode = 'contract' AND fin_verkoopfactuur_refkey = c.cnt_contract_key AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND b.prs_bedrijf_key = kl.prs_link_key(+) AND fin_verkoopfactuur_n1 IN (421,2221) -- Vast (a)(421) en suppletie contract a(2221) UNION ALL -- Variabele kosten uit FROZEN opdrachten op variabele contracten SELECT pcp.prs_afdeling_key, o.mld_opdr_ordernr maand, b.prs_bedrijf_key, b.prs_bedrijf_naam, pcp.prs_perslid_key, DECODE (pcp.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cp_aanhef, DECODE ( COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcp.prs_perslid_voorletters, SUBSTR (pcp.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcp.prs_perslid_tussenvoegsel, NULL, NULL, pcp.prs_perslid_tussenvoegsel || ' ') || pcp.prs_perslid_naam cp_naam, pcp.prs_perslid_email, c.cnt_contract_key, c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_nummer, DECODE (pcm.prs_perslid_geslacht, 0, 'Mevr. ', 1, 'Dhr. ', '') cm_aanhef, DECODE ( COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1)), NULL, NULL, COALESCE (pcm.prs_perslid_voorletters, SUBSTR (pcm.prs_perslid_voornaam, 1, 1) || '.') || ' ') || DECODE (pcm.prs_perslid_tussenvoegsel, NULL, NULL, pcm.prs_perslid_tussenvoegsel || ' ') || pcm.prs_perslid_naam cm_naam, NULL bes_bestelopdr_key, NULL res_rsv_ruimte_key, o.mld_opdr_key, TO_CHAR (o.mld_melding_key) || '/' || TO_CHAR (o.mld_opdr_bedrijfopdr_volgnr) bro_id, DECODE (kl.prs_kenmerklink_waarde, 1, 'Ja', 'Nee'), 1 aantal, o.mld_opdr_kosten kosten, -- Netto bedrag, want alle bedragen excl. BTW, toch? NULL alg_gebouw_key, NULL ins_discipline_key FROM mld_opdr o, cnt_contract c, prs_bedrijf b, cnt_contract mc, prs_contactpersoon cp, prs_perslid pcp, prs_perslid pcm, (SELECT * FROM prs_v_aanwezigkenmerklink WHERE prs_kenmerk_key = 99999) kl -- Factuur rechtstreeks naar SG! WHERE o.mld_opdr_ordernr IS NOT NULL -- Gefactureerd! --AND o.mld_statusopdr_key = 7 -- Verwerkt (kan niet anders) AND o.cnt_contract_key = c.cnt_contract_key --AND c.ins_discipline_key = 523 -- Variabele contracten (kan niet anders) AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND c.cnt_contract_mantel_key = mc.cnt_contract_key(+) AND mc.prs_contactpersoon_key = cp.prs_contactpersoon_key(+) AND cp.prs_perslid_key = pcp.prs_perslid_key(+) AND c.prs_perslid_key_beh = pcm.prs_perslid_key AND b.prs_bedrijf_key = kl.prs_link_key(+); -- Geexporteerde/bevroren totalen over voorgaande maanden (vast en variabel). CREATE OR REPLACE VIEW ykpn_v_rap_frozen_fact_tot ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! maand, broc_flag, --hide_f_bedrijf_key, fclt_f_leverancier, --hide_f_contract_key, contractnr, beschrijving, inkoopordernr, aantal, kosten ) AS -- Vaste contractkosten over de FROZEN termijnen SELECT prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B') broc_flag, --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr, SUM (aantal), SUM (kosten) FROM ykpn_v_frozen_fact GROUP BY prs_afdeling_key, maand, DECODE (bes_bestelopdr_key, NULL, DECODE (res_rsv_ruimte_key, NULL, DECODE (mld_opdr_key, NULL, 'C', 'O'), 'R'), 'B'), --prs_bedrijf_key, prs_bedrijf_naam, --cnt_contract_key, contractnr, beschrijving, inkoopordernr; -- Geexporteerde/bevroren variabele opdrachtkosten over voorgaande maanden (details). CREATE OR REPLACE VIEW ykpn_v_rap_frozen_fact_mld ( fclt_3d_afdeling_key, -- Kunnen beperken per leverancier! fclt_3d_locatie_key, maand, prio, mld_melding_key, mld_opdr_key, opdr_id, plaats, -- Gebouw ruimte, mld_stdmelding_oms, opdrachttype, omschrijving, begindatum, einddatum, afronddatum, meldingstatus, opdrachtstatus, afhandeling, fclt_f_leverancier, materiaal, kosten, mandaat, dispuut, facturabel, fclt_f_contractnr, fclt_f_inkoopordernr, fclt_x_district, behandelaar ) AS SELECT v.prs_afdeling_key, l.alg_locatie_key, v.maand, TO_CHAR (m.mld_melding_spoed), m.mld_melding_key, o.mld_opdr_key, COALESCE (sd.ins_srtdiscipline_prefix, '') || v.bro_id opdr_id, og.alg_gebouw_naam || ' (' || og.alg_gebouw_code || ')' plaats, DECODE (og.alg_type, 'R', og.alg_plaatsaanduiding, NULL) ruimte, sm.mld_stdmelding_omschrijving, ot.mld_typeopdr_omschrijving, o.mld_opdr_omschrijving, o.mld_opdr_datumbegin begindatum, --TO_CHAR (o.mld_opdr_einddatum, 'dd-mm-yyyy') einddatum, fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) einddatum, fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) afronddatum, ms.mld_statuses_omschrijving, os.mld_statusopdr_omschrijving, o.mld_opdr_opmerking, v.prs_bedrijf_naam, o.mld_opdr_materiaal, o.mld_opdr_kosten, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 3521) mandaat, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 3881) dispuut, (SELECT fac.safe_to_number(mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND ko.mld_opdr_key = o.mld_opdr_key AND k.mld_srtkenmerk_key = 5521) facturabel, v.contractnr, v.inkoopordernr, d.alg_district_omschrijving, pf.prs_perslid_naam_full behandelaar FROM ykpn_v_frozen_fact v, mld_opdr o, mld_statusopdr os, mld_typeopdr ot, mld_melding m, mld_statuses ms, mld_stdmelding sm, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, alg_v_onroerendgoed_gegevens og, prs_v_perslid_fullnames_all pf WHERE v.mld_opdr_key = o.mld_opdr_key AND o.mld_statusopdr_key = os.mld_statusopdr_key AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND o.mld_melding_key = m.mld_melding_key AND m.mld_melding_status = ms.mld_statuses_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND o.prs_perslid_key = pf.prs_perslid_key(+); CREATE OR REPLACE PROCEDURE ykpn_select_fact (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS -- Bevries vaste contractkosten in eigen tabel. CURSOR c1 IS SELECT c.cnt_contract_nummer_intern, c.cnt_contract_omschrijving, c.cnt_contract_key, cp.cnt_contract_plaats_key, cp.cnt_contract_plaats_gewicht, b.prs_bedrijf_key, b.prs_bedrijf_naam, g.alg_gebouw_key, g.alg_gebouw_code, v.maand, v.ins_discipline_key FROM ykpn_v_actual_fact v, cnt_contract_plaats cp, cnt_contract c, alg_gebouw g, prs_bedrijf b WHERE v.cnt_contract_key = c.cnt_contract_key AND v.cnt_contract_key = cp.cnt_contract_key AND cp.cnt_alg_plaats_code = 'G' AND cp.cnt_alg_plaats_key = g.alg_gebouw_key AND c.cnt_prs_bedrijf_key = b.prs_bedrijf_key AND v.bes_bestelopdr_key IS NULL AND v.res_rsv_ruimte_key IS NULL AND v.mld_opdr_key IS NULL ORDER BY b.prs_bedrijf_key, c.cnt_contract_key; -- Zet "variabele" MLD-opdrachten die voor de 1e zijn afgerond op AV. -- Alleen op variabele contracten. CURSOR c4 IS SELECT DISTINCT '[' || TO_CHAR (v.mld_opdr_key) || '|' || v.bro_id || '] ' aanduiding, v.maand, v.mld_opdr_key, v.ins_discipline_key FROM ykpn_v_actual_fact v WHERE v.mld_opdr_key IS NOT NULL AND v.contractnr NOT LIKE '%/DISPUUT' ORDER BY 3; -- Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV. -- Afgerond/kosten meerekenen op vaste contracten en geen dispuut -- Afgemeld/kosten niet meerekenen, geen offerteaanvraag en geen dispuut -- Afgerond/kosten niet meerekenen en geen dispuut (= geaccepteerde offerteaanvragen) CURSOR c5 IS SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding, o.mld_opdr_key FROM mld_opdr o, mld_typeopdr ot, cnt_contract c WHERE o.mld_statusopdr_key = 9 -- KV AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND ot.mld_typeopdr_kosten = 1 -- Kosten meerekenen=Ja AND o.cnt_contract_key = c.cnt_contract_key AND c.ins_discipline_key = 41 -- Vaste contracten -- AND NOT EXISTS -- Niet gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND EXISTS -- gemarkeerd als facturabel! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5521 -- Facturabel AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') UNION ALL -- SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding, -- o.mld_opdr_key -- FROM mld_opdr o, mld_typeopdr ot -- WHERE o.mld_statusopdr_key = 6 -- TV -- AND o.mld_typeopdr_key = ot.mld_typeopdr_key -- AND ot.mld_typeopdr_kosten = 0 -- Kosten meerekenen=Nee -- AND ot.mld_typeopdr_key != 81 -- Offerteaanvraag -- AND NOT EXISTS -- Niet gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt -- AND fac.gettrackingdate ('ORDAFM', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') -- UNION ALL SELECT DISTINCT '[' || TO_CHAR (o.mld_opdr_key) || '] ' aanduiding, o.mld_opdr_key FROM mld_opdr o, mld_typeopdr ot WHERE o.mld_statusopdr_key = 9 -- KV (ooit met kosten en Offerteaanvragen) AND o.mld_typeopdr_key = ot.mld_typeopdr_key AND ot.mld_typeopdr_kosten = 0 -- Kosten meerekenen=Nee -- AND NOT EXISTS -- Niet gemarkeerd als dispuut! -- (SELECT 1 -- FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k -- WHERE ko.mld_opdr_key = o.mld_opdr_key -- AND ko.mld_kenmerk_key = k.mld_kenmerk_key -- AND k.mld_srtkenmerk_key = 3881 -- Dispuut -- AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND EXISTS -- gemarkeerd als facturabel! (SELECT 1 FROM mld_v_aanwezigkenmerkopdr ko, mld_kenmerk k WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5521 -- Facturabel AND ko.mld_kenmerkopdr_waarde = '1') -- Aangevinkt AND (fac.gettrackingdate ('ORDAFR', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm') OR fac.gettrackingdate ('ORDOOK', o.mld_opdr_key) BETWEEN TO_DATE ('20190101', 'yyyymmdd') AND TRUNC (SYSDATE, 'mm')) ORDER BY 2; v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER (10); v_verkoopfactuurkop_key NUMBER (10); v_prijs NUMBER (9, 2); v_contract_key_prev NUMBER(10); BEGIN -- Op 10e dag van de maand (via scheduled task): -- 1. Bevries vaste contractkosten in eigen tabel (incl. malus?). -- 4. Zet "variabele" opdrachten die voor de 1e zijn afgerond op AV. -- 5. Zet "inclusief" opdrachten die voor de 1e zijn gesloten op AV. -- x. Doe niets met afgewezen/geannuleerde opdrachten? v_count := 0; v_contract_key_prev := -1; FOR rec IN c1 LOOP BEGIN v_errormsg := 'Fout toevoegen vaste contractkosten'; IF v_contract_key_prev <> rec.cnt_contract_key THEN dbms_output.put_line ('Contract ' || rec.cnt_contract_nummer_intern || ' - ' || rec.maand); INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES ('Contract ' || rec.cnt_contract_nummer_intern || ' - ' || rec.maand) RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key; v_count := v_count + 1; v_contract_key_prev := rec.cnt_contract_key; END IF; INSERT INTO fin_verkoopfactuur (fin_verkoopfactuurkop_key, fin_verkoopfactuur_id, -- contractnr en maand fin_verkoopfactuur_datum, -- aanmaakdatum fin_verkoopfactuur_omschr, -- nummer en omschrijving fin_verkoopfactuur_xmlnode, -- contract fin_verkoopfactuur_refkey, -- contract key fin_verkoopfactuur_bedrag, -- scope bedrag prs_bedrijf_key, -- bedrijf key prs_debiteur_naam, -- bedrijf naam fin_verkoopfactuur_n1, -- nvt fin_verkoopfactuur_n2, -- nvt fin_verkoopfactuur_n3, -- alg_gebouw_key fin_verkoopfactuur_n4, -- contract-plaats-key fin_verkoopfactuur_c1, -- nvt fin_verkoopfactuur_c2, -- nvt fin_verkoopfactuur_d1, -- nvt fin_verkoopfactuur_c3) -- nvt VALUES (v_verkoopfactuurkop_key, rec.cnt_contract_nummer_intern || '-' || rec.alg_gebouw_code || '-' || rec.maand, SYSDATE, rec.cnt_contract_nummer_intern || '-' || rec.cnt_contract_omschrijving || '-' || rec.maand, 'contract', rec.cnt_contract_key, rec.cnt_contract_plaats_gewicht/12, rec.prs_bedrijf_key, rec.prs_bedrijf_naam, rec.ins_discipline_key, NULL, rec.alg_gebouw_key, rec.cnt_contract_plaats_key, NULL, NULL, NULL, rec.maand); 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, 'W', rec.cnt_contract_nummer_intern || '-' || rec.cnt_contract_omschrijving || '-' || rec.maand || v_errormsg, 'FACT-CAV'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#Vaste contractkosten bevroren: ' || TO_CHAR (v_count), ''); COMMIT; v_count := 0; FOR rec IN c4 LOOP BEGIN v_errormsg := 'Fout bijwerken ordernummer (MLD).'; UPDATE mld_opdr SET mld_opdr_ordernr = rec.maand WHERE mld_opdr_key = rec.mld_opdr_key; v_errormsg := 'Fout bijwerken status (MLD).'; MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 3); v_count := v_count + 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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-OAV1'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#Variabele opdrachten bevroren: ' || TO_CHAR (v_count), ''); COMMIT; v_count := 0; FOR rec IN c5 LOOP BEGIN v_errormsg := 'Fout bijwerken status (inclusief opdrachten).'; MLD.setopdrachtstatus (rec.mld_opdr_key, 7, 3); v_count := v_count + 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.writelog (p_applname, 'W', rec.aanduiding || v_errormsg, 'FACT-OAV2'); COMMIT; END; END LOOP; fac.writelog (p_applname, 'S', '#Inclusief opdrachten bevroren: ' || TO_CHAR (v_count), ''); 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', v_errormsg, 'Proces FACT_EXPORT afgebroken!'); COMMIT; END; / CREATE OR REPLACE VIEW ykpn_v_mldopdr_retail_53w ( melding_key, melding_locatiecode, melding_locatie, soortmelding, productgroep, subproductgroep, behandelaar, melding_datum, vomschrijving, opdracht_status, opdracht_datum, opdracht_einddatum, opdracht_afgemeld, opdracht_doorlooptijd, opdracht_uitvoerende, verschil ) AS SELECT m.melding_key, m.melding_locatiecode, m.melding_locatie, m.soortmelding, m.productgroep, m.subproductgroep, m.behandelaar, m.melding_datum, TO_CHAR(SUBSTR(REPLACE(REPLACE(REPLACE(m.vomschrijving,';','-'),CHR(10),''), CHR(13),''),0,200)), o.opdracht_status, o.opdracht_datum, o.opdracht_einddatum, o.opdracht_afgemeld, o.opdracht_doorlooptijd, o.opdracht_uitvoerende, DECODE(SIGN(o.opdracht_afgemeld - o.opdracht_einddatum), -1, 'Op tijd', 'Te laat') verschil FROM mld_v_udr_melding m, mld_v_udr_opdracht o WHERE m.melding_key = o.melding_key(+); --AND m.melding_datum >= SYSDATE-53*7; CREATE OR REPLACE VIEW YKPN_V_EXPORT_RETAIL_OPD_RAP ( result, result_order ) AS SELECT 'Verschil;Melding;Winkelcode;Winkel;Vakgroep;StdMelding;Omschrijving;Opdracht Datum;Opdracht Einddatum;Opdracht Afgemeld;Opdracht Doorlooptijd;Opdracht Uitvoerende',0 FROM dual UNION ALL SELECT verschil||';'|| melding_key||';'|| melding_locatiecode||';'|| melding_locatie||';'|| productgroep||';'|| subproductgroep||';'|| vomschrijving||';'|| opdracht_datum||';'|| opdracht_einddatum||';'|| opdracht_afgemeld||';'|| opdracht_doorlooptijd||';'|| opdracht_uitvoerende, 1 FROM ykpn_v_mldopdr_retail_53w WHERE melding_datum >= SYSDATE-53*7; CREATE OR REPLACE VIEW YKPN_V_EXPORT_RETAIL_OPD_RP2J ( result, result_order ) AS SELECT 'Verschil;Melding;Winkelcode;Winkel;Vakgroep;StdMelding;Omschrijving;Opdracht Datum;Opdracht Einddatum;Opdracht Afgemeld;Opdracht Doorlooptijd;Opdracht Uitvoerende',0 FROM dual UNION ALL SELECT verschil||';'|| melding_key||';'|| melding_locatiecode||';'|| melding_locatie||';'|| productgroep||';'|| subproductgroep||';'|| vomschrijving||';'|| opdracht_datum||';'|| opdracht_einddatum||';'|| opdracht_afgemeld||';'|| opdracht_doorlooptijd||';'|| opdracht_uitvoerende, 1 FROM ykpn_v_mldopdr_retail_53w WHERE melding_datum >= SYSDATE-106*7 AND melding_datum < SYSDATE-53*7; CREATE OR REPLACE VIEW ykpn_v_mld_retail_rol53w ( melding_key, meldingnummer, melding_start_key, externnummer, melding_regio, melding_district, melding_locatiecode, melding_locatie, melding_locatieplaats, fclt_3d_locatie_key, melding_gebouwcode, melding_gebouw, melding_verdieping, melding_ruimtenr, melding_ruimte, melding_ordernr, kostensoortgroep, kostensoort, kostenplaats, kostenplaats_oms, melder, melder_key, melder_email, afdeling, afdeling_omschrijving, fclt_3d_afdeling_key, divisie, divisie_omschrijving, fclt_3d_divisie_key, bedrijf_key, invoerder, meldbron, soortmelding, fclt_3d_discipline_key, productgroep, subproductgroep, behandelgroep, behandelaar, behandelaar_key, subproductgroepgroep, fclt_3d_discipline2_key, actieve_behandelgroep, actieve_behandelaar_key, actieve_behandelaar, melding_status, sla_nvt, sla_werkdgn, sla_werkuren, sla_respijtdgn, sla_respijturen, sla_accptdgn, sla_accpturen, plan_uitvoertijd_sla, melding_datum, melding_einddatum, melding_einddatum_std, melding_acceptdatum, melding_afgemeld, melding_accepted, doorlooptijd_werkdgn, doorlooptijd_werkuren, onderwerp, vomschrijving, melding_opmerking, prioriteit, prioriteittxt, rating, rating_opmerking, bolletje, actiecode, accept_sla_dagen, accept_sla_uren, uitvoering_sla_dagen, uitvoering_sla_uren, afspraak_sla_dagen, afspraak_sla_uren, accept_sla_optijd, uitvoering_sla_optijd, afspraak_sla_optijd, selfservice, melding_spoed ) AS SELECT mld_melding_key, meldingnummer, mld_melding_start_key, mld_melding_externnr, alg_regio_omschrijving, alg_district_omschrijving, locatie, locatie_omschrijving, locatie_plaats, alg_locatie_key, gebouw, gebouw_naam, verdieping, ruimte, ruimte_omschrijving, melding_ordernr, kostensoortgroep, kostensoort, kostenplaats, kostenplaats_oms, melder, prs_perslid_key, prs_perslid_email, afdeling, afdeling_omschrijving, afdeling_key, divisie, divisie_omschrijving, divisie_key, prs_bedrijf_key, invoerder, meldbron, soortmelding, stdm_ins_discipline_key, productgroep, subproductgroep, behandelgroep, behandelaar, behandelaar_key, subproductgroepgroep, mld_ins_discipline_key, actieve_behandelgroep, actieve_behandelaar_key, actieve_behandelaar, status, sla_nvt, sla_werkdgn, sla_werkuren, sla_respijtdgn, sla_respijturen, sla_accptdgn, sla_accpturen, plan_uitvoertijd_sla, datum, einddatum, einddatum_std, acceptdatum, afgemeld, accepted, DECODE (x.t_doorlooptijd.eenheid, 'D', x.t_doorlooptijd.tijdsduur, NULL) doorlooptijd_werkdgn, DECODE (x.t_doorlooptijd.eenheid, 'U', x.t_doorlooptijd.tijdsduur, NULL) doorlooptijd_werkuren, onderwerp, SUBSTR(omschrijving,1,200), opmerking, mld_melding_spoed prioriteit, DECODE(mld_melding_spoed,3,lcl.l('lcl_mld_urg_normaal'),1,lcl.l('lcl_mld_urg_kritiek'),2,lcl.l('lcl_mld_urg_hoog'),4,lcl.l('lcl_mld_urg_laag')), mld_melding_satisfaction, mld_melding_satisfaction_op, mld_melding_flag, mld_melding_actiecode, DECODE (x.t_doorlooptijd.eenheid, 'D', acceptdatum - COALESCE (accepted, afgemeld), NULL) accept_sla_dagen, CAST ( DECODE (x.t_doorlooptijd.eenheid, 'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24, NULL) AS NUMBER(7,2) ) accept_sla_uren, DECODE ( x.t_doorlooptijd.eenheid, 'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), NULL) uitvoering_sla_dagen, CAST ( DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0), NULL) AS NUMBER(7,2) ) uitvoering_sla_uren, DECODE (x.t_doorlooptijd.eenheid, 'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), NULL) afspraak_sla_dagen, CAST ( DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0), NULL) AS NUMBER(7,2) ) afspraak_sla_uren, CASE WHEN acceptdatum IS NULL OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd. DECODE (x.t_doorlooptijd.eenheid, 'D', acceptdatum - COALESCE (accepted, afgemeld), 0) + DECODE (x.t_doorlooptijd.eenheid, 'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24, 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END accept_sla_optijd, CASE WHEN DECODE ( x.t_doorlooptijd.eenheid, 'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), 0) + DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (mld.geteinddatum(mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0), 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END uitvoering_sla_optijd, CASE WHEN DECODE (x.t_doorlooptijd.eenheid, 'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), 0) + DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0), 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END afspraak_sla_optijd, DECODE(invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no')) selfservice, DECODE(mld_melding_spoed,1,'Kritiek',2,'Hoog',3,'Normaal',4,'Laag', 'Onbekend') FROM (SELECT m.mld_melding_key, m.mld_melding_start_key, m.mld_melding_externnr, m.prs_perslid_key, mab.prs_perslid_email, sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer, alg_regio_omschrijving, alg_district_omschrijving, alg_locatie_code locatie, alg_locatie_omschrijving locatie_omschrijving, alg_locatie_plaats locatie_plaats, l.alg_locatie_key, og.alg_gebouw_code gebouw, og.alg_gebouw_naam gebouw_naam, og.alg_verdieping_code verdieping, og.alg_ruimte_nr ruimte, og.alg_ruimte_omschrijving ruimte_omschrijving, m.mld_melding_ordernr melding_ordernr, (SELECT ksg.prs_kostensoortgrp_oms FROM prs_kostensoortgrp ksg, prs_kostensoort ks WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key AND ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoortgroep, (SELECT ks.prs_kostensoort_oms FROM prs_kostensoort ks WHERE ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoort, (SELECT k.prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats, (SELECT k.prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats_oms, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.prs_perslid_key) melder, mab.afdeling_naam afdeling, mab.afdeling_omschrijving afdeling_omschrijving, mab.prs_afdeling_key afdeling_key, mab.divisie_naam divisie, mab.divisie_omschrijving, mab.prs_afdeling_key1 divisie_key, mab.prs_bedrijf_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = mld.getmeldinguser (m.mld_melding_key)) invoerder, (SELECT mb.mld_meldbron_omschrijving FROM mld_meldbron mb WHERE mb.mld_meldbron_key = m.mld_meldbron_key) meldbron, m.mld_meldbron_key, sd.ins_srtdiscipline_key ins_srtdiscipline_key, sd.ins_srtdiscipline_omschrijving soortmelding, md.ins_discipline_key stdm_ins_discipline_key, md.ins_discipline_omschrijving productgroep, s.mld_stdmelding_omschrijving subproductgroep, smg.mld_stdmeldinggroep_naam subproductgroepgroep, mbg.mld_behandelgroep_naam behandelgroep, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key) behandelaar, m.mld_melding_behandelaar_key behandelaar_key, m.mld_ins_discipline_key mld_ins_discipline_key, (SELECT md2.ins_discipline_omschrijving FROM mld_discipline md2 WHERE md2.ins_discipline_key = m.mld_ins_discipline_key) actieve_behandelgroep, m.mld_melding_behandelaar2_key actieve_behandelaar_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.mld_melding_behandelaar2_key) actieve_behandelaar, (SELECT mld_statuses_omschrijving FROM mld_statuses sta WHERE sta.mld_statuses_key = m.mld_melding_status) status, CASE WHEN m.mld_melding_einddatum > COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key), fac.gettrackingdate ('MLDREJ', m.mld_melding_key), SYSDATE) THEN 1 ELSE 0 END plan_uitvoertijd_sla, CASE WHEN m.mld_melding_indult = 1 OR s.mld_stdmelding_slabewaken = 0 THEN 1 ELSE 0 END sla_nvt, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'D', m.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'U', m.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkuren, DECODE (m.mld_melding_t_respijt.eenheid, 'D', m.mld_melding_t_respijt.tijdsduur, NULL) sla_respijtdgn, DECODE (m.mld_melding_t_respijt.eenheid, 'U', m.mld_melding_t_respijt.tijdsduur, NULL) sla_respijturen, DECODE (m.mld_melding_t_accepttijd.eenheid, 'D', m.mld_melding_t_accepttijd.tijdsduur, NULL) sla_accptdgn, DECODE (m.mld_melding_t_accepttijd.eenheid, 'U', m.mld_melding_t_accepttijd.tijdsduur, NULL) sla_accpturen, m.mld_melding_datum datum, CASE WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE(NULL) ELSE m.mld_melding_einddatum END einddatum, mld_melding_einddatum_std einddatum_std, mld_melding_acceptdatum_std acceptdatum, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1)) afgemeld, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4), mld.getmeldingstatusdate (m.mld_melding_key, 1)) accepted, mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd, m.mld_melding_onderwerp onderwerp, m.mld_melding_omschrijving omschrijving, m.mld_melding_opmerking opmerking, m.mld_melding_spoed, m.mld_melding_satisfaction, m.mld_melding_satisfaction_op, m.mld_melding_flag, mld_melding_actiecode FROM mld_melding m, mld_stdmelding s, alg_locatie l, alg_district d, alg_regio r, alg_v_allonrgoed_gegevens og, mld_discipline md, mld_disc_params mdp, mld_behandelgroep mbg, ins_srtdiscipline sd, mld_stdmeldinggroep smg, (SELECT mx.mld_melding_key , div.prs_bedrijf_key , ab.prs_afdeling_key1 , div.prs_afdeling_naam divisie_naam , div.prs_afdeling_omschrijving divisie_omschrijving , ab.prs_afdeling_key , afd.prs_afdeling_naam afdeling_naam , afd.prs_afdeling_omschrijving afdeling_omschrijving , px.prs_perslid_key , px.prs_perslid_email FROM mld_melding mx , prs_perslid px , prs_v_afdeling_boom ab , prs_afdeling afd , prs_afdeling div WHERE px.prs_perslid_key = mx.prs_perslid_key AND ab.prs_afdeling_key = coalesce(mx.prs_afdeling_key, px.prs_afdeling_key) AND ab.prs_afdeling_key = afd.prs_afdeling_key AND ab.prs_afdeling_key1 = div.prs_afdeling_key ) mab WHERE s.mld_stdmelding_key = m.mld_stdmelding_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key AND sd.ins_srtdiscipline_key=41 AND md.ins_discipline_key = s.mld_ins_discipline_key AND md.ins_discipline_key = mdp.mld_ins_discipline_key AND s.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+) AND mdp.mld_behandelgroep_key = mbg.mld_behandelgroep_key(+) AND l.alg_district_key = d.alg_district_key(+) AND d.alg_regio_key = r.alg_regio_key(+) AND m.mld_melding_key = mab.mld_melding_key AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND m.fac_activiteit_key IS NULL) x; --AND m.mld_melding_datum >= SYSDATE-53*7) x; CREATE OR REPLACE VIEW YKPN_V_EXPORT_RETAIL_RAPPORT ( result, result_order ) AS SELECT 'melding_key;meldingnummer;melding_start_key;externnummer;melding_regio;melding_district;melding_locatiecode;melding_locatie;melding_locatieplaats;melder;melder_key;afdeling;afdeling_omschrijving;fclt_3d_afdeling_key; bedrijf_key;invoerder;meldbron;soortmelding;fclt_3d_discipline_key;productgroep;subproductgroep;behandelgroep;behandelaar;behandelaar_key;fclt_3d_discipline2_key;actieve_behandelgroep;actieve_behandelaar_key;actieve_behandelaar;melding_status;sla_nvt;sla_werkdgn;sla_accptdgn;sla_accpturen;plan_uitvoertijd_sla;melding_datum;melding_einddatum;melding_einddatum_std;melding_acceptdatum;melding_afgemeld;melding_accepted;doorlooptijd_werkdgn;onderwerp;rating;rating_opmerking;bolletje;actiecode;accept_sla_dagen;uitvoering_sla_dagen;afspraak_sla_dagen;accept_sla_optijd;uitvoering_sla_optijd;afspraak_sla_optijd;selfservice;prioriteit',0 FROM dual UNION ALL SELECT melding_key||';'|| meldingnummer||';'|| melding_start_key||';'|| externnummer||';'|| melding_regio||';'|| melding_district||';'|| melding_locatiecode||';'|| melding_locatie||';'|| melding_locatieplaats||';'|| melder||';'|| melder_key||';'|| afdeling||';'|| afdeling_omschrijving||';'|| fclt_3d_afdeling_key||';'|| bedrijf_key||';'|| invoerder||';'|| meldbron||';'|| soortmelding||';'|| fclt_3d_discipline_key||';'|| productgroep||';'|| subproductgroep||';'|| behandelgroep||';'|| behandelaar||';'|| behandelaar_key||';'|| fclt_3d_discipline2_key||';'|| actieve_behandelgroep||';'|| actieve_behandelaar_key||';'|| actieve_behandelaar||';'|| melding_status||';'|| sla_nvt||';'|| sla_werkdgn||';'|| sla_accptdgn||';'|| sla_accpturen||';'|| plan_uitvoertijd_sla||';'|| melding_datum||';'|| melding_einddatum||';'|| melding_einddatum_std||';'|| melding_acceptdatum||';'|| melding_afgemeld||';'|| melding_accepted||';'|| TO_CHAR(doorlooptijd_werkdgn,'999.99')||';'|| onderwerp||';'|| rating||';'|| rating_opmerking||';'|| bolletje||';'|| actiecode||';'|| TO_CHAR(accept_sla_dagen,'999.99')||';'|| TO_CHAR(uitvoering_sla_dagen,'999.99')||';'|| TO_CHAR(afspraak_sla_dagen,'999.99')||';'|| accept_sla_optijd||';'|| uitvoering_sla_optijd||';'|| afspraak_sla_optijd||';'|| selfservice||';'|| melding_spoed, 1 FROM ykpn_v_mld_retail_rol53w WHERE melding_datum >= SYSDATE-53*7; CREATE OR REPLACE VIEW YKPN_V_EXPORT_RETAIL_RAPPORT2J ( result, result_order ) AS SELECT 'melding_key;meldingnummer;melding_start_key;externnummer;melding_regio;melding_district;melding_locatiecode;melding_locatie;melding_locatieplaats;melder;melder_key;afdeling;afdeling_omschrijving;fclt_3d_afdeling_key; bedrijf_key;invoerder;meldbron;soortmelding;fclt_3d_discipline_key;productgroep;subproductgroep;behandelgroep;behandelaar;behandelaar_key;fclt_3d_discipline2_key;actieve_behandelgroep;actieve_behandelaar_key;actieve_behandelaar;melding_status;sla_nvt;sla_werkdgn;sla_accptdgn;sla_accpturen;plan_uitvoertijd_sla;melding_datum;melding_einddatum;melding_einddatum_std;melding_acceptdatum;melding_afgemeld;melding_accepted;doorlooptijd_werkdgn;onderwerp;rating;rating_opmerking;bolletje;actiecode;accept_sla_dagen;uitvoering_sla_dagen;afspraak_sla_dagen;accept_sla_optijd;uitvoering_sla_optijd;afspraak_sla_optijd;selfservice;prioriteit',0 FROM dual UNION ALL SELECT melding_key||';'|| meldingnummer||';'|| melding_start_key||';'|| externnummer||';'|| melding_regio||';'|| melding_district||';'|| melding_locatiecode||';'|| melding_locatie||';'|| melding_locatieplaats||';'|| melder||';'|| melder_key||';'|| afdeling||';'|| afdeling_omschrijving||';'|| fclt_3d_afdeling_key||';'|| bedrijf_key||';'|| invoerder||';'|| meldbron||';'|| soortmelding||';'|| fclt_3d_discipline_key||';'|| productgroep||';'|| subproductgroep||';'|| behandelgroep||';'|| behandelaar||';'|| behandelaar_key||';'|| fclt_3d_discipline2_key||';'|| actieve_behandelgroep||';'|| actieve_behandelaar_key||';'|| actieve_behandelaar||';'|| melding_status||';'|| sla_nvt||';'|| sla_werkdgn||';'|| sla_accptdgn||';'|| sla_accpturen||';'|| plan_uitvoertijd_sla||';'|| melding_datum||';'|| melding_einddatum||';'|| melding_einddatum_std||';'|| melding_acceptdatum||';'|| melding_afgemeld||';'|| melding_accepted||';'|| TO_CHAR(doorlooptijd_werkdgn,'999.99')||';'|| onderwerp||';'|| rating||';'|| rating_opmerking||';'|| bolletje||';'|| actiecode||';'|| TO_CHAR(accept_sla_dagen,'999.99')||';'|| TO_CHAR(uitvoering_sla_dagen,'999.99')||';'|| TO_CHAR(afspraak_sla_dagen,'999.99')||';'|| accept_sla_optijd||';'|| uitvoering_sla_optijd||';'|| afspraak_sla_optijd||';'|| selfservice||';'|| melding_spoed, 1 FROM ykpn_v_mld_retail_rol53w WHERE melding_datum >= SYSDATE-106*7 AND melding_datum < SYSDATE-53*7; CREATE OR REPLACE VIEW ykpn_v_noti_retail_manrap ( code, sender, receiver, text, key, xkey ) AS SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, gg.prs_perslid_key, -- Yask-contactpersonen 'Retail managment rapportage rollend 53 weken', r.fac_usrrap_key, NULL FROM ykpn_v_frozen_fact v, fac_gebruikersgroep gg, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'd') = '2' -- Elke maandag AND gg.fac_groep_key = 3401 -- RetailManagament groep die dit rapport moet ontvangen AND UPPER (r.fac_usrrap_omschrijving) = UPPER('BEHEER: Retail management rapportage melding') AND sn.fac_srtnotificatie_code = 'CUST22'; CREATE OR REPLACE VIEW ykpn_v_rev_billing AS SELECT maand, prs_bedrijf_naam, contractnr, beschrijving, mo.mld_melding_key meldingnr, mo.mld_opdr_bedrijfopdr_volgnr volgnr, kosten FROM ykpn_v_frozen_fact v, mld_opdr mo WHERE v.mld_opdr_key = mo.mld_opdr_key(+); CREATE OR REPLACE VIEW ykpn_v_noti_revBilling ( code, sender, receiver, text, key, xkey, xemail, xmobile ) AS SELECT DISTINCT sn.fac_srtnotificatie_code, NULL sender, NULL receiver, REPLACE (REPLACE (sn.fac_srtnotificatie_oms, '##LEV##', v.prs_bedrijf_naam), '##MND##', v.maand) text, r.fac_usrrap_key key, v.extra_key xkey, 'Shahla.Eleveld@vebego.nl;Soukaina.ElMaadori@vebego.nl;omar.murselovic@vebego.nl' xemail, NULL mobile FROM ykpn_v_frozen_fact v, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'dd') = '11' -- Op de ochtend na 10e van de maand! AND v.maand = TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyy-mm') AND v.cnt_contract_key NOT IN (SELECT kc.cnt_contract_key FROM cnt_kenmerkcontract kc WHERE kc.cnt_contract_key = v.cnt_contract_key AND kc.cnt_kenmerk_key=(SELECT DECODE(c.ins_discipline_key, 421,162, 461, 161, 2221, 221) -- vast=421(kenm key=162),var=461(kenm key=161),suppletie=2221(kenm key=221) FROM cnt_contract c WHERE cnt_contract_key = v.cnt_contract_key)) AND UPPER (r.fac_usrrap_omschrijving) = UPPER('BEHEER: Hidden rapportage tbv. rev billing notificatie') AND sn.fac_srtnotificatie_code = CASE WHEN UPPER(v.prs_bedrijf_naam) like 'VEBEGO CLEANING%' -- eigen notificatie voor Hago omdat anders Putorder de emails niet verstuurd. THEN 'CUST17' ELSE 'CUST16' END ORDER BY v.extra_key; -- Geef alle facturen van de vorige maand terug CREATE OR REPLACE VIEW ykpn_v_rev_bill_vrgmnd AS SELECT v.maand, v.contractnr, v.prs_bedrijf_naam bedrijf, v.extra_key extra_key, v.beschrijving, SUM(v.kosten) AS totaal FROM ykpn_v_frozen_fact v WHERE v.maand=TO_CHAR(ADD_MONTHS(SYSDATE, -1), 'yyyy-mm') GROUP BY v.contractNr, v.maand, v.beschrijving,v.prs_bedrijf_naam, v.extra_key ORDER BY v.maand, v.extra_key; CREATE OR REPLACE VIEW ykpn_v_noti_te_factureren ( code, sender, receiver, text, key, xkey ) AS WITH cp AS (SELECT cp1.prs_bedrijf_key, p1.prs_perslid_key FROM prs_v_aanwezigkenmerklink kl1, prs_contactpersoon cp1, prs_v_aanwezigperslid p1 WHERE kl1.prs_kenmerk_key = 1180 -- Contactpersoon factuurnotificatie! AND kl1.prs_link_key = cp1.prs_contactpersoon_key AND cp1.prs_contactpersoon_verwijder IS NULL AND cp1.prs_perslid_key = p1.prs_perslid_key) SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, --cp.prs_perslid_key, -- Leverancier-contactpersonen (met noti-vinkje) 49563, -- Gerlinda 49563 REPLACE (REPLACE (sn.fac_srtnotificatie_oms, '##LEV##', v.prs_bedrijf_naam), '##MND##', v.maand), r.fac_usrrap_key, v.extra_key FROM ykpn_v_frozen_fact v, cp cp, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'dd') = '11' -- Op de ochtend na 10e van de maand! AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') AND v.extra_key = cp.prs_bedrijf_key AND UPPER (r.fac_usrrap_omschrijving) = UPPER('BEHEER: Hidden rapportage tbv. factuurnotificatie') AND sn.fac_srtnotificatie_code = 'CUST16' UNION ALL SELECT DISTINCT sn.fac_srtnotificatie_code, NULL, gg.prs_perslid_key, -- Yask-contactpersonen REPLACE (sn.fac_srtnotificatie_oms, '##MND##', v.maand), r.fac_usrrap_key, NULL -- geen extra key(complete rapportage) FROM ykpn_v_frozen_fact v, fac_gebruikersgroep gg, fac_usrrap r, fac_srtnotificatie sn WHERE TO_CHAR (SYSDATE, 'dd') = '11' -- Op de ochtend na 10e van de maand! AND v.maand = TO_CHAR (TRUNC (SYSDATE, 'mm') - 1, 'yyyy-mm') AND gg.fac_groep_key = 3161 -- Yask Rev Bil Fact Noti=3161 was voorheen YASK YASK applicatie beheer=32 AND UPPER (r.fac_usrrap_omschrijving) = UPPER('BEHEER: Hidden rapportage tbv. factuurnotificatie') AND sn.fac_srtnotificatie_code = 'CUST17'; CREATE OR REPLACE VIEW ykpn_v_rap_fact_imp_cnt_mld AS SELECT null leveranciersnr, '' factuurnr, '' factuurdatum, DECODE (bro_id, NULL, 'C' || contractnr, 'M' || bro_id) ordernr, null locatie, null afleverdatum, DECODE (bro_id, NULL, 'Vaste kosten ' || maand, 'Variabele kosten ' || maand) omschrijving, null aantal, kosten kostprijs, null btwbedrag, DECODE(b.fin_btwtabelwaarde_perc, NULL, '21', to_char(fin_btwtabelwaarde_perc)) btw, null docid, '' debiteurnr, null opmerking, DECODE(b.fin_btwtabelwaarde_verlegd, 1, 'Ja', NULL) BTW_verlegd, (SELECT alg_gebouw_omschrijving FROM ykpn_v_fin_gebouw g WHERE g.alg_gebouw_key = f.alg_gebouw_key) kenmerk1, null kenmerk2, null kenmerk3, null kenmerk4, null kenmerk5, maand boekmaand, -- projectcode, prs_bedrijf_naam, maand FROM ykpn_v_frozen_fact f, (SELECT fin_btwtabelwaarde_perc, fin_btwtabelwaarde_verlegd, cnt_contract_key FROM cnt_kenmerkcontract kc, cnt_kenmerk k, fin_btwtabelwaarde b WHERE kc.cnt_kenmerk_key = k.cnt_kenmerk_key AND k.cnt_srtkenmerk_key = 141 -- btwtabelwaarde key AND FAC.safe_to_number(kc.cnt_kenmerkcontract_waarde) = b.fin_btwtabelwaarde_key) b WHERE f.cnt_contract_key = b.cnt_contract_key(+) AND maand > TO_CHAR(ADD_MONTHS (SYSDATE, -120), 'yyyy-mm'); -- -- Factuur import -- CREATE OR REPLACE PROCEDURE ykpn_import_factuur (p_import_key IN NUMBER) AS -- Standaard volgorde van de kolommen in het CSV-formaat, waarbij 3 velden VERPLICHT (minimaal door Facilitor vereist) -- Variabelelijst -- v_leveranciernr: 1 -- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet") -- v_factuurdatum: 3 -- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet") -- v_locatie: 5 -- v_afleverdatum: 6 -- v_omschrijving: 7 -- v_aantal: 8 -- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet") -- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet") -- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet") -- v_docid: 12 -- v_debiteur_nr: 13 -- v_opmerking: 14 -- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/ waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet") -- v_kenmerk1: 16 -- v_kenmerk2: 17 -- v_kenmerk3: 18 -- v_kenmerk4: 19 -- v_kenmerk5: 20 -- v_boekmaand: 21 (GELDIG, Indien gevuld dan moet er een geldige jaar-maand combinatie staan. Andere waarden leidt tot "Incompleet") -- Eerst geprobeerd via nette array, geeft problemen met type buiten package, en in package lukt niet omdat -- de import in Facilitor package-loos is (en niet 1-2-3 zo kan worden gemaakt vanwege alle bestaande klanten) -- v_seq_of_columns ListOfInteger := (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21); -- Dus dan maar via een string, en ook op slimme wijze, nl alsof het een ingelezen factuur-record is met p_fielddelimitor v_seq_of_columns VARCHAR(100); -- Afwijkingen op deze volgorde zijn in eigen cust_import_factuur te regelen. -- Als leveranciersnr en factuurnr b.v. zijn omgedraaid in het CSV-formaat, -- dan factuurimport ListOfInteger := (2,1,3,4,5,6,7,8,9,10,11,12); -- v_seq_of_columns := '2;1;3;4;5;6;7;8;9;10;11;12'; -- Als leveranciersnr NIET in CSV staat, dan factuurimport ListOfInteger := (0,2,3,4,5,6,7,8,9,10,11,12); -- v_seq_of_columns := '0;2;3;4;5;6;7;8;9;10;11;12'; -- M.a.w. waar een 0 staat, wordt de variabele niet ingelezen en blift LEEG. BEGIN v_seq_of_columns := '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26'; fac_import_factuur_body(p_import_key, v_seq_of_columns); -- voeg een voorloopnul toe aan de boekmaanden op positie 6 -- 2017-9 wordt dan 2017-09 DELETE fac_imp_factuur WHERE factuurnr IS NULL AND factuurdatum IS NULL; UPDATE fac_imp_factuur SET boekmaand = SUBSTR (boekmaand, 1, 5) || 0 || SUBSTR (boekmaand, 6, 1) WHERE SUBSTR (boekmaand, 1, 4) IS NOT NULL AND SUBSTR (boekmaand, 5, 1) = '-' AND SUBSTR (boekmaand, 6, 1) IS NOT NULL AND SUBSTR (boekmaand, 7, 1) IS NULL AND fac_import_key = p_import_key; COMMIT; END; / CREATE OR REPLACE PROCEDURE ykpn_update_factuur (p_import_key IN NUMBER) AS CURSOR set_appr(v_import_key NUMBER) IS SELECT f.fin_factuur_key fin_factuur_key FROM fac_imp_factuur i, fin_factuur f WHERE fac_import_key=v_import_key AND f.fin_factuur_key=i.fin_factuur_key; v_invoerder NUMBER(10); BEGIN fac_update_factuur (p_import_key); INSERT INTO fin_kenmerkfactregel (fin_factuurregel_key, fin_kenmerk_key, fin_kenmerkfactregel_waarde) SELECT DISTINCT fin_factuurregel_key, fin_kenmerk_key, alg_gebouw_key FROM fac_imp_factuur i, fin_kenmerk k, ykpn_v_fin_gebouw g WHERE k.fin_kenmerk_key = 41 -- gebouw bij contract AND i.fin_factuurregel_key IS NOT NULL AND SUBSTR(g.alg_gebouw_omschrijving, 1,2) = SUBSTR(i.kenmerk1, 1,2) AND NOT EXISTS (SELECT fin_kenmerkfactregel_key FROM fin_kenmerkfactregel kf WHERE kf.fin_kenmerk_key = 41 AND kf.fin_factuurregel_key = i.fin_factuurregel_key); INSERT INTO fin_kenmerkfactregel (fin_factuurregel_key, fin_kenmerk_key, fin_kenmerkfactregel_waarde) SELECT DISTINCT fin_factuurregel_key, fin_kenmerk_key, fac_usrdata_key FROM fac_imp_factuur i, fin_kenmerk k, fac_usrdata ud WHERE k.fin_kenmerk_key = 61 -- afw factuuroms AND i.fin_factuurregel_key IS NOT NULL AND UPPER(ud.fac_usrdata_omschr) = UPPER(TRIM(i.kenmerk2)) AND NOT EXISTS (SELECT fin_kenmerkfactregel_key FROM fin_kenmerkfactregel kf WHERE kf.fin_kenmerk_key = 61 AND kf.fin_factuurregel_key = i.fin_factuurregel_key); -- Dan gaan we nu per aangemaakte factuur_key kijken of er een goedkeurder gekoppeld kan worden (net zoals een factuur vanuit de interface opslaat via de hookfunctie) FOR rec IN set_appr(p_import_key) LOOP ykpn.fin_set_approver(rec.fin_factuur_key); END LOOP; END; / CREATE OR REPLACE PROCEDURE YKPN_IMPORT_FIN_FACTUUR_MARX(p_import_key IN NUMBER) AS BEGIN vbxx_import_fin_factuur_marx(p_import_key); END; / CREATE OR REPLACE PROCEDURE YKPN_UPDATE_FIN_FACTUUR_MARX(p_import_key IN NUMBER) AS CURSOR set_appr(v_import_key NUMBER) IS SELECT f.fin_factuur_key fin_factuur_key FROM fac_imp_factuur i, fin_factuur f WHERE fac_import_key=v_import_key AND f.fin_factuur_key=i.fin_factuur_key; BEGIN vbxx_update_fin_factuur_marx(p_import_key); FOR rec IN set_appr(p_import_key) LOOP ykpn.fin_set_approver(rec.fin_factuur_key); END LOOP; END; / -- -- Koppeling met Exact -- -- View om gebouw bij factuurregels te tonen CREATE OR REPLACE VIEW ykpn_v_fin_gebouw ( alg_gebouw_key, alg_gebouw_omschrijving ) AS SELECT alg_gebouw_key, SUBSTR (alg_onrgoedkenmerk_waarde, 5, 2) || '-' || alg_gebouw_code || ' ' || alg_gebouw_naam FROM alg_gebouw g, alg_onrgoedkenmerk aogk WHERE g.alg_gebouw_key = aogk.alg_onrgoed_key AND alg_kenmerk_key = 1200 AND alg_gebouw_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_aanwezigfactuur ( FIN_FACTUUR_KEY, FIN_FACTUUR_NR, FIN_FACTUUR_TOTAAL, FIN_FACTUUR_TOTAAL_BTW, MLD_OPDR_KEY, CNT_CONTRACT_KEY, BES_BESTELOPDR_KEY, PRS_PERSLID_KEY_USER, FIN_FACTUUR_DATUM, FIN_FACTUUR_BOEKMAAND, FIN_FACTUUR_DEBITEUR_NR, PRS_KOSTENSOORT_KEY, FIN_FACTUUR_OPMERKING, FIN_FACTUUR_STATUSES_KEY, FIN_FACTUUR_VERWIJDER ) AS SELECT FIN_FACTUUR_KEY, FIN_FACTUUR_NR, FIN_FACTUUR_TOTAAL, FIN_FACTUUR_TOTAAL_BTW, MLD_OPDR_KEY, CNT_CONTRACT_KEY, BES_BESTELOPDR_KEY, PRS_PERSLID_KEY_USER, FIN_FACTUUR_DATUM, FIN_FACTUUR_BOEKMAAND, FIN_FACTUUR_DEBITEUR_NR, PRS_KOSTENSOORT_KEY, FIN_FACTUUR_OPMERKING, FIN_FACTUUR_STATUSES_KEY, FIN_FACTUUR_VERWIJDER FROM fin_factuur WHERE fin_factuur_verwijder IS NULL AND fin_factuur_statuses_key > 1; CREATE OR REPLACE VIEW ykpn_v_factuur_gegevens ( fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, dagboek, fin_factuurregel_totaal, fin_factuurregel_btw, fin_btwtabelwaarde_code, fin_btwtabelwaarde_key, fin_factuurregel_nr, fin_factuurregel_key, fin_factuur_debiteur_nr, fin_factuur_opmerking, fin_factuur_boekmaand, opdr_datum, project_nummer, prs_kostensoort_oms, prs_kostensoort_refcode, prs_kostensoort_opmerking, prs_kostensoort_key, prs_kostenplaats_nr, mld_opdr_key, cnt_contract_key, bes_bestelopdr_key, fin_factuur_statuses_key, lev_kpn ) AS SELECT f.fin_factuur_key, DECODE ( c.cnt_contract_key, NULL, DECODE ( bo.bes_bestelopdr_key, NULL, (SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE m.mld_melding_key = o.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key), bo.bes_bestelopdr_id), 'C' || TO_CHAR (cnt_contract_nummer_intern) || DECODE (cnt_contract_versie, NULL, NULL, '.' || cnt_contract_versie)) opdracht_id, f.fin_factuur_datum, f.fin_factuur_nr, COALESCE (b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key)) prs_bedrijf_key, DECODE ( (SELECT prs_kenmerklink_waarde FROM prs_kenmerklink kl WHERE kl.prs_kenmerk_key = 1020 AND kl.prs_link_key = COALESCE ( b_c.prs_bedrijf_key, COALESCE (b_o.prs_bedrijf_key, b_b.prs_bedrijf_key))), '1', 63, 62) dagboek, fr.fin_factuurregel_totaal, ROUND ( fr.fin_factuurregel_totaal * DECODE (btw.fin_btwtabelwaarde_verlegd, 1, 0, btw.fin_btwtabelwaarde_perc / 100), 2) fin_factuurregel_btw, btw.fin_btwtabelwaarde_code, btw.fin_btwtabelwaarde_key, fr.fin_factuurregel_nr, fr.fin_factuurregel_key, f.fin_factuur_debiteur_nr, f.fin_factuur_opmerking, f.fin_factuur_boekmaand, COALESCE ( o.mld_opdr_datumbegin, COALESCE (c.cnt_contract_looptijd_tot, bo.bes_bestelopdr_datum)), (SELECT MAX (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_opdr po WHERE ko.mld_opdr_key = po.mld_opdr_key AND o.mld_melding_key = po.mld_melding_key AND ko.mld_kenmerk_key IN (561, 5403, 5443)) -- PO nummer projectnummer, prs_kostensoort_oms, k.prs_kostensoort_refcode, k.prs_kostensoort_opmerking, k.prs_kostensoort_key, COALESCE ( (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, alg_v_onroerendgoed_gegevens aogg, mld_melding m WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_alg_onroerendgoed_keys = aogg.alg_onroerendgoed_keys AND aogg.alg_gebouw_key = aogk.alg_onrgoed_key AND aogk.alg_kenmerk_key = 1200 UNION ALL SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, fin_kenmerkfactregel kfr WHERE fr.fin_factuurregel_key = kfr.fin_factuurregel_key AND kfr.fin_kenmerk_key = 41 AND c.cnt_contract_key IS NOT NULL AND f.cnt_contract_plaats_key IS NULL AND fac.safe_to_number ( kfr.fin_kenmerkfactregel_waarde) = aogk.alg_onrgoed_key AND aogk.alg_kenmerk_key = 1200 UNION ALL SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk, cnt_contract_plaats cp WHERE f.cnt_contract_plaats_key = cp.cnt_contract_plaats_key AND cp.cnt_alg_plaats_key = aogk.alg_onrgoed_key AND c.cnt_contract_key IS NOT NULL AND aogk.alg_kenmerk_key = 1200 UNION ALL SELECT aog.alg_onrgoedkenmerk_waarde FROM bes_bestelopdr b, mld_adres m, alg_onrgoedkenmerk aog WHERE b.bes_bestelopdr_key=bo.bes_bestelopdr_key AND m.mld_adres_key=b.mld_adres_key_lev AND aog.alg_onrgoed_key=m.alg_locatie_key AND aog.alg_kenmerk_key=1200), 'Onbekend') prs_kostenplaats_nr, o.mld_opdr_key, c.cnt_contract_key, bo.bes_bestelopdr_key, ( -- status van de factuur is ingevoerd als er facturen van dezelfde leverancier en nummer zijn -- met status ingevoerd, afgewezen of incompleet SELECT DECODE (COUNT (*), 0, f.fin_factuur_statuses_key, 2) FROM fin_factuur f_t, cnt_contract c_t, bes_bestelopdr b_t, mld_opdr o_t WHERE f_t.fin_factuur_verwijder IS NULL AND f_t.mld_opdr_key = o_t.mld_opdr_key(+) AND f_t.cnt_contract_key = c_t.cnt_contract_key(+) AND f_t.bes_bestelopdr_key = b_t.bes_bestelopdr_key(+) AND COALESCE ( o_t.mld_uitvoerende_keys, COALESCE ( b_t.prs_bedrijf_key, COALESCE ( c_t.cnt_prs_bedrijf_key, (SELECT a.prs_bedrijf_key FROM prs_v_afdeling a, prs_perslid p WHERE o_t.mld_uitvoerende_keys = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key)))) = COALESCE ( o.mld_uitvoerende_keys, COALESCE ( bo.prs_bedrijf_key, COALESCE ( c.cnt_prs_bedrijf_key, (SELECT a.prs_bedrijf_key FROM prs_v_afdeling a, prs_perslid p WHERE o.mld_uitvoerende_keys = p.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key)))) AND f.fin_factuur_nr = f_t.fin_factuur_nr AND f_t.fin_factuur_statuses_key IN (1, 2, 3, 5) -- Afgewezen, Ingevoerd, Incompleet, Ter goedkeuring AND f.fin_factuur_statuses_key = 6) fin_factuur_statuses_key, lk.prs_kostenplaats_nr lev_kpn FROM fin_factuur f, fin_factuurregel fr, fin_btwtabelwaarde btw, mld_opdr o, mld_typeopdr ot, cnt_contract c, bes_bestelopdr bo, (SELECT mld_uitvoerende_key, DECODE (u.TYPE, 'B', mld_uitvoerende_key, a.prs_bedrijf_key) prs_bedrijf_key FROM mld_v_uitvoerende u, prs_v_afdeling a, prs_perslid p WHERE u.mld_uitvoerende_key = prs_perslid_key(+) AND p.prs_afdeling_key = a.prs_afdeling_key(+)) b_o, prs_bedrijf b_c, prs_bedrijf b_b, prs_kostensoort k, prs_kostensoortgrp kg, prs_kostenplaats lk WHERE f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key AND f.mld_opdr_key = o.mld_opdr_key(+) AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+) AND f.cnt_contract_key = c.cnt_contract_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+) AND bo.prs_bedrijf_key = b_b.prs_bedrijf_key(+) AND o.mld_uitvoerende_keys = b_o.mld_uitvoerende_key(+) AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+) AND c.prs_kostensoort_key = k.prs_kostensoort_key(+) AND k.prs_kostenplaats_key = lk.prs_kostenplaats_key(+) AND k.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key(+) AND f.fin_factuur_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_export_exact_xml ( result, result_order ) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'EXACT'; CREATE OR REPLACE VIEW ykpn_v_export_exact_62 ( result, result_order ) AS SELECT result, result_order FROM ykpn_v_export_exact_xml; CREATE OR REPLACE VIEW ykpn_v_export_exact_63 ( result, result_order ) AS SELECT result, result_order FROM ykpn_v_export_exact_xml; CREATE OR REPLACE VIEW ykpn_v_bron_export_exact_xml ( fin_factuur_key, opdracht_id, factuur_nr, -- crediteur factuurnummer datum, -- factuurdatum crdnr, -- crediteurnummer project_nummer, -- PO nummer bedrag_txt, bedrag, bedrag_incl, oms_regel, -- omschrijving in de detailregels reknr, -- grootboekrekeningnr kstplcode, -- kostenplaats kenmerk bij gebouw kstdrcode, -- kostendrager afh van grootboek btw_code, dagboek, oms_kop, -- omschrijving in de kopregel fin_factuur_debiteur_nr -- crediteur debiteurnummer ) AS SELECT fin_factuur_key, opdracht_id, fin_factuur_nr, TO_CHAR (fin_factuur_datum, 'yyyy-mm-dd') datum, prs_leverancier_nr crdnr, project_nummer, REPLACE (TO_CHAR (bedrag), ',', '.') bedrag_txt, bedrag, bedrag_incl, SUBSTR (UPPER (DECODE(b.prs_leverancier_nr, '801176', 'YAS', b.prs_bedrijf_naam)), 1, 3) || ',' || SUBSTR(fin_factuur_boekmaand, 6,2) || ',' || opdracht_id || ',' || DECODE(fg.cnt_contract_key, NULL, 'variabel', COALESCE (LOWER(afwfactoms), LOWER(prs_kostensoort_opmerking))) oms_regel, DECODE (fg.cnt_contract_key, NULL, DECODE(b.prs_leverancier_nr, '801176', DECODE (project_nummer, NULL, '64900', '65310'), -- Yask DECODE (project_nummer, NULL, '74900', '75310')), prs_kostensoort_oms) reknr, prs_kostenplaats_nr kstplcode, DECODE (cnt_contract_key, NULL, DECODE (project_nummer, NULL, '10', '11'), DECODE ((SELECT ins_discipline_key FROM cnt_contract c WHERE c.cnt_contract_key = fg.cnt_contract_key ), 421, '00', -- Vast 2221, '00', -- suppletie 461, '01', -- Variabel '-')) kstdrcode, fin_btwtabelwaarde_code btw_code, fg.dagboek, SUBSTR(UPPER(DECODE(b.prs_leverancier_nr, '801176', 'YAS', b.prs_bedrijf_naam)),1,3) || ',' || SUBSTR(fin_factuur_boekmaand,6,2) || DECODE(fg.cnt_contract_key, NULL, ',variabel', ','|| LOWER(prs_kostensoort_opmerking)) oms_kop, fin_factuur_debiteur_nr FROM ( SELECT g.fin_factuur_key, opdracht_id, project_nummer, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_factuur_opmerking, SUM (fin_factuurregel_totaal) bedrag, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedrag_incl, fin_btwtabelwaarde_code, prs_kostensoort_oms, prs_kostensoort_refcode, prs_kostensoort_opmerking, mld_opdr_key, cnt_contract_key, prs_kostenplaats_nr, fin_factuur_boekmaand, g.dagboek, afo.afwfactoms FROM ykpn_v_factuur_gegevens g, ykpn_exp_factuur e, (SELECT fin_factuurregel_key, fac_usrdata_omschr afwfactoms FROM fin_kenmerkfactregel kfr, fac_usrdata ud WHERE fin_kenmerk_key = 61 -- Afwijkende factuuromschrijving AND FAC.safe_to_number(fin_kenmerkfactregel_waarde) = ud.fac_usrdata_key ) afo WHERE fin_factuur_statuses_key = 6 AND g.fin_factuur_key = e.fin_factuur_key AND g.dagboek = e.dagboek AND g.fin_factuurregel_key = afo.fin_factuurregel_key(+) GROUP BY g.fin_factuur_key, opdracht_id, project_nummer, fin_factuur_datum, fin_factuur_nr, prs_bedrijf_key, fin_factuur_debiteur_nr, fin_factuur_opmerking, fin_btwtabelwaarde_code, prs_kostensoort_oms, prs_kostensoort_refcode, prs_kostensoort_opmerking, mld_opdr_key, cnt_contract_key, prs_kostenplaats_nr, fin_factuur_boekmaand, g.dagboek, afo.afwfactoms) fg, prs_bedrijf b WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key AND b.prs_leverancier_nr IS NOT NULL; -- rapport voor controle door de financiele afdeling voordat definitief geboekt wordt. CREATE OR REPLACE VIEW ykpn_v_fin_factuur_controle AS SELECT prs_leverancier_nr, boekstuknummer, dagboek, boekjaar, periode, gefiatteerd, onzeref, naamcrediteur, omschrijving, SUM (fin_factuurregel_totaal) bedrag, SUM (fin_factuurregel_totaal + fin_factuurregel_btw) bedragincl, uwref, invoerder, reknr FROM (SELECT prs_leverancier_nr, bsn.boekstuknummer, dagboek, SUBSTR (fg.fin_factuur_boekmaand, 1, 4) boekjaar, SUBSTR (fg.fin_factuur_boekmaand, 6, 2) periode, ( SELECT LISTAGG ( pf.prs_perslid_naam_full || ' ' || TO_CHAR (t.fac_tracking_datum, 'dd-mm-yyyy hh24:mi'), CHR (10)) WITHIN GROUP (ORDER BY fac_tracking_datum) AS fiatteur FROM fac_tracking t, prs_v_perslid_fullnames_all pf WHERE t.fac_srtnotificatie_key IN (131, 132) -- FINFOK, FINGOE AND t.prs_perslid_key = pf.prs_perslid_key AND t.fac_tracking_refkey = fg.fin_factuur_key GROUP BY fac_tracking_refkey) gefiatteerd, fg.fin_factuur_key OnzeRef, prs_bedrijf_naam NaamCrediteur, SUBSTR (UPPER (b.prs_bedrijf_naam), 1, 3) || ',' || SUBSTR (fin_factuur_boekmaand, 6, 2) || ',' || opdracht_id || ',' || DECODE (project_nummer, NULL, fin_factuur_opmerking, project_nummer) omschrijving, fin_factuurregel_totaal, fin_factuurregel_btw, DECODE(b.prs_leverancier_nr, '801176', DECODE (project_nummer, NULL, '64900', '65310'), -- Yask DECODE (project_nummer, NULL, '74900', '75310')) reknr, fg.fin_factuur_nr || ' ' || fg.fin_factuur_debiteur_nr uwref, (SELECT pf.prs_perslid_naam_full FROM fac_tracking t, prs_v_perslid_fullnames_all pf WHERE t.fac_srtnotificatie_key = 129 -- FINNEW AND t.fac_tracking_refkey = fg.fin_factuur_key AND t.prs_perslid_key = pf.prs_perslid_key) invoerder FROM ykpn_v_factuur_gegevens fg, prs_bedrijf b, (SELECT fin_factuur_key, fin_kenmerkfactuur_waarde boekstuknummer FROM fin_kenmerkfactuur kf WHERE fin_kenmerk_key = 1) bsn WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key AND fg.fin_factuur_key = bsn.fin_factuur_key(+)) GROUP BY prs_leverancier_nr, boekstuknummer, dagboek, boekjaar, periode, gefiatteerd, onzeref, naamcrediteur, omschrijving, reknr, uwref, invoerder; -- Procedure om alle facturen te exporteren naar exact. CREATE OR REPLACE PROCEDURE ykpn_select_exact_xml (p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_dagboek IN VARCHAR2 ) AS CURSOR c(c_dagboek VARCHAR2) IS SELECT crdnr, factuur_nr, MAX(datum) datum, MAX(oms_kop) oms_kop FROM ykpn_v_bron_export_exact_xml WHERE c_dagboek = dagboek GROUP BY crdnr, factuur_nr; CURSOR c_sub (c_crdnr VARCHAR2, c_factuur_nr VARCHAR2) IS SELECT * FROM ykpn_v_bron_export_exact_xml WHERE COALESCE(crdnr, 'CrdNr') = COALESCE(c_crdnr, 'CrdNr') AND factuur_nr = c_factuur_nr; v_order_count NUMBER; v_amount_sum NUMBER(10,2); v_amount_sum_incl NUMBER(10,2); v_count NUMBER; v_sub_count NUMBER; v_bestand VARCHAR2(12); v_boekstuknummer NUMBER; v_crdnr PRS_BEDRIJF.PRS_LEVERANCIER_NR%TYPE; v_factuur_nr FIN_FACTUUR.FIN_FACTUUR_NR%TYPE; v_bijlagen_key NUMBER; v_bijlagen_filename FAC_BIJLAGEN.FAC_BIJLAGEN_FILENAME%TYPE; v_guid VARCHAR2(50); BEGIN v_order_count := 0; v_amount_sum := 0; v_amount_sum_incl := 0; v_count := 0; v_bestand := 'EXACT'; v_crdnr := 'Q'; v_factuur_nr := 'Q'; -- Eerst opruiming DELETE FROM imp_log WHERE imp_log_applicatie = p_applname; DELETE fac_rapport WHERE fac_rapport_node = v_bestand; -- Verwijder het kenmerk boekstuknummer van de facturen die niet op verwerkt staan DELETE fin_kenmerkfactuur kf WHERE fin_kenmerk_key = 1 AND SUBSTR(fin_kenmerkfactuur_waarde, 3,2) = p_dagboek AND fin_factuur_key IN (SELECT fin_factuur_key FROM fin_factuur WHERE fin_factuur_statuses_key <> 7); -- Bewaar de factuur keys in een tijdelijke tabel zodat bij het verwerken (nieuwe export) -- deze keys gebruikt kunnen worden. DELETE ykpn_exp_factuur WHERE dagboek = p_dagboek; INSERT INTO ykpn_exp_factuur (fin_factuur_key, dagboek) ( SELECT DISTINCT fg.fin_factuur_key, fg.dagboek FROM ykpn_v_factuur_gegevens fg, prs_bedrijf b WHERE fg.prs_bedrijf_key = b.prs_bedrijf_key AND b.prs_leverancier_nr IS NOT NULL AND fg.fin_factuur_statuses_key = 6 AND fg.fin_factuur_datum > SYSDATE - (5 * 365) -- Check op geldige factuurdatum: AND fg.fin_factuur_datum < SYSDATE + 365 -- facturen mogen niet ouder zijn dan 5 jaar of meer dan één jaar in de toekomst. AND fg.dagboek=p_dagboek -- Is het hetzelfde dagboek nog ? ); -- Bepaal het boekstuknummer (key 3) met het hoogste nummer van dit jaar -- ## AAIT#36589 SELECT MAX(fin_kenmerkfactuur_waarde) INTO v_boekstuknummer FROM fin_kenmerkfactuur WHERE fin_kenmerk_key = 1 AND SUBSTR(fin_kenmerkfactuur_waarde,1,2) = TO_CHAR(SYSDATE, 'YY') AND SUBSTR(fin_kenmerkfactuur_waarde,3,2) = p_dagboek; IF v_boekstuknummer IS NULL THEN v_boekstuknummer := FAC.safe_to_number(TO_CHAR(SYSDATE, 'YY') || p_dagboek || '0000'); END IF; -- header ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); FOR rec IN c(p_dagboek) LOOP BEGIN -- Als we een nieuwe leverancier/factuurnummer tegenkomen gaan we het boekstuknummer ophogen. IF rec.crdnr <> v_crdnr OR rec.factuur_nr <> v_factuur_nr THEN v_boekstuknummer := v_boekstuknummer + 1; v_crdnr := rec.crdnr; v_factuur_nr := rec.factuur_nr; END IF; ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Description', rec.oms_kop); ykpn.add_xml_element (v_bestand, 'Date', rec.datum); ykpn.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') ); ykpn.add_xml_row (v_bestand, ''); v_sub_count := 1; FOR rec1 IN c_sub (v_crdnr, v_factuur_nr) LOOP BEGIN -- Eerst maar even een kenmerk voor het boestuknummer aanmaken ykpn.set_kenmerk('FIN', 1, rec1.fin_factuur_key, v_boekstuknummer, 0); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Date', rec1.datum); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Description', rec1.oms_regel); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Debit', rec1.bedrag_txt); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Reference', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr ); ykpn.add_xml_element (v_bestand, 'InvoiceNumber', rec1.fin_factuur_key); -- of moet dit v_boekstuknummer worden???? ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr || ' ' || rec1.fin_factuur_debiteur_nr); ykpn.add_xml_element (v_bestand, 'DocumentDate', TO_CHAR(SYSDATE, 'YYYY-MM-DD') ); ykpn.add_xml_row (v_bestand, ''); SELECT MAX(fac_bijlagen_key) INTO v_bijlagen_key FROM fac_v_bijlagen WHERE fac_bijlagen_module = 'FIN' AND fac_bijlagen_refkey = rec1.fin_factuur_key AND fac_bijlagen_kenmerk_key = 21; IF v_bijlagen_key IS NOT NULL AND v_sub_count = 1 THEN SELECT fac_bijlagen_filename INTO v_bijlagen_filename FROM fac_v_bijlagen WHERE fac_bijlagen_key = v_bijlagen_key; v_guid := sys_guid(); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Subject', xml.char_to_html(v_boekstuknummer)); ykpn.add_xml_element (v_bestand, 'OurRef', xml.char_to_html(v_boekstuknummer)); ykpn.add_xml_element (v_bestand, 'YourRef', rec.factuur_nr); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_element (v_bestand, 'FCLTattachment', v_bijlagen_key); ykpn.add_xml_row (v_bestand, ''); END IF; IF rec1.project_nummer IS NOT NULL THEN ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, 'PO' || rec1.project_nummer || ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); END IF; ykpn.add_xml_row (v_bestand, ''); v_sub_count := v_sub_count + 1; v_amount_sum := v_amount_sum + rec1.bedrag; v_amount_sum_incl := v_amount_sum_incl + rec1.bedrag_incl; END; END LOOP; IF v_sub_count = 1 THEN fac.writelog (p_applname, 'E', 'Fout tijdens Exact export. Factuurnummer: ' || v_factuur_nr || ' Crdnr: ' || v_crdnr,''); END IF; ykpn.add_xml_row (v_bestand, ''); v_order_count := v_order_count + 1; END; END LOOP; ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); fac.writelog (p_applname, 'S', 'Exact export uitgevoerd. Aantal regels: ' || v_order_count || ' Totaal bedrag: ' || v_amount_sum || ' Totaal bedrag (incl): ' || v_amount_sum_incl, ''); END; / CREATE OR REPLACE PROCEDURE ykpn_select_exact_62 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_exact_xml (p_applname, p_applrun, '62'); END; / CREATE OR REPLACE PROCEDURE ykpn_select_exact_63 (p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_exact_xml (p_applname, p_applrun, '63'); END; / -- Procedure om alle facturen te exporteren naar exact. CREATE OR REPLACE PROCEDURE ykpn_export_exact_62 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Verwerk actie direct starten na de EXPORT_EXACT -- INSERT INTO imp_schedule (imp_schedule_name) VALUES ('VERWERK_EXACT_62'); NULL; END; / -- Procedure om alle facturen te exporteren naar exact. CREATE OR REPLACE PROCEDURE ykpn_export_exact_63 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN -- Verwerk actie direct starten na de EXPORT_EXACT -- INSERT INTO imp_schedule (imp_schedule_name) VALUES ('VERWERK_EXACT_63'); NULL; END; / CREATE OR REPLACE VIEW ykpn_v_export_verwerk_exact ( result, result_order ) AS SELECT 'Lijst met bevroren facturen:' fac_rapport_regel, 0 fac_rapport_volgnr FROM DUAL UNION ALL SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'VW_EXACT'; CREATE OR REPLACE VIEW ykpn_v_export_verwerk_exact_62 ( result, result_order ) AS SELECT result, result_order FROM ykpn_v_export_verwerk_exact; CREATE OR REPLACE VIEW ykpn_v_export_verwerk_exact_63 ( result, result_order ) AS SELECT result, result_order FROM ykpn_v_export_verwerk_exact; CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_dagboek IN VARCHAR2 ) AS CURSOR c_fact IS SELECT DISTINCT f.fin_factuur_key FROM ykpn_exp_factuur f , ykpn_v_factuur_gegevens fg WHERE f.fin_factuur_key = fg.fin_factuur_key AND fg.fin_factuur_statuses_key = 6 AND f.dagboek = p_dagboek; v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanvrager NUMBER; v_bestelling_key NUMBER; v_bestand VARCHAR2(12); v_logdate DATE; v_volgnr NUMBER; BEGIN v_errormsg := 'Geen akties'; v_aanvrager := 3; -- Facilitor v_logdate := SYSDATE; v_bestand := 'VW_EXACT'; v_volgnr := 1; -- Eerst opruiming DELETE fac_rapport WHERE fac_rapport_node = v_bestand; FOR rec1 IN c_fact LOOP BEGIN UPDATE fin_factuur f SET fin_factuur_statuses_key = 7 WHERE f.fin_factuur_key = rec1.fin_factuur_key; fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES (v_bestand, v_volgnr, rec1.fin_factuur_key); v_volgnr := v_volgnr + 1; END; END LOOP; -- verwijder de enties uit de tijdelijke tabel. DELETE ykpn_exp_factuur WHERE dagboek = p_dagboek; END; / CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact_62 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_verwerk_exact (p_applname, p_applrun, '62'); END; / CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact_63 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_verwerk_exact (p_applname, p_applrun, '63'); END; / CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_dagboek IN VARCHAR2 ) AS CURSOR c_fact IS SELECT DISTINCT f.fin_factuur_key FROM ykpn_exp_factuur f , ykpn_v_factuur_gegevens fg WHERE f.fin_factuur_key = fg.fin_factuur_key AND fg.fin_factuur_statuses_key = 6 AND f.dagboek = p_dagboek; v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanvrager NUMBER; v_bestelling_key NUMBER; v_bestand VARCHAR2(12); v_logdate DATE; v_volgnr NUMBER; BEGIN v_errormsg := 'Geen akties'; v_aanvrager := 3; -- Facilitor v_logdate := SYSDATE; v_bestand := 'VW_EXACT'; v_volgnr := 1; -- Eerst opruiming DELETE fac_rapport WHERE fac_rapport_node = v_bestand; FOR rec1 IN c_fact LOOP BEGIN UPDATE fin_factuur f SET fin_factuur_statuses_key = 7 WHERE f.fin_factuur_key = rec1.fin_factuur_key; fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES (v_bestand, v_volgnr, rec1.fin_factuur_key); v_volgnr := v_volgnr + 1; END; END LOOP; -- verwijder de enties uit de tijdelijke tabel. DELETE ykpn_exp_factuur WHERE dagboek = p_dagboek; END; / CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact_62 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_verwerk_exact (p_applname, p_applrun, '62'); END; / CREATE OR REPLACE PROCEDURE ykpn_select_verwerk_exact_63 ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS BEGIN ykpn_select_verwerk_exact (p_applname, p_applrun, '63'); END; / CREATE OR REPLACE PROCEDURE YKPN_SELECT_CIRFOOD_CATERING( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS CURSOR sel IS SELECT distinct rra.res_rsv_ruimte_key rrr_key, rrr.res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr reservering, rrr.res_rsv_ruimte_opmerking opmerking, rrr.res_rsv_ruimte_van van, rrr.res_rsv_ruimte_tot tot, (SELECT prs_perslid_naam_friendly FROM prs_v_perslid_fullnames WHERE prs_perslid_key=rrr.res_rsv_ruimte_contact_key) aanvrager, p.prs_perslid_telefoonnr telefoon, p.prs_perslid_email email, k.prs_kostenplaats_key, k.prs_kostenplaats_nr kostenplaats, k.prs_kostenplaats_omschrijving, b.prs_bedrijf_key, b.prs_overeenkomst_nr, COALESCE( (SELECT ao.alg_onrgoedkenmerk_waarde FROM alg_v_allonrgoed_gegevens alg, alg_onrgoedkenmerk ao, alg_kenmerk ak WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key AND ao.alg_onrgoed_key=alg.alg_gebouw_key AND UPPER(ak.alg_kenmerk_omschrijving)='CIRFOOD LOCATIECODE' AND ao.alg_kenmerk_key = ak.alg_kenmerk_key), (SELECT ao.alg_onrgoedkenmerk_waarde FROM (SELECT MIN(rarm.alg_ruimte_key) alg_ruimte_key FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm WHERE rro.res_ruimte_opstel_key =rrr.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rarm.res_ruimte_key = rr.res_ruimte_key AND rarm.res_alg_ruimte_verwijder IS NULL) ruimte, alg_v_ruimte_gegevens_all alg, alg_onrgoedkenmerk ao, alg_kenmerk ak WHERE alg.alg_ruimte_key = ruimte.alg_ruimte_key AND ao.alg_onrgoed_key=alg.alg_gebouw_key AND UPPER(ak.alg_kenmerk_omschrijving)='CIRFOOD LOCATIECODE' AND ao.alg_kenmerk_key = ak.alg_kenmerk_key)) cirfood_loc, COALESCE ( (SELECT alg_ruimte_nr FROM alg_v_allonrgoed_gegevens alg WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key), (SELECT MIN(alg.alg_ruimte_nr) FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rarm.res_ruimte_key = rr.res_ruimte_key AND rarm.res_alg_ruimte_verwijder IS NULL AND alg.alg_ruimte_key = rarm.alg_ruimte_key)) ruimtenr FROM res_rsv_artikel rra, res_artikel ra, res_discipline rd, res_disc_params rdp, prs_bedrijf b, res_rsv_ruimte rrr, prs_kostenplaats k, prs_v_perslid_gegevens p WHERE rrr.res_rsv_ruimte_van > TO_DATE('01-05-2022','DD-MM-YYYY') AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rra.res_artikel_key = ra.res_artikel_key AND ra.res_discipline_key = rd.ins_discipline_key AND rd.ins_discipline_key = rdp.res_ins_discipline_key AND rra.res_status_bo_key = 5 -- afgemeld AND rdp.prs_bedrijf_key = b.prs_bedrijf_key AND rdp.prs_bedrijf_key = 90501 -- Cirfood algemeen AND p.prs_perslid_key=rrr.res_rsv_ruimte_contact_key AND rra.res_rsv_artikel_verwijder IS NULL AND rrr.res_rsv_ruimte_verwijder IS NULL AND rrr.res_rsv_ruimte_externsyncdate IS NULL; CURSOR sel_art(p_rrr_key NUMBER) IS SELECT rra.res_rsv_artikel_key, rra.res_rsv_artikel_aantal aantal, ra.res_artikel_omschrijving artikel_omschrijving, COALESCE(ra.RES_ARTIKEL_NR,ra.res_artikel_externnr) artikelnr, rra.res_rsv_artikel_levering van, ra.res_artikel_btw btw, rra.res_rsv_artikel_prijs totprijs, ra.res_artikel_prijs prijs, rd.ins_discipline_omschrijving catalogus FROM res_rsv_artikel rra, res_artikel ra, res_discipline rd WHERE rra.res_rsv_ruimte_key=p_rrr_key AND rra.res_artikel_key = ra.res_artikel_key AND rra.res_status_bo_key = 5 -- afgemeld AND rra.res_rsv_artikel_verwijder IS NULL AND ra.res_artikel_btw IN (0, 9, 21) AND rd.ins_discipline_key=ra.res_discipline_key; v_bestand VARCHAR2(20); v_shop_token VARCHAR2(50); v_contact_email VARCHAR2(50); v_debitor_value VARCHAR2(20); v_counter NUMBER; v_artikelprijs NUMBER; BEGIN v_bestand :='CIRF-EX'; v_counter:=0; -- CIRFOOD settings v_shop_token:='KPN_12345'; v_contact_email :='cirfoodcontact@kpn.com'; v_debitor_value := 'KPN_DEB_CODE'; -- eerst opschonen DELETE FROM fac_rapport WHERE fac_rapport_node = v_bestand; ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, '
'); ykpn.add_xml_row (v_bestand, ''||v_shop_token||''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, '1'); ykpn.add_xml_row (v_bestand, 'KPN'); ykpn.add_xml_row (v_bestand, ''||v_contact_email||''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, 'Purchaseorder Facilitor'); ykpn.add_xml_row (v_bestand, '
'); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); FOR rec IN sel LOOP v_counter:=v_counter+1; ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Name', 'KPN'); ykpn.add_xml_element (v_bestand, 'ID', '9500'); ykpn.add_xml_element (v_bestand, 'ExternalID', rec.reservering); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Name', rec.aanvrager); ykpn.add_xml_element (v_bestand, 'Tel', rec.telefoon); ykpn.add_xml_element (v_bestand, 'Email', rec.email); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Comments', REGEXP_REPLACE(rec.opmerking, '[^ -~|[:space:]]', '')); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Reference', rec.cirfood_loc); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Description',rec.ruimteNr); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'RequestedDeliveryDateTime',to_char(rec.van,'YYYYMMDD')||'T'||to_char(rec.van,'HH24:MI:SS')); ykpn.add_xml_element (v_bestand, 'RequestedCollectDateTime',to_char(rec.tot,'YYYYMMDD')||'T'||to_char(rec.tot,'HH24:MI:SS')); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Code',rec.kostenplaats); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); FOR rec_art in sel_art(rec.rrr_key) LOOP ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Start',TO_CHAR(rec_art.van,'HH24:MI')); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'Description',rec_art.artikel_omschrijving); ykpn.add_xml_element (v_bestand, 'Reference',rec_art.artikelnr); ykpn.add_xml_row(v_bestand, ''); v_artikelprijs:=0; IF UPPER(rec_art.catalogus) = 'CIRFOOD - MAATWERK' THEN v_artikelprijs := rec_art.totprijs/rec_art.aantal; ELSE v_artikelprijs := rec_art.prijs; END IF; ykpn.add_xml_element (v_bestand, 'QuantityOrdered',rec_art.aantal); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_element (v_bestand, 'NetPrice',v_artikelprijs); ykpn.add_xml_element (v_bestand, 'BrtPrice',ROUND(v_artikelPrijs*(1+rec_art.btw/100),2)); ykpn.add_xml_element (v_bestand, 'Currency','EUR'); ykpn.add_xml_element (v_bestand, 'VatPercentage',rec_art.btw); ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); UPDATE res_rsv_artikel SET res_rsv_artikel_externsyncdate=SYSDATE WHERE res_rsv_artikel_key=rec_art.res_rsv_artikel_key; END LOOP; ykpn.add_xml_row(v_bestand, ''); ykpn.add_xml_row(v_bestand, ''); UPDATE res_rsv_ruimte SET res_rsv_ruimte_externsyncdate=SYSDATE WHERE res_rsv_ruimte_key=rec.rrr_key; END LOOP; ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, ''); ykpn.add_xml_row (v_bestand, '
'); IF v_counter=0 -- we hebben niets te exporteren dan kunnen we de xml headers ook opruimen. THEN DELETE FROM fac_rapport WHERE fac_rapport_node = v_bestand; END IF; END; / CREATE OR REPLACE VIEW YKPN_V_EXPORT_CIRFOOD_CATERING ( result, result_order ) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node LIKE 'CIRF-EX%'; -- View om rapport tbv van Cirfood voor starten export CREATE OR REPLACE VIEW YKPN_V_CIRFOODEXPORTLIJST ( rrr_key, reservering, opmerking, van, tot, artikelnr, artikel_omschrijving, aantal, btw, totprijs, prijs, kostenplaats, kp_omschrijving, cirfood_loc, ruimtenr, exportdatum, status ) AS SELECT distinct rra.res_rsv_ruimte_key rrr_key, rrr.res_reservering_key||'/'||rrr.res_rsv_ruimte_volgnr reservering, rrr.res_rsv_ruimte_opmerking opmerking, rrr.RES_RSV_RUIMTE_VAN van, rrr.RES_RSV_RUIMTE_tot tot, COALESCE(ra.RES_ARTIKEL_NR,ra.res_artikel_externnr) artikelnr, ra.res_artikel_omschrijving artikel_omschrijving, rra.res_rsv_artikel_aantal aantal, ra.res_artikel_btw btw, rra.res_rsv_artikel_prijs totprijs, ra.res_artikel_prijs prijs, k.prs_kostenplaats_nr kostenplaats, k.prs_kostenplaats_omschrijving kp_omschrijving, COALESCE( (SELECT ao.alg_onrgoedkenmerk_waarde FROM alg_v_allonrgoed_gegevens alg, alg_onrgoedkenmerk ao, alg_kenmerk ak WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key AND ao.alg_onrgoed_key=alg.alg_gebouw_key AND UPPER(ak.alg_kenmerk_omschrijving)='CIRFOOD LOCATIECODE' AND ao.alg_kenmerk_key = ak.alg_kenmerk_key), (SELECT ao.alg_onrgoedkenmerk_waarde FROM (SELECT MIN(rarm.alg_ruimte_key) alg_ruimte_key FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm WHERE rro.res_ruimte_opstel_key =rrr.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rarm.res_ruimte_key = rr.res_ruimte_key AND rarm.res_alg_ruimte_verwijder IS NULL) ruimte, alg_v_ruimte_gegevens_all alg, alg_onrgoedkenmerk ao, alg_kenmerk ak WHERE alg.alg_ruimte_key = ruimte.alg_ruimte_key AND ao.alg_onrgoed_key=alg.alg_gebouw_key AND UPPER(ak.alg_kenmerk_omschrijving)='CIRFOOD LOCATIECODE' AND ao.alg_kenmerk_key = ak.alg_kenmerk_key)) cirfood_loc, COALESCE ( (SELECT alg_ruimte_nr FROM alg_v_allonrgoed_gegevens alg WHERE alg.alg_ruimte_key=rrr.alg_ruimte_key), (SELECT MIN(alg.alg_ruimte_nr) FROM res_ruimte_opstelling rro, res_ruimte rr, res_alg_ruimte rarm, alg_v_ruimte_gegevens_all alg WHERE rrr.res_ruimte_opstel_key = rro.res_ruimte_opstel_key AND rr.res_ruimte_key = rro.res_ruimte_key AND rarm.res_ruimte_key = rr.res_ruimte_key AND rarm.res_alg_ruimte_verwijder IS NULL AND alg.alg_ruimte_key = rarm.alg_ruimte_key)) ruimtenr, rrr.res_rsv_ruimte_externsyncdate exportdatum, (SELECT res_status_bo_omschrijving FROM res_status_bo WHERE res_status_bo_key=rra.res_status_bo_key) status FROM res_rsv_artikel rra, res_artikel ra, res_discipline rd, res_disc_params rdp, prs_bedrijf b, res_rsv_ruimte rrr, prs_kostenplaats k WHERE rrr.res_rsv_ruimte_van > TO_DATE('01-05-2022','DD-MM-YYYY') AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rra.res_artikel_key = ra.res_artikel_key AND ra.res_discipline_key = rd.ins_discipline_key AND rd.ins_discipline_key = rdp.res_ins_discipline_key -- AND rra.res_status_bo_key = 5 -- afgemeld AND rdp.prs_bedrijf_key = b.prs_bedrijf_key AND rdp.prs_bedrijf_key = 90501 -- Cirfood algemeen AND rra.res_rsv_artikel_verwijder IS NULL; -- Koppeling om finaciele gegevens over catering te exporteren naar Cirfood (Exact verkoop) -- We gaan eerst alle catering in de verkoopfactuur tabel plaatsen -- Daarna vullen we de verkoopfactuurkop met het boekstuknummer (aaneengesloten nummering) -- De data uit de ykpn_v_verkoop_cirfood_t view wordt in de fac_rapport tabel geplaatst -- waarbij de volgnummers aangepast worden. Normaal hebben alle kopregels een 0 en de volgregels -- een 1. Maar bij het inlezen in de fac_rapport tabel wordt er voor gezorgd dat de juiste nummering -- ingevuld wordt. -- Het te exporteren bestand komt in dan in de view ykpn_v_exp_cirfood beschikbaar. -- Dan moet nog in de verkoopfactuur tabel gemarkeerd worden dat deze regels geexporteerd zijn door -- de verkoopfactuur_datum te vullen. -- En als laatste de catering artikelen naar status 6 (verwerkt) brengen. CREATE OR REPLACE VIEW ykpn_v_verkoop_cirfood_t ( result, resultorder ) AS SELECT '1' -- 01 Regelnummer || ';' || 'V' -- 02 Dagboektype (V) verkoop || ';' || '75' -- 03 Dagboeknummer || ';' || ';' || ';' || SUBSTR (vfk.fin_verkoopfactuurkop_id, 9, 100) -- 06 Boekstuknummer opeenvolgend nummer || ';' || prs_debiteur_naam || '/' || prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving || ' ' || vf.fin_btwtabelwaarde_perc || '%;' -- 07 Omschrijving || TO_CHAR (SYSDATE, 'DDMMYYYY') -- 08 Factuurdatum || ';' || prs_kostensoort_refcode -- 09 Grootboekrekening || ';' || ';' || ';' || ';' || ROUND ( SUM (vf.fin_verkoopfactuur_bedrag) * (100 / (100 + vf.fin_btwtabelwaarde_perc)), 2) -- 13 bedrag || ';' || ';' || ';' || ';' || ';' || ';' || ';' || ';' || fin_btwtabelwaarde_code -- 21 BTW || ';' || ROUND ( SUM (vf.fin_verkoopfactuur_bedrag) * ( vf.fin_btwtabelwaarde_perc / (100 + vf.fin_btwtabelwaarde_perc)), 2) || ';', -- 22 btw bedrag prs_kostenplaats_nr || '-' || 1 FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk WHERE vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key AND fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuur_datum IS NULL GROUP BY vfk.fin_verkoopfactuurkop_id, prs_debiteur_naam, vf.prs_kostenplaats_nr, vf.prs_kostenplaats_omschrijving, fin_btwtabelwaarde_perc, fin_btwtabelwaarde_code, prs_kostensoort_refcode UNION ALL SELECT '0' -- 01 Regelnummer || ';' || 'V' -- 02 Dagboektype (V) verkoop || ';' || '75' -- 03 Dagboeknummer || ';' || ';' || ';' || SUBSTR (vfk.fin_verkoopfactuurkop_id, 9, 100) -- 06 Boekstuknummer opeenvolgend nummer || ';' || prs_debiteur_naam || '/' || prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving -- 07 Omschrijving || ';' || TO_CHAR (SYSDATE, 'DDMMYYYY') -- 08 Factuurdatum || ';' || ';' || prs_debiteur_naam -- 10 Debiteurnummer || ';' || ';' || ';' || SUM (vf.fin_verkoopfactuur_bedrag) -- 13 bedrag || ';' || ';' || ';' || ';' || ';' || ';' || ';' || ';' || ';' || ';', prs_kostenplaats_nr || '-' || 0 FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk WHERE vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key AND fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuur_datum IS NULL GROUP BY vfk.fin_verkoopfactuurkop_id, prs_debiteur_naam, vf.prs_kostenplaats_nr, vf.prs_kostenplaats_omschrijving; CREATE OR REPLACE VIEW ykpn_v_export_cirfood (result, result_order) AS SELECT fac_rapport_regel, fac_rapport_volgnr FROM fac_rapport WHERE fac_rapport_node = 'CIRFOOD'; CREATE OR REPLACE PROCEDURE ykpn_select_cirfood (p_applname IN VARCHAR2, p_applrun IN VARCHAR2) AS CURSOR c_kop IS SELECT prs_kostenplaats_nr FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuurkop_key IS NULL GROUP BY prs_kostenplaats_nr; CURSOR c_rap IS SELECT result, resultorder FROM ykpn_v_verkoop_cirfood_t ORDER BY resultorder; v_first NUMBER; v_count NUMBER; v_index NUMBER; v_boekstuknr VARCHAR2(100); v_verkoopfactuurkop_key NUMBER(10); v_errormsg VARCHAR (200); v_errorhint VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errorhint := 'Verwijder verkoopfacturen die niet geexporteerd zijn.'; DELETE fin_verkoopfactuur WHERE fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuur_datum IS NULL; DELETE fin_verkoopfactuurkop vfk WHERE NOT EXISTS ( SELECT 1 FROM fin_verkoopfactuur vf WHERE vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key); v_errorhint := 'Voeg de records toe aan de verkoopfactuur tabel.'; INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_id, fin_verkoopfactuur_omschr, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, prs_kostenplaats_key, prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_bedrijf_key, prs_debiteur_naam, fin_btwtabelwaarde_perc, fin_btwtabelwaarde_code, fin_verkoopfactuur_bedrag, prs_kostensoort_refcode) SELECT TO_CHAR (SYSDATE, 'YYYYMMDD') || '-' || prs_kostenplaats_nr || '-' || rra.res_rsv_artikel_key, rra.res_rsv_artikel_aantal || '*' || ra.res_artikel_omschrijving, 'res_artikel', rra.res_rsv_artikel_key, k.prs_kostenplaats_key, k.prs_kostenplaats_nr, k.prs_kostenplaats_omschrijving, b.prs_bedrijf_key, prs_overeenkomst_nr, ra.res_artikel_btw, DECODE (ra.res_artikel_btw, 0, '00', 9, '8', 21, '1'), rra.res_rsv_artikel_prijs, DECODE (ra.res_artikel_btw, 0, '8200', 9, '8210', 21, '8220') FROM res_rsv_artikel rra, res_artikel ra, res_discipline rd, res_disc_params rdp, prs_bedrijf b, res_rsv_ruimte rrr, prs_kostenplaats k WHERE rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND rra.res_artikel_key = ra.res_artikel_key AND ra.res_discipline_key = rd.ins_discipline_key AND rd.ins_discipline_key = rdp.res_ins_discipline_key AND rra.res_status_bo_key = 5 -- afgemeld AND rdp.prs_bedrijf_key = b.prs_bedrijf_key AND rdp.prs_bedrijf_key = 90501 -- Cirfood algemeen AND rra.res_rsv_artikel_verwijder IS NULL AND ra.res_artikel_btw IN (0, 9, 21); -- Zoek het laatste boekstuknummer op v_errorhint := 'Zoek het vorige boekstuknummer op'; SELECT MAX(SUBSTR(fin_verkoopfactuurkop_id, 9,100)) INTO v_boekstuknr FROM fin_verkoopfactuur vf, fin_verkoopfactuurkop vfk WHERE vf.fin_verkoopfactuurkop_key = vfk.fin_verkoopfactuurkop_key AND vf.fin_verkoopfactuur_xmlnode = 'res_artikel'; IF v_boekstuknr IS NULL THEN v_boekstuknr := '20200001'; END IF; -- Dan gaan we nu voor de nieuwe facturen het boekstuknummer invullen. FOR rec IN c_kop LOOP BEGIN v_boekstuknr := v_boekstuknr + 1; v_errorhint := 'Maak nieuw boekstuknummer aan: ' || v_boekstuknr; INSERT INTO fin_verkoopfactuurkop (fin_verkoopfactuurkop_id) VALUES ('Cirfood-' || v_boekstuknr) RETURNING fin_verkoopfactuurkop_key INTO v_verkoopfactuurkop_key; v_errorhint := 'Koppel de facturen aan het boekstuknummer: ' || v_boekstuknr || ' kostenplaats: ' || rec.prs_kostenplaats_nr; UPDATE fin_verkoopfactuur SET fin_verkoopfactuurkop_key = v_verkoopfactuurkop_key WHERE fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuurkop_key IS NULL AND prs_kostenplaats_nr = rec.prs_kostenplaats_nr; END; END LOOP; v_errorhint := 'Verwijder de oude records uit de fac_rapport tabel'; DELETE fac_rapport WHERE fac_rapport_node = 'CIRFOOD'; v_count := 0; v_index := 0; FOR rec IN c_rap LOOP BEGIN v_errorhint := 'Pas het volgnummer in de regel aan: ' || SUBSTR(rec.result,1,50); v_index := v_index + 1; v_first := substr(rec.result, 1,1); IF v_first = 0 THEN v_count := 0; ELSE v_count := v_count + 1; END IF; INSERT INTO fac_rapport ( fac_rapport_node, fac_rapport_regel, fac_rapport_volgnr) VALUES ( 'CIRFOOD', v_count || substr (rec.result, 2), v_index); END; END LOOP; v_errorhint := 'Zet de status van de artikelen naar verwerkt'; UPDATE res_rsv_artikel SET res_status_bo_key = 6 WHERE res_rsv_artikel_key IN (SELECT fin_verkoopfactuur_refkey FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuur_datum IS NULL); v_errorhint := 'Markeer de verkoopfactuur regels om aan te geven dat we klaar zijn'; UPDATE fin_verkoopfactuur SET fin_verkoopfactuur_datum = SYSDATE WHERE fin_verkoopfactuur_xmlnode = 'res_artikel' AND fin_verkoopfactuur_datum IS NULL; 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 || ')'; ROLLBACK; fac.writelog ('CIRFOOD', 'E', v_errormsg, v_errorhint); END; / -- Importfunctie om objecten (mobiele telefoons) in Facilitor in te lezen CREATE OR REPLACE PROCEDURE ykpn_import_ins_mob (p_import_key IN NUMBER) AS BEGIN fac_import_ins (p_import_key); END; / CREATE OR REPLACE PROCEDURE ykpn_update_ins_mob (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_ins i; v_perslid_key NUMBER(10); BEGIN -- als de locatiecode minder dan 3 posities heeft dan moeten we er een voorloopnul aan toevoegen. UPDATE fac_imp_ins SET alg_locatie_code = '0' || alg_locatie_code WHERE LENGTH (alg_locatie_code) = 2; -- Eerst de standaard import fac_update_ins (p_import_key); -- En vervolgens de ruisnaam koppelen als uitleen FOR rec IN c LOOP BEGIN SELECT prs_perslid_key INTO v_perslid_key FROM prs_perslid WHERE prs_perslid_verwijder IS NULL AND prs_perslid_oslogin = UPPER(SUBSTR(rec.ins_kenmerkwaarde1, INSTR(rec.ins_kenmerkwaarde1, '=')+1)); UPDATE ins_deel SET ins_alg_ruimte_key_org = ins_alg_ruimte_key, ins_alg_ruimte_type_org = ins_alg_ruimte_type WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving; UPDATE ins_deel SET ins_alg_ruimte_key = v_perslid_key, ins_alg_ruimte_type = 'P' WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving; EXCEPTION WHEN NO_DATA_FOUND THEN fac.imp_writelog ( p_import_key, 'E', 'Persoon kan niet gevonden worden en wordt niet gekoppeld: ' || rec.ins_deel_omschrijving || '-' || UPPER(SUBSTR(rec.ins_kenmerkwaarde1, INSTR(rec.ins_kenmerkwaarde1, '=')+1)), ''); END; END LOOP; END; / -- -- Importprocedure om mail berichten van de storelocator in Facilitor in te lezen -- Andere imports zijn ook mogelijk zo is er een specifieke koppeling met Qyn -- Daarnaast is er een algemene mail import. Hierbij wordt de standaardmelding_key uit -- een kenmerk bij de persoon gelezen en bepaald de bezetting van deze persoon de locatie. -- De persoon wordt gevonden door in de login op pto te zoeken. CREATE OR REPLACE PROCEDURE ykpn_processemail (pfrom IN VARCHAR2, pto IN VARCHAR2, psubject IN VARCHAR2, pbody IN VARCHAR2, psessionid IN VARCHAR2, pemailkey IN NUMBER) AS v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_perslid_key NUMBER (10); v_kostenplaats_key NUMBER (10); v_stdmelding_key NUMBER (10); v_stdmelding_uvt mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie v_stdmelding2_key NUMBER (10); v_stdmelding2_uvt mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD (NULL, NULL); -- constructor initialisatie v_deel_key NUMBER (10); v_locatie_key NUMBER (10); v_locatie_code VARCHAR2(100); v_melding_key NUMBER (10); v_kenmerk_key NUMBER (10); v_bedrijf_key NUMBER (10); v_opdr_key NUMBER (10); v_typeopdr_key NUMBER (10); v_statusopdr_key NUMBER (10); v_behandelaar_key NUMBER (10); v_behandelaar2_key NUMBER (10); v_regexp VARCHAR2 (100); v_opdr_id VARCHAR2 (100); v_mld_id VARCHAR2 (100); v_notificatie_code VARCHAR2 (10); v_link VARCHAR2 (4000); -- Qyn koppeling v_naam VARCHAR2(100); -- Topdesk nummer v_externnummer VARCHAR2(100); -- Facilitor nummer v_date_txt VARCHAR2(100); -- Datum in tekst formaat v_closed VARCHAR2(100); -- Indicatie true / false of de melding afgesloten is. v_oplossing VARCHAR2(1000); -- Oplostekst v_actie VARCHAR2(1000); -- Update afhandeling v_date DATE; -- Datum in date formaat v_from_key NUMBER(10); -- Key van de afzender -- Corona bezoek v_locatie VARCHAR2(1000); v_bezoeker VARCHAR2(1000); v_reden VARCHAR2(1000); v_datum VARCHAR2(1000); v_aanvrager VARCHAR2(1000); v_bedrijfsmiddel VARCHAR2(1000); v_afspraak_key NUMBER; FUNCTION get_xml_tag (p_line IN VARCHAR2, p_tag IN VARCHAR2) RETURN VARCHAR2 AS v_start NUMBER; v_einde NUMBER; BEGIN v_start := INSTR(p_line, '<' || p_tag || '>') + LENGTH('<' || p_tag || '>'); v_einde := INSTR(p_line, '') - v_start; IF v_start = 0 OR v_einde < 1 THEN RETURN NULL; ELSE RETURN substr(p_line, v_start, v_einde); END IF; END; BEGIN CASE WHEN UPPER (pto) LIKE 'QYN@%' THEN DELETE fac_rapport WHERE fac_rapport_node = 'PROCESSEMAIL'; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 1, pbody); SELECT prs_perslid_key INTO v_from_key FROM prs_perslid WHERE UPPER(prs_perslid_email) = UPPER(pfrom); v_naam := get_xml_tag(pbody, 'naam'); v_externnummer := get_xml_tag(pbody, 'externnummer'); v_date_txt := get_xml_tag(pbody, 'date'); v_date_txt := REPLACE(SUBSTR(v_date_txt, 1, INSTR(v_date_txt, '+')-1), 'T', ' '); v_closed := get_xml_tag(pbody, 'closed'); v_oplossing := get_xml_tag(pbody, 'oplossing'); v_actie := get_xml_tag(pbody, 'actie'); v_date := FAC.safe_to_date(v_date_txt, 'yyyy-mm-dd hh24:mi:ss'); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 2, 'naam: '|| SUBSTR(v_naam, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 3, 'externnummer: '|| SUBSTR(v_externnummer, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 4, 'date_txt: '|| SUBSTR(v_date_txt, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 5, 'date: '|| SUBSTR(v_date, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 6, 'closed: '|| SUBSTR(v_closed, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 7, 'oplossing: ' || SUBSTR(v_oplossing, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAIL', 8, 'actie: '|| SUBSTR(v_actie, 1, 1900)); v_errormsg := 'Opzoeken van de opdracht: ' || REGEXP_SUBSTR (v_externnummer, '[[:digit:]]{5,}/[[:digit:]]*') || ' Afzender:' || pfrom; SELECT mld_opdr_key, mld_melding_key, mld_typeopdr_key, mld_statusopdr_key INTO v_opdr_key, v_melding_key, v_typeopdr_key, v_statusopdr_key FROM mld_opdr o, prs_contactpersoon cp WHERE mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr = REGEXP_SUBSTR (v_externnummer, '[[:digit:]]{5,}/[[:digit:]]*') AND o.mld_uitvoerende_keys = cp.prs_bedrijf_key AND cp.prs_perslid_key = v_from_key; v_errormsg := 'Accepteer opdracht: ' || REGEXP_SUBSTR (v_externnummer, '[[:digit:]]{5,}/[[:digit:]]*') || ' Afzender:' || pfrom; IF v_statusopdr_key = 5 -- Toegekend THEN mld.setopdrachtstatus (v_opdr_key, 8, v_from_key); -- Geaccepteerd. END IF; BEGIN v_errormsg := 'Opzoeken kenmerk[Ref. Nr. Leverancier]: ' || REGEXP_SUBSTR (v_externnummer, '[[:digit:]]{5,}/[[:digit:]]*') || ' Afzender:' || pfrom; SELECT mld_kenmerk_key INTO v_kenmerk_key FROM mld_kenmerk WHERE mld_kenmerk_niveau = 'O' AND mld_typeopdr_key = v_typeopdr_key AND mld_srtkenmerk_key = 18; -- Ref. Nr. Leverancier YKPN.set_kenmerk('MLD', v_kenmerk_key, v_opdr_key, v_naam, 0); 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', 'I', 'Ref. nr leverancier kan niet opgeslagen worden.', v_errormsg); END; IF v_closed IS NULL OR v_closed = 'false' THEN INSERT INTO mld_opdr_note (mld_opdr_key, prs_perslid_key, mld_opdr_note_omschrijving) VALUES (v_opdr_key, v_from_key, v_actie); ELSE UPDATE mld_opdr SET mld_opdr_opmerking = v_oplossing || chr(13) || mld_opdr_opmerking WHERE mld_opdr_key = v_opdr_key; -- meld de opdracht af MLD.setopdrachtstatus (v_opdr_key, 6, v_from_key); MLD.updatemeldingstatus (v_melding_key, 0, v_from_key); END IF; WHEN UPPER (pto) LIKE 'NOREPLY@%' THEN IF UPPER (pfrom) = 'KLANTEN@OFFICEDEPOT.NL' THEN -- We scannen het onderwerp van de mail op het opdracht_id v_regexp := '[[:alpha:]]*[[:digit:]]{5,}/[[:digit:]]*'; v_opdr_id := REGEXP_SUBSTR (psubject, v_regexp); -- Nu nog even de srtdisc prefix er af halen. v_regexp := '[[:digit:]]{5,}/[[:digit:]]*'; v_opdr_id := REGEXP_SUBSTR (v_opdr_id, v_regexp); v_errormsg := 'Opzoeken van de opdracht: ' || v_opdr_id; SELECT mld_opdr_key INTO v_opdr_key FROM mld_opdr WHERE mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr = v_opdr_id; -- API-user tbv. OfficeDepot-koppeling key=63741 INSERT INTO mld_opdr_note (mld_opdr_key, prs_perslid_key, mld_opdr_note_omschrijving) VALUES (v_opdr_key, 63741, pbody); FAC.trackaction('CUST10', v_opdr_key, 63741, NULL, NULL); ELSE DELETE fac_rapport WHERE fac_rapport_node = 'PROCESSEMAI2'; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAI2', 1, SUBSTR(pbody, 1, 1900)); BEGIN -- De afzender moet nu geregistreerd staan anders wordt de mail niet afgehandeld. v_errormsg := 'Opzoeken afzender/melder'; SELECT prs_perslid_key INTO v_from_key FROM prs_perslid WHERE UPPER(prs_perslid_email) = UPPER(pfrom); v_naam := get_xml_tag(pbody, 'naam'); v_externnummer := get_xml_tag(pbody, 'externnummer'); v_date_txt := get_xml_tag(pbody, 'date'); v_date_txt := REPLACE(SUBSTR(v_date_txt, 1, INSTR(v_date_txt, '+')-1), 'T', ' '); v_date := FAC.safe_to_date(v_date_txt, 'yyyy-mm-dd hh24:mi:ss'); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAI2', 2, 'naam: '|| SUBSTR(v_naam, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAI2', 3, 'externnummer: '|| SUBSTR(v_externnummer, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAI2', 4, 'date_txt: '|| SUBSTR(v_date_txt, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCESSEMAI2', 5, 'date: '|| SUBSTR(v_date, 1, 1900)); v_errormsg := 'Opzoeken van de opdracht'; SELECT mld_opdr_key, mld_melding_key INTO v_opdr_key, v_melding_key FROM mld_opdr o, prs_contactpersoon cp WHERE mld_melding_key || '/' || mld_opdr_bedrijfopdr_volgnr = REPLACE(v_externnummer, 'R') AND o.mld_uitvoerende_keys = cp.prs_bedrijf_key AND cp.prs_perslid_key = v_from_key; -- vul de referentie bij van de leverancier in. YKPN.set_kenmerk('MLD', 3261, v_opdr_key, v_naam, 0); EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Ongeregistreerde afzender, mail wordt genegeerd: ' || pfrom); END; END IF; WHEN UPPER (pto) LIKE 'BEZOEK@%' THEN BEGIN v_errorhint := 'Opzoeken velden in de mail'; v_locatie := SUBSTR(pbody, INSTR(pbody, 'Locatie Code: ')+ 14, INSTR(pbody, CHR (10), INSTR(pbody, 'Locatie Code: '))-(INSTR(pbody, 'Locatie Code: ')+ 14)); IF v_locatie IS NULL THEN v_locatie := SUBSTR(pbody, INSTR(pbody, 'Locatiecode: ')+ 13, INSTR(pbody, CHR (10), INSTR(pbody, 'Locatiecode: '))-(INSTR(pbody, 'Locatiecode: ')+ 13)); END IF; v_datum := SUBSTR(pbody, INSTR(pbody, 'Datum: ')+ 7, INSTR(pbody, CHR (10), INSTR(pbody, 'Datum: '))-(INSTR(pbody, 'Datum: ')+ 7)); v_bezoeker := SUBSTR(pbody, INSTR(pbody, 'Naam bezoeker(s): ')+ 18, INSTR(pbody, CHR (10), INSTR(pbody, 'Naam bezoeker(s): '))-(INSTR(pbody, 'Naam bezoeker(s): ')+ 18)); v_reden := SUBSTR(pbody, INSTR(pbody, 'Reden bezoek: ')+ 14, INSTR(pbody, CHR (10), INSTR(pbody, 'Reden bezoek: '))-(INSTR(pbody, 'Reden bezoek: ')+ 14)); v_aanvrager := SUBSTR(pbody, INSTR(pbody, 'Naam aanvrager: ')+ 16, INSTR(pbody, CHR (10), INSTR(pbody, 'Naam aanvrager: '))-(INSTR(pbody, 'Naam aanvrager: ')+ 16)); v_bedrijfsmiddel := SUBSTR(pbody, INSTR(pbody, 'Afhalen bedrijfsmiddel: ')+ 24, INSTR(pbody, CHR (10), INSTR(pbody, 'Afhalen bedrijfsmiddel: '))-(INSTR(pbody, 'Afhalen bedrijfsmiddel: ')+ 24)); DELETE fac_rapport WHERE fac_rapport_node = 'PROCE BEZOEK'; INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 1, 'locatie: '|| SUBSTR(v_locatie, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 2, 'datum: '|| SUBSTR(v_datum, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 3, 'bezoeker: '|| SUBSTR(v_bezoeker, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 4, 'reden: '|| SUBSTR(v_reden, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 5, 'aanvrager: '|| SUBSTR(v_aanvrager, 1, 1900)); INSERT INTO fac_rapport (fac_rapport_node, fac_rapport_volgnr, fac_rapport_regel) VALUES ('PROCE BEZOEK', 6, 'bedrijfsmiddel: '|| SUBSTR(v_bedrijfsmiddel, 1, 1900)); v_errorhint := 'Opzoeken locatie'; SELECT l.alg_locatie_key INTO v_locatie_key FROM alg_locatie l, alg_gebouw g WHERE l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_verwijder IS NULL AND g.alg_gebouw_code = v_locatie; v_errorhint := 'Toevoegen afspraak'; INSERT INTO bez_afspraak (prs_perslid_key, bez_afspraak_host_key, bez_afspraak_contact_key, bez_afspraak_datum, bez_actie_key, alg_locatie_key, bez_afspraak_opmerking, bez_afspraak_eind) VALUES (50552, 50552, 50552, TO_DATE (v_datum || ' 08:00', 'yyyy-mm-dd hh24:mi'), 5, v_locatie_key, SUBSTR(DECODE (v_reden, NULL, DECODE( v_bedrijfsmiddel, NULL, NULL, 'Afhalen bedrijfsmiddel: ' || v_bedrijfsmiddel), 'Reden: ' || v_reden), 1,320), TO_DATE (v_datum || ' 18:00', 'yyyy-mm-dd hh24:mi')) RETURNING bez_afspraak_key INTO v_afspraak_key; v_errorhint := 'Toevoegen bezoeker'; INSERT INTO bez_bezoekers (bez_afspraak_key, bez_afspraak_naam) VALUES (v_afspraak_key, SUBSTR(v_bezoeker || v_aanvrager,1,30)); v_errorhint := 'Toevoegen resultaat'; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder afspraak ' || v_afspraak_key); EXCEPTION WHEN NO_DATA_FOUND 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', v_errormsg, v_errorhint); INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'errormsg', 'Fout bij inleze mail: ' || v_errorhint); END; ELSE v_errormsg := 'Fout bij bepalen melder'; -- Meldingen worden gekoppeld aan de persoon met het emailadres. SELECT p.prs_perslid_key, a.prs_kostenplaats_key INTO v_perslid_key, v_kostenplaats_key FROM prs_v_aanwezigperslid p, prs_afdeling a WHERE p.prs_perslid_oslogin = '_' || UPPER (SUBSTR(pto, 1, INSTR(pto, '@')-1)) AND p.prs_afdeling_key = a.prs_afdeling_key; fac.writelog ('PROCESSEMAIL', 'I', 'melder: ' || v_perslid_key || ' Email: ' || pto, ''); v_errormsg := 'Fout bij bepalen email-melding'; SELECT sm.mld_stdmelding_key, sm.mld_stdmelding_t_uitvoertijd INTO v_stdmelding_key, v_stdmelding_uvt FROM mld_stdmelding sm, prs_kenmerklink kl WHERE kl.prs_link_key = v_perslid_key AND kl.prs_kenmerk_key = 1100 -- Stdmelding kenmerk tbv mail import AND FAC.safe_to_number(kl.prs_kenmerklink_waarde) = sm.mld_stdmelding_key AND sm.mld_stdmelding_verwijder IS NULL; fac.writelog ('PROCESSEMAIL', 'I', 'std: '|| v_stdmelding_key, ''); -- Om niet overal email adressen van te maken zet KPN retail alles op één email adres. -- Dan kijken we nu maar even of we ook de afzender kennen. v_errormsg := 'Is de afzender Retailsupport mail?'; IF v_perslid_key = 64801 -- API-user tbv. Retailsupport mail THEN BEGIN SELECT p.prs_perslid_key, a.prs_kostenplaats_key INTO v_perslid_key, v_kostenplaats_key FROM prs_v_aanwezigperslid p, prs_afdeling a, prs_kenmerklink kl WHERE UPPER(p.prs_perslid_email) = UPPER (pfrom) AND p.prs_afdeling_key = a.prs_afdeling_key AND kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1100; -- Nadat de mail gekoppeld is aan een andere persoon gaan we ook kijken of we een andere stdmelding -- kunnen vinden. v_errormsg := 'Fout bij bepalen email-melding'; SELECT sm.mld_stdmelding_key, sm.mld_stdmelding_t_uitvoertijd INTO v_stdmelding2_key, v_stdmelding2_uvt FROM mld_stdmelding sm, prs_kenmerklink kl WHERE kl.prs_link_key = v_perslid_key AND kl.prs_kenmerk_key = 1100 -- Stdmelding kenmerk tbv mail import AND FAC.safe_to_number(kl.prs_kenmerklink_waarde) = sm.mld_stdmelding_key AND sm.mld_stdmelding_verwijder IS NULL; v_stdmelding_key := v_stdmelding2_key; v_stdmelding_uvt := v_stdmelding2_uvt; fac.writelog ('PROCESSEMAIL', 'I', 'std: '|| v_stdmelding_key, ''); EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key := 64801; END; ELSIF v_perslid_key = 85961 -- API-user tbv. RetailAssist THEN v_errormsg := 'Is de afzender Retailassist?'; BEGIN SELECT p.prs_perslid_key, a.prs_kostenplaats_key INTO v_perslid_key, v_kostenplaats_key FROM prs_perslid p, prs_afdeling a WHERE UPPER(prs_perslid_email) = UPPER (pfrom) AND p.prs_afdeling_key = a.prs_afdeling_key AND LENGTH (prs_perslid_oslogin) = 6 -- We kiezen de hoofdgebruiker van de winkel. GROUP BY p.prs_perslid_key, a.prs_kostenplaats_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_perslid_key := 85961; END; END IF; fac.writelog ('PROCESSEMAIL', 'I', 'melder na afzendercheck: ' || v_perslid_key || ' Email from: ' || pfrom, ''); -- Nu gaan we uit de bezetting van de persoon de locatie bepalen. BEGIN SELECT alg_locatie_key INTO v_locatie_key FROM prs_v_perslidwerkplek_gegevens WHERE prs_perslid_key = v_perslid_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_locatie_key := 701; -- Retail algemeen. END; -- Specifieke locatie string in bericht voor storelocator IF UPPER (pto) LIKE 'KPNRETAILMAILIMPORT@%' -- Storelocator THEN BEGIN -- Nu gaan we uit de mail de locatie herleiden. Als dat niet lukt dan zetten we de locatie op onbekend. v_locatie_code := SUBSTR(pbody, INSTR(pbody, 'ShopNumber: ')+ 12, 3); SELECT l.alg_locatie_key INTO v_locatie_key FROM alg_locatie l WHERE l.alg_locatie_code = v_locatie_code AND l.alg_locatie_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN v_locatie_key := 501; -- onbekend. END; END IF; -- Controleer of dit een reactie is op een eerdere mail. -- Vooralsnog alleen aanzetten voor vakgroep Financiën/Financedesk 406 v_mld_id := REGEXP_SUBSTR (psubject, 'Melding [[:alpha:]][[:digit:]]{5,}', 1, 1); IF v_mld_id IS NOT NULL AND (LOWER(SUBSTR(psubject, 1, 3)) = 're:' OR LOWER(SUBSTR(psubject, 1, 3)) = 'fw:') THEN BEGIN SELECT mld_melding_key, mld_melding_behandelaar_key, mld_melding_behandelaar2_key, m.mld_stdmelding_key INTO v_melding_key, v_behandelaar_key, v_behandelaar2_key, v_stdmelding_key FROM mld_melding m, mld_stdmelding std WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = 406 AND mld_melding_key = REGEXP_SUBSTR (v_mld_id, '[[:digit:]]{5,}', 1, 1); EXCEPTION WHEN NO_DATA_FOUND THEN v_melding_key := NULL; END; END IF; IF v_melding_key IS NULL THEN v_errormsg := 'Fout bij toevoegen melding'; fac.writelog ('PROCESSEMAIL', 'I', 'Stdmeldingkey voor aanmaken: '|| v_stdmelding_key, ''); 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_melding_status, mld_melding_t_uitvoertijd, mld_stdmelding_key, prs_perslid_key, prs_perslid_key_voor, prs_kostenplaats_key, mld_melding_spoed) VALUES ('MLD', 4, -- email v_locatie_key, NULL, SYSDATE, 'Afzender: ' || pfrom || CHR (10) || psubject || CHR (10) || SUBSTR(pbody, 1, 3800), NULL, v_stdmelding_uvt, v_stdmelding_key, v_perslid_key, v_perslid_key, NULL, 3) -- prio normaal RETURNING mld_melding_key INTO v_melding_key; v_errormsg := 'Fout bij statuswijziging'; mld.setmeldingstatus (v_melding_key, 2, v_perslid_key); IF v_stdmelding_key = 2661 -- R-Hoofdkantoor / Processen/Feedback THEN BEGIN v_link := SUBSTR(pbody, INSTR(pbody, 'Link: https://retailassist-retail.kpnnet.org') + 6); v_link := SUBSTR(v_link, 1, INSTR(v_link, CHR(13))-1); v_link := SUBSTR(v_link, 1, INSTR(v_link, CHR(10))-1); IF lower(v_link) LIKE 'https:%' THEN -- 6681 is de key van het kenmerk link bij deze stdmelding INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key , mld_kenmerkmelding_waarde) VALUES (v_melding_key, 6681, v_link); 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.writelog ('PROCESSEMAIL', 'E', 'Kan kenmerk: 6681 niet opslaan bij melding: ' || v_melding_key || '[' || pfrom || '] ' || v_errormsg, ''); END; END IF; -- We gaan nu kijken of we een opdracht kunnen koppelen aan de melding v_errormsg := 'Fout bij zoeken bedrijf in BDL'; BEGIN SELECT MAX (bdl.prs_bedrijf_key) prs_bedrijf_key, std.mld_typeopdr_key INTO v_bedrijf_key, v_typeopdr_key FROM mld_stdmelding std, prs_bedrijfdienstlocatie bdl WHERE std.mld_stdmelding_key = v_stdmelding_key AND std.mld_stdmelding_autoorder = 1 AND std.prs_dienst_key = bdl.prs_dienst_key AND std.mld_typeopdr_key IS NOT NULL AND ( bdl.alg_locatie_key = v_locatie_key OR ( bdl.alg_locatie_key IS NULL AND NOT EXISTS (SELECT bdl2.prs_bedrijfdienstlocatie_key FROM prs_bedrijfdienstlocatie bdl2 WHERE bdl2.prs_dienst_key = bdl.prs_dienst_key AND bdl2.alg_locatie_key = v_locatie_key))) GROUP BY mld_typeopdr_key; v_errormsg := 'Fout bij statuswijziging naar geaccepteerd'; mld.setmeldingstatus (v_melding_key, 4, v_perslid_key); v_errormsg := 'Fout bij toevoegen opdracht'; INSERT INTO mld_opdr (mld_melding_key , prs_kostenplaats_key , mld_typeopdr_key , prs_perslid_key , mld_uitvoerende_keys , mld_opdr_datumbegin , mld_opdr_einddatum , mld_opdr_module , mld_opdr_omschrijving , mld_opdr_bedrijfopdr_volgnr , mld_opdr_teverzenden) VALUES ( v_melding_key , NULL , v_typeopdr_key , v_perslid_key , v_bedrijf_key , SYSDATE , SYSDATE + 7 , 'MLD' , psubject || CHR (10) || SUBSTR(pbody, 1, 3900) , MLD.BepaalOpdrMeldingVolgnr (v_melding_key) , 1) RETURNING mld_opdr_key INTO v_opdr_key; v_errormsg := 'Fout bij aanpassen opdracht status'; MLD.setopdrachtstatus(v_opdr_key , 5, v_perslid_key); -- uitgegeven v_errormsg := 'Fout bij notificatieverzending'; SELECT DECODE (u.type, 'P', 'ORDMLI', 'ORDMLE') INTO v_notificatie_code FROM mld_v_uitvoerende u WHERE u.mld_uitvoerende_key = v_bedrijf_key; FAC.trackaction(v_notificatie_code, v_opdr_key, v_perslid_key, NULL, NULL); -- update melding status v_errormsg := 'Fout bij bijwerken melding status'; MLD.updatemeldingstatus (v_melding_key, 0, v_perslid_key); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; -- er is geen bedrijf - dienst - locatie voor deze melding gedefinieerd. Dus wordt er ook geen opdracht aangemaakt. END; -- toevoegen opdracht INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_melding_key); ELSE -- we gaan nu een notitie toevoegen aan de melding INSERT INTO mld_melding_note (mld_melding_key, mld_melding_note_omschrijving, prs_perslid_key, mld_melding_note_flag) VALUES (v_melding_key, SUBSTR ( psubject || CHR (13) || REPLACE ( SUBSTR (pbody, 1, 4000 - (LENGTH (psubject) + 2)), CHR (13) || CHR (10) || CHR (13) || CHR (10), CHR (10)), 1, 4000), -- verwijder onnodige witregels v_perslid_key, 0); -- 0 is niet zichtbaar FE. -- Default tracking is even goed genoeg fac.trackaction ('MLDNOT', v_melding_key, v_perslid_key, NULL, '#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie -- DBMS_OUTPUT.PUT_LINE('Notitie toegevoegd.'); -- Eerst naar de active behandelaar IF v_behandelaar2_key IS NOT NULL THEN fac.putnotificationsrtprio (NULL, v_behandelaar2_key, 'MLDNOB', v_melding_key, 'Melding ' || v_melding_key || ' is door de klant aangepast.', 2, NULL, NULL, NULL, 2, NULL); ELSIF v_behandelaar_key IS NOT NULL THEN fac.putnotificationsrtprio (NULL, v_behandelaar_key, 'MLDNOB', v_melding_key, 'Melding ' || v_melding_key || ' is door de klant aangepast.', 2, NULL, NULL, NULL, 2, NULL); END IF; -- Vlaggetjes zetten zoals mld_edit_note.asp dat doet UPDATE mld_melding SET mld_melding_actiecode = 1+128 -- Backoffice + Attentie WHERE mld_melding_key = v_melding_key; INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'maillog', 'Reactie toegevoegd aan melding ' || v_melding_key); END IF; -- Zoek het laagste bijlagen kenmerk om de bijlagen onder te stoppen v_errormsg := 'Fout bij zoeken naar kenmerkbijlage'; SELECT MIN (mld_kenmerk_key) INTO v_kenmerk_key FROM mld_kenmerk k, mld_srtkenmerk sk, mld_stdmelding std, ins_tab_discipline d WHERE mld_srtkenmerk_kenmerktype = 'M' AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key AND std.mld_stdmelding_key = v_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key AND k.mld_kenmerk_niveau = 'S') OR (k.mld_stdmelding_key = d.ins_discipline_key AND k.mld_kenmerk_niveau = 'D') OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key AND k.mld_kenmerk_niveau = 'T')) AND k.mld_kenmerk_verwijder IS NULL AND NOT EXISTS (SELECT mld_kenmerk_volgnummer FROM mld_kenmerk k1, mld_srtkenmerk sk1, mld_stdmelding std1, ins_tab_discipline d1 WHERE sk1.mld_srtkenmerk_kenmerktype = 'M' AND sk1.mld_srtkenmerk_key = k1.mld_srtkenmerk_key AND std1.mld_stdmelding_key = v_stdmelding_key AND std1.mld_ins_discipline_key = d1.ins_discipline_key AND ( (k1.mld_stdmelding_key = std1.mld_stdmelding_key AND k1.mld_kenmerk_niveau = 'S') OR (k1.mld_stdmelding_key = d1.ins_discipline_key AND k1.mld_kenmerk_niveau = 'D') OR (k1.mld_stdmelding_key = d1.ins_srtdiscipline_key AND k1.mld_kenmerk_niveau = 'T')) AND k1.mld_kenmerk_verwijder IS NULL AND k1.mld_kenmerk_volgnummer > k.mld_kenmerk_volgnummer); IF v_kenmerk_key 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_kenmerk_key || '\'); END IF; -- originele email wordt opgeslagen bij de melding INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde) VALUES (psessionid, 'kenmerkorgmailpath', 'MLD\M' || TO_CHAR (TRUNC (v_melding_key / 1000), 'FM0000') || '___\M' || v_melding_key || '\' || 8281 || '\'); 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', 'ykpn_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; / -- View om bestel informatie te laten zien incl cluster CREATE OR REPLACE VIEW ykpn_v_rap_retail_bestellingen AS SELECT b.bes_bestelling_datum besteldatum, (SELECT alg_locatie_code FROM alg_locatie l WHERE l.alg_locatie_key = ma.alg_locatie_key) locatie_code, (SELECT alg_locatie_omschrijving FROM alg_locatie l WHERE l.alg_locatie_key = ma.alg_locatie_key) locatie_omschrijving, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_onrgoed_key = ma.alg_locatie_key AND alg_kenmerk_key = 1340) clusterx, (SELECT alg_district_omschrijving FROM alg_locatie l, alg_district d WHERE l.alg_district_key = d.alg_district_key AND l.alg_locatie_key = ma.alg_locatie_key) district_omschijving, d.ins_discipline_omschrijving catalogus, sg.bes_srtgroep_omschrijving groep, b.bes_bestelling_leverdatum afleverdatum, sd.bes_srtdeel_omschrijving productomschrijving, sd.bes_srtdeel_nr productcode, bi.bes_bestelling_item_prijs * bi.bes_bestelling_item_aantal prijs, bi.bes_bestelling_item_aantal aantal, bi.bes_bestelling_item_prijs itemprijs FROM bes_bestelling b, prs_perslid p, mld_adres ma, bes_bestelling_item bi, bes_srtdeel sd, bes_srtgroep sg, ins_tab_discipline d WHERE b.prs_perslid_key = p.prs_perslid_key AND b.mld_adres_key_lev = ma.mld_adres_key AND b.bes_bestelling_key = bi.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 = d.ins_discipline_key; -- Retail notificatie dat een melding langer dan x dagen. (Bij mld_disc_params) later nog openstaat -- dan de sla tijd. CREATE OR REPLACE VIEW YKPN_V_NOTI_RETAIL_HERINNERING ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT DISTINCT 'MLDMAI', NULL, COALESCE ( COALESCE (m.mld_melding_behandelaar2_key, m.mld_melding_behandelaar_key), 14744), -- Simone van bijnen 'Herinnering: melding R' || m.mld_melding_key || ' staat nog open.', m.mld_melding_key, NULL FROM mld_melding m, mld_stdmelding std, mld_discipline d, mld_disc_params dp WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 41 -- Retail AND mld_melding_status NOT IN (5, 6, 1, 7) -- afgemeld, historie, afgewezen, uitgegeven AND TRUNC ( fac.datumtijdplusuitvoertijd (m.mld_melding_einddatum_std, mld_disc_params_noti_dagen, 'D')) = TRUNC (SYSDATE) AND mld_disc_params_noti_dagen IS NOT NULL AND TO_CHAR (SYSDATE, 'D') NOT IN (1, 7) -- not op zaterdag en zondag AND d.ins_discipline_key = dp.mld_ins_discipline_key; -- Herinnering iedere 5 dagen na de einddatum naar de leverancier. -- Letop flags = 1 CREATE OR REPLACE VIEW ykpn_v_noti_retail_ext_herinn ( sender, receiver, text, code, key, xkey, xemail, xmobile ) AS SELECT NULL sender, NULL receiver, 'Einddatum van opdracht: R' || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr || ' staat al ' || (TRUNC (SYSDATE) - TRUNC (mld_opdr_einddatum)) || ' dagen open.' text, 'CUST13' code, o.mld_opdr_key, NULL xkey, b.prs_bedrijf_email xemail, NULL xmobile FROM mld_opdr o, mld_melding m, mld_stdmelding std, mld_discipline d, prs_bedrijf b WHERE o.mld_melding_key = m.mld_melding_key AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 41 AND o.mld_uitvoerende_keys = b.prs_bedrijf_key AND b.prs_bedrijf_email IS NOT NULL AND TRUNC (mld_opdr_einddatum) < TRUNC (SYSDATE) AND MOD ((TRUNC (SYSDATE) - TRUNC (mld_opdr_einddatum)), 7) = 0 AND mld_statusopdr_key IN (5, -- toegekend 8 -- geaccepteerd ); CREATE OR REPLACE VIEW ykpn_v_noti_fact_note (code, sender, receiver, text, key, xkey, xemail, xmobile, attachments, xsender) AS SELECT 'CUST18' code, NULL sender, NULL receiver, 'Factuur '||fin.fin_factuur_nr||' heeft een nieuwe notitie: '|| SUBSTR(fnn.fin_factuur_note_omschrijving,0,1990), fin.fin_factuur_key key, NULL xkey, 'kpn@yask.nl' xemail, NULL xmobile, NULL attachments, NULL xsender FROM fin_factuur fin, fin_factuur_note fnn WHERE fnn.fin_factuur_key = fin.fin_factuur_key AND fnn.fin_factuur_note_aanmaak> SYSDATE-1; CREATE OR REPLACE VIEW YKPN_V_NOTI_OPDRFIAT ( CODE, SENDER, RECEIVER, TEXT, KEY, PAR1, PAR2, XKEY ) AS SELECT 'CUST23', NULL, gg.prs_perslid_key, 'Faittering (JHH) noodzakelijk voor opdracht '||o.mld_melding_key||'/'||o.MLD_OPDR_BEDRIJFOPDR_VOLGNR, o.mld_opdr_key, NULL, NULL, NULL FROM mld_opdr o, mld_melding m,prs_kostenplaats k, fac_tracking ft ,fac_srtnotificatie sft, fac_gebruikersgroep gg, fac_groep fg WHERE o.mld_statusopdr_key=3 -- alleen opdrachten die ter fiatering liggen AND m.mld_melding_key = o.mld_melding_key AND m.mld_melding_status IN (4,7) -- alleen in behandeling of uitgegeven mld_status AND k.prs_kostenplaats_key = o.prs_kostenplaats_key AND k.prs_perslid_key = 4329 -- Alleen voor fiattering voor budgethouder Horsman-Huberts AND fg.fac_groep_upper='NOTI_GROEP_OPDR_FIAT' AND gg.fac_groep_key = fg.fac_groep_key AND ft.fac_srtnotificatie_key=sft.fac_srtnotificatie_key AND sft.fac_srtnotificatie_code='ORDFIA' AND ft.fac_tracking_refkey=o.mld_opdr_key AND ft.fac_tracking_datum > (SELECT COALESCE(MAX(f.fac_notificatie_job_lastrun), SYSDATE-2/24) -- alleen maar nieuwe opdrachten na de laatse notifictaie run FROM fac_notificatie_job f WHERE UPPER(f.fac_notificatie_job_view)='YKPN_V_NOTI_OPDRFIAT'); -- Herinnering naar de winkel als de actie meer dan 7 dagen bij de winkel staat. CREATE OR REPLACE VIEW ykpn_v_noti_retail_winkel ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT 'CUST14', NULL, p.prs_perslid_key, 'Herinnering: Actie van melding R' || m.mld_melding_key || ' ligt al ' || (TRUNC (SYSDATE) - TRUNC (t.datum)) || ' dagen bij de winkel.', m.mld_melding_key, NULL FROM mld_melding m, mld_stdmelding std, mld_discipline d, prs_perslid p, ( SELECT MAX (fac_tracking_datum) datum, fac_tracking_refkey mld_melding_key FROM fac_tracking t WHERE t.fac_srtnotificatie_key = 402 -- MLDA2M AND fac_tracking_datum < SYSDATE - 1 GROUP BY fac_tracking_refkey) t WHERE mld_melding_actiecode = 2 AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = 41 AND m.prs_perslid_key = p.prs_perslid_key AND m.mld_melding_key = t.mld_melding_key AND MOD (TRUNC (t.datum) - TRUNC (SYSDATE), 7) = 0 AND mld_melding_status IN (0, 2, 3, 4, 7, 99); -- View om de doorlooptijd van openstaande meldingen inzichtelijk te krijgen. CREATE OR REPLACE VIEW ykpn_v_rap_meldingdoorlooptijd AS SELECT m.mld_melding_key, sd.ins_srtdiscipline_omschrijving, d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, m.mld_melding_omschrijving, TRUNC (SYSDATE - mld_melding_datum) t_melding, TRUNC ( SYSDATE - (SELECT MAX (fac_tracking_datum) FROM fac_tracking WHERE fac_tracking_refkey = mld_melding_key AND fac_srtnotificatie_key = 381)) t_behandelaar, -- MLDABH (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames pf WHERE pf.prs_perslid_key = mld_melding_behandelaar2_key) behandelaar FROM mld_melding m, mld_stdmelding std, ins_tab_discipline d, ins_srtdiscipline sd WHERE mld_melding_status IN (0, -- Bij frontoffice 2, -- Nieuw 3, -- Te accepteren 4, -- In behandeling 99, -- Niet opgelost 7) -- Uitgegeven AND m.mld_stdmelding_key = std.mld_stdmelding_key AND std.mld_ins_discipline_key = d.ins_discipline_key AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key; -- view om de uitnutting voor de winkel bij nieuwe bestelling te tonen. CREATE OR REPLACE VIEW ykpn_bes_budget_retail ( prs_perslid_key, bedrag ) AS SELECT p.prs_perslid_key, SUM (bes_bestelling_item_aantal * bes_bestelling_item_brutoprijs) bedrag FROM bes_bestelling b, bes_bestelling_item bi, mld_adres a, alg_locatie l, prs_perslid p, prs_v_perslidwerkplek_gegevens pwg WHERE b.bes_bestelling_key = bi.bes_bestelling_key AND b.mld_adres_key_lev = a.mld_adres_key AND a.alg_locatie_key = l.alg_locatie_key AND prs_perslid_nr LIKE 'MX%' AND p.prs_perslid_key = pwg.prs_perslid_key AND pwg.alg_locatie_key = l.alg_locatie_key AND TRUNC (bes_bestelling_datum, 'Q') = TRUNC (SYSDATE, 'Q') GROUP BY p.prs_perslid_key; -- eigen voorraad administratie omdat de standaard versie niet werkt doordat de SSO van kpn ingrijpt. CREATE OR REPLACE VIEW ykpn_v_rap_voorraad ( hide_f_extern_diskey, hide_f_srtgroep_omschrijving, fclt_f_catalogus, artikel_nr, artikel_omschrijving, artikel_prijs, magazijn, min_voorraad, max_voorraad, inkoop_geleverd, intern_besteld, voorraad, inkoop_besteld, inkoop_leverdatum, inkoop_gewenst ) AS SELECT extern.dkey, COALESCE (intern.bes_srtgroep_omschrijving, extern.bes_srtgroep_omschrijving), COALESCE (intern.ins_discipline_omschrijving, extern.ins_discipline_omschrijving), extern.bes_srtdeel_nr, COALESCE (intern.bes_srtdeel_omschrijving, extern.bes_srtdeel_omschrijving), COALESCE (intern.srtdeel_prijs, extern.srtdeel_prijs), intern.magazijn, extern.vmin, extern.vmax, extern.geleverd, intern.besteld, extern.geleverd - COALESCE (intern.besteld, 0) voorraad, extern.besteld, TO_CHAR (extern.leverdatum, 'dd-mm-yyyy'), CASE WHEN ( ( COALESCE (extern.besteld, 0) + COALESCE (extern.geleverd, 0)) - COALESCE (intern.besteld, 0)) < extern.vmin THEN extern.vmax - ( ( COALESCE (extern.besteld, 0) + COALESCE (extern.geleverd, 0)) - COALESCE (intern.besteld, 0)) ELSE NULL END extern_gewenst FROM (SELECT bd.ins_discipline_key dkey, -- INKOOP-key g.bes_srtgroep_omschrijving, sd.bes_srtdeel_nr, -- ext. artikelnr sd.bes_srtdeel_omschrijving, bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL) srtdeel_prijs, bd.ins_discipline_omschrijving, -- ext. catalogusnaam sd.bes_srtdeel_voorraadmin vmin, -- ext. voorraadmin sd.bes_srtdeel_voorraadmax vmax, -- ext. voorraadmax (SELECT SUM ( COALESCE (boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal) - COALESCE ( boi.bes_bestelopdr_item_aantalontv, 0)) FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key AND COALESCE(bi.bes_bestelling_item_status, 1) IN (2, 3, 4, 5, 6) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key) besteld, (SELECT MIN (b.bes_bestelling_leverdatum) FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key AND COALESCE(bi.bes_bestelling_item_status, 1) IN (2, 3, 4, 5, 6) AND COALESCE (bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal) <> COALESCE (bes_bestelopdr_item_aantalontv, 0) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key) leverdatum, (SELECT SUM (boi.bes_bestelopdr_item_aantalontv) FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE -- boi.bes_bestelopdr_item_status in (6,7) AND b.bes_bestelling_key = bi.bes_bestelling_key AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key) geleverd FROM bes_srtdeel sd, bes_srtgroep g, bes_discipline bd, bes_disc_params dp WHERE sd.bes_srtdeel_verwijder IS NULL AND sd.bes_srtgroep_key = g.bes_srtgroep_key AND g.ins_discipline_key = bd.ins_discipline_key AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND dp.bes_ins_discipline_key_inkoop IS NULL AND bd.ins_discipline_key IN (SELECT bes_ins_discipline_key_inkoop FROM bes_disc_params WHERE bes_ins_discipline_key_inkoop IS NOT NULL)) extern -- Inkoop artikelen uit externe catalogus! FULL JOIN (SELECT dp.bes_ins_discipline_key_inkoop dkey, -- INKOOP-key g.bes_srtgroep_omschrijving, sd.bes_srtdeel_nr, -- int. artikelnr sd.bes_srtdeel_omschrijving, sd.bes_srtdeel_notitie magazijn, bes.getsrtdeelprijs (sd.bes_srtdeel_key, NULL) srtdeel_prijs, bd.ins_discipline_omschrijving, -- int. catalogusnaam (SELECT SUM ( COALESCE (boi.bes_bestelopdr_item_aantal, bi.bes_bestelling_item_aantal)) FROM bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item boi WHERE boi.bes_bestelopdr_item_key(+) = bi.bes_bestelopdr_item_key AND COALESCE(bi.bes_bestelling_item_status, 1) IN (2, 3, 4, 5, 6) AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key) besteld FROM bes_srtdeel sd, bes_srtgroep g, bes_discipline bd, bes_disc_params dp WHERE sd.bes_srtdeel_verwijder IS NULL AND sd.bes_srtgroep_key = g.bes_srtgroep_key AND g.ins_discipline_key = bd.ins_discipline_key AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND dp.bes_ins_discipline_key_inkoop IS NOT NULL) intern -- Verkoop artikelen uit interne catalogus! ON extern.dkey = intern.dkey AND extern.bes_srtdeel_nr = intern.bes_srtdeel_nr; CREATE OR REPLACE VIEW ykpn_v_udr_opdracht_kenm ( opdracht_key, opdracht_nummer, opdracht_regio, opdracht_district, opdracht_locatie_code, opdracht_locatie, opdracht_locatieplaats, fclt_3d_locatie_key, opdracht_gebouwcode, opdracht_gebouw, opdracht_verdieping, opdracht_ruimtenr, opdracht_ruimte, opdracht_kostenplaats, opdracht_kostenplaats_oms, melding_key, opdracht_type, opdracht_volgnummer, opdracht_status, opdracht_duur_gepland, opdracht_datum, opdracht_einddatum, opdracht_plandatum, opdracht_acceptdatum, opdracht_afgemeld, opdracht_doorlooptijd, opdracht_accepttijd, opdracht_omschrijving, opdracht_opmerking, opdracht_uitvoerende, opdracht_uitvoerende_contact, opdracht_behandelaar, opdracht_contract, opdracht_contract_versie, opdracht_contactpersoon, opdracht_uren, opdracht_correctie, opdracht_materiaal, opdracht_uurtarief, opdracht_kosten, melding_status, melding_afgemeld, ongeldige_procuratie, po_nummer, bedrag_gef_andere_afd, afw_po_bedr_doorbel, afgespr_toeslagperc, tevr_doorloop, tevr_oplossing, datum_contact, dienst_geleverd, opmerking, doorbel_afw_po_bedr, po_bedr_doorbel, progn_maand_gereed, kosten_per, kosten ) AS SELECT mld_opdr_key, ins_srtdiscipline_prefix || TO_CHAR (mld_melding_key) || '/' || opdracht_volgnummer, alg_regio_omschrijving, alg_district_omschrijving, locatie, locatie_omschrijving, locatie_plaats, alg_locatie_key, gebouw, gebouw_naam, verdieping, ruimte, ruimte_omschrijving, kostenplaats, kostenplaats_oms, mld_melding_key, opdracht_type, opdracht_volgnummer, opdracht_status, opdracht_duur_gepland, opdracht_datum, opdracht_einddatum, opdracht_plandatum, opdracht_acceptdatum, opdracht_afgemeld, opdracht_doorlooptijd, opdracht_accepttijd, opdracht_omschrijving, opdracht_opmerking, opdracht_uitvoerende, opdracht_uitvoerende_contact, opdracht_behandelaar, opdracht_contract, opdracht_contract_versie, opdracht_contactpersoon, opdracht_uren, opdracht_correctie, opdracht_materiaal, opdracht_uurtarief, opdracht_kosten, melding_status, melding_afgemeld, ongeldige_procuratie, po_nummer, bedrag_gef_andere_afd, afw_po_bedr_doorbel, afgespr_toeslagperc, tevr_doorloop, tevr_oplossing, datum_contact, dienst_geleverd, opmerking, doorbel_afw_po_bedr, po_bedr_doorbel, progn_maand_gereed, kosten_per, kosten FROM (SELECT alg_regio_omschrijving, alg_district_omschrijving, alg_locatie_code locatie, alg_locatie_omschrijving locatie_omschrijving, alg_locatie_plaats locatie_plaats, l.alg_locatie_key, og.alg_gebouw_code gebouw, og.alg_gebouw_naam gebouw_naam, og.alg_verdieping_code verdieping, og.alg_ruimte_nr ruimte, og.alg_ruimte_omschrijving ruimte_omschrijving, (SELECT k.prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) kostenplaats, (SELECT k.prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = o.prs_kostenplaats_key) kostenplaats_oms, o.mld_opdr_key, o.mld_melding_key, top.mld_typeopdr_key, top.mld_typeopdr_omschrijving opdracht_type, o.mld_opdr_bedrijfopdr_volgnr opdracht_volgnummer, (SELECT mld_statusopdr_omschrijving FROM mld_statusopdr sta WHERE sta.mld_statusopdr_key = o.mld_statusopdr_key) opdracht_status, fac.count_work_days (o.mld_opdr_datumbegin, o.mld_opdr_einddatum) opdracht_duur_gepland, o.mld_opdr_datumbegin opdracht_datum, o.mld_opdr_einddatum opdracht_einddatum, o.mld_opdr_plandatum opdracht_plandatum, COALESCE (mld.getopdrachtstatusdate (o.mld_opdr_key, 8), mld.getopdrachtstatusdate (o.mld_opdr_key, 1)) opdracht_acceptdatum, mld.getopdrachtstatusdate (o.mld_opdr_key, 6) opdracht_afgemeld, fac.count_work_days ( o.mld_opdr_datumbegin, mld.getopdrachtstatusdate (o.mld_opdr_key, 6)) opdracht_doorlooptijd, COALESCE ( fac.count_work_days ( mld.getopdrachtstatusdate (o.mld_opdr_key, 5), COALESCE ( mld.getopdrachtstatusdate (o.mld_opdr_key, 8), mld.getopdrachtstatusdate (o.mld_opdr_key, 6))), fac.count_work_days ( mld.getopdrachtstatusdate (o.mld_opdr_key, 5), mld.getopdrachtstatusdate (o.mld_opdr_key, 1))) opdracht_accepttijd, o.mld_opdr_omschrijving opdracht_omschrijving, o.mld_opdr_opmerking opdracht_opmerking, (SELECT naam FROM mld_v_uitvoerende u WHERE u.mld_uitvoerende_key = o.mld_uitvoerende_keys) opdracht_uitvoerende, (SELECT contact_naam FROM (SELECT cp.prs_contactpersoon_key, pf.prs_perslid_naam_full contact_naam FROM prs_contactpersoon cp, prs_v_perslid_fullnames_all pf WHERE cp.prs_perslid_key = pf.prs_perslid_key UNION ALL SELECT cp.prs_contactpersoon_key, cp.prs_contactpersoon_naam FROM prs_contactpersoon cp, prs_v_perslid_fullnames_all pf WHERE cp.prs_perslid_key = pf.prs_perslid_key AND cp.prs_perslid_key IS NULL) cpn WHERE cpn.prs_contactpersoon_key = o.prs_contactpersoon_key) opdracht_uitvoerende_contact, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = o.prs_perslid_key) opdracht_behandelaar, c.cnt_contract_nummer_intern opdracht_contract, c.cnt_contract_versie opdracht_contract_versie, o.mld_opdr_contactpersoon opdracht_contactpersoon, o.mld_opdr_uren opdracht_uren, o.mld_opdr_kosten - o.mld_opdr_materiaal - (o.mld_opdr_uren * o.mld_opdr_uurloon) opdracht_correctie, o.mld_opdr_materiaal opdracht_materiaal, o.mld_opdr_uurloon opdracht_uurtarief, o.mld_opdr_kosten opdracht_kosten, sdi.ins_srtdiscipline_prefix, (SELECT mld_statuses_omschrijving FROM mld_statuses sta WHERE sta.mld_statuses_key = m.mld_melding_status) melding_status, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1)) melding_afgemeld, (SELECT DECODE (fac.safe_to_number(mld_kenmerkopdr_waarde), 1, 'Ja', 'Nee') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 181 AND ko.mld_opdr_key = o.mld_opdr_key) ongeldige_procuratie, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 381 AND ko.mld_opdr_key = o.mld_opdr_key) po_nummer, (SELECT DECODE (fac.safe_to_number(mld_kenmerkopdr_waarde), 1, 'Ja', 'Nee') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 401 AND ko.mld_opdr_key = o.mld_opdr_key) bedrag_gef_door_andere_afd, (SELECT DECODE (fac.safe_to_number(mld_kenmerkopdr_waarde), 1, 'Ja', 'Nee') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 401 AND ko.mld_opdr_key = o.mld_opdr_key) bedrag_gef_andere_afd, (SELECT DECODE (fac.safe_to_number(mld_kenmerkopdr_waarde), 1, 'Ja', 'Nee') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 2762 AND ko.mld_opdr_key = o.mld_opdr_key) afw_po_bedr_doorbel, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 542 AND ko.mld_opdr_key = o.mld_opdr_key) afgespr_toeslagperc, (SELECT fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND fac_usrtab_key = 781 AND ud.fac_usrdata_key = fac.safe_to_number(mld_kenmerkopdr_waarde) AND k.mld_srtkenmerk_key = 1563 AND ko.mld_opdr_key = o.mld_opdr_key) tevr_doorloop, (SELECT fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND fac_usrtab_key = 781 AND ud.fac_usrdata_key = fac.safe_to_number(mld_kenmerkopdr_waarde) AND k.mld_srtkenmerk_key = 1581 AND ko.mld_opdr_key = o.mld_opdr_key) tevr_oplossing, (SELECT fac.safe_to_date (mld_kenmerkopdr_waarde, 'dd-mm-yyyy') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 1562 AND ko.mld_opdr_key = o.mld_opdr_key) datum_contact, (SELECT fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND fac_usrtab_key = 201 AND ud.fac_usrdata_key = fac.safe_to_number(mld_kenmerkopdr_waarde) AND k.mld_srtkenmerk_key = 1601 AND ko.mld_opdr_key = o.mld_opdr_key) dienst_geleverd, (SELECT mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 2561 AND ko.mld_opdr_key = o.mld_opdr_key) opmerking, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 2781 AND ko.mld_opdr_key = o.mld_opdr_key) doorbel_afw_po_bedr, (SELECT DECODE (fac.safe_to_number(mld_kenmerkopdr_waarde), 1, 'Ja', 'Nee') FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 2761 AND ko.mld_opdr_key = o.mld_opdr_key) po_bedr_doorbel, (SELECT fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND fac_usrtab_key = 1181 AND ud.fac_usrdata_key = fac.safe_to_number(mld_kenmerkopdr_waarde) AND k.mld_srtkenmerk_key = 2861 AND ko.mld_opdr_key = o.mld_opdr_key) progn_maand_gereed, (SELECT fac_usrdata_omschr FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND fac_usrtab_key = 1161 AND ud.fac_usrdata_key = fac.safe_to_number(mld_kenmerkopdr_waarde) AND k.mld_srtkenmerk_key = 2821 AND ko.mld_opdr_key = o.mld_opdr_key) kosten_per, (SELECT fac.safe_to_number (mld_kenmerkopdr_waarde) FROM mld_kenmerkopdr ko, mld_kenmerk k WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key AND mld_kenmerkopdr_verwijder IS NULL AND k.mld_srtkenmerk_key = 2841 AND ko.mld_opdr_key = o.mld_opdr_key) kosten FROM alg_locatie l, alg_district d, alg_regio r, alg_v_allonrgoed_gegevens og, mld_opdr o, mld_typeopdr top, mld_melding m, mld_stdmelding stdm, ins_tab_discipline di, ins_srtdiscipline sdi, cnt_contract c WHERE m.mld_alg_locatie_key = l.alg_locatie_key(+) AND l.alg_district_key = d.alg_district_key(+) AND d.alg_regio_key = r.alg_regio_key(+) AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND o.cnt_contract_key = c.cnt_contract_key(+) AND m.mld_stdmelding_key = stdm.mld_stdmelding_key AND stdm.mld_ins_discipline_key = di.ins_discipline_key AND di.ins_srtdiscipline_key = sdi.ins_srtdiscipline_key AND o.mld_melding_key = m.mld_melding_key AND o.mld_typeopdr_key = top.mld_typeopdr_key(+) AND o.mld_opdr_datumbegin >= TO_DATE ('01-01-2014', 'DD-MM-YYYY')) x; -- Tbv YKPN#75754 extr rapportage tbv 3 fase facturatie naar KPN -- toeveogen van datum wanneer kenmerk Gereed voor doorbelasting PO gezet wordt. CREATE OR REPLACE VIEW ykpn_v_proj_doorbelast AS SELECT opdracht_key, opdracht_nummer, opdracht_regio, opdracht_district, opdracht_locatie_code, opdracht_locatie, opdracht_locatieplaats, fclt_3d_locatie_key, opdracht_gebouwcode, opdracht_gebouw, opdracht_verdieping, opdracht_ruimtenr, opdracht_ruimte, opdracht_kostenplaats, opdracht_kostenplaats_oms, melding_key, opdracht_type, opdracht_volgnummer, opdracht_status, opdracht_duur_gepland, opdracht_datum, opdracht_einddatum, opdracht_plandatum, opdracht_acceptdatum, opdracht_afgemeld, opdracht_doorlooptijd, opdracht_accepttijd, opdracht_omschrijving, opdracht_opmerking, opdracht_uitvoerende, opdracht_uitvoerende_contact, opdracht_behandelaar, opdracht_contract, opdracht_contract_versie, opdracht_contactpersoon, opdracht_uren, opdracht_correctie, opdracht_materiaal, opdracht_uurtarief, opdracht_kosten, melding_status, melding_afgemeld, ongeldige_procuratie, po_nummer, bedrag_gef_andere_afd, afw_po_bedr_doorbel, afgespr_toeslagperc, tevr_doorloop, tevr_oplossing, datum_contact, dienst_geleverd, opmerking, doorbel_afw_po_bedr, po_bedr_doorbel, COALESCE((SELECT MIN(ft.FAC_TRACKING_DATUM) FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_tracking ft WHERE ko.mld_opdr_key = opdracht_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5001 AND ft.FAC_TRACKING_REFKEY=opdracht_key AND ft.FAC_TRACKING_OMS LIKE '%Gereed voor doorbelasting PO?: (leeg) --> 1%' ), mld.getopdrachtstatusdate(opdracht_key,6)) po_bedr_doorbel_datum, progn_maand_gereed, kosten_per, kosten, (SELECT UPPER(ud.fac_usrdata_omschr) FROM mld_kenmerkopdr ko, mld_kenmerk k, fac_usrdata ud WHERE ko.mld_opdr_key = opdracht_key AND ko.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 5001 AND ud.fac_usrdata_key=ko.mld_kenmerkopdr_waarde) -- Capex/Opex capex_opex FROM ykpn_v_udr_opdracht_kenm WHERE opdracht_datum >= TO_DATE ('01-01-2020', 'DD-MM-YYYY'); CREATE OR REPLACE VIEW ykpn_v_udr_melding ( melding_key, meldingnummer, behandeling_in, melding_start_key, externnummer, melding_regio, melding_district, melding_locatiecode, melding_locatie, melding_locatieplaats, fclt_3d_locatie_key, gebouw_key, melding_gebouwcode, melding_gebouw, melding_verdieping, melding_ruimtenr, melding_ruimte, melding_ordernr, kostensoortgroep, kostensoort, kostenplaats, kostenplaats_oms, melder, melder_key, melder_email, afdeling, afdeling_omschrijving, fclt_3d_afdeling_key, divisie, divisie_omschrijving, fclt_3d_divisie_key, bedrijf_key, invoerder, meldbron, soortmelding, fclt_3d_discipline_key, productgroep, subproductgroep, behandelgroep, behandelaar, behandelaar_key, subproductgroepgroep, fclt_3d_discipline2_key, actieve_behandelgroep, actieve_behandelaar_key, actieve_behandelaar, melding_status, sla_nvt, sla_werkdgn, sla_werkuren, sla_respijtdgn, sla_respijturen, sla_accptdgn, sla_accpturen, plan_uitvoertijd_sla, melding_datum, melding_einddatum, melding_einddatum_std, melding_acceptdatum, melding_afgemeld, melding_accepted, doorlooptijd_werkdgn, doorlooptijd_werkuren, onderwerp, vomschrijving, melding_opmerking, prioriteit, prioriteittxt, rating, rating_opmerking, bolletje, actiecode, accept_sla_dagen, accept_sla_uren, uitvoering_sla_dagen, uitvoering_sla_uren, afspraak_sla_dagen, afspraak_sla_uren, accept_sla_optijd, uitvoering_sla_optijd, afspraak_sla_optijd, selfservice ) AS SELECT mld_melding_key, meldingnummer, mld_melding_parentkey, mld_melding_start_key, mld_melding_externnr, alg_regio_omschrijving, alg_district_omschrijving, locatie, locatie_omschrijving, locatie_plaats, alg_locatie_key, alg_gebouw_key, gebouw, gebouw_naam, verdieping, ruimte, ruimte_omschrijving, melding_ordernr, kostensoortgroep, kostensoort, kostenplaats, kostenplaats_oms, melder, prs_perslid_key, prs_perslid_email, afdeling, afdeling_omschrijving, afdeling_key, divisie, divisie_omschrijving, divisie_key, prs_bedrijf_key, invoerder, meldbron, soortmelding, stdm_ins_discipline_key, productgroep, subproductgroep, behandelgroep, behandelaar, behandelaar_key, subproductgroepgroep, mld_ins_discipline_key, actieve_behandelgroep, actieve_behandelaar_key, actieve_behandelaar, status, sla_nvt, sla_werkdgn, sla_werkuren, sla_respijtdgn, sla_respijturen, sla_accptdgn, sla_accpturen, plan_uitvoertijd_sla, datum, einddatum, einddatum_std, acceptdatum, afgemeld, accepted, DECODE (x.t_doorlooptijd.eenheid, 'D', x.t_doorlooptijd.tijdsduur, NULL) doorlooptijd_werkdgn, DECODE (x.t_doorlooptijd.eenheid, 'U', x.t_doorlooptijd.tijdsduur, NULL) doorlooptijd_werkuren, onderwerp, omschrijving, opmerking, mld_melding_spoed prioriteit, DECODE(mld_melding_spoed,3,lcl.l('lcl_mld_urg_normaal'),1,lcl.l('lcl_mld_urg_kritiek'),2,lcl.l('lcl_mld_urg_hoog'),4,lcl.l('lcl_mld_urg_laag')), mld_melding_satisfaction, mld_melding_satisfaction_op, mld_melding_flag, mld_melding_actiecode, DECODE (x.t_doorlooptijd.eenheid, 'D', acceptdatum - COALESCE (accepted, afgemeld), NULL) accept_sla_dagen, CAST ( DECODE (x.t_doorlooptijd.eenheid, 'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24, NULL) AS NUMBER(7,2) ) accept_sla_uren, DECODE ( x.t_doorlooptijd.eenheid, 'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), NULL) uitvoering_sla_dagen, CAST ( DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0), NULL) AS NUMBER(7,2) ) uitvoering_sla_uren, DECODE (x.t_doorlooptijd.eenheid, 'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), NULL) afspraak_sla_dagen, CAST ( DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0), NULL) AS NUMBER(7,2) ) afspraak_sla_uren, CASE WHEN acceptdatum IS NULL OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd. DECODE (x.t_doorlooptijd.eenheid, 'D', acceptdatum - COALESCE (accepted, afgemeld), 0) + DECODE (x.t_doorlooptijd.eenheid, 'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24, 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END accept_sla_optijd, CASE WHEN DECODE ( x.t_doorlooptijd.eenheid, 'D', mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), 0) + DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (mld.geteinddatum(mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijturen, 0), 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END uitvoering_sla_optijd, CASE WHEN DECODE (x.t_doorlooptijd.eenheid, 'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0), 0) + DECODE ( x.t_doorlooptijd.eenheid, 'U', ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0), 0) >= 0 THEN lcl.l ('lcl_yes') ELSE lcl.l ('lcl_no') END afspraak_sla_optijd, DECODE(invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no')) selfservice FROM (SELECT m.mld_melding_key, m.mld_melding_parentkey, m.mld_melding_start_key, m.mld_melding_externnr, m.prs_perslid_key, mab.prs_perslid_email, sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingnummer, alg_regio_omschrijving, alg_district_omschrijving, alg_locatie_code locatie, alg_locatie_omschrijving locatie_omschrijving, alg_locatie_plaats locatie_plaats, l.alg_locatie_key, COALESCE(og.alg_gebouw_code, og.alg_terreinsector_code) gebouw, COALESCE(og.alg_gebouw_naam, og.alg_terreinsector_naam) gebouw_naam, og.alg_verdieping_code verdieping, og.alg_gebouw_key, og.alg_ruimte_nr ruimte, og.alg_ruimte_omschrijving ruimte_omschrijving, m.mld_melding_ordernr melding_ordernr, (SELECT ksg.prs_kostensoortgrp_oms FROM prs_kostensoortgrp ksg, prs_kostensoort ks WHERE ksg.prs_kostensoortgrp_key = ks.prs_kostensoortgrp_key AND ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoortgroep, (SELECT ks.prs_kostensoort_oms FROM prs_kostensoort ks WHERE ks.prs_kostensoort_key = (SELECT COALESCE (sm.prs_kostensoort_key, disc.prs_kostensoort_key) FROM mld_stdmelding sm, mld_discipline disc WHERE sm.mld_ins_discipline_key = disc.ins_discipline_key AND sm.mld_stdmelding_key = s.mld_stdmelding_key)) kostensoort, (SELECT k.prs_kostenplaats_nr FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats, (SELECT k.prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats_oms, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.prs_perslid_key) melder, mab.afdeling_naam afdeling, mab.afdeling_omschrijving afdeling_omschrijving, mab.prs_afdeling_key afdeling_key, mab.divisie_naam divisie, mab.divisie_omschrijving, mab.prs_afdeling_key1 divisie_key, mab.prs_bedrijf_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = mld.getmeldinguser (m.mld_melding_key)) invoerder, (SELECT mb.mld_meldbron_omschrijving FROM mld_meldbron mb WHERE mb.mld_meldbron_key = m.mld_meldbron_key) meldbron, m.mld_meldbron_key, sd.ins_srtdiscipline_key ins_srtdiscipline_key, sd.ins_srtdiscipline_omschrijving soortmelding, md.ins_discipline_key stdm_ins_discipline_key, md.ins_discipline_omschrijving productgroep, s.mld_stdmelding_omschrijving subproductgroep, smg.mld_stdmeldinggroep_naam subproductgroepgroep, mbg.mld_behandelgroep_naam behandelgroep, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key) behandelaar, m.mld_melding_behandelaar_key behandelaar_key, m.mld_ins_discipline_key mld_ins_discipline_key, (SELECT md2.ins_discipline_omschrijving FROM mld_discipline md2 WHERE md2.ins_discipline_key = m.mld_ins_discipline_key) actieve_behandelgroep, m.mld_melding_behandelaar2_key actieve_behandelaar_key, (SELECT prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = m.mld_melding_behandelaar2_key) actieve_behandelaar, (SELECT mld_statuses_omschrijving FROM mld_statuses sta WHERE sta.mld_statuses_key = m.mld_melding_status) status, CASE WHEN m.mld_melding_einddatum > COALESCE (fac.gettrackingdate ('MLDAFM', m.mld_melding_key), fac.gettrackingdate ('MLDREJ', m.mld_melding_key), SYSDATE) THEN 1 ELSE 0 END plan_uitvoertijd_sla, CASE WHEN m.mld_melding_indult = 1 OR s.mld_stdmelding_slabewaken = 0 THEN 1 ELSE 0 END sla_nvt, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'D', m.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (m.mld_melding_t_uitvoertijd.eenheid, 'U', m.mld_melding_t_uitvoertijd.tijdsduur, NULL) sla_werkuren, DECODE (m.mld_melding_t_respijt.eenheid, 'D', m.mld_melding_t_respijt.tijdsduur, NULL) sla_respijtdgn, DECODE (m.mld_melding_t_respijt.eenheid, 'U', m.mld_melding_t_respijt.tijdsduur, NULL) sla_respijturen, DECODE (m.mld_melding_t_accepttijd.eenheid, 'D', m.mld_melding_t_accepttijd.tijdsduur, NULL) sla_accptdgn, DECODE (m.mld_melding_t_accepttijd.eenheid, 'U', m.mld_melding_t_accepttijd.tijdsduur, NULL) sla_accpturen, m.mld_melding_datum datum, CASE WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE(NULL) ELSE m.mld_melding_einddatum END einddatum, mld_melding_einddatum_std einddatum_std, mld_melding_acceptdatum_std acceptdatum, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5), mld.getmeldingstatusdate (m.mld_melding_key, 1)) afgemeld, COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4), mld.getmeldingstatusdate (m.mld_melding_key, 1)) accepted, mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd, m.mld_melding_onderwerp onderwerp, m.mld_melding_omschrijving omschrijving, m.mld_melding_opmerking opmerking, m.mld_melding_spoed, m.mld_melding_satisfaction, m.mld_melding_satisfaction_op, m.mld_melding_flag, mld_melding_actiecode FROM mld_melding m, mld_stdmelding s, alg_locatie l, alg_district d, alg_regio r, alg_v_allonrgoed_gegevens og, mld_discipline md, mld_disc_params mdp, mld_behandelgroep mbg, ins_srtdiscipline sd, mld_stdmeldinggroep smg, (SELECT mx.mld_melding_key , div.prs_bedrijf_key , ab.prs_afdeling_key1 , div.prs_afdeling_naam divisie_naam , div.prs_afdeling_omschrijving divisie_omschrijving , ab.prs_afdeling_key , afd.prs_afdeling_naam afdeling_naam , afd.prs_afdeling_omschrijving afdeling_omschrijving , px.prs_perslid_key , px.prs_perslid_email FROM mld_melding mx , prs_perslid px , prs_v_afdeling_boom ab , prs_afdeling afd , prs_afdeling div WHERE px.prs_perslid_key = mx.prs_perslid_key AND ab.prs_afdeling_key = coalesce(mx.prs_afdeling_key, px.prs_afdeling_key) AND ab.prs_afdeling_key = afd.prs_afdeling_key AND ab.prs_afdeling_key1 = div.prs_afdeling_key ) mab WHERE s.mld_stdmelding_key = m.mld_stdmelding_key AND m.mld_alg_locatie_key = l.alg_locatie_key(+) AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key AND md.ins_discipline_key = s.mld_ins_discipline_key AND md.ins_discipline_key = mdp.mld_ins_discipline_key AND s.mld_stdmeldinggroep_key = smg.mld_stdmeldinggroep_key(+) AND mdp.mld_behandelgroep_key = mbg.mld_behandelgroep_key(+) AND l.alg_district_key = d.alg_district_key(+) AND d.alg_regio_key = r.alg_regio_key(+) AND m.mld_melding_key = mab.mld_melding_key AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+) AND m.fac_activiteit_key IS NULL AND m.mld_melding_datum >= TO_DATE ('01-01-2010', 'DD-MM-YYYY')) x; CREATE OR REPLACE VIEW ykpn_v_melding_inc_accept AS SELECT y.*, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames_all p WHERE p.prs_perslid_key= (SELECT ft.prs_perslid_key from fac_tracking ft, prs_v_perslid_fullnames_all p where ft.fac_tracking_refkey=melding_key AND ft.fac_srtnotificatie_key=38 AND ROWNUM=1 ) ) acceptant FROM ykpn_v_udr_melding y; -- YKPN wil uitbereiding op de udr_medlingopdracht raportage -- Extra kolom met leverancier sla en of deze op tijd is. CREATE OR REPLACE VIEW ykpn_v_udr_meldingopdracht AS SELECT mo.melding_key, mo.meldingnummer, mo.melding_start_key, mo.externnummer, mo.melding_regio, mo.melding_district, mo.melding_locatiecode, mo.melding_locatie, mo.melding_locatieplaats, mo.fclt_3d_locatie_key, mo.melding_gebouwcode, mo.melding_gebouw, mo.melding_verdieping, mo.melding_ruimtenr, mo.melding_ruimte, mo.melding_ordernr, mo.kostensoortgroep, mo.kostensoort, mo.kostenplaats, mo.kostenplaats_oms, mo.melder, mo.melder_key, mo.melder_email, mo.afdeling, mo.afdeling_omschrijving, mo.fclt_3d_afdeling_key, mo.divisie, mo.divisie_omschrijving, mo.fclt_3d_divisie_key, mo.bedrijf_key, mo.invoerder, mo.meldbron, mo.soortmelding, mo.fclt_3d_discipline_key, mo.productgroep, mo.subproductgroep, mo.behandelgroep, mo.behandelaar, mo.behandelaar_key, mo.subproductgroepgroep, mo.fclt_3d_discipline2_key, mo.actieve_behandelgroep, mo.actieve_behandelaar_key, mo.actieve_behandelaar, mo.melding_status, mo.sla_nvt, mo.sla_werkdgn, mo.sla_werkuren, mo.sla_respijtdgn, mo.sla_respijturen, mo.sla_accptdgn, mo.sla_accpturen, mo.plan_uitvoertijd_sla, mo.melding_datum, mo.melding_einddatum, mo.melding_einddatum_std, mo.melding_acceptdatum, mo.melding_afgemeld, mo.melding_accepted, mo.doorlooptijd_werkdgn, mo.doorlooptijd_werkuren, mo.onderwerp, mo.vomschrijving, mo.melding_opmerking, mo.prioriteit, mo.prioriteittxt, mo.rating, mo.rating_opmerking, mo.bolletje, mo.actiecode, mo.accept_sla_dagen, mo.accept_sla_uren, mo.uitvoering_sla_dagen, mo.uitvoering_sla_uren, mo.afspraak_sla_dagen, mo.afspraak_sla_uren, mo.accept_sla_optijd, mo.uitvoering_sla_optijd, mo.afspraak_sla_optijd, mo.selfservice, mo.opdracht_key, mo.opdracht_nummer, mo.opdracht_regio, mo.opdracht_district, mo.opdracht_locatie_code, mo.opdracht_locatie, mo.opdracht_locatieplaats, --mo.fclt_3d_locatie_key, mo.opdracht_gebouwcode, mo.opdracht_gebouw, mo.opdracht_verdieping, mo.opdracht_ruimtenr, mo.opdracht_ruimte, mo.opdracht_kostenplaats, mo.opdracht_kostenplaats_oms, --mo.melding_key, mo.opdracht_type, mo.opdracht_volgnummer, mo.opdracht_status, mo.opdracht_duur_gepland, mo.opdracht_datum, mo.opdracht_einddatum, mo.opdracht_plandatum, mo.opdracht_acceptdatum, mo.opdracht_afgemeld, mo.opdracht_doorlooptijd, mo.opdracht_accepttijd, mo.opdracht_omschrijving, mo.opdracht_opmerking, mo.opdracht_uitvoerende, mo.opdracht_uitvoerende_contact, mo.opdracht_behandelaar, mo.opdracht_contract, mo.opdracht_contract_versie, mo.opdracht_contactpersoon, mo.opdracht_uren, mo.opdracht_correctie, mo.opdracht_materiaal, mo.opdracht_uurtarief, mo.opdracht_kosten, mo.opdracht_verstrektdatum, mo.opdracht_lev_doorloopuren, mo.opdracht_lev_doorloopdagen, tijd, eenheid, CASE WHEN tijd=0 THEN 'NVT' ELSE CASE WHEN (CASE WHEN eenheid='D' THEN tijd-mo.opdracht_lev_doorloopdagen ELSE tijd-mo.opdracht_lev_doorloopuren END)>0 THEN 'Ja' ELSE 'Nee' END END optijd FROM (select mo.*, COALESCE((SELECT p.prs_bdl_t_uitvoertijd.tijdsduur FROM prs_bedrijfdienstlocatie p WHERE prs_bedrijfdienstlocatie_key = (SELECT MAX(pb.prs_bedrijfdienstlocatie_key) FROM mld_melding m, mld_stdmelding sm, prs_dienst pd, prs_bedrijfdienstlocatie pb WHERE m.mld_melding_key= mo.melding_key AND sm.mld_stdmelding_key= m.mld_stdmelding_key AND pd.prs_dienst_key=sm.prs_dienst_key AND pb.prs_dienst_key = pd.prs_dienst_key AND pb.prs_bedrijf_key=o.mld_uitvoerende_keys AND pb.alg_locatie_key=mo.fclt_3d_locatie_key)),0) tijd, (SELECT p.prs_bdl_t_uitvoertijd.eenheid FROM prs_bedrijfdienstlocatie p WHERE prs_bedrijfdienstlocatie_key = (SELECT MAX(pb.prs_bedrijfdienstlocatie_key) FROM mld_melding m, mld_stdmelding sm, prs_dienst pd, prs_bedrijfdienstlocatie pb WHERE m.mld_melding_key= mo.melding_key AND sm.mld_stdmelding_key= m.mld_stdmelding_key AND pd.prs_dienst_key=sm.prs_dienst_key AND pb.prs_dienst_key = pd.prs_dienst_key AND pb.prs_bedrijf_key=o.mld_uitvoerende_keys AND pb.alg_locatie_key=mo.fclt_3d_locatie_key)) eenheid FROM mld_v_udr_meldingopdracht mo, mld_opdr o WHERE o.mld_opdr_key = mo.opdracht_key) mo; CREATE OR REPLACE VIEW ykpn_v_rap_log AS SELECT COALESCE (imp_log_applicatie, a.fac_import_app_code) applicatie, imp_log_datum, imp_log_status, imp_log_omschrijving, imp_log_hint FROM imp_log l, fac_import i, fac_import_app a WHERE l.fac_import_key = i.fac_import_key(+) AND i.fac_import_app_key = a.fac_import_app_key(+); CREATE OR REPLACE VIEW ykpn_v_rap_dienstrapport AS SELECT l.alg_locatie_key fclt_3d_locatie_key, l.alg_locatie_omschrijving, m.mld_melding_key, std.mld_stdmelding_omschrijving, std.mld_ins_discipline_key, prs_perslid_naam_full, mld_melding_datum, mld_melding_note_aanmaak, mld_melding_note_omschrijving FROM mld_melding_note n, mld_melding m, mld_stdmelding std, alg_locatie l, prs_v_perslid_fullnames pf WHERE n.prs_perslid_key = pf.prs_perslid_key AND n.mld_melding_key = m.mld_melding_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND m.mld_stdmelding_key = std.mld_stdmelding_key; CREATE OR REPLACE VIEW ykpn_v_iot_report AS SELECT geb.ALG_GEBOUW_OMSCHRIJVING, ver.ALG_VERDIEPING_CODE, rm.ALG_RUIMTE_NR, ins.ins_deel_key insKey, ins.INS_DEEL_OMSCHRIJVING DeviceID, isrt.INS_SRTDEEL_OMSCHRIJVING Soort, ins.INS_DEEL_OPMERKING type, (SELECT knd.ins_kenmerkdeel_waarde FROM ins_kenmerkdeel knd WHERE knd.ins_kenmerk_key = 241 AND -- Vulgraad kenmerk DEV=241, ACC=461 PROD=241 ins.ins_deel_key=knd.ins_deel_key AND knd.ins_kenmerkdeel_verwijder IS NULL) fillLevel, (SELECT knd.ins_kenmerkdeel_waarde FROM ins_kenmerkdeel knd WHERE knd.ins_kenmerk_key = 281 AND -- batterij kenmerk DEV=281, ins.ins_deel_key=knd.ins_deel_key AND knd.ins_kenmerkdeel_verwijder IS NULL) batterij FROM ins_deel ins, alg_ruimte rm, alg_verdieping ver, alg_v_gebouw_gegevens geb, ins_srtdeel isrt WHERE ins.ins_discipline_key=3282 -- Discipline IoT_CWS DEV=3101, ACC=3142, prod=3282 AND isrt.ins_srtdeel_key = ins.ins_srtdeel_key AND rm.alg_ruimte_key= ins.ins_alg_ruimte_key AND ver.alg_verdieping_key = rm.alg_verdieping_key AND geb.alg_gebouw_key = ver.alg_gebouw_key AND ins.ins_deel_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_iot_papcon AS SELECT geb.alg_gebouw_omschrijving, ver.alg_verdieping_code, rm.alg_ruimte_nr, ins.ins_deel_key insKey, ins.ins_deel_omschrijving deviceid, isrt.ins_srtdeel_omschrijving soort, ins.ins_deel_opmerking type, (SELECT knd.ins_kenmerkdeel_waarde FROM ins_kenmerkdeel knd WHERE knd.ins_kenmerk_key = 261 AND -- Vulgraad kenmerk DEV=301, ACC=481 PROD=261 ins.ins_deel_key=knd.ins_deel_key AND knd.ins_kenmerkdeel_verwijder IS NULL) fillLevel FROM ins_deel ins, alg_ruimte rm, alg_verdieping ver, alg_v_gebouw_gegevens geb, ins_srtdeel isrt WHERE ins.ins_discipline_key=3281 -- Discipline KPN_Iot DEV=3123, ACC= 3141 PROD=3281 AND isrt.ins_srtdeel_key = ins.ins_srtdeel_key AND rm.alg_ruimte_key= ins.ins_alg_ruimte_key AND ver.alg_verdieping_key = rm.alg_verdieping_key AND geb.alg_gebouw_key = ver.alg_gebouw_key AND ins.ins_deel_verwijder IS NULL; CREATE OR REPLACE VIEW ykpn_v_wp_qrcodes AS SELECT loc.alg_locatie_omschrijving locatie, av.alg_verdieping_code verdieping, av.alg_ruimte_nr ruimteNr, i.ins_deel_key, i.ins_deel_omschrijving soort, 'N-IVzS7k3BMQNFkt' bookmark FROM ins_deel i,alg_v_allonrgoed_gegevens av, alg_v_aanweziglocatie loc WHERE i.ins_discipline_key=2301 AND i.ins_deel_omschrijving like 'BUR%' AND i.ins_alg_ruimte_key= av.alg_ruimte_key AND av.alg_locatie_key=loc.alg_locatie_key; CREATE OR REPLACE VIEW ykpn_v_meubilair_locatie AS SELECT aantal, ins_srtdeel_omschrijving, alg.alg_ruimte_nr, alg.alg_verdieping_code, alg.alg_locatie_omschrijving FROM ( SELECT count(*) aantal, srt.ins_srtdeel_omschrijving, ins.ins_alg_ruimte_key FROM ins_deel ins, ins_srtgroep grp, ins_srtdeel srt WHERE grp.ins_srtgroep_key=161 AND srt.ins_srtgroep_key = grp.ins_srtgroep_key AND ins.ins_srtdeel_key = srt.ins_srtdeel_key AND ins_deel_verwijder IS NULL GROUP BY ins.ins_srtdeel_key, srt.ins_srtdeel_omschrijving,ins.ins_alg_ruimte_key) o, alg_v_ruimte_gegevens_all alg WHERE alg.alg_ruimte_key = o.ins_alg_ruimte_key ORDER BY alg.alg_locatie_key, alg.alg_verdieping_code, alg.alg_ruimte_key; CREATE OR REPLACE VIEW ykpn_v_mandt_opdr_zond_fact AS SELECT op.mld_melding_key||'/'||op.mld_opdr_bedrijfopdr_volgnr melding, m.mld_melding_onderwerp onderwerp, ot.mld_typeopdr_omschrijving opdrachtsoort, (select fac.safe_to_number(mko.mld_kenmerkopdr_waarde) from mld_kenmerkopdr mko where mko.mld_kenmerk_key IN (5041, 5021) AND mko.MLD_OPDR_KEY = op.mld_opdr_key) mandaat, op.mld_opdr_materiaal materiaal, op.mld_opdr_uren uren, op.mld_opdr_uurloon uurloon, (op.mld_opdr_kosten-op.mld_opdr_materiaal-(op.mld_opdr_uren*op.mld_opdr_uurloon)) correctie, op.mld_opdr_kosten totaal, (SELECT pb.prs_bedrijf_naam FROM prs_bedrijf pb WHERE pb.prs_bedrijf_key=op.mld_uitvoerende_keys) bedrijf, op.mld_opdr_datumbegin, op.mld_opdr_einddatum, a.alg_locatie_omschrijving, a.alg_locatie_code, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p WHERE p.prs_perslid_key=op.prs_perslid_key) behandelaar, (SELECT p.prs_perslid_email FROM prs_perslid p WHERE p.prs_perslid_key=op.prs_perslid_key) behandelaar_email FROM mld_opdr op, mld_melding m, mld_typeopdr ot, alg_v_aanweziglocatie a WHERE op.mld_statusopdr_key= 6 -- alleen afgemelde opdrachten AND m.mld_melding_key=op.mld_melding_key AND ot.mld_typeopdr_key = op.mld_typeopdr_key AND a.alg_locatie_key=m.mld_alg_locatie_key(+) AND NOT EXISTS (SELECT 1 FROM fin_factuur ff WHERE ff.mld_opdr_key = op.mld_opdr_key); CREATE OR REPLACE VIEW ykpn_v_uitleen_mutaties AS SELECT ins_deel_key, ins_deel_omschrijving, ins_deel_opmerking, (SELECT isd.ins_srtdeel_omschrijving FROM ins_srtdeel isd WHERE isd.ins_srtdeel_key=id.ins_srtdeel_key) objectsoort, ft.fac_tracking_datum, DECODE(ft.fac_srtnotificatie_key,101,'gewijzigd', 103,'uitgegeven',104 ,'ingenomen') actie, (SELECT CASE WHEN ft.fac_srtnotificatie_key= 103 THEN TRIM(SUBSTR(ft.fac_tracking_oms, INSTR(ft.fac_tracking_oms,'uitgegeven aan')+14,INSTR(ft.fac_tracking_oms,'Datum uitgeleend'))) ELSE '' END FROM DUAL) uitgegeven_aan, (SELECT p.PRS_PERSLID_NAAM_FRIENDLY from PRS_V_PERSLID_FULLNAMES p WHERE p.PRS_PERSLID_KEY=ft.prs_perslid_key) actie_door, ft.fac_tracking_oms FROM ins_deel id, fac_tracking ft WHERE id.ins_discipline_key=3721 -- alleen objecten uit uitleenmiddelen 3721 AND ft.fac_tracking_refkey=id.ins_deel_key AND ft.fac_srtnotificatie_key in (101,103,104) -- alleen mutaties, uitgegevn en ingenomen AND id.ins_deel_verwijder is null ORDER BY id.ins_deel_key, ft.fac_tracking_datum; ----------------------------------------- -- Parkeerplaats goedkeuring ----------------------------------------- -- view voor lijstje met mensen die WEB_USER09 rechten hebben -- dit zijn de mensen die parkeerplaatsen goed mogen keuren. CREATE OR REPLACE VIEW ykpn_v_pp_goedkeurders ( prs_perslid_key, prs_perslid_naam_full, prs_perslid_verwijder ) AS SELECT DISTINCT pf.prs_perslid_key, prs_perslid_naam_full || '(' || kl.prs_kenmerklink_waarde || ')', prs_perslid_verwijder FROM prs_v_perslid_fullnames_all pf, fac_groeprechten gr, fac_gebruikersgroep gg, prs_kenmerklink kl WHERE pf.prs_perslid_key = gg.prs_perslid_key AND gg.fac_groep_key = gr.fac_groep_key AND gr.fac_functie_key = 119 -- WEB_USER09 AND kl.prs_link_key = pf.prs_perslid_key AND kl.prs_kenmerk_key = 1040; -- view voor rapport pp goedkeurders -- via de gebruikersgroep gaan we op zoek naar vervangers. CREATE OR REPLACE VIEW ykpn_v_rap_goedkeuring_pp AS SELECT gg1.prs_perslid_key FCLT_3D_USER_KEY, b.bez_bezoekers_key, bez_afspraak_datum, bez_afspraak_eind, bez_afspraak_gastheer, bez_afspraak_naam, bez_afspraak_bedrijf, alg_locatie_omschrijving, alg_gebouw_naam, prs_perslid_naam_full goedkeurder, (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1004 AND kw.bez_bezoekers_key = b.bez_bezoekers_key) reden FROM bez_afspraak a, bez_bezoekers b, res_rsv_deel rrd, res_v_ins_deel rid, bez_kenmerkwaarde kw, prs_v_perslid_fullnames pg, alg_locatie l, alg_gebouw g, -- fac_groep gr, fac_gebruikersgroep gg1 -- fac_gebruikersgroep gg2 WHERE b.bez_bezoekers_key = rrd.bez_bezoekers_key AND rrd.res_deel_key = rid.res_deel_key AND rid.alg_gebouw_key = g.alg_gebouw_key AND b.bez_bezoekers_key = kw.bez_bezoekers_key AND a.alg_locatie_key = l.alg_locatie_key AND kw.bez_kenmerk_key = 1003 -- moet goedgekeurd worden door AND a.bez_afspraak_key = b.bez_afspraak_key AND fac.safe_to_number (kw.bez_kenmerkwaarde_waarde) = pg.prs_perslid_key AND pg.prs_perslid_key = gg1.prs_perslid_key AND gg1.fac_groep_key = 341 -- AND gr.fac_groep_collega = 1 -- AND gr.fac_groep_key = gg2.fac_groep_key -- AND gr.fac_groep_key = 341 AND NOT EXISTS (SELECT t.fac_tracking_key FROM fac_tracking t, fac_srtnotificatie sn WHERE fac_tracking_refkey = b.bez_bezoekers_key AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND sn.fac_srtnotificatie_code = 'CUST04'); -- Rapport met goedgekeurde en afgewezen parkeerplaatsen CREATE OR REPLACE VIEW ykpn_v_rap_tracking_pp AS SELECT bez_afspraak_datum, fac_tracking_datum, DECODE (fac_srtnotificatie_code, 'CUST05', 'Afgekeurd', 'CUST04', 'Goedgekeurd') fac_srtnotificatie_oms, a.bez_afspraak_key, bez_afspraak_naam, bez_afspraak_bedrijf, l.alg_locatie_omschrijving, wpl.alg_locatie_omschrijving standplaats, pfg.prs_perslid_naam_full goedkeurder, pfh.prs_perslid_naam_full gastheer, (SELECT bez_kenmerkwaarde_waarde FROM bez_kenmerkwaarde kw WHERE bez_kenmerk_key = 1004 AND kw.bez_bezoekers_key = b.bez_bezoekers_key) reden FROM fac_tracking t, fac_srtnotificatie sn, bez_bezoekers b, bez_afspraak a, alg_locatie l, prs_v_perslid_fullnames pfg, prs_v_perslid_fullnames pfh, prs_v_perslidwerkplek_gegevens pwpg, alg_locatie wpl WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key AND ( fac_srtnotificatie_code = 'CUST05' OR fac_srtnotificatie_code = 'CUST04') AND t.fac_tracking_refkey = b.bez_bezoekers_key AND b.bez_afspraak_key = a.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND t.prs_perslid_key = pfg.prs_perslid_key AND a.bez_afspraak_host_key = pfh.prs_perslid_key AND b.prs_perslid_key = pwpg.prs_perslid_key(+) AND pwpg.alg_locatie_key = wpl.alg_locatie_key(+); -- Notificatie naar mensen die geen autorisator opgegeven hebben tijdens het boeken van een parkeerplaats. CREATE OR REPLACE VIEW ykpn_v_noti_ongeldige_pp ( CODE, SENDER, RECEIVER, TEXT, KEY, XKEY ) AS SELECT DISTINCT 'CUST06', NULL, bez_afspraak_contact_key, 'Ongeldige parkeerplaatsaanvraag bij bezoek ' || a.bez_afspraak_key || ' op ' || TO_CHAR (a.bez_afspraak_datum, 'dd-mm-yy hh24:mi'), a.bez_afspraak_key, NULL FROM bez_bezoekers b, bez_afspraak a, res_rsv_deel rrd WHERE b.bez_afspraak_key = a.bez_afspraak_key AND rrd.bez_bezoekers_key = b.bez_bezoekers_key AND rrd.res_rsv_deel_verwijder IS NULL AND NOT EXISTS (SELECT bez_kenmerkwaarde_key FROM bez_kenmerkwaarde kw WHERE kw.bez_kenmerk_key = 1020 AND kw.bez_bezoekers_key = b.bez_bezoekers_key) -- pincode AND NOT EXISTS (SELECT bez_kenmerkwaarde_key FROM bez_kenmerkwaarde kw WHERE kw.bez_kenmerk_key = 1003 AND kw.bez_bezoekers_key = b.bez_bezoekers_key) -- autorisator AND rrd.res_rsv_deel_aanmaak BETWEEN (SELECT fac_notificatie_job_nextrun - fac_notificatie_job_interval / 24 FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_ONGELDIGE_PP') AND (SELECT fac_notificatie_job_nextrun FROM fac_notificatie_job WHERE fac_notificatie_job_view = 'YKPN_V_NOTI_ONGELDIGE_PP'); CREATE OR REPLACE VIEW ykpn_v_iam_list AS SELECT res.res_rsv_ruimte_key res_key, alg.alg_gebouw_naam||', object '||alg.alg_gebouw_code||', werkplekreservering TGV' accesslevelcode, (SELECT p.prs_perslid_oslogin FROM prs_perslid p WHERE p.prs_perslid_key=res.res_rsv_ruimte_contact_key) ruisID, (SELECT kw.res_kenmerkreservering_waarde FROM res_kenmerkwaarde kw, res_kenmerk kn, res_srtkenmerk ks WHERE UPPER(ks.res_srtkenmerk_omschrijving)='IAM_AUTORISATIE' AND kn.res_srtkenmerk_key = ks.res_srtkenmerk_key AND kw.res_kenmerk_key = kn.res_kenmerk_key AND kw.res_rsv_ruimte_key=res.res_rsv_ruimte_key) iam_response FROM res_rsv_ruimte res, alg_v_onroerendgoed_gegevens alg, alg_onrgoedkenmerk akn WHERE alg.alg_ruimte_key=res.alg_ruimte_key AND akn.alg_onrgoed_key=alg.alg_gebouw_key AND akn.alg_kenmerk_key=(SELECT ak.alg_kenmerk_key FROM alg_kenmerk ak WHERE ak.alg_kenmerk_upper='IAM AANMELDING VEREIST') AND akn.alg_onrgoedkenmerk_waarde='1'; --AND res.res_rsv_ruimte_verwijder IS NULL CREATE OR REPLACE VIEW ykpn_v_iam_res AS SELECT res.res_rsv_ruimte_key res_key, alg.alg_gebouw_naam||', object '||alg.alg_gebouw_code||', werkplekreservering TGV' accesslevelcode, (SELECT p.prs_perslid_oslogin FROM prs_perslid p WHERE p.prs_perslid_key=res.res_rsv_ruimte_contact_key) ruisID, TO_CHAR(res.res_rsv_ruimte_van,'YYYY-MM-DD')||'T'||TO_CHAR(res.res_rsv_ruimte_van, 'HH24:MI:SS') datumVan, TO_CHAR(res.res_rsv_ruimte_tot,'YYYY-MM-DD')||'T'||TO_CHAR(res.res_rsv_ruimte_tot, 'HH24:MI:SS') datumTot FROM res_rsv_ruimte res, alg_v_onroerendgoed_gegevens alg, alg_onrgoedkenmerk akn WHERE alg.alg_ruimte_key=res.alg_ruimte_key AND akn.alg_onrgoed_key=alg.alg_gebouw_key AND akn.alg_kenmerk_key = (SELECT ak.alg_kenmerk_key FROM alg_kenmerk ak WHERE ak.alg_kenmerk_upper='IAM AANMELDING VEREIST') AND akn.alg_onrgoedkenmerk_waarde= '1' AND res.res_rsv_ruimte_verwijder IS NULL AND TO_CHAR(res.res_rsv_ruimte_van,'YYYYMMDD')= TO_CHAR(SYSDATE,'YYYYMMDD') AND res.res_rsv_ruimte_key NOT IN (SELECT kw.res_rsv_ruimte_key FROM res_kenmerkwaarde kw, res_kenmerk kn, res_srtkenmerk ks WHERE UPPER(ks.res_srtkenmerk_omschrijving)='IAM_AUTORISATIE' AND kn.res_srtkenmerk_key = ks.res_srtkenmerk_key AND kw.res_kenmerk_key = kn.res_kenmerk_key AND kw.res_rsv_ruimte_key=res.res_rsv_ruimte_key); -- YKPN#70737 Rapportages procuraties -- rapportage over alle meldingen die een procuratie hebben doorlopen CREATE OR REPLACE VIEW ykpn_v_procuratie_rap ( melding_key, opdr_key, opdr_volgnr, mld_onderwerp, opdr_omschrijving, melding_datum, opdr_begindatum, melding_einddatum, opdr_einddatum, mld_status, opdr_status, locatie, mld_behandelaar, opd_behandelaar, ong_procuratie, po_gereed_doorbelast, po_afwijkend, po_nummer, capex_opex, materiaal_kosten, kost_em, kost_hm, kost_jpm, tot_bedrag_extlev, kost_mpm, kost_spm, yask_fee_extlev, kost_fm, kost_hospm, tot_bedrag_proc, kost_faccor, tot_koste_evn, kost_huisvm, kost_medior, kost_jfaccor, uren, uurloon, totaal_kosten, correctie, leverancier ) AS SELECT mld_melding_key, mld_opdr_key, mld_opdr_bedrijfopdr_volgnr, mld_onderwerp, opdr_omschrijving, mld_melding_datum, mld_opdr_datumbegin, mld_melding_einddatum, mld_opdr_einddatum, mld_status, opd_status, locatie, mld_behandelaar, opd_behandelaar, ong_procuratie, po_gereed_doorbelast, po_afwijkend, po_nummer, capex_opex, materiaal_kosten, kost_em, kost_hm, kost_jpm, tot_bedrag_extlev, kost_mpm, kost_spm, yask_fee_extlev, kost_fm, kost_hospm, tot_bedrag_proc, kost_faccor, tot_koste_evn, kost_huisvm, kost_medior, kost_jfaccor, uren, uurloon, totaal_kosten, (totaal_kosten-materiaal_kosten-(uren*uurloon)) correctie, uitvoerende FROM (SELECT m.mld_melding_key, o.mld_opdr_key, o.mld_opdr_bedrijfopdr_volgnr, m.MLD_MELDING_ONDERWERP mld_onderwerp, o.MLD_OPDR_OMSCHRIJVING opdr_omschrijving, m.mld_melding_datum, o.mld_opdr_datumbegin, m.mld_melding_einddatum, o.mld_opdr_einddatum, (SELECT mms.mld_statuses_omschrijving FROM mld_statuses mms WHERE mms.mld_statuses_key=m.mld_melding_status) mld_status, (SELECT mld_statusopdr_omschrijving FROM mld_statusopdr ms WHERE ms.mld_statusopdr_key=o.mld_statusopdr_key) opd_status, (SELECT a.alg_locatie_omschrijving FROM alg_v_aanweziglocatie a WHERE a.alg_locatie_key=m.mld_alg_locatie_key) locatie, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p WHERE p.prs_perslid_key=m.prs_perslid_key) mld_behandelaar, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p WHERE p.prs_perslid_key=o.prs_perslid_key) opd_behandelaar, COALESCE((SELECT CASE WHEN fac.safe_to_number(ko.mld_kenmerkopdr_waarde)=1 THEN 'ja' ELSE 'nee' END FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key=o.mld_opdr_key AND ko.mld_kenmerk_key in (301,5402,5442)),'nee') ong_procuratie, COALESCE((SELECT CASE WHEN fac.safe_to_number(ko.mld_kenmerkopdr_waarde)=1 THEN 'ja' ELSE 'nee' END FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key=o.mld_opdr_key AND ko.mld_kenmerk_key in (3701,5408,5448)),'nee') po_gereed_doorbelast, COALESCE((SELECT CASE WHEN fac.safe_to_number(ko.mld_kenmerkopdr_waarde)=1 THEN 'ja' ELSE 'nee' END FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key=o.mld_opdr_key AND ko.mld_kenmerk_key in (741,5405,5445)),'nee') po_afwijkend, (SELECT ko.mld_kenmerkopdr_waarde FROM mld_kenmerkopdr ko WHERE ko.mld_opdr_key=o.mld_opdr_key AND ko.mld_kenmerk_key in (561,5403,5443)) po_nummer, (SELECT fu.fac_usrdata_code FROM mld_kenmerkopdr ko, fac_usrdata fu WHERE ko.mld_opdr_key=o.mld_opdr_key AND ko.mld_kenmerk_key in (7901,7921,7941) AND fu.fac_usrdata_key=ko.mld_kenmerkopdr_waarde AND fu.fac_usrtab_key=1961) capex_opex, COALESCE((SELECT sum(mom.mld_opdr_materiaal_aantal*mom.mld_opdr_materiaal_prijs) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key),0) materiaal_kosten, (SELECT max(DECODE(fac_usrdata_key,141,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_em, -- uur eventmanager (SELECT max(DECODE(fac_usrdata_key,161,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_hm, -- uur huismeester (SELECT max(DECODE(fac_usrdata_key,162,mom.mld_opdr_materiaal_prijs)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_jpm, -- uur Junior projectmanager (SELECT max(DECODE(fac_usrdata_key,2361,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) tot_bedrag_extlev, -- total bedrag ext lev offerter (SELECT max(DECODE(fac_usrdata_key,2381,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_mpm, -- medio projectmanager (SELECT max(DECODE(fac_usrdata_key,2382,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_spm, -- uur senior projectmanager (SELECT max(DECODE(fac_usrdata_key,2383,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) yask_fee_extlev, -- yask fee ext lev offertes (SELECT max(DECODE(fac_usrdata_key,2384,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_fm, -- uur facilitor manager (SELECT max(DECODE(fac_usrdata_key,2385,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_hospm, -- uren hosp medewwerker (SELECT max(DECODE(fac_usrdata_key,2401,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) tot_bedrag_proc, -- totaal bedrag proc (SELECT max(DECODE(fac_usrdata_key,2421,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_faccor, -- uren facilitie coordinator (SELECT max(DECODE(fac_usrdata_key,2481,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) tot_koste_evn, -- totale kosten evenement (SELECT max(DECODE(fac_usrdata_key,2901,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_huisvm, -- uren huisvestigingsmanager (SELECT max(DECODE(fac_usrdata_key,3341,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_medior, -- uren medior (SELECT max(DECODE(fac_usrdata_key,3461,mom.mld_opdr_materiaal_prijs*mld_opdr_materiaal_aantal)) FROM mld_opdr_materiaal mom WHERE mom.mld_opdr_key=o.mld_opdr_key) kost_jfaccor, -- uren junior facilitor coordinator COALESCE(o.mld_opdr_uren,0) uren, COALESCE(o.mld_opdr_uurloon,0) uurloon, COALESCE(o.mld_opdr_kosten,0) totaal_kosten, (SELECT p.prs_bedrijf_naam FROM prs_bedrijf p where p.prs_bedrijf_key=o.mld_uitvoerende_keys) uitvoerende FROM mld_melding m, mld_opdr o WHERE o.mld_typeopdr_key IN (101,2481, 2482) AND m.mld_melding_key=o.mld_melding_key); -- YKPN#70737 Rapportages procuraties -- rapportage over alle facturen van meldingen die een procuratie hebben doorlopen CREATE OR REPLACE VIEW ykpn_v_procuratie_factuur ( factuur_nr, melding_nr, opdr_key, opdr_nr, melding_datum, opdr_datum, melding_einddatum, opdr_einddatum, opdr_status, locatie, mld_behandelaar, opd_behandelaar, uitvoerende, totaal_kosten, fact_regel_bedrag ) AS SELECT DISTINCT fin.fin_factuur_nr factuur_nr, m.mld_melding_key, o.mld_opdr_key, m.mld_melding_key||'/'||o.mld_opdr_bedrijfopdr_volgnr, m.mld_melding_datum, o.mld_opdr_datumbegin, m.mld_melding_einddatum, o.mld_opdr_einddatum, (SELECT a.alg_locatie_omschrijving FROM alg_v_aanweziglocatie a WHERE a.alg_locatie_key=m.mld_alg_locatie_key) locatie, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p WHERE p.prs_perslid_key=m.prs_perslid_key) mld_behandelaar, (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p WHERE p.prs_perslid_key=o.prs_perslid_key) opd_behandelaar, (SELECT mld_statusopdr_omschrijving FROM mld_statusopdr ms WHERE ms.mld_statusopdr_key=o.mld_statusopdr_key) status, (SELECT p.prs_bedrijf_naam FROM prs_bedrijf p WHERE p.prs_bedrijf_key=o.mld_uitvoerende_keys) uitvoerende, o.mld_opdr_kosten, fir.fin_factuurregel_totaal FROM fin_factuur fin, fin_factuurregel fir, mld_melding m, mld_opdr o, (SELECT DISTINCT m.mld_melding_key FROM mld_melding m, mld_opdr o WHERE m.mld_melding_key=o.mld_melding_key AND o.mld_typeopdr_key IN (101,2481, 2482) AND o.mld_statusopdr_key IN (4,5,6)) mld WHERE m.mld_melding_key =mld.mld_melding_key AND o.mld_melding_key=m.mld_melding_key AND fin.mld_opdr_key=o.mld_opdr_key AND fir.fin_factuur_key = fin.fin_factuur_key; CREATE OR REPLACE VIEW ykpn_v_bes_winkel ( bes_key, winkel, code, artikelnr, omschrijving, aantal, prijs, datum ) AS SELECT b.bes_bestelling_key, p.prs_perslid_naam, p.prs_perslid_voornaam, bsd.bes_srtdeel_nr, bsd.bes_srtdeel_omschrijving, bbi.bes_bestelling_item_aantal, bbi.bes_bestelling_item_prijs, b.bes_bestelling_datum FROM bes_bestelling b, bes_bestelling_item bbi, bes_srtdeel bsd, prs_perslid p WHERE bbi.bes_bestelling_key=b.bes_bestelling_key AND bsd.bes_srtdeel_key = bbi.bes_srtdeel_key AND b.prs_perslid_key = p.prs_perslid_key AND LOWER(p.prs_perslid_naam) like '%winkel%' -- alleen de winkel bestellingen ORDER BY p.prs_perslid_naam; CREATE OR REPLACE VIEW ykpn_v_bezoek_secu AS SELECT a.bez_afspraak_datum, l.alg_locatie_omschrijving, kw.bez_kenmerkwaarde_waarde, DECODE(kw.bez_kenmerkwaarde_waarde,null,1,61,1,62,1) aantal_bezoekers, DECODE(kw.bez_kenmerkwaarde_waarde,null,1,61,1,0) wel_gelegitimeerd, DECODE(kw.bez_kenmerkwaarde_waarde,62,1,0) niet_gelegitimeerd FROM bez_bezoekers b, bez_afspraak a, alg_locatie l, (SELECT * FROM bez_kenmerkwaarde WHERE bez_kenmerk_key=1120) kw WHERE a.bez_afspraak_key = b.bez_afspraak_key AND a.alg_locatie_key = l.alg_locatie_key AND kw.bez_bezoekers_key(+)=b.bez_bezoekers_key; CREATE OR REPLACE VIEW ykpn_v_factuur_fiateur AS SELECT f.fin_factuur_key factuurnr_intern, fin_factuur_verwijder, f.fin_factuur_datum factuur_datum, f.fin_factuur_flag, COALESCE (b.prs_bedrijf_naam, (SELECT d.prs_afdeling_omschrijving FROM prs_v_afdeling d WHERE d.prs_afdeling_key = c.cnt_prs_afdeling_key), (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = c.cnt_prs_perslid_key)) uitvoerende, b.prs_leverancier_nr, fin_factuur_nr factuurnr_extern, f.mld_opdr_key, f.cnt_contract_key, f.bes_bestelopdr_key, NVL2 ( k.prs_kostenplaats_nr, prs_kostenplaats_nr || ' ' || lcl.x ('prs_kostenplaats_omschrijving', k.prs_kostenplaats_key, k.prs_kostenplaats_omschrijving), '') kostenplaats, cd.ins_discipline_omschrijving, (SELECT MIN (ins_discipline_omschrijving) FROM bes_discipline bd, bes_srtgroep bg, bes_srtdeel bs WHERE bs.bes_srtdeel_key = bb.bes_srtdeel_key AND bg.bes_srtgroep_key = bs.bes_srtgroep_key AND bd.ins_discipline_key = bg.ins_discipline_key) bes_discipline_omschrijving, mld_stdmelding_omschrijving, COALESCE ( NVL2 ( f.mld_opdr_key, ins_srtdiscipline_prefix || TO_CHAR (o.mld_melding_key) || '/' || o.mld_opdr_bedrijfopdr_volgnr, NULL), NVL2 ( f.cnt_contract_key, 'C' || cnt_contract_nummer_intern || NVL2 (cnt_contract_versie, '.' || cnt_contract_versie, ''), NULL), NVL2 (f.bes_bestelopdr_key, bo.bes_bestelopdr_id, NULL), ' ') opdrachtnr, o.mld_statusopdr_key, o.mld_opdr_kosten, f.fin_factuur_bron, f.fin_factuur_totaal + f.fin_factuur_totaal_btw bedrag_incl_BTW, f.fin_factuur_totaal bedrag_excl_BTW, f.fin_factuur_boekmaand, f.fin_factuur_statuses_key, f.fin_factuur_opmerking, fin.matchfactuur (f.fin_factuur_key) roodgroen, budgethouder, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = budgethouder) budgethoudernaam, c.prs_perslid_key_eig, prs_perslid_key_goedkeur, (SELECT MAX (fin_factuur_note_aanmaak) FROM fin_factuur_note fn WHERE fn.fin_factuur_key = f.fin_factuur_key) notitie, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key = bb.prs_perslid_key) besteller, bb.bestelopdr_totaal, bb.bestelopdr_besteld, bb.bestelopdr_geleverd, COALESCE((SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p, (SELECT MAX(pw.prs_perslid_key) prs_perslid_key FROM fac_groep g, fac_gebruikersgroep gg, prs_perslidwerkplek pw, prs_werkplek w, alg_v_allonroerendgoed a WHERE g.fac_groep_omschrijving='Yask FM' AND gg.fac_groep_key=g.fac_groep_key AND pw.prs_perslid_key=gg.prs_perslid_key AND pw.prs_werkplek_key=w.prs_werkplek_key AND w.prs_alg_ruimte_key=a.alg_ruimte_key AND a.alg_gebouw_key= onrg.alg_gebouw_key ) fac WHERE p.prs_perslid_key=fac.prs_perslid_key), (SELECT p.prs_perslid_naam_friendly FROM prs_v_perslid_fullnames p, (SELECT MAX(pw.prs_perslid_key) prs_perslid_key FROM fac_groep g, fac_gebruikersgroep gg, prs_perslidwerkplek pw, prs_werkplek w, alg_v_allonroerendgoed a, mld_adres ba WHERE g.fac_groep_omschrijving='Yask FM' AND gg.fac_groep_key=g.fac_groep_key AND pw.prs_perslid_key=gg.prs_perslid_key AND pw.prs_werkplek_key=w.prs_werkplek_key AND w.prs_alg_ruimte_key=a.alg_ruimte_key AND a.alg_locatie_key= ba.alg_locatie_key AND ba.mld_adres_key = bo.mld_adres_key_lev ) fac WHERE p.prs_perslid_key=fac.prs_perslid_key)) fiatteur, (SELECT pf.prs_perslid_naam_full FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key =(select prs_perslid_key from fac_tracking where fac_tracking_key=ft.fac_tracking_key)) laatste_fiateur_track, 1 bes_fiat_write, 1 mld_fiat_write FROM (SELECT fin.getfiatteur (f.fin_factuur_key) budgethouder, f.* FROM fin_factuur f) f LEFT OUTER JOIN (SELECT MAX(fac_tracking_key) fac_tracking_key, fac_tracking_refkey FROM fac_tracking WHERE fac_srtnotificatie_key=131 group by fac_tracking_refkey) ft ON ft.fac_tracking_refkey=f.fin_factuur_key LEFT OUTER JOIN mld_opdr o ON f.mld_opdr_key = o.mld_opdr_key LEFT OUTER JOIN mld_melding m ON o.mld_melding_key = m.mld_melding_key LEFT OUTER JOIN mld_stdmelding sm ON m.mld_stdmelding_key = sm.mld_stdmelding_key LEFT OUTER JOIN mld_discipline d ON sm.mld_ins_discipline_key = d.ins_discipline_key LEFT OUTER JOIN ins_srtdiscipline sd ON d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key LEFT OUTER JOIN cnt_contract c ON f.cnt_contract_key = c.cnt_contract_key LEFT OUTER JOIN cnt_discipline cd ON c.ins_discipline_key = cd.ins_discipline_key LEFT OUTER JOIN bes_bestelopdr bo ON f.bes_bestelopdr_key = bo.bes_bestelopdr_key LEFT OUTER JOIN ( SELECT boi.bes_bestelopdr_key, MIN (bes_srtdeel_key) bes_srtdeel_key, MIN (bb.prs_kostenplaats_key) prs_kostenplaats_key, MIN (bb.prs_perslid_key) prs_perslid_key, SUM ( boi.bes_bestelopdr_item_prijs * boi.bes_bestelopdr_item_aantal) bestelopdr_totaal, SUM (boi.bes_bestelopdr_item_aantal) bestelopdr_besteld, SUM (boi.bes_bestelopdr_item_aantalontv) bestelopdr_geleverd FROM bes_bestelling bb, bes_bestelopdr_item boi, bes_bestelling_item bbi WHERE bbi.bes_bestelling_key = bb.bes_bestelling_key AND boi.bes_bestelopdr_item_key = bbi.bes_bestelopdr_item_key GROUP BY boi.bes_bestelopdr_key) bb ON f.bes_bestelopdr_key = bb.bes_bestelopdr_key LEFT OUTER JOIN prs_kostenplaats k ON k.prs_kostenplaats_key = COALESCE (bb.prs_kostenplaats_key, o.prs_kostenplaats_key, m.prs_kostenplaats_key, c.prs_kostenplaats_key) LEFT OUTER JOIN prs_bedrijf b ON b.prs_bedrijf_key = COALESCE (o.mld_uitvoerende_keys, c.cnt_prs_bedrijf_key, bo.prs_bedrijf_key) LEFT OUTER JOIN alg_v_allonroerendgoed onrg ON m.mld_alg_onroerendgoed_keys = onrg.alg_onroerendgoed_keys WHERE 1 = 1 AND f.fin_factuur_statuses_key = 2 AND f.fin_factuur_verwijder IS NULL ORDER BY f.fin_factuur_key; CREATE OR REPLACE VIEW ykpn_v_arrow_meldingen ( melding_key, melding_onderwerp, melding_datum, afmeld_datum, melding_status, tot_melding_kosten ) AS SELECT m.mld_melding_key, m.mld_melding_onderwerp, m.mld_melding_datum, (SELECT MAX(fac_tracking_datum) FROM fac_tracking WHERE fac_srtnotificatie_key=39 -- MLDAFM AND fac_tracking_refkey=m.mld_melding_key) afmeld_datum, (SELECT mld_statuses.mld_statuses_omschrijving FROM mld_statuses WHERE mld_statuses.mld_statuses_key=m.mld_melding_status) melding_status, SUM(ROUND(o.mld_opdr_kosten*1.04, 2)) tot_melding_kosten -- Vaste toelslag van 4% FROM mld_melding m, mld_stdmelding ms, mld_opdr o WHERE UPPER(ms.mld_stdmelding_omschrijving)='ARROW' -- Alleen de Arrow meldingen AND m.mld_stdmelding_key=ms.mld_stdmelding_key AND o.mld_melding_key = m.mld_melding_key GROUP BY m.mld_melding_key,m.mld_melding_onderwerp,m.mld_melding_datum, m.mld_melding_status; CREATE OR REPLACE VIEW ykpn_v_rap_prsdienstplaats_ext ( prs_bedrijf_key, bedrijf, prs_dienst_key, dienst, dienst_hint, locatie, gebouw, gebouw_functie, TYPE, werkdagen, werkuren ) AS SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, d.prs_dienst_key, d.prs_dienst_omschrijving, d.prs_dienst_hint, NULL locatie, NULL gebouw, NULL gebouw_functie, 'geen scope' TYPE, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'D', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'U', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkuren FROM prs_bedrijfdienstlocatie bdl, prs_bedrijf b, prs_dienst d WHERE b.prs_bedrijf_key = bdl.prs_bedrijf_key AND prs_bedrijf_verwijder IS NULL AND bdl.prs_dienst_key = d.prs_dienst_key AND alg_gebouw_key IS NULL AND alg_locatie_key IS NULL UNION SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, d.prs_dienst_key, d.prs_dienst_omschrijving, d.prs_dienst_hint, l.alg_locatie_omschrijving, NULL gebouw, NULL gebouw_functie, 'locatie scope' TYPE, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'D', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'U', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkuren FROM prs_bedrijfdienstlocatie bdl, prs_bedrijf b, prs_dienst d, alg_locatie l WHERE b.prs_bedrijf_key = bdl.prs_bedrijf_key AND prs_bedrijf_verwijder IS NULL AND bdl.prs_dienst_key = d.prs_dienst_key AND l.alg_locatie_key = bdl.alg_locatie_key AND alg_gebouw_key IS NULL UNION SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, d.prs_dienst_key, d.prs_dienst_omschrijving, d.prs_dienst_hint, l.alg_locatie_omschrijving, g.alg_gebouw_omschrijving, sg.alg_srtgebouw_omschrijving functie, 'gebouw scope' TYPE, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'D', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkdgn, DECODE (bdl.prs_bdl_t_uitvoertijd.eenheid, 'U', bdl.prs_bdl_t_uitvoertijd.tijdsduur, NULL) sla_werkuren FROM prs_bedrijfdienstlocatie bdl, prs_bedrijf b, prs_dienst d, alg_locatie l, alg_gebouw g, alg_srtgebouw sg WHERE b.prs_bedrijf_key = bdl.prs_bedrijf_key AND prs_bedrijf_verwijder IS NULL AND bdl.prs_dienst_key = d.prs_dienst_key AND l.alg_locatie_key = g.alg_locatie_key AND g.alg_gebouw_key = bdl.alg_gebouw_key AND g.alg_srtgebouw_key = sg.alg_srtgebouw_key; CREATE OR REPLACE VIEW ykpn_v_rap_dienstxmelding ( vakgroep, melding, melding_werkdagen, melding_werkuren, bedrijf, dienst, dienst_hint, locatie, gebouw, gebouw_functie, TYPE, dienst_werkdagen, dienst_werkuren ) AS SELECT d.ins_discipline_omschrijving vakgroep, std.mld_stdmelding_omschrijving melding, DECODE (std.mld_stdmelding_t_uitvoertijd.eenheid, 'D', std.mld_stdmelding_t_uitvoertijd.tijdsduur, NULL) melding_werkdagen, DECODE (std.mld_stdmelding_t_uitvoertijd.eenheid, 'U', std.mld_stdmelding_t_uitvoertijd.tijdsduur, NULL) melding_werkuren, bedrijf, dienst, dienst_hint, locatie, gebouw, gebouw_functie, TYPE, werkdagen dienst_werkdagen, werkuren dienst_werkuren FROM ykpn_v_rap_prsdienstplaats_ext pdp, mld_stdmelding std, mld_discipline d WHERE std.prs_dienst_key = pdp.prs_dienst_key AND std.mld_ins_discipline_key = d.ins_discipline_key; CREATE OR REPLACE VIEW YKPN_V_AFD_ZONDER_COSTCENTRE ( prs_afdeling_key, prs_afdeling_naam, prs_afdeling_omschrijving, prs_kostenplaats_nr ) AS SELECT prs_afdeling_key, prs_afdeling_naam, prs_afdeling_omschrijving, NULL prs_kostenplaats_nr FROM prs_afdeling WHERE prs_kostenplaats_key IS NULL AND prs_afdeling_verwijder IS NULL; CREATE OR REPLACE VIEW YKPN_V_GIO_RUIMTEXPORT ( alg_ruimte_key, ruimte_nr, alg_srtruimte_omschrijving, alg_locatie_code, alg_locatie_omschrijving ) AS SELECT r.alg_ruimte_key, r.alg_ruimte_nr, sr.alg_srtruimte_omschrijving, l.alg_locatie_code, l.alg_locatie_omschrijving FROM alg_ruimte r, alg_srtruimte sr, alg_v_onroerendgoed_gegevens aog, alg_locatie l WHERE r.alg_ruimte_verwijder IS NULL AND sr.alg_srtruimte_key = r.alg_srtruimte_key AND aog.alg_ruimte_key = r.alg_ruimte_key AND l.alg_locatie_key = aog.alg_locatie_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