MARX#88858 De GLN van de VvE vertalen/ombuigen naar opdracht voor de VvE beheerder

svn path=/Mareon/trunk/; revision=68901
This commit is contained in:
Marcel Bourseau
2025-05-01 15:07:51 +00:00
parent 3257b61909
commit ec46eeb9ba
2 changed files with 149 additions and 17 deletions

56
sql/Onces/marx26a.sql Normal file
View File

@@ -0,0 +1,56 @@
--
-- $Id$
--
-- Korte beschrijving wat het script doet
-- Voor dbuser invullen: - indien script voor 1 klant is: 'MARX' (de klantcode, zoals vermeld in fac_version_cust)
-- - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
-- - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
--
DEFINE thisfile = 'MARX26A.SQL'
DEFINE dbuser = '^MARX'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF
------ payload begin ------
-- Start MARX#86957 Nieuwe mogelijkheid voor dispatching Vesteda-opdrachten naar JH-vestigingen
-- Vertaling van postcode-gebied (bereik van - t/m) naar GLN zodat Mareon de dispatching naar juiste vestiging van leverancier verzorgt.
-- Voorbeeld:
-- GLN leverancier suppliercode
-- 1234567890123 arlanda
-- 1234567890999 arlanda
-- etc
-- Zodat een GLN van de VvE wordt vertaald naar de VvE beheerder (d.w.z. naar de leverancierscode van die VvE beheerder, b.v. code 'arlanda').
-- En waarbij de GLN van leverancier (VvE) in kenmerk(key 26) "GLN VvE" wordt geregistreerd.
-- Speciale notatie
-- GLN leverancier suppliercode
-- * arlanda --> betekent elke GLN die niet gevonden kan worden bij deze opdrachtgever, wordt vertaald naar leverancier 'arlanda'.
INSERT INTO fac_usrtab (fac_usrtab_key, fac_usrtab_naam, fac_usrtab_omschrijving)
VALUES(13,'VvE-GLN','Vertaling VvE - VvEbeheerder');
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile

View File

