KFNS#38373 -- Kostenmatrix in FACILITOR

svn path=/Customer/trunk/; revision=32151
This commit is contained in:
Arthur Egberink
2016-12-23 14:42:56 +00:00
parent a9210d19bf
commit c82bbb9585

View File

@@ -1458,7 +1458,436 @@ AS
AND l.alg_district_key = d.alg_district_key(+)
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);
/* Formatted on 9-3-2016 14:18:22 (QP5 v5.136.908.31019) */
-- Vaste kosten hebben een kostensoort gekoppeld aan de stdmelding
-- en hebben GEEN link naar een contract in de opdracht.
-- Variabele kosten hebben optioneel een kostensoort gekoppeld aan
-- de stdmelding maar hebben altijd een link naar een contract van het
-- type variabele kosten.
CREATE OR REPLACE VIEW kfns_v_rap_kosten_monitor_i
AS
SELECT alg_gebouw_code,
'VAST-' || prs_kostensoort_oms prs_kostensoort_oms,
prs_kostensoortgrp_key,
prs_kostensoort_altcode volgorde,
(SELECT SUM (mld_opdr_kosten)
FROM mld_opdr o, mld_melding m, mld_stdmelding std
WHERE o.mld_melding_key = m.mld_melding_key
AND o.cnt_contract_key IS NULL
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.prs_kostensoort_key = k.prs_kostensoort_key
AND m.mld_alg_onroerendgoed_keys = g.alg_gebouw_key
AND mld_opdr_datumbegin BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -12)
AND TRUNC (SYSDATE, 'Q') - 1)
bedrag
FROM alg_gebouw g, prs_kostensoort k
WHERE alg_gebouw_verwijder IS NULL
UNION ALL
SELECT alg_gebouw_code,
'VAR-' || prs_kostensoortgrp_oms,
prs_kostensoortgrp_key,
LPAD (prs_kostensoortgrp_altcode - 2, 3, '0') volgorde,
(SELECT SUM (mld_opdr_kosten)
FROM mld_opdr o,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
cnt_contract c,
prs_kostensoort ks,
mld_typeopdr ot
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_kosten = 1
AND o.cnt_contract_key = c.cnt_contract_key
AND c.prs_kostensoort_key = ks.prs_kostensoort_key
AND c.ins_discipline_key = 143 -- variabel
AND ks.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
AND m.mld_alg_onroerendgoed_keys = g.alg_gebouw_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key <> 1 -- project
AND mld_opdr_datumbegin BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -12)
AND TRUNC (SYSDATE, 'Q') - 1)
bedrag
FROM alg_gebouw g, prs_kostensoortgrp kg
WHERE alg_gebouw_verwijder IS NULL
UNION ALL
SELECT alg_gebouw_code,
'PRJ-' || prs_kostensoortgrp_oms,
prs_kostensoortgrp_key,
LPAD (prs_kostensoortgrp_altcode - 1, 3, '0') volgorde,
(SELECT SUM (mld_opdr_kosten)
FROM mld_opdr o,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
cnt_contract c,
prs_kostensoort ks,
mld_typeopdr ot
WHERE o.mld_melding_key = m.mld_melding_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND ot.mld_typeopdr_kosten = 1
AND o.cnt_contract_key = c.cnt_contract_key
AND c.prs_kostensoort_key = ks.prs_kostensoort_key
AND c.ins_discipline_key = 143 -- variabel
AND ks.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
AND m.mld_alg_onroerendgoed_keys = g.alg_gebouw_key
AND m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = 1 -- project
AND mld_opdr_datumbegin BETWEEN ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -12)
AND TRUNC (SYSDATE, 'Q') - 1)
bedrag
FROM alg_gebouw g, prs_kostensoortgrp kg
WHERE alg_gebouw_verwijder IS NULL;
CREATE OR REPLACE VIEW kfns_v_rap_kosten_monitor
AS
SELECT alg_gebouw_code,
prs_kostensoort_oms,
prs_kostensoortgrp_oms,
volgorde,
bedrag
FROM kfns_v_rap_kosten_monitor_i i, prs_kostensoortgrp kg
WHERE i.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key
UNION ALL
SELECT alg_gebouw_code,
'SUB-' || kg.prs_kostensoortgrp_oms,
kg.prs_kostensoortgrp_oms,
kg.prs_kostensoortgrp_altcode volgorde,
SUM (bedrag)
FROM kfns_v_rap_kosten_monitor_i i, prs_kostensoortgrp kg
WHERE i.prs_kostensoortgrp_key = kg.prs_kostensoortgrp_key AND alg_gebouw_code <> 'A_HEADER'
GROUP BY kg.prs_kostensoortgrp_oms, alg_gebouw_code, prs_kostensoortgrp_altcode
UNION ALL
SELECT alg_gebouw_code,
'TOTAAL',
' Totaal',
'999' volgorde,
SUM (bedrag)
FROM kfns_v_rap_kosten_monitor_i
WHERE alg_gebouw_code <> 'A_HEADER'
GROUP BY alg_gebouw_code
UNION ALL
SELECT g.alg_gebouw_code,
'M2 in beheer',
' M2',
'002',
opp
FROM ( SELECT alg_gebouw_key,
alg_gebouw_upper alg_gebouw_code,
SUM (alg_ruimte_bruto_vloeropp) opp
FROM alg_v_ruimte_gegevens rg, alg_onrgoedkenmerk aogk
WHERE aogk.alg_kenmerk_key = 1040
AND fac.safe_to_number (alg_onrgoedkenmerk_waarde) = 1
AND rg.alg_ruimte_key = aogk.alg_onrgoed_key
GROUP BY alg_gebouw_upper, alg_gebouw_key) rg,
alg_gebouw g
WHERE g.alg_gebouw_key = rg.alg_gebouw_key(+) AND g.alg_gebouw_verwijder IS NULL
UNION ALL
SELECT alg_gebouw_code,
'M2 Totaal',
' M2',
'001',
SUM (alg_ruimte_bruto_vloeropp)
FROM alg_v_ruimte_gegevens rg, alg_gebouw g
WHERE g.alg_gebouw_key = rg.alg_gebouw_key(+) AND g.alg_gebouw_verwijder IS NULL
GROUP BY alg_gebouw_code;
-- import tbv kostenmonitor
CREATE OR REPLACE PROCEDURE kfns_import_vaste_kosten (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
v_errorhint VARCHAR2(1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
c_mld_uitvoertijd mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE
:= mld_t_uitvoertijd (2, 'D');
-- De importvelden:
v_periode VARCHAR2 (255);
v_gebouw_code VARCHAR2 (255);
v_gebouw_omschrijving VARCHAR(255);
v_kostensoort_oms VARCHAR2 (255);
v_bedrijf_naam VARCHAR2 (255);
v_opdr_kosten VARCHAR2 (255);
v_contract_nr VARCHAR2 (255);
v_gebouw_key alg_gebouw.alg_gebouw_key%TYPE;
v_locatie_key alg_locatie.alg_locatie_key%TYPE;
v_stdmelding_key mld_stdmelding.mld_stdmelding_key%TYPE;
v_bedrijf_key prs_bedrijf.prs_bedrijf_key%TYPE;
v_mld_opdr_bedrijfopdr_volgnr mld_opdr.mld_opdr_bedrijfopdr_volgnr%TYPE;
v_melding_key mld_melding.mld_melding_key%TYPE;
v_opdr_key mld_opdr.mld_opdr_key%TYPE;
v_contract_key cnt_contract.cnt_contract_key%TYPE;
v_startdate DATE;
v_periodestart DATE;
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Bepaal het begin van het vorige Kwartaal
v_startdate := add_months (TRUNC (SYSDATE, 'Q'), -3);
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_errormsg := 'Fout FETCH te importeren rij';
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
v_ongeldig := 0;
-- Lees alle veldwaarden
fac.imp_getfield (v_newline, c_fielddelimitor, v_periode);
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_kostensoort_oms);
fac.imp_getfield (v_newline, c_fielddelimitor, v_contract_nr);
fac.imp_getfield (v_newline, c_fielddelimitor, v_bedrijf_naam);
fac.imp_getfield (v_newline, c_fielddelimitor, v_opdr_kosten);
v_aanduiding := v_gebouw_code || '|' || v_kostensoort_oms;
v_opdr_kosten := REPLACE(v_opdr_kosten, ',', '.');
dbms_output.put_line('aanduiding: ' || v_aanduiding);
IF v_periode IS NOT NULL AND (fac.safe_to_number(v_opdr_kosten) <> 0 OR header_is_valid = 0)
THEN
IF (header_is_valid = 0)
THEN
IF UPPER (v_periode) = 'PERIODE'
AND UPPER (v_kostensoort_oms) = 'KOSTENSOORT'
AND UPPER (v_opdr_kosten) = 'BEDRAG'
THEN
header_is_valid := 1;
END IF;
ELSE
dbms_output.put_line('header is valid: ' || v_aanduiding);
v_count_tot := v_count_tot + 1;
v_periodestart :=
fac.safe_to_date (
SUBSTR (v_periode, 1, 4) || LPAD ( ( (SUBSTR(v_periode,6,1) - 1) * 3) + 1, 2, '0') || '01',
'yyyymmdd');
IF v_periodestart = v_startdate
THEN
v_errorhint := 'Vind stdmelding';
SELECT mld_stdmelding_key
INTO v_stdmelding_key
FROM mld_stdmelding std, prs_kostensoort ks
WHERE std.prs_kostensoort_key = ks.prs_kostensoort_key
AND ks.prs_kostensoort_oms = v_kostensoort_oms;
v_errorhint := 'Vind gebouw';
SELECT alg_gebouw_key, alg_locatie_key
INTO v_gebouw_key, v_locatie_key
FROM alg_gebouw
WHERE alg_gebouw_verwijder IS NULL AND alg_gebouw_code = v_gebouw_code;
v_errorhint := 'Vind uitvoerende';
SELECT prs_bedrijf_key
INTO v_bedrijf_key
FROM prs_bedrijf
WHERE prs_bedrijf_verwijder IS NULL
AND prs_bedrijf_uitvoerende = 1
AND prs_bedrijf_naam = v_bedrijf_naam;
v_errorhint := 'Kijk of melding bestaat';
BEGIN
SELECT mld_melding_key
INTO v_melding_key
FROM mld_melding
WHERE mld_stdmelding_key = v_stdmelding_key
AND mld_alg_onroerendgoed_keys = v_gebouw_key
AND v_startdate BETWEEN mld_melding_datum AND mld_melding_einddatum;
dbms_output.put_line('melding bestaat: ' || v_aanduiding);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
INSERT INTO mld_melding (mld_melding_omschrijving,
mld_melding_onderwerp,
mld_kosten_klant,
prs_perslid_key,
prs_kostenplaats_key,
mld_stdmelding_key,
mld_alg_locatie_key,
mld_alg_onroerendgoed_keys,
mld_melding_einddatum,
mld_melding_datum,
mld_melding_t_uitvoertijd,
mld_meldbron_key,
mld_melding_module,
mld_melding_spoed)
VALUES ('Vaste kosten:' || v_periode,
'Vaste kosten:' || v_periode,
1,
4, -- FACILITOR
52, -- KIEN
v_stdmelding_key,
v_locatie_key,
v_gebouw_key,
ADD_MONTHS (TRUNC (v_startdate, 'Y'), 12) - 1,
TRUNC (v_startdate, 'Y'),
c_mld_uitvoertijd,
5,
'MLD',
3)
RETURNING mld_melding_key
INTO v_melding_key;
dbms_output.put_line('melding is toegevoegd: ' || v_aanduiding);
mld.setmeldingstatus (v_melding_key, 2, NULL);
mld.setmeldingstatus (v_melding_key, 4, NULL);
END;
IF v_contract_nr IS NOT NULL
THEN
v_errorhint := 'Zoek het contract';
SELECT cnt_contract_key
INTO v_contract_key
FROM cnt_contract c
WHERE cnt_contract_verwijder IS NULL
AND c.cnt_prs_bedrijf_key = v_bedrijf_key
AND c.ins_discipline_key = 143 -- variabel
AND 'C' || cnt_contract_nummer_intern || '.' || cnt_contract_versie = v_contract_nr;
END IF;
v_errorhint := 'Kijk of opdracht bestaat';
BEGIN
dbms_output.put_line('bestaat de opdracht: ' || v_aanduiding);
SELECT mld_opdr_key
INTO v_opdr_key
FROM mld_opdr o
WHERE o.mld_melding_key = v_melding_key
AND v_startdate BETWEEN mld_opdr_datumbegin AND mld_opdr_einddatum
AND ( v_contract_key IS NULL
OR o.cnt_contract_key = v_contract_key);
dbms_output.put_line('opdracht bestaat: ' || v_aanduiding);
UPDATE mld_opdr
SET mld_opdr_kosten = ROUND (v_opdr_kosten, 2),
mld_opdr_materiaal = ROUND (v_opdr_kosten, 2)
WHERE mld_opdr_key = v_opdr_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
dbms_output.put_line('bepaal opdr volgnr: ' || v_aanduiding);
v_mld_opdr_bedrijfopdr_volgnr :=
mld.bepaalopdrmeldingvolgnr (v_melding_key);
dbms_output.put_line('toevoegen opdracht: ' || v_aanduiding);
INSERT INTO mld_opdr (mld_melding_key,
prs_kostenplaats_key,
mld_statusopdr_key,
mld_typeopdr_key,
prs_perslid_key,
mld_uitvoerende_keys,
mld_opdr_datumbegin,
mld_opdr_einddatum,
mld_opdr_module,
mld_opdr_omschrijving,
mld_opdr_materiaal,
mld_opdr_kosten,
mld_opdr_bedrijfopdr_volgnr,
cnt_contract_key)
VALUES( v_melding_key,
52, -- KIEN
5, -- uitgegeven
481, -- administratieve opdracht
4, -- facilitor
v_bedrijf_key,
v_periodestart,
ADD_MONTHS (v_periodestart, 3) - 1,
'MLD',
'Vaste kosten:' || v_periode,
ROUND (v_opdr_kosten, 2),
ROUND (v_opdr_kosten, 2),
v_mld_opdr_bedrijfopdr_volgnr,
v_contract_key);
END;
ELSE
fac.imp_writelog (p_import_key,
'E',
'Ongeldige periode opgegeven ' || v_periode || '-' || v_periodestart || ' - STRING:' ||SUBSTR (v_periode, 1, 4) || LPAD ( ( (SUBSTR(v_periode,6,1) - 1) * 3) + 1, 2, '0') || '01',
'');
END IF;
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_aanduiding || ' | ' || v_errorhint);
END;
END loop;
IF (header_is_valid = 0)
THEN
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Ongeldig importbestand',
'Geen geldige headerregel aanwezig');
ELSE
fac.imp_writelog (
p_import_key,
'S',
'Import vast kosten: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
'');
END IF;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg := 'error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg,
v_aanduiding || ' | ' || v_errorhint);
END kfns_import_vaste_kosten;
/
CREATE OR REPLACE PROCEDURE kfns_update_vaste_kosten (p_import_key IN NUMBER)
AS
BEGIN
NULL;
END kfns_update_vaste_kosten;
/
CREATE OR REPLACE PROCEDURE kfns_select_fact (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2)
AS