PLGP#80738 -- Implementatie Plato Groep fase 1

svn path=/Customer/trunk/; revision=64806
This commit is contained in:
Norbert Wassink
2024-05-24 12:30:25 +00:00
parent 7d43ac261b
commit 21f0c93b5a

588
PLGP/PLGP.sql Normal file
View File

@@ -0,0 +1,588 @@
--
-- $Id$
--
DEFINE thisfile = 'PLGP.SQL'
DEFINE dbuser = 'PLGP'
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 PLGP
--AS
--END;
--/
--CREATE OR REPLACE PACKAGE BODY PLGP
--AS
--END;
--/
-- Import routines
CREATE OR REPLACE PROCEDURE PLGP_IMPORT_MJOB_TAKEN (p_import_key IN NUMBER)
AS
CURSOR obj
IS
SELECT fac_imp_csv_key fac_imp_csv_key,
fac_imp_csv_col01 groep,
fac_imp_csv_col02 nlsfb,
fac_imp_csv_col03 obj_soort,
fac_imp_csv_col04 fabrikant,
fac_imp_csv_col05 type,
fac_imp_csv_col06 aantal,
fac_imp_csv_col07 eenheid,
fac_imp_csv_col08 locatie,
fac_imp_csv_col09 taak,
fac_imp_csv_col10 opmerking,
fac_imp_csv_col11 startjaar,
fac_imp_csv_col12 fonds,
fac_imp_csv_col13 cyclus,
fac_imp_csv_col19 bouwjaar,
fac_imp_csv_col20 kosten
FROM fac_imp_csv
WHERE fac_import_key=p_import_key
ORDER BY fac_imp_csv_key;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_ins_deel_key NUMBER;
v_ins_discipline_key NUMBER;
v_ins_srtgroep_key NUMBER;
v_ins_srtdeel_key NUMBER;
v_groep_vorige VARCHAR2(100);
v_obj_soort_vorige VARCHAR2(100);
v_locatie_vorige VARCHAR2(100);
v_aantal_vorige VARCHAR2(100);
v_eenheid_vorige VARCHAR2(100);
v_fabrikant_vorige VARCHAR2(100);
v_type_vorige VARCHAR2(100);
v_locatie_key NUMBER;
v_ruimte_key NUMBER;
p_ruimte_key NUMBER;
v_ruimte_type VARCHAR2(1);
v_aantal NUMBER;
v_locatie_code VARCHAR2(100);
v_gebouw_code VARCHAR2(100);
v_verdieping_code VARCHAR2(100);
v_ruimte_nr VARCHAR2(100);
v_objectid VARCHAR2(100);
v_bouwjaar DATE;
header_is_valid NUMBER;
v_count NUMBER;
v_nu VARCHAR2(200);
v_was VARCHAR2(200);
BEGIN
header_is_valid := 0;
v_ins_discipline_key:=0;
v_count:=0;
v_locatie_code := 'PG-NL';
v_gebouw_code:='HELM';
v_verdieping_code:='0';
v_groep_vorige:='';
v_obj_soort_vorige:='';
v_locatie_vorige:='';
v_aantal_vorige:='';
v_eenheid_vorige:='';
v_fabrikant_vorige:='';
v_type_vorige:='';
v_aanduiding:='Ophalen locatie mislukt ';
SELECT alg_locatie_key
INTO v_locatie_key
FROM alg_locatie
WHERE alg_locatie_code='PG-NL'
AND alg_locatie_verwijder IS NULL;
v_aanduiding:='Ophalen standaard ruimte mislukt ';
SELECT MAX(a.alg_ruimte_key),'R'
INTO p_ruimte_key, v_ruimte_type
FROM alg_v_onroerendgoed_gegevens a
WHERE a.alg_locatie_key=v_locatie_key
AND a.alg_gebouw_code='HELM'
AND a.alg_ruimte_nr='G000';
fac_import_genericcsv(p_import_key);
FOR rec in obj
LOOP
v_count:=v_count+1;
IF ( UPPER(rec.groep)<>'GROEP'
AND UPPER(rec.obj_soort)<> 'ELEMENT')
THEN
-- Laten we vast de object structuur aanmaken
v_aanduiding:='Ophalen discipline ';
BEGIN
SElECT ins_discipline_key
INTO v_ins_discipline_key
FROM ins_tab_discipline i
WHERE i.ins_discipline_omschrijving='MJOB'
AND i.ins_discipline_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO ins_tab_discipline (ins_discipline_aanmaak,
ins_discipline_module,
ins_discipline_omschrijving)
VALUES (SYSDATE, 'INS','MJOB')
RETURNING ins_discipline_key
INTO v_ins_discipline_key;
END;
IF v_ins_discipline_key>0 THEN
v_aanduiding:='Ophalen srtgroep '||rec.groep;
BEGIN
SELECT ins_srtgroep_key INTO v_ins_srtgroep_key
FROM ins_srtgroep sg
WHERE sg.ins_discipline_key=v_ins_discipline_key
AND sg.ins_srtgroep_upper=UPPER(rec.groep)
AND sg.ins_srtgroep_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO ins_srtgroep(ins_discipline_key,
ins_srtgroep_omschrijving,
ins_srtgroep_module,
ins_srtgroep_upper,
ins_srtgroep_aanmaak)
VALUES(v_ins_discipline_key,
rec.groep,
'INS',
UPPER(rec.groep),
SYSDATE)
RETURNING ins_srtgroep_key
INTO v_ins_srtgroep_key;
END;
v_aanduiding:='Ophalen srtobject '||rec.obj_soort;
BEGIN
SELECT isd.ins_srtdeel_key INTO v_ins_srtdeel_key
FROM ins_srtdeel isd
WHERE UPPER(isd.INS_SRTDEEL_OMSCHRIJVING) = UPPER(rec.obj_soort)
AND isd.INS_SRTGROEP_KEY = v_ins_srtgroep_key
AND isd.INS_SRTDEEL_VERWIJDER IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO ins_srtdeel(ins_srtgroep_key,
ins_srtdeel_module,
ins_srtdeel_code,
ins_srtdeel_code_upper,
ins_srtdeel_omschrijving,
ins_srtdeel_upper,
ins_srtdeel_binding,
ins_srtdeel_aanmaak,
ins_srtdeel_eenheid)
VALUES(v_ins_srtgroep_key,
'INS',
rec.nlsfb,
UPPER(rec.nlsfb),
rec.obj_soort,
UPPER(rec.obj_soort),
1, -- allen ruimtes
SYSDATE,
rec.eenheid)
RETURNING ins_srtdeel_key
INTO v_ins_srtdeel_key;
END;
-- Moeten we nog meer controleren ??
-- Nog een keer lkopen
-- dan kijken of het een uniek obejct is maar hoe
-- IS de groep, soort, locatie en aantal gelijk dan zalhet een beknde zijn.
v_nu:= 'NU:('||v_count||') '||rec.groep||'-'||rec.obj_soort||'-'||rec.locatie||'-'||rec.aantal||'-'||rec.eenheid;
v_was:= 'VORIGE:'||v_groep_vorige||'-'|| v_obj_soort_vorige||'-'||v_locatie_vorige||'-'||v_aantal_vorige||'-'||v_eenheid_vorige;
-- fac.imp_writelog (p_import_key,
-- 'W',
-- v_was,
-- v_nu);
IF ( (rec.groep<>v_groep_vorige
OR rec.obj_soort <> v_obj_soort_vorige
OR rec.fabrikant <> v_fabrikant_vorige
OR rec.type <> v_type_vorige
OR rec.locatie <> v_locatie_vorige
OR rec.aantal <> v_aantal_vorige
OR rec.eenheid <> v_eenheid_vorige)
OR v_count=2)
THEN
-- volgens mij hebben we nu een nieuw object.
v_aanduiding:='Ophalen ruimte '||rec.locatie;
BEGIN
select a.alg_ruimte_key
INTO v_ruimte_key
from ALG_V_ALLONRGOED_GEGEVENS a , alg_locatie l
WHERE l.alg_locatie_code=v_locatie_code
AND a.alg_locatie_key= l.alg_locatie_key
AND a.alg_gebouw_code=v_gebouw_code
AND a.alg_verdieping_code = v_verdieping_code
AND UPPER(alg_ruimte_Omschrijving) like UPPER(rec.locatie||'%');
EXCEPTION
WHEN OTHERS
THEN
v_ruimte_key:=p_ruimte_key;
END;
IF length(rec.bouwjaar)=4
THEN
v_bouwjaar:=fac.safe_to_date('01-01-'||rec.bouwjaar,'DD-MM-YYYY');
ELSE
v_bouwjaar:=TRUNC(SYSDATE);
END IF;
IF INSTR(rec.aantal,',')>0
THEN
v_aantal:=fac.safe_to_number(SUBSTR(rec.aantal,0, INSTR(rec.aantal,',')-1));
ELSE
v_aantal:=fac.safe_to_number(rec.aantal);
END IF;
v_aanduiding:='Aanmaken object '||v_objectid;
BEGIN
SELECT i.ins_deel_key
INTO v_ins_deel_key
FROM ins_deel i
WHERE i.INS_ALG_RUIMTE_KEY=v_ruimte_key
AND i.INS_ALG_LOCATIE_KEY=v_locatie_key
AND i.ins_deel_omschrijving LIKE rec.nlsfb||'%'
AND i.ins_deel_aantal=COALESCE(v_aantal,1)
AND ins_discipline_key = v_ins_discipline_key
AND ins_srtdeel_key = v_ins_srtdeel_key
AND ins_deel_opmerking = COALESCE(rec.fabrikant,'')||' '||COALESCE(rec.type,'')||' ('||rec.locatie||')';
EXCEPTION
WHEN NO_DATA_FOUND THEN
INSERT INTO ins_deel (ins_discipline_key,
ins_srtdeel_key,
ins_deel_module,
ins_deel_omschrijving,
ins_deel_opmerking,
ins_alg_ruimte_key,
ins_alg_ruimte_type,
ins_alg_locatie_key,
ins_deel_aanmaak,
ins_deel_vervaldatum,
ins_deel_aantal)
VALUES (v_ins_discipline_key,
v_ins_srtdeel_key,
'INS',
ins.nextdescription(UPPER(rec.nlsfb), NULL),
COALESCE(rec.fabrikant,'')||' '||COALESCE(rec.type,'')||' ('||rec.locatie||')',
v_ruimte_key,
v_ruimte_type,
v_locatie_key,
v_bouwjaar,
NULL,
COALESCE(v_aantal,1))
RETURNING ins_deel_key
INTO v_ins_deel_key;
END;
END IF;
v_groep_vorige:=rec.groep;
v_obj_soort_vorige:=rec.obj_soort;
v_locatie_vorige:=rec.locatie;
v_aantal_vorige:=rec.aantal;
v_eenheid_vorige:=rec.eenheid;
v_fabrikant_vorige:=rec.fabrikant;
v_type_vorige:=rec.type;
UPDATE fac_imp_csv
SET fac_imp_csv_col50=v_ins_deel_key
WHERE fac_imp_csv_key=rec.fac_imp_csv_key;
ELSE
fac.imp_writelog (p_import_key,
'W',
'Disipline MJOB',
'Discipline niet gevonden');
END IF;
END IF;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
/
CREATE OR REPLACE PROCEDURE PLGP_UPDATE_MJOB_TAKEN(p_import_key IN NUMBER)
AS
CURSOR obj
IS
SELECT fac_imp_csv_key fac_imp_csv_key,
fac_imp_csv_col01 groep,
fac_imp_csv_col50 ins_deel_key,
fac_imp_csv_col02 ins_srtdeel_code,
fac_imp_csv_col06 aantal,
fac_imp_csv_col07 eenheid,
fac_imp_csv_col09 taak,
fac_imp_csv_col10 taak_opm,
fac_imp_csv_col11 startjaar,
fac_imp_csv_col13 cyclus,
fac_imp_csv_col20 kosten
FROM fac_imp_csv
WHERE fac_import_key=p_import_key
ORDER BY fac_imp_csv_key;
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2 (1000);
v_aanduiding VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_taak_datum DATE;
v_cyclus_eenheid NUMBER;
v_taakcat_key NUMBER;
v_srtcontrole_key NUMBER;
v_srtkenmerk_doc NUMBER;
v_ins_discipline_key NUMBER;
v_ins_srtgroep_key NUMBER;
v_ins_srtdeel_key NUMBER;
v_ins_srtcontrole_niveau VARCHAR2(1);
v_kosten NUMBER;
v_kosten_eenheid NUMBER;
v_aantal NUMBER;
v_ins_srtcontroledl_xcp_key NUMBER;
v_count NUMBER;
BEGIN
v_count:=0;
v_cyclus_eenheid:=4;
v_ins_srtcontrole_niveau:='S';
v_aanduiding:= 'Fout bij taak categorie MJOB Vervanging';
SELECT ins_discipline_key
INTO v_taakcat_key
FROM ins_tab_discipline
WHERE ins_discipline_module='CTR'
AND UPPER(ins_discipline_omschrijving) = UPPER('MJOB-Vervanging')
AND ins_discipline_verwijder IS NULL;
BEGIN
SELECT ins_srtkenmerk_key
INTO v_srtkenmerk_doc
FROM ins_srtkenmerk i
WHERE i.ins_srtkenmerk_code='DOCUMENTEN'
AND i.ins_srtkenmerk_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_srtkenmerk_doc:=-1;
END;
FOR rec in obj
LOOP
v_count:=v_count+1;
IF (rec.groep<>'Groep')
THEN
-- fac.imp_writelog (p_import_key,
-- 'W',
-- 'Regel '||v_count,
-- rec.groep||'-'||rec.ins_deel_key);
-- COMMIT;
v_aanduiding:= 'Fout bij ophalen object :'||rec.ins_deel_key;
SELECT ins_discipline_key, ins_srtgroep_key, ins_srtdeel_key
INTO v_ins_discipline_key, v_ins_srtgroep_key, v_ins_srtdeel_key
FROM ins_v_deel_gegevens
WHERE ins_deel_key = rec.ins_deel_key;
BEGIN
SELECT ins_srtcontrole_key
INTO v_srtcontrole_key
FROM ins_srtcontrole
where ins_srtinstallatie_key=v_ins_srtdeel_key
AND ins_srtcontrole_niveau=v_ins_srtcontrole_niveau
AND UPPER(ins_srtcontrole_omschrijving) = UPPER(rec.taak)
AND ins_srtcontrole_periode=0
AND ins_srtcontrole_eenheid=v_cyclus_eenheid
AND ins_srtcontrole_mode=1
AND ctr_discipline_key=v_taakcat_key;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- ins_srtcontrole is er niet dus maken we hem aan,
INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
ins_srtcontrole_niveau,
ins_srtcontrole_omschrijving,
ins_srtcontrole_periode,
ins_srtcontrole_eenheid,
ins_srtcontrole_mode,
ctr_discipline_key
)
VALUES (v_ins_srtdeel_key,
v_ins_srtcontrole_niveau,
rec.taak,
0,
v_cyclus_eenheid,
1,
v_taakcat_key
)
RETURNING ins_srtcontrole_key
INTO v_srtcontrole_key;
-- Gaan we gelijk een Documenten kenmerk toevoegen
IF v_srtkenmerk_doc>0 THEN
INSERT INTO ins_kenmerk (
ins_srtkenmerk_key,
ins_srtinstallatie_key,
ins_kenmerk_niveau,
ins_kenmerk_bewerkniveau,
ins_kenmerk_groep,
ins_kenmerk_volgnummer,
ins_kenmerk_hint,
ins_kenmerk_omschrijving
)
VALUES (
v_srtkenmerk_doc,
v_srtcontrole_key,
'C',
'D',
0,
10,
'',
'Documenten'
);
END IF;
END;
IF LENGTH(rec.startjaar)=4
THEN
-- Alleen wat doen als we ook een startjaar hebben.
v_taak_datum:=fac.safe_to_date('01-01-'||rec.startjaar,'DD-MM-YYYY');
v_kosten := fac.safe_to_number(REPLACE((REPLACE(REPLACE(rec.kosten,'<EFBFBD>',''),'.','')),',','.'));
IF INSTR(rec.aantal,',')>0
THEN
v_aantal:=fac.safe_to_number(SUBSTR(rec.aantal,0, INSTR(rec.aantal,',')-1));
ELSE
v_aantal:=fac.safe_to_number(rec.aantal);
END IF;
v_kosten_eenheid:=v_kosten/v_aantal;
BEGIN
SELECT ins_srtcontroledl_xcp_key
INTO v_ins_srtcontroledl_xcp_key
FROM ins_srtcontroledl_xcp
WHERE ins_srtcontrole_key=v_srtcontrole_key
AND ins_deel_key=rec.ins_deel_key
AND ins_srtcontroledl_xcp_eenheid=v_cyclus_eenheid
AND ins_srtcontroledl_xcp_aantal=v_aantal
AND ins_srtcontroledl_xcp_periode=rec.cyclus
AND ins_srtcontroledl_xcp_startdat=v_taak_datum
AND ins_srtcontroledl_xcp_aanteh = rec.eenheid
AND ins_scenario_key=1;
UPDATE ins_srtcontroledl_xcp
SET ins_srtcontroledl_xcp_kosten = v_kosten_eenheid
WHERE ins_srtcontroledl_xcp_key = v_ins_srtcontroledl_xcp_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_aanduiding:='Fout bij toevoegen XCP record voor object '||rec.ins_deel_key||' voor controle '||v_srtcontrole_key;
INSERT INTO ins_srtcontroledl_xcp
(ins_srtcontrole_key,
ins_deel_key,
ins_srtcontroledl_xcp_eenheid,
ins_srtcontroledl_xcp_aantal,
ins_srtcontroledl_xcp_periode,
ins_srtcontroledl_xcp_startdat,
ins_srtcontroledl_xcp_kosten,
ins_srtcontroledl_xcp_opmerk,
ins_srtcontroledl_xcp_aanteh)
VALUES (v_srtcontrole_key,
rec.ins_deel_key,
v_cyclus_eenheid,
v_aantal,
rec.cyclus,
v_taak_datum,
v_kosten_eenheid,
SUBSTR(rec.taak_opm,0,300),
rec.eenheid);
END;
END IF;
END IF;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_errorhint := v_errormsg || ' - ' || v_aanduiding;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_errorhint);
END;
/
-- EXPORTS
-- Export View
-- VIEWS
------ 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