PCHX#75973 -- Herimplementatie PCH

svn path=/Customer/trunk/; revision=63105
This commit is contained in:
Arthur Egberink
2024-01-05 15:41:32 +00:00
parent 8a5d338b49
commit 007f514778

View File

@@ -45,11 +45,13 @@ AS
p_link_key IN NUMBER)
RETURN VARCHAR2;
FUNCTION fin_get_locatie_code (p_factuur_key IN NUMBER)
RETURN VARCHAR2;
PROCEDURE fin_set_locatie_code (p_factuur_key IN NUMBER, p_factuurregel_key IN NUMBER);
FUNCTION fin_get_projectloc_code (p_factuur_key IN NUMBER)
RETURN VARCHAR2;
PROCEDURE fin_set_projectloc_code (p_factuur_key IN NUMBER);
PROCEDURE fin_set_kostensoort (p_factuur_key IN NUMBER, p_factuurregel_key IN NUMBER, p_kostensoort_oms IN VARCHAR2);
PROCEDURE fin_update_factuur (p_factuur_key IN NUMBER);
END;
/
@@ -272,40 +274,38 @@ AS
v_kenmerk_waarde);
END;
FUNCTION fin_get_locatie_code (p_factuur_key IN NUMBER)
RETURN VARCHAR2
PROCEDURE fin_set_locatie_code (p_factuur_key IN NUMBER, p_factuurregel_key IN NUMBER)
AS
v_bestelopdr_key NUMBER;
v_contract_key NUMBER;
v_opdr_key NUMBER;
v_locatie_code VARCHAR2 (100);
BEGIN
SELECT bes_bestelopdr_key, cnt_contract_key, mld_opdr_key
INTO v_bestelopdr_key, v_contract_key, v_opdr_key
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
BEGIN
SELECT bes_bestelopdr_key, cnt_contract_key, mld_opdr_key
INTO v_bestelopdr_key, v_contract_key, v_opdr_key
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
IF v_bestelopdr_key IS NOT NULL
THEN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM bes_bestelopdr_item boi,
IF v_bestelopdr_key IS NOT NULL
THEN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM bes_bestelopdr_item boi,
bes_bestelling_item bi,
bes_bestelling b,
mld_adres a,
alg_locatie l
WHERE bes_bestelopdr_key = v_bestelopdr_key
AND boi.BES_BESTELOPDR_ITEM_KEY = bi.BES_BESTELOPDR_ITEM_KEY
AND boi.bes_bestelopdr_item_key = bi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = b.bes_bestelling_key
AND b.mld_adres_key_lev = a.mld_adres_key
AND a.alg_locatie_key = l.alg_locatie_key;
END IF;
RETURN v_locatie_code;
END IF;
IF v_contract_key IS NOT NULL
THEN
BEGIN
IF v_contract_key IS NOT NULL
THEN
BEGIN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM cnt_contract_plaats cp, alg_locatie l
@@ -313,85 +313,80 @@ AS
AND cp.cnt_alg_plaats_code = 'L'
AND cp.cnt_alg_plaats_key = l.alg_locatie_key
AND cp.cnt_contract_plaats_verwijder IS NULL;
EXCEPTION
EXCEPTION
WHEN NO_DATA_FOUND
THEN
BEGIN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM cnt_contract_plaats cp, alg_locatie l, alg_gebouw g
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
AND l.alg_locatie_key = g.alg_locatie_key
AND cp.cnt_contract_plaats_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM cnt_contract_plaats cp, alg_v_ruimte_gegevens ar
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'R'
AND cp.cnt_alg_plaats_key = ar.alg_ruimte_key
AND cp.cnt_contract_plaats_verwijder IS NULL;
END;
END;
BEGIN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM cnt_contract_plaats cp, alg_locatie l, alg_gebouw g
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'G'
AND cp.cnt_alg_plaats_key = g.alg_gebouw_key
AND l.alg_locatie_key = g.alg_locatie_key
AND cp.cnt_contract_plaats_verwijder IS NULL;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
SELECT DISTINCT alg_locatie_code
INTO v_locatie_code
FROM cnt_contract_plaats cp, alg_v_ruimte_gegevens ar
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'R'
AND cp.cnt_alg_plaats_key = ar.alg_ruimte_key
AND cp.cnt_contract_plaats_verwijder IS NULL;
END;
END;
END IF;
RETURN v_locatie_code;
END IF;
IF v_opdr_key IS NOT NULL
THEN
SELECT alg_locatie_code
INTO v_locatie_code
FROM alg_locatie l, mld_melding m, mld_opdr o
WHERE o.mld_opdr_key = v_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
END IF;
IF v_opdr_key IS NOT NULL
THEN
SELECT alg_locatie_code
INTO v_locatie_code
FROM alg_locatie l, mld_melding m, mld_opdr o
WHERE o.mld_opdr_key = v_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.mld_alg_locatie_key = l.alg_locatie_key;
EXCEPTION
WHEN NO_DATA_FOUND
THEN
v_locatie_code := 'Geen referentie';
WHEN TOO_MANY_ROWS
THEN
v_locatie_code := 'Meerdere';
WHEN OTHERS
THEN
v_locatie_code := 'Onbekend';
END;
RETURN v_locatie_code;
END IF;
RETURN 'Geen referentie';
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
RETURN 'Meerdere';
WHEN OTHERS
THEN
RETURN NULL;
UPDATE fin_factuurregel SET fin_factuurregel_referentie = v_locatie_code
WHERE fin_factuurregel_key = p_factuurregel_key;
END;
FUNCTION fin_get_projectloc_code (p_factuur_key IN NUMBER)
RETURN VARCHAR2
PROCEDURE fin_set_projectloc_code (p_factuur_key IN NUMBER)
AS
v_contract_key NUMBER;
v_opdr_key NUMBER;
v_ruimte_nr VARCHAR2 (100);
BEGIN
v_ruimte_nr := FLX.getflex('FIN', 121, p_factuur_key);
SELECT cnt_contract_key, mld_opdr_key
INTO v_contract_key, v_opdr_key
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
IF v_contract_key IS NOT NULL
THEN
BEGIN
SELECT MAX(FLX.getflex ('ALG', 2340, r.alg_ruimte_key, 'R')) -- sublocatiecode
INTO v_ruimte_nr
FROM cnt_contract_plaats cp, alg_ruimte r
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'R'
AND cp.cnt_alg_plaats_key = r.alg_ruimte_key
AND r.alg_srtruimte_key = 241 -- projectlocatie
AND cp.cnt_contract_plaats_verwijder IS NULL;
RETURN v_ruimte_nr;
EXCEPTION
WHEN TOO_MANY_ROWS
THEN
RETURN 'Meerdere';
END;
IF v_contract_key IS NOT NULL
THEN
SELECT MAX(FLX.getflex ('ALG', 2340, r.alg_ruimte_key, 'R')) -- sublocatiecode
INTO v_ruimte_nr
FROM cnt_contract_plaats cp, alg_ruimte r
WHERE cp.cnt_contract_key = v_contract_key
AND cp.cnt_alg_plaats_code = 'R'
AND cp.cnt_alg_plaats_key = r.alg_ruimte_key
AND r.alg_srtruimte_key = 241 -- projectlocatie
AND cp.cnt_contract_plaats_verwijder IS NULL;
END IF;
IF v_opdr_key IS NOT NULL
@@ -403,14 +398,82 @@ AS
AND o.mld_melding_key = m.mld_melding_key
AND r.alg_srtruimte_key = 241 -- projectlocatie
AND m.mld_alg_onroerendgoed_keys = r.alg_ruimte_key;
RETURN v_ruimte_nr;
END IF;
RETURN NULL;
EXCEPTION
WHEN OTHERS THEN RETURN NULL;
IF v_ruimte_nr IS NOT NULL
THEN
FLX.setflex('FIN', 121, p_factuur_key, v_ruimte_nr);
END IF;
END;
PROCEDURE fin_set_kostensoort (p_factuur_key IN NUMBER, p_factuurregel_key IN NUMBER, p_kostensoort_oms IN VARCHAR2)
AS
v_kostensoort_key FIN_FACTUURREGEL.PRS_KOSTENSOORT_KEY%TYPE;
BEGIN
--Kostensoort (factuurregel)
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM fin_factuurregel fr
WHERE fin_factuurregel_key = p_factuurregel_key;
-- alleen als we de kosten gaan doorbelasten gaan we op zoek naar de juiste kostensoort als deze nog niet gevuld was.
IF SUBSTR(FLX.getflex('FIN', 3, p_factuur_key),2,2) <> '71' -- boekstuknummer / dagboek
AND v_kostensoort_key IS NULL
THEN
IF p_kostensoort_oms IS NULL
THEN
-- Kostensoort opzoeken in de verplichting
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
IF v_kostensoort_key IS NOT NULL
THEN
UPDATE fin_factuurregel
SET prs_kostensoort_key = v_kostensoort_key
WHERE fin_factuurregel_key = p_factuurregel_key;
ELSE
-- zet de factuur op incompeet als de kostensoort niet gevonden kan worden.
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = 'Kostensoort niet gevonden' || CHR(10) || fin_factuur_opmerking
WHERE fin_factuur_key = p_factuur_key;
END IF;
ELSE
UPDATE fin_factuurregel
SET prs_kostensoort_key =
(SELECT MAX (ks.prs_kostensoort_key)
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_upper =
UPPER (p_kostensoort_oms))
WHERE fin_factuurregel_key = p_factuurregel_key;
END IF;
END IF;
END;
PROCEDURE fin_update_factuur (p_factuur_key IN NUMBER)
AS
v_factuur_statuses_key FIN_FACTUUR.FIN_FACTUUR_STATUSES_KEY%TYPE;
BEGIN
SELECT fin_factuur_statuses_key
INTO v_factuur_statuses_key
FROM fin_factuur
WHERE fin_factuur_key = p_factuur_key;
IF v_factuur_statuses_key IN (2,3) -- Ingevoerd en incompleet.
THEN
PCHX.fin_set_projectloc_code (p_factuur_key);
FOR rec IN (SELECT fin_factuurregel_key FROM fin_factuurregel WHERE fin_factuur_key = p_factuur_key)
LOOP
PCHX.fin_set_locatie_code (p_factuur_key, rec.fin_factuurregel_key);
PCHX.fin_set_kostensoort (p_factuur_key, rec.fin_factuurregel_key, '');
END LOOP;
END IF;
END;
END;
/
@@ -984,7 +1047,7 @@ AS
prs_kostenplaats kp
WHERE kp.prs_kostenplaats_key = COALESCE(afw_kostenplaats_key, fg.prs_kostenplaats_org)
-- Alleen als de kosten doorbelast moeten worden gaan we controleren of de werkmaatschappij wel aan de locatie gekoppeld is.
AND ( SUBSTR(boekstuknummer,3,2) <> '70'
AND ( SUBSTR(boekstuknummer,2,2) <> '70'
OR
EXISTS (SELECT 1 FROM pchx_v_wm_loc wl
WHERE wl.prs_kostenplaats_key = kp.prs_kostenplaats_key
@@ -4625,10 +4688,7 @@ BEGIN
|| rec.kenmerk1);
END IF;
IF PCHX.fin_get_projectloc_code (rec.fin_factuur_key) IS NOT NULL
THEN
FLX.setflex('FIN', 121, rec.fin_factuur_key, PCHX.fin_get_projectloc_code (rec.fin_factuur_key));
END IF;
PCHX.fin_set_projectloc_code (rec.fin_factuur_key);
END;
END LOOP;
@@ -4748,42 +4808,9 @@ BEGIN
v_errorhint := 'Geen kostensoort factuurregel';
--Kostensoort (factuurregel)
IF SUBSTR(rec.kenmerk1,3,2) <> '71' -- boekstuknummer / dagboek
THEN
IF rec.kenmerk2 IS NULL
THEN
v_errorhint := 'Kostensoort opzoeken in de verplichting';
SELECT prs_kostensoort_key
INTO v_kostensoort_key
FROM fin_factuur
WHERE fin_factuur_key = rec.fin_factuur_key;
IF v_kostensoort_key IS NOT NULL
THEN
UPDATE fin_factuurregel
SET prs_kostensoort_key = v_kostensoort_key
WHERE fin_factuurregel_key = rec.fin_factuurregel_key;
ELSE
-- zet de factuur op incompeet als de kostensoort niet gevonden kan worden.
UPDATE fin_factuur
SET fin_factuur_statuses_key = 3,
fin_factuur_opmerking = 'Kostensoort niet gevonden' || CHR(10) || fin_factuur_opmerking
WHERE fin_factuur_key = rec.fin_factuur_key;
END IF;
ELSE
UPDATE fin_factuurregel
SET prs_kostensoort_key =
(SELECT MAX (ks.prs_kostensoort_key)
FROM prs_kostensoort ks
WHERE ks.prs_kostensoort_upper =
UPPER (rec.kenmerk2))
WHERE fin_factuurregel_key = rec.fin_factuurregel_key;
END IF;
END IF;
PCHX.fin_set_kostensoort (rec.fin_factuur_key, rec.fin_factuurregel_key, rec.kenmerk2);
v_errorhint := 'Geen regelnummer factuurregel';
--Regelnummer (factuurregel)
IF rec.kenmerk9 IS NULL
THEN
@@ -4795,7 +4822,6 @@ BEGIN
END IF;
v_errorhint := 'Geen afw. boekdatum factuurregel';
--Afw. boekdatum (factuurregel)
IF rec.kenmerk13 IS NULL
THEN
@@ -4815,12 +4841,7 @@ BEGIN
v_afw_boekdatum);
END IF;
IF PCHX.fin_get_locatie_code (rec.fin_factuur_key) IS NOT NULL
THEN
UPDATE fin_factuurregel SET fin_factuurregel_referentie = PCHX.fin_get_locatie_code (rec.fin_factuur_key)
WHERE fin_factuurregel_key = rec.fin_factuurregel_key;
END IF;
PCHX.fin_set_locatie_code (rec.fin_factuur_key, rec.fin_factuurregel_key);
END;
END LOOP;