MARX#82808 Alternatief op GLN eigenaar

svn path=/Mareon/trunk/; revision=64132
This commit is contained in:
Marcel Bourseau
2024-04-02 11:09:37 +00:00
parent f2d6c43717
commit b30fa788cb
2 changed files with 227 additions and 0 deletions

View File

@@ -63,6 +63,26 @@ INSERT INTO mld_kenmerk (mld_kenmerk_key, mld_srtkenmerk_key, mld_typeopdr_key,
SELECT 104, 4, 5, 'O', 70, 1 FROM DUAL;
-- En tenslotte voor de Premium LEVERANCIER nog een flexprop waarmee deze kan instellen op welke alternatieve wijze de eigenaar via Affiliate gestuurd moet worden.
INSERT INTO prs_kenmerk (prs_kenmerk_key, prs_kenmerk_niveau, prs_kenmerk_volgnr, prs_kenmerk_omschrijving, prs_kenmerk_kenmerktype, prs_kenmerk_lengte, prs_kenmerk_nmin, prs_kenmerk_nmax, prs_kenmerk_hint)
SELECT 65, 'B', 292, 'DICO Affiliate (eigenaar)','N', 2, 0, 4, 'Uitleg: Afwijkend gebruik van Affiliate in DICO opdrachtbericht als GLN onbekend is: Leeg/0 (= default, standaard), 1 (= Affiliate sturen zonder GLN), 2 (= Affiliate sturen met lege GLN), 3 (= Affiliate sturen met GLN 13x0), 4 (= GLN via vertaaltabel).'
FROM DUAL;
UPDATE fac_locale_xsl
SET fac_locale_xsl_cust = 'GLN / Relatienr'
WHERE fac_locale_xsl_label = 'lcl_prs_companies_leverancier_nr'
AND fac_locale_xsl_lang = 'NL'
AND fac_locale_xsl_module = 'ASP';
-- Vertaling van eigenaarnaam naar GLN (Relatienr) zoals in ERP systeem van leverancier is geregistreerd.
INSERT INTO fac_usrtab (fac_usrtab_key, fac_usrtab_naam, fac_usrtab_omschrijving)
VALUES(11,'Eigenaren','Vertaling eigenaar naar GLN');
-- Rapportage van vertaling van eigenaarsnaam (like % %) naar GLN : beschikbaar voor de beheerder van leverancier (= WEB_EXTREL)
INSERT INTO fac_menu (fac_menu_altgroep, fac_menu_level, fac_menu_volgnr, fac_menu_altlabel, fac_menu_info, fac_menu_alturl, fac_functie_key, fac_menu_portal)
SELECT 1, 2, 12134, 'Vertaaltabel eigenaren', 'Voor de opdrachtnemer: registratie van eigenaren (namen) vanuit uw opdrachtgevers met bijbehorende vertaling naar GLN (of relatienr) voor naar eigen systeem', (SELECT 'appl/marx/AffiliateVertaalGLN.asp' from dual), (SELECT fac_functie_key FROM fac_functie WHERE fac_functie_code = 'WEB_EXTREL'), NULL
FROM DUAL;
------ payload end ------
SET DEFINE OFF

View File

@@ -1993,6 +1993,71 @@ BEGIN
END;
/
-- MARX#82808 Alternatief op GLN eigenaar
CREATE OR REPLACE FUNCTION marx_auth_vertaal_affiliate (v_prs_bedrijf_key IN NUMBER)
RETURN NUMBER
AS
v_geautoriseerd NUMBER(10);
BEGIN
SELECT COALESCE (MAX ('1'), '0')
INTO v_geautoriseerd
FROM prs_kenmerklink
WHERE prs_kenmerk_key = 65 AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key AND prs_kenmerklink_waarde = '4' ;
RETURN v_geautoriseerd;
END;
/
CREATE OR REPLACE VIEW marx_v_gelieerde_lev_bedrijven
(prs_bedrijf_key1, prs_bedrijf_naam1, prs_bedrijf_key2, prs_bedrijf_naam2)
AS
SELECT DISTINCT c1.prs_bedrijf_key, b1.prs_bedrijf_naam, c2.prs_bedrijf_key, b2.prs_bedrijf_naam
FROM prs_contactpersoon c1, prs_contactpersoon c2,
prs_bedrijf b1, prs_bedrijf b2
WHERE c1.prs_perslid_key = c2.prs_perslid_key
and b1.prs_bedrijf_key = c1.prs_bedrijf_key
and b2.prs_bedrijf_key = c2.prs_bedrijf_key;
-- Rapportage van de vertaaltabel van eigenaarnaam naar GLN die leverancier kan instellen.
-- De eigenaarsnaam vanuit opdrachtgever kan worden vertaald naar de GLN die leverancier in zijn systeem heeft geregistreerd...
CREATE OR REPLACE VIEW marx_udr_vertaal_eigenaren
(FCLT_3D_USER_KEY, naam_eigenaar, gln_eigenaar, prs_bedrijf_key)
AS
SELECT cp.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, prs_contactpersoon cp
WHERE fac_usrtab_key = 11
AND SUBSTR(fac_usrdata_upper, 1, INSTR(fac_usrdata_upper,'|')-1) = cp.prs_bedrijf_key
AND fac_usrdata_verwijder IS NULL
AND cp.prs_contactpersoon_verwijder IS NULL
AND cp.prs_perslid_key IS NOT NULL;
-- Kijkt of leverancier een vertaling heeft ingesteld voor de eigenaarsnaam, er wordt gezocht op een deel van de naam, indien er meerdere vertalingen (records) zijn,
-- dan wordt het GLN van het meest waarschijnlijke record als resultaat gegeven.
CREATE OR REPLACE FUNCTION marx_vertaalde_affiliate_GLN (v_prs_bedrijf_key IN NUMBER, v_eigenaar_naam IN VARCHAR2)
RETURN VARCHAR2
AS
v_result VARCHAR2(1000);
CURSOR c1
IS
SELECT DISTINCT gln_eigenaar, naam_eigenaar, UTL_MATCH.jaro_winkler(UPPER(naam_eigenaar), UPPER(v_eigenaar_naam)) AS score
FROM marx_udr_vertaal_eigenaren
WHERE prs_bedrijf_key IN (SELECT prs_bedrijf_key2 FROM marx_v_gelieerde_lev_bedrijven WHERE prs_bedrijf_key1 = v_prs_bedrijf_key)
AND UPPER(v_eigenaar_naam) LIKE '%' || naam_eigenaar || '%'
ORDER BY score DESC;
BEGIN
FOR r IN c1
LOOP
IF v_result IS NULL
THEN
v_result := r.gln_eigenaar;
END IF;
END LOOP;
RETURN v_result;
END;
/
-- MARX#66907: Opdrachten overzichtsscherm: kolom locatiegegevens compact en volgorde fixed
-- Levert een string op in formaat:
-- Straatnaam huisnr huisnrtoev gevolgd door CR gevolgd door postcode plaatsnaam, dus bv
@@ -5337,6 +5402,8 @@ IS
v_straatnaam VARCHAR2 (100);
v_huisnr VARCHAR2 (100);
v_huisnr_toev VARCHAR2 (100);
v_vertaalde_GLN_eigenaar VARCHAR2 (1000);
c_mld_typeopdr_key NUMBER (10);
v_prev_mld_opdr_externnr VARCHAR2 (100);
@@ -5856,6 +5923,12 @@ BEGIN
-- MARX#77050 Vastgoed eigenaar in opdrachtbericht meesturen tbv debiteur (in factuurbericht)
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_eig, v_mld_opdr_key, rec_vervolg_ax.mld_opdr_gln_vve);
-- MARX#82808 Alternatief op GLN eigenaar
IF marx_auth_vertaal_affiliate(v_lev_prs_bedrijf_key) = 1 AND rec_vervolg_ax.mld_opdr_gln_vve IS NULL AND rec_vervolg_ax.mld_melding_cust_name IS NOT NULL
THEN
-- Er is geen GLN voor eigenaar, EN leverancier heeft vertalingtabel actief (ingesteld), EN de eigenaarsnaam is bekend, dan gaan we kijken of de eigenaarsnaam een vertaald GLN heeft
v_vertaalde_GLN_eigenaar := marx_vertaalde_affiliate_GLN(v_lev_prs_bedrijf_key, rec_vervolg_ax.mld_melding_cust_name);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_eig, v_mld_opdr_key, v_vertaalde_GLN_eigenaar);
END IF;
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_naam, v_mld_opdr_key, rec_vervolg_ax.mld_melding_cust_name);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_adres, v_mld_opdr_key, rec_vervolg_ax.mld_melding_cust_straat);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_pc, v_mld_opdr_key, rec_vervolg_ax.mld_melding_cust_postcode);
@@ -9258,6 +9331,139 @@ END;
-----
-- In tabel fac_usrdata (van fac_usrtab_key 11 cq. Vertaaltabel Eigenaren) wordt een record:
-- toegevoegd (INSERT) indien code1 nog niet bestaat
-- aangepast (UPDATE) idien code1 al bestaat, en code2 niet leeg is
-- verwijderd (DELETE) indien code1 al bestaat, en code 2 leeg is.
CREATE OR REPLACE FUNCTION mar_post_action_eigenaar(p_perslid_key IN NUMBER,
p_code1_code2 IN VARCHAR2,
p_ref_key IN NUMBER)
RETURN VARCHAR2
IS
v_result VARCHAR2 (1000);
v_prs_bedrijf_key NUMBER (10);
v_fac_functie_key NUMBER (10);
v_code1 VARCHAR2 (1000);
v_code2 VARCHAR2 (1000);
v_aantal NUMBER(10);
l_fac_usrtab_key NUMBER(10);
l_force_error NUMBER (10);
BEGIN
BEGIN
-- Key van eigen tabel voor eigenaar vertalingen is 11.
l_fac_usrtab_key := 11;
v_result := NULL;
v_result := 'U heeft geen beheerrechten voor de vertaaltabel van eigenaren.';
-- Heeft perslid voldoende rechten, dwz WEB_EXTREL autorisatie?
SELECT fac_functie_key
INTO v_fac_functie_key
FROM fac_v_webgebruiker
WHERE fac_functie_key = (SELECT fac_functie_key
FROM fac_functie
WHERE fac_functie_code = 'WEB_EXTREL')
AND prs_perslid_key = p_perslid_key;
v_result := 'Leverancier is niet gevonden/bestaat niet in Mareon';
-- We gaan op zoek naar het "1e" (= MIN functie) bedrijf waar p_perslid_key contactpersoon is.
-- ALternatief zou zijn om een loop om ALLE bedrijven te doen waar p_perslid_key contactpersoon is.
-- Of 100 punten opolossing, de leverancier (=bedrijf) door te geven via bv parameter p_ref_key die nu nog niet gebruikt wordt. oftewel dummy is.
-- Maar zoals gezegd, we doen nu vooralsnog "1e" bedrijf, dat volstaat wel in 1e instantie...
SELECT MIN(b.prs_bedrijf_key)
INTO v_prs_bedrijf_key
FROM prs_bedrijf b, prs_contactpersoon cp
WHERE b.prs_bedrijf_intern IS NULL
AND b.prs_bedrijf_verwijder IS NULL
AND cp.prs_bedrijf_key = b.prs_bedrijf_key
AND cp.prs_perslid_key = p_perslid_key;
v_result := 'U heeft geen rechten voor de vertaaltabel van eigenaren';
v_aantal := marx_auth_vertaal_affiliate (v_prs_bedrijf_key);
IF v_aantal = 0
THEN
SELECT 1 / 0
INTO l_force_error
FROM DUAL;
END IF;
v_result := 'Er is iets mis met de vertaling: geef eigenaarnaam en GLN op';
v_code1:= SUBSTR(p_code1_code2, 1, INSTR(p_code1_code2,'|')-1);
v_code2:= SUBSTR(p_code1_code2, INSTR(p_code1_code2,'|')+1);
IF v_code1 IS NOT NULL
THEN
-- Bestaat fac_usrdata al met code 1?
v_result := 'Er kan niet worden bepaald a.d.h.v. de eigenaar al bestaat';
SELECT count(*)
INTO v_aantal
FROM fac_usrdata
WHERE fac_usrtab_key = l_fac_usrtab_key
AND fac_usrdata_upper = UPPER(v_prs_bedrijf_key || '|' || v_code1)
AND fac_usrdata_verwijder IS NULL;
IF v_aantal = 0
THEN
-- Insert/Nieuw record
IF v_code2 IS NOT NULL
THEN
v_result := 'Het toevoegen van de vertaling eigenaar-GLN is mislukt';
INSERT INTO fac_usrdata(fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
VALUES(l_fac_usrtab_key, v_prs_bedrijf_key || '|' || v_code1, v_code2);
ELSE
v_result := 'GLN van eigenaar mag niet leeg zijn.';
SELECT 1 / 0
INTO l_force_error
FROM DUAL;
END IF;
ELSE
IF v_aantal = 1
THEN
IF v_code2 IS NOT NULL
THEN
-- Update/wijzig record
v_result := 'Het wijzigen van de vertaling eigenaar-GLN is mislukt';
UPDATE fac_usrdata
SET fac_usrdata_omschr = v_code2
WHERE fac_usrtab_key = l_fac_usrtab_key
AND fac_usrdata_upper = UPPER(v_prs_bedrijf_key || '|' || v_code1)
AND fac_usrdata_verwijder IS NULL;
ELSE
-- Delete/verwijder record
v_result := 'Het verwijderen van de vertaling eigenaar-GLN is mislukt';
UPDATE fac_usrdata
SET fac_usrdata_verwijder = SYSDATE
WHERE fac_usrtab_key = l_fac_usrtab_key
AND fac_usrdata_upper = UPPER(v_prs_bedrijf_key || '|' || v_code1)
AND fac_usrdata_verwijder IS NULL;
END IF;
END IF;
END IF;
ELSE
v_result := 'Naam van eigenaar mag niet leeg zijn.';
SELECT 1 / 0
INTO l_force_error
FROM DUAL;
END IF;
v_result := NULL;
COMMIT;
RETURN NULL;
EXCEPTION
WHEN OTHERS
THEN
RETURN v_result;
END;
END;
/
-----
-- View van opdrachten met een opmerking sinds de 'laatste' keer.
@@ -20174,6 +20380,7 @@ BEGIN
WHEN UPPER (v_action_code) = 'MLD_OPDR_DELETE_NQ' THEN v_result := mar_post_action_del_mldopdr_nq (v_prs_perslid_key, v_extra_omschr, v_ref_key);
WHEN UPPER (v_action_code) = 'PRS_BEDRIJF_ACTIVEER_NQ' THEN v_result := mar_post_action_activate_nq (v_prs_perslid_key, v_extra_omschr, v_ref_key);
WHEN UPPER (v_action_code) = 'FAC_USRDATA_VAARDIGHEID' THEN v_result := mar_post_action_vaardigheid (v_prs_perslid_key, v_extra_omschr, 0);
WHEN UPPER (v_action_code) = 'FAC_USRDATA_EIGENAAR' THEN v_result := mar_post_action_eigenaar (v_prs_perslid_key, v_extra_omschr, 0);
ELSE v_result := 'Onbekende action_code';
END CASE;
ELSE