@@ -2493,6 +2493,47 @@ SET DEFINE OFF
END;
/
-- MARX#88858 Bij de opdrachtgever (met prs_bedrijfskey en API-usr prs_perslid_key) de GLN van de VvE vertalen/ombuigen naar opdracht voor de VvE beheerder
CREATE OR REPLACE VIEW marx_v_vertaal_vve_2_beheerder
(prs_perslid_key, GLN_VvE, GLN_Beheerder, prs_bedrijf_key)
AS
SELECT wp.prs_perslid_key, SUBSTR(fac_usrdata_upper, INSTR(fac_usrdata_upper,'|')+1), fac_usrdata_omschr, fac.safe_to_number(SUBSTR(fac_usrdata_upper, 1, INSTR(fac_usrdata_upper,'|') -1))
FROM fac_usrdata, mar_v_woco_perslid wp
WHERE fac_usrtab_key = 13
AND SUBSTR(fac_usrdata_upper, 1, INSTR(fac_usrdata_upper,'|')-1) = wp.prs_bedrijf_key
AND wp.prs_perslid_apikey IS NOT NULL
AND fac_usrdata_verwijder IS NULL;
CREATE OR REPLACE FUNCTION marx_do_vertaal_vve2beheerder (v_prs_perslid_key IN NUMBER, v_gln_vve IN VARCHAR2)
RETURN VARCHAR2
AS
v_gln_beheerder VARCHAR2(1000);
BEGIN
SELECT MAX(gln_beheerder)
INTO v_gln_beheerder
FROM marx_v_vertaal_vve_2_beheerder
WHERE prs_perslid_key = v_prs_perslid_key
AND gln_vve = UPPER(v_gln_vve);
IF v_gln_beheerder IS NULL
THEN
-- Vertaal regel is niet gevonden, we gaan nu nog checken obv wildchard '*', dus niet op exacte match.
-- En dan naar de vertaalregel die dichts in de buurt zit bij v_gln_vve (iets met grootste stringlengte)
SELECT MAX(gln_beheerder)
INTO v_gln_beheerder
FROM marx_v_vertaal_vve_2_beheerder
WHERE prs_perslid_key = v_prs_perslid_key
AND UPPER(v_gln_vve) like REPLACE(gln_vve,'*','%')
AND LENGTH(gln_vve) = ( SELECT MAX(LENGTH(gln_vve))
FROM marx_v_vertaal_vve_2_beheerder
WHERE prs_perslid_key = v_prs_perslid_key
AND UPPER(v_gln_vve) like REPLACE(gln_vve,'*','%')
);
END IF;
RETURN v_gln_beheerder;
END;
/
-- MARX#66907: Opdrachten overzichtsscherm: kolom locatiegegevens compact en volgorde fixed
@@ -6100,6 +6141,10 @@ SET DEFINE OFF
v_mld_opdr_updates_allowed NUMBER (10);
v_ax_company_id prs_bedrijf.prs_overeenkomst_nr%TYPE;
v_ax_leverancier_id VARCHAR2(100);
v_vertaalde_leverancier_id VARCHAR2(100);
l_mld_opdr_gln_vve VARCHAR2(100);
v_mld_opdr_bedrijfopdr_volgnr NUMBER (10);
v_flexsummary mld_opdr.mld_opdr_omschrijving%TYPE;
v_mld_opdr_kosten mld_opdr.mld_opdr_kosten%TYPE;
@@ -6401,7 +6446,11 @@ SET DEFINE OFF
|| '] ',
1,
1000);
-- We leggen het leveranciersnummer even vast in een variabele, en gaan met deze variabele verder (agv MARX#88858 - De GLN van de VvE vertalen/ombuigen naar opdracht voor de VvE beheerder)
v_ax_leverancier_id := rec_ax.ax_supplier_id;
l_mld_opdr_gln_vve := NULL;
-- Eerst checken of opdracht met externe opdrachtnummer al bestaat (bij deze of een andere melding), want dan niet aanmaken en (vooralsnog) ook niet updaten.
-- MARX#56368: Aanmaak opdracht en direct annuleer opdracht moet leiden tot geen opdracht: En indien direct geannuleerd (ec_ax.ax_supplier_id = 1) dan wordt de opdracht niet gevonden, en zal v_mld_opdr_key NULL opleveren.
-- MARX#58610: Mareon AVG Proof: een (nieuwe) opdracht op een bestaande melding die in archief (status 6) staat, moet via een nieuwe melding lopen (en kan niet op gearchiveerde melding)
@@ -6449,7 +6498,7 @@ SET DEFINE OFF
END IF;
-- MARX#56368: Aanmaak opdracht en direct annuleer opdracht moet leiden tot geen opdracht: indien direct geannuleerd (ec_ax.ax_supplier_id = 1) dan geen melding aanmaken (als die er nog niet was).
IF (v_mld_melding_key IS NULL) AND (rec_ax.ax_supplier_id <> '-1')
IF (v_mld_melding_key IS NULL) AND (v_ax_leverancier_id <> '-1')
THEN
-- Melding is nieuw, dus inserten...
@@ -6520,7 +6569,7 @@ SET DEFINE OFF
-- Eerst de juiste leverancier obv ax_supplier_id bepalen, rekening houdende met de WOCO die opdracht plaatst.
v_errorhint :=
'Leverancier '
|| UPPER (rec_ax.ax_supplier_id)
|| UPPER (v_ax_leverancier_id)
|| ' bij opdrachtgever met company_id ['
|| v_ax_company_id
|| '] niet gevonden, er is geen opdracht aangemaakt';
@@ -6529,21 +6578,42 @@ SET DEFINE OFF
SELECT MAX (l_prs_bedrijf_key)
INTO v_lev_prs_bedrijf_key
FROM mar_v_woco_x_lev
WHERE w_prs_perslid_key = v_prs_perslid_key AND UPPER (l_ax_supplier_id) = UPPER (rec_ax.ax_supplier_id);
WHERE w_prs_perslid_key = v_prs_perslid_key AND UPPER (l_ax_supplier_id) = UPPER (v_ax_leverancier_id);
-- MARX#56368: Aanmaak opdracht en direct annuleer opdracht moet leiden tot geen opdracht: En indien direct geannuleerd (rec_ax.ax_supplier_id = -1) dan zal v_lev_prs_bedrijf_key NULL opleveren.
-- MARX#56368: Aanmaak opdracht en direct annuleer opdracht moet leiden tot geen opdracht: En indien direct geannuleerd (v_ax_leverancier_id = -1) dan zal v_lev_prs_bedrijf_key NULL opleveren.
-- MARX#70877 Bij T365-opdracht voor onbekende leverancier in Mareon graag reden retour, onbekende leverancier is geval als:
-- 1. we moeten -1 uitsluiten hier (betekent ANN)
-- 2. en als v_lev_prs_bedrijf_key IS NULL
IF (rec_ax.ax_supplier_id <> '-1' AND v_lev_prs_bedrijf_key IS NULL)
IF (v_ax_leverancier_id <> '-1' AND v_lev_prs_bedrijf_key IS NULL)
THEN
-- Hier is een goed gevulde leverancier-id (b.v. met waarde 1234) onbekend icm de woco, nu gaan we actief een logging toevoegen (W of E)
fac.imp_writelog (
p_import_key,
v_push_err_warn,
v_aanduiding || ':' || v_errorhint,
'Opdracht wordt niet aangemaakt/bijgewerkt');
-- Lev-id is niet gevonden / niet geregistreerd in prs_bedrijf_bedrijf: MARX#88858 De GLN van de VvE vertalen/ombuigen naar opdracht voor de VvE beheerder?
-- Mss dat deze in de vertaaltabel (usrtab key 13) staat, dan gaan we die vertalen...
v_vertaalde_leverancier_id := marx_do_vertaal_vve2beheerder (v_prs_perslid_key, v_ax_leverancier_id);
SELECT MAX (l_prs_bedrijf_key)
INTO v_lev_prs_bedrijf_key
FROM mar_v_woco_x_lev
WHERE w_prs_perslid_key = v_prs_perslid_key AND UPPER (l_ax_supplier_id) = UPPER (v_vertaalde_leverancier_id);
IF (v_ax_leverancier_id <> '-1' AND v_lev_prs_bedrijf_key IS NULL)
THEN
-- Hier is een goed gevulde leverancier-id (b.v. met waarde 1234) onbekend icm de woco, dwz niet gevonden in de prs_bedrijf_bedrijf tabel, nu gaan we actief een logging toevoegen (W of E): Leverancier niet bekend!
fac.imp_writelog (
p_import_key,
v_push_err_warn,
v_aanduiding || ':' || v_errorhint,
'Opdracht wordt niet aangemaakt/bijgewerkt');
ELSE
-- Vertaling van VvE naar VvE beheerder is succesvol, we moeten dan nog wel het GLN van de VvE registeren om niet verloren te gaan, d.w.z. als supplier gebruiken in de DICO/SALES005 koppeling.
IF LENGTH (v_ax_leverancier_id) = 13 AND TRIM (TRANSLATE (v_ax_leverancier_id, '0123456789', ' ')) IS NULL
THEN
-- Het is een GLN bestaande uit 13 cijfers, in dat geval registeren als opdrachtkenmerk (met key c_kenmerkopdr_key_opdr_gln_vve / 29)
-- Dat verloopt dan hieronder, met MARX#59976: zie verderop hieronder in geval van Tobias... kan nl. nog niet hier, omdat opdr_key nog niet bekend is hiero.
-- We gaan wel vlaggetje meegeven (door zetten van var l_mld_opdr_gln_vve) dat opdrachtkenmerk (key 29) moet worden gezet hieronder (zodat dit bekend is straks)...
l_mld_opdr_gln_vve := v_ax_leverancier_id;
END IF;
END IF;
END IF;
IF (v_mld_opdr_key IS NULL) AND (v_lev_prs_bedrijf_key IS NOT NULL)
@@ -6630,10 +6700,16 @@ SET DEFINE OFF
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_PO_companyID,
v_mld_opdr_key,
rec_ax.mld_opdr_purchordercompanyid);
-- MARX#59976: Koppeling Twinq: “Onderhoudsopdrachten vanuit Tobias via Mareon voor de VvE
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_vve, v_mld_opdr_key, rec_ax.mld_opdr_gln_vve);
IF l_mld_opdr_gln_vve IS NOT NULL
THEN
-- MARX#88858 De GLN van de VvE vertalen/ombuigen naar opdracht voor de VvE beheerder
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_vve, v_mld_opdr_key, l_mld_opdr_gln_vve);
ELSE
-- MARX#59976: Koppeling Twinq: “Onderhoudsopdrachten vanuit Tobias via Mareon voor de VvE
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_vve, v_mld_opdr_key, rec_ax.mld_opdr_gln_vve);
END IF;
-- MARX#54417: Opdrachtsoort - INS Inspectie MUT Mutatie REP Reparatie
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_soort,
v_mld_opdr_key,
@@ -7096,7 +7172,7 @@ SET DEFINE OFF
IF (v_mld_opdr_updates_allowed = 1)
THEN
IF (v_mld_opdr_key IS NOT NULL) AND (rec_ax.ax_supplier_id = '-1')
IF (v_mld_opdr_key IS NOT NULL) AND (v_ax_leverancier_id = '-1')
THEN
-- aanduiding vanuit AX is annuleer
fac.imp_writelog (p_import_key,