YAXX#83574 -- Opzetten generiek purchase to pay project voor Vebego FS

svn path=/Customer/trunk/; revision=66311
This commit is contained in:
Arthur Egberink
2024-09-25 08:51:43 +00:00
parent a3a5387fc7
commit 321af2b396

View File

@@ -30,6 +30,9 @@ AS
PROCEDURE set_opslag_perc (p_opdr_key IN NUMBER);
FUNCTION get_opslag_perc (p_opdr_key IN NUMBER)
RETURN NUMBER;
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2;
@@ -253,6 +256,26 @@ AS
END;
FUNCTION get_opslag_perc (p_opdr_key IN NUMBER)
RETURN NUMBER
AS
v_opslag_kenmerk_key NUMBER;
v_opslag NUMBER(5,2);
BEGIN
SELECT mld_kenmerk_key
INTO v_opslag_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'OPSLAGPERC'
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
v_opslag := COALESCE(flx.getflex ('OPD', v_opslag_kenmerk_key, p_opdr_key),0);
RETURN v_opslag;
END;
-- Gaan we deze nog gebruiken?
FUNCTION bepaal_srtopslag (p_opdr_key IN NUMBER)
RETURN VARCHAR2
@@ -350,7 +373,7 @@ AS
AND k.mld_typeopdr_key = o.mld_typeopdr_key
AND o.mld_opdr_key = p_opdr_key;
-- Bepaal de key van het kenmerk opslagpercentage
-- Bepaal de key van het kenmerk verkoopprijs
SELECT mld_kenmerk_key
INTO v_verkoop_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk, mld_opdr o
@@ -597,7 +620,7 @@ END;
CREATE OR REPLACE VIEW VBXX_V_RAP_TECHNADRES
CREATE OR REPLACE VIEW vbxx_v_rap_technadres
AS
SELECT b.prs_bedrijf_key bedrijf_key,
b.prs_bedrijf_naam bedrijf_naam,
@@ -2398,9 +2421,9 @@ AS
AND v.extra_key = cp.prs_bedrijf_key
AND cp.prs_perslid_key IS NOT NULL -- Account in Facilitor!
;
*/
-- Geexporteerde/bevroren variabele opdrachtkosten over voorgaande maanden (details).
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_fact_mld
CREATE OR REPLACE VIEW vbxx_v_rap_frozen_fact_mld
(
fclt_3d_afdeling_key, -- Kunnen beperken per leverancier!
maand,
@@ -2456,7 +2479,7 @@ AS
v.inkoopordernr,
d.alg_district_omschrijving,
v.bps
FROM kfsg_v_frozen_fact v,
FROM vbxx_v_frozen_fact v,
mld_opdr o,
mld_statusopdr os,
mld_typeopdr ot,
@@ -2480,6 +2503,8 @@ AS
AND l.alg_district_key = d.alg_district_key(+)
AND m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys(+);
/*
-- KFSG#65747: Rapportage tbv. leverancier-contactpersonen!
CREATE OR REPLACE VIEW kfsg_v_rap_frozen_mld_lev
(
@@ -3560,7 +3585,7 @@ AS
WHERE f.fin_factuur_key = fg.fin_factuur_key
AND fg.fin_factuur_statuses_key = 6
AND f.dagboek = p_dagboek
AND f.alg_district_key = p_district_key;
AND (f.alg_district_key = p_district_key OR p_district_key = -1);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
@@ -3585,7 +3610,7 @@ BEGIN
LOOP
BEGIN
UPDATE fin_factuur f
SET fin_factuur_statuses_key = 9 -- afgerond
SET fin_factuur_statuses_key = 7
WHERE f.fin_factuur_key = rec1.fin_factuur_key;
fac.trackaction ('FINVER', rec1.fin_factuur_key, v_aanvrager, NULL, NULL);
@@ -3607,6 +3632,449 @@ BEGIN
END;
/
--
-- Verkoopfacturen
--
CREATE OR REPLACE VIEW vbxx_v_kosten_doorbelasting
AS
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key
meldingnummer,
m.mld_melding_key,
l.alg_locatie_omschrijving
meldinglocatie,
di.alg_district_omschrijving
district,
pf.prs_perslid_naam_full
melder,
sd.ins_srtdiscipline_omschrijving
vakgroeptype,
d.ins_discipline_omschrijving
vakgroep,
std.mld_stdmelding_omschrijving
standaardmelding,
ksm.prs_kostensoort_oms
melding_nen_omschrijving,
ksm.prs_kostensoort_refcode
melding_nen_code,
CASE
WHEN m.mld_melding_status = 5 AND m.mld_melding_afgerond = 1
THEN
'Afgerond'
ELSE
ms.mld_statuses_omschrijving
END
meldingstatus,
m.mld_melding_datum
meldingdatum,
MLD.getmeldingstatusdate (m.mld_melding_key, 5)
afgemeld,
m.mld_melding_onderwerp
onderwerp,
m.mld_melding_omschrijving
vomschrijving,
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
opdrachtnummer,
ot.mld_typeopdr_omschrijving
opdrachttype,
ot.mld_typeopdr_key
opdrachttype_key,
tf.fac_usrdata_omschr
type_factuur,
o.mld_statusopdr_key,
so.mld_statusopdr_omschrijving
opdrachtstatus,
o.mld_opdr_omschrijving
opdrachtomschrijving,
COALESCE (kso.prs_kostensoort_oms, ksm.prs_kostensoort_oms)
opdracht_nen_omschrijving,
b.prs_bedrijf_naam
opdrachtuitvoerende,
o.mld_opdr_kosten
opdrachtkosten,
ok.bedrag
factuurbedrag,
VBXX.get_opslag_perc (o.mld_opdr_key)
opslag,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 0, ok.bedrag * ((100 + VBXX.get_opslag_perc (o.mld_opdr_key)) / 100))
kostenplusopslag,
TO_CHAR (ADD_MONTHS (SYSDATE,
COALESCE ((SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk
WHERE alg_kenmerk_key = 1060 AND alg_onrgoed_key = l.alg_district_key),
0)),
'yyyymm')
boekmaand,
aog.alg_gebouw_naam
meldinggebouw,
DECODE (
(SELECT mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'FINAKKOORD'),
1, 'Ja',
'Nee')
pro_forma_goedgekeurd,
DECODE (nb.mld_kenmerkopdr_waarde, 1, 'Ja', 'Nee')
nietdoorbelasten,
o.mld_opdr_key,
l.alg_district_key,
kso.prs_kostensoort_oms
afw_opdracht_nen_omschrijving,
kso.prs_kostensoort_refcode
afw_opdracht_nen_code
FROM prs_v_perslid_fullnames_all pf,
prs_kostensoort ksm,
mld_statuses ms,
mld_opdr o,
mld_typeopdr ot,
mld_statusopdr so,
prs_bedrijf b,
alg_locatie l,
alg_district di,
prs_kostensoort kso,
mld_melding m,
mld_stdmelding std,
ins_tab_discipline d,
ins_srtdiscipline sd,
alg_v_allonrgoed_gegevens aog,
(SELECT fac_usrdata_code, fac_usrdata_omschr, mld_opdr_key
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk,
fac_usrdata ud
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TYPEFACTUUR'
AND FAC.safe_to_number (ko.mld_kenmerkopdr_waarde) = fac_usrdata_key) tf,
( SELECT f.mld_opdr_key, SUM (fin_factuur_totaal) bedrag
FROM fin_factuur f
WHERE f.fin_factuur_statuses_key = 7
GROUP BY f.mld_opdr_key
UNION ALL
SELECT ko.mld_opdr_key, mld_opdr_kosten bedrag
FROM mld_kenmerkopdr ko,
mld_kenmerk k,
mld_srtkenmerk sk,
mld_opdr o
WHERE ko.mld_opdr_key = o.mld_opdr_key
AND ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'TS_REVERSEDBILLING') ok,
(SELECT mld_opdr_key, mld_kenmerkopdr_waarde
FROM mld_kenmerkopdr ko, mld_kenmerk k, mld_srtkenmerk sk
WHERE ko.mld_kenmerk_key = k.mld_kenmerk_key
AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'NIETDOORBELASTEN') nb
WHERE m.mld_stdmelding_key = std.mld_stdmelding_key
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
AND std.prs_kostensoort_key = ksm.prs_kostensoort_key(+)
AND m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = o.mld_melding_key
AND m.prs_perslid_key = pf.prs_perslid_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = di.alg_district_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND m.mld_alg_onroerendgoed_keys = aog.alg_onroerendgoed_keys(+)
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+)
AND o.mld_opdr_key = tf.mld_opdr_key
AND tf.fac_usrdata_code <> 'A'
AND o.mld_opdr_key = ok.mld_opdr_key
AND o.mld_opdr_key = nb.mld_opdr_key(+);
CREATE OR REPLACE VIEW vbxx_v_kosten_doorb_frozen
AS
SELECT fin_verkoopfactuur_omschr meldingnummer,
fin_verkoopfactuur_n4 mld_melding_key,
l.alg_locatie_omschrijving meldinglocatie,
di.alg_district_omschrijving district,
pf.prs_perslid_naam_full melder,
fin_verkoopfactuur_c3 soortmelding,
fin_verkoopfactuur_c4 productgroep,
fin_verkoopfactuur_c5 subproductgroep,
fin_verkoopfactuur_c1 melding_nen_omschrijving,
fin_verkoopfactuur_c2 melding_nen_code,
ms.mld_statuses_omschrijving meldingstatus,
'Gefactureerd' facturatiestatus,
m.mld_melding_datum meldingdatum,
MLD.getmeldingstatusdate (m.mld_melding_key, 5) afgemeld,
m.mld_melding_onderwerp onderwerp,
m.mld_melding_omschrijving vomschrijving,
fin_verkoopfactuur_id opdrachtnummer,
ot.mld_typeopdr_omschrijving opdrachttype,
so.mld_statusopdr_omschrijving opdrachtstatus,
o.mld_opdr_omschrijving opdrachtomschrijving,
COALESCE(vf.prs_kostensoort_oms, fin_verkoopfactuur_c1) opdracht_nen_omschrijving,
b.prs_bedrijf_naam opdrachtuitvoerende,
fin_verkoopfactuur_bedrag opdrachtkosten,
fin_verkoopfactuur_c6 soortopslag,
fin_verkoopfactuur_n2 opslag,
fin_verkoopfactuur_n3 kostenplusopslag,
fin_verkoopfactuur_n1 geenopslag,
fin_verkoopfactuur_maand boekmaand,
mld_opdr_key,
kso.prs_kostensoort_oms afw_opdracht_nen_omschrijving,
kso.prs_kostensoort_refcode afw_opdracht_nen_code
FROM fin_verkoopfactuur vf,
prs_v_perslid_fullnames_all pf,
mld_statuses ms,
mld_opdr o,
mld_typeopdr ot,
mld_statusopdr so,
prs_bedrijf b,
alg_locatie l,
alg_district di,
mld_melding m,
prs_kostensoort kso
WHERE m.mld_melding_status = ms.mld_statuses_key
AND m.mld_melding_key = vf.fin_verkoopfactuur_n4
AND o.mld_opdr_key = vf.fin_verkoopfactuur_refkey
AND m.prs_perslid_key = pf.prs_perslid_key
AND m.mld_alg_locatie_key = l.alg_locatie_key
AND l.alg_district_key = di.alg_district_key
AND o.mld_typeopdr_key = ot.mld_typeopdr_key
AND o.mld_statusopdr_key = so.mld_statusopdr_key
AND o.mld_uitvoerende_keys = b.prs_bedrijf_key(+)
AND o.prs_kostensoort_key = kso.prs_kostensoort_key(+)
--
-- PRO_FORMA facturen
--
CREATE OR REPLACE VIEW vbxx_v_export_pro_forma (
result,
result_order,
alg_district_key
)
AS
SELECT 'meldingnummer;' ||
'meldinglocatie;' ||
'melder;' ||
'vakgroeptype;' ||
'vaktgroep;' ||
'standaardmelding;' ||
'melding_nen_omschrijving;' ||
'melding_nen_code;' ||
'meldingstatus;' ||
'facturatiestatus;' ||
'meldingdatum;' ||
'afgemeld;' ||
'onderwerp;' ||
'vomschrijving;' ||
'opdrachtnummer;' ||
'opdrachttype;' ||
'opdrachtstatus;' ||
'opdrachtomschrijving;' ||
'opdracht_nen_omschrijving;' ||
'opdrachtuitvoerende;' ||
'opdrachtkosten;' ||
'soortopslag;' ||
'opslag;' ||
'kostenplusopslag;' ||
'boekmaand;' ||
'pro_forma_goedgekeurd;' ||
'niet_doorbelasten;' ||
'meldinggebouw;', -1, alg_district_key
FROM alg_district
UNION ALL
SELECT meldingnummer || ';' ||
meldinglocatie || ';' ||
melder || ';' ||
soortmelding || ';' ||
productgroep || ';' ||
subproductgroep || ';' ||
melding_nen_omschrijving || ';' ||
melding_nen_code || ';' ||
meldingstatus || ';' ||
facturatiestatus || ';' ||
TO_CHAR(meldingdatum, 'DD-MM-YYYY') || ';' ||
TO_CHAR(afgemeld, 'DD-MM-YYYY') || ';' ||
'"' || REPLACE(onderwerp, '"') || '"' || ';' ||
'"' || TO_CHAR(SUBSTR(REPLACE(vomschrijving, '"'),1,300)) || '"' || ';' ||
opdrachtnummer || ';' ||
opdrachttype || ';' ||
opdrachtstatus || ';' ||
'"' || SUBSTR(REPLACE(opdrachtomschrijving, '"'),1,300) || '"' || ';' ||
opdracht_nen_omschrijving || ';' ||
opdrachtuitvoerende || ';' ||
REPLACE(opdrachtkosten, '.', ',') || ';' ||
soortopslag || ';' ||
opslag || ';' ||
REPLACE(kostenplusopslag, '.', ',') || ';' ||
boekmaand || ';' ||
pro_forma_goedgekeurd || ';' ||
nietdoorbelasten || ';' ||
meldinggebouw,
mld_melding_key,
alg_district_key
FROM vbxx_v_kosten_doorbelasting
WHERE o.mld_statusopdr_key = 9;
-- Procedure om pro-forma factuur klaar te zetten.
CREATE OR REPLACE PROCEDURE vbxx_select_pro_forma (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_district_key IN NUMBER
)
AS
CURSOR c
IS
SELECT mld_opdr_key, opdrachttype_key
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9
AND (alg_district_key = p_district_key OR p_district_key = -1);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_boekmaand VARCHAR2 (10);
v_gvf_kenmerk_key NUMBER (10);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk
WHERE alg_kenmerk_key = 1060 -- boekmaand offset CHECK!!!!
AND alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
-- CHECK!!!!!!! ALG.upsertkenmerk (1200, p_district_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly datum pro forma
FOR rec IN c
LOOP
BEGIN
SELECT mld_kenmerk_key
INTO v_gvf_kenmerk_key
FROM mld_kenmerk k, mld_srtkenmerk sk
WHERE k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
AND sk.mld_srtkenmerk_code = 'FINAKKOORD'
AND k.mld_typeopdr_key = rec.opdrachttype_key;
-- zet de opdracht op 'Gereed voor facturatie'
FLX.setflex('OPD', rec.mld_opdr_key, v_gvf_kenmerk_key, 1); -- Facturatiestatus naar 'Gereed voor facturatie'
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'Fout bij aanmaken pro forma factuur' || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.writelog (p_applname, 'E', rec.mld_opdr_key || v_errormsg, '');
COMMIT;
END;
END LOOP;
END;
/
CREATE OR REPLACE PROCEDURE vbxx_select_pro_forma_verwerk (p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_district_key IN NUMBER
)
AS
CURSOR c
IS
SELECT *
FROM vbxx_v_kosten_doorbelasting
WHERE mld_statusopdr_key = 9 -- Afgerond
AND pro_forma_goedgekeurd = 'Ja'
AND (alg_district_key = p_district_key OR p_district_key = -1);
v_errormsg VARCHAR (200);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_boekmaand VARCHAR2 (10);
BEGIN
-- Eerst opruiming
DELETE FROM imp_log
WHERE imp_log_applicatie = p_applname;
-- YASK#68837 We halen de boekmaand niet meer uit het kenmerk bij het district maar we gaan deze
-- opnieuw berekenen.
SELECT TO_CHAR (
ADD_MONTHS (
SYSDATE,
COALESCE (
(SELECT FAC.safe_to_number (alg_onrgoedkenmerk_waarde)
FROM alg_onrgoedkenmerk aogk
WHERE alg_kenmerk_key = 1060 -- boekmaand offset
AND alg_onrgoed_key = d.alg_district_key),
0)),
'yyyymm')
INTO v_boekmaand
FROM alg_district d
WHERE alg_district_key = p_district_key;
FOR rec IN c
LOOP
BEGIN
-- bevries de factuurgegevens in de verkooptabel.
INSERT INTO fin_verkoopfactuur (fin_verkoopfactuur_aanmaak,
fin_verkoopfactuur_id,
fin_verkoopfactuur_datum,
fin_verkoopfactuur_omschr,
fin_verkoopfactuur_xmlnode,
fin_verkoopfactuur_refkey,
prs_kostensoort_oms,
fin_verkoopfactuur_bedrag,
fin_verkoopfactuur_maand,
fin_verkoopfactuur_n2,
fin_verkoopfactuur_n3,
fin_verkoopfactuur_n4,
fin_verkoopfactuur_n5,
fin_verkoopfactuur_c1,
fin_verkoopfactuur_c2,
fin_verkoopfactuur_c3,
fin_verkoopfactuur_c4,
fin_verkoopfactuur_c5,
fin_verkoopfactuur_c6)
VALUES (SYSDATE,
rec.opdrachtnummer,
SYSDATE,
rec.meldingnummer,
'opdracht',
rec.mld_opdr_key,
rec.opdracht_nen_omschrijving,
rec.opdrachtkosten,
v_boekmaand,
rec.opslag,
rec.kostenplusopslag,
rec.mld_melding_key,
rec.alg_district_key,
rec.melding_nen_omschrijving,
rec.melding_nen_code,
rec.vakgroeptype,
rec.vakgroep,
rec.standaardmelding,
rec.nietdoorbelasten
);
MLD.setopdrachtstatus (rec.mld_opdr_key, 7, NULL); -- Verwerkt
END;
END LOOP;
--ALG.upsertkenmerk (1201, p_district_key ,to_char(SYSDATE, 'dd-mm-yyyy hh24:mi:ss')); -- Readonly export datum pro forma
--ALG.upsertkenmerk (1080, p_district_key ,v_boekmaand); -- Readonly boekmaand laatste export veld.
END;
/
--
-- MAREON
--
@@ -4285,6 +4753,15 @@ AS
AND f.fin_factuur_key = kfb.fin_factuur_key(+)
AND fin_factuur_bron = 1;
/*
reversed billing verstuurd
begin vbxx_select_fact('FACT', sysdate); end;
*/
------ payload end ------
SET DEFINE OFF