Files
Customer/PCBO/PCBO.sql
Suzan Wiegerinck ed19bb9da4 PCBO#74850 Implementatie PCBO --> MJOB
svn path=/Customer/trunk/; revision=63840
2024-03-07 08:43:46 +00:00

1435 lines
60 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
DEFINE thisfile = 'PCBO.SQL'
DEFINE dbuser = 'PCBO'
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 VIEW pcbo_v_rapp_gebouwdossier
(
html_foto,
BRIN,
Locatie_omschrijving,
Adres,
Postcode,
Plaats,
Contactpersoon,
Telefoonnummer_contactpers,
Intern_telefoonnummer_contactpers,
Gebouw_code,
Gebouw_naam,
Gebouw_key
)
AS
SELECT DECODE (
g.alg_gebouw_image,
NULL, 'Geen foto',
'<img src="https://pcbo.facilitor.nl/cust/PCBO/photos/gebouw/'
|| g.alg_gebouw_image
|| '" height="60">') foto,
l.alg_locatie_code,
l.alg_locatie_omschrijving,
l.alg_locatie_adres,
l.alg_locatie_postcode,
l.alg_locatie_plaats,
cp.contactpersoon,
telnr.telnr_contactpersoon,
intern_telnr.intern_telnr_contactpersoon,
g.alg_gebouw_code,
g.alg_gebouw_naam,
g.alg_gebouw_key
FROM alg_gebouw g,
alg_locatie l,
(SELECT gk.alg_onrgoed_key,
gk.alg_onrgoedkenmerk_waarde contactpersoon
FROM alg_onrgoedkenmerk gk
WHERE gk.alg_kenmerk_key = 1380) cp,
(SELECT gk.alg_onrgoed_key,
gk.alg_onrgoedkenmerk_waarde telnr_contactpersoon
FROM alg_onrgoedkenmerk gk
WHERE gk.alg_kenmerk_key = 1140) telnr,
(SELECT gk.alg_onrgoed_key,
gk.alg_onrgoedkenmerk_waarde intern_telnr_contactpersoon
FROM alg_onrgoedkenmerk gk
WHERE gk.alg_kenmerk_key = 1142) intern_telnr
WHERE l.alg_locatie_key = g.alg_locatie_key
AND cp.alg_onrgoed_key(+) = g.alg_gebouw_key
AND telnr.alg_onrgoed_key(+) = g.alg_gebouw_key
AND intern_telnr.alg_onrgoed_key(+) = g.alg_gebouw_key
AND g.alg_gebouw_verwijder IS NULL;
CREATE OR REPLACE VIEW PCBO_V_CAD_THEMA_GEBRUIKSF
(
ALG_RUIMTE_KEY,
WAARDE,
WAARDE_KEY
)
AS
SELECT r.alg_ruimte_key, COALESCE(gf.fac_usrdata_omschr, 'Onbekend'), COALESCE(gf.fac_usrdata_key, 21)
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 = 1160
AND rr.alg_ruimte_key = ok.alg_onrgoed_key) gf
WHERE gf.alg_ruimte_key (+) = r.alg_ruimte_key;
CREATE OR REPLACE TRIGGER pcbo_t_thema_gebruiksf_i_iu
INSTEAD OF INSERT OR UPDATE
ON PCBO_V_CAD_THEMA_GEBRUIKSF
FOR EACH ROW
BEGIN
--- kenmerk bijwerken, let op: de nieuwe waarde is de key en dus niet de omschrijving
alg.upsertkenmerk (1101, :new.alg_ruimte_key, :new.waarde_key);
END;
/
CREATE OR REPLACE VIEW PCBO_V_ALGEMEEN
AS
SELECT D.INS_DEEL_KEY INS_DEEL_KEY,
D.INS_DEEL_OMSCHRIJVING || ' - ' || D.INS_DEEL_OPMERKING INS_OMSCHRIJVING
FROM INS_DEEL D, INS_SRTDEEL SD, INS_SRTGROEP SG
WHERE D.INS_SRTDEEL_KEY = SD.INS_SRTDEEL_KEY
AND SG.INS_SRTGROEP_KEY = SD.INS_SRTGROEP_KEY
AND SG.INS_SRTGROEP_KEY = 81 -- algemeen
AND D.INS_DEEL_VERWIJDER IS NULL;
CREATE OR REPLACE VIEW PCBO_V_BOUWKUNDIG
AS
SELECT D.INS_DEEL_KEY INS_DEEL_KEY,
D.INS_DEEL_OMSCHRIJVING || ' - ' || D.INS_DEEL_OPMERKING INS_OMSCHRIJVING
FROM INS_DEEL D, INS_SRTDEEL SD, INS_SRTGROEP SG
WHERE D.INS_SRTDEEL_KEY = SD.INS_SRTDEEL_KEY
AND SG.INS_SRTGROEP_KEY = SD.INS_SRTGROEP_KEY
AND SG.INS_SRTGROEP_KEY = 82 -- bouwkundig
AND D.INS_DEEL_VERWIJDER IS NULL;
CREATE OR REPLACE VIEW PCBO_V_E_INSTALLATIES
AS
SELECT D.INS_DEEL_KEY INS_DEEL_KEY,
D.INS_DEEL_OMSCHRIJVING || ' - ' || D.INS_DEEL_OPMERKING INS_OMSCHRIJVING
FROM INS_DEEL D, INS_SRTDEEL SD, INS_SRTGROEP SG
WHERE D.INS_SRTDEEL_KEY = SD.INS_SRTDEEL_KEY
AND SG.INS_SRTGROEP_KEY = SD.INS_SRTGROEP_KEY
AND SG.INS_SRTGROEP_KEY = 83 -- e-installaties
AND D.INS_DEEL_VERWIJDER IS NULL;
CREATE OR REPLACE VIEW PCBO_V_W_INSTALLATIES
AS
SELECT D.INS_DEEL_KEY INS_DEEL_KEY,
D.INS_DEEL_OMSCHRIJVING || ' - ' || D.INS_DEEL_OPMERKING INS_OMSCHRIJVING
FROM INS_DEEL D, INS_SRTDEEL SD, INS_SRTGROEP SG
WHERE D.INS_SRTDEEL_KEY = SD.INS_SRTDEEL_KEY
AND SG.INS_SRTGROEP_KEY = SD.INS_SRTGROEP_KEY
AND SG.INS_SRTGROEP_KEY = 84 -- w-installaties
AND D.INS_DEEL_VERWIJDER IS NULL;
CREATE OR REPLACE VIEW PCBO_V_CONSTRUCTIE
AS
SELECT D.INS_DEEL_KEY INS_DEEL_KEY,
D.INS_DEEL_OMSCHRIJVING || ' - ' || D.INS_DEEL_OPMERKING INS_OMSCHRIJVING
FROM INS_DEEL D, INS_SRTDEEL SD, INS_SRTGROEP SG
WHERE D.INS_SRTDEEL_KEY = SD.INS_SRTDEEL_KEY
AND SG.INS_SRTGROEP_KEY = SD.INS_SRTGROEP_KEY
AND SG.INS_SRTGROEP_KEY = 101 -- constructie
AND D.INS_DEEL_VERWIJDER IS NULL;
CREATE OR REPLACE VIEW PCBO_V_CAD_THEMA_VLOERAFW
(
ALG_RUIMTE_KEY,
WAARDE
)
AS
SELECT r.alg_ruimte_key, va.fac_usrdata_omschr
FROM alg_ruimte r,
(SELECT rr.alg_ruimte_key, ud.fac_usrdata_omschr
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 = 1161
AND rr.alg_ruimte_key = ok.alg_onrgoed_key) va
WHERE va.alg_ruimte_key = r.alg_ruimte_key;
CREATE OR REPLACE VIEW PCBO_V_CAD_THEMA_SCHOONM
(
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 = 1320
AND rr.alg_ruimte_key = ok.alg_onrgoed_key) gf
WHERE gf.alg_ruimte_key (+) = r.alg_ruimte_key;
CREATE OR REPLACE TRIGGER pcbo_t_thema_schoonm_i_iu
INSTEAD OF INSERT OR UPDATE
ON PCBO_V_CAD_THEMA_SCHOONM
FOR EACH ROW
BEGIN
--- kenmerk bijwerken, let op: de nieuwe waarde is de key en dus niet de omschrijving
alg.upsertkenmerk (1320, :new.alg_ruimte_key, :new.waarde_key);
END;
/
----------------------------------------------------------------------------
------------------ BEGIN MBJOB IMPORT --------------------------------------
----------------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE pcbo_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_objectaanteh VARCHAR2(1000);
v_objectaantal 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_taakobjecthoeveelheid VARCHAR2(1000);
v_taakdienst VARCHAR2(1000);
v_deel_key NUMBER(10);
v_deel_aant 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 := '';
IF (REPLACE(UPPER (v_newline), ' ') LIKE 'OBJECTIDENTIFICATIE;OBJECTAANTEH;OBJECTAANTAL;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 (object eehnheid)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_objectaanteh);
v_errormsg := 'Fout opvragen te importeren rij (object aantal)';
fac.imp_getfield (v_newline, c_fielddelimitor, v_objectaantal);
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, ins_deel_aantal
INTO v_deel_key, v_deel_aant
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;
-- wijkt het aantal in de import uit van het aantal dat bij het object staat?
-- Zo nee: dan nemen we aantal en eenheid NIET over in het xcp record
IF v_deel_aant = fac.safe_to_number(v_objectaantal)
THEN
v_objectaantal := NULL;
v_objectaanteh := NULL;
END IF;
-- 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 ,
objectaanteh,
objectaantal,
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_objectaanteh,
v_objectaantal,
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 pcbo_import_insp_mjob;
/
CREATE OR REPLACE PROCEDURE pcbo_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 --------------------------------------
----------------------------------------------------------------------------
------ 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