AAIT#73079 -- Inrichten verkoopinterfaces O2C - IKEA de VK-interface herzien incl Maintenance CAP-methodiek ingepast

svn path=/Customer/trunk/; revision=69868
This commit is contained in:
Jos Migo
2025-07-29 13:12:05 +00:00
parent 952f01a65b
commit 290a5c4014

View File

@@ -830,12 +830,53 @@ AS
-- Basisview voor de berekening/bepaling van deze cap in de vk-interface
CREATE OR REPLACE VIEW aaxx_v_verkoopfactuur_cap
(
FIN_VERKOOPFACTUUR_MAAND,
MLD_MELDING_KEY,
MLD_OPDR_KEY,
MLD_OPDR_NR,
OPDRACHTDATUM,
MAINTENANCE_CAP_OMS,
INKOOPFACTUREN_TOTAAL_VERWERKT,
VK_REGELS_OPDRACHT,
VK_REGELS_OPDRACHT_VERWERKT,
VK_REGELS_OPDRACHT_ONVERWERKT,
VK_REGELS_OPDRACHT_CAP_VERWERKT,
VK_REGELS_OPDRACHT_CAP_ONVERWERKT,
VK_AANTAL_RUNS_VERWERKT,
VK_DATUM_EERST_RUN_VERWERKT,
FIN_VERKOOPFACTUUR_KEY,
CAP_TE_VERREKENEN_IN_RUN
)
AS
SELECT c.*,
CASE WHEN bedrag_regels_opdracht >= 500 AND COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) < 500 THEN ROUND(500 - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0), 2)
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) > 0 THEN ROUND(bedrag_regels_opdracht - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0),2)
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) < -500 THEN 500
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) BETWEEN 0 AND -500 THEN ROUND(bedrag_regels_opdracht - COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0),2)
SELECT c.fin_verkoopfactuur_maand,
c.mld_melding_key,
c.mld_opdr_key,
c.mld_opdr_nr,
c.opdrachtdatum,
c.maintenance_cap_oms,
(SELECT sum(fin_factuur_totaal) inkoopfacturen_totaal FROM fin_factuur WHERE mld_opdr_key = c.mld_opdr_key AND fin_factuur_statuses_key = 7)
+ COALESCE
(
(SELECT SUM (fin_factuur_totaal) FROM aaxx_exp_factuur r, fin_factuur f WHERE r.fin_factuur_key = f.fin_factuur_key AND f.mld_opdr_key = c.mld_opdr_key)
, 0)
inkoopfacturen_totaal_verwerkt,
c.bedrag_regels_opdracht,
c.bedrag_regels_opdracht_verwerkt,
c.bedrag_regels_opdracht_onverwerkt,
c.bedrag_regels_opdracht_cap_verwerkt,
c.bedrag_regels_opdracht_cap_onverwerkt,
c.aantal_runs_verwerkt,
c.datum_eerst_run_verwerkt,
c.fin_verkoopfactuur_key,
CASE WHEN bedrag_regels_opdracht >= 500 AND (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) < 500
THEN -ROUND(500 - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)), 2) -- (deel) cap nog teruggeven/crediteren
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) > 0
THEN -ROUND(bedrag_regels_opdracht - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0))) -- (deel) cap nog teruggeven/crediteren
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) < -500
THEN ROUND((COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)),2) -- het totale gecrediteerde cap weer terugnemen/debiteren
WHEN bedrag_regels_opdracht < 500 AND bedrag_regels_opdracht - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)) BETWEEN 0 AND -500
THEN ROUND(bedrag_regels_opdracht - (COALESCE(bedrag_regels_opdracht_cap_verwerkt, 0) + COALESCE(bedrag_regels_opdracht_cap_onverwerkt, 0)),2) -- het gecrediteerde deel van de cap weer terugnemen/debiteren
ELSE 0
END
cap_te_verrekenen_in_run
@@ -853,16 +894,16 @@ AS
bedrag_regels_opdracht_onverwerkt,
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')> 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL)
bedrag_regels_opdracht_cap_verwerkt,
(SELECT max(fin_verkoopfactuur_n4) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL)
inkoopfactuur_max_onverwerkt, -- hier boeken we de CAP op
(SELECT sum(fin_verkoopfactuur_bedrag) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')> 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL)
bedrag_regels_opdracht_cap_onverwerkt,
(SELECT count(*) FROM (SELECT fin_verkoopfactuurkop_key FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL GROUP BY fin_verkoopfactuurkop_key))
aantal_runs_verwerkt,
(SELECT min(fin_verkoopfactuur_datum) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NOT NULL)
datum_eerst_run_verwerkt,
(SELECT mld_opdr_datumbegin FROM mld_opdr WHERE mld_opdr_key = b.mld_opdr_key)
datum_onverwerkt_opdrachtdatum,
opdrachtdatum,
(SELECT max(fin_verkoopfactuur_key) FROM fin_verkoopfactuur WHERE fin_verkoopfactuur_maand = b.fin_verkoopfactuur_maand AND fin_verkoopfactuur_refkey = b.mld_opdr_key AND fin_verkoopfactuur_xmlnode = 'opdracht' AND INSTR(prs_kostensoort_oms, 'CV CAP')= 0 AND fin_verkoopfactuur_bedrag <> 0 AND fin_verkoopfactuur_datum IS NULL)
fin_verkoopfactuur_key -- aan deze laatste openstaande verkoopregel van dat jaar (fin_verkoopfactuur_maand) zetten we CAP op
fin_verkoopfactuur_key -- aan deze laatste openstaande verkoopregel van dat jaar (fin_verkoopfactuur_maand) zetten we CAP op (als we per verkooprun 1 CAP-regel gaan toevoegen)
FROM
(SELECT o.mld_opdr_key,
o.mld_melding_key,
@@ -3960,19 +4001,14 @@ BEGIN
END IF;
-- INLO CORE
-- Voor Henkel: Fee komen te vervallen (2023-12)
-- Voor Zwaansvliet: Klant vervallen 2023
-- Voor VEH wordt geen FEE berekend
-- Voor IKEA - op basis van de maintenance cap bij opdracht.
--- Geldt voor alleen voor waarde 'maintenance cap op JA'
--- Geldt voor alleen voor waarde opdrachtkenmerk 'maintenance cap op JA'
--- Is MAX 500 euro, over alle inkoopfacturen op die opdracht
--- Bij Credits op die opdracht bedrag debet in rekening brengen
------- Om goede berekening te houden, is er een hulpview aaxx_v_verkoopfactuur_cap.
------- Per inkooprun wordt dan op de hoogste verkoopfactuur_key in die run de CAP-bepaald en op die verkoopfactuur toegevoegd.
IF aaxx_get_user = 'INLO' THEN
-- IKEA - opdrachten met maintenance_cap op 'Ja'
---- Tot max bedrag van 500, euro wordt de inkoopfactuur als FEE teruggegeven
-- NIEUW IKEA2.0 - Op basis hulpview aaxx_v_verkoopfactuur_cap
INSERT INTO fin_verkoopfactuur
(
fin_verkoopfactuur_id, fin_verkoopfactuur_xmlnode, fin_verkoopfactuur_refkey, fin_verkoopfactuur_aanmaak, prs_kostenplaats_nr, prs_debiteur_naam, prs_kostensoort_oms, prs_kostensoort_opmerking, prs_kostensoortgrp_oms, fin_verkoopfactuur_omschr, fin_verkoopfactuur_bedrag, fin_btwtabelwaarde_code, fin_verkoopfactuur_maand, fin_verkoopfactuur_c1, fin_verkoopfactuur_c2, fin_verkoopfactuur_c3, fin_verkoopfactuur_c5, fin_verkoopfactuur_c8, fin_verkoopfactuur_c6, fin_verkoopfactuur_n4, fin_verkoopfactuur_n5
@@ -3981,10 +4017,11 @@ BEGIN
c.cap_te_verrekenen_in_run,
v.fin_btwtabelwaarde_code, v.fin_verkoopfactuur_maand, v.fin_verkoopfactuur_c1, v.fin_verkoopfactuur_c2, 'X', v.fin_verkoopfactuur_c5, v.fin_verkoopfactuur_c8, v.fin_verkoopfactuur_c6, v.fin_verkoopfactuur_n4, v.fin_verkoopfactuur_n5
FROM fin_verkoopfactuur v,
aaxx_v_verkoopfactuur_cap c -- basisview CAP-berekening incl key naar laagste fin_verkoopfactuur_key om totaalregel goed gevuld te krijgen
aaxx_v_verkoopfactuur_cap c
WHERE c.fin_verkoopfactuur_key = v.fin_verkoopfactuur_key
AND c.bedrag_regels_opdracht_onverwerkt IS NOT NULL
AND ROUND(c.inkoopfacturen_totaal_verwerkt, 2) = ROUND(c.vk_regels_opdracht, 2) -- Bij overgang naar nieuwe vk-interface IKEA2.0. wil alleen maar de juiste CAP-berekening in de verkoopfactuur als ook daadwerkelijke alle inkoopfacturen in de verkoopinterface zitten
AND c.cap_te_verrekenen_in_run <> 0
AND v.fin_verkoopfactuur_n5 IN (281, 461) -- IKEA en IKEA-BEHEER
AND v.fin_verkoopfactuur_aanmaak = v_logdate
AND v.fin_verkoopfactuur_c8 = 'CORE' ;