Files
Customer/KW1C/KW1C.sql
Suzan Wiegerinck 06b706da12 KW1C#81204 implementatie FMIS (gebouwbeheer) KW1C
svn path=/Customer/trunk/; revision=63950
2024-03-18 10:39:21 +00:00

2271 lines
99 KiB
SQL

/* Formatted on 13/3/2024 11:16:23 (QP5 v5.336) */
--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'AADS' (de klantcode, zoals vermeld in fac_version_cust)
-- - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
-- - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)
DEFINE thisfile = 'KW1C.SQL'
DEFINE dbuser = 'KW1C'
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 KW1C
IS
PROCEDURE VERWERKEN_RUIMTEKAART;
END;
/
CREATE OR REPLACE PACKAGE BODY KW1C
IS
PROCEDURE VERWERKEN_RUIMTEKAART
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
-- stap 1: bepalen of er per vandaag een mutatie is voor cat/type
-- nog te doen: wat als er nog geen categorie en type is?
CURSOR CAT IS
SELECT r.alg_ruimte_key,
r.alg_ruimte_nr,
mutatiedatum.mutatiedatum,
ruimtetype.alg_kenmerk_key_type, ---> dit is de kenmerkkey voor deze nieuwe waarde
ruimtetype.huidig_type, --> ter info de oude waarde
ruimtetype.new_type_kenmerkwaarde, ---> dit is de key van nieuwe waarde
ruimtetype.nieuw_type_omschrijving, ---> dit is de nieuwe waarde
categorie.alg_kenmerk_key_categorie, ---> dit is de kenmerkkey voor deze nieuwe waarde
categorie.huidige_categorie, --> ter info de oude waarde
categorie.new_categorie_kenmerkwaarde, ---> dit is de key van nieuwe waarde
categorie.nieuwe_categorie_omschrijving, ---> dit is de nieuwe waarde
ruimtetype.onrgoedkenmerk_to_delete_type, --> deze mag weg als alles is opgeschoond
ruimtetype.onrgoedkenmerk_to_archive_type, --> deze mag een einddatum krijgen vandaag - 1
mutatiedatum.onrgoedkenmerk_to_delete_mutatiedat, --> deze mag weg als alles is opgeschoond
categorie.onrgoedkenmerk_to_archive_categorie, --> deze mag een einddatum krijgen vandaag - 1
categorie.onrgoedkenmerk_to_delete_categorie --> deze mag weg als alles is opgeschoond
FROM alg_ruimte r,
(SELECT fac.safe_to_date (kw.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy')
mutatiedatum,
kw.alg_onrgoedkenmerk_key
onrgoedkenmerk_to_delete_mutatiedat,
kw.alg_onrgoed_key
ruimte_key
FROM alg_kenmerk k, alg_onrgoedkenmerk kw
WHERE k.alg_kenmerk_key = 1082
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND kw.alg_onrgoed_niveau = 'R') mutatiedatum,
(SELECT r.alg_ruimte_key ruimte_key,
huidig.omschrijving huidig_type,
nieuw.omschrijving nieuw_type_omschrijving,
huidig.alg_kenmerk_key alg_kenmerk_key_type,
typen.fac_usrdata_key new_type_kenmerkwaarde,
huidig.alg_onrgoedkenmerk_key onrgoedkenmerk_to_archive_type,
nieuw.alg_onrgoedkenmerk_key onrgoedkenmerk_to_delete_type
FROM (SELECT kw.alg_onrgoedkenmerk_key,
kw.alg_onrgoed_key,
k.alg_kenmerk_key,
type_new.fac_usrdata_omschr omschrijving
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata type_new
WHERE k.alg_kenmerk_key = 1081
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
type_new.fac_usrdata_key
AND type_new.fac_usrtab_key = 41 -- keuzelijst nieuwe type
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_onrgoed_niveau = 'R') nieuw,
(SELECT kw.alg_onrgoedkenmerk_key,
kw.alg_onrgoed_key,
k.alg_kenmerk_key,
type_new.fac_usrdata_omschr omschrijving
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata type_new
WHERE k.alg_kenmerk_key = 1008
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
type_new.fac_usrdata_key
AND type_new.fac_usrtab_key = 3 -- keuzelijst type
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_onrgoed_niveau = 'R') huidig,
alg_ruimte r,
fac_usrdata typen
WHERE typen.fac_usrtab_key = 3 -- keuzelijst typen
AND UPPER (nieuw.omschrijving) = UPPER (typen.fac_usrdata_omschr) --- op basis van de omschrijvingen kan de juiste key bepaald worden
AND r.alg_ruimte_key = nieuw.alg_onrgoed_key
AND r.alg_ruimte_key = huidig.alg_onrgoed_key) ruimtetype,
(SELECT r.alg_ruimte_key ruimte_key,
huidig.omschrijving huidige_categorie,
nieuw.omschrijving nieuwe_categorie_omschrijving,
huidig.alg_kenmerk_key alg_kenmerk_key_categorie,
categorie.fac_usrdata_key new_categorie_kenmerkwaarde,
huidig.alg_onrgoedkenmerk_key onrgoedkenmerk_to_archive_categorie,
nieuw.alg_onrgoedkenmerk_key onrgoedkenmerk_to_delete_categorie
FROM (SELECT kw.alg_onrgoedkenmerk_key,
kw.alg_onrgoed_key,
k.alg_kenmerk_key,
categorie_new.fac_usrdata_omschr omschrijving
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata categorie_new
WHERE k.alg_kenmerk_key = 1080
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
categorie_new.fac_usrdata_key
AND categorie_new.fac_usrtab_key = 42 -- keuzelijst nieuwe categorieen
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_onrgoed_niveau = 'R') nieuw,
(SELECT kw.alg_onrgoedkenmerk_key,
kw.alg_onrgoed_key,
k.alg_kenmerk_key,
categorie_new.fac_usrdata_omschr omschrijving
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata categorie_new
WHERE k.alg_kenmerk_key = 1060
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
categorie_new.fac_usrdata_key
AND categorie_new.fac_usrtab_key = 21 -- keuzelijst categorie
AND kw.alg_onrgoedkenmerk_verwijder IS NULL
AND kw.alg_onrgoed_niveau = 'R') huidig,
alg_ruimte r,
fac_usrdata categorie
WHERE categorie.fac_usrtab_key = 21 -- keuzelijst categorie
AND UPPER (nieuw.omschrijving) = UPPER (categorie.fac_usrdata_omschr) --- op basis van de omschrijvingen kan de juiste key bepaald worden
AND r.alg_ruimte_key = nieuw.alg_onrgoed_key
AND r.alg_ruimte_key = huidig.alg_onrgoed_key) categorie
WHERE mutatiedatum.ruimte_key = r.alg_ruimte_key
AND ruimtetype.ruimte_key = r.alg_ruimte_key
AND categorie.ruimte_key = r.alg_ruimte_key
AND mutatiedatum.mutatiedatum < TRUNC (SYSDATE + 1);
-- stap 1: bepalen of er per vandaag een mutatie is voor vloer
CURSOR VLOER IS
SELECT r.alg_ruimte_key,
r.alg_ruimte_nr,
mutatiedatum.mutatiedatum,
mutatiedatum.onrgoedkenmerk_to_delete_mutatiedat, --> deze mag weg als alles is opgeschoond
vloer.alg_kenmerk_key_vloer, ---> dit is de kenmerkkey voor de nieuwe waarde
vloer.huidige_vloer, ---> ter info de oude waarde
vloer.to_archive_vloer, ---> deze mag een einddatum krijgen vandaag - 1,
vloer_new.nieuwe_vloer_key, ---> dit is de key van nieuwe waarde
vloer_new.nieuwe_vloer_omschr, ---> dit is de nieuwe waarde
vloer_new.to_delete_vloer --> deze mag weg als alles is opgeschoond
FROM alg_ruimte r,
(SELECT fac.safe_to_date (kw.alg_onrgoedkenmerk_waarde, 'dd-mm-yyyy')
mutatiedatum,
kw.alg_onrgoedkenmerk_key
onrgoedkenmerk_to_delete_mutatiedat,
kw.alg_onrgoed_key
ruimte_key
FROM alg_kenmerk k, alg_onrgoedkenmerk kw
WHERE k.alg_kenmerk_key = 1084
AND kw.alg_kenmerk_key = k.alg_kenmerk_key
AND kw.alg_onrgoed_niveau = 'R') mutatiedatum,
(SELECT kw.alg_onrgoed_key ruimte_key,
kw.alg_kenmerk_key alg_kenmerk_key_vloer,
kw.alg_onrgoedkenmerk_key to_archive_vloer,
ud.fac_usrdata_omschr huidige_vloer
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata ud
WHERE k.alg_kenmerk_key = 1009
AND k.alg_kenmerk_key = kw.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
ud.fac_usrdata_key
AND kw.alg_onrgoed_niveau = 'R'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL) vloer,
(SELECT kw.alg_onrgoed_key ruimte_key,
kw.alg_onrgoedkenmerk_key to_delete_vloer,
ud.fac_usrdata_key nieuwe_vloer_key,
ud.fac_usrdata_omschr nieuwe_vloer_omschr
FROM alg_kenmerk k, alg_onrgoedkenmerk kw, fac_usrdata ud
WHERE k.alg_kenmerk_key = 1083
AND k.alg_kenmerk_key = kw.alg_kenmerk_key
AND fac.safe_to_number (kw.alg_onrgoedkenmerk_waarde) =
ud.fac_usrdata_key
AND kw.alg_onrgoed_niveau = 'R'
AND kw.alg_onrgoedkenmerk_verwijder IS NULL) vloer_new
WHERE r.alg_ruimte_key = vloer.ruimte_key --- (+) nu nog geen outer join, maar wat als er nog geen waarde is? dit afvangen!
AND r.alg_ruimte_key = vloer_new.ruimte_key
AND r.alg_ruimte_key = mutatiedatum.ruimte_key
AND mutatiedatum.mutatiedatum < TRUNC (SYSDATE + 1);
BEGIN
FOR rec IN CAT
LOOP
-- de oude waarden (categorie en type archiveren) geven we een verwijderdatum vandaag-1
UPDATE alg_onrgoedkenmerk ok
SET ok.alg_onrgoedkenmerk_verwijder = TRUNC (SYSDATE) - 1
WHERE ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_archive_type
OR ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_archive_categorie;
fac.trackaction (
'ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Categorie '
|| rec.huidige_categorie
|| ' en type '
|| rec.huidig_type
|| ' gearchiveerd');
-- de nieuwe waarde voor categorie voegen we toe
INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
alg_onrgoed_niveau,
alg_kenmerk_key,
alg_onrgoedkenmerk_waarde)
VALUES (rec.alg_ruimte_key,
'R',
rec.alg_kenmerk_key_categorie,
rec.new_categorie_kenmerkwaarde);
-- de nieuwe waarde voor type voegen we toe
INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
alg_onrgoed_niveau,
alg_kenmerk_key,
alg_onrgoedkenmerk_waarde)
VALUES (rec.alg_ruimte_key,
'R',
rec.alg_kenmerk_key_type,
rec.new_type_kenmerkwaarde);
fac.trackaction (
'ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Categorie en type omgezet naar : '
|| rec.nieuwe_categorie_omschrijving
|| ' - '
|| rec.nieuw_type_omschrijving);
-- de mutatie velden --> die moeten weer leeggemaakt worden voor een volgende mutatie
DELETE FROM alg_onrgoedkenmerk ok
WHERE ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_delete_type
OR ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_delete_mutatiedat
OR ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_delete_categorie;
fac.trackaction ('ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Mutatievelden categorie en type opgeschoond');
COMMIT;
END LOOP;
FOR rec IN VLOER
LOOP
-- de oude waarden (categorie en type archiveren) geven we een verwijderdatum vandaag-1
UPDATE alg_onrgoedkenmerk ok
SET ok.alg_onrgoedkenmerk_verwijder = TRUNC (SYSDATE) - 1
WHERE ok.alg_onrgoedkenmerk_key = rec.to_archive_vloer;
fac.trackaction ('ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Vloerafwerking ' || rec.huidige_vloer || ' gearchiveerd');
-- de nieuwe waarde voor categorie voegen we toe
INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
alg_onrgoed_niveau,
alg_kenmerk_key,
alg_onrgoedkenmerk_waarde)
VALUES (rec.alg_ruimte_key,
'R',
rec.alg_kenmerk_key_vloer,
rec.nieuwe_vloer_key);
fac.trackaction ('ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Vloerafwerking omgezet naar : ' || rec.nieuwe_vloer_omschr);
-- de mutatie velden --> die moeten weer leeggemaakt worden voor een volgende mutatie
DELETE FROM alg_onrgoedkenmerk ok
WHERE ok.alg_onrgoedkenmerk_key = rec.to_delete_vloer
OR ok.alg_onrgoedkenmerk_key = rec.onrgoedkenmerk_to_delete_mutatiedat;
fac.trackaction ('ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Mutatievelden vloerafwerking opgeschoond');
COMMIT;
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 ('Verwerken mutaties ruimtekaart',
'E',
v_errormsg,
'');
END VERWERKEN_RUIMTEKAART;
END;
/
CREATE OR REPLACE PROCEDURE KW1C_DAILY
AS
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
BEGIN
KW1C.VERWERKEN_RUIMTEKAART;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog ('DAILY',
'E',
'Proces afgebroken!',
v_errormsg);
END KW1C_DAILY;
/
CREATE OR REPLACE VIEW KW1C_V_SYNC_ALG_RUIMTE
(
ALG_RUIMTE_KEY,
ALG_VERDIEPING_KEY,
CADLABEL
)
AS
SELECT r.alg_ruimte_key, v.alg_verdieping_key, LOWER (r.alg_ruimte_nr) cadlabel
FROM alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
alg_locatie l
WHERE 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;
-- Sleepbaar thema vloerafwerking
CREATE OR REPLACE VIEW KW1C_V_CAD_THEMA_VLOERAFW
(
ALG_RUIMTE_KEY,
WAARDE,
WAARDE_KEY
)
AS
SELECT r.alg_ruimte_key,
COALESCE (gf.fac_usrdata_omschr, 'Onbekend'),
COALESCE (gf.fac_usrdata_key, 161)
FROM alg_ruimte r,
(SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr, ud.fac_usrdata_key
FROM alg_onrgoedkenmerk ok,
fac_usrdata ud,
fac_kenmerkdomein rk,
alg_kenmerk k,
alg_v_aanwezigruimte rr
WHERE rk.fac_usrtab_key = ud.fac_usrtab_key
AND k.fac_kenmerkdomein_key = rk.fac_kenmerkdomein_key
AND TO_CHAR (ud.fac_usrdata_key) = ok.alg_onrgoedkenmerk_waarde
AND k.alg_kenmerk_key = 1009
AND rr.alg_ruimte_key = ok.alg_onrgoed_key) gf
WHERE gf.alg_ruimte_key(+) = r.alg_ruimte_key;
CREATE OR REPLACE TRIGGER kw1c_t_thema_vloerafw_i_iu
INSTEAD OF INSERT OR UPDATE
ON KW1C_V_CAD_THEMA_VLOERAFW
FOR EACH ROW
BEGIN
--- kenmerk bijwerken, let op: de nieuwe waarde is de key en dus niet de omschrijving
alg.upsertkenmerk (1009, :new.alg_ruimte_key, :new.waarde_key);
END;
/
----------------------------------------------------------------------------
------------------ BEGIN MBJOB IMPORT --------------------------------------
----------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE kw1c_import_insp_mjob (p_import_key IN NUMBER)
IS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (4000); -- Input line
v_errormsg VARCHAR (1000);
v_hint VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_ongeldig NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_header_is_valid NUMBER (1);
v_dummy VARCHAR2 (1000);
v_count NUMBER;
v_count_rec NUMBER := 0; -- totaal aantal record in csv
v_count_verwerk NUMBER; -- aantal te verwerken regels
v_count_n_taak NUMBER; -- aantal nieuw aan te maken basistaken
v_count_n_taakobject NUMBER; -- aantal nieuw aan te maken objecttaken
v_count_w_taak NUMBER; -- aantal bestaande taken te wijzigen
-- De importvelden:
v_locatiecode VARCHAR2 (1000);
v_objectomschrijving VARCHAR2 (1000);
v_taakcategorie VARCHAR2 (1000);
v_taakomschrijving VARCHAR2 (1000);
v_taakomschrijving_nieuw VARCHAR2 (1000); -- Vullen we in kolom extra_veld5
v_taakopmerking VARCHAR2 (1000);
v_taakgroep VARCHAR2 (1000);
v_taakprioriteit VARCHAR2 (1000);
v_taakobjectpercentage VARCHAR2 (1000);
v_taakobjectopmerking VARCHAR2 (1000);
v_taakobjectperiode VARCHAR2 (1000);
v_taakobjectstartjaar VARCHAR2 (1000); -- Startjaar uit CSV
v_taakobjectstartjaar_d DATE;
v_object_aanmaak DATE; -- Datum aanmaak van Object
v_taakobjecteindjaar VARCHAR2 (1000);
v_taakobjecteindjaar_d DATE;
v_taakobjectmateriaal VARCHAR2 (1000);
v_taakobjectkosten VARCHAR2 (1000);
v_taakobjecteenheid VARCHAR2 (1000);
v_taakdienst VARCHAR2 (1000);
v_deel_key NUMBER (10);
v_discipline_key NUMBER (10);
v_ismjob NUMBER;
v_taak_geschiedenis NUMBER (10); -- Vullen we in kolom extra_veld4
v_srtcontrole_key NUMBER (10);
v_srtcontrole_teller NUMBER (10);
v_ins_srtdeel_key NUMBER (10);
v_ins_srtdeel_code VARCHAR2 (10);
v_ins_srtcontroledl_xcp_key NUMBER (10);
v_taakobject_startjaar_d DATE; -- Startjaar van de reeds in Facilitor gekoppelde objecttaak
CURSOR c IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Eerst opruiming
DELETE FROM tmp_imp_mjb;
COMMIT;
v_header_is_valid := 0;
v_ongeldig := 0;
FOR rec IN c
LOOP
BEGIN
v_ongeldig := 0;
v_taak_geschiedenis := NULL;
v_deel_key := NULL;
v_ins_srtdeel_key := NULL;
v_ins_srtdeel_code := NULL;
v_srtcontrole_key := NULL;
v_ins_srtcontroledl_xcp_key := NULL;
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij:' || SUBSTR (v_newline, 1, 200);
v_aanduiding := '';
-- OUD: 'OBJECTOMSCHRIJVING;TAAKCATEGORIE;TAAKOMSCHRIJVING;TAAKOPMERKING;TAAKGROEP;TAAKPRIORITEIT;TAAKBTW;TAAKKOSTENPLAATSNR;TAAKKOSTENPLAATSOMSCHRIJVING;TAAKOBJECTPERCENTAGE;TAAKOBJECTOPMERKING;TAAKOBJECTEENHEID;TAAKOBJECTPERIODE;TAAKOBJECTSTARTJAAR;TAAKOBJECTEINDJAAR;TAAKOBJECTKOSTEN%
-- NIEUW (vanaf 2020-6): OBJECTIDENTIFICATIE;TAAKCATEGORIE;TAAKOMSCHRIJVING;TAAKOPMERKING;TAAKGROEP;TAAKPRIORITEIT;TAAKOBJECTPERCENTAGE;TAAKOBJECTOPMERKING;TAAKOBJECTEENHEID;TAAKOBJECTPERIODE;TAAKOBJECTSTARTJAAR;TAAKOBJECTEINDJAAR;TAAKOBJECTKOSTEN;DIENST;TAAKOMSCHRIJVINGNIEUW;
IF (REPLACE (UPPER (v_newline), ' ') LIKE
'OBJECTIDENTIFICATIE;TAAKCATEGORIE;TAAKOMSCHRIJVING;TAAKOPMERKING;TAAKGROEP;TAAKPRIORITEIT;TAAKOBJECTPERCENTAGE;TAAKOBJECTOPMERKING;TAAKOBJECTEENHEID;TAAKOBJECTPERIODE;TAAKOBJECTSTARTJAAR;TAAKOBJECTEINDJAAR;TAAKOBJECTKOSTEN;DIENST;TAAKOMSCHRIJVINGNIEUW%')
THEN
v_header_is_valid := 1;
ELSE
-- Lees alle veldwaarden
v_count_rec := v_count_rec + 1;
v_errormsg := 'Fout opvragen te importeren rij (object)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_objectomschrijving);
v_errormsg := 'Fout opvragen te importeren rij (discipline)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakcategorie);
v_errormsg := 'Fout opvragen te importeren rij (taakomschrijving)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakomschrijving);
v_errormsg := 'Fout opvragen te importeren rij (taakopmerking)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakopmerking);
v_errormsg := 'Fout opvragen te importeren rij (taakgroep)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakgroep);
v_errormsg := 'Fout opvragen te importeren rij (prioriteit)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakprioriteit);
v_errormsg := 'Fout opvragen te importeren rij (percentage)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjectpercentage);
v_errormsg := 'Fout opvragen te importeren rij (opmerking)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjectopmerking);
v_errormsg := 'Fout opvragen te importeren rij (eenheid)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjecteenheid);
v_errormsg := 'Fout opvragen te importeren rij (periode)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjectperiode);
v_errormsg := 'Fout opvragen te importeren rij (startjaar)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjectstartjaar);
v_errormsg := 'Fout opvragen te importeren rij (eindjaar)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjecteindjaar);
v_errormsg := 'Fout opvragen te importeren rij (materiaal)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakobjectmateriaal);
v_errormsg := 'Fout opvragen te importeren rij (dienst)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakdienst);
v_errormsg := 'Fout opvragen te importeren rij (taakomschrijvingnieuw)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_taakomschrijving_nieuw);
IF v_header_is_valid = 1
THEN -- Als geldige header gepasseerd en csv-recordvelden gevuld dan gaan we eerst checken of data klopt
-- Controleer of het object bestaat
-- Controleer of object er meerdere keren in staat (valt terug naar OTHERS, regel 300)
BEGIN
v_errormsg :=
'Fout bij opzoeken object: '
|| v_objectomschrijving
|| ' komt vaker dan 1 keer voor';
SELECT ins_deel_key
INTO v_deel_key
FROM ins_deel
WHERE UPPER (ins_deel_omschrijving) = UPPER (v_objectomschrijving)
AND ins_deel_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Object bestaat niet - Regel wordt niet verwerkt ',
rec.fac_imp_file_index || ' - ' || v_objectomschrijving);
v_ongeldig := 1;
END;
-- Controleer de taakcategorie
v_errormsg := 'Fout bij controleren taakcategorie ';
BEGIN
SELECT ins_discipline_key, ctr_disc_params_ismjob
INTO v_discipline_key, v_ismjob
FROM ins_tab_discipline d, ctr_disc_params dp
WHERE dp.ctr_ins_discipline_key = d.ins_discipline_key
AND UPPER (d.ins_discipline_omschrijving) =
TRIM (UPPER (v_taakcategorie));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
fac.imp_writelog (
p_import_key,
'E',
'Inspectie discipline niet gevonden - Regel wordt niet verwerkt ',
rec.fac_imp_file_index || ' - ' || v_taakcategorie);
v_ongeldig := 1;
END;
-- Controleer de eenheid
IF v_ismjob = 1
THEN
v_taakobjecteenheid := '4'; -- jaar
END IF;
IF v_taakobjecteenheid IS NOT NULL
AND v_taakobjecteenheid NOT IN ('1',
'2',
'3',
'4')
THEN
fac.imp_writelog (
p_import_key,
'E',
'Eenheid is niet correct gevuld (of leeg of 1,2,3,4) - Regel wordt niet verwerkt ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakobjecteenheid);
v_ongeldig := 1;
END IF;
-- Controleer dienst
v_errormsg := 'Fout controleren dienst ';
IF v_taakdienst IS NOT NULL
THEN
SELECT COUNT (*)
INTO v_count
FROM prs_dienst
WHERE UPPER (prs_dienst_omschrijving) = UPPER (v_taakdienst);
IF v_count = 0
THEN
fac.imp_writelog (
p_import_key,
'W',
'Dienst onbekend - zal bij verwerken aangemaakt worden.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakdienst);
END IF;
END IF;
-- Controleer de kosten - leeg of numeriek
v_errormsg := 'Fout controleren kosten ';
IF v_taakobjectmateriaal IS NOT NULL
AND fac.safe_to_number (REPLACE (v_taakobjectmateriaal, ',', '.')) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'Kosten taakobject niet goed ingevuld - Regel wordt niet verwerkt.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| 'Kosten csv: '
|| v_taakobjectmateriaal);
v_ongeldig := 1;
END IF;
-- Controleer de taakperiode - Leeg of numeriek
v_errormsg := 'Fout controleren taakperiode ';
IF v_taakobjectperiode IS NOT NULL
AND fac.safe_to_number (v_taakobjectperiode) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'Ongeldige taakobjectperiode - Regel wordt niet verwerkt ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakobjectperiode);
v_ongeldig := 1;
END IF;
-- Controleer de taakprioriteit - Leeg of numeriek
v_errormsg := 'Fout controleren taakprioriteit ';
IF v_taakprioriteit IS NOT NULL
AND fac.safe_to_number (v_taakprioriteit) IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'Prioriteit taak niet goed ingevuld - Regel wordt niet verwerkt.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| 'Kosten csv: '
|| v_taakprioriteit);
v_ongeldig := 1;
END IF;
-- Controleer de startdatum
v_errormsg := 'Fout bij controle startdatum ';
-- In geval jaar-invoer op datum zetten..
IF LENGTH (v_taakobjectstartjaar) = 4
THEN
v_taakobjectstartjaar := '01-01-' || v_taakobjectstartjaar;
END IF;
IF v_taakobjectstartjaar IS NOT NULL
AND fac.safe_to_date (v_taakobjectstartjaar, 'dd-mm-yyyy') IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'Startdatum ongeldige invoer - Regel wordt niet verwerkt.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - Datum csv: '
|| v_taakobjectstartjaar);
v_ongeldig := 1;
ELSE
v_taakobjectstartjaar_d :=
fac.safe_to_date (v_taakobjectstartjaar, 'dd-mm-yyyy');
END IF;
-- Hier controleren of de startdatum voor de Objectregisratiedatum ligt
v_errormsg := 'Fout bij controle start- en objectregistratiedatum ';
IF v_deel_key IS NOT NULL AND v_ongeldig = 0
THEN
SELECT ins_deel_aanmaak
INTO v_object_aanmaak
FROM ins_deel
WHERE ins_deel_key = v_deel_key;
END IF;
-- Controleer de einddatum
v_errormsg := 'Fout bij controle einddatum ';
-- In geval jaar-invoer op datum zetten..
IF LENGTH (v_taakobjecteindjaar) = 4
THEN
v_taakobjecteindjaar := '31-12-' || v_taakobjecteindjaar;
END IF;
IF v_taakobjecteindjaar IS NOT NULL
AND fac.safe_to_date (v_taakobjecteindjaar, 'dd-mm-yyyy') IS NULL
THEN
fac.imp_writelog (
p_import_key,
'E',
'Einddatum ongeldige invoer - Regel wordt niet verwerkt.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - Datum csv: '
|| v_taakobjecteindjaar);
v_ongeldig := 1;
ELSE
v_taakobjecteindjaar_d :=
fac.safe_to_date (v_taakobjecteindjaar, 'dd-mm-yyyy');
END IF;
-- Hier controleren of de taak al bestaat...
v_errormsg :=
'Fout controleren nieuwe of bestaande taak '
|| rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakomschrijving;
IF v_deel_key IS NOT NULL AND v_ongeldig = 0
THEN
-- Eerst ins_srtdeel_code bepalen
SELECT d.ins_srtdeel_key, sd.ins_srtdeel_code
INTO v_ins_srtdeel_key, v_ins_srtdeel_code
FROM ins_deel d, ins_srtdeel sd
WHERE d.ins_deel_key = v_deel_key
AND d.ins_srtdeel_key = sd.ins_srtdeel_key
AND ins_deel_verwijder IS NULL;
-- Vervolgens kijken of er al een taak op aangemaakt is
SELECT COUNT (*)
INTO v_srtcontrole_teller
FROM ins_srtcontrole
WHERE LOWER (ins_srtcontrole_omschrijving) =
SUBSTR (
TRIM (v_ins_srtdeel_code || ' - ' || LOWER (v_taakomschrijving)),
1,
60);
-- Zo ja, dan gaan we de srt_controle_key vullen
--- Ps. Komt soms bij heyday voor dat eenzelfde basistaak er meer dan 1 keer in staat (per ongeluk) en daarom pakken we hier dan de max(key).
IF v_srtcontrole_teller > 0
THEN
SELECT MAX (ins_srtcontrole_key)
INTO v_srtcontrole_key
FROM ins_srtcontrole
WHERE LOWER (ins_srtcontrole_omschrijving) =
SUBSTR (
TRIM (
v_ins_srtdeel_code
|| ' - '
|| LOWER (v_taakomschrijving)),
1,
60);
ELSE -- Zo niet, dan is het dus geen bestaande standaard taak en gaan we straks in de update NIEUWE taak aanmaken
-- En passen dan ook maar gelijk taakomschrijving goed aan
v_errormsg := 'Fout bij aanpassen taakomschrijving ';
IF ( LENGTH (TRIM (v_ins_srtdeel_code))
+ 3
+ LENGTH (TRIM (v_taakomschrijving))) >
60
THEN
fac.imp_writelog (
p_import_key,
'W',
'Nieuwe taak - Aangepast ivm lengte groter dan 60 ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakomschrijving
|| ' wordt: '
|| SUBSTR (
TRIM (v_ins_srtdeel_code || ' - ' || v_taakomschrijving),
1,
60));
END IF;
v_taakomschrijving :=
SUBSTR (TRIM (v_ins_srtdeel_code || ' - ' || v_taakomschrijving),
1,
60);
END IF;
END IF;
-- Hier controleren of voor de bestaande taak ook de objecttaak al bestaat...
v_errormsg :=
'Fout controleren nieuwe of bestaande objecttaak '
|| rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakomschrijving;
IF v_deel_key IS NOT NULL AND v_ongeldig = 0 AND v_srtcontrole_key IS NOT NULL
THEN
SELECT MAX (t.ins_srtcontroledl_xcp_key),
MAX (t.ins_srtcontroledl_xcp_startdat)
INTO v_ins_srtcontroledl_xcp_key, v_taakobject_startjaar_d
FROM ins_srtcontroledl_xcp t
WHERE t.ins_srtcontrole_key = v_srtcontrole_key
AND t.ins_deel_key = v_deel_key;
END IF;
-- Hier controleren of alle verplichte velden voor de nieuwe objecttaak correct zijn gevuld
---- Dit zijn: Startdatum + Eenheid + Periode + Taakgroep(?) + Percentage (?) + Kosten (?)
v_errormsg := 'Fout controleren verplichte velden bij nieuwe objecttaak ';
IF v_deel_key IS NOT NULL
AND v_ongeldig = 0
AND v_ins_srtcontroledl_xcp_key IS NULL
THEN
-- startdatum mag ook leeg zijn, dan is het automatich object registratie + cyclus
-- IF v_taakobjectstartjaar IS NULL THEN
-- fac.imp_writelog (
-- p_import_key, 'E', 'Startdatum niet ingevuld - Regel wordt niet verwerkt.. ',
-- rec.fac_imp_file_index || ' - ' || v_objectomschrijving);
-- v_ongeldig := 1;
-- END IF;
IF v_taakobjecteenheid IS NULL
OR v_taakobjecteenheid NOT IN ('1',
'2',
'3',
'4')
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen of ongeldige eenheid gevonden - Regel wordt niet verwerkt ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakobjecteenheid);
v_ongeldig := 1;
END IF;
IF (v_taakobjectperiode IS NULL)
OR ( v_taakobjectperiode IS NOT NULL
AND fac.safe_to_number (v_taakobjectperiode) IS NULL)
THEN
fac.imp_writelog (
p_import_key,
'E',
'Geen of ongeldige taakobjectperiode - Regel wordt niet verwerkt ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakobjectperiode);
v_ongeldig := 1;
END IF;
END IF;
-- Hier controleren of er al geschiedenis op de objecttaak zit en de startdatum afwijkt van degene meegegeven in csv
v_errormsg := 'Fout controleren geschiedenis op objecttaak ';
IF v_deel_key IS NOT NULL
AND v_ongeldig = 0
AND v_srtcontrole_key IS NOT NULL
AND v_ins_srtcontroledl_xcp_key IS NOT NULL
THEN
v_taak_geschiedenis := 0;
SELECT COUNT (*)
INTO v_taak_geschiedenis
FROM ins_deelsrtcontrole
WHERE ins_deel_key = v_deel_key
AND ins_srtcontrole_key = v_srtcontrole_key;
IF v_taak_geschiedenis > 0
AND v_taakobjectstartjaar IS NOT NULL
AND v_taakobjectstartjaar_d <> v_taakobject_startjaar_d
THEN
fac.imp_writelog (
p_import_key,
'W',
'Op deze objecttaak zit al geschiedenis - afwijkende startdatum zal niet aangepast worden.. ',
rec.fac_imp_file_index
|| ' - '
|| v_objectomschrijving
|| ' - '
|| v_taakomschrijving
|| ' - '
|| v_taakobjectstartjaar_d
|| ' vs. '
|| v_taakobject_startjaar_d);
END IF;
END IF;
-- Aangezien de taken altijd een startdatum hebben, en objecten niet altijd een aanmaakdatum, gaan we die hier gelijk trekken.
-- Daarna maken we de taak startdatum leeg, zodat de cyclus gaat lopen vanaf de bijgewerkte ins_deel_aanmaak.
-- Zo blijft het mogelijk om taken in de MJOB console te verslepen naar jaartallen eerder dan het aangegeven startjaar.
IF v_taakobjectstartjaar_d < SYSDATE
THEN
UPDATE ins_deel
SET ins_deel_aanmaak = v_taakobjectstartjaar_d
WHERE ins_deel_key = v_deel_key;
END IF;
-- v_taakobjectstartjaar_d := NULL;
-- Nu kunnen we de tussentabel vullen
v_errormsg := 'Fout bij toevoegen regel aan tabel ' || v_objectomschrijving;
IF v_ongeldig = 0
THEN
INSERT INTO tmp_imp_mjb (locatiecode,
objectomschrijving,
taakcategorie,
taakomschrijving,
taakopmerking,
taakgroep,
taakprioriteit,
taakobjectpercentage,
taakobjectopmerking,
taakobjectperiode,
taakobjectstartjaar,
taakobjecteindjaar,
taakobjectmateriaal,
taakobjecteenheid,
taakdienst,
extra_veld4, -- Gebruiken voor taakgeschiedenis
extra_veld5, -- Gebruiken voor taakomschrijving_nieuw
deel_key,
discipline_key,
ismjob,
ins_srtcontrole_key,
ins_srtcontroledl_xcp_key,
ins_srtdeel_key)
VALUES (v_locatiecode,
v_objectomschrijving,
v_taakcategorie,
v_taakomschrijving,
v_taakopmerking,
v_taakgroep,
v_taakprioriteit,
v_taakobjectpercentage,
v_taakobjectopmerking,
v_taakobjectperiode,
v_taakobjectstartjaar_d,
v_taakobjecteindjaar_d,
v_taakobjectmateriaal,
v_taakobjecteenheid,
v_taakdienst,
v_taak_geschiedenis,
v_taakomschrijving_nieuw,
v_deel_key,
v_discipline_key,
v_ismjob,
v_srtcontrole_key,
v_ins_srtcontroledl_xcp_key,
v_ins_srtdeel_key);
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
v_hint := v_errormsg;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_hint);
END;
END LOOP;
-- Aantallen tellen voor logging
v_errormsg := 'Fout bij tellen aantallen voor logging ';
v_count_verwerk := 0; -- aantal te verwerken regels
v_count_n_taak := 0; -- aantal nieuw aan te maken basistaken
v_count_n_taakobject := 0; -- aantal nieuw aan te maken objecttaken
v_count_w_taak := 0; -- aantal bestaande (object)taken te wijzigen
SELECT COUNT (*) INTO v_count_verwerk FROM tmp_imp_mjb;
SELECT COUNT (*)
INTO v_count_n_taak
FROM (SELECT DISTINCT (taakomschrijving)
FROM tmp_imp_mjb
WHERE ins_srtcontrole_key IS NULL) v;
SELECT COUNT (*)
INTO v_count_n_taakobject
FROM tmp_imp_mjb
WHERE ins_srtcontroledl_xcp_key IS NULL;
SELECT COUNT (*)
INTO v_count_w_taak
FROM tmp_imp_mjb
WHERE ins_srtcontrole_key IS NOT NULL AND ins_srtcontroledl_xcp_key IS NOT NULL;
IF v_header_is_valid = 0
THEN
ROLLBACK;
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Toelichting: Verkeerde header. Niet conform specs. ');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'IMPORT TAKEN: aantal te verwerken regels: '
|| TO_CHAR (v_count_verwerk)
|| ' (van de '
|| TO_CHAR (v_count_rec)
|| ' records in csv)'
|| CHR (13)
|| CHR (10)
|| 'Aantal nieuwe taken: '
|| TO_CHAR (v_count_n_taak)
|| CHR (13)
|| CHR (10)
|| 'Aantal nieuwe objecttaken: '
|| TO_CHAR (v_count_n_taakobject)
|| CHR (13)
|| CHR (10)
|| 'Aantal bestaande, te wijzigen (object)taken: '
|| TO_CHAR (v_count_w_taak),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
v_hint := v_errormsg;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_hint);
END kw1c_import_insp_mjob;
/
CREATE OR REPLACE PROCEDURE kw1c_update_insp_mjob (p_import_key IN NUMBER)
AS
CURSOR c_n -- nieuwe taken en objecttaken aanmaken..
IS
SELECT i.*
FROM tmp_imp_mjb i
WHERE i.ins_srtcontrole_key IS NULL;
CURSOR c_no -- nieuwe objecttaken aanmaken..
IS
SELECT i.*
FROM tmp_imp_mjb i
WHERE i.ins_srtcontrole_key IS NOT NULL AND i.ins_srtcontroledl_xcp_key IS NULL;
CURSOR c_m -- bestaande taak en/of objecttaak wijzigen
IS
SELECT i.*
FROM tmp_imp_mjb i
WHERE i.ins_srtcontrole_key IS NOT NULL AND i.ins_srtcontroledl_xcp_key IS NOT NULL;
v_errormsg VARCHAR2 (4000);
v_error_hint VARCHAR2 (4000);
oracle_err_mes VARCHAR2 (4000);
oracle_err_num VARCHAR2 (4000);
v_aanduiding VARCHAR2 (1000);
v_aanduiding_objecttaak VARCHAR2 (1000);
v_ongeldig NUMBER (1);
v_ins_srtcontrole_key NUMBER (10);
v_dienst_key NUMBER (10);
v_taak_al_aangemaakt NUMBER (10);
v_count_verwerk NUMBER := 0; -- aantal verwerkte records
v_count_n_taak NUMBER := 0; -- aantal nieuw aangemaakte basistaken
v_count_n_taakobject NUMBER := 0; -- aantal nieuw aangemaakte objecttaken
v_count_w_taak NUMBER := 0; -- aantal bestaande basistaken gewijzigd
v_count_w_taakobject NUMBER := 0; -- aantal bestaande object-taken gewijzigd
v_count_taak NUMBER := 0;
v_count_taakobject NUMBER := 0;
-- Velden
v_taakomschrijving VARCHAR2 (1000);
v_ins_srtdeel_code VARCHAR2 (10);
v_taakomschrijving_nieuw VARCHAR2 (1000);
v_taakopmerking VARCHAR2 (1000);
v_taakgroep VARCHAR2 (1000);
v_taakdienst_key NUMBER (10);
v_taakdienst VARCHAR2 (1000);
v_taakprioriteit NUMBER (3);
v_percentage NUMBER (3);
v_objecttaakopmerking VARCHAR2 (1000);
v_eenheid NUMBER (3);
v_periode NUMBER (3);
v_startjaar DATE;
v_eindjaar DATE;
v_materiaalkosten NUMBER (10);
BEGIN
v_ongeldig := 0;
FOR rec IN c_n
LOOP
BEGIN
v_aanduiding :=
rec.objectomschrijving
|| ' / '
|| rec.taakcategorie
|| ' - '
|| rec.taakomschrijving;
-- Eenzelfde basistaak kan meerdere keren in CSV zitten.
-- Daarom gaan we in deze cursor eerst kijken of de basistaak er in deze LOOP al ingezet is.
-- Zo ja, dan kunnen we door naar de Objecttaak. Zo niet, dan gaan we eerst de basis
v_errormsg := 'Opzoeken basistaak ' || v_aanduiding;
v_taak_al_aangemaakt := 0;
SELECT COUNT (*)
INTO v_taak_al_aangemaakt
FROM ins_srtcontrole
WHERE ins_srtcontrole_omschrijving = rec.taakomschrijving;
-- Als basistaak al in loop was aangemaakt nog even de key erbij zoeken
IF v_taak_al_aangemaakt > 0
THEN
SELECT MAX (ins_srtcontrole_key)
INTO v_ins_srtcontrole_key
FROM ins_srtcontrole
WHERE ins_srtcontrole_omschrijving = rec.taakomschrijving;
END IF;
-- Basistaak aanmaken
IF v_taak_al_aangemaakt = 0
THEN
-- We gaan we eerst op zoek naar de dienst.
v_errormsg := 'Aanmaken/opzoeken dienst ' || v_aanduiding;
v_dienst_key := NULL;
IF rec.taakdienst IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_dienst_key
FROM prs_dienst
WHERE UPPER (prs_dienst_omschrijving) =
UPPER (SUBSTR (rec.taakdienst, 1, 60));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO prs_dienst (prs_dienst_omschrijving)
VALUES (SUBSTR (rec.taakdienst, 1, 60))
RETURNING prs_dienst_key
INTO v_dienst_key;
END;
END IF;
v_count_verwerk := v_count_verwerk + 1;
v_count_n_taak := v_count_n_taak + 1;
v_errormsg := 'Aanmaken taak ' || v_aanduiding;
INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
ins_srtcontrole_niveau,
ins_srtcontrole_omschrijving,
ctr_discipline_key,
ins_srtcontrole_info,
ins_srtcontrole_periode,
ins_srtcontrole_eenheid,
ins_srtcontrole_mode,
ins_srtcontrole_level,
ins_srtcontrole_opmerking,
prs_dienst_key)
VALUES (rec.ins_srtdeel_key,
'S',
rec.taakomschrijving,
rec.discipline_key,
NULL,
0,
rec.taakobjecteenheid,
1,
COALESCE (rec.taakprioriteit, '0'),
rec.taakopmerking,
v_dienst_key)
RETURNING ins_srtcontrole_key
INTO v_ins_srtcontrole_key;
fac.trackaction ('CTRSUP',
v_ins_srtcontrole_key,
4,
NULL,
'Periodieke taak toegevoegd - Via taakimport ');
END IF;
-- Nu kunnen we de objectaak aanmaken
v_count_n_taakobject := v_count_n_taakobject + 1;
v_errormsg :=
'Aanmaken taak object '
|| v_aanduiding
|| ' ['
|| rec.deel_key
|| '|'
|| v_ins_srtcontrole_key
|| '|'
|| rec.taakobjectperiode
|| '|'
|| rec.taakobjecteenheid
|| '|'
|| fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.'))
|| '|'
|| ROUND (fac.safe_to_number (REPLACE (rec.taakobjectpercentage, ',', '.')))
|| '|'
|| rec.taakgroep
|| '|'
|| rec.taakobjectopmerking
|| ']';
INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
ins_srtcontrole_key,
ins_srtcontroledl_xcp_periode,
ins_srtcontroledl_xcp_eenheid,
ins_srtcontroledl_xcp_materia,
ins_srtcontroledl_xcp_perc,
ins_srtcontroledl_xcp_groep,
ins_srtcontroledl_xcp_opmerk,
ins_srtcontroledl_xcp_startdat)
VALUES (rec.deel_key,
v_ins_srtcontrole_key,
rec.taakobjectperiode,
rec.taakobjecteenheid,
fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.')),
ROUND (fac.safe_to_number (REPLACE (rec.taakobjectpercentage, ',', '.'))),
rec.taakgroep,
rec.taakobjectopmerking,
rec.taakobjectstartjaar);
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := v_errormsg;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_error_hint);
v_ongeldig := 1;
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
FOR rec IN c_no
LOOP
BEGIN
v_aanduiding :=
rec.objectomschrijving
|| ' / '
|| rec.taakcategorie
|| ' - '
|| rec.taakomschrijving;
-- We kunnen direct objectaak aanmaken
v_count_verwerk := v_count_verwerk + 1;
v_count_n_taakobject := v_count_n_taakobject + 1;
v_errormsg :=
'Aanmaken taak object '
|| v_aanduiding
|| ' ['
|| rec.deel_key
|| '|'
|| rec.ins_srtcontrole_key
|| '|'
|| rec.taakobjectperiode
|| '|'
|| rec.taakobjecteenheid
|| '|'
|| fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.'))
|| '|'
|| ROUND (fac.safe_to_number (REPLACE (rec.taakobjectpercentage, ',', '.')))
|| '|'
|| rec.taakgroep
|| '|'
|| rec.taakobjectopmerking
|| ']';
INSERT INTO ins_srtcontroledl_xcp (ins_deel_key,
ins_srtcontrole_key,
ins_srtcontroledl_xcp_periode,
ins_srtcontroledl_xcp_eenheid,
ins_srtcontroledl_xcp_materia,
ins_srtcontroledl_xcp_perc,
ins_srtcontroledl_xcp_groep,
ins_srtcontroledl_xcp_opmerk)
VALUES (rec.deel_key,
rec.ins_srtcontrole_key,
rec.taakobjectperiode,
rec.taakobjecteenheid,
fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.')),
ROUND (fac.safe_to_number (REPLACE (rec.taakobjectpercentage, ',', '.'))),
rec.taakgroep,
rec.taakobjectopmerking);
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := v_errormsg;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_error_hint);
v_ongeldig := 1;
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
FOR rec IN c_m
LOOP
BEGIN
v_count_verwerk := v_count_verwerk + 1;
v_aanduiding :=
rec.objectomschrijving
|| ' / '
|| rec.taakcategorie
|| ' - '
|| rec.taakomschrijving;
-- Basis-taak - Taakomschrijving
v_errormsg := 'Fout taakomschrijving wijzigen ';
v_taakomschrijving := ''; -- huidige taakomschrijving
v_taakomschrijving_nieuw := '';
IF rec.extra_veld5 IS NOT NULL
THEN
-- Eerst de objectsrt-code ophalen en nieuwe taakomschrijving bepalen
SELECT ins_srtdeel_code_upper
INTO v_ins_srtdeel_code
FROM ins_srtdeel
WHERE ins_srtdeel_key = rec.ins_srtdeel_key;
v_taakomschrijving_nieuw :=
SUBSTR (TRIM (v_ins_srtdeel_code || ' - ' || rec.extra_veld5), 1, 60);
-- Huidige omschrijving ophalen
SELECT ins_srtcontrole_omschrijving
INTO v_taakomschrijving
FROM ins_srtcontrole
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
IF v_taakomschrijving <> v_taakomschrijving_nieuw
THEN
UPDATE ins_srtcontrole
SET ins_srtcontrole_omschrijving = v_taakomschrijving_nieuw
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := 1;
fac.trackaction (
'CTRSUP',
rec.ins_srtcontrole_key,
4,
NULL,
'Gewijzigd Taakomschrijving: '
|| v_taakomschrijving
|| '-->'
|| v_taakomschrijving_nieuw);
END IF;
END IF;
-- Basis-taak - Taakopmerking
v_errormsg := 'Fout taakopmerking wijzigen ';
SELECT ins_srtcontrole_opmerking
INTO v_taakopmerking
FROM ins_srtcontrole
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
IF v_taakopmerking IS NULL
THEN
v_taakopmerking := '<leeg>';
END IF;
IF v_taakopmerking <> rec.taakopmerking AND rec.taakopmerking IS NOT NULL
THEN
UPDATE ins_srtcontrole
SET ins_srtcontrole_opmerking = rec.taakopmerking
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := 1;
fac.trackaction (
'CTRSUP',
rec.ins_srtcontrole_key,
4,
NULL,
'Gewijzigd Taakopmerking: ' || v_taakopmerking || '-->' || rec.taakopmerking);
END IF;
-- Basis-taak - Taakprioriteit
v_errormsg := 'Fout prioriteit wijzigen ';
SELECT ins_srtcontrole_level
INTO v_taakprioriteit
FROM ins_srtcontrole
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
IF rec.taakprioriteit IS NOT NULL
AND v_taakprioriteit <> fac.safe_to_number (rec.taakprioriteit)
THEN
UPDATE ins_srtcontrole
SET ins_srtcontrole_level = fac.safe_to_number (rec.taakprioriteit)
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := 1;
fac.trackaction (
'CTRSUP',
rec.ins_srtcontrole_key,
4,
NULL,
'Gewijzigd Prioriteit: ' || v_taakprioriteit || '-->' || rec.taakprioriteit);
END IF;
-- Basis-taak - Dienst
v_errormsg := 'Fout dienst wijzigen ' || v_aanduiding;
v_taakdienst_key := NULL;
v_taakdienst := '<leeg>';
-- Eerst huidige dienstkey en omschrijving ophalen
BEGIN
SELECT MAX (t.prs_dienst_key), MAX (d.prs_dienst_omschrijving)
INTO v_taakdienst_key, v_taakdienst
FROM ins_srtcontrole t, prs_dienst d
WHERE t.ins_srtcontrole_key = rec.ins_srtcontrole_key
AND t.prs_dienst_key = d.prs_dienst_key
AND t.prs_dienst_key IS NOT NULL;
IF v_taakdienst IS NULL
THEN
v_taakdienst := '<leeg>';
END IF;
IF v_taakdienst_key IS NULL
THEN
v_taakdienst_key := -1;
END IF;
END;
-- Dan gaan we kijken of de dienst meegegeven in csv al bestaat
v_errormsg := 'Aanmaken/opzoeken dienst ' || v_aanduiding;
v_dienst_key := NULL;
IF rec.taakdienst IS NOT NULL
THEN
BEGIN
SELECT prs_dienst_key
INTO v_dienst_key
FROM prs_dienst
WHERE UPPER (prs_dienst_omschrijving) = UPPER (SUBSTR (rec.taakdienst, 1, 60));
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO prs_dienst (prs_dienst_omschrijving)
VALUES (SUBSTR (rec.taakdienst, 1, 60))
RETURNING prs_dienst_key
INTO v_dienst_key;
END;
END IF;
IF v_taakdienst_key <> v_dienst_key AND rec.taakdienst IS NOT NULL
THEN
UPDATE ins_srtcontrole
SET prs_dienst_key = v_dienst_key
WHERE ins_srtcontrole_key = rec.ins_srtcontrole_key;
v_count_taak := 1;
fac.trackaction (
'CTRSUP',
rec.ins_srtcontrole_key,
4,
NULL,
'Gewijzigd taakdienst: ' || v_taakdienst || '-->' || rec.taakdienst);
END IF;
IF v_count_taak = 1
THEN
v_count_w_taak := v_count_w_taak + 1;
END IF;
-- Gaan nu de object-taken aanpassen
v_aanduiding_objecttaak :=
rec.taakcategorie
|| ' - '
|| v_ins_srtdeel_code
|| rec.taakomschrijving
|| CHR (13)
|| CHR (10);
-- Object-taak - Percentage
v_errormsg := 'Fout percentage wijzigen ';
SELECT COALESCE (ins_srtcontroledl_xcp_perc, 0)
INTO v_percentage
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF rec.taakobjectpercentage IS NOT NULL AND v_percentage <> rec.taakobjectpercentage
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_perc =
ROUND (
fac.safe_to_number (REPLACE (rec.taakobjectpercentage, ',', '.')))
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Percentage: ('
|| v_percentage
|| ') --> '
|| rec.taakobjectpercentage);
END IF;
-- Object-taak - Opmerking
v_errormsg := 'Fout opmerking objecttaak wijzigen ';
SELECT ins_srtcontroledl_xcp_opmerk
INTO v_objecttaakopmerking
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF v_objecttaakopmerking IS NULL
THEN
v_objecttaakopmerking := '<leeg>';
END IF;
IF rec.taakobjectopmerking IS NOT NULL
AND v_objecttaakopmerking <> rec.taakobjectopmerking
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_opmerk = rec.taakobjectopmerking
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Taakopmerking: ('
|| v_objecttaakopmerking
|| ') --> '
|| rec.taakobjectopmerking);
END IF;
-- Object-taak - Eenheid
v_errormsg := 'Fout eenheid wijzigen ';
SELECT COALESCE (ins_srtcontroledl_xcp_eenheid, 0)
INTO v_eenheid
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF rec.taakobjecteenheid IS NOT NULL
AND fac.safe_to_number (rec.taakobjecteenheid) <> v_eenheid
AND rec.ismjob = 0
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_eenheid = fac.safe_to_number (rec.taakobjecteenheid)
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Eenheid: ('
|| v_eenheid
|| ') --> '
|| rec.taakobjecteenheid);
END IF;
-- Object-taak - Periode
v_errormsg := 'Fout periode wijzigen ';
SELECT COALESCE (ins_srtcontroledl_xcp_periode, 0)
INTO v_periode
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF rec.taakobjectperiode IS NOT NULL
AND fac.safe_to_number (rec.taakobjectperiode) <> v_periode
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_periode = fac.safe_to_number (rec.taakobjectperiode)
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Periode: ('
|| v_periode
|| ') --> '
|| rec.taakobjectperiode);
END IF;
-- Object-taak - Taakgroep
v_errormsg := 'Fout taakgroep wijzigen ';
SELECT ins_srtcontroledl_xcp_groep
INTO v_taakgroep
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF v_taakgroep IS NULL
THEN
v_taakgroep := '<leeg>';
END IF;
IF v_taakgroep <> rec.taakgroep AND rec.taakgroep IS NOT NULL
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_groep = rec.taakgroep
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Taakgroep: ('
|| v_taakgroep
|| ') --> '
|| rec.taakgroep);
END IF;
-- Object-taak - Eindjaar
v_errormsg := 'Fout eindjaar wijzigen ';
SELECT ins_srtcontroledl_xcp_eind
INTO v_eindjaar
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
-- IF v_eindjaar IS NULL THEN v_eindjaar := TO_DATE(01-01-1900, 'DD-MM-YYYY'); END IF;
IF (v_eindjaar IS NULL AND rec.taakobjecteindjaar IS NOT NULL)
OR ( v_eindjaar IS NOT NULL
AND rec.taakobjecteindjaar IS NOT NULL
AND v_eindjaar <> rec.taakobjecteindjaar)
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_eind = rec.taakobjecteindjaar
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Eindjaar: ('
|| v_eindjaar
|| ') --> '
|| rec.taakobjecteindjaar);
END IF;
-- Object-taak - Kosten
v_errormsg := 'Fout kosten wijzigen ';
SELECT COALESCE (MAX (ins_srtcontroledl_xcp_materia), 0)
INTO v_materiaalkosten
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
IF v_materiaalkosten <>
fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.'))
AND rec.taakobjectmateriaal IS NOT NULL
THEN
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_materia =
fac.safe_to_number (REPLACE (rec.taakobjectmateriaal, ',', '.'))
WHERE ins_srtcontroledl_xcp_key = rec.ins_srtcontroledl_xcp_key;
v_count_taakobject := 1;
fac.trackaction (
'INSUPD',
rec.deel_key,
SYS_CONTEXT ('USERENV', 'CLIENT_IDENTIFIER'),
NULL,
v_aanduiding_objecttaak
|| 'Kosten: ('
|| v_materiaalkosten
|| ') --> '
|| rec.taakobjectmateriaal);
END IF;
IF v_count_taakobject = 1
THEN
v_count_w_taakobject := v_count_w_taakobject + 1;
END IF;
EXCEPTION
WHEN OTHERS
THEN
v_error_hint := v_errormsg;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errormsg
|| 'ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_error_hint);
v_ongeldig := 1;
END;
v_aanduiding := 'Einde loop ' || v_aanduiding;
END LOOP;
v_ongeldig := 0;
IF v_ongeldig = 0
THEN
COMMIT;
fac.imp_writelog (
p_import_key,
'S',
'IMPORT TAKEN: aantal verwerkte regels: '
|| TO_CHAR (v_count_verwerk)
|| CHR (13)
|| CHR (10)
|| 'Aantal nieuwe taken ingelezen: '
|| TO_CHAR (v_count_n_taak)
|| CHR (13)
|| CHR (10)
|| 'Aantal nieuwe objecttaken ingelezen: '
|| TO_CHAR (v_count_n_taakobject)
|| CHR (13)
|| CHR (10)
|| 'Aantal bestaande basistaken gewijzigd: '
|| TO_CHAR (v_count_w_taak)
|| CHR (13)
|| CHR (10)
|| 'Aantal bestaande objecttaken gewijzigd: '
|| TO_CHAR (v_count_w_taakobject),
'');
ELSE
ROLLBACK;
END IF;
END;
/
----------------------------------------------------------------------------
------------------ EINDE MBJOB IMPORT --------------------------------------
----------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE kw1c_import_historie (p_import_key IN NUMBER)
AS
BEGIN
fac_import_genericcsv (p_import_key);
END kw1c_import_historie;
/
CREATE OR REPLACE PROCEDURE kw1c_update_historie (p_import_key IN NUMBER)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
CURSOR vloer IS
SELECT UPPER (i.fac_imp_csv_col02) ruimtenr_oud,
i.fac_imp_csv_col03 vloertypecode,
i.fac_imp_csv_col04 vloertypenaam,
fac.safe_to_date (i.fac_imp_csv_col05, 'dd-mm-yyyy') begindatum,
fac.safe_to_date (i.fac_imp_csv_col06, 'dd-mm-yyyy') einddatum,
v.fac_usrdata_key vloertype_key,
rn.alg_ruimte_key,
rn.alg_ruimte_nr
FROM fac_imp_csv i,
(SELECT r.alg_ruimte_key,
UPPER (rk.alg_onrgoedkenmerk_waarde) ruimte_nr_oud,
r.alg_ruimte_nr
FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r
WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key
AND k.alg_kenmerk_key = 1062
AND rk.alg_onrgoed_niveau = 'R'
AND r.alg_ruimte_key = rk.alg_onrgoed_key) rn,
(SELECT d.fac_usrdata_key, d.fac_usrdata_code, d.fac_usrdata_upper
FROM fac_usrtab t, fac_usrdata d
WHERE t.fac_usrtab_key = 4 AND d.fac_usrtab_key = t.fac_usrtab_key) v
WHERE UPPER (i.fac_imp_csv_col01) = 'VLOERAFWERKING'
AND v.fac_usrdata_code = i.fac_imp_csv_col03
AND rn.ruimte_nr_oud = UPPER (i.fac_imp_csv_col02)
--- AND i.fac_imp_csv_col06 IS NOT NULL hiermee nemen we alleen verwijderde datums op, maar kunnen we verschillen in de huidige situatie niet vinden
AND NOT EXISTS --- het huidige vloertype laten we buiten beschouwing
(SELECT r.alg_ruimte_key, rk.alg_onrgoedkenmerk_waarde vloerafwerking_key
FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r
WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key
AND k.alg_kenmerk_key = 1009
AND rk.alg_onrgoed_niveau = 'R'
AND r.alg_ruimte_key = rk.alg_onrgoed_key
AND rk.alg_onrgoedkenmerk_verwijder IS NULL
AND r.alg_ruimte_key = rn.alg_ruimte_key
AND rk.alg_onrgoedkenmerk_waarde = v.fac_usrdata_key);
CURSOR org IS
SELECT UPPER (i.fac_imp_csv_col02) ruimtenr_oud,
i.fac_imp_csv_col03 oe,
fac.safe_to_date (SUBSTR (i.fac_imp_csv_col04, 1, 10), 'dd-mm-yyyy') begindatum,
fac.safe_to_date (SUBSTR (i.fac_imp_csv_col05, 1, 10), 'dd-mm-yyyy') einddatum,
rn.alg_ruimte_key,
rn.alg_ruimte_nr,
a.prs_afdeling_key,
a.prs_afdeling_naam
FROM fac_imp_csv i,
prs_afdeling a,
(SELECT r.alg_ruimte_key,
UPPER (rk.alg_onrgoedkenmerk_waarde) ruimte_nr_oud,
r.alg_ruimte_nr
FROM alg_kenmerk k, alg_onrgoedkenmerk rk, alg_ruimte r
WHERE k.alg_kenmerk_key = rk.alg_kenmerk_key
AND k.alg_kenmerk_key = 1062
AND rk.alg_onrgoed_niveau = 'R'
AND r.alg_ruimte_key = rk.alg_onrgoed_key) rn
WHERE UPPER (i.fac_imp_csv_col01) = 'ORGANISATIE'
AND rn.ruimte_nr_oud = UPPER (i.fac_imp_csv_col02)
AND a.prs_afdeling_naam = i.fac_imp_csv_col03;
BEGIN
FOR rec IN vloer
LOOP
BEGIN
--- om de historie te vullen vullen we de tabel alg_onrgoedkenmerk met 'vervallen' waarden
INSERT INTO alg_onrgoedkenmerk (alg_onrgoed_key,
alg_onrgoed_niveau,
alg_kenmerk_key,
alg_onrgoedkenmerk_waarde,
alg_onrgoedkenmerk_aanmaak,
alg_onrgoedkenmerk_verwijder)
VALUES (rec.alg_ruimte_key,
'R',
1009,
rec.vloertype_key,
rec.begindatum,
rec.einddatum);
fac.trackaction ('ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Vloerafwerking ' || rec.vloertypenaam || ' opgenomen in het archief');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Historie ruimte ' || rec.alg_ruimte_nr || ' kan niet worden gevuld');
COMMIT;
END;
END LOOP;
FOR rec IN org
LOOP
BEGIN
INSERT INTO prs_ruimteafdeling (prs_afdeling_key,
alg_ruimte_key,
prs_ruimteafdeling_bezetting,
prs_ruimteafdeling_ingangsdatum,
prs_ruimteafdeling_einddatum)
VALUES (rec.prs_afdeling_key,
rec.alg_ruimte_key,
'100',
rec.begindatum,
rec.einddatum);
fac.trackaction (
'ALGRUP',
rec.alg_ruimte_key,
3,
SYSDATE,
'Ruimtegebruiker ' || rec.prs_afdeling_naam || ' opgenomen in het archief');
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
v_errorhint
|| ' ORACLE (error '
|| oracle_err_num
|| '/'
|| oracle_err_mes
|| ')';
fac.imp_writelog (
p_import_key,
'W',
v_aanduiding || v_errormsg,
'Historie ruimte ' || rec.alg_ruimte_nr || ' kan niet worden gevuld');
COMMIT;
END;
END LOOP;
-- we ruimen de import tabel direct weer netjes op aangezien dit een generieke importtabel is
DELETE FAC_IMP_CSV i
WHERE i.fac_import_key = p_import_key;
END kw1c_update_historie;
/
CREATE OR REPLACE VIEW kw1c_export_gebouw
(
LocatieCode,
GebouwCode,
GebouwNaam,
Adres,
Postcode,
Plaats,
Begindatum,
Einddatum,
Breedtegraad,
Lengtegraad
)
AS
SELECT l.alg_locatie_code,
g.alg_gebouw_code,
g.alg_gebouw_naam,
l.alg_locatie_adres,
l.alg_locatie_postcode,
l.alg_locatie_plaats,
ind.ingangsdatum,
g.alg_gebouw_vervaldatum,
g.alg_gebouw_x,
g.alg_gebouw_y
FROM alg_locatie l,
alg_gebouw g,
(SELECT ok.alg_onrgoed_key,
fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') ingangsdatum
FROM alg_onrgoedkenmerk ok, alg_kenmerk k
WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key
AND ok.alg_onrgoed_niveau = 'G'
AND k.alg_kenmerk_key = 1001
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) ind
WHERE l.alg_locatie_key = g.alg_locatie_key AND ind.alg_onrgoed_key(+) = g.alg_gebouw_key;
CREATE OR REPLACE VIEW kw1c_export_locatie
(
Code,
Naam,
NaamVolledig,
Adres,
Postcode,
Plaats,
Breedtegraad,
Lengtegraad,
Begindatum,
Einddatum
)
AS
SELECT l.alg_locatie_code,
l.alg_locatie_omschrijving,
NULL,
l.alg_locatie_adres,
l.alg_locatie_postcode,
l.alg_locatie_plaats,
l.alg_locatie_x,
l.alg_locatie_y,
ind.ingangsdatum,
l.alg_locatie_vervaldatum
FROM alg_locatie l,
(SELECT ok.alg_onrgoed_key,
fac.safe_to_date (ok.alg_onrgoedkenmerk_waarde, 'DD-MM-YYYY') ingangsdatum
FROM alg_onrgoedkenmerk ok, alg_kenmerk k
WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key
AND ok.alg_onrgoed_niveau = 'L'
AND k.alg_kenmerk_key = 1120
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) ind
WHERE l.alg_locatie_key = ind.alg_onrgoed_key(+);
CREATE OR REPLACE VIEW kw1c_export_ruimtecategorien
(
RuimteCategorieCode,
RuimteCategorieNaam
)
AS
SELECT d.fac_usrdata_code, d.fac_usrdata_omschr
FROM fac_usrtab t, fac_usrdata d
WHERE t.fac_usrtab_key = 21
AND t.fac_usrtab_key = d.fac_usrtab_key
AND d.fac_usrdata_verwijder IS NULL;
CREATE OR REPLACE VIEW kw1c_export_ruimtedetails
(
ruimtecode,
oppervlakte,
aantalwerkplekken,
ruimtecategoriecode,
ruimtetypecode,
begindatum,
einddatum
)
AS
SELECT r.alg_ruimte_nr,
r.alg_ruimte_bruto_vloeropp,
wp.aantal_wp,
cat.cat_code,
t.type_code,
NULL begindatum,
NULL einddatum
FROM alg_ruimte r,
(SELECT ok.alg_onrgoed_key, fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) aantal_wp
FROM alg_onrgoedkenmerk ok, alg_kenmerk k
WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key
AND ok.alg_onrgoed_niveau = 'R'
AND k.alg_kenmerk_key = 1006
AND ok.alg_onrgoedkenmerk_verwijder IS NULL) wp,
(SELECT ok.alg_onrgoed_key, d.fac_usrdata_code cat_code
FROM alg_onrgoedkenmerk ok,
alg_kenmerk k,
fac_usrdata d,
fac_usrtab t
WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key
AND ok.alg_onrgoed_niveau = 'R'
AND k.alg_kenmerk_key = 1060
AND ok.alg_onrgoedkenmerk_verwijder IS NULL
AND d.fac_usrdata_key = ok.alg_onrgoedkenmerk_waarde
AND t.fac_usrtab_key = d.fac_usrtab_key
AND t.fac_usrtab_key = 21) cat,
(SELECT ok.alg_onrgoed_key, d.fac_usrdata_code type_code
FROM alg_onrgoedkenmerk ok,
alg_kenmerk k,
fac_usrdata d,
fac_usrtab t
WHERE k.alg_kenmerk_key = ok.alg_kenmerk_key
AND ok.alg_onrgoed_niveau = 'R'
AND k.alg_kenmerk_key = 1008
AND ok.alg_onrgoedkenmerk_verwijder IS NULL
AND d.fac_usrdata_key = ok.alg_onrgoedkenmerk_waarde
AND t.fac_usrtab_key = d.fac_usrtab_key
AND t.fac_usrtab_key = 3) t
WHERE wp.alg_onrgoed_key(+) = r.alg_ruimte_key
AND cat.alg_onrgoed_key(+) = r.alg_ruimte_key
AND t.alg_onrgoed_key(+) = r.alg_ruimte_key;
CREATE OR REPLACE VIEW kw1c_export_ruimtegebruik
(
RuimteCode,
OrganisatieEenheidCode,
Begindatum,
Einddatum,
Status
)
AS
SELECT r.alg_ruimte_nr,
a.prs_afdeling_naam,
ra.prs_ruimteafdeling_ingangsdatum,
ra.prs_ruimteafdeling_einddatum,
CASE WHEN a.prs_afdeling_naam = '002' THEN 'Buiten gebruik' ELSE 'In gebruik' END status
FROM prs_ruimteafdeling ra, alg_ruimte r, prs_afdeling a
WHERE ra.alg_ruimte_key = r.alg_ruimte_key AND a.prs_afdeling_key = ra.prs_afdeling_key;
CREATE OR REPLACE VIEW kw1c_export_ruimtes
(
Code,
Naam,
GebouwCode,
LocatieCode,
Actief,
VerdiepingCode,
VerdiepingNaam,
Virtueel
)
AS
SELECT r.alg_ruimte_nr,
r.alg_ruimte_omschrijving,
g.alg_gebouw_code,
l.alg_locatie_code,
'Actief?',
v.alg_verdieping_code,
v.alg_verdieping_omschrijving,
'Virtuele ruimtes zijn terreinen?'
FROM alg_ruimte r,
alg_verdieping v,
alg_gebouw g,
alg_locatie l
WHERE 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;
CREATE OR REPLACE VIEW kw1c_export_ruimtetype
(
RuimtetypeCode,
RuimtetypeNaam
)
AS
SELECT ud.fac_usrdata_code, ud.fac_usrdata_omschr
FROM fac_usrdata ud, fac_usrtab ut
WHERE ut.fac_usrtab_key = ud.fac_usrtab_key AND ut.fac_usrtab_key = 3;
CREATE OR REPLACE VIEW kw1c_export_vloerafw
(
ruimtecode,
vloertypecode,
vloertypenaam,
begindatum,
einddatum
)
AS
SELECT r.alg_ruimte_nr,
ud.fac_usrdata_code,
ud.fac_usrdata_omschr,
ok.alg_onrgoedkenmerk_aanmaak,
ok.alg_onrgoedkenmerk_verwijder
FROM fac_usrdata ud,
fac_usrtab ut,
alg_onrgoedkenmerk ok,
alg_kenmerk k,
alg_ruimte r
WHERE ut.fac_usrtab_key = ud.fac_usrtab_key
AND ut.fac_usrtab_key = 4
AND k.alg_kenmerk_key = ok.alg_kenmerk_key
AND k.alg_kenmerk_key = 1009
AND ok.alg_onrgoed_niveau = 'R'
AND ok.alg_onrgoed_key = r.alg_ruimte_key
AND fac.safe_to_number (ok.alg_onrgoedkenmerk_waarde) = ud.fac_usrdata_key;
CREATE OR REPLACE VIEW kw1c_export_vloerafw_types
(
referentie,
naam,
omschrijving,
hardheid
)
AS
SELECT ud.fac_usrdata_code,
ud.fac_usrdata_omschr,
NULL,
ud.fac_usrdata_omschr2
FROM fac_usrdata ud, fac_usrtab ut
WHERE ut.fac_usrtab_key = ud.fac_usrtab_key AND ut.fac_usrtab_key = 4;
------ 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