MARX#87282 Nieuwe API koppeling voor activeren leveranciers vanuit ERP naar Mareon

svn path=/Mareon/trunk/; revision=67651
This commit is contained in:
Marcel Bourseau
2025-01-20 23:39:50 +00:00
parent 30f17e8166
commit 11bdc367d8

View File

@@ -9244,6 +9244,167 @@ SET DEFINE OFF
END;
END;
/
-- p_perslid_key = woco die deze functie uitvoert
-- lev_naam_id = combi van leveranciersnaam (die in Mareon moet bestaan) en leveranciersid (bv GLN, lev-id uit ERP opdrgever, of Mareon id) gescheiden door pipe |, dus b.v. 'Coen Hagedoorn|123456'
CREATE OR REPLACE FUNCTION mar_post_action_bedrijfx2 (p_perslid_key IN NUMBER,
p_levnaam_levid IN VARCHAR2)
RETURN VARCHAR2
IS
v_result VARCHAR2 (1000);
v_levnaam VARCHAR2 (1000);
v_levid VARCHAR2 (1000);
v_levid_oud VARCHAR2 (1000);
v_prs_bedrijf_woco_key NUMBER (10);
v_woco_prs_bedrijf_naam VARCHAR2 (250);
v_prs_bedrijf_lev_key NUMBER (10);
v_prs_bedrijf_bedrijf_status NUMBER (10);
v_aantal NUMBER (10);
l_force_error NUMBER (10);
BEGIN
BEGIN
v_result := NULL;
v_result := 'Geen autorisatie om leverancier te koppelen';
-- Heeft perslid voldoende rechten, dwz WEB_MLDBOF autorisatie, zodat we zeker weten dat dit een WOCO-API user is?
SELECT 1/marx_auth(p_perslid_key,'MARXREP') INTO l_force_error FROM dual;
v_result := 'Opdrachtgever is niet gevonden/bestaat niet in Mareon, leverancier kan niet gekoppeld worden';
SELECT prs_bedrijf_key, prs_bedrijf_naam
INTO v_prs_bedrijf_woco_key, v_woco_prs_bedrijf_naam
FROM mar_v_woco_perslid
WHERE prs_perslid_key = p_perslid_key;
v_result := 'Id en/of naam van leverancier ontbreekt';
v_levnaam:= SUBSTR(p_levnaam_levid, 1, INSTR(p_levnaam_levid,'|')-1);
v_levid:= SUBSTR(p_levnaam_levid, INSTR(p_levnaam_levid,'|')+1);
IF v_levnaam IS NOT NULL AND v_levid IS NOT NULL
THEN
v_result := 'Leveranciersnaam ' || v_levnaam || ' bestaat niet in Mareon';
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_lev_key
FROM prs_bedrijf
WHERE prs_bedrijf_naam_upper = UPPER (v_levnaam) AND prs_bedrijf_intern IS NULL AND prs_bedrijf_verwijder IS NULL;
-- Wanneer het lev-id bestaat bij een leverancier, dan kan deze niet nog eens worden geregistreerd, deze moet(!!) uniek zijn t.b.v. bepalen van juiste leverancier bij ontvangst / aanmaak opdrachten.
SELECT COUNT (*)
INTO v_aantal
FROM prs_bedrijf_bedrijf
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 <> v_prs_bedrijf_lev_key AND prs_bedrijf_externid2 = v_levid;
IF v_aantal > 0
THEN
-- Forceer error
v_result := 'Leveranciersnaam ' || v_levnaam || ' kan niet met ID ' || v_levid || ' worden geactiveerd omdat dit ID bij een andere leverancier al wordt toegepast';
SELECT 1/0 INTO l_force_error FROM dual;
END IF;
SELECT COUNT (*)
INTO v_aantal
FROM prs_bedrijf_bedrijf
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
IF v_aantal = 0
THEN
-- Combi bestaat nog niet, we gaan inserten
v_result := 'Het toevoegen/koppelen van leverancier [' || v_woco_prs_bedrijf_naam || ' x ' || v_levnaam || '] is niet gelukt';
v_prs_bedrijf_bedrijf_status := 0; -- Altijd premium uit.
INSERT INTO prs_bedrijf_bedrijf (prs_bedrijf_key1,
prs_bedrijf_key2,
prs_bedrijf_externid2,
prs_bedrijf_bedrijf_status)
SELECT v_prs_bedrijf_woco_key,
v_prs_bedrijf_lev_key,
v_levid,
v_prs_bedrijf_bedrijf_status
FROM DUAL;
-- We tracken tbv o.a. support dat opdrachtgever de combi heeft toegevoegd.
fac.trackaction ('#PRSUPB',
v_prs_bedrijf_woco_key,
p_perslid_key,
NULL,
'Mareon deelnemer ' || v_levnaam || ' is als leverancier met ID ' || v_levid || ' succesvol geactiveerd t.b.v. het ontvangen van uw (uitvoerings)opdrachten');
ELSE
-- Combi bestaat al, we gaan updaten
v_result := 'Het updaten/koppelen van leverancier [' || v_woco_prs_bedrijf_naam || ' x ' || v_levnaam || '] is niet gelukt';
-- LEV ID is hier gevuld, die mogen we dan updaten (en eenzelfde LEV-ID blijft na update dus gelijk, geen punt ;)
SELECT prs_bedrijf_externid2
INTO v_levid_oud
FROM prs_bedrijf_bedrijf
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
IF v_levid_oud IS NULL OR v_levid_oud <> v_levid
THEN
UPDATE prs_bedrijf_bedrijf
SET prs_bedrijf_externid2 = v_levid
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
-- We tracken tbv o.a. support dat opdrachtgever het leveranciersid heeft aangepast (van old -> new value)
fac.trackaction ('#PRSUPB',
v_prs_bedrijf_woco_key,
p_perslid_key,
NULL,
'Mareon deelnemer ' || v_levnaam || ' is als leverancier van uw (uitvoerings)opdrachten succesvol aangepast van ID ' || COALESCE(v_levid_oud, 'Leeg') || ' naar ID ' || v_levid);
END IF;
END IF;
ELSE
IF v_levid IS NULL AND v_levnaam IS NOT NULL
THEN
-- Mogelijkheid om combi prs_bedrijf_bedrijf te verwijderen, alleen als nog geen opdrachten van deze opdrachtgever.
v_result := 'Leveranciersnaam ' || v_levnaam || ' bestaat niet in Mareon';
SELECT prs_bedrijf_key
INTO v_prs_bedrijf_lev_key
FROM prs_bedrijf
WHERE prs_bedrijf_naam_upper = UPPER (v_levnaam) AND prs_bedrijf_intern IS NULL AND prs_bedrijf_verwijder IS NULL;
SELECT count(*)
INTO v_aantal
FROM mld_opdr
WHERE mld_uitvoerende_keys = v_prs_bedrijf_lev_key
AND prs_perslid_key = p_perslid_key;
IF v_aantal = 0
THEN
-- bedrijf_bedrijf kan/mag nog verwijderd worden.
DELETE prs_bedrijf_bedrijf
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
-- Tracking dat de combi is verwijderd...
fac.trackaction ('#PRSUPB',
v_prs_bedrijf_woco_key,
p_perslid_key,
NULL,
'Mareon deelnemer ' || v_levnaam || ' is als leverancier inactief gemaakt.');
ELSE
v_result := 'Mareon deelnemer ' || v_levnaam || ' heeft reeds opdrachten en kan daarom niet inactief worden gemaakt.';
SELECT 1/0 INTO l_force_error FROM dual;
END IF;
ELSE
-- v_levnaam is NULL en/of v_levid is evt. leeg
v_result := 'Naam van leverancier ontbreekt';
SELECT 1/0 INTO l_force_error FROM dual;
END IF;
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.
@@ -20548,6 +20709,7 @@ SET DEFINE OFF
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);
WHEN UPPER (v_action_code) = 'FAC_USRDATA_POSTCODEGLN' THEN v_result := mar_post_action_postcodegln (v_prs_perslid_key, v_extra_omschr, 0);
WHEN UPPER (v_action_code) = 'PRS_BEDRIJF_BEDRIJF' THEN v_result := mar_post_action_bedrijfx2 (v_prs_perslid_key, v_extra_omschr);
ELSE v_result := 'Onbekende action_code';
END CASE;
ELSE