1010 lines
46 KiB
SQL
1010 lines
46 KiB
SQL
-- Script containing customer specific configuration sql statements for plat: Medux
|
|
-- (c) 2014 SG|facilitor
|
|
-- $Revision$
|
|
-- $Id$
|
|
--
|
|
-- Support: +31 53 4800710
|
|
|
|
set echo on
|
|
|
|
spool plat.lst
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- ALG Onroerend Goed 1 import (locaties + gebouwen)
|
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_post_import_onrgoed1 (p_import_key IN NUMBER)
|
|
AS
|
|
v_errorhint VARCHAR2 (400);
|
|
BEGIN
|
|
v_errorhint := 'plat_post_import_onrgoed1';
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_import_onrgoed1 (p_import_key IN NUMBER)
|
|
AS
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
v_errormsg VARCHAR2 (400);
|
|
v_errorhint VARCHAR2 (400);
|
|
BEGIN
|
|
|
|
|
|
v_errorhint := 'plat_import_onrgoed1';
|
|
|
|
fac_import_onrgoed1(p_import_key);
|
|
COMMIT;
|
|
|
|
-- After import korrektie gebeurt nu...
|
|
plat_post_import_onrgoed1(p_import_key);
|
|
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
|
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
|
END plat_import_onrgoed1;
|
|
/
|
|
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_post_onrgoed1_exploitatie (p_import_key IN NUMBER, p_max_alg_gebouw_key IN NUMBER)
|
|
AS
|
|
v_errorhint VARCHAR2 (400);
|
|
v_count_tot NUMBER(10);
|
|
v_errormsg VARCHAR2 (400);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
|
|
|
|
-- locatiecode is uniek (over de hele DB heen), en gebouwcode is uniek binnen de locatiecode.
|
|
-- Let op: locatiecode is in DB in UPPER, gebouwcode is in DB niet upper, die staat in de kolom alg_gebouw_upper.
|
|
|
|
-- Alle locaties met hun gebouwen in de database die NIET in het importbestand staan, en die dus kunnen worden verwijderd.
|
|
-- Als die de vorige keer niet verwijderd was, want dan blijven we verwijderen natuurlijk, 1x is genoeg.
|
|
-- De vorige verwijderd betekent (tot nu toe gekozen) dat vervaldatum in het verleden ligt; zie TODO hieronder bij het zetten van de vervaldatum (ipv verwijderdatum).
|
|
|
|
CURSOR c1
|
|
IS
|
|
SELECT l.alg_locatie_key, l.alg_locatie_code, g.alg_gebouw_key, g.alg_gebouw_code, g.alg_gebouw_upper
|
|
FROM alg_locatie l, alg_gebouw g
|
|
WHERE g.alg_locatie_key = l.alg_locatie_key
|
|
AND l.alg_locatie_verwijder IS NULL
|
|
AND g.alg_gebouw_verwijder IS NULL
|
|
AND COALESCE(g.alg_gebouw_vervaldatum,SYSDATE) >= SYSDATE
|
|
AND NOT EXISTS (SELECT 'x' FROM fac_imp_onrgoed1 og
|
|
WHERE UPPER(og.alg_locatie_code) = l.alg_locatie_code
|
|
AND UPPER(og.alg_gebouw_code) = g.alg_gebouw_upper);
|
|
BEGIN
|
|
-- Alle gebouwen krijgen een alg-gebouw_vervaldatum als deze is gevuld in kolom S (flexprop 'Eindjaar' met alg_kenmerk_key = 2).
|
|
v_errorhint := 'plat_post_onrgoed1_exploitatie';
|
|
|
|
-- Werk alle vervaldatums van de gebouwen bij die nog in de DB staan met de waarde uit kenmerk 'Einde exploitatie' (key 2) die bij de locatie (van het gebouw) staat geregistreerd.
|
|
-- In kenmerk 'Einde exploitatie' staat het jaartal van einde, die gaan we nog voorzien van de laatste dag in dat jaar, oftewel '31 dec'
|
|
UPDATE alg_gebouw g
|
|
SET g.alg_gebouw_vervaldatum = (SELECT fac.safe_to_date('31-12-' || alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy')
|
|
FROM alg_onrgoedkenmerk ok
|
|
WHERE ok.alg_onrgoed_key = g.alg_locatie_key
|
|
AND ok.alg_onrgoed_niveau = 'L'
|
|
AND ok.alg_kenmerk_key = 2
|
|
AND ok.alg_onrgoedkenmerk_verwijder IS NULL)
|
|
WHERE g.alg_gebouw_verwijder IS NULL;
|
|
|
|
FOR rec IN c1
|
|
LOOP
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'I',
|
|
'Gebouw ' || rec.alg_gebouw_code || '(locatie ' || rec.alg_locatie_code || ') is verwijderd cq. vervaldatum op vorig jaar gezet: ' || 'gebouw key=[' || TO_CHAR(rec.alg_gebouw_key) || ']',
|
|
'');
|
|
-- We gaan het gebouw niet verwijderen, wellicht komt dat nog (TODO),
|
|
-- want voor het verwijderen van gebouw moeten ALLE onderliggende zaken (controles, objecten, ruimten, verdiepingen) eerst worden verwijderd.
|
|
-- Iets too much voor dit moment, en eh..., je bent die historie ook direct kwijt.
|
|
|
|
-- Dus vooralsnog zetten we hier de einde exploitatietijd met de huidige jaartal MINUS 1, op 31 dec (dus vandaag = 10 aug 2016, dan vervaldatum = 31 dec 2015)
|
|
UPDATE alg_gebouw
|
|
-- SET alg_gebouw_verwijder = SYSDATE
|
|
SET alg_gebouw_vervaldatum = to_date('31-12-' || (TO_CHAR(SYSDATE,'YYYY') - 1), 'dd-mm-yyyy')
|
|
WHERE alg_gebouw_key = rec.alg_gebouw_key;
|
|
END LOOP;
|
|
|
|
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
|
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
|
END plat_post_onrgoed1_exploitatie;
|
|
/
|
|
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_post_update_onrgoed1 (p_import_key IN NUMBER, p_max_alg_gebouw_key IN NUMBER)
|
|
AS
|
|
v_errorhint VARCHAR2 (400);
|
|
v_errormsg VARCHAR2 (400);
|
|
v_count_tot NUMBER(10);
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
|
|
|
|
BEGIN
|
|
v_errorhint := 'plat_post_update_onrgoed1';
|
|
|
|
-- Voor alle gebouwen willen we de einddatum / einde exploitatie (alg_gebouw_vervaldatum) updaten.
|
|
-- Uitdaging is dat de import
|
|
|
|
plat_post_onrgoed1_exploitatie (p_import_key, p_max_alg_gebouw_key);
|
|
|
|
|
|
-- Alleen voor de nieuwe gebouwen moeten we 1 (dummy) verdieping en 1 (dummy) ruimte toevoegen...
|
|
|
|
-- Dus Dummy verdieping voor elk toegevoegd alg_gebouw (dus waar alg_gebouw_key > p_max_alg_gebouw_key)
|
|
INSERT INTO alg_verdieping (alg_gebouw_key, alg_verdieping_omschrijving, alg_verdieping_code, alg_verdieping_volgnr)
|
|
SELECT alg_gebouw_key, '-', '_-', 0
|
|
FROM alg_gebouw
|
|
WHERE alg_gebouw_key > p_max_alg_gebouw_key;
|
|
|
|
|
|
SELECT COUNT(*)
|
|
INTO v_count_tot
|
|
FROM alg_verdieping
|
|
WHERE alg_gebouw_key > p_max_alg_gebouw_key;
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'S',
|
|
'Verdieping/#toegevoegd: ' || TO_CHAR (v_count_tot),
|
|
'');
|
|
|
|
-- Dummy ruimte voor elk toegevoegd dummy alg_verdieping (dus waar alg_gebouw_key > p_max_alg_gebouw_key)
|
|
INSERT INTO alg_ruimte (alg_verdieping_key, alg_ruimte_nr)
|
|
SELECT alg_verdieping_key, '_1' FROM alg_verdieping
|
|
WHERE alg_gebouw_key > p_max_alg_gebouw_key;
|
|
|
|
SELECT COUNT(*)
|
|
INTO v_count_tot
|
|
FROM alg_ruimte
|
|
WHERE alg_verdieping_key IN (SELECT alg_verdieping_key
|
|
FROM alg_verdieping
|
|
WHERE alg_gebouw_key > p_max_alg_gebouw_key);
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'S',
|
|
'Ruimte/#toegevoegd: ' || TO_CHAR (v_count_tot),
|
|
'');
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
|
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
|
END plat_post_update_onrgoed1;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_update_onrgoed1 (
|
|
p_import_key IN NUMBER
|
|
) IS
|
|
|
|
v_count NUMBER;
|
|
v_max_alg_gebouw_key NUMBER(10);
|
|
BEGIN
|
|
|
|
-- Even snel registreren wat de laatst toegevoegde alg_gebouw is, dan weten we dat er door deze import-procedure wordt toegevoegd (alles > dan deze max).
|
|
SELECT coalesce(max(alg_gebouw_key),0)
|
|
INTO v_max_alg_gebouw_key
|
|
FROM alg_gebouw
|
|
WHERE alg_gebouw_verwijder IS NULL;
|
|
|
|
|
|
fac_update_onrgoed1(p_import_key);
|
|
|
|
-- After update ...
|
|
plat_post_update_onrgoed1(p_import_key, v_max_alg_gebouw_key);
|
|
|
|
END plat_update_onrgoed1;
|
|
/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
-- Objecten import
|
|
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_post_import_ins (p_import_key IN NUMBER)
|
|
AS
|
|
v_errorhint VARCHAR2 (400);
|
|
BEGIN
|
|
v_errorhint := 'plat_post_import_ins';
|
|
END;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_import_ins (p_import_key IN NUMBER)
|
|
AS
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
v_errormsg VARCHAR2 (400);
|
|
v_errorhint VARCHAR2 (400);
|
|
BEGIN
|
|
|
|
|
|
v_errorhint := 'plat_import_ins';
|
|
-- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
|
|
|
|
fac_import_ins (p_import_key);
|
|
COMMIT;
|
|
|
|
-- After import korrektie gebeurt nu...
|
|
plat_post_import_ins(p_import_key);
|
|
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
|
v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
|
|
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
|
END plat_import_ins;
|
|
/
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_post_update_ins (p_import_key IN NUMBER, p_max_ins_srtdeel_key IN NUMBER, p_max_ins_deel_key IN NUMBER)
|
|
AS
|
|
oracle_err_num NUMBER;
|
|
oracle_err_mes VARCHAR2 (200);
|
|
v_errormsg VARCHAR2 (400);
|
|
v_errorhint VARCHAR2 (400);
|
|
|
|
v_receptnr VARCHAR2 (1000);
|
|
v_kosten VARCHAR2 (1000);
|
|
v_periode VARCHAR2 (1000);
|
|
v_perc_onderhoud VARCHAR2 (1000);
|
|
|
|
v_ctr_discipline_key NUMBER(10);
|
|
|
|
v_fin_btwtabelwaarde_key fin_btwtabelwaarde.fin_btwtabelwaarde_key%TYPE;
|
|
|
|
l_kosten ins_srtcontrole.ins_srtcontrole_materiaal%TYPE;
|
|
l_periode ins_srtcontrole.ins_srtcontrole_periode%TYPE;
|
|
l_perc_onderhoud ins_srtcontrole.ins_srtcontrole_percentage%TYPE;
|
|
|
|
v_mx_ins_srtcontroledl_xcp_key NUMBER(10);
|
|
|
|
v_kpn_bestaat NUMBER(10);
|
|
|
|
|
|
-- Flexprops in de FIP-INS Excelsheet
|
|
-- ins_kenmerkwaarde Flexprop
|
|
-- 1 Receptnummer } Srtcontrole
|
|
-- 2 Receptomschrijving }
|
|
-- 3 Totaalbedr.
|
|
-- 4 StJr
|
|
-- 5 Duur
|
|
-- 6 EiJr
|
|
-- 7 ExJr
|
|
-- 8 VvJr
|
|
-- 9 Aant. Aanw. } Aantal geregistreerde objecten
|
|
-- 10 Perc. Onderh } Percentage van dat aantal (vorige kolom) dat voor onderhoud cyclus in aanmerking komt, default 100%
|
|
-- 11 Aantal niet
|
|
-- 12 Aant.Overh.
|
|
-- 13 Eh. } Eenheid --> Stoppen we nu in standaard kolom Eenheid (kolom I)
|
|
-- 14 Cycl
|
|
-- 15 Fo
|
|
-- 16 Fonds
|
|
-- 17 kenmerk17
|
|
-- 18 kenmerk18
|
|
-- 19 kenmerk19
|
|
-- 20 kenmerk20
|
|
|
|
-- LET OP: WE GAAN ERVAN UIT DAT bij een Receptnummer (1) altijd dezelfde Receptomschrijving(2) en Eenheid (13) horen. M.a.w. bij 2 regels Receptnr (1) zijn (2) en (13) ook gelijk.
|
|
|
|
|
|
CURSOR c1
|
|
IS -- receptnummer, receptomschrijving,
|
|
SELECT DISTINCT(ins_kenmerkwaarde1)
|
|
FROM fac_imp_ins
|
|
order by ins_kenmerkwaarde1;
|
|
|
|
-- Alle geimporteerde regels (objecten met controles) die nog geen standaard srtcontrole hebben, en dus een uitzondering controle (xcp) moeten krijgen.
|
|
CURSOR c2 (p_max_ins_deel_key NUMBER, p_receptnr VARCHAR2, p_kosten VARCHAR2, p_periode VARCHAR2, p_perc_onderhoud VARCHAR2)
|
|
IS
|
|
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, ins_kenmerkwaarde14 periode, 4,
|
|
fac.safe_to_number(replace(replace(ins_kenmerkwaarde3, '.'), ',','.')) kosten, fac.safe_to_number(replace(replace(ins_kenmerkwaarde10, '.'), ',','.')) perc_onderhoud,
|
|
fac.safe_to_date('01-01-' || ins_kenmerkwaarde8 ,'dd-mm-yyyy') verval_datum
|
|
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
|
|
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
|
|
AND i.alg_locatie_code = l.alg_locatie_code
|
|
AND i.alg_gebouw_code = g.alg_gebouw_code
|
|
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
|
|
AND i.alg_ruimte_nr = r.alg_ruimte_nr
|
|
AND d.ins_alg_ruimte_type = 'R'
|
|
AND d.ins_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 d.ins_deel_key > p_max_ins_deel_key
|
|
AND i.ins_kenmerkwaarde1 = p_receptnr
|
|
AND (i.ins_kenmerkwaarde3 <> p_kosten OR i.ins_kenmerkwaarde14 <> p_periode OR i.ins_kenmerkwaarde10 <> p_perc_onderhoud)
|
|
AND i.ins_kenmerkwaarde3 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde14 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde10 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde1 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 );
|
|
|
|
-- Alle geimporteerde regels (objecten met controles) die NA cursor C2 een standaard srtcontrole hebben gekregen, maar eigenlijk toch een uitzondering controle (xcp) moeten krijgen vanwege vervaljaar via cursor 6.
|
|
-- Dus alle record met een gevuld vervaljaar (ins_kenmerkwaarde8) krijgen een xcp.
|
|
CURSOR c6 (p_max_ins_deel_key NUMBER, p_receptnr VARCHAR2, p_kosten VARCHAR2, p_periode VARCHAR2, p_perc_onderhoud VARCHAR2)
|
|
IS
|
|
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, ins_kenmerkwaarde14 periode, 4,
|
|
fac.safe_to_number(replace(replace(ins_kenmerkwaarde3, '.'), ',','.')) kosten, fac.safe_to_number(replace(replace(ins_kenmerkwaarde10, '.'), ',','.')) perc_onderhoud,
|
|
fac.safe_to_date('01-01-' || ins_kenmerkwaarde8 ,'dd-mm-yyyy') verval_datum
|
|
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
|
|
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
|
|
AND i.alg_locatie_code = l.alg_locatie_code
|
|
AND i.alg_gebouw_code = g.alg_gebouw_code
|
|
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
|
|
AND i.alg_ruimte_nr = r.alg_ruimte_nr
|
|
AND d.ins_alg_ruimte_type = 'R'
|
|
AND d.ins_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 d.ins_deel_key > p_max_ins_deel_key
|
|
AND i.ins_kenmerkwaarde1 = p_receptnr
|
|
AND i.ins_kenmerkwaarde3 = p_kosten
|
|
AND i.ins_kenmerkwaarde14 = p_periode
|
|
AND i.ins_kenmerkwaarde10 = p_perc_onderhoud
|
|
AND i.ins_kenmerkwaarde3 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde14 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde10 IS NOT NULL
|
|
AND i.ins_kenmerkwaarde1 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 )
|
|
AND i.ins_kenmerkwaarde8 IS NOT NULL;
|
|
|
|
CURSOR c4 (p_max_ins_srtcontroledl_xcp NUMBER)
|
|
IS
|
|
SELECT ins_srtcontroledl_xcp_key, ins_deel_key, c.ins_srtcontrole_key, ins_srtcontrole_omschrijving,
|
|
CASE
|
|
WHEN ins_srtcontrole_materiaal IS NOT NULL AND ins_srtcontroledl_xcp_materia IS NOT NULL AND ins_srtcontrole_materiaal = ins_srtcontroledl_xcp_materia
|
|
THEN 1
|
|
ELSE 0
|
|
END set_materia_null,
|
|
CASE
|
|
WHEN ins_srtcontrole_periode IS NOT NULL AND ins_srtcontroledl_xcp_periode IS NOT NULL AND ins_srtcontrole_periode = ins_srtcontroledl_xcp_periode
|
|
THEN 1
|
|
ELSE 0
|
|
END set_periode_null,
|
|
CASE
|
|
WHEN ins_srtcontrole_percentage IS NOT NULL AND ins_srtcontroledl_xcp_perc IS NOT NULL AND ins_srtcontrole_percentage = ins_srtcontroledl_xcp_perc
|
|
THEN 1
|
|
ELSE 0
|
|
END set_perc_onderhoud_null
|
|
FROM ins_srtcontrole c, ins_srtcontroledl_xcp x
|
|
WHERE x.ins_srtcontroledl_xcp_key > p_max_ins_srtcontroledl_xcp
|
|
AND x.ins_srtcontrole_key = c.ins_srtcontrole_key;
|
|
|
|
|
|
-- Let op: de eenheid kolom I wordt (itt hetgeen ik dacht) niet in ins_srtdeel_eenheid verwerkt, maar in res_deel_eenheid.
|
|
-- Verder: ins_srtdeel_code is verder helemaal NIET uniek, niet over de DB, niet per discipline en/of groep.
|
|
-- We kunnen daarom volstaan door hier verder ook niet te groeperen op discipline of iets dergelijks, we gaan gewoon op objectsoort-code groeperen, en ze krijgen allen dezelfde eenheid.
|
|
CURSOR c3
|
|
IS
|
|
SELECT ins_srtdeel_code, res_deel_eenheid
|
|
FROM fac_imp_ins
|
|
GROUP BY ins_srtdeel_code, res_deel_eenheid;
|
|
|
|
-- Fondscodes/Projectgroepen gaan we als (gebouw)kostenplaatsen opvoeren
|
|
CURSOR c5
|
|
IS
|
|
SELECT ins_kenmerkwaarde15, ins_kenmerkwaarde16
|
|
FROM fac_imp_ins
|
|
GROUP BY ins_kenmerkwaarde15, ins_kenmerkwaarde16;
|
|
|
|
-- Ten slotte hebben we ook nog de handmatige verschuivingen vanuit Tobias TMJ of StraVIS die komen overwaaien, die willen we niet verloren laten gaan.
|
|
-- B.v. alle schilderwerk is naar jaar 2018 verschoven, die willen we niet verloren laten gaan, daarvoor maken we ins_deelsrtcontrole records aan met een plandatum [ins_deelsrtcontrole_plandatum] aan, te weten
|
|
-- voor ieder record fac_imp_ins met een gevulde kolom ExJr (7e kolom uit de FIP sheet)
|
|
|
|
CURSOR c7 (p_max_ins_deel_key NUMBER)
|
|
IS
|
|
SELECT d.ins_deel_key, d.ins_deel_omschrijving, c.ins_srtcontrole_key, fac.safe_to_date('01-01-' || ins_kenmerkwaarde7 ,'dd-mm-yyyy') plan_datum
|
|
FROM fac_imp_ins i, ins_deel d, ins_srtcontrole c, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
|
|
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
|
|
AND i.alg_locatie_code = l.alg_locatie_code
|
|
AND i.alg_gebouw_code = g.alg_gebouw_code
|
|
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
|
|
AND i.alg_ruimte_nr = r.alg_ruimte_nr
|
|
AND d.ins_alg_ruimte_type = 'R'
|
|
AND d.ins_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 d.ins_deel_key > p_max_ins_deel_key
|
|
AND i.ins_kenmerkwaarde1 = substr(c.ins_srtcontrole_omschrijving, 1, instr(c.ins_srtcontrole_omschrijving, '-')-1 )
|
|
AND i.ins_kenmerkwaarde7 IS NOT NULL;
|
|
|
|
|
|
BEGIN
|
|
v_errorhint := 'plat_post_update_ins';
|
|
|
|
-- Eerst maar eens beginnen met de verwerking van de kostenplaatsen cursor 5
|
|
FOR rec IN c5
|
|
LOOP
|
|
SELECT COUNT(*)
|
|
INTO v_kpn_bestaat
|
|
FROM prs_kostenplaats
|
|
WHERE prs_kostenplaats_upper = UPPER(rec.ins_kenmerkwaarde15)
|
|
AND prs_kostenplaats_verwijder IS NULL
|
|
AND prs_kostenplaats_module = 'ALG';
|
|
|
|
IF v_kpn_bestaat = 0
|
|
THEN
|
|
INSERT INTO prs_kostenplaats (prs_kostenplaats_nr, prs_kostenplaats_omschrijving, prs_kostenplaats_module, prs_kostenplaats_extern, prs_kostenplaats_limietperiode, prs_kostenplaats_fiat)
|
|
VALUES(rec.ins_kenmerkwaarde15, rec.ins_kenmerkwaarde16, 'ALG', 0, 0, 1);
|
|
END IF;
|
|
END LOOP;
|
|
|
|
-- Eerst maar eens beginnen met de verwerking van ins_srtdeel_eenheid
|
|
FOR rec IN c3
|
|
LOOP
|
|
UPDATE ins_srtdeel
|
|
SET ins_srtdeel_eenheid = rec.res_deel_eenheid
|
|
WHERE ins_srtdeel_code = rec.ins_srtdeel_code
|
|
AND ins_srtdeel_key > p_max_ins_srtdeel_key
|
|
AND ins_srtdeel_verwijder IS NULL;
|
|
END LOOP;
|
|
|
|
-- Verder moet van alle ins_srtdeel die zijn toegevoegd de 'hoort bij persoon' eraf worden gehaald (sie in de standaard FIP erop is gezet), dus ins_srtdeel_binding van 17 -> 1
|
|
UPDATE ins_srtdeel
|
|
SET ins_srtdeel_binding = 1
|
|
WHERE ins_srtdeel_key > p_max_ins_srtdeel_key
|
|
AND ins_srtdeel_verwijder IS NULL;
|
|
|
|
-- Bepalen van de ctr discipline waaronder de terugkerende taken worden vastgelegd.
|
|
SELECT MIN(ins_discipline_key)
|
|
INTO v_ctr_discipline_key
|
|
FROM ctr_discipline d, ctr_disc_params dp
|
|
WHERE dp.ctr_ins_discipline_key = d.ins_discipline_key
|
|
AND d.ins_discipline_verwijder IS NULL
|
|
AND dp.ctr_disc_params_ismjob = 1;
|
|
|
|
|
|
IF v_ctr_discipline_key IS NULL
|
|
THEN
|
|
-- Als de ctr_discipline 'vervanging' niet gevonden is, dan maar de de laatste (max)
|
|
SELECT MAX(ins_discipline_key)
|
|
INTO v_ctr_discipline_key
|
|
FROM ctr_discipline
|
|
WHERE ins_discipline_module = 'CTR'
|
|
AND ins_discipline_verwijder IS NULL;
|
|
END IF;
|
|
|
|
|
|
-- Bepalen van de default BTW % 21...
|
|
SELECT MIN(fin_btwtabelwaarde_key)
|
|
INTO v_fin_btwtabelwaarde_key
|
|
FROM fin_btwtabelwaarde
|
|
WHERE fin_btwtabelwaarde_perc = 21
|
|
AND COALESCE(fin_btwtabelwaarde_verlegd,0) = 0
|
|
AND fin_btwtabelwaarde_verwijder IS NULL;
|
|
|
|
|
|
-- We gaan hier per receptnummer het MEEST UNIFORME (algemene) eruit vissen.
|
|
-- Dat doen we door te kijken waarvan de combinatie van dezelfde kosten (aant_K) met dezelfde periode het vaakst voorkomen (aant_P).
|
|
|
|
|
|
-- Voorbeeld hieronder: enkele regels bij 1 object A: recept R1 kost 100 euro per eenhied en wordt elke 2 jaar gepland, elke regel daarna heeft betrekking op ander object
|
|
-- recept(1) kosten(3) periode(14)
|
|
-- R1 100 2
|
|
-- R1 100 2
|
|
-- R1 150 2
|
|
-- R1 100 1
|
|
-- Hier is de meest algemene recept die met kosten 100 en om de 2 jaar (regel 1 en 2), de andere recepten (regel 3 en 4) zijn uitzonderingen (XCP) op de algemene regel.
|
|
|
|
-- We gaan (gebaseerd op de sheet van WaardWonen) hier ook nog eens rekening houden met Perc.Onderh, die default 100 staat.
|
|
-- Maar als de regel is 50%, dan is dat de norm, en elke afwijking van 50% is dus uitzondering, dus we gaan OOK op zoek naar de meeste regels met dezelfde Perc. Onderh.
|
|
-- Dus
|
|
-- recept(1) kosten(3) periode(14) %onderh (10)
|
|
-- R1 100 2 75
|
|
-- R1 100 2 50 <-- Hiervan zijn er 2, dit is de standaard taak (srtcontrole)
|
|
-- R1 150 2 100
|
|
-- R1 100 1 100
|
|
-- R1 100 2 50 <-- Hiervan zijn er 2, dit is de standaard taak (srtcontrole)
|
|
|
|
|
|
|
|
|
|
FOR rec IN c1
|
|
LOOP
|
|
|
|
|
|
SELECT ins_kenmerkwaarde1, ins_kenmerkwaarde3, ins_kenmerkwaarde14, ins_kenmerkwaarde10
|
|
INTO v_receptnr, v_kosten, v_periode, v_perc_onderhoud
|
|
FROM (
|
|
|
|
SELECT a.ins_kenmerkwaarde1, a.ins_kenmerkwaarde3, a.ins_kenmerkwaarde14, ins_kenmerkwaarde10, count(*) aantal FROM fac_imp_ins a
|
|
WHERE a.ins_kenmerkwaarde1 = rec.ins_kenmerkwaarde1
|
|
HAVING count(*) = (SELECT MAX(COUNT(*)) FROM fac_imp_ins b
|
|
WHERE b.ins_kenmerkwaarde1 = a.ins_kenmerkwaarde1
|
|
GROUP by ins_kenmerkwaarde1, ins_kenmerkwaarde3, ins_kenmerkwaarde14, ins_kenmerkwaarde10
|
|
)
|
|
GROUP by ins_kenmerkwaarde1, ins_kenmerkwaarde3, a.ins_kenmerkwaarde14, ins_kenmerkwaarde10)
|
|
WHERE rownum = 1;
|
|
|
|
-- Algemene soort controles (terugkerende taken) toevoegen op alle soortdelen die zijn toegevoegd in deze import ( > p_max_ins_srtdeel_key)
|
|
-- Daartoe bepalen we eerst van alle controles op een objectsoort de grootste gemene deler, de rest (= afwijkingen daarop) worden xcp-records.
|
|
-- Definitie "Grootste gemene deler" = het meeste aantal records met dezelfde kosten, periode en onderhoudspercentage.
|
|
|
|
-- Fondscode ook in (laatste, zojuist ingeschoten record) ins_srtcontrole verwerken...
|
|
-- We gaan ervan uit, en dat is terecht, dat er 1 fondscode (en niet meer dan 1) bij een v_receptnr bestaat.
|
|
-- Voor het geval dat er toch is (d.i. een fout in het importbestand) doen we veiligheidshalve MAX.
|
|
|
|
-- FSN#38080: kolom AA (VvJr = vervaljaar = kenmerk8) gaan we nu ook gebruiken bij de import (deden we tot nu toe nog niets mee, deze stond altijd ingevuld met een berekende waarde
|
|
-- indien gevuld met een jaar, dan is dat het vervaljaar van die activiteit bij dat element.
|
|
-- Let op: vervaljaar doet NIET! mee in de bepaling van de "grootste gemene deler" voor ins_srtcontrole.
|
|
|
|
INSERT INTO ins_srtcontrole (ctr_discipline_key, ins_srtinstallatie_key, ins_srtcontrole_niveau, ins_srtcontrole_omschrijving, ins_srtcontrole_groep,
|
|
ins_srtcontrole_info, ins_srtcontrole_periode, ins_srtcontrole_eenheid, ins_srtcontrole_mode, ins_srtcontrole_materiaal, fin_btwtabelwaarde_key,
|
|
ins_srtcontrole_percentage, prs_kostenplaats_key)
|
|
SELECT v_ctr_discipline_key, ins_srtdeel_key, 'S', substr( ins_kenmerkwaarde1 || '-' || MAX(ins_kenmerkwaarde2), 1,60), v_receptnr,
|
|
MAX(ins_kenmerkwaarde2) || ' [' || MAX(ins_kenmerkwaarde13) || ']' , v_periode, 4, 1, fac.safe_to_number(replace(replace(v_kosten, '.'), ',','.')),
|
|
v_fin_btwtabelwaarde_key,
|
|
fac.safe_to_number(replace(replace(v_perc_onderhoud, '.'), ',','.')),
|
|
(SELECT prs_kostenplaats_key
|
|
FROM prs_kostenplaats
|
|
WHERE prs_kostenplaats_verwijder IS NULL
|
|
AND prs_kostenplaats_module = 'ALG'
|
|
AND prs_kostenplaats_upper = (SELECT UPPER(MAX(ins_kenmerkwaarde15))
|
|
FROM fac_imp_ins
|
|
WHERE ins_kenmerkwaarde1 = v_receptnr))
|
|
FROM ins_srtdeel sd, fac_imp_ins i, ins_srtgroep sg, ins_discipline d
|
|
WHERE ins_srtdeel_key > p_max_ins_srtdeel_key
|
|
AND sd.ins_srtdeel_code = i.ins_srtdeel_code
|
|
AND sd.ins_srtgroep_key = sg.ins_srtgroep_key
|
|
AND sg.ins_discipline_key = d.ins_discipline_key
|
|
AND i.ins_discipline_omschrijving = d.ins_discipline_omschrijving
|
|
AND i.ins_srtgroep_omschrijving = sg.ins_srtgroep_omschrijving
|
|
AND i.ins_kenmerkwaarde1 = v_receptnr
|
|
AND i.ins_kenmerkwaarde3 = v_kosten
|
|
AND i.ins_kenmerkwaarde14 = v_periode
|
|
AND i.ins_kenmerkwaarde10 = v_perc_onderhoud
|
|
AND NOT EXISTS (SELECT 'x' FROM ins_srtcontrole
|
|
WHERE ins_srtinstallatie_key = ins_srtdeel_key
|
|
AND ins_srtcontrole_niveau = 'S'
|
|
AND ins_srtcontrole_groep = v_receptnr)
|
|
GROUP BY ins_srtdeel_key, ins_kenmerkwaarde1;
|
|
|
|
|
|
|
|
|
|
-- Uitzonderingen op de algemene (reguliere) soort controle, die dus afwijken van kosten en/of periode, worden toegevoegd als XCP
|
|
-- Let op: hier wordt aantal nog in GROEP gestopt, vraag is of we de eenheid moeten stoppen in ins_srtdeel_aantal of in ins_srtcontrole_aantal / ins_srtcontroledl_xcp_aantal op dieper nivo.
|
|
|
|
-- Check via onderstaande query op plato@labs levert op dat er een paar verschillen in aantal zitten:
|
|
|
|
-- plato_waardwonen_verschil_aantal_andere_eenheid.xls: 15 objecten met meerdere activiteiten, verschillend aantal, andere eenheid.
|
|
-- select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
|
|
-- (select ins_deel_omschrijving, count(*) from fac_imp_ins
|
|
-- having count(*) > 1
|
|
-- group by ins_deel_omschrijving) a,
|
|
-- fac_imp_ins b,
|
|
-- fac_imp_ins c
|
|
-- where a.ins_deel_omschrijving = b.ins_deel_omschrijving
|
|
-- AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
|
|
-- AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
|
|
-- AND b.ins_kenmerkwaarde10 <> c.ins_kenmerkwaarde10
|
|
-- AND b.ins_kenmerkwaarde13 <> c.ins_kenmerkwaarde13
|
|
-- ORDER BY a.ins_deel_omschrijving;
|
|
|
|
-- plato_waardwonen_verschil_aantal_dezelfde_eenheid.xls: 30 objecten met meerdere activiteiten, verschillend aantal, dezelfde eenheid
|
|
-- select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
|
|
-- (select ins_deel_omschrijving, count(*) from fac_imp_ins
|
|
-- having count(*) > 1
|
|
-- group by ins_deel_omschrijving) a,
|
|
-- fac_imp_ins b,
|
|
-- fac_imp_ins c
|
|
-- where a.ins_deel_omschrijving = b.ins_deel_omschrijving
|
|
-- AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
|
|
-- AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
|
|
-- AND b.ins_kenmerkwaarde10 <> c.ins_kenmerkwaarde10
|
|
-- AND b.ins_kenmerkwaarde13 = c.ins_kenmerkwaarde13
|
|
-- ORDER BY a.ins_deel_omschrijving;
|
|
|
|
-- plato_waardwonen_meer_activiteiten_met_gelijk_aantal.xlsx: 354 objecten met meerdere activiteiten, gelijke aantal, (dezelfde of afwijkend eenheid).
|
|
--select a.ins_deel_omschrijving, b.ins_kenmerkwaarde1, b.ins_kenmerkwaarde2, b.ins_kenmerkwaarde13, b.ins_kenmerkwaarde10, c.ins_kenmerkwaarde10, c.ins_kenmerkwaarde13, c.ins_kenmerkwaarde1, c.ins_kenmerkwaarde2 from
|
|
--(select ins_deel_omschrijving, count(*) from fac_imp_ins
|
|
--having count(*) > 1
|
|
--group by ins_deel_omschrijving) a,
|
|
--fac_imp_ins b,
|
|
--fac_imp_ins c
|
|
--where a.ins_deel_omschrijving = b.ins_deel_omschrijving
|
|
--AND b.ins_deel_omschrijving = c.ins_deel_omschrijving
|
|
--AND b.ins_kenmerkwaarde1 <> c.ins_kenmerkwaarde1
|
|
--AND b.ins_kenmerkwaarde10 = c.ins_kenmerkwaarde10
|
|
---- AND b.ins_kenmerkwaarde13 = c.ins_kenmerkwaarde13
|
|
--ORDER BY a.ins_deel_omschrijving;
|
|
--;
|
|
|
|
--plato_waardwonen_objecten_met_1_activiteit.xlsx: 2940 objecten met 1 activiteit, aantal dont care, eenheid dont care.
|
|
--select ins_deel_omschrijving, MAX(b.ins_kenmerkwaarde1), MAX(b.ins_kenmerkwaarde2), MAX(b.ins_kenmerkwaarde13), MAX(b.ins_kenmerkwaarde10) from fac_imp_ins b
|
|
--having count(*) = 1
|
|
--group by ins_deel_omschrijving;
|
|
|
|
-- Aantal objecten ingelezen: 3344.
|
|
-- select distinct (ins_deel_omschrijving) from fac_imp_ins;
|
|
|
|
|
|
-- Uitzonderingen op de algemene (reguliere) soort controle die we zojuist hebben toegevoegd, die dus afwijken van kosten en/of periode, worden toegevoegd als XCP
|
|
-- Let op: hier wordt aantal nog in GROEP gestopt, vraag is of we de eenheid moeten stoppen in ins_srtdeel_aantal of in ins_srtcontrole_aantal / ins_srtcontroledl_xcp_aantal op dieper nivo.
|
|
-- Let op 2: Dit zijn natuurlijk alleen de objecten die in deze import zijn toegevoegd (d.ins_deel_key > p_max_ins_deel_key) en afwijkende kosten en afwijkende periode hebben.
|
|
-- Verder moet de algemene ins_srtcontrole wel gevonden kunnen worden om een xcp daarop te kunnen maken (foreign-key)
|
|
|
|
-- Waneer de kosten OF(!) de periode niet zijn ingevuld (NULL-value), dan gaan we ervan uit dat deze de default volgen, en wordt er geen XCP aangemaakt,
|
|
-- Dus als een van beide ontbreekt, dan volgt die de standaard.
|
|
|
|
-- Hier nog ff onthouden wat de laatste xcp record is, is straks nodig voor een nabewerking (cursor 4)
|
|
SELECT coalesce(max(ins_srtcontroledl_xcp_key),0)
|
|
INTO v_mx_ins_srtcontroledl_xcp_key
|
|
FROM ins_srtcontroledl_xcp;
|
|
|
|
|
|
v_errormsg := 'Soort controle gegevens: ' || ' recept=[' || v_receptnr || '],' || ' kosten=[' || v_kosten || '],' ||
|
|
' periode=[' || v_periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
|
|
|
|
FOR rec2 IN c2 (p_max_ins_deel_key, v_receptnr, v_kosten, v_periode, v_perc_onderhoud)
|
|
LOOP
|
|
BEGIN
|
|
|
|
|
|
v_errormsg := 'C2: INSERT INTO ins_srtcontroledl_xcp: ' || 'ins_deel_key=['|| rec2.ins_deel_key || '],' || 'objectomschrijving=[' || rec2.ins_deel_omschrijving || '] ' ||
|
|
'ins_srtcontrole_key=[' || rec2.ins_srtcontrole_key || '],' ||
|
|
'recept=[' || v_receptnr || '],' || 'kosten=[' || rec2.kosten || '],' ||
|
|
'periode=[' || rec2.periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'I',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
|
|
INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_periode,
|
|
ins_srtcontroledl_xcp_materia, ins_srtcontroledl_xcp_perc, ins_srtcontroledl_xcp_eind)
|
|
SELECT rec2.ins_deel_key, rec2.ins_srtcontrole_key, rec2.periode, rec2.kosten, rec2.perc_onderhoud, rec2.verval_datum FROM dual;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
v_errormsg :=
|
|
'OTHERS (error '
|
|
|| oracle_err_num
|
|
|| '/'
|
|
|| oracle_err_mes
|
|
|| ')';
|
|
fac.imp_writelog (p_import_key,
|
|
'E',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
COMMIT;
|
|
END;
|
|
END LOOP;
|
|
|
|
|
|
FOR rec6 IN c6 (p_max_ins_deel_key, v_receptnr, v_kosten, v_periode, v_perc_onderhoud)
|
|
LOOP
|
|
BEGIN
|
|
|
|
|
|
v_errormsg := 'C4: VERVALJAAR -> ins_srtcontroledl_xcp: ' || 'ins_deel_key=['|| rec6.ins_deel_key || '],' || 'objectomschrijving=[' || rec6.ins_deel_omschrijving || '] ' ||
|
|
'ins_srtcontrole_key=[' || rec6.ins_srtcontrole_key || '],' ||
|
|
'recept=[' || v_receptnr || '],' || 'kosten=[' || rec6.kosten || '],' ||
|
|
'periode=[' || rec6.periode || '],' || ' percentage=[' || v_perc_onderhoud || '],';
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'I',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
|
|
INSERT INTO ins_srtcontroledl_xcp ( ins_deel_key, ins_srtcontrole_key, ins_srtcontroledl_xcp_eind)
|
|
SELECT rec6.ins_deel_key, rec6.ins_srtcontrole_key, rec6.verval_datum FROM dual;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
v_errormsg :=
|
|
'OTHERS (error '
|
|
|| oracle_err_num
|
|
|| '/'
|
|
|| oracle_err_mes
|
|
|| ')';
|
|
fac.imp_writelog (p_import_key,
|
|
'E',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
COMMIT;
|
|
END;
|
|
END LOOP;
|
|
|
|
|
|
|
|
-- "After" post-processing van de XCP records die zojuist - in voorgaande loop- zijn toegevoegd.
|
|
-- De kolommen (materiaal, periode, percentage) die dezelfde waarde hebben als de standaard ins_srtcontrole moeten op NULL worden gezet,
|
|
-- Maw alleen de echte afwijkingen moeten een waarde (NOT NULL) hebben.
|
|
-- In de cursor c2 worden de records opgehaald waarvan minimaal 1 afwijking is, dat betekent dat er dus ook mogelijk dezelfde waarde als de standaard bestaat.
|
|
|
|
v_errormsg := 'NABEWERKING ins_srtcontroledl_xcp: ';
|
|
|
|
FOR rec4 IN c4 (v_mx_ins_srtcontroledl_xcp_key)
|
|
LOOP
|
|
BEGIN
|
|
v_errorhint := 'NABEWERKING ins_srtcontroledl_xcp: ' || 'key=[' || rec4.ins_srtcontroledl_xcp_key || '], controle=[ ' || rec4.ins_srtcontrole_omschrijving || ']';
|
|
IF rec4.set_materia_null = 1
|
|
THEN
|
|
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_materia = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
|
|
END IF;
|
|
IF rec4.set_periode_null = 1
|
|
THEN
|
|
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_periode = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
|
|
END IF;
|
|
IF rec4.set_perc_onderhoud_null = 1
|
|
THEN
|
|
UPDATE ins_srtcontroledl_xcp SET ins_srtcontroledl_xcp_perc = NULL WHERE ins_srtcontroledl_xcp_key = rec4.ins_srtcontroledl_xcp_key;
|
|
END IF;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
v_errormsg :=
|
|
'OTHERS (error '
|
|
|| oracle_err_num
|
|
|| '/'
|
|
|| oracle_err_mes
|
|
|| ')';
|
|
fac.imp_writelog (p_import_key,
|
|
'E',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
COMMIT;
|
|
END;
|
|
END LOOP;
|
|
|
|
|
|
END LOOP;
|
|
|
|
|
|
FOR rec7 IN c7 (p_max_ins_deel_key)
|
|
LOOP
|
|
BEGIN
|
|
|
|
|
|
v_errormsg := 'C7: INSPECTIE record -> ins_deelsrtcontrole: ' || 'ins_deel_key=['|| rec7.ins_deel_key || '],' || 'objectomschrijving=[' || rec7.ins_deel_omschrijving || '] ' ||
|
|
'ins_srtcontrole_key=[' || rec7.ins_srtcontrole_key || '],';
|
|
|
|
fac.imp_writelog (p_import_key,
|
|
'I',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
|
|
INSERT INTO ins_deelsrtcontrole (ins_deel_key, ins_srtcontrole_key, ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_status)
|
|
SELECT rec7.ins_deel_key, rec7.ins_srtcontrole_key, rec7.plan_datum, 0 FROM dual;
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
|
oracle_err_num := SQLCODE;
|
|
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
|
v_errormsg :=
|
|
'OTHERS (error '
|
|
|| oracle_err_num
|
|
|| '/'
|
|
|| oracle_err_mes
|
|
|| ')';
|
|
fac.imp_writelog (p_import_key,
|
|
'E',
|
|
v_errormsg,
|
|
v_errorhint
|
|
);
|
|
COMMIT;
|
|
END;
|
|
END LOOP;
|
|
|
|
|
|
-- We gaan dan nog het aantal objecten (ins_deel_aantal) die standaard op 1 staat, bijwerken met kolom 9 (aantal geregistreerde objecten).
|
|
-- Hiervoor nemen we het hoogste aantal (het object kan voor meerdere activiteiten met verschillende aantal (icm eenheid) worden ingezet), b.v.:
|
|
|
|
-- object A (kozijnen) 10 m2 schilderen
|
|
-- object A (kozijnen) 2 st. vervangen
|
|
-- We registeren dan bij object A 10??? (of is 2 beter, omdat dit de preferred eenheid stuks is)?
|
|
|
|
UPDATE ins_deel d
|
|
SET ins_deel_aantal = (SELECT COALESCE(fac.safe_to_number(max(ins_kenmerkwaarde9)),1)
|
|
FROM fac_imp_ins i, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
|
|
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
|
|
AND i.alg_locatie_code = l.alg_locatie_code
|
|
AND i.alg_gebouw_code = g.alg_gebouw_code
|
|
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
|
|
AND i.alg_ruimte_nr = r.alg_ruimte_nr
|
|
AND d.ins_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
|
|
)
|
|
WHERE d.ins_deel_key > p_max_ins_deel_key
|
|
AND d.ins_deel_verwijder IS NULL;
|
|
|
|
|
|
-- De aanmaakdatums van de ins_delen die zijn toegevoegd ( > p_max_ins_deel_key) bepalen de volgende controle-momenten, dus dat komt natuurlijk wel wat nauw.
|
|
-- Daarom wordt StJr (ins_kenmerkwaarde4) als startjaar bij alle objecten (ins_delen) van het betreffende pand gezet.
|
|
|
|
UPDATE ins_deel d
|
|
SET ins_deel_aanmaak = (SELECT min( to_date (ins_kenmerkwaarde4, 'yyyy'))
|
|
FROM fac_imp_ins i, alg_ruimte r, alg_verdieping v, alg_gebouw g, alg_locatie l
|
|
WHERE i.ins_deel_omschrijving = d.ins_deel_omschrijving
|
|
AND i.alg_locatie_code = l.alg_locatie_code
|
|
AND i.alg_gebouw_code = g.alg_gebouw_code
|
|
AND i.alg_verdieping_volgnr = v.alg_verdieping_volgnr
|
|
AND i.alg_ruimte_nr = r.alg_ruimte_nr
|
|
AND d.ins_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
|
|
)
|
|
WHERE d.ins_deel_key > p_max_ins_deel_key
|
|
AND d.ins_deel_verwijder IS NULL;
|
|
|
|
|
|
--- En tenslotte gaan we de 3 MJOB autorisatiegroepen MJOB-R, MJOB-W en MJOB-A de rechten op INSUSE, INSMAN en CTRUSE uitdelen....
|
|
-- 1. Eerst MJOB-R (Leesrechten): INSUSE READ en INSMAN READ op elke INS-discipline en CTRUSE READ op de MJOB-discipline (v_ctr_discipline_key)
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: LEESRECHTEN'),
|
|
fac_functie_key,
|
|
d.ins_discipline_key,
|
|
-1, 9, -1, 9
|
|
FROM fac_functie, ins_discipline d
|
|
WHERE fac_functie_code = 'WEB_INSUSE'
|
|
AND d.ins_discipline_verwijder IS NULL;
|
|
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: LEESRECHTEN'),
|
|
fac_functie_key,
|
|
d.ins_discipline_key,
|
|
-1, 9, -1, 9
|
|
FROM fac_functie, ins_discipline d
|
|
WHERE fac_functie_code = 'WEB_INSMAN'
|
|
AND d.ins_discipline_verwijder IS NULL;
|
|
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-R: LEESRECHTEN'),
|
|
fac_functie_key,
|
|
v_ctr_discipline_key,
|
|
-1, 9, -1, 9
|
|
FROM fac_functie
|
|
WHERE fac_functie_code = 'WEB_CTRUSE';
|
|
|
|
-- 2. Dan MJOB-W (Schrijfrechten): INSUSE WRITE en INSMAN WRITE op elke INS-discipline en CTRUSE WRITE op de MJOB-discipline (v_ctr_discipline_key)
|
|
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W: SCHRIJFRECHTEN'),
|
|
fac_functie_key,
|
|
d.ins_discipline_key,
|
|
-1, -1, -1, -1
|
|
FROM fac_functie, ins_discipline d
|
|
WHERE fac_functie_code = 'WEB_INSUSE'
|
|
AND d.ins_discipline_verwijder IS NULL;
|
|
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W: SCHRIJFRECHTEN'),
|
|
fac_functie_key,
|
|
d.ins_discipline_key,
|
|
-1, -1, -1, -1
|
|
FROM fac_functie, ins_discipline d
|
|
WHERE fac_functie_code = 'WEB_INSMAN'
|
|
AND d.ins_discipline_verwijder IS NULL;
|
|
|
|
INSERT INTO fac_groeprechten (fac_groep_key, fac_functie_key, ins_discipline_key,
|
|
fac_gebruiker_prs_level_read, fac_gebruiker_prs_level_write, fac_gebruiker_alg_level_read, fac_gebruiker_alg_level_write)
|
|
SELECT
|
|
(SELECT fac_groep_key FROM fac_groep WHERE fac_groep_upper = 'MJOB-W: SCHRIJFRECHTEN'),
|
|
fac_functie_key,
|
|
v_ctr_discipline_key,
|
|
-1, -1, -1, -1
|
|
FROM fac_functie
|
|
WHERE fac_functie_code = 'WEB_CTRUSE';
|
|
|
|
-- 3. Tenslotte MJOB-A (Admin MJOB): INSMGT, ALG..? en nog wat.... TODO...
|
|
|
|
|
|
|
|
EXCEPTION
|
|
WHEN OTHERS
|
|
THEN
|
|
fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint);
|
|
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;
|
|
/
|
|
|
|
|
|
|
|
CREATE OR REPLACE PROCEDURE plat_update_ins (
|
|
p_import_key IN NUMBER
|
|
) IS
|
|
|
|
v_count NUMBER;
|
|
v_max_ins_srtdeel_key NUMBER(10);
|
|
v_max_ins_deel_key NUMBER(10);
|
|
BEGIN
|
|
|
|
-- Even snel registreren wat de laatst toegevoegde ins_srtdeel is, dan weten we dat er door deze import-procedure wordt toegevoegd (alles > dan deze max).
|
|
SELECT coalesce(max(ins_srtdeel_key),0)
|
|
INTO v_max_ins_srtdeel_key
|
|
FROM ins_srtdeel
|
|
WHERE ins_srtdeel_verwijder IS NULL;
|
|
|
|
-- Idem voor laatst toegevoegde ins_deel is, dan weten we dat er door deze import-procedure wordt toegevoegd (alles > dan deze max).
|
|
SELECT coalesce(max(ins_deel_key),0)
|
|
INTO v_max_ins_deel_key
|
|
FROM ins_deel
|
|
WHERE ins_deel_verwijder IS NULL;
|
|
|
|
fac_update_ins (p_import_key);
|
|
|
|
-- After update ...
|
|
plat_post_update_ins(p_import_key, v_max_ins_srtdeel_key, v_max_ins_deel_key);
|
|
|
|
END plat_update_ins;
|
|
/
|
|
|
|
|
|
|
|
|
|
BEGIN fac.registercustversion('PLAT', 1); END;
|
|
/
|
|
|
|
BEGIN adm.systrackscriptId('$Id$', 0); END;
|
|
/
|
|
|
|
show errors;
|
|
|
|
|
|
commit;
|
|
|
|
|
|
spool off; |