Files
Customer/KMMO/kmmo.sql
Arthur Egberink 47c8e88549 KMMO#87048 Objecten import voor MJOB kan nu ook wijzigingen in objecten en taken aan.
svn path=/Customer/trunk/; revision=69040
2025-05-16 07:46:46 +00:00

2175 lines
94 KiB
MySQL
Raw Permalink Blame History

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'kmmo.sql'
DEFINE dbuser = 'KMMO'
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 KMMO AS
-- PACKAGES voor de KMMO specifieke rapportages
TYPE t_cursor IS REF CURSOR;
PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER, p_datum_van IN VARCHAR2, p_datum_tot IN VARCHAR2, p_cursor OUT t_cursor);
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER);
PROCEDURE indexatie_mjob;
END;
/
CREATE OR REPLACE PACKAGE BODY KMMO AS
-- PACKAGES voor de KMMO specifieke rapportages
PROCEDURE rap_bezetting_rondleider (user_key IN NUMBER,
p_datum_van IN VARCHAR2, -- Let wel: formaat '13-05-2005'
p_datum_tot IN VARCHAR2,
p_cursor OUT t_cursor
)
AS
v_datum_van DATE;
BEGIN
v_datum_van := fac.safe_to_date (p_datum_van, 'dd-mm-yyyy');
OPEN p_cursor FOR
SELECT p.prs_perslid_naam naam,
p.prs_perslid_voornaam voornaam,
sp.prs_srtperslid_omschrijving rondleider_taal,
(SELECT LISTAGG (
TO_CHAR (rrr.res_rsv_ruimte_van, 'hh24:mi')
|| '-'
|| TO_CHAR (rrr.res_rsv_ruimte_tot, 'hh24:mi')
|| ' '
|| ud.fac_usrdata_code,
CHR (10))
WITHIN GROUP (ORDER BY rrr.res_rsv_ruimte_van) AS beschikbaarheid
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr,
res_kenmerkwaarde kw,
fac_usrdata ud
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND TRUNC (rrr.res_rsv_ruimte_van) = v_datum_van
AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = 1 -- taal rondleiding
AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
ud.fac_usrdata_key) bezetting,
(SELECT COUNT(*) from kmmo_v_beschikb_raw bo
WHERE p.prs_perslid_key = bo.prs_perslid_key
AND TRUNC(bo.van) = v_datum_van
AND bo.dagdeel = 'ochtend'
AND bo.beschikbaar = 1) ochtend,
(SELECT COUNT(*) from kmmo_v_beschikb_raw bo
WHERE p.prs_perslid_key = bo.prs_perslid_key
AND TRUNC(bo.van) = v_datum_van
AND bo.dagdeel = 'middag'
AND bo.beschikbaar = 1) middag,
(SELECT COUNT(*)
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND o.mld_statusopdr_key NOT IN (1,2) -- Afgewezen/Niet akkoord
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND ABS(TRUNC (rrr.res_rsv_ruimte_van) - v_datum_van) < 4) bezetting_week
FROM prs_perslid p, prs_srtperslid sp, kmmo_v_beschikb_raw b
WHERE p.prs_perslid_key = b.prs_perslid_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND prs_srtperslid_omschrijving LIKE 'Rondleider %'
AND TRUNC(b.van) = v_datum_van
AND b.beschikbaar = 1 -- beschikbaar
GROUP BY p.prs_perslid_key, prs_perslid_naam, prs_perslid_voornaam, prs_srtperslid_omschrijving;
END rap_bezetting_rondleider;
PROCEDURE processemail (pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
pemailkey IN NUMBER
)
AS
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
newkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
kkey_att mld_kenmerk.mld_kenmerk_key%TYPE;
kkey_mail mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
status_key mld_melding.mld_melding_status%TYPE;
BEGIN
defaultstdmelding := NULL;
status_key := 2; -- Standaard komt de melding op nieuw.
CASE
WHEN UPPER (pto) LIKE 'FEEDBACK@%'
THEN
defaultstdmelding := 441;
kkey_att := 1;
kkey_mail := 541;
sender := 1841; -- Ontvangen feedback
status_key := 0; -- voor feedback komt de status op FO te staan omdat de FrontOffice hier eerst naar gaat kijken.
WHEN UPPER (pto) LIKE 'AANVRAAG@%'
THEN
defaultstdmelding := 481;
kkey_att := 1;
kkey_mail := 581;
sender := 1841; -- Ontvangen feedback
WHEN UPPER (pto) LIKE 'STORING@%'
THEN
defaultstdmelding := 501;
kkey_att := 1;
kkey_mail := 582;
sender := 1841; -- Ontvangen feedback
ELSE
NULL;
END CASE;
IF defaultstdmelding IS NOT NULL
THEN
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_melding_onderwerp,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
4, -- email
SYSDATE,
SUBSTR (psubject, 1, 80),
SUBSTR (REPLACE (SUBSTR (pbody, 1, 4000),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
defaultstdmelding,
sender,
sender,
NULL,
3)
RETURNING mld_melding_key
INTO newkey;
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'MLD\M' || to_char( TRUNC(newkey/1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_att || CHR(92));
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkorgmailpath',
'MLD\M' || TO_CHAR (TRUNC (newkey / 1000), 'FM0000') || '___\M' || newkey || CHR(92) || kkey_mail || CHR(92));
mld.setmeldingstatus (newkey, status_key, sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'maillog',
'Geregistreerd onder melding ' || newkey);
END;
END IF;
IF errormsg IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'errormsg', errormsg);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet verwerkt worden afzender: '
|| pfrom
|| '['
|| errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder');
END;
PROCEDURE indexatie_mjob
AS
v_indexatie NUMBER;
BEGIN
SELECT fac_usrdata_prijs
INTO v_indexatie
FROM fac_usrdata
WHERE fac_usrtab_key = 261 -- Indexatie MJOB
AND fac_usrdata_vervaldatum = TRUNC (SYSDATE);
UPDATE ins_deelsrtcontrole dsc
SET dsc.ins_deelsrtcontrole_freezecost = dsc.ins_deelsrtcontrole_freezecost * (1 + v_indexatie / 100)
WHERE TRUNC (dsc.ins_deelsrtcontrole_freezedate, 'yyyy') = TRUNC (SYSDATE, 'yyyy')
AND dsc.ins_srtcontrole_key IN
(SELECT sc.ins_srtcontrole_key
FROM ctr_disc_params dp, ins_srtcontrole sc
WHERE dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND dp.ctr_disc_params_ismjob = 1);
UPDATE ins_srtcontroledl_xcp xcp
SET xcp.ins_srtcontroledl_xcp_materia = xcp.ins_srtcontroledl_xcp_materia * (1 + v_indexatie / 100)
WHERE xcp.ins_srtcontrole_key IN
(SELECT sc.ins_srtcontrole_key
FROM ctr_disc_params dp, ins_srtcontrole sc
WHERE dp.ctr_ins_discipline_key = sc.ctr_discipline_key AND dp.ctr_disc_params_ismjob = 1);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
-- Er valt vandaag niets te indexeren.
NULL;
END;
END;
/
-- Dagelijkse taak
CREATE OR REPLACE PROCEDURE kmmo_daily
AS
BEGIN
IF user = 'KMMO_TEST'
THEN
-- pas de kleuren voor de testomgeving aan (blauw naar rood)
UPDATE fac_setting
SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, '#0085c4', '#e20035')
WHERE fac_setting_name = 'csstemplate';
UPDATE fac_setting
SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, '#0085c4', '#e20035')
WHERE fac_setting_name = 'csscust';
UPDATE fac_setting
SET fac_setting_pvalue = REPLACE(fac_setting_pvalue, 'banner.png', 'banner_rood.png')
WHERE fac_setting_name = 'csstemplate';
END IF;
-- Kijk of de MJOB records geindexeerd moeten worden.
-- De indexatie vindt plaats op de vervaldatum van het record in de Indexatie MJOB eigen tabel
KMMO.indexatie_mjob;
END;
/
-- view om QR codes voor een deel te genereren.
CREATE OR REPLACE VIEW kmmo_v_rap_qr_deel
AS
SELECT fac_bookmark_naam,
fac_bookmark_id,
ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
alg_locatie_key,
alg_gebouw_omschrijving,
ins_deel_aanmaak,
ins_deel_key
FROM fac_bookmark b, ins_v_deel_gegevens d
WHERE fac_bookmark_expire IS NULL
AND fac_bookmark_id = 'eYD435Vl666lZdkU';
-- view om QR codes voor een ruimte te genereren.
-- Ieder srtruimte krijgt een eigen bookmark
-- Om een link tussen bookmark en srtuimte te maken
-- wordt de omschrijving van de bookmark als volgt gevuld:
-- QR bij verkeersruimte key:30
-- De key is dan de key van de srtruimte.
CREATE OR REPLACE VIEW kmmo_v_rap_qr_ruimte
AS
SELECT b.fac_bookmark_naam,
b.fac_bookmark_id,
sr.alg_srtruimte_omschrijving,
rg.alg_ruimte_omschrijving,
rg.alg_ruimte_nr,
rg.alg_ruimte_key,
alg_locatie_omschrijving,
alg_gebouw_omschrijving,
alg_verdieping_omschrijving
FROM fac_bookmark b, alg_srtruimte sr, alg_v_ruimte_gegevens rg
WHERE b.fac_bookmark_expire IS NULL
AND COALESCE(FAC.safe_to_number(TRIM(SUBSTR(b.fac_bookmark_naam, INSTR(b.fac_bookmark_naam, ':')+1))),-1) = sr.alg_srtruimte_key
AND sr.alg_srtruimte_key = rg.alg_srtruimte_key;
CREATE OR REPLACE FORCE VIEW kmmo_v_thema_bouwdeel
(
ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT alg_onrgoed_key, SUBSTR (alg_onrgoedkenmerk_waarde, 1, 1) waarde
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1003 AND alg_onrgoedkenmerk_verwijder IS NULL;
CREATE OR REPLACE FORCE VIEW kmmo_v_thema_subbouwdeel
(
ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT alg_onrgoed_key, SUBSTR (alg_onrgoedkenmerk_waarde, 1, 2) waarde
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1003 AND alg_onrgoedkenmerk_verwijder IS NULL;
CREATE OR REPLACE FORCE VIEW kmmo_v_thema_openstelling
(
ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde waarde
FROM alg_onrgoedkenmerk
WHERE alg_kenmerk_key = 1004 AND alg_onrgoedkenmerk_verwijder IS NULL;
CREATE OR REPLACE VIEW kmmo_v_label_ruimteomschr
AS
SELECT r.alg_ruimte_key, r.alg_ruimte_omschrijving waarde
FROM alg_v_aanwezigruimte r;
-- View om de resultaten van de inspecties te tonen
CREATE OR REPLACE VIEW kmmo_v_rap_keuring_resultaat
AS
SELECT dsc.ins_deelsrtcontrole_datum,
dsc.ins_deelsrtcontrole_datum_org,
dsc.ins_deelsrtcontrole_status,
pf.prs_perslid_naam_full,
sc.ins_srtcontrole_omschrijving,
dg.ins_discipline_omschrijving,
dg.ins_srtgroep_omschrijving,
dg.ins_srtdeel_omschrijving,
dg.ins_deel_omschrijving,
dg.alg_gebouw_omschrijving,
dg.alg_verdieping_code,
dg.alg_ruimte_nr,
cm.ins_controlemode_oms,
(SELECT LISTAGG (
COALESCE (k.ins_kenmerk_omschrijving,
sk.ins_srtkenmerk_omschrijving),
CHR (13))
WITHIN GROUP (ORDER BY
COALESCE (k.ins_kenmerk_omschrijving,
sk.ins_srtkenmerk_omschrijving)) AS bevindingen
FROM ins_kmdeelsrtcontr kdsc, ins_kenmerk k, ins_srtkenmerk sk
WHERE kdsc.ins_kenmerk_key = k.ins_kenmerk_key
AND k.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
AND kdsc.ins_deelsrtcontrole_key = dsc.ins_deelsrtcontrole_key) bevindingen
FROM ins_deelsrtcontrole dsc,
ins_srtcontrole sc,
ins_v_deel_gegevens dg,
ins_controlemode cm,
prs_v_perslid_fullnames pf
WHERE dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key
AND dsc.ins_deel_key = dg.ins_deel_key
AND dsc.ins_controlemode_key = cm.ins_controlemode_key
AND dsc.prs_perslid_key = pf.prs_perslid_key;
-- Overzicht om het resultaat (notities) van de inspecteur te bekijken
-- rapport om de opmerkingen van de inspecteur te zien
CREATE OR REPLACE VIEW kmmo_v_rap_deel_notities
AS
SELECT n.ins_deel_note_aanmaak,
n.ins_deel_note_omschrijving,
pf.prs_perslid_naam_full,
dg.ins_discipline_omschrijving,
dg.ins_srtgroep_omschrijving,
dg.ins_srtdeel_omschrijving,
dg.ins_srtdeel_upper,
dg.alg_gebouw_omschrijving,
dg.alg_gebouw_upper,
dg.alg_verdieping_omschrijving,
dg.alg_verdieping_code,
dg.alg_ruimte_nr,
dg.ins_deel_omschrijving,
dg.ins_deel_aantal,
dg.ins_deel_opmerking,
dg.ins_deel_vervaldatum
FROM ins_deel_note n,
ins_v_deel_gegevens dg,
prs_v_perslid_fullnames_all pf
WHERE n.ins_deel_key = dg.ins_deel_key
AND n.prs_perslid_key = pf.prs_perslid_key;
-- Importfunctie om Asset en MJOB informatie te importeren.
CREATE OR REPLACE PROCEDURE kmmo_import_assets (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count NUMBER (10);
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_alg_ruimte_nr VARCHAR2(100);
v_ins_deel_aanmaak_txt VARCHAR2(100);
v_ins_deel_aantal_txt VARCHAR2(100);
v_ins_deel_eenheid VARCHAR2(100);
v_ins_deel_omschrijving VARCHAR2(100);
v_ins_deel_opmerking VARCHAR2(1000);
v_ins_srtcontrole_periode_txt VARCHAR2(100);
v_ins_srtcontrole_prijs_txt VARCHAR2(100);
v_ins_srtdeel_code VARCHAR2(100);
v_ins_srtdeel_code_txt VARCHAR2(100);
v_ins_srtdeel_omschrijving VARCHAR2(100);
v_ins_deel_percentage NUMBER;
v_ins_srtcontrole_periode NUMBER;
v_kenmerk1 VARCHAR2(1000);
v_kenmerk2 VARCHAR2(1000);
v_kenmerk3 VARCHAR2(1000);
v_kenmerk4 VARCHAR2(1000);
v_kenmerk5 VARCHAR2(1000);
v_kenmerk7 VARCHAR2(1000);
v_kenmerk9 VARCHAR2(1000);
v_dumm NUMBER (10,2);
v_ins_deel_aanmaak DATE;
v_ins_deel_startjaar DATE;
v_ins_deel_aantal NUMBER;
v_ins_srtcontrole_prijs NUMBER(10,2);
v_alg_locatie_code VARCHAR2(20);
v_alg_gebouw_code VARCHAR2(20);
v_alg_verdieping_volgnr NUMBER;
v_srtk_code_rvb_key NUMBER;
v_srtk_opm_key NUMBER;
v_srtk_merk_key NUMBER;
v_discipline_key NUMBER;
v_srtgroep_key NUMBER;
v_ins_discipline_omschrijving VARCHAR2(100);
v_ins_srtgroep_omschrijving VARCHAR2(100);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
CURSOR c_dis IS
SELECT '1 - onderbouw' disc FROM DUAL
UNION
SELECT '5 - installaties werktuigbouwkunde' disc FROM DUAL
UNION
SELECT '2 - ruwbouw' FROM DUAL
UNION
SELECT '7 - vaste voorzieningen' FROM DUAL
UNION
SELECT '6 - installaties elektrotechniek' FROM DUAL
UNION
SELECT '4 - afwerkingen' FROM DUAL
UNION
SELECT '3 - afbouw' FROM DUAL
UNION
SELECT '9 - terrein' FROM DUAL
UNION
SELECT '8 - losse inventaris' FROM DUAL;
CURSOR c_grp IS
SELECT '11 - bodemvoorzieningen' groep FROM DUAL
UNION
SELECT '13 - vloeren op grondslag' groep FROM DUAL
UNION
SELECT '16 - funderingsconstructie' groep FROM DUAL
UNION
SELECT '17 - paalfundering' groep FROM DUAL
UNION
SELECT '19 - onderhoud algemeen' groep FROM DUAL
UNION
SELECT '21 - buitenwanden' groep FROM DUAL
UNION
SELECT '22 - binnenwanden' FROM DUAL
UNION
SELECT '23 - vloeren, galerijen' FROM DUAL
UNION
SELECT '24 - trappen en hellingen' FROM DUAL
UNION
SELECT '25 - binnenzijde gevelconstructie' FROM DUAL
UNION
SELECT '26 - vloerconstructie' FROM DUAL
UNION
SELECT '27 - daken' FROM DUAL
UNION
SELECT '28 - hoofddraagkonstrukties' FROM DUAL
UNION
SELECT '29 - draagconstructie' FROM DUAL
UNION
SELECT '31 - buitenwandopeningen' FROM DUAL
UNION
SELECT '32 - binnenwandopeningen' FROM DUAL
UNION
SELECT '33 - vloeropeningen' FROM DUAL
UNION
SELECT '34 - balustrades en leuningen' FROM DUAL
UNION
SELECT '35 - plafonds' FROM DUAL
UNION
SELECT '37 - dakopeningen' FROM DUAL
UNION
SELECT '38 - inbouwpakketten' FROM DUAL
UNION
SELECT '39 - afbouw' FROM DUAL
UNION
SELECT '41 - buitenwandafwerkingen' FROM DUAL
UNION
SELECT '42 - binnenwandafwerkingen' FROM DUAL
UNION
SELECT '43 - vloerafwerkingen' FROM DUAL
UNION
SELECT '44 - trap- en hellingafwerkingen' FROM DUAL
UNION
SELECT '45 - plafondafwerkingen' FROM DUAL
UNION
SELECT '47 - dakafwerkingen' FROM DUAL
UNION
SELECT '48 - afwerkingspakketten' FROM DUAL
UNION
SELECT '49 - afwerking algemeen' FROM DUAL
UNION
SELECT '51 - warmte-opwekking' FROM DUAL
UNION
SELECT '52 - afvoeren' FROM DUAL
UNION
SELECT '53 - water' FROM DUAL
UNION
SELECT '54 - gas' FROM DUAL
UNION
SELECT '55 - koude-opwekking' FROM DUAL
UNION
SELECT '56 - warmtedistributie' FROM DUAL
UNION
SELECT '57 - luchtbehandeling' FROM DUAL
UNION
SELECT '58 - regeling klimaat en sanitair' FROM DUAL
UNION
SELECT '59 - mechanische installaties' FROM DUAL
UNION
SELECT '61 - centrale elektrotechnische voorzieningen' FROM DUAL
UNION
SELECT '62 - kracht' FROM DUAL
UNION
SELECT '63 - verlichting' FROM DUAL
UNION
SELECT '64 - communicatie' FROM DUAL
UNION
SELECT '65 - beveiliging' FROM DUAL
UNION
SELECT '66 - transport' FROM DUAL
UNION
SELECT '67 - gebouwbeheersysteem' FROM DUAL
UNION
SELECT '69 - electrische installaties algemeen' FROM DUAL
UNION
SELECT '71 - vaste verkeersvoorzieningen' FROM DUAL
UNION
SELECT '72 - vaste gebruikersvoorzieningen' FROM DUAL
UNION
SELECT '73 - vaste keukenvoorzieningen' FROM DUAL
UNION
SELECT '74 - vaste sanitaire voorzieningen' FROM DUAL
UNION
SELECT '75 - vaste onderhoudsvoorzieningen' FROM DUAL
UNION
SELECT '76 - vaste opslagvoorzieningen' FROM DUAL
UNION
SELECT '79 - vaste inrichtingen' FROM DUAL
UNION
SELECT '80 - losse inrichting' FROM DUAL
UNION
SELECT '81 - losse inventaris voor verkeersruimten' FROM DUAL
UNION
SELECT '82 - losse inventaris voor gebruiksruimten' FROM DUAL
UNION
SELECT '83 - losse keukeninventaris' FROM DUAL
UNION
SELECT '84 - losse sanitaire inventaris' FROM DUAL
UNION
SELECT '85 - losse schoonmaakinventaris' FROM DUAL
UNION
SELECT '86 - losse opberginventaris' FROM DUAL
UNION
SELECT '89 - losse inventaris' FROM DUAL
UNION
SELECT '90 - terrein' FROM DUAL
UNION
SELECT '91 - grondvoorzieningen' FROM DUAL
UNION
SELECT '92 - opstallen' FROM DUAL
UNION
SELECT '93 - omeheiningen' FROM DUAL
UNION
SELECT '94 - terreinafwerking' FROM DUAL
UNION
SELECT '95 - terreininstallaties, werktuigkundig' FROM DUAL
UNION
SELECT '96 - terreininstallaties, elektrotechnisch' FROM DUAL
UNION
SELECT '97 - terreininrichting standaard' FROM DUAL
UNION
SELECT '98 - terreininrichting bijzonder' FROM DUAL
UNION
SELECT '99 - terrein algemeen' FROM DUAL;
BEGIN
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
DELETE fac_imp_ins;
-- Zijn de kenmerksoorten er al?
BEGIN
SELECT ins_srtkenmerk_key
INTO v_srtk_code_rvb_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = 'CODE RVB';
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype,
ins_srtkenmerk_omschrijving,
ins_srtkenmerk_lengte)
VALUES ('C', 'Code RVB', 20) RETURNING ins_srtkenmerk_key INTO v_srtk_code_rvb_key;
END;
BEGIN
SELECT ins_srtkenmerk_key
INTO v_srtk_opm_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = 'OPMERKING';
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype,
ins_srtkenmerk_omschrijving,
ins_srtkenmerk_lengte)
VALUES ('C', 'Opmerking', 2000) RETURNING ins_srtkenmerk_key INTO v_srtk_opm_key;
END;
BEGIN
SELECT ins_srtkenmerk_key
INTO v_srtk_merk_key
FROM ins_srtkenmerk
WHERE ins_srtkenmerk_upper = 'MERK';
EXCEPTION WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_srtkenmerk (ins_srtkenmerk_kenmerktype,
ins_srtkenmerk_omschrijving,
ins_srtkenmerk_lengte)
VALUES ('C', 'Merk', 49) RETURNING ins_srtkenmerk_key INTO v_srtk_merk_key;
END;
-- Controleer of de MJOB disciplines al bestaan
SELECT count(*)
INTO v_count
FROM ins_discipline
WHERE ins_discipline_omschrijving = '5 - installaties werktuigbouwkunde';
IF v_count = 0
THEN
FOR rec IN c_dis
LOOP
BEGIN
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE UPPER (ins_discipline_omschrijving) = UPPER (rec.disc);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_tab_discipline (ins_discipline_omschrijving,
ins_discipline_min_level)
VALUES (rec.disc, 1)
RETURNING ins_discipline_key
INTO v_discipline_key;
INSERT INTO ins_disc_params (ins_discipline_key,
ins_disc_params_autonum)
VALUES (v_discipline_key, 2);
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer)
VALUES (v_srtk_code_rvb_key, v_discipline_key, 'D', 'D', 110);
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer)
VALUES (v_srtk_opm_key, v_discipline_key, 'D', 'D', 120);
INSERT INTO ins_kenmerk (ins_srtkenmerk_key, ins_srtinstallatie_key, ins_kenmerk_niveau, ins_kenmerk_bewerkniveau, ins_kenmerk_volgnummer)
VALUES (v_srtk_merk_key, v_discipline_key, 'D', 'D', 130);
END;
END LOOP;
FOR rec_grp IN c_grp
LOOP
SELECT ins_discipline_key
INTO v_discipline_key
FROM ins_tab_discipline
WHERE SUBSTR (ins_discipline_omschrijving, 1, 3) =
SUBSTR (rec_grp.groep, 1, 1) || ' -';
BEGIN
SELECT ins_srtgroep_key
INTO v_srtgroep_key
FROM ins_srtgroep
WHERE UPPER (ins_srtgroep_omschrijving) = UPPER (rec_grp.groep)
AND ins_discipline_key = v_discipline_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO ins_srtgroep (ins_discipline_key,
ins_srtgroep_omschrijving)
VALUES (v_discipline_key, rec_grp.groep);
END;
END LOOP;
END IF;
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_nr (v_newline, c_fielddelimitor, 12, v_alg_ruimte_nr);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, v_ins_deel_aanmaak_txt);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 14, v_ins_deel_aantal_txt);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 15, v_ins_deel_eenheid);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_ins_deel_omschrijving);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_ins_deel_opmerking);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 29, v_ins_srtcontrole_periode_txt);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 24, v_ins_srtcontrole_prijs_txt);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ins_srtdeel_code_txt);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_ins_srtdeel_omschrijving);
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_kenmerk1); -- code RVB
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_kenmerk2); -- opmerking
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_kenmerk3); -- taak
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 16, v_kenmerk5); -- fabrikant / merk
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 28, v_kenmerk7); -- percentage
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 30, v_kenmerk9); -- startjaar
v_aanduiding := v_ins_deel_omschrijving || '|' || v_kenmerk4;
v_count_tot := v_count_tot + 1;
v_errormsg := 'Fout bij toevoegen te importeren v_ins_discipline_omschrijving: ' || v_ins_srtdeel_code_txt;
SELECT d.ins_discipline_omschrijving
INTO v_ins_discipline_omschrijving
FROM ins_discipline d
WHERE SUBSTR (d.ins_discipline_omschrijving, 1, 1) = SUBSTR (v_ins_srtdeel_code_txt, 1, 1);
v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtgroep_omschrijving: ' || v_ins_srtdeel_code_txt;
SELECT sg.ins_srtgroep_omschrijving
INTO v_ins_srtgroep_omschrijving
FROM ins_srtgroep sg
WHERE SUBSTR (sg.ins_srtgroep_omschrijving, 1, 2) = SUBSTR (v_ins_srtdeel_code_txt, 1, 2);
v_errormsg := 'Fout bij toevoegen te importeren ins_srtdeel_code: ' || v_ins_srtdeel_code_txt;
IF LENGTH(v_ins_srtdeel_code_txt) > 10
THEN
v_ins_srtdeel_code := REPLACE(v_ins_srtdeel_code_txt, '.');
ELSE
v_ins_srtdeel_code := v_ins_srtdeel_code_txt;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_alg_ruimte_nr: ' || v_alg_ruimte_nr;
SELECT alg_locatie_code, alg_gebouw_upper, alg_verdieping_volgnr
INTO v_alg_locatie_code, v_alg_gebouw_code, v_alg_verdieping_volgnr
FROM alg_v_ruimte_gegevens rg
WHERE UPPER(rg.alg_ruimte_nr) = UPPER(v_alg_ruimte_nr);
v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aanmaak_txt: ' || v_ins_deel_aanmaak_txt;
v_ins_deel_aanmaak := NULL;
IF FAC.safe_to_number(v_ins_deel_aanmaak_txt) IS NOT NULL
THEN
v_ins_deel_aanmaak := to_date('0101' || v_ins_deel_aanmaak_txt, 'ddmmyyyy');
ELSE
v_ins_deel_aanmaak := SYSDATE;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk9: ' || v_kenmerk9;
IF v_kenmerk9 IS NOT NULL
THEN
v_ins_deel_startjaar := to_date('0101' || v_kenmerk9, 'ddmmyyyy');
ELSE
v_ins_deel_startjaar := NULL;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_ins_deel_aantal_txt: ' || v_ins_deel_aantal_txt;
IF v_ins_deel_aantal_txt IS NOT NULL
THEN
v_ins_deel_aantal := to_number(v_ins_deel_aantal_txt);
ELSE
v_ins_deel_aantal := 1;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_periode_txt: ' || v_ins_srtcontrole_periode_txt;
IF v_ins_srtcontrole_periode_txt IS NOT NULL
THEN
v_ins_srtcontrole_periode := to_number(v_ins_srtcontrole_periode_txt);
ELSE
v_ins_srtcontrole_periode := NULL;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_ins_srtcontrole_prijs_txt: ' || v_ins_srtcontrole_prijs_txt;
IF v_ins_srtcontrole_prijs_txt IS NOT NULL
THEN
v_ins_srtcontrole_prijs := to_number(REPLACE(REPLACE(v_ins_srtcontrole_prijs_txt, '.'), ',', '.'));
ELSE
v_ins_srtcontrole_prijs := NULL;
END IF;
v_errormsg := 'Fout bij toevoegen te importeren v_kenmerk7: ' || v_kenmerk7;
IF v_kenmerk7 IS NOT NULL
THEN
IF INSTR(v_kenmerk7, '%') = 0
THEN
v_ins_deel_percentage := to_number(v_kenmerk7)*100;
ELSE
v_ins_deel_percentage := to_number(REPLACE(v_kenmerk7, '%'));
END IF;
ELSE
v_ins_deel_percentage := 100;
END IF;
SELECT count(*)
INTO v_count
FROM ins_deel
WHERE ins_deel_verwijder IS NULL
AND ins_deel_omschrijving = v_ins_deel_omschrijving;
IF v_count > 0 THEN
fac.imp_writelog (p_import_key,
'W',
'Object bestaat al: ',
v_ins_deel_omschrijving);
END IF;
INSERT INTO fac_imp_ins (ins_discipline_omschrijving,
ins_srtgroep_omschrijving,
ins_srtdeel_code,
ins_srtdeel_omschrijving,
ins_deel_omschrijving,
ins_deel_opmerking,
alg_locatie_code,
alg_gebouw_code,
alg_verdieping_volgnr,
alg_ruimte_nr,
ins_kenmerkwaarde1,
ins_kenmerkwaarde2,
ins_kenmerkwaarde3,
ins_kenmerkwaarde4,
ins_kenmerkwaarde5,
ins_kenmerkwaarde6,
ins_kenmerkwaarde7,
ins_kenmerkwaarde8,
ins_kenmerkwaarde9,
ins_kenmerkwaarde10,
ins_deel_aanmaak,
ins_deel_aantal,
ins_deel_externnr)
VALUES (SUBSTR(v_ins_discipline_omschrijving, 1,60),
SUBSTR(v_ins_srtgroep_omschrijving, 1, 60),
SUBSTR(v_ins_srtdeel_code,1,10),
SUBSTR(v_ins_srtdeel_omschrijving || ' - ' || v_ins_srtdeel_code_txt, 1, 100),
SUBSTR(v_ins_deel_omschrijving, 1, 60),
SUBSTR(v_ins_deel_opmerking, 1, 320),
SUBSTR(v_alg_locatie_code, 1, 10),
SUBSTR(v_alg_gebouw_code, 1, 12),
v_alg_verdieping_volgnr,
SUBSTR(v_alg_ruimte_nr,1,20),
DECODE(v_kenmerk1, NULL, NULL, 'Code RVB|0=' || v_kenmerk1),
DECODE(v_kenmerk2, NULL, NULL, 'Opmerking|0=' || v_kenmerk2),
v_kenmerk3,
'',
DECODE(v_kenmerk5, NULL, NULL, 'Merk|0=' || v_kenmerk5),
v_ins_srtcontrole_prijs,
v_ins_deel_percentage,
v_ins_srtcontrole_periode,
to_char(v_ins_deel_startjaar, 'ddmmyyyy'),
to_char(v_ins_deel_aanmaak, 'ddmmyyyy'),
v_ins_deel_aanmaak,
to_number(v_ins_deel_aantal),
v_count_tot);
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg || ' - ' || v_aanduiding;
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);
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_errorhint := v_errormsg || ' - ' || v_aanduiding;
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);
END kmmo_import_assets;
/
CREATE OR REPLACE PROCEDURE kmmo_update_assets (p_import_key IN NUMBER)
AS
CURSOR c IS SELECT * FROM fac_imp_ins;
CURSOR c_upd_deel IS
SELECT DISTINCT ins_deel_omschrijving, alg_ruimte_key, alg_locatie_key, ins_deel_aanmaak, ins_deel_aantal
FROM alg_v_ruimte_gegevens rg, fac_imp_ins i
WHERE rg.alg_locatie_code = i.alg_locatie_code
AND rg.alg_gebouw_upper = i.alg_gebouw_code
AND rg.alg_verdieping_volgnr = i.alg_verdieping_volgnr
AND rg.alg_ruimte_nr = i.alg_ruimte_nr;
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_errormsg VARCHAR2 (200);
v_errorhint VARCHAR2 (200);
v_aanduiding VARCHAR2 (100);
v_deel_key NUMBER;
v_srtdeel_key NUMBER;
v_srtcontrole_key NUMBER;
v_srtcontroledl_xcp_key NUMBER;
v_taakcat_key NUMBER;
v_srtcontrole_periode INS_SRTCONTROLE.INS_SRTCONTROLE_PERIODE%TYPE;
v_srtcontrole_materiaal INS_SRTCONTROLE.INS_SRTCONTROLE_MATERIAAL%TYPE;
v_srtcontrole_percentage INS_SRTCONTROLE.INS_SRTCONTROLE_PERCENTAGE%TYPE;
v_srtcontrole_level INS_SRTCONTROLE.INS_SRTCONTROLE_LEVEL%TYPE;
v_percentage NUMBER;
v_materiaal INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE;
v_srtcontroledl_xcp_materia INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE;
v_srtcontroledl_xcp_perc INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_PERC%TYPE;
v_srtcontroledl_xcp_startdat INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE;
v_startdat_nieuw INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_STARTDAT%TYPE;
v_ruimte_aanduiding_nieuw VARCHAR2 (100);
v_ruimte_aanduiding_oud VARCHAR2 (100);
v_alg_ruimte_key NUMBER (10);
v_alg_locatie_key NUMBER (10);
v_deel_aanmaak DATE;
v_deel_aantal NUMBER;
BEGIN
fac_update_ins(p_import_key);
FOR rec IN c
LOOP
BEGIN
v_aanduiding := rec.ins_deel_omschrijving;
-- zoek het object
v_errorhint := 'Zoek het object';
SELECT ins_deel_key, ins_srtdeel_key
INTO v_deel_key, v_srtdeel_key
FROM ins_deel
WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving;
-- zoek de taakcategorie
v_errorhint := 'Zoek de taakcategorie';
SELECT ins_discipline_key
INTO v_taakcat_key
FROM ctr_discipline
WHERE UPPER (ins_discipline_omschrijving) =
UPPER (rec.ins_kenmerkwaarde3);
BEGIN
v_errorhint := 'Bepaal percentage';
v_percentage := NULL;
-- IF rec.ins_kenmerkwaarde7 <> 1
-- AND rec.ins_kenmerkwaarde7 IS NOT NULL
-- THEN
-- v_percentage := rec.ins_kenmerkwaarde7 * 100;
-- END IF;
v_percentage := rec.ins_kenmerkwaarde7;
v_errorhint := 'Bepaal materiaalkosten';
v_materiaal :=
FAC.safe_to_number (
REPLACE (rec.ins_kenmerkwaarde6, ',', '.'));
-- zoek de taak
v_errorhint := 'Zoek de taak';
SELECT ins_srtcontrole_key,
ins_srtcontrole_periode,
ins_srtcontrole_materiaal,
ins_srtcontrole_percentage
INTO v_srtcontrole_key,
v_srtcontrole_periode,
v_srtcontrole_materiaal,
v_srtcontrole_percentage
FROM ins_srtcontrole
WHERE ins_srtinstallatie_key = v_srtdeel_key
AND ins_srtcontrole_niveau = 'S'
AND ins_srtcontrole_omschrijving = rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code
AND ctr_discipline_key = v_taakcat_key;
IF v_srtcontrole_periode <>
COALESCE (rec.ins_kenmerkwaarde8, 0)
OR v_srtcontrole_materiaal <> v_materiaal
OR v_srtcontrole_percentage <> v_percentage
OR ( rec.ins_kenmerkwaarde9 IS NOT NULL
AND rec.ins_kenmerkwaarde9 <>
COALESCE (rec.ins_kenmerkwaarde10, '01010000'))
THEN
-- bestaat er al een xcp record?
BEGIN
SELECT ins_srtcontroledl_xcp_key, ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_startdat
INTO v_srtcontroledl_xcp_key, v_srtcontroledl_xcp_materia, v_srtcontroledl_xcp_perc, v_srtcontroledl_xcp_startdat
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontrole_key = v_srtcontrole_key
AND ins_deel_key = v_deel_key;
EXCEPTION WHEN NO_DATA_FOUND
THEN
-- dan moeten we een dl_xcp record aanmaken
v_errorhint := 'Aanmaken xcp';
INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key,
ins_deel_key)
VALUES (v_srtcontrole_key, v_deel_key)
RETURNING ins_srtcontroledl_xcp_key
INTO v_srtcontroledl_xcp_key;
END;
v_errorhint := 'Aanpassen periode';
IF v_srtcontrole_periode <>
COALESCE (rec.ins_kenmerkwaarde8, 0)
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_periode =
COALESCE (
TO_NUMBER (rec.ins_kenmerkwaarde8),
0)
WHERE ins_srtcontroledl_xcp_key =
v_srtcontroledl_xcp_key;
fac.trackaction('#INSUPD',
v_deel_key,
NULL,
NULL,
rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10)
|| 'Periode: ' || COALESCE(v_srtcontrole_periode, '(leeg)') || ' --> ' || COALESCE(rec.ins_kenmerkwaarde8, '(leeg)'));
END IF;
v_errorhint :=
'Aanpassen materiaal: '
|| rec.ins_kenmerkwaarde6
|| ' - '
|| v_materiaal;
IF v_srtcontrole_materiaal <> v_materiaal
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_materia = v_materiaal
WHERE ins_srtcontroledl_xcp_key =
v_srtcontroledl_xcp_key;
fac.trackaction('#INSUPD',
v_deel_key,
NULL,
NULL,
rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10)
|| 'Materiaal (EUR): ' || COALESCE(v_srtcontroledl_xcp_materia, v_srtcontrole_materiaal, '(leeg)') || ' --> ' || COALESCE(v_materiaal, '(leeg)'));
END IF;
v_errorhint := 'Aanpassen percentage';
IF v_srtcontrole_percentage <> v_percentage
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_perc = v_percentage
WHERE ins_srtcontroledl_xcp_key =
v_srtcontroledl_xcp_key;
fac.trackaction('#INSUPD',
v_deel_key,
NULL,
NULL,
rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10)
|| 'Percentage: ' || COALESCE(v_srtcontroledl_xcp_perc, v_srtcontrole_percentage, '(leeg)') || ' --> ' || COALESCE(v_percentage, '(leeg)'));
END IF;
v_errorhint := 'Aanpassen startdatum: ' || rec.ins_kenmerkwaarde9;
IF rec.ins_kenmerkwaarde9 IS NOT NULL
THEN
v_startdat_nieuw := TRUNC (FAC.SAFE_TO_DATE (rec.ins_kenmerkwaarde9, 'DDMMYYYY'), 'YYYY');
IF v_startdat_nieuw IS NOT NULL
AND v_startdat_nieuw <> v_srtcontroledl_xcp_startdat
AND rec.ins_kenmerkwaarde9 <> COALESCE (rec.ins_kenmerkwaarde10, '01010000')
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_startdat = v_startdat_nieuw
WHERE ins_srtcontroledl_xcp_key =
v_srtcontroledl_xcp_key;
fac.trackaction('#INSUPD',
v_deel_key,
NULL,
NULL,
rec.ins_kenmerkwaarde3 || ' ' || rec.ins_kenmerkwaarde3 || ' - ' || rec.ins_srtdeel_code || ' is gewijzigd' || CHR(10)
|| 'Startdatum: '|| COALESCE(TO_CHAR(v_srtcontroledl_xcp_startdat, 'dd-mm-yyyy'), '(leeg)') || ' --> ' || COALESCE(TO_CHAR(v_startdat_nieuw, 'dd-mm-yyyy'), '(leeg)'));
END IF;
END IF;
END IF;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := 'Bepalen level';
v_srtcontrole_level := 10;
IF rec.ins_kenmerkwaarde3 <> 'Vervanging'
THEN
v_srtcontrole_level := 100;
END IF;
v_errorhint := 'Aanmaken srtcontrole';
-- We vullen de controle altijd met een bedrag van 0 euro. De overrule heeft dan het juiste
-- bedrag. Hiermee voorkomen we een controle met een bepaald bedrag waarbij er voor een bepaald object
-- die taak niet voorkomt.
INSERT INTO ins_srtcontrole (
ins_srtinstallatie_key,
ins_srtcontrole_niveau,
ins_srtcontrole_omschrijving,
ctr_discipline_key,
ins_Srtcontrole_periode,
ins_srtcontrole_eenheid,
ins_srtcontrole_level,
ins_srtcontrole_materiaal,
ins_srtcontrole_percentage)
VALUES (
v_srtdeel_key,
'S',
rec.ins_kenmerkwaarde3
|| ' - '
|| rec.ins_srtdeel_code,
v_taakcat_key,
COALESCE (
TO_NUMBER (rec.ins_kenmerkwaarde8),
0),
4,
v_srtcontrole_level,
0,
v_srtcontrole_percentage)
RETURNING ins_srtcontrole_key INTO v_srtcontrole_key;
INSERT INTO ins_srtcontroledl_xcp (ins_srtcontrole_key,
ins_srtcontroledl_xcp_materia,
ins_deel_key)
VALUES (v_srtcontrole_key, v_materiaal, v_deel_key)
RETURNING ins_srtcontroledl_xcp_key
INTO v_srtcontroledl_xcp_key;
END;
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 ('KMMO.import MJOB',
'E',
v_aanduiding || ': ' || v_errormsg,
v_errorhint);
END;
END LOOP;
-- Nu gaan we de wijzigingen in de delen doorvoeren
FOR rec IN c_upd_deel
LOOP
BEGIN
SELECT ins_deel_key
INTO v_deel_key
FROM ins_deel
WHERE ins_deel_verwijder IS NULL AND ins_deel_omschrijving = rec.ins_deel_omschrijving;
SELECT ins_alg_ruimte_key, ins_alg_locatie_key
INTO v_alg_ruimte_key, v_alg_locatie_key
FROM ins_deel
WHERE ins_deel_key = v_deel_key;
IF v_alg_ruimte_key <> rec.alg_ruimte_key
THEN
UPDATE ins_deel d
SET ins_alg_ruimte_key = rec.alg_ruimte_key, ins_alg_locatie_key = rec.alg_locatie_key
WHERE d.ins_deel_key = v_deel_key;
SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')'
INTO v_ruimte_aanduiding_oud
FROM alg_v_ruimte_gegevens
WHERE alg_ruimte_key = v_alg_ruimte_key;
SELECT alg_ruimte_aanduiding || ' (' || alg_ruimte_omschrijving || ')'
INTO v_ruimte_aanduiding_nieuw
FROM alg_v_ruimte_gegevens
WHERE alg_ruimte_key = rec.alg_ruimte_key;
fac.trackaction (
'INSUPD',
v_deel_key,
NULL,
NULL,
'Object gewijzigd'
|| CHR (10)
|| 'Plaats of eigenaar: '
|| v_ruimte_aanduiding_oud
|| ' --> '
|| v_ruimte_aanduiding_nieuw);
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving);
END;
BEGIN
SELECT ins_deel_aanmaak
INTO v_deel_aanmaak
FROM ins_deel
WHERE ins_deel_key = v_deel_key;
IF v_deel_aanmaak <> rec.ins_deel_aanmaak
THEN
UPDATE ins_deel d
SET ins_deel_aanmaak = rec.ins_deel_aanmaak
WHERE d.ins_deel_key = v_deel_key;
fac.trackaction (
'INSUPD',
v_deel_key,
NULL,
NULL,
'Object gewijzigd'
|| CHR (10)
|| 'Registratiedatum: '
|| TO_CHAR(v_deel_aanmaak, 'dd-mm-yyyy')
|| ' --> '
|| TO_CHAR(rec.ins_deel_aanmaak, 'dd-mm-yyyy'));
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving);
END;
BEGIN
SELECT ins_deel_aantal
INTO v_deel_aantal
FROM ins_deel
WHERE ins_deel_key = v_deel_key;
IF v_deel_aantal <> rec.ins_deel_aantal
THEN
UPDATE ins_deel d
SET ins_deel_aantal = rec.ins_deel_aantal
WHERE d.ins_deel_key = v_deel_key;
fac.trackaction (
'INSUPD',
v_deel_key,
NULL,
NULL,
'Object gewijzigd'
|| CHR (10)
|| 'Hoeveelheid: '
|| v_deel_aantal
|| ' --> '
|| rec.ins_deel_aantal);
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (rec.ins_deel_omschrijving);
END;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('KMMO.import MJOB',
'E',
v_aanduiding || ': ' || v_errormsg,
v_errorhint);
END;
/
--
-- Rondleidingen
--
CREATE OR REPLACE VIEW kmmo_v_rap_rondl_planning
AS
SELECT rrr.res_rsv_ruimte_key,
'R' || rrr.res_reservering_key || '/' || res_rsv_ruimte_volgnr
reservering,
FAC.gettrackingdate ('RESNEW', rrr.res_rsv_ruimte_key)
res_aanmaak,
res_rsv_ruimte_van,
res_rsv_ruimte_tot,
(SELECT fac_usrdata_code
FROM fac_usrdata ud, res_kenmerkwaarde kw
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = 1 -- taal rondleiding
AND fac.safe_to_number (kw.res_kenmerkreservering_waarde) =
ud.fac_usrdata_key)
taal,
rrr.res_rsv_ruimte_omschrijving,
DECODE (rrr.res_status_fo_key,
1, 'Aanvraag',
2, 'Bevestigd',
3, 'Geblokkeerd',
4, 'Vervallen')
res_status,
'Ron' || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr opdracht,
p.prs_perslid_naam_full,
so.mld_statusopdr_omschrijving,
rr.res_ruimte_nr
FROM mld_opdr o,
mld_melding m,
res_rsv_ruimte rrr,
prs_v_perslid_fullnames_all p,
mld_statusopdr so,
res_ruimte rr,
res_ruimte_opstelling ro
WHERE o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_melding_key = m.mld_melding_key
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND rrr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key
AND ro.res_ruimte_key = rr.res_ruimte_key;
CREATE OR REPLACE VIEW kmmo_v_rondleidingen_kijk
AS
SELECT res_rsv_ruimte_van,
res_rsv_ruimte_tot,
res_reservering_key || '/' || res_rsv_ruimte_volgnr res_rsv_ruimte_nr,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_opmerking,
pf.prs_perslid_naam_full,
COALESCE(so.mld_statusopdr_omschrijving, 'Geaccepteerd') mld_statusopdr_omschrijving,
LISTAGG (rd.res_deel_omschrijving, CHR (10))
WITHIN GROUP (ORDER BY rd.res_deel_omschrijving) AS voorzieningen,
ra.res_activiteit_omschrijving,
FLX.getflex ('RES', 82, rrr.res_rsv_ruimte_key) naam,
rrr.res_rsv_ruimte_key
FROM res_rsv_ruimte rrr,
res_activiteit ra,
mld_melding m,
mld_opdr o,
res_rsv_deel rrd,
res_deel rd,
mld_statusopdr so,
prs_v_perslid_fullnames pf,
(SELECT COALESCE (r.res_rsv_ruimte_key, a.res_rsv_ruimte_key) res_rsv_ruimte_key
FROM (SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte rrr
WHERE res_activiteit_key = 30) r
FULL JOIN
(SELECT res_rsv_ruimte_key
FROM res_rsv_ruimte rrr
WHERE EXISTS
(SELECT 1
FROM res_rsv_deel rrd, res_deel rd
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 = 601 -- audiotours en fluistersets
)) a
ON r.res_rsv_ruimte_key = a.res_rsv_ruimte_key) my_rrr
WHERE my_rrr.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_rsv_ruimte_key = m.res_rsv_ruimte_key(+)
AND m.mld_melding_key = o.mld_melding_key(+)
AND rrr.res_rsv_ruimte_key = rrd.res_rsv_ruimte_key(+)
AND rrr.res_activiteit_key = ra.res_activiteit_key(+)
AND rrd.res_deel_key = rd.res_deel_key(+)
AND o.mld_uitvoerende_keys = pf.prs_perslid_key(+)
AND o.mld_statusopdr_key = so.mld_statusopdr_key(+)
AND rrr.res_rsv_ruimte_verwijder IS NULL
AND rrd.res_rsv_deel_verwijder IS NULL
GROUP BY rrr.res_rsv_ruimte_van,
rrr.res_rsv_ruimte_tot,
rrr.res_rsv_ruimte_key,
rrr.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
pf.prs_perslid_naam_full,
so.mld_statusopdr_omschrijving,
rrr.res_rsv_ruimte_omschrijving,
rrr.res_rsv_ruimte_opmerking,
ra.res_activiteit_omschrijving,
rrr.res_rsv_ruimte_key;
CREATE OR REPLACE VIEW kmmo_v_rap_rondl_afwezigheid
AS
SELECT pf.prs_perslid_naam_full rondleider,
m.prs_perslid_key rondleider_key,
m.mld_melding_key,
fac.safe_to_date (flx.getflex ('MLD', 421, m.mld_melding_key),
'dd-mm-yyyy') van,
fac.safe_to_date (flx.getflex ('MLD', 423, m.mld_melding_key),
'dd-mm-yyyy') tot,
CASE
WHEN fac.safe_to_date (
flx.getflex ('MLD', 423, m.mld_melding_key),
'dd-mm-yyyy') >
SYSDATE
THEN
1
ELSE
0
END toekomst
FROM mld_melding m, prs_v_perslid_fullnames_all pf
WHERE mld_stdmelding_key = 261 -- Afwezigheid
AND m.prs_perslid_key = pf.prs_perslid_key;
-- kalender functie voor de rondleiders. Hierin zien ze de eigen opdrachten en de geaccepteerde opdrachten van anderen.
-- verder komen de aangevraagde vrije dagen in het overzicht.
CREATE OR REPLACE VIEW kmmo_rap_cal_rondleiders
AS
SELECT r.prs_perslid_key user_key,
o.mld_melding_key
|| '/'
|| o.mld_opdr_bedrijfopdr_volgnr
|| ' ' || DECODE(SUBSTR(rog.res_ruimte_nr, 1,1), 'V', 'VC', 'B', 'BT', 'T', 'TT') || ' ('
|| so.mld_statusopdr_omschrijving
|| DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '', ' - ' || p.prs_perslid_voornaam)
|| ')' title,
rrr.res_rsv_ruimte_tot tot,
rrr.res_rsv_ruimte_van van,
o.mld_opdr_key item_key,
DECODE (o.mld_statusopdr_key,
1, DECODE(r.prs_srtperslid_key, 1361, '#FF0000','#C0C0C0'), -- Afgewezen rood voor de planner, grijs voor de rondleider
5, DECODE(r.prs_srtperslid_key, 1361, '#0000FF', DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '#0000FF', '#C0C0C0')), -- Toegekend blauw voor de planner en rondleider, grijs voor de rest
6, DECODE(r.prs_srtperslid_key, 1361, '#CC0000','#C0C0C0'), -- Afgemeld donkerrood voor de planner grijs voor de rest
8, DECODE(r.prs_srtperslid_key, 1361, '#008000', DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '#008000', '#C0C0C0'))) color, -- Geaccepteerd groen
DECODE (o.mld_statusopdr_key,
1, '#FFFFFF', -- Afgewezen
5, '#FFFFFF', -- Toegekend
6, '#000000', -- Afgemeld
8, '#FFFFFF') textcolor, -- Geaccepteerd
DECODE(r.prs_perslid_key, o.mld_uitvoerende_keys, '?u=opdracht'
|| CHR (38)
|| 'internal=1'
|| CHR (38)
|| 'k='
|| o.mld_opdr_key) url
FROM mld_opdr o, mld_melding m, res_rsv_ruimte rrr, res_v_ruimte_opstel_gegevens rog, mld_statusopdr so, prs_perslid p,
(SELECT gg.prs_perslid_key, pr.prs_srtperslid_key FROM fac_gebruikersgroep gg, prs_perslid pr WHERE gg.prs_perslid_key = pr.prs_perslid_key AND fac_groep_key = 321) r -- rondleiders
WHERE mld_typeopdr_key = 241 -- rondleidingen
AND o.mld_melding_key = m.mld_melding_key
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrr.res_ruimte_opstel_key = rog.res_ruimte_opstel_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND o.mld_uitvoerende_keys = p.prs_perslid_key
AND o.mld_opdr_einddatum > ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3)
AND NOT (o.mld_statusopdr_key IN (1,6) AND r.prs_perslid_key <> o.mld_uitvoerende_keys)
UNION ALL
SELECT rondleider_key,
'Verlof ' || mld_melding_key,
tot + 1,
DECODE(SIGN(van - ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -1)), -1, ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3), van) van,
mld_melding_key,
'#cc0066',
'#ffffff',
'?u=melding'
|| CHR (38)
|| 'internal=1'
|| CHR (38)
|| 'k='
|| mld_melding_key url
FROM kmmo_v_rap_rondl_afwezigheid
WHERE tot > ADD_MONTHS(TRUNC(SYSDATE, 'MM'), -3);
--
-- Beschikbaarheids kalenders
--
-- afwijkende aanwezigheid die de rondleider via een melding aangeeft.
CREATE OR REPLACE VIEW kmmo_v_mld_beschikb_raw
AS
SELECT m.mld_melding_key,
prs_perslid_key,
DECODE(kmb.mld_kenmerkmelding_waarde, 362, 'Afwezig', 'Aanwezig') beschikbaar ,
TO_DATE(kmdv.mld_kenmerkmelding_waarde || ' ' || DECODE(COALESCE(kmddv.mld_kenmerkmelding_waarde, '341'), '341', '10:15', '13:30'), 'dd-mm-yyyy hh24:mi') van,
TO_DATE(kmdt.mld_kenmerkmelding_waarde || ' ' || DECODE(COALESCE(kmddt.mld_kenmerkmelding_waarde, '342'), '341', '13:30', '17:00'), 'dd-mm-yyyy hh24:mi') tot
FROM mld_melding m,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4741) kmb,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 421) kmdv,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 423) kmdt,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4721) kmddv,
(SELECT mld_melding_key, mld_kenmerkmelding_waarde FROM mld_kenmerkmelding WHERE mld_kenmerk_key = 4222) kmddt
WHERE mld_stdmelding_key = 261 -- melding aan/afwezigheid
AND m.mld_melding_key = kmb.mld_melding_key
AND m.mld_melding_key = kmdv.mld_melding_key
AND m.mld_melding_key = kmdt.mld_melding_key
AND m.mld_melding_key = kmddv.mld_melding_key(+)
AND m.mld_melding_key = kmddt.mld_melding_key(+);
-- vaste beschikbaarheid die bij de persoon geregistreerd staat.
CREATE OR REPLACE VIEW kmmo_v_prs_beschikb_raw
AS
SELECT 1 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1006) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1200) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 2 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1000) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1180) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 3 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1001) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1181) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 4 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1002) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1182) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 5 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1003) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1183) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 6 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1004) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1220) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%'
UNION ALL
SELECT 7 dvdw,
prs_perslid_key,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1005) ochtend,
(SELECT 1
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = p.prs_perslid_key AND kl.prs_kenmerk_key = 1221) middag
FROM prs_perslid p, prs_srtperslid sp
WHERE p.prs_srtperslid_key = sp.prs_srtperslid_key AND sp.prs_srtperslid_omschrijving LIKE 'Rondleider%';
-- Combinatie van persoonlijke beschikbaarheid en de meldingen overrule
CREATE OR REPLACE VIEW kmmo_v_beschikb_raw
AS
WITH
datums
AS
( SELECT TRUNC (SYSDATE) + LEVEL - 1 datum
FROM DUAL
CONNECT BY LEVEL <= 365) -- 1 jaar voorruit
SELECT datums.datum + 41 / 96 van,
datums.datum + 54 / 96 tot,
'ochtend' dagdeel,
pf.prs_perslid_naam_full,
DECODE (ochtend, NULL, 'V', 'W') afw_type,
DECODE (
ochtend,
NULL, DECODE (
(SELECT MAX (1)
FROM kmmo_v_mld_beschikb_raw mbr
WHERE mbr.prs_perslid_key = pbr.prs_perslid_key
AND beschikbaar = 'Aanwezig'
AND datums.datum + 50 / 96 BETWEEN van AND tot),
1, 1,
0),
DECODE (
(SELECT MAX (1)
FROM kmmo_v_mld_beschikb_raw mbr
WHERE mbr.prs_perslid_key = pbr.prs_perslid_key
AND beschikbaar = 'Afwezig'
AND datums.datum + 50 / 96 BETWEEN van AND tot),
1, -1,
1)) beschikbaar,
pf.prs_perslid_key
FROM kmmo_v_prs_beschikb_raw pbr, datums, prs_v_perslid_fullnames pf
WHERE pbr.prs_perslid_key = pf.prs_perslid_key AND TO_CHAR (datums.datum, 'D') = pbr.dvdw
UNION ALL
SELECT datums.datum + 54 / 96 van,
datums.datum + 68 / 96 tot,
'middag' dagdeel,
pf.prs_perslid_naam_full,
DECODE (middag, NULL, 'V', 'W') afw_type,
DECODE (
middag,
NULL, DECODE (
(SELECT MAX (1)
FROM kmmo_v_mld_beschikb_raw mbr
WHERE mbr.prs_perslid_key = pbr.prs_perslid_key
AND beschikbaar = 'Aanwezig'
AND datums.datum + 60 / 96 BETWEEN van AND tot),
1, -1,
0),
DECODE (
(SELECT MAX (1)
FROM kmmo_v_mld_beschikb_raw mbr
WHERE mbr.prs_perslid_key = pbr.prs_perslid_key
AND beschikbaar = 'Afwezig'
AND datums.datum + 60 / 96 BETWEEN van AND tot),
1, 0,
1)) beschikbaar,
pf.prs_perslid_key
FROM kmmo_v_prs_beschikb_raw pbr, datums, prs_v_perslid_fullnames pf
WHERE pbr.prs_perslid_key = pf.prs_perslid_key AND TO_CHAR (datums.datum, 'D') = pbr.dvdw;
-- aanwezigheidskalender
CREATE OR REPLACE VIEW kmmo_rap_cal_rondl_aanwezig
AS
SELECT NULL user_key,
prs_perslid_naam_full title,
tot,
van,
DECODE (
(SELECT COUNT (*)
FROM mld_opdr
WHERE mld_statusopdr_key NOT IN (1, 2) -- afgewezen , niet akkoord
AND mld_uitvoerende_keys = r.prs_perslid_key
AND mld_opdr_plandatum BETWEEN van AND tot - 1 / (24 * 60)),
'0', '#008000',
'#00CCCC') color, -- Geaccepteerd groen
'#FFFFFF' textcolor, -- Geaccepteerd
NULL url,
NULL item_key
FROM kmmo_v_beschikb_raw r
WHERE beschikbaar = 1
UNION ALL
SELECT NULL user_key,
prs_perslid_naam_full title,
res_rsv_ruimte_tot tot,
res_rsv_ruimte_van + 1 / (24 * 60 * 60) van,
'#FF8800' color, -- opdracht gevonden oranje
'#FFFFFF' textcolor,
'?u=opdracht' || CHR (38) || 'k=' || o.mld_opdr_key url,
o.mld_opdr_key item_key
FROM mld_opdr o,
prs_v_perslid_fullnames pf,
mld_melding m,
res_rsv_ruimte rrr
WHERE o.mld_melding_key = m.mld_melding_key
AND m.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND o.mld_uitvoerende_keys = pf.prs_perslid_key
AND o.mld_opdr_plandatum BETWEEN TRUNC (SYSDATE) AND SYSDATE + 365;
CREATE OR REPLACE VIEW kmmo_rap_cal_rondl_afw
AS
SELECT NULL user_key,
prs_perslid_naam_full title,
tot,
van,
DECODE (beschikbaar, -1, '#FF8800', '#666666') color, -- Werktijden grijs, vakantie oranje
'#FFFFFF' textcolor, -- Wit
NULL url,
NULL item_key
FROM kmmo_v_beschikb_raw r
WHERE beschikbaar <> 1;
-- Kalender voor de backoffice rondleidingen om te zien wie wanneer vakantie heeft.
CREATE OR REPLACE VIEW kmmo_rap_cal_vakantie
AS
SELECT NULL user_key,
m.mld_melding_key || ' ' || p.prs_perslid_voornaam title,
tot + 1 tot,
van,
m.mld_melding_key item_key,
'#008000' color,
'#FFFFFF' textcolor,
'?u=melding'
|| CHR (38)
|| 'internal=1'
|| CHR (38)
|| 'k='
|| m.mld_melding_key url
FROM kmmo_v_rap_rondl_afwezigheid m, prs_perslid p
WHERE m.rondleider_key = p.prs_perslid_key
AND tot > ADD_MONTHS (TRUNC (SYSDATE, 'MM'), -3);
-- view om te zien welke reservering facturabel is. Dat betekent dat <20><>n van de rsv_ruimtes het kenmerk facturabel op 1 heeft staan.
CREATE OR REPLACE VIEW kmmo_v_res_facturabel
AS
SELECT rrr.res_reservering_key
FROM res_rsv_ruimte rrr, res_kenmerk rk
WHERE rrr.res_rsv_ruimte_verwijder IS NULL
AND rk.res_srtkenmerk_key = 101
AND rrr.res_activiteit_key = rk.res_activiteit_key
AND COALESCE (
flx.getflex ('RES',
rk.res_kenmerk_key,
rrr.res_rsv_ruimte_key),
'0') =
'1'
GROUP BY rrr.res_reservering_key;
-- View om te rapporteren welke factuur bevroren mag worden via de export.
CREATE OR REPLACE VIEW kmmo_v_rap_res_factuurstatus
AS
SELECT r.res_reservering_key,
r.res_rsv_ruimte_volgnr,
r.res_reservering_key || '/' || r.res_rsv_ruimte_volgnr res_nr,
r.type,
r.res_rsv_ruimte_van,
r.res_rsv_ruimte_omschrijving,
bo.res_status_bo_omschrijving,
bo.res_status_bo_key,
r.res_rsv_ruimte_key,
f.factuur_nummer,
f.export_datum,
prijs_inc,
prijs_ex,
btw_h,
btw_l
FROM (SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'R' type,
res_rsv_ruimte_van,
res_rsv_ruimte_omschrijving,
res_status_bo_key,
rrr.res_rsv_ruimte_key,
res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0) prijs_inc,
(res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0)) / 1.21 prijs_ex,
21 * (res_rsv_ruimte_prijs - COALESCE(res_rsv_ruimte_korting, 0)) / 121 btw_h,
0 btw_l
FROM kmmo_v_res_facturabel f, res_rsv_ruimte rrr
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
UNION ALL
SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'D' type,
res_rsv_ruimte_van,
COUNT (*) || ' * ' || res_deel_omschrijving,
MIN (rrd.res_status_bo_key),
rrr.res_rsv_ruimte_key,
count(*) * res_rsv_deel_prijs,
count(*) * res_rsv_deel_prijs / 1.21,
count(*) * 21 * res_rsv_deel_prijs / 121,
0
FROM kmmo_v_res_facturabel f,
res_rsv_ruimte rrr,
res_rsv_deel rrd,
res_deel rd
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
AND rrd.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rrd.res_rsv_deel_verwijder IS NULL
AND rrd.res_deel_key = rd.res_deel_key
GROUP BY f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
res_rsv_ruimte_van,
res_deel_omschrijving,
rrr.res_rsv_ruimte_key,
res_rsv_deel_prijs
UNION ALL
SELECT f.res_reservering_key,
rrr.res_rsv_ruimte_volgnr,
'A' type,
res_rsv_ruimte_van,
res_rsv_artikel_aantal || ' * ' || res_artikel_omschrijving,
rra.res_status_bo_key,
rrr.res_rsv_ruimte_key,
rra.res_rsv_artikel_prijs,
res_rsv_artikel_prijs / (1 + ra.res_artikel_btw /100),
DECODE(ra.res_artikel_btw, 21, 21, 0) * res_rsv_artikel_prijs / (100 + (DECODE(ra.res_artikel_btw, 21, 21, 0))),
DECODE(ra.res_artikel_btw, 9, 9, 0) * res_rsv_artikel_prijs / (100 + (DECODE(ra.res_artikel_btw, 9, 9, 0)))
FROM kmmo_v_res_facturabel f,
res_rsv_ruimte rrr,
res_rsv_artikel rra,
res_artikel ra
WHERE res_rsv_ruimte_verwijder IS NULL
AND f.res_reservering_key = rrr.res_reservering_key
AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND rra.res_rsv_artikel_verwijder IS NULL
AND rra.res_artikel_key = ra.res_artikel_key) r,
res_status_bo bo,
(SELECT res_reservering_key, MAX(res_kenmerkreservering_waarde) factuur_nummer, MAX(res_kenmerkwaarde_aanmaak) export_datum
FROM res_kenmerkwaarde kw, res_kenmerk k, res_rsv_ruimte rrr
WHERE kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
AND kw.res_kenmerk_key = k.res_kenmerk_key
AND k.res_srtkenmerk_key = 102 -- Factuur
GROUP BY res_reservering_key) f
WHERE r.res_status_bo_key = bo.res_status_bo_key
AND r.res_reservering_key = f.res_reservering_key(+);
-- factuur export. Tijdens de export wordt het factuurnummer bepaald. Dit nummer zit in de reeks xx-yyy. Hierbij is xx het jaar
-- waarop de factuur is aangemaakt en yyy is een volgnummer tussen de 700 en 899. In een nieuw jaar wordt weer bij 700 begonnen.
-- welke reservering is helemaal afgemeld (5). Er mogen dus geen items meer open staan.
CREATE OR REPLACE VIEW kmmo_v_export_res_facturen
(
result,
result_order
)
AS
SELECT res_reservering_key
|| ';'
|| ROUND (SUM (prijs_inc), 2)
|| ';'
|| ROUND (SUM (prijs_ex), 2)
|| ';'
|| ROUND (SUM (btw_h), 2)
|| ';'
|| ROUND (SUM (btw_l), 2),
res_reservering_key
FROM kmmo_v_rap_res_factuurstatus fs
WHERE NOT EXISTS
(SELECT 1
FROM kmmo_v_rap_res_factuurstatus fs2
WHERE fs.res_reservering_key = fs2.res_reservering_key
AND res_status_bo_key <> 5)
GROUP BY res_reservering_key;
CREATE OR REPLACE PROCEDURE kmmo_export_res_facturen (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2)
AS
CURSOR c IS
SELECT DISTINCT res_rsv_ruimte_key, res_reservering_key, res_rsv_ruimte_volgnr
FROM kmmo_v_rap_res_factuurstatus fs
WHERE NOT EXISTS
(SELECT 1
FROM kmmo_v_rap_res_factuurstatus fs2
WHERE fs.res_reservering_key =
fs2.res_reservering_key
AND res_status_bo_key <> 5) -- Afgemeld
ORDER BY res_reservering_key, res_rsv_ruimte_volgnr;
v_factuurnr NUMBER;
v_kenmerk_key NUMBER;
v_reservering_key_prev NUMBER;
BEGIN
BEGIN
SELECT MAX (
fac.safe_to_number (
SUBSTR (res_kenmerkreservering_waarde, 4, 100)))
+ 1
INTO v_factuurnr
FROM res_kenmerk k, res_kenmerkwaarde kw
WHERE res_srtkenmerk_key = 102 -- Factuurnummer
AND k.res_kenmerk_key = kw.res_kenmerk_key
AND SUBSTR (res_kenmerkreservering_waarde, 1, 2) =
TO_CHAR (SYSDATE, 'YY');
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_factuurnr := 700;
END;
IF v_factuurnr IS NULL
THEN
v_factuurnr := 700;
END IF;
v_reservering_key_prev := -1;
FOR rec IN c
LOOP
BEGIN
IF rec.res_reservering_key <> v_reservering_key_prev
THEN
SELECT res_kenmerk_key
INTO v_kenmerk_key
FROM res_kenmerk k, res_rsv_ruimte rrr
WHERE k.res_srtkenmerk_key = 102 -- Factuurnummer
AND rrr.res_activiteit_key = k.res_activiteit_key
AND rrr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
FLX.setflex ('RES',
v_kenmerk_key,
rec.res_rsv_ruimte_key,
TO_CHAR (SYSDATE, 'YY') || '.' || v_factuurnr);
SELECT res_kenmerk_key
INTO v_kenmerk_key
FROM res_kenmerk k, res_rsv_ruimte rrr
WHERE k.res_srtkenmerk_key = 141 -- Factuurdatum
AND rrr.res_activiteit_key = k.res_activiteit_key
AND rrr.res_rsv_ruimte_key = rec.res_rsv_ruimte_key;
FLX.setflex ('RES',
v_kenmerk_key,
rec.res_rsv_ruimte_key,
TO_CHAR (SYSDATE, 'DD-MM-YYYY'));
v_reservering_key_prev := rec.res_reservering_key;
v_factuurnr := v_factuurnr + 1;
END IF;
UPDATE res_rsv_artikel
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_artikel_verwijder IS NULL;
UPDATE res_rsv_deel
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_deel_verwijder IS NULL;
UPDATE res_rsv_ruimte
SET res_status_bo_key = 6 -- Verwerkt
WHERE res_rsv_ruimte_key = rec.res_rsv_ruimte_key
AND res_rsv_ruimte_verwijder IS NULL;
END;
END LOOP;
END;
/
-- Notificaties voor meldingen waarbij de acceptatietijd en/of de uitvoertijd verstreken is.
CREATE OR REPLACE VIEW kmmo_v_mld_sla_telaat
AS
SELECT gg.prs_perslid_key extra_key,
'Uitvoer' type_telaat,
m.mld_melding_onderwerp onderwerp,
d.ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving stdmelding,
m.mld_melding_key key
FROM mld_melding m,
mld_stdmelding std,
fac_groeprechten gr,
fac_functie f,
fac_groep g,
fac_gebruikersgroep gg,
mld_discipline d,
mld_disc_params dp
WHERE TRUNC (mld_melding_einddatum) <= TRUNC (SYSDATE) - mld_disc_params_noti_dagen
AND mld_melding_status not in (1, 5, 6) -- afgewezen, afgemeld, historie
AND gr.fac_groep_key = g.fac_groep_key
AND gr.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_MLDBOF'
AND fac_gebruiker_alg_level_write <> 9 -- Je moet wel kunnen schrijven
AND g.fac_groep_key = gg.fac_groep_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = gr.ins_discipline_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = dp.mld_ins_discipline_key
AND dp.mld_disc_params_noti_dagen IS NOT NULL
UNION ALL
SELECT gg.prs_perslid_key xkey,
'Acceptatie' type_telaat,
m.mld_melding_onderwerp onderwerp,
d.ins_discipline_omschrijving || '/' || mld_stdmelding_omschrijving stdmelding,
m.mld_melding_key key
FROM mld_melding m,
mld_stdmelding std,
fac_groeprechten gr,
fac_functie f,
fac_groep g,
fac_gebruikersgroep gg,
mld_discipline d,
mld_disc_params dp
WHERE TRUNC (mld_melding_acceptdatum_std) <= TRUNC (SYSDATE) - mld_disc_params_noti_dagen
AND mld_melding_acceptdatum_std IS NOT NULL
AND mld_melding_status IN (2, 3) -- Nieuw of te accepteren
AND gr.fac_groep_key = g.fac_groep_key
AND gr.fac_functie_key = f.fac_functie_key
AND f.fac_functie_code = 'WEB_MLDBOF'
AND fac_gebruiker_alg_level_write <> 9 -- Je moet wel kunnen schrijven
AND g.fac_groep_key = gg.fac_groep_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = gr.ins_discipline_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_discipline_key = dp.mld_ins_discipline_key
AND dp.mld_disc_params_noti_dagen IS NOT NULL;
CREATE OR REPLACE VIEW kmmo_v_noti_mld_sla_telaat
AS
SELECT 'CUST01' code,
NULL sender,
extra_key receiver,
'Meldingen niet op tijd geaccepteerd en/of afgehandeld ' text,
381 key, -- Rapport meldingen over sla
extra_key xkey
FROM kmmo_v_mld_sla_telaat
WHERE TO_CHAR(SYSDATE, 'D') NOT IN (1, 7) -- Niet op zaterdag en zondag
GROUP BY extra_key;
-- Klachtenafhandeling
CREATE OR REPLACE VIEW kmmo_v_afzender_klachten
AS
SELECT p.prs_perslid_key, pf.prs_perslid_naam_friendly, p.prs_perslid_verwijder, sp.prs_srtperslid_omschrijving, ud.fac_usrdata_omschr afz_info
FROM prs_perslid p, prs_v_perslid_fullnames_all pf, prs_kenmerklink kl, prs_srtperslid sp, fac_usrdata ud
WHERE p.prs_perslid_key = kl.prs_link_key
AND kl.prs_kenmerk_key = 1100 -- Zichtbaarheid klachtenafhandeling
AND p.prs_perslid_key = pf.prs_perslid_key
AND p.prs_srtperslid_key = sp.prs_srtperslid_key
AND FAC.safe_to_number(kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key;
-- KMMO#82168 Rapportage klachtenafhandeling
CREATE OR REPLACE VIEW kmmo_v_rap_klachten_feedback
AS
SELECT m.mld_melding_datum,
d.ins_discipline_omschrijving,
std.mld_stdmelding_omschrijving,
-- LISTAGG (n.omschrijving, CHR (10)) WITHIN GROUP (ORDER BY n.mld_melding_key, n.mld_melding_note_wijzigdatum) logline
LISTAGG (n.omschrijving, CHR (10)) WITHIN GROUP (ORDER BY n.mld_melding_key, n.mld_melding_note_wijzigdatum) logline,
fac.count_Work_Days_InclTime(mld_melding_datum, COALESCE(MLD.getmeldingstatusdate(m.mld_melding_key, 5), sysdate)) doorlooptijd,
MLD.getmeldingstatusdate(m.mld_melding_key, 5) datumafgemeld,
s.mld_statuses_omschrijving
FROM mld_melding m,
mld_stdmelding std,
mld_statuses s,
mld_discipline d,
(SELECT TO_CHAR (mld_melding_note_wijzigdatum, 'dd-mm-yyyy hh24:mi:ss')
|| ' ('
|| mld_melding_key
|| ')'
|| CHR (10)
|| mld_melding_note_omschrijving omschrijving,
mld_melding_key,
mld_melding_note_wijzigdatum
FROM mld_melding_note) n
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = 2
AND m.mld_melding_key = n.mld_melding_key(+)
AND m.mld_melding_status = s.mld_statuses_key
GROUP BY d.ins_discipline_omschrijving, std.mld_stdmelding_omschrijving, m.mld_melding_key, mld_melding_datum, s.mld_statuses_omschrijving;
------ 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