F-- Script containing customer specific configuration sql statements for Asito Digitaal Logboek -- $Revision$ -- $Id$ DEFINE thisfile = 'ASDL.SQL' DEFINE dbuser = '^ASDL' DEFINE custid = 'ASDL' SET ECHO ON SET DEFINE ON COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT; WHENEVER SQLERROR EXIT; SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL; WHENEVER SQLERROR CONTINUE; SPOOL &fcltlogfile SET DEFINE OFF ------ payload begin ------ CREATE OR REPLACE PACKAGE asdl AS FUNCTION check_valid_schedule (p_deel_key IN NUMBER) RETURN VARCHAR2; FUNCTION get_bits_str (p_eenheid IN NUMBER, p_bits IN NUMBER) RETURN VARCHAR2; FUNCTION get_bits_value (p_eenheid IN NUMBER, p_rangorde IN NUMBER, p_dagen IN VARCHAR2) RETURN NUMBER; FUNCTION get_bits_rangorde (p_eenheid IN NUMBER, p_bits IN NUMBER) RETURN NUMBER; FUNCTION get_kenmerks (p_module IN VARCHAR2, p_srtkenmerk_key IN NUMBER, p_soort_key IN NUMBER, p_soort_niveau IN VARCHAR2, p_link_key IN NUMBER) RETURN VARCHAR2; FUNCTION get_kenmerk (p_module IN VARCHAR2, p_kenmerk_key IN NUMBER, p_link_key IN NUMBER) RETURN VARCHAR2; FUNCTION get_kenmerkwaarde (p_kenmerk_type VARCHAR2, p_kenmerkdomein_key NUMBER, p_kenmerk_waarde VARCHAR2) RETURN VARCHAR2; END; / CREATE OR REPLACE PACKAGE BODY asdl AS FUNCTION check_valid_schedule (p_deel_key IN NUMBER) RETURN VARCHAR2 AS v_srtcontrole_key NUMBER; v_dummydate DATE; v_error_string VARCHAR2 (200); BEGIN SELECT ins_srtcontrole_key INTO v_srtcontrole_key FROM ins_srtcontroledl_xcp x WHERE x.ins_deel_key = p_deel_key; BEGIN SELECT TRUNC ( fac.nextcyclusdatedeel (p_deel_key, v_srtcontrole_key, 1)) INTO v_dummydate FROM DUAL; v_error_string := NULL; EXCEPTION WHEN OTHERS THEN v_error_string := SUBSTR (SQLERRM, 1, 200); END; RETURN v_error_string; END; FUNCTION get_bits_str (p_eenheid IN NUMBER, p_bits IN NUMBER) RETURN VARCHAR2 AS v_result VARCHAR2(100); m_bits NUMBER; BEGIN IF p_eenheid = 0 THEN -- uurlijks doen we nog even niets mee NULL; ELSIF p_eenheid = 1 THEN -- dagelijks doen we nog even niets mee NULL; ELSIF p_eenheid = 2 THEN -- wekelijks IF BITAND (p_bits, 2) <> 0 THEN v_result := 'Ma'; END IF; IF BITAND (p_bits, 4) <> 0 THEN v_result := v_result || 'Di'; END IF; IF BITAND (p_bits, 8) <> 0 THEN v_result := v_result || 'Wo'; END IF; IF BITAND (p_bits, 16) <> 0 THEN v_result := v_result || 'Do'; END IF; IF BITAND (p_bits, 32) <> 0 THEN v_result := v_result || 'Vr'; END IF; IF BITAND (p_bits, 64) <> 0 THEN v_result := v_result || 'Za'; END IF; IF BITAND (p_bits, 1) <> 0 THEN v_result := v_result || 'Zo'; END IF; IF BITAND (p_bits, 128) <> 0 THEN v_result := v_result || 'NF'; END IF; ELSIF p_eenheid = 3 THEN -- maandelijks IF BITAND (p_bits, 2) <> 0 THEN v_result := 'Ma'; END IF; IF BITAND (p_bits, 4) <> 0 THEN v_result := v_result || 'Di'; END IF; IF BITAND (p_bits, 8) <> 0 THEN v_result := v_result || 'Wo'; END IF; IF BITAND (p_bits, 16) <> 0 THEN v_result := v_result || 'Do'; END IF; IF BITAND (p_bits, 32) <> 0 THEN v_result := v_result || 'Vr'; END IF; IF BITAND (p_bits, 64) <> 0 THEN v_result := v_result || 'Za'; END IF; IF BITAND (p_bits, 1) <> 0 THEN v_result := v_result || 'Zo'; END IF; IF BITAND (p_bits, 128) <> 0 THEN v_result := v_result || 'NF'; END IF; END IF; RETURN v_result; END; FUNCTION get_bits_value (p_eenheid IN NUMBER, p_rangorde IN NUMBER, p_dagen IN VARCHAR2) RETURN NUMBER AS v_result NUMBER; BEGIN v_result := 0; IF INSTR(UPPER(p_dagen), 'MA') > 0 THEN v_result := v_result + 2; END IF; IF INSTR(UPPER(p_dagen), 'DI') > 0 THEN v_result := v_result + 4; END IF; IF INSTR(UPPER(p_dagen), 'WO') > 0 THEN v_result := v_result + 8; END IF; IF INSTR(UPPER(p_dagen), 'DO') > 0 THEN v_result := v_result + 16; END IF; IF INSTR(UPPER(p_dagen), 'VR') > 0 THEN v_result := v_result + 32; END IF; IF INSTR(UPPER(p_dagen), 'ZA') > 0 THEN v_result := v_result + 64; END IF; IF INSTR(UPPER(p_dagen), 'ZO') > 0 THEN v_result := v_result + 1; END IF; IF INSTR(UPPER(p_dagen), 'NF') > 0 THEN v_result := v_result + 128; END IF; IF p_rangorde IS NOT NULL THEN v_result := v_result + (p_rangorde * 256); END IF; RETURN v_result; END; FUNCTION get_bits_rangorde (p_eenheid IN NUMBER, p_bits IN NUMBER) RETURN NUMBER AS m_bits NUMBER; BEGIN IF p_eenheid = 3 THEN -- maandelijks m_bits := BITAND(p_bits, 256 + 512 + 1024) / 256; END IF; RETURN m_bits; END; FUNCTION get_kenmerks (p_module IN VARCHAR2, p_srtkenmerk_key IN NUMBER, p_soort_key IN NUMBER, p_soort_niveau IN VARCHAR2, p_link_key IN NUMBER) RETURN VARCHAR2 AS v_kenmerk_key mld_srtkenmerk.mld_srtkenmerk_key%TYPE; BEGIN CASE p_module WHEN 'MLD' THEN SELECT k.mld_kenmerk_key INTO v_kenmerk_key FROM mld_kenmerk k WHERE k.mld_kenmerk_verwijder IS NULL AND mld_srtkenmerk_key = p_srtkenmerk_key AND mld_stdmelding_key = p_soort_key AND mld_kenmerk_niveau = p_soort_niveau; WHEN 'INS' THEN SELECT k.ins_kenmerk_key INTO v_kenmerk_key FROM ins_kenmerk k WHERE k.ins_kenmerk_verwijder IS NULL AND ins_srtkenmerk_key = p_srtkenmerk_key AND ins_srtinstallatie_key = p_soort_key AND ins_kenmerk_niveau = p_soort_niveau; END CASE; RETURN asdl.get_kenmerk (p_module, v_kenmerk_key, p_link_key); 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 'PRS' THEN SELECT prs_kenmerk_kenmerktype, k.fac_kenmerkdomein_key, pkl.prs_kenmerklink_waarde INTO v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde FROM prs_kenmerklink pkl, prs_kenmerk k WHERE pkl.prs_link_key = p_link_key AND pkl.prs_kenmerk_key = p_kenmerk_key AND pkl.prs_kenmerk_key = k.prs_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_kmdeelsrtcontr_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 asdl.get_kenmerkwaarde (v_kenmerk_type, v_kenmerkdomein_key, v_kenmerk_waarde); 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; END; / CREATE OR REPLACE VIEW asdl_v_perslid_2250 ( prs_perslid_key, prs_perslid_naam_full, prs_perslid_verwijder ) AS SELECT p.prs_perslid_key, pf.prs_perslid_naam_full, p.prs_perslid_verwijder FROM prs_v_perslid_fullnames_all pf, prs_perslid p WHERE pf.prs_perslid_key = p.prs_perslid_key AND p.prs_afdeling_key = 62; CREATE OR REPLACE VIEW asdl_v_rap_werkprogramma ( alg_district_omschrijving, alg_locatie_code, fclt_3d_locatie_key, alg_locatie_omschrijving, ins_srtdeel_code, ins_srtcontrole_omschrijving, ins_srtcontroledl_xcp_eenheid, ins_srtcontroledl_xcp_periode, frequentie, afwijking, uitvoering, info ) AS SELECT alg_district_omschrijving, alg_locatie_code, l.alg_locatie_key, alg_locatie_omschrijving, ins_srtdeel_code, ins_srtcontrole_omschrijving, DECODE (ins_srtcontroledl_xcp_eenheid, 2, 'week', 3, 'maand', 'jaar'), ins_srtcontroledl_xcp_periode, DECODE (ins_srtcontroledl_xcp_eenheid, 2, 52, 3, 12, 1) / ins_srtcontroledl_xcp_periode, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE alg_onrgoedkenmerk_verwijder IS NULL AND aogk.alg_onrgoed_key = l.alg_locatie_key AND aogk.alg_kenmerk_key = 1000) afw, (SELECT alg_onrgoedkenmerk_waarde FROM alg_onrgoedkenmerk aogk WHERE alg_onrgoedkenmerk_verwijder IS NULL AND aogk.alg_onrgoed_key = l.alg_locatie_key AND aogk.alg_kenmerk_key = 1020) uitv, REPLACE ( REPLACE ( REPLACE (REPLACE (ins_srtcontrole_info, '[table]'), '[/table]'), '[', '<'), ']', '>') FROM alg_locatie l, alg_district d, ins_srtdeel sd, ins_v_deel_gegevens dg, ins_srtcontroledl_xcp x, ins_srtcontrole sc WHERE l.alg_district_key = d.alg_district_key AND l.alg_locatie_key = dg.alg_locatie_key AND dg.ins_srtdeel_key = sc.ins_srtinstallatie_key AND x.ins_srtcontrole_key = sc.ins_srtcontrole_key AND x.ins_deel_key = dg.ins_deel_key AND dg.ins_srtdeel_key = sd.ins_srtdeel_key; -- Schoonmaakacties voor vandaag. CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_today ( aantal, eerste, ruimte_key, ruimte_nr, alg_ruimte_omschrijving, ins_deel_omschrijving, alg_gebouw_omschrijving, alg_gebouw_upper, alg_locatie_omschrijving, alg_locatie_key, ins_deel_key, ins_srtcontroledl_xcp_groep, fclt_3d_user_key, alg_locatie_x, ins_srtcontrole_key, maand, periodiek, ins_deelsrtcontrole_key ) AS SELECT COUNT (isc.ins_srtcontrole_key) aantal_srtcontoles, MIN (isc.ins_srtcontrole_key) min_srtcontrole_key, r.alg_ruimte_key, r.alg_ruimte_nr, 'Wekelijks onderhoud', REPLACE (d.ins_deel_omschrijving, alg_gebouw_upper || '-'), REPLACE (alg_gebouw_omschrijving, alg_gebouw_upper || ' - '), alg_gebouw_upper, l.alg_locatie_omschrijving, l.alg_locatie_key, id.ins_deel_key, ins_srtcontroledl_xcp_groep, COALESCE (p.prs_perslid_key, -1) prs_perslid_key, alg_locatie_x, isc.ins_srtcontrole_key, DECODE (ins_srtcontroledl_xcp_eenheid, 3, 1, 0) maand, DECODE (ins_srtcontroledl_xcp_eenheid, 3, ' Periodiek', '') periodiek, (SELECT MAX (ins_deelsrtcontrole_key) ins_deelsrtcontrole_key FROM ins_deelsrtcontrole dsc WHERE dsc.ins_deel_key = id.ins_deel_key AND dsc.ins_srtcontrole_key = isc.ins_srtcontrole_key AND ins_deelsrtcontrole_status NOT IN (5,6)) ins_deelsrtcontrole_key FROM ins_v_deel_gegevens id, ins_deel d, ins_srtcontrole isc, ins_srtcontroledl_xcp xcp, prs_kenmerklink kl, alg_ruimte r, alg_locatie l, prs_perslid p WHERE id.alg_locatie_key = l.alg_locatie_key AND p.alg_onroerendgoed_keys(+) = l.alg_locatie_key AND xcp.ins_deel_key = id.ins_deel_key AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key AND xcp.ins_srtcontroledl_xcp_eenheid IS NOT NULL AND (isc.ins_srtcontrole_niveau = 'S' AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key OR isc.ins_srtcontrole_niveau = 'G' AND isc.ins_srtinstallatie_key = id.ins_srtgroep_key OR isc.ins_srtcontrole_niveau = 'D' AND isc.ins_srtinstallatie_key = id.ins_discipline_key) AND kl.prs_kenmerk_key = 1000 AND kl.prs_kenmerklink_waarde = xcp.ins_srtcontroledl_xcp_groep AND id.alg_ruimte_key = r.alg_ruimte_key AND kl.prs_link_key = p.prs_perslid_key AND id.ins_deel_key = d.ins_deel_key AND COALESCE (d.ins_deel_vervaldatum, SYSDATE) >= SYSDATE AND ( ( TRUNC (fac.nextcyclusdatedeel (id.ins_deel_key, isc.ins_srtcontrole_key, 1)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) -- periodieke werkzaamheden mag ik de gehele week afmelden. AND NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_status FROM ins_deelsrtcontrole idsc WHERE idsc.ins_deelsrtcontrole_status < 5 AND idsc.ins_deel_key = d.ins_deel_key AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key ) ) OR EXISTS (SELECT idsc.ins_deelsrtcontrole_status FROM ins_deelsrtcontrole idsc WHERE idsc.ins_deelsrtcontrole_status < 5 AND idsc.ins_deel_key = d.ins_deel_key AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key AND TRUNC(COALESCE(ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_datum_org)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) ) ) GROUP BY r.alg_ruimte_key, r.alg_ruimte_nr, kl.prs_link_key, isc.ins_srtcontrole_omschrijving, alg_gebouw_omschrijving, alg_gebouw_upper, l.alg_locatie_key, d.ins_deel_omschrijving, l.alg_locatie_omschrijving, id.ins_deel_key, ins_srtcontroledl_xcp_groep, p.prs_perslid_key, alg_locatie_x, isc.ins_srtcontrole_key, ins_srtcontroledl_xcp_eenheid; -- Schoonmaak acties voor vandaag op mijn route. CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_today1 ( aantal, eerste, ruimte_key, ruimte_nr, alg_ruimte_omschrijving, ins_deel_omschrijving, alg_gebouw_omschrijving, alg_gebouw_upper, alg_locatie_omschrijving, alg_locatie_key, alg_district_key, alg_regio_key, ins_deel_key, ins_discipline_key, ins_srtcontroledl_xcp_groep, fclt_3d_user_key, alg_locatie_x, ins_srtcontrole_key, volgorde, maand ) AS SELECT COUNT (isc.ins_srtcontrole_key) aantal_srtcontoles, MIN (isc.ins_srtcontrole_key) min_srtcontrole_key, r.alg_ruimte_key, r.alg_ruimte_nr, alg_ruimte_omschrijving, REPLACE (d.ins_deel_omschrijving, alg_gebouw_upper || '-'), REPLACE (alg_gebouw_omschrijving, alg_gebouw_upper || ' - '), alg_gebouw_upper, l.alg_locatie_omschrijving, l.alg_locatie_key, di.alg_district_key, di.alg_regio_key, id.ins_deel_key, id.ins_discipline_key, ins_srtcontroledl_xcp_groep, kl.prs_link_key, alg_locatie_x, isc.ins_srtcontrole_key, w.volgorde, DECODE(ins_srtcontroledl_xcp_eenheid, 3, 1, 0) maand FROM ins_v_deel_gegevens id, ins_deel d, ins_srtcontrole isc, ins_srtcontroledl_xcp xcp, prs_kenmerklink kl, alg_ruimte r, alg_locatie l, alg_district di, (SELECT alg_onrgoedkenmerk_waarde volgorde, alg_onrgoed_key FROM alg_onrgoedkenmerk aogk WHERE aogk.alg_kenmerk_key = DECODE (MOD(TO_CHAR(SYSDATE, 'IW'),2), 1, 1043, 0, 1042) AND aogk.alg_onrgoedkenmerk_verwijder IS NULL) w WHERE id.alg_locatie_key = l.alg_locatie_key AND l.alg_district_key = di.alg_district_key AND l.alg_locatie_key = w.alg_onrgoed_key(+) AND xcp.ins_deel_key = id.ins_deel_key AND xcp.ins_srtcontrole_key = isc.ins_srtcontrole_key AND xcp.ins_srtcontroledl_xcp_eenheid IS NOT NULL AND (isc.ins_srtcontrole_niveau = 'S' AND isc.ins_srtinstallatie_key = id.ins_srtdeel_key OR isc.ins_srtcontrole_niveau = 'G' AND isc.ins_srtinstallatie_key = id.ins_srtgroep_key OR isc.ins_srtcontrole_niveau = 'D' AND isc.ins_srtinstallatie_key = id.ins_discipline_key) AND kl.prs_kenmerk_key = 1000 AND kl.prs_kenmerklink_waarde = xcp.ins_srtcontroledl_xcp_groep AND id.alg_ruimte_key = r.alg_ruimte_key AND id.ins_deel_key = d.ins_deel_key AND COALESCE(d.ins_deel_vervaldatum, SYSDATE) >= SYSDATE AND ( ( TRUNC (fac.nextcyclusdatedeel (id.ins_deel_key, isc.ins_srtcontrole_key, 1)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) -- periodieke werkzaamheden mag ik de gehele week afmelden. AND NOT EXISTS (SELECT idsc.ins_deelsrtcontrole_status FROM ins_deelsrtcontrole idsc WHERE idsc.ins_deelsrtcontrole_status < 5 AND idsc.ins_deel_key = d.ins_deel_key AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key ) ) OR EXISTS (SELECT idsc.ins_deelsrtcontrole_status FROM ins_deelsrtcontrole idsc WHERE idsc.ins_deelsrtcontrole_status < 5 AND idsc.ins_deel_key = d.ins_deel_key AND idsc.ins_srtcontrole_key = isc.ins_srtcontrole_key AND TRUNC(COALESCE(ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_datum_org)) <= TRUNC (SYSDATE) + DECODE (ins_srtcontroledl_xcp_eenheid, 3, 5, 0) ) ) GROUP BY r.alg_ruimte_key, r.alg_ruimte_nr, kl.prs_link_key, alg_ruimte_omschrijving, alg_gebouw_omschrijving, alg_gebouw_upper, l.alg_locatie_key, di.alg_district_key, di.alg_regio_key, d.ins_deel_omschrijving, l.alg_locatie_omschrijving, id.ins_deel_key, id.ins_discipline_key, ins_srtcontroledl_xcp_groep, alg_locatie_x, isc.ins_srtcontrole_key, w.volgorde, ins_srtcontroledl_xcp_eenheid; CREATE OR REPLACE VIEW asdl_v_rap_schoonmaak_result ( alg_regio_key, alg_regio_omschrijving, alg_district_key, alg_district_omschrijving, fclt_3d_locatie_key, alg_locatie_code, alg_locatie_omschrijving, laatste_schoonmaak, schoonmaker ) AS SELECT r.alg_regio_key, r.alg_regio_omschrijving, di.alg_district_key, di.alg_district_omschrijving, l.alg_locatie_key, l.alg_locatie_code, l.alg_locatie_omschrijving, idc.ins_deelsrtcontrole_datum laatste_schoonmaak, pf.prs_perslid_naam_full FROM (SELECT ins_alg_locatie_key alg_locatie_key, prs_perslid_key, ins_deelsrtcontrole_datum FROM ins_deelsrtcontrole idc1, ins_deel d1 WHERE idc1.ins_deel_key = d1.ins_deel_key AND NOT EXISTS (SELECT ins_deelsrtcontrole_key FROM ins_deelsrtcontrole idc2, ins_deel d2 WHERE idc2.ins_deel_key = d2.ins_deel_key AND d1.ins_alg_locatie_key = d2.ins_alg_locatie_key AND idc1.ins_deelsrtcontrole_key < idc2.ins_deelsrtcontrole_key)) idc, alg_locatie l, alg_district di, alg_regio r, prs_v_perslid_fullnames pf WHERE idc.alg_locatie_key = l.alg_locatie_key AND l.alg_locatie_verwijder IS NULL AND l.alg_district_key = di.alg_district_key AND di.alg_regio_key = r.alg_regio_key AND idc.prs_perslid_key = pf.prs_perslid_key; CREATE OR REPLACE VIEW asdl_v_rap_persoonsgegevens AS SELECT pf.prs_perslid_naam_full naam, prs_afdeling_naam, p.prs_perslid_key, prs_perslid_email email, prs_srtperslid_omschrijving, prs_srtperslid_opp, asdl.get_kenmerk ('PRS', 1000, p.prs_perslid_key) route, asdl.get_kenmerk ('PRS', 1023, p.prs_perslid_key) geboortedatum, asdl.get_kenmerk ('PRS', 1024, p.prs_perslid_key) VGM, asdl.get_kenmerk ('PRS', 1055, p.prs_perslid_key) resgerichtsch, asdl.get_kenmerk ('PRS', 1056, p.prs_perslid_key) resgerichtschbeh, asdl.get_kenmerk ('PRS', 1057, p.prs_perslid_key) duurzaamsch, asdl.get_kenmerk ('PRS', 1058, p.prs_perslid_key) duurzaamschbeh, asdl.get_kenmerk ('PRS', 1059, p.prs_perslid_key) gastvrijheid, asdl.get_kenmerk ('PRS', 1060, p.prs_perslid_key) gastvrijheidbeh, asdl.get_kenmerk ('PRS', 1026, p.prs_perslid_key) hospitality, asdl.get_kenmerk ('PRS', 1045, p.prs_perslid_key) hospitalitybeh, asdl.get_kenmerk ('PRS', 1027, p.prs_perslid_key) nederl_taaltrjct, asdl.get_kenmerk ('PRS', 1046, p.prs_perslid_key) nederl_taalbeh, asdl.get_kenmerk ('PRS', 1030, p.prs_perslid_key) svsbasis, asdl.get_kenmerk ('PRS', 1047, p.prs_perslid_key) svsbasisbeh, asdl.get_kenmerk ('PRS', 1031, p.prs_perslid_key) svsleid, asdl.get_kenmerk ('PRS', 1048, p.prs_perslid_key) svsleidbeh, asdl.get_kenmerk ('PRS', 1032, p.prs_perslid_key) svsstation, asdl.get_kenmerk ('PRS', 1049, p.prs_perslid_key) svsstationbeh, asdl.get_kenmerk ('PRS', 1033, p.prs_perslid_key) taakeigenveilig, asdl.get_kenmerk ('PRS', 1050, p.prs_perslid_key) taakeigenveiligbeh, asdl.get_kenmerk ('PRS', 1034, p.prs_perslid_key) taakeigenveiliggeldigtot, DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1034, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1) taakeigenveiliggeldig, asdl.get_kenmerk ('PRS', 1052, p.prs_perslid_key) vca_b, asdl.get_kenmerk ('PRS', 1053, p.prs_perslid_key) vca_bbeh, asdl.get_kenmerk ('PRS', 1054, p.prs_perslid_key) vca_bgeldigtot, DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1054, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1) vca_bgeldig, asdl.get_kenmerk ('PRS', 1036, p.prs_perslid_key) dvp, -- asdl.get_kenmerk ('PRS', 1053) vca_bbeh, asdl.get_kenmerk ('PRS', 1037, p.prs_perslid_key) dvpgeldigtot, DECODE(SIGN(fac.safe_to_date(asdl.get_kenmerk ('PRS', 1037, p.prs_perslid_key), 'dd-mm-yyyy') - SYSDATE), -1, 0, 1) dvpgeldig, asdl.get_kenmerk ('PRS', 1039, p.prs_perslid_key) idchecker, asdl.get_kenmerk ('PRS', 1041, p.prs_perslid_key) wavpas, fac.safe_to_date(asdl.get_kenmerk ('PRS', 1100, p.prs_perslid_key), 'yyyy-mm-dd') wavpasgeldigtot, d.alg_district_omschrijving FROM prs_perslid p, prs_afdeling a, prs_srtperslid sp, prs_v_perslid_fullnames pf, ( SELECT prs_perslid_key, alg_district_key FROM prs_v_perslidwerkplek_gegevens pwg, alg_locatie l WHERE pwg.alg_locatie_key = l.alg_locatie_key AND alg_district_key <> 21 -- Algemene Asito locatie GROUP BY prs_perslid_key, l.alg_district_key) wp, alg_district d WHERE p.prs_perslid_key = pf.prs_perslid_key AND p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND p.prs_perslid_key = wp.prs_perslid_key(+) AND wp.alg_district_key = d.alg_district_key(+) AND prs_afdeling_naam = '2250'; CREATE OR REPLACE VIEW asdl_v_rap_wiezitwaar AS SELECT prs_afd_perslid_naam, alg_locatie_omschrijving, wp.prs_werkplek_getekend, l.alg_locatie_key fclt_3d_locatie_key, pwg.prs_perslid_key FROM prs_v_perslidwerkplek_gegevens pwg, prs_werkplek wp, alg_locatie l, prs_perslid p WHERE pwg.prs_werkplek_key = wp.prs_werkplek_key AND prs_werkplek_type = 1 AND pwg.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_verwijder IS NULL AND pwg.alg_locatie_key = l.alg_locatie_key; -- rapportage van deelnemers aan de toolboxsessie. -- Kenmerk 101 tot en met 120 zijn deelnemers. CREATE OR REPLACE VIEW asdl_v_rap_toolboxsessie AS SELECT m.mld_melding_key melding, mld_melding_datum datum, mld_melding_onderwerp onderwerp, mld_melding_omschrijving omschrijving, prs_perslid_naam_full deelnemer FROM mld_kenmerkmelding km, prs_v_perslid_fullnames_all pf, mld_melding m WHERE mld_kenmerk_key BETWEEN 101 AND 120 AND fac.safe_to_number (km.mld_kenmerkmelding_waarde) = pf.prs_perslid_key AND km.mld_melding_key = m.mld_melding_key; CREATE OR REPLACE VIEW asdl_v_rap_importsheet ( disciplineomschrijving, disciplinekostensoort, groepsoortomschrijving, objectsoortcode, objectsoortomschrijving, objectomschrijving, objectopmerking, ins_deel_key, reserveerbaar, eenheid, prijs, locatiecode, gebouwcode, bouwlaagvolgnummer, ruimtenummer, reserveringscope, catalogusnaam, cataloguskostensoort, persoonmatchcode, persoonmatchwaarde, district, locatie, frequentie, oppervlakte, vloersoort, dagen, route, uitvoeringsmoment, afwijkingen, eerstvolgendeschoonmaak ) AS SELECT d.ins_discipline_omschrijving, NULL disciplinekostensoort, d.ins_srtgroep_omschrijving, sd.ins_srtdeel_code, sd.ins_srtdeel_omschrijving, d.ins_deel_omschrijving, NULL objectopmerking, d.ins_deel_key, NULL reserveerbaar, NULL eenheid, NULL prijs, alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr, alg_ruimte_nr, NULL reserveringscope, NULL catalogusnaam, NULL cataloguskostensoort, NULL persoonmatchcode, NULL persoonmatchwaarde, alg_district_omschrijving, alg_locatie_omschrijving, COALESCE(fac.safe_to_number(asdl.get_kenmerks ('INS', 44, d.ins_discipline_key, 'D', d.ins_deel_key)), DECODE (ins_srtcontroledl_xcp_eenheid, 2, 52, 3, 12, 1) / ins_srtcontroledl_xcp_periode), asdl.get_kenmerks ('INS', 41, d.ins_discipline_key, 'D', d.ins_deel_key) oppervlakte, asdl.get_kenmerks ('INS', 42, d.ins_discipline_key, 'D', d.ins_deel_key) vloersoort, COALESCE( asdl.get_kenmerks ('INS', 43, d.ins_discipline_key, 'D', d.ins_deel_key), asdl.get_bits_str(ins_srtcontroledl_xcp_eenheid, ins_srtcontroledl_xcp_bits)) dagen, ins_srtcontroledl_xcp_groep, asdl.get_kenmerk ('ALG', 1020, l.alg_locatie_key) uitv, asdl.get_kenmerk ('ALG', 1000, l.alg_locatie_key) afw, DECODE ( id.ins_deel_vervaldatum, NULL, TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key, x.ins_srtcontrole_key, 1)), NULL) eerste FROM ins_v_deel_gegevens d, ins_srtdeel sd, alg_locatie l, alg_verdieping v, alg_district di, ins_srtcontroledl_xcp x, ins_deel id WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND d.alg_locatie_key = l.alg_locatie_key AND d.ins_deel_key = x.ins_deel_key AND d.ins_deel_key = id.ins_deel_key AND d.alg_verdieping_key = v.alg_verdieping_key AND l.alg_district_key = di.alg_district_key; -- ASDL#37757 CREATE OR REPLACE VIEW asdl_v_rap_obj_route_details ( discipline, groep, objectsoort, object, district, locatie_omschrijving, locatie_code, oppervlakte, vloersoort, route, uitvoeringsmoment, afwijkende_schoonmaak, eerstvolgende_moment, volgnummer_even_weken, volgnummer_oneven_weken ) AS SELECT d.ins_discipline_omschrijving, d.ins_srtgroep_omschrijving, sd.ins_srtdeel_omschrijving, d.ins_deel_omschrijving, alg_district_omschrijving, alg_locatie_omschrijving, alg_locatie_code, asdl.get_kenmerks ('INS', 41, d.ins_discipline_key, 'D', d.ins_deel_key) oppervlakte, asdl.get_kenmerks ('INS', 42, d.ins_discipline_key, 'D', d.ins_deel_key) vloersoort, ins_srtcontroledl_xcp_groep, asdl.get_kenmerk ('ALG', 1020, l.alg_locatie_key) uitv, asdl.get_kenmerk ('ALG', 1000, l.alg_locatie_key) afw, DECODE ( id.ins_deel_vervaldatum, NULL, TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key, x.ins_srtcontrole_key, 1)), NULL ) eerste, asdl.get_kenmerk ('ALG', 1042, l.alg_locatie_key) volgnr_even, asdl.get_kenmerk ('ALG', 1043, l.alg_locatie_key) volgnr_oneven FROM ins_v_deel_gegevens d, ins_srtdeel sd, alg_locatie l, alg_district di, ins_srtcontroledl_xcp x, ins_deel id WHERE d.ins_srtdeel_key = sd.ins_srtdeel_key AND d.alg_locatie_key = l.alg_locatie_key AND d.ins_deel_key = x.ins_deel_key AND d.ins_deel_key = id.ins_deel_key AND l.alg_district_key = di.alg_district_key; CREATE OR REPLACE VIEW asdl_v_rap_check_schedule AS SELECT d.* FROM ins_v_deel_gegevens d, ins_srtcontroledl_xcp x WHERE x.ins_deel_key = d.ins_deel_key AND asdl.check_valid_schedule (d.ins_deel_key) IS NOT NULL; -- Basisrapportage om per locatie te zien of hier schoongemaakt is. -- Om te bepalen of er uberhaupt schoongemaakt moest worden kijken we in de xcp bits. CREATE OR REPLACE VIEW asdl_v_rap_ns_stat ( datum, locatie, perceel, schoongemaakt ) AS SELECT dsc.ins_deelsrtcontrole_datum, alg_locatie_omschrijving, alg_district_omschrijving, DECODE ( (SELECT COUNT ( * ) FROM ins_deelsrtcontrole dsca, ins_deel da WHERE dsca.ins_deel_key = da.ins_deel_key AND ins_controlemode_key = 10 AND TRUNC (dsca.ins_deelsrtcontrole_datum_org) = dsc.ins_deelsrtcontrole_datum AND da.ins_alg_locatie_key = l.alg_locatie_key), 0, 0, 1) schoongemaakt FROM alg_locatie l, alg_district d, ( SELECT TRUNC (ins_deelsrtcontrole_datum) ins_deelsrtcontrole_datum, POWER (2, TO_CHAR (ins_deelsrtcontrole_datum, 'D') - 1) mask FROM ins_deelsrtcontrole GROUP BY TRUNC (ins_deelsrtcontrole_datum), POWER (2, TO_CHAR (ins_deelsrtcontrole_datum, 'D') - 1)) dsc, ( SELECT ins_alg_locatie_key alg_locatie_key, ins_srtcontroledl_xcp_bits FROM ins_srtcontroledl_xcp x, ins_deel d, ins_srtdeel sd, ins_srtgroep sg WHERE d.ins_deel_key = x.ins_deel_key AND d.ins_srtdeel_key = sd.ins_srtdeel_key AND sd.ins_srtgroep_key = sg.ins_srtgroep_key AND sg.ins_discipline_key = 121 -- NS Schoonmaak GROUP BY ins_alg_locatie_key, ins_srtcontroledl_xcp_bits) dcg WHERE l.alg_locatie_key = dcg.alg_locatie_key AND ins_deelsrtcontrole_datum >= TO_DATE ('20160701', 'yyyymmdd') -- we zijn het contract op 1 juli begonnen AND l.alg_locatie_verwijder IS NULL AND l.alg_district_key = d.alg_district_key AND BITAND (ins_srtcontroledl_xcp_bits, dsc.mask) <> 0; -- Groepering om grafiek met percentages te tonen CREATE OR REPLACE VIEW asdl_v_rap_ns_stat_tot (datum, percentage) AS SELECT datum, ROUND ( (SUM (schoongemaakt) / COUNT ( * )) * 100) FROM asdl_v_rap_ns_stat GROUP BY datum; -- Groepering om grafiek met percentages te tonen per perceel CREATE OR REPLACE FORCE VIEW asdl_v_training ( PERCEEL, STATUS, PRS_KENMERK_KEY, FAC_USRDATA_KEY, LEIDING ) AS SELECT alg_district_omschrijving, fac_usrdata_volgnr || '.' || fac_usrdata_omschr status, prs_kenmerk_key, ud.fac_usrdata_key, DECODE (sp.prs_srtperslid_key, 62, 1, 0) FROM prs_kenmerklink kl, fac_usrdata ud, prs_perslid p, prs_afdeling a, prs_srtperslid sp, ( SELECT prs_perslid_key, alg_district_key FROM prs_perslidwerkplek pw, prs_werkplek wp, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l WHERE pw.prs_werkplek_key = wp.prs_werkplek_key AND wp.prs_alg_ruimte_key = r.alg_ruimte_key AND r.alg_verdieping_key = v.alg_verdieping_key AND v.alg_gebouw_key = g.alg_gebouw_key AND g.alg_locatie_key = l.alg_locatie_key AND alg_district_key <> 21 -- Algemene Asito locatie GROUP BY prs_perslid_key, l.alg_district_key) wp, alg_district d WHERE p.prs_afdeling_key = a.prs_afdeling_key AND p.prs_srtperslid_key = sp.prs_srtperslid_key AND p.prs_perslid_key = wp.prs_perslid_key(+) AND wp.alg_district_key = d.alg_district_key(+) AND prs_afdeling_naam = '2250' AND fac.safe_to_number (kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key AND kl.prs_link_key = p.prs_perslid_key; -- Specifieke rapportages. CREATE OR REPLACE VIEW asdl_v_training_perceel ( PERCEEL, OMSCHRIJVING, STATUS, PERC, AANTAL ) AS SELECT alg_district_omschrijving, DECODE (prs_kenmerk_key, 1049, 'SVS perron & stationsreiniging', 1050, 'Taak Eigen Veiligheid', 1053, 'VCA (B-VCA)', 1120, 'WAV pas', 1122, 'Digitaal Veiligheid Paspoort') omschrijving, fac_usrdata_volgnr || '.' || fac_usrdata_omschr, ROUND ( ( (SELECT COUNT ( * ) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key AND ud.fac_usrdata_key = t.fac_usrdata_key AND perceel = alg_district_omschrijving) / (SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * )) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key AND perceel = alg_district_omschrijving) * 100), 2) perc, (SELECT COUNT ( * ) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key AND ud.fac_usrdata_key = t.fac_usrdata_key AND perceel = alg_district_omschrijving) aantal FROM fac_usrdata ud, prs_kenmerk k, alg_district d WHERE ud.fac_usrtab_key = 1 AND k.prs_kenmerk_key IN (1049, 1050, 1053, 1120, 1122) AND d.alg_district_key IN (41, 42, 43, 44); CREATE OR REPLACE VIEW asdl_v_training_totaal ( OMSCHRIJVING, STATUS, PERC, AANTAL ) AS SELECT DECODE (prs_kenmerk_key, 1049, 'SVS perron & stationsreiniging', 1050, 'Taak Eigen Veiligheid', 1053, 'VCA (B-VCA)', 1120, 'WAV pas', 1122, 'Digitaal Veiligheid Paspoort') omschrijving, fac_usrdata_volgnr || '.' || fac_usrdata_omschr, ROUND ( ( (SELECT COUNT ( * ) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key AND ud.fac_usrdata_key = t.fac_usrdata_key) / (SELECT DECODE (COUNT ( * ), 0, 1, COUNT ( * )) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key) * 100), 2) perc, (SELECT COUNT ( * ) FROM asdl_v_training t WHERE k.prs_kenmerk_key = t.prs_kenmerk_key AND ud.fac_usrdata_key = t.fac_usrdata_key) aantal FROM fac_usrdata ud, prs_kenmerk k, alg_district d WHERE ud.fac_usrtab_key = 1 AND k.prs_kenmerk_key IN (1049, 1050, 1053, 1120, 1122) AND d.alg_district_key IN (41, 42, 43, 44) GROUP BY prs_kenmerk_key, fac_usrdata_volgnr, fac_usrdata_omschr, fac_usrdata_key; -- view om een listbox met locatiebeheerders te vullen CREATE OR REPLACE VIEW asdl_v_list_locatiebeheerder ( prs_perslid_naam_full, prs_perslid_key, prs_perslid_verwijder ) AS SELECT prs_perslid_naam_full, pf.prs_perslid_key, NULL FROM prs_v_perslid_fullnames pf, fac_gebruikersgroep gg WHERE pf.prs_perslid_key = gg.prs_perslid_key AND fac_groep_key = 241 UNION ALL SELECT prs_perslid_naam_full, prs_perslid_key, SYSDATE FROM prs_v_perslid_fullnames_all pf WHERE pf.prs_perslid_key NOT IN (SELECT prs_perslid_key FROM fac_gebruikersgroep gg WHERE gg.prs_perslid_key = pf.prs_perslid_key AND fac_groep_key = 241); ------------------------------------------------------------------------------------------- -- -- Notificatiejobs -- ------------------------------------------------------------------------------------------- -- Notificatie naar leidinggevende op dag dat medewerker jarig is. CREATE OR REPLACE VIEW asdl_v_noti_verjaardag ( sender, receiver, text, code, fac_srtnotificatie_key, key, xkey, xemail, xmobile ) AS SELECT NULL, p.prs_perslid_key, 'Let op: Uw medewerker ' || prs_perslid_naam_friendly || ' is vandaag (' || RTRIM (TO_CHAR (SYSDATE, 'dd month')) || ') jarig.', 'PRSMAI' code, NULL fac_srtnotificatie_key, NULL key, NULL xkey, NULL xemail, NULL xmobiel FROM prs_kenmerklink klg, prs_v_perslid_fullnames pf, prs_kenmerklink kll, prs_perslid p WHERE klg.prs_kenmerk_key = 1023 AND klg.prs_kenmerklink_verwijder IS NULL AND klg.prs_link_key = pf.prs_perslid_key AND SUBSTR (klg.prs_kenmerklink_waarde, 1, 5) = TO_CHAR (SYSDATE, 'dd-mm') AND kll.prs_kenmerk_key = 1061 AND kll.prs_kenmerklink_verwijder IS NULL AND kll.prs_link_key = pf.prs_perslid_key AND fac.safe_to_number (kll.prs_kenmerklink_waarde) = p.prs_perslid_key; CREATE OR REPLACE VIEW asdl_v_noti_opleiding ( sender, receiver, text, code, fac_srtnotificatie_key, key, xkey, xemail, xmobile ) AS SELECT NULL, 701 prs_perslid_key, -- NS Asito administratie 'Let op: Opleiding/pas ' || opleiding || ' van medewerker ' || prs_perslid_naam_friendly || ' is bijna verlopen (' || prs_kenmerklink_waarde || ')', 'PRSMAI' code, NULL fac_srtnotificatie_key, NULL key, NULL xkey, NULL xemail, NULL xmobiel FROM prs_v_perslid_fullnames pf, (SELECT 'VCA vol' opleiding, prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1095 AND TRUNC (SYSDATE) IN (fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (12 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (10 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (8 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (6 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (4 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (2 * 7)) UNION SELECT 'DVP (digitaal veiligheids paspoort)', prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1037 AND TRUNC (SYSDATE) IN (fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (8 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (6 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (4 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (2 * 7)) UNION SELECT 'WAV (wet arbeid vreemdelingen)', prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1100 AND TRUNC (SYSDATE) IN (fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (8 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (6 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (4 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (2 * 7)) UNION SELECT 'VCA Basis', prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1054 AND TRUNC (SYSDATE) IN (fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (12 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (10 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (8 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (6 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (4 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (2 * 7)) UNION SELECT 'Taak eigen veiligheid', prs_link_key, prs_kenmerklink_waarde FROM prs_kenmerklink WHERE prs_kenmerk_key = 1034 AND TRUNC (SYSDATE) IN (fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (8 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (6 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (4 * 7), fac.safe_to_date (prs_kenmerklink_waarde, 'dd-mm-yyyy') - (2 * 7))) o WHERE o.prs_link_key = pf.prs_perslid_key; -- Afschrift naar gebruiker NS Asito administratie -- na afmelden 'Graffiti verwijderen'-meldingen! CREATE OR REPLACE VIEW asdl_v_noti_administratie ( code, sender, receiver, text, key, xkey, xemail, xmobile ) AS SELECT sn.fac_srtnotificatie_code, NULL, 701 prs_perslid_key, -- NS Asito administratie REPLACE ( REPLACE ( REPLACE (sn.fac_srtnotificatie_oms, '##KEY##', m.mld_melding_key), '##DISC##', md.ins_discipline_omschrijving), '##STDMLD##', sm.mld_stdmelding_omschrijving), m.mld_melding_key, NULL, NULL, NULL FROM fac_tracking t, mld_melding m, mld_stdmelding sm, mld_discipline md, fac_srtnotificatie sn, fac_notificatie_job nj WHERE t.fac_srtnotificatie_key = 38 -- MLDAFM AND t.fac_tracking_refkey = m.mld_melding_key AND m.mld_stdmelding_key = 81 -- Graffiti verwijderen AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = md.ins_discipline_key AND sn.fac_srtnotificatie_code = 'CUST01' AND nj.fac_notificatie_job_view = 'ASDL_V_NOTI_ADMINISTRATIE' AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24); -- Notificatie naar de locatiebeheerder om de actie goed te keuren of af te wijzen. CREATE OR REPLACE VIEW asdl_v_noti_glas_locatiebeheer ( code, sender, receiver, text, key, xkey, xemail, xmobile ) AS SELECT sn.fac_srtnotificatie_code, NULL, fac.safe_to_number(mld_kenmerkmelding_waarde) prs_perslid_key, -- NS Asito administratie 'Glasbewassing op locatie ' || alg_locatie_omschrijving || ' is uitgevoerd.', m.mld_melding_key, NULL, NULL, NULL FROM fac_tracking t, mld_melding m, mld_stdmelding sm, fac_srtnotificatie sn, fac_notificatie_job nj, mld_kenmerkmelding km, mld_kenmerk k, alg_locatie l WHERE t.fac_srtnotificatie_key = 43 -- MLDNEW AND t.fac_tracking_refkey = m.mld_melding_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = 241 AND sn.fac_srtnotificatie_code = 'CUST02' AND k.mld_srtkenmerk_key = 121 -- locatiebeheerder AND km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = k.mld_kenmerk_key AND m.mld_alg_locatie_key = l.alg_locatie_key AND UPPER(nj.fac_notificatie_job_view) = 'ASDL_V_NOTI_GLAS_LOCATIEBEHEER' AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24); -- -- Notificatie naar de administratie om glasbewassing te factureren en de voortgang te volgen. CREATE OR REPLACE VIEW asdl_v_noti_glas_factuur ( code, sender, receiver, text, key, xkey, xemail, xmobile ) AS SELECT sn.fac_srtnotificatie_code, NULL, 2561 prs_perslid_key, -- NS Asito 2250 'Glasbewassing op locatie ' || alg_locatie_omschrijving || DECODE(t.fac_srtnotificatie_key, 37, ' kan gefactureerd worden.', 44, ' is afgekeurd.', 43, ' is aangemaakt.'), m.mld_melding_key, NULL, NULL, NULL FROM fac_tracking t, mld_melding m, mld_stdmelding sm, fac_srtnotificatie sn, fac_notificatie_job nj, alg_locatie l WHERE t.fac_srtnotificatie_key IN (37, 44, 43) -- MLDACP, MLDREJ, MLDNEW AND t.fac_tracking_refkey = m.mld_melding_key AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = 241 AND sn.fac_srtnotificatie_code = 'MLDMAI' AND m.mld_alg_locatie_key = l.alg_locatie_key AND UPPER(nj.fac_notificatie_job_view) = 'ASDL_V_NOTI_GLAS_FACTUUR' AND t.fac_tracking_datum > nj.fac_notificatie_job_nextrun - (nj.fac_notificatie_job_interval / 24); ------------------------------------------------------------------------------------------- -- -- Importsheets -- ------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE asdl_import_perslid (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_perslid; v_seq_of_columns VARCHAR (255); v_index_eigen NUMBER; v_index_partner NUMBER; v_code NUMBER; v_index NUMBER; v_voorletters VARCHAR2 (100); BEGIN v_seq_of_columns := '0;0;0;0;0;0;1;10;12;14;9;11;13;0;0;0;0;7;0;2;5;0;0;0;0;0;16;15;0;8;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46'; prs.import_perslid ( p_import_key, v_seq_of_columns, 'WERKS;PERNR;STELL;SHORT;STEXT;E_MAIL_P;E_MAIL_Z;ENAME;INITS;NACHN;NAME2;VORSW;VORS2;RUFNM;GBDAT;PERNR_OL%'); -- Even het personeelsnummer voorzien van de nodig voorloopnullen. Die Excel toch... -- en ook het nummer van de leidinggevende UPDATE fac_imp_perslid i SET prs_perslid_nr = LPAD(prs_perslid_nr, 8, '0'), prs_kenmerk1 = LPAD(prs_kenmerk1, 8, '0'), prs_perslid_oslogin = (SELECT MAX(prs_perslid_oslogin) FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL and p.prs_perslid_nr = LPAD(i.prs_perslid_nr, 8, '0')), prs_srtperslid_omschrijving = DECODE (SUBSTR(REPLACE(UPPER(prs_srtperslid_omschrijving), 'MEDEWERKER '),1,10), 'OBJECTLEID', 'Objectleider', 'PROJECTLEI', 'Objectleider', 'KWALITEIT ', 'Vestigingsmanager en ondersteuning', 'Schoonmaker'); -- koppel iedereen aan afdeling 2250 -- UPDATE fac_imp_perslid SET prs_afdeling_naam = '2250'; -- Zorg dat de juiste naam getoond wordt -- Codering naamgebruik FACILITOR: -- 0 - Gebruik eigennaam -- 1 - Gebruik partnernaam - eigennaam -- 2 - Gebruik partnernaam -- 3 - Gebruik eigennaam - partnernaam -- PRS_PERSLID_NAAMGEBRUIK_CODE -- Kenmerk4 is de volledige naam. FOR rec IN c LOOP v_index_eigen := INSTR (rec.prs_kenmerk4, rec.prs_perslid_naam); -- als de partnernaam leeg is wil dat hetzelfde zeggen als dat deze niet voorkomt in de display naam. IF rec.prs_perslid_partner_naam IS NULL THEN v_index_partner := 0; ELSE v_index_partner := INSTR (rec.prs_kenmerk4, rec.prs_perslid_partner_naam); END IF; IF v_index_eigen = 0 THEN v_code := 2; ELSE IF v_index_partner = 0 THEN v_code := 0; ELSE IF v_index_eigen < v_index_partner THEN v_code := 3; ELSE v_code := 1; END IF; END IF; END IF; UPDATE fac_imp_perslid SET prs_perslid_naamgebruik_code = v_code WHERE prs_perslid_nr = rec.prs_perslid_nr; -- even netjes de punten plaatsen in de voorletters. v_voorletters := NULL; FOR v_index IN 1 .. LENGTH (rec.prs_perslid_voorletters) LOOP v_voorletters := v_voorletters || SUBSTR (rec.prs_perslid_voorletters, v_index, 1) || '.'; END LOOP; UPDATE fac_imp_perslid SET prs_perslid_voorletters = SUBSTR (v_voorletters, 1, 15) WHERE prs_perslid_nr = rec.prs_perslid_nr; END LOOP; END asdl_import_perslid; / CREATE OR REPLACE PROCEDURE asdl_update_perslid (p_import_key IN NUMBER) IS CURSOR c_flex IS SELECT i.prs_perslid_key, prs_kenmerk3 leid_key, prs_kenmerk2 geboorte FROM fac_imp_perslid i; CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full 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 ORDER BY 2; v_perslid_key NUMBER; v_perslid_nr VARCHAR2 (100); v_kostenplaats_nr VARCHAR2 (100); v_count NUMBER; v_errorhint VARCHAR2 (1000); BEGIN SELECT count(*) INTO v_count FROM fac_imp_perslid; IF v_count > 0 THEN -- generic update prs.update_perslid (p_import_key, 'NR', NULL); FOR rec IN c_del LOOP BEGIN -- Niet gebruik maken van de standaard functie omdat we geen medewerkers -- hard willen verwijderen. -- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Controleer of er ACTUELE verplichtingen zijn SELECT COUNT ( * ) INTO v_count FROM prs_v_verplichting_keys vp WHERE vp.prs_perslid_key = rec.prs_perslid_key; IF v_count > 0 THEN UPDATE prs_perslid SET prs_perslid_naam = SUBSTR ('INACTIEF:' || prs_perslid_naam, 1, 60), prs_perslid_oslogin = NULL, prs_perslid_oslogin2 = NULL WHERE prs_perslid_key = rec.prs_perslid_key AND prs_perslid_naam NOT LIKE 'INACTIEF:%'; IF rec.prs_perslid_naam_full NOT LIKE '%INACTIEF%' THEN fac.trackaction ('PRSUPD', rec.prs_perslid_key, NULL, SYSDATE, 'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.' ); END IF; fac.imp_writelog ( p_import_key, 'I', 'Persoon als INACTIEF gemarkeerd of was al INACTIEF gemarkeerd.', 'Achternaam/persoonsnr: ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr); ELSE BEGIN UPDATE prs_perslid SET prs_perslid_verwijder = SYSDATE WHERE prs_perslid_key = rec.prs_perslid_key; fac.imp_writelog ( p_import_key, 'I', 'Persoon geïnactiveerd.', 'Achternaam/persoonsnr: ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr); fac.trackaction ('PRSDEL', rec.prs_perslid_key, NULL, SYSDATE, NULL ); EXCEPTION WHEN OTHERS THEN -- Kennelijk heeft de persoon toch ernstige verplichtingen v_errorhint := 'Persoon heeft nog (max. ' || TO_CHAR (v_count) || ') verplichtingen. Naam/persoonsnr: ' || rec.prs_perslid_naam_full || '/' || rec.prs_perslid_nr; fac.imp_writelog (p_import_key, 'I', 'Inactiveren persoon is niet gelukt', v_errorhint); END; END IF; END; END LOOP; UPDATE fac_imp_perslid i SET prs_kenmerk3 = (SELECT prs_perslid_key FROM prs_perslid p WHERE p.prs_perslid_verwijder IS NULL AND p.prs_perslid_nr = i.prs_kenmerk1); FOR rec IN c_flex LOOP BEGIN prs.upsertkenmerk (1061, rec.prs_perslid_key, rec.leid_key); prs.upsertkenmerk (1023, rec.prs_perslid_key, rec.geboorte); EXCEPTION WHEN OTHERS THEN NULL; -- Jammer END; END LOOP; END IF; END asdl_update_perslid; / CREATE OR REPLACE PROCEDURE asdl_import_wiezitwaar (p_import_key IN NUMBER) AS CURSOR c_cursor IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; v_newline VARCHAR2 (1000); v_aanduiding VARCHAR2 (1000); -- Import line v_field VARCHAR2 (100); -- 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_skipfield VARCHAR2 (100); -- De importvelden v_perslid_nr VARCHAR2 (100); v_locatie_code VARCHAR2 (100); v_locatie_omschrijving VARCHAR2(100); v_datum_str VARCHAR2 (100); v_perslid_key NUMBER; v_locatie_key NUMBER; v_datum DATE; v_ruimte_key NUMBER; v_werkplek_key NUMBER; v_perslidwerkplek_key NUMBER; v_max_werkplek_volgnr NUMBER; header_found BOOLEAN; BEGIN -- Init header_found := FALSE; v_fielddelimitor := ';'; FOR rec1 IN c_cursor LOOP BEGIN v_newline := rec1.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; fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); fac.imp_getfield (v_newline, v_fielddelimitor, v_perslid_nr); fac.imp_getfield (v_newline, v_fielddelimitor, v_skipfield); fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_code); fac.imp_getfield (v_newline, v_fielddelimitor, v_locatie_omschrijving); fac.imp_getfield (v_newline, v_fielddelimitor, v_datum_str); v_aanduiding := 'Persoon: ' || v_perslid_nr || ' - Locatie: ' || v_locatie_code; -- Skip until a valid header is found IF UPPER(v_perslid_nr) = 'PERNR' AND UPPER(v_locatie_code) = 'STRNO' AND UPPER(v_datum_str) = 'DATUM' THEN -- Sla de kopregel over. header_found := TRUE; ELSIF (header_found AND v_perslid_nr IS NOT NULL) THEN v_errorhint := 'Datum omzetten naar intern formaat'; v_datum := to_date(v_datum_str, 'dd-mm-yyyy'); -- personeelsnummer voorzien van voorloopnullen v_perslid_nr := LPAD(v_perslid_nr, 8, '0'); v_errorhint := 'Vind de juiste persoon'; SELECT prs_perslid_key INTO v_perslid_key FROM prs_perslid p WHERE prs_perslid_verwijder IS NULL AND prs_perslid_nr = v_perslid_nr; v_errorhint := 'Vind de juiste locatie (op postcode)'; BEGIN SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie WHERE alg_locatie_verwijder IS NULL AND REPLACE(alg_locatie_code, ' ') = SUBSTR(v_locatie_code, 1, 6); EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Vind de juiste locatie (op omschrijving)'; SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie WHERE alg_locatie_verwijder IS NULL AND UPPER(v_locatie_omschrijving) like '%' || UPPER(alg_locatie_omschrijving); END; v_errorhint := 'Vind de juiste ruimte'; SELECT MIN(alg_ruimte_key) INTO v_ruimte_key FROM alg_v_ruimte_gegevens rg WHERE alg_locatie_key = v_locatie_key; BEGIN v_errorhint := 'Check of er al een werkplek voor deze persoon bestaat.'; SELECT wp.prs_werkplek_key, prs_perslidwerkplek_key INTO v_werkplek_key, v_perslidwerkplek_key FROM prs_werkplek wp, prs_perslidwerkplek pwp WHERE wp.prs_werkplek_key = pwp.prs_werkplek_key AND wp.prs_alg_ruimte_key = v_ruimte_key AND pwp.prs_perslid_key = v_perslid_key AND prs_werkplek_type = 1 -- we gebruikten type flex om conflict met echter wp te voorkomen. AND prs_werkplek_virtueel = 1; v_errorhint := 'Pas de datum aan bij de werkplek'; UPDATE prs_werkplek SET prs_werkplek_getekend = v_datum WHERE prs_werkplek_key = v_werkplek_key; EXCEPTION WHEN NO_DATA_FOUND THEN v_errorhint := 'Bepaal max werkplekvolgnummer'; SELECT MAX(prs_werkplek_volgnr) INTO v_max_werkplek_volgnr FROM prs_werkplek WHERE prs_alg_ruimte_key = v_ruimte_key; v_errorhint := 'Toevoegen werkplek'; INSERT INTO prs_werkplek ( prs_alg_ruimte_key, prs_werkplek_volgnr, prs_werkplek_omschrijving, prs_werkplek_getekend, prs_werkplek_type, prs_werkplek_virtueel) VALUES ( v_ruimte_key, COALESCE(v_max_werkplek_volgnr, 0) + 1, v_perslid_nr, v_datum, 1, 1) RETURNING prs_werkplek_key INTO v_werkplek_key; v_errorhint := 'Toevoegen perslidwerkplek'; INSERT INTO prs_perslidwerkplek ( prs_werkplek_key, prs_perslid_key) VALUES ( v_werkplek_key, v_perslid_key); END; 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_aanduiding || ' - ' || v_errorhint); END; END LOOP; IF NOT header_found THEN fac.imp_writelog (p_import_key, 'E', 'Geen geldige header aangetroffen', 'Bestand is geen geldig ruimtesoort importbestand.' ); END IF; -- Werkplekken ouder dan 18 maanden gaan we weggooien. DELETE prs_perslidwerkplek pwp WHERE pwp.prs_werkplek_key IN (SELECT prs_werkplek_key FROM prs_werkplek WHERE ADD_MONTHS ( COALESCE (prs_werkplek_getekend, SYSDATE), 18) < SYSDATE); DELETE prs_werkplek wp WHERE ADD_MONTHS ( COALESCE (prs_werkplek_getekend, SYSDATE), 18) < SYSDATE; 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 asdl_update_wiezitwaar (p_import_key IN NUMBER) AS BEGIN fac.imp_writelog (p_import_key, 'I', 'Verwerk hoeft bij WieZitWaar import niet uitgevoerd te worden', NULL); END; / -- import van template met schoonmaakgegevens CREATE OR REPLACE PROCEDURE asdl_import_ins (p_import_key IN NUMBER) AS CURSOR c IS SELECT alg_locatie_code, ins_deel_omschrijving FROM fac_imp_ins GROUP BY alg_locatie_code, ins_deel_omschrijving HAVING COUNT (ins_deel_omschrijving) > 1; CURSOR c2 ( p_locatie_code VARCHAR2, p_deel_omschrijving VARCHAR2) IS SELECT alg_locatie_code, ins_deel_omschrijving, ins_kenmerkwaarde20 FROM fac_imp_ins WHERE alg_locatie_code = p_locatie_code AND ins_deel_omschrijving = p_deel_omschrijving; v_count NUMBER; BEGIN fac_import_ins(p_import_key); -- vul een volgnummer in kenmerk20 UPDATE fac_imp_ins SET ins_kenmerkwaarde20 = ROWNUM; -- markeer objecten die niet uniek zijn met * FOR rec IN c LOOP v_count := 1; FOR rec2 IN c2 (rec.alg_locatie_code, rec.ins_deel_omschrijving) LOOP UPDATE fac_imp_ins SET ins_deel_omschrijving = ins_deel_omschrijving || '*' || v_count WHERE ins_kenmerkwaarde20 = rec2.ins_kenmerkwaarde20; v_count := v_count + 1; END LOOP; END LOOP; -- soms wordt een , als decimaal scheidingsteken opgegeven. Dat passen we even aan. UPDATE fac_imp_ins SET ins_kenmerkwaarde1 = REPLACE(ins_kenmerkwaarde1, ',', '.'); COMMIT; END; / CREATE OR REPLACE PROCEDURE asdl_update_ins (p_import_key IN NUMBER) AS CURSOR c IS SELECT * FROM fac_imp_ins; CURSOR c_insp IS SELECT DISTINCT sdg.* FROM ins_v_srtdeel_gegevens sdg, fac_imp_ins i WHERE UPPER (sdg.ins_discipline_omschrijving) = UPPER (TRIM (i.ins_discipline_omschrijving)) AND sdg.ins_srtgroep_upper = UPPER (TRIM (i.ins_srtgroep_omschrijving)) AND UPPER (sdg.ins_srtdeel_code) = UPPER (TRIM (i.ins_srtdeel_code)); v_errormsg VARCHAR (200); v_aanduiding VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_count NUMBER; v_regio_key alg_regio.alg_regio_key%TYPE; v_district_key alg_district.alg_district_key%TYPE; v_locatie_key alg_locatie.alg_locatie_key%TYPE; v_gebouw_key alg_gebouw.alg_gebouw_key%TYPE; v_verdieping_key alg_verdieping.alg_verdieping_key%TYPE; v_ruimte_key alg_ruimte.alg_ruimte_key%TYPE; v_locatie_code alg_locatie.alg_locatie_code%TYPE; v_regio alg_regio.alg_regio_omschrijving%TYPE; v_district alg_district.alg_district_omschrijving%TYPE; v_locatie alg_locatie.alg_locatie_omschrijving%TYPE; v_srtcontrole_key ins_srtcontrole.ins_srtcontrole_key%TYPE; v_srtcontroledl_xcp_key ins_srtcontroledl_xcp.ins_srtcontroledl_xcp_key%TYPE; v_deel_key ins_deel.ins_deel_key%TYPE; v_srtdeel_key ins_srtdeel.ins_srtdeel_key%TYPE; v_kenmerk_key ins_kenmerk.ins_kenmerk_key%TYPE; BEGIN SELECT COUNT ( * ) INTO v_count FROM imp_log WHERE fac_import_key = p_import_key AND imp_log_status = 'E'; IF v_count > 0 THEN RETURN; END IF; FOR rec IN c LOOP BEGIN v_regio := SUBSTR (rec.ins_kenmerkwaarde2, 1, 30); v_district := SUBSTR (rec.ins_kenmerkwaarde3, 1, 30); v_locatie := SUBSTR (rec.ins_kenmerkwaarde4, 1, 60); v_locatie_code := rec.alg_locatie_code; v_aanduiding := 'Locatiecode: ' || v_locatie_code || ' - Locatie omschrijving: ' || v_locatie; SELECT alg_regio_key INTO v_regio_key FROM alg_regio WHERE alg_regio_upper = UPPER (TRIM (v_regio)) AND alg_regio_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_regio (alg_regio_omschrijving) VALUES (TRIM (v_regio)) RETURNING alg_regio_key INTO v_regio_key; END; IF v_regio_key IS NOT NULL THEN BEGIN SELECT alg_district_key INTO v_district_key FROM alg_district WHERE alg_district_upper = UPPER (TRIM (v_district)) AND alg_regio_key = v_regio_key AND alg_district_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_district (alg_regio_key, alg_district_omschrijving) VALUES (v_regio_key, TRIM (v_district)) RETURNING alg_district_key INTO v_district_key; END; END IF; IF v_district_key IS NOT NULL THEN BEGIN SELECT alg_locatie_key INTO v_locatie_key FROM alg_locatie WHERE UPPER (alg_locatie_code) = UPPER (TRIM (v_locatie_code)) AND alg_district_key = v_district_key AND alg_locatie_verwijder IS NULL; BEGIN UPDATE alg_locatie SET alg_locatie_omschrijving = v_locatie WHERE alg_locatie_key = v_locatie_key; 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; EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN INSERT INTO alg_locatie (alg_district_key, alg_locatie_code, alg_locatie_omschrijving) VALUES (v_district_key, TRIM (v_locatie_code), TRIM (v_locatie)) RETURNING alg_locatie_key INTO v_locatie_key; EXCEPTION WHEN OTHERS THEN v_locatie_key := -1; 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; END; END IF; IF v_locatie_key <> -1 THEN BEGIN SELECT alg_gebouw_key INTO v_gebouw_key FROM alg_gebouw WHERE alg_locatie_key = v_locatie_key AND alg_gebouw_naam = '_' AND alg_gebouw_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_gebouw (alg_locatie_key, alg_gebouw_naam, alg_gebouw_code) VALUES (v_locatie_key, '_', '_') RETURNING alg_gebouw_key INTO v_gebouw_key; END; BEGIN SELECT alg_verdieping_key INTO v_verdieping_key FROM alg_verdieping WHERE alg_gebouw_key = v_gebouw_key AND alg_verdieping_volgnr = 1 AND alg_verdieping_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_omschrijving, alg_verdieping_volgnr, alg_verdieping_code) VALUES (v_gebouw_key, 'Verdieping 1', 1, '_') RETURNING alg_verdieping_key INTO v_verdieping_key; END; BEGIN SELECT alg_ruimte_key INTO v_ruimte_key FROM alg_ruimte WHERE alg_verdieping_key = v_verdieping_key AND alg_ruimte_nr = '_' AND alg_ruimte_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO alg_ruimte (alg_verdieping_key, alg_srtruimte_key, alg_ruimte_nr, alg_ruimte_omschrijving) VALUES (v_verdieping_key, 1, '_', '_') RETURNING alg_ruimte_key INTO v_ruimte_key; END; END IF; END LOOP; fac_update_ins (p_import_key); FOR rec IN c_insp LOOP -- pas de binding van de objecttypes aan zodat we alleen aan ruimten kunnen koppelen. UPDATE ins_srtdeel sd SET ins_srtdeel_binding = 1 -- alleen aan ruimte te koppelen WHERE ins_srtdeel_key = rec.ins_srtdeel_key; BEGIN SELECT ins_srtcontrole_key INTO v_srtcontrole_key FROM ins_srtcontrole sc WHERE sc.ins_srtcontrole_niveau = 'S' AND sc.ins_srtinstallatie_key = rec.ins_srtdeel_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtcontrole (ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_mode, ctr_discipline_key) VALUES (rec.ins_srtdeel_key, 'S', rec.ins_srtdeel_omschrijving, 0, 0, 0, 181) RETURNING ins_srtcontrole_key INTO v_srtcontrole_key; END; BEGIN -- Kijk of het kenmerk bijlage al bestaat SELECT ins_kenmerk_key INTO v_kenmerk_key FROM ins_kenmerk WHERE ins_srtkenmerk_key = 21 -- bijlage AND ins_srtinstallatie_key = v_srtcontrole_key AND ins_kenmerk_niveau = 'C' AND ins_kenmerk_bewerkniveau = 'D' AND ins_kenmerk_verwijder IS NULL; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_groep, ins_kenmerk_volgnummer) VALUES (21, v_srtcontrole_key, 'C', 'D', 0, 100); END; END LOOP; FOR rec IN c LOOP BEGIN SELECT sdg.ins_deel_key, sdg.ins_srtdeel_key INTO v_deel_key, v_srtdeel_key FROM ins_v_deel_gegevens sdg, alg_locatie l, ins_srtdeel sd WHERE sdg.alg_locatie_key = l.alg_locatie_key AND sdg.ins_srtdeel_key = sd.ins_srtdeel_key AND UPPER (sdg.ins_discipline_omschrijving) = UPPER (TRIM (rec.ins_discipline_omschrijving)) AND sdg.ins_srtgroep_upper = UPPER (TRIM (rec.ins_srtgroep_omschrijving)) AND sd.ins_srtdeel_code_upper = UPPER (TRIM (rec.ins_srtdeel_code)) AND UPPER(l.alg_locatie_code) = UPPER(rec.alg_locatie_code) AND UPPER (sdg.ins_deel_omschrijving) = UPPER (TRIM (rec.ins_deel_omschrijving)); BEGIN SELECT ins_srtcontrole_key INTO v_srtcontrole_key FROM ins_srtcontrole sc WHERE sc.ins_srtcontrole_niveau = 'S' AND sc.ins_srtinstallatie_key = v_srtdeel_key AND UPPER (sc.ins_srtcontrole_omschrijving) = UPPER (TRIM (rec.ins_srtdeel_omschrijving)); SELECT ins_srtcontroledl_xcp_key INTO v_srtcontroledl_xcp_key FROM ins_srtcontroledl_xcp WHERE ins_deel_key = v_deel_key AND ins_srtcontrole_key = v_srtcontrole_key; UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_bits = asdl.get_bits_value (rec.ins_kenmerkwaarde11, rec.ins_kenmerkwaarde13, rec.ins_kenmerkwaarde12), ins_srtcontroledl_xcp_periode = rec.ins_kenmerkwaarde10, ins_srtcontroledl_xcp_eenheid = rec.ins_kenmerkwaarde11, ins_srtcontroledl_xcp_groep = rec.ins_kenmerkwaarde7 WHERE ins_srtcontroledl_xcp_key = v_srtcontroledl_xcp_key; EXCEPTION WHEN NO_DATA_FOUND THEN INSERT INTO ins_srtcontroledl_xcp (ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_bits, ins_srtcontroledl_xcp_periode, ins_srtcontroledl_xcp_eenheid, ins_srtcontroledl_xcp_groep) VALUES (v_deel_key, v_srtcontrole_key, asdl.get_bits_value (rec.ins_kenmerkwaarde11, rec.ins_kenmerkwaarde13, rec.ins_kenmerkwaarde12), rec.ins_kenmerkwaarde10, rec.ins_kenmerkwaarde11, rec.ins_kenmerkwaarde7); END; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'E', 'Niet gelukt om schoonmaakactie toe te voegen', 'alg_locatie_code: ' || rec.alg_locatie_code || ' - ' || 'ins_srtdeel_code: ' || rec.ins_srtdeel_code || ' - ' || 'ins_srtgroep_omschrijving: ' || rec.ins_srtgroep_omschrijving || ' - ' || 'ins_discipline_omschrijving: ' || rec.ins_discipline_omschrijving); END; END LOOP; COMMIT; END; / -- -- Export FREEZE (iedere eerste dag van de maand -- CREATE OR REPLACE PROCEDURE asdl_export_schoonmaak_freeze ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS BEGIN INSERT INTO asdl_schoonmaak_freeze (freeze_datum, freeze_q, ins_discipline_omschrijving, ins_srtgroep_omschrijving, ins_srtdeel_code, ins_srtdeel_omschrijving, ins_deel_omschrijving, alg_locatie_code, alg_locatie_omschrijving, perceel, frequentie, oppervlakte, vloersoort, dagen, route, uitvoeringsmoment, afwijkingen, ins_deel_key) SELECT SYSDATE, TO_CHAR(sysdate, 'YYYYQ'), disciplineomschrijving, groepsoortomschrijving, objectsoortcode, objectsoortomschrijving, objectomschrijving, locatiecode, locatie, district, frequentie, oppervlakte, vloersoort, dagen, route, uitvoeringsmoment, afwijkingen, ins_deel_key FROM asdl_v_rap_importsheet WHERE disciplineomschrijving LIKE '%NS%'; COMMIT; END; / CREATE OR REPLACE PROCEDURE asdl_export_daily_task ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS CURSOR c IS SELECT m.mld_melding_key FROM mld_melding m, mld_stdmelding sm WHERE mld_melding_status = 4 -- geaccepteerd dus in behandeing AND m.mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = 241; BEGIN FOR rec in c LOOP BEGIN -- nu de status op afgemeld zetten. mld.setmeldingstatus(rec.mld_melding_key, 5, NULL); END; END LOOP; BEGIN ASDL_EXPORT_GLASBON_MELDING('GLASBON_MELDING',SYSDATE,'-1',''); END; END; / CREATE OR REPLACE VIEW asdl_v_rap_locatie_mismatch(alg_locatie_code, alg_locatie_omschrijving) AS SELECT DISTINCT locatie, locatieoms FROM ( SELECT SUBSTR(fac_imp_file_line, INSTR(fac_imp_file_line, ';', 1, 3)+1, INSTR(fac_imp_file_line, ';', 1, 4)- INSTR(fac_imp_file_line, ';', 1, 3)-1) locatie, SUBSTR(fac_imp_file_line, INSTR(fac_imp_file_line, ';', 1, 4)+1, INSTR(fac_imp_file_line, ';', 1, 5)- INSTR(fac_imp_file_line, ';', 1, 4)-1) locatieoms FROM fac_imp_file f, fac_import i WHERE f.fac_import_key = i.fac_import_key AND fac_import_app_key = 81) im WHERE SUBSTR(im.locatie, 1, 6) NOT IN (SELECT alg_locatie_code FROM alg_locatie WHERE alg_locatie_verwijder IS NULL); CREATE OR REPLACE VIEW asdl_v_rap_mi_glas ( mld_melding_key, prioriteit, nummer, datum, tijd, district, plaats, onderwerp, vakgroep, melding, omschrijving, afhandeling, behandelaar, melder, status, datum_afgemeld_afgewezen, tijd_afgemeld_afgewezen, naam_afmelden_afwijzen, datum_geaccepteerd, tijd_geaccepteerd, naam_accepteren, notitie, organisatie, kostenplaats, stationsmanager, uitvoerdatum, geplande_uitvoeringsweek, uitvoerder ) AS SELECT mld_melding_key, 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')) prioriteit, sd.ins_srtdiscipline_prefix || m.mld_melding_key nummer, mld_melding_datum datum, mld_melding_datum tijd, alg_district_omschrijving district, alg_locatie_code || ' (' || alg_locatie_omschrijving || ')' plaats, mld_melding_onderwerp onderwerp, ins_discipline_omschrijving vakgroep, mld_stdmelding_omschrijving melding, mld_melding_omschrijving omschrijving, mld_melding_opmerking afhandeling, pfb.prs_perslid_naam_full behandelaar, pfm.prs_perslid_naam_full melder, st.mld_statuses_omschrijving status, mafm.fac_tracking_datum, mafm.fac_tracking_datum, mafm.prs_perslid_naam_full, (SELECT MAX (fac_tracking_datum) FROM fac_tracking ft WHERE fac_srtnotificatie_key = 37 AND m.mld_melding_key = ft.fac_tracking_refkey) accept_datum, (SELECT MAX (fac_tracking_datum) FROM fac_tracking ft WHERE fac_srtnotificatie_key = 37 AND m.mld_melding_key = ft.fac_tracking_refkey) accept_datum, (SELECT prs_perslid_naam_full FROM fac_tracking ft, prs_v_perslid_fullnames_all p WHERE fac_srtnotificatie_key = 37 AND p.prs_perslid_key = ft.prs_perslid_key AND m.mld_melding_key = ft.fac_tracking_refkey AND ft.fac_tracking_key = ( SELECT MAX (fac_tracking_key) FROM fac_tracking WHERE fac_srtnotificatie_key = 37 AND ft.fac_tracking_refkey = m.mld_melding_key GROUP BY mld_melding_key)) accepteur, (SELECT mld_melding_note_omschrijving FROM mld_melding_note mn WHERE mn.mld_melding_key = m.mld_melding_key AND mn.mld_melding_note_key = (SELECT MAX (mld_melding_note_key) FROM mld_melding_note mn WHERE mn.mld_melding_key = m.mld_melding_key)) notitie, (SELECT prs_afdeling_naam FROM prs_v_afdeling d WHERE p.prs_afdeling_key = d.prs_afdeling_key) organisatie, (SELECT prs_kostenplaats_omschrijving FROM prs_kostenplaats k WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key) kostenplaats, (SELECT prs_perslid_naam_full FROM mld_kenmerkmelding mk, mld_kenmerk k, asdl_v_list_locatiebeheerder lb WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 121 AND mld_kenmerkmelding_waarde = TO_CHAR (prs_perslid_key) AND mk.mld_melding_key = m.mld_melding_key) stationsmanager, (SELECT TO_DATE (mk.mld_kenmerkmelding_waarde, 'DD-MM-YYYY') FROM mld_kenmerkmelding mk, mld_kenmerk k WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 122 AND m.mld_melding_key = mk.mld_melding_key) uitvoerdatum, (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 161 AND m.mld_melding_key = mk.mld_melding_key) geplande_uitvoeringsweek, CASE WHEN (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 201 AND m.mld_melding_key = mk.mld_melding_key) IS NOT NULL THEN (SELECT f.fac_usrdata_omschr FROM fac_usrdata f, (SELECT mk.mld_kenmerkmelding_waarde waarde, mk.mld_melding_key sleutel FROM mld_kenmerkmelding mk, mld_kenmerk k WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 201) sub WHERE f.fac_usrdata_key = fac.safe_to_number(sub.waarde) AND m.mld_melding_key = sub.sleutel) ELSE (SELECT mld_kenmerkmelding_waarde FROM mld_kenmerkmelding mk, mld_kenmerk k WHERE mk.mld_kenmerk_key = k.mld_kenmerk_key AND k.mld_srtkenmerk_key = 141 AND m.mld_melding_key = mk.mld_melding_key) END uitvoerder FROM mld_melding m, mld_stdmelding std, mld_discipline md, ins_srtdiscipline sd, alg_locatie l, alg_district d, prs_v_perslid_fullnames_all pfb, prs_v_perslid_fullnames_all pfm, mld_statuses st, prs_perslid p, (SELECT fac_tracking_datum, fac_tracking_refkey, prs_perslid_naam_full FROM fac_tracking ft, prs_v_perslid_fullnames_all pft WHERE fac_srtnotificatie_key IN (38, 44) AND ft.prs_perslid_key = pft.prs_perslid_key) mafm WHERE m.mld_stdmelding_key = std.mld_stdmelding_key AND std.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_melding_behandelaar_key = pfb.prs_perslid_key(+) AND m.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_key = pfm.prs_perslid_key AND st.mld_statuses_key = m.mld_melding_status AND m.mld_melding_key = mafm.fac_tracking_refkey(+) AND sd.ins_srtdiscipline_key = 141; CREATE OR REPLACE PROCEDURE ASDL_IMPORT_GLASBON (p_import_key IN NUMBER) IS c_fielddelimitor VARCHAR2 (1) := ';'; v_newline VARCHAR2 (1000); v_header VARCHAR2 (1000); v_aanduiding VARCHAR2 (200); v_errorhint VARCHAR2 (1000); v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); header_is_valid NUMBER; v_ongeldig NUMBER (1); v_count_tot NUMBER (10); v_count_import NUMBER (10); v_count NUMBER :=1; v_count_melding NUMBER :=1; v_count_alglocatie NUMBER :=1; v_count_weeknr NUMBER :=1; v_count_stationsmanager NUMBER :=1; v_count_uitvoerder NUMBER :=1; -- De importvelden: v_fac_import_key VARCHAR (256); v_fac_import_index VARCHAR (256); v_mld_stdmelding_key VARCHAR (256); v_mld_stdmelding_oms VARCHAR (256); v_alg_locatie_code VARCHAR (256); v_alg_locatie_oms VARCHAR (256); v_stationsmanager_key VARCHAR (256); v_stationsmanager VARCHAR (256); v_uitvoerjaar VARCHAR (256); v_uitvoerweek VARCHAR (256); v_uitvoermaand VARCHAR (256); v_uitvoerder VARCHAR (256); v_uitvoerdernaam VARCHAR(256); v_serviceordernr VARCHAR (256); v_onderwerp VARCHAR (256); v_omschrijving VARCHAR (256); v_datum_melding VARCHAR (256); v_meldingnr VARCHAR (256); CURSOR c IS SELECT * FROM fac_imp_file WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; CURSOR l IS SELECT * FROM alg_locatie; BEGIN DELETE FROM asdl_imp_glas; COMMIT; v_count_tot := 0; v_count_import := 0; header_is_valid := 0; FOR rec IN c LOOP BEGIN v_newline := rec.fac_imp_file_line; v_fac_import_key := rec.fac_import_key; v_fac_import_index := rec.fac_imp_file_index; v_aanduiding := ''; v_errorhint := 'Fout bij opvragen te importeren rij'; v_ongeldig := 0; v_count := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_key); -- Soort melding key fac.imp_getfield (v_newline, c_fielddelimitor, v_mld_stdmelding_oms); -- Soort melding omschrijving fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_code); -- Locatie key fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_locatie_oms); -- Locatieomschrijving fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager_key); -- Key Stationsmanager fac.imp_getfield (v_newline, c_fielddelimitor, v_stationsmanager); -- Stationsmanager fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerjaar); -- Uitvoerjaar fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerweek); -- Uitvoerweek fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerder); -- Uitvoerder fac.imp_getfield (v_newline, c_fielddelimitor, v_uitvoerdernaam); -- Uitvoerdernaam fac.imp_getfield (v_newline, c_fielddelimitor, v_serviceordernr); -- Nummer serviceorder fac.imp_getfield (v_newline, c_fielddelimitor, v_onderwerp); -- Onderwerp fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving); -- Omschrijving v_aanduiding := '[' || v_mld_stdmelding_key || '|' || v_alg_locatie_code || '|' || v_uitvoerjaar || '|' || v_uitvoerweek || '] '; v_count_tot := v_count_tot + 1; -- 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_mld_stdmelding_key) = 'MELDING' AND UPPER (v_mld_stdmelding_oms) = 'MELDINGOMSCHRIJVING' AND UPPER (v_alg_locatie_code) = 'LOCATIECODE' AND UPPER (v_alg_locatie_oms) = 'LOCATIE' AND UPPER (v_stationsmanager_key) = 'SMNR' AND UPPER (v_stationsmanager) = 'STATIONSMANAGER' AND UPPER (v_uitvoerjaar) = 'UITVOERJAAR' AND UPPER (v_uitvoerweek) = 'UITVOERWEEK' AND UPPER (v_uitvoerder) = 'UITVOERDER' AND UPPER (v_uitvoerdernaam) = 'UITVOERDERNAAM' AND UPPER (v_serviceordernr) = 'SERVICEORDERNUMMER' --Lengte max 50 AND UPPER (v_onderwerp) = 'ONDERWERP' --Lengte max 80 AND UPPER (v_omschrijving) = 'OMSCHRIJVING' --Lengte max 4000 THEN header_is_valid := 1; END IF; ELSE --Controle of de opgegeven stdmelding wel aanwezig is SELECT COUNT ( * ) INTO v_count_melding FROM mld_stdmelding sm WHERE v_mld_stdmelding_key = sm.mld_stdmelding_key AND sm.mld_ins_discipline_key = 241; -- Vakgroep GL-Glasbewassing IF v_count_melding = 0 THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Meldingnummer bestaat niet', 'Melding wordt niet ingelezen!'); END IF; --Controle of de opgegeven locatie (postcode) wel aanwezig is SELECT COUNT ( * ) INTO v_count_alglocatie FROM alg_locatie l WHERE l.alg_locatie_postcode = v_alg_locatie_code; IF v_count_alglocatie = 0 THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Locatie (postcode) bestaat niet', 'Melding wordt niet ingelezen!'); END IF; --Controle of de opgegeven stationsmanager wel aanwezig is SELECT COUNT ( * ) INTO v_count_stationsmanager FROM asdl_v_list_locatiebeheerder lb WHERE lb.prs_perslid_key = v_stationsmanager_key AND lb.prs_perslid_verwijder IS NULL; IF v_count_stationsmanager = 0 THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Stationsmanager bestaat niet', 'Melding wordt niet ingelezen!'); END IF; --Controle of de opgegeven uitvoerder wel aanwezig is SELECT COUNT ( * ) INTO v_count_uitvoerder FROM fac_usrdata uv WHERE uv.fac_usrdata_key = v_uitvoerder AND uv.fac_usrtab_key = 21 AND uv.fac_usrdata_verwijder IS NULL; IF v_count_uitvoerder = 0 THEN v_ongeldig := 1; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Uitvoerder bestaat niet', 'Melding wordt niet ingelezen!'); END IF; --Controle of de melding al is aangemaakt. --IF TO_NUMBER(TO_CHAR(v_uitvoerjaar)||TO_CHAR(v_uitvoerweek)) <= TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')||TO_CHAR(SYSDATE, 'WW'))+1 --THEN v_ongeldig := 1; -- fac.imp_writelog ( -- p_import_key, -- 'W', -- v_aanduiding || 'Melding in volgende of voorgaande weken', -- 'Melding wordt niet ingelezen!'); --END IF; IF LENGTH (v_serviceordernr) > 50 THEN v_serviceordernr := SUBSTR (v_serviceordernr, 1, 50); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Nummer serviceorder te lang', 'Nummer serviceorder wordt afgebroken tot [' || v_serviceordernr || ']'); END IF; IF LENGTH (v_onderwerp) > 80 THEN v_onderwerp := SUBSTR (v_onderwerp, 1, 80); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Onderwerp te lang', 'Onderwerp wordt afgebroken tot [' || v_onderwerp || ']'); END IF; IF LENGTH (v_omschrijving) > 4000 THEN v_onderwerp := SUBSTR (v_omschrijving, 1, 4000); fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Omschrijving te lang', 'Omschrijving wordt afgebroken tot [' || v_omschrijving || ']'); END IF; -- Insert geformatteerde import record IF header_is_valid = 1 AND v_ongeldig = 0 THEN BEGIN v_errorhint := 'Fout bij toevoegen regel aan importtabel ASDL_IMP_GLAS'; INSERT INTO ASDL_IMP_GLAS ( fac_import_key, fac_import_index, fac_import_datum, mld_stdmelding_key, mld_stdmelding_oms, alg_locatie_code, alg_locatie_oms, stationsmanager_key, stationsmanager, uitvoerdatum, uitvoerweek, uitvoermaand, uitvoerjaar, uitvoerder, serviceordernr, onderwerp, omschrijving) VALUES ( v_fac_import_key, v_fac_import_index, SYSDATE, TO_NUMBER(v_mld_stdmelding_key), v_mld_stdmelding_oms, v_alg_locatie_code, v_alg_locatie_oms, TO_NUMBER(v_stationsmanager_key), v_stationsmanager, NEXT_DAY(TO_DATE('04-jan-' || v_uitvoerjaar, 'dd-mm-yyyy' ) + (v_uitvoerweek-2)*7, 'maan'), v_uitvoerweek, v_uitvoermaand, v_uitvoerjaar, TO_NUMBER(v_uitvoerder), v_serviceordernr, v_onderwerp, v_omschrijving); COMMIT; v_count_import := v_count_import + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog ( p_import_key, 'W', v_aanduiding || v_errormsg, 'Ingelezen regel kan niet worden weggeschreven!'); COMMIT; END; END IF; END IF; END; END LOOP; IF (header_is_valid = 0) THEN fac.imp_writelog (p_import_key, 'E', 'Ongeldig importbestand', 'Geen header of header niet volgens specificatie!'); ELSE fac.imp_writelog ( p_import_key, 'S', 'GLASBON/#ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'GLASBON/#ongeldige niet ingelezen importregels incl header: ' || TO_CHAR (v_count_tot - v_count_import), '' ); END IF; COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inleesproces GLASBON afgebroken!'); END ASDL_IMPORT_GLASBON; / CREATE OR REPLACE PROCEDURE ASDL_UPDATE_GLASBON (p_import_key IN NUMBER) IS BEGIN DELETE FROM asdl_imp_glas2 WHERE asdl_imp_glas2.mld_melding_key IS NULL; COMMIT; INSERT INTO asdl_imp_glas2 ( fac_import_key, fac_import_index, fac_import_datum, mld_stdmelding_key, mld_stdmelding_oms, alg_locatie_key, alg_locatie_oms, stationsmanager_key, stationsmanager, uitvoerdatum, uitvoerweek, uitvoermaand, uitvoerjaar, uitvoerder, serviceordernr, onderwerp, omschrijving, mld_melding_key) SELECT fac_import_key, fac_import_index, fac_import_datum, mld_stdmelding_key, mld_stdmelding_oms, l.alg_locatie_key, alg_locatie_oms, stationsmanager_key, stationsmanager, uitvoerdatum, uitvoerweek, uitvoermaand, uitvoerjaar, uitvoerder, serviceordernr, onderwerp, omschrijving, mld_melding_key FROM asdl_imp_glas imp, alg_locatie l WHERE l.alg_locatie_code = imp.alg_locatie_code; END; / CREATE OR REPLACE PROCEDURE ASDL_EXPORT_GLASBON_MELDING ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS CURSOR cmld IS SELECT * FROM asdl_imp_glas2 WHERE TRUNC(TO_DATE(uitvoerdatum)) <= SYSDATE+7 AND mld_melding_key IS NULL; v_fac_import_key NUMBER(10); v_fac_import_index NUMBER(10); v_fac_import_datum DATE; v_mld_melding_key NUMBER(10); v_mld_stdmelding_key NUMBER(10); v_mld_melding_datum DATE; v_mld_error VARCHAR(256); BEGIN FOR recmld IN cmld LOOP BEGIN INSERT INTO mld_melding (prs_perslid_key, mld_melding_module, mld_meldbron_key, mld_alg_locatie_key, mld_melding_datum, mld_melding_omschrijving, mld_stdmelding_key, mld_melding_einddatum, mld_melding_status, mld_melding_spoed, mld_melding_onderwerp) VALUES (3, 'MLD', 6, --Bron = Systeem recmld.alg_locatie_key, SYSDATE, recmld.omschrijving, recmld.mld_stdmelding_key, SYSDATE + 7, 2, --Status = Nieuw 3, --Prioriteit = Normaal recmld.onderwerp) RETURNING mld_melding_key, mld_stdmelding_key, mld_melding_datum INTO v_mld_melding_key, v_mld_stdmelding_key, v_mld_melding_datum; INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, recmld.stationsmanager_key -- Waarde Stationsmanager uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 121; -- Kenmerksoort Stationsmanager INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, TO_CHAR(recmld.uitvoerdatum,'DD-MM-YYYY') -- Waarde Uitvoerdatum uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 122; -- Kenmerksoort Uitvoerdatum INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, recmld.uitvoerweek -- Waarde Uitvoerweek uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 161; -- Kenmerksoort Uitvoerweek INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, recmld.serviceordernr -- Waarde Nummer serviceorder uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 181; -- Kenmerksoort Nummer serviceorder INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, recmld.uitvoerder -- Waarde Uitvoerder uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 201; -- Kenmerksoort Uitvoerder INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde) SELECT v_mld_melding_key, k.mld_kenmerk_key, recmld.uitvoermaand -- Waarde Uitvoeringsmaand uit import-tabel FROM mld_stdmelding s, mld_kenmerk k, mld_srtkenmerk sk WHERE k.mld_stdmelding_key = s.mld_stdmelding_key AND k.mld_stdmelding_key = v_mld_stdmelding_key AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key AND s.mld_ins_discipline_key = 241 -- Discipline Glasbewassing AND mld_kenmerk_verwijder IS NULL AND sk.mld_srtkenmerk_key = 221; -- Kenmerksoort Uitvoeringsmaand UPDATE asdl_imp_glas imp1 SET imp1.mld_melding_key = v_mld_melding_key, imp1.mld_melding_datum = v_mld_melding_datum WHERE imp1.fac_import_key = recmld.fac_import_key AND imp1.fac_import_index = recmld.fac_import_index; UPDATE asdl_imp_glas2 imp2 SET imp2.mld_melding_key = v_mld_melding_key, imp2.mld_melding_datum = v_mld_melding_datum WHERE imp2.fac_import_key = recmld.fac_import_key AND imp2.fac_import_index = recmld.fac_import_index; END; END LOOP; END; / ------ 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