MARX#59862: Tobias 365 - Mareon

svn path=/Mareon/trunk/; revision=45192
This commit is contained in:
Marcel Bourseau
2019-12-11 11:07:31 +00:00
parent ac75cf613a
commit e7376be1cd
2 changed files with 160 additions and 70 deletions

View File

@@ -29,7 +29,8 @@ CREATE TABLE mar_imp_action_key
(
fac_import_key NUMBER(10),
action_code VARCHAR2(255),
ref_key NUMBER(10)
ref_key NUMBER(10),
extra_omschr VARCHAR2(4000)
);
INSERT INTO fac_import_app (fac_import_app_code, fac_import_app_oms, fac_import_app_xsl, fac_functie_key, fac_import_app_charset, fac_import_app_prefix)
@@ -43,6 +44,11 @@ FROM fac_import_app
WHERE fac_import_app_code = 'ACTION_REF_KEY';
-- MARX#59862: Tobias 365 - Mareon
-- Nieuwe soort notificatie in geval van factuurfout...
INSERT INTO fac_srtnotificatie (fac_srtnotificatie_code, fac_srtnotificatie_mode, fac_srtnotificatie_oms, fac_srtnotificatie_xmlnode, fac_srtnotificatie_url, fac_srtnotificatie_groep)
VALUES ('CUST04',2, 'Factuur is niet goed bij opdrachtgever verwerkt', 'factuur', 'fin/fin_factuur.asp?fin_key=', 0);
---

View File

@@ -2388,6 +2388,7 @@ IS
-- De importvelden:
v_action_code VARCHAR2 (256);
v_ref_key VARCHAR2 (256);
v_extra_omschr VARCHAR2 (4000);
CURSOR c1
@@ -2415,8 +2416,12 @@ BEGIN
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_action_code);
-- 02 - MLD_OPDR_KEY
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_ref_key);
-- 03 - EXTRA OMSCHRIJVING
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_extra_omschr);
v_action_code := TRIM (v_action_code);
v_ref_key := TRIM (v_ref_key);
v_extra_omschr := TRIM(v_extra_omschr);
--
v_aanduiding :=
@@ -2439,8 +2444,8 @@ BEGIN
--
v_errorhint := 'Ongeldige ACTION_CODE (max. 255 tekens) of MLD_OPDR_KEY, moet positieve integer zijn';
INSERT INTO mar_imp_action_key (fac_import_key, action_code, ref_key)
VALUES(p_import_key, v_action_code, v_ref_key);
INSERT INTO mar_imp_action_key (fac_import_key, action_code, ref_key, extra_omschr)
VALUES(p_import_key, v_action_code, v_ref_key, v_extra_omschr);
END IF;
END;
END LOOP;
@@ -2500,6 +2505,7 @@ IS
v_result VARCHAR2(1024);
v_action_code VARCHAR2 (256);
v_ref_key NUMBER(10);
v_extra_omschr VARCHAR2 (4000);
v_prs_perslid_key NUMBER(10);
@@ -2523,6 +2529,7 @@ BEGIN
v_count_tot := v_count_tot + 1;
v_action_code := rec_ax.action_code;
v_ref_key := rec_ax.ref_key;
v_extra_omschr := rec_ax.extra_omschr;
v_errorhint := 'Error in mar_update_action_ref_key, import-key: ' || p_import_key || '[' || 'Action:' || v_action_code || ' - Ref-key:' || v_ref_key || '] ';
@@ -2537,6 +2544,8 @@ BEGIN
THEN
CASE
WHEN UPPER(v_action_code) = 'OPDR_POST_BIJLAGE' THEN v_result := mar_post_action_bijlages (v_ref_key, v_prs_perslid_key);
WHEN UPPER(v_action_code) = 'FIN_FACTUUR_POST_SUCCESS' THEN v_result := mar_post_factuur_verwerking (v_prs_perslid_key, v_ref_key, 1, '');
WHEN UPPER(v_action_code) = 'FIN_FACTUUR_POST_FAIL' THEN v_result := mar_post_factuur_verwerking (v_prs_perslid_key, v_ref_key, 0, v_extra_omschr);
ELSE v_result := 'Onbekende action_code';
END CASE;
END IF;
@@ -7257,13 +7266,21 @@ SELECT DISTINCT
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
AND t.fac_tracking_refkey = f.fin_factuur_key
AND t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key)
AND t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key)
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1;
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_cnt_factuur_ax (
prs_perslid_key,
@@ -7456,13 +7473,21 @@ AS
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
AND t.fac_tracking_refkey = f.fin_factuur_key
AND t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key))
AND t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key))
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key)))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key)))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1;
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_bes_factuur_ax (
prs_perslid_key,
@@ -7656,13 +7681,21 @@ SELECT DISTINCT
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
AND t.fac_tracking_refkey = f.fin_factuur_key
AND t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key))
AND t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key))
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key)))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key)))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1;
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_factuur_ax
AS
@@ -7680,16 +7713,9 @@ SELECT * from mar_v_bes_factuur_ax;
-- Als extra (niet standaard) optie, dus voor uitzonderingsgevallen waarin je wilt dat fout geimporteerde facturen toch AX in gaan), is het mogelijk
-- om de facturen met fin_factuur_statuses_key = 3 ook te exporteren (standaard status 2 en 6)
-- MARX#40934: Performance verbetering MARX
CREATE OR REPLACE VIEW mar_v_factuur_ax_export
AS
SELECT * from mar_v_factuur_ax
WHERE fin_factuur_statuses_key IN (2,6);
--(SELECT fac.safe_to_number(fac_usrdata_omschr)
--FROM fac_usrdata ud
--WHERE ud.fac_usrtab_key = 1
--AND ud.fac_usrdata_code like '$FIN_FACTUUR_STATUSES_KEY%'
--AND ud.fac_usrdata_verwijder IS NULL);
SELECT * from mar_v_factuur_ax;
CREATE OR REPLACE VIEW mar_v_factuur_tobias_export
AS
@@ -7701,6 +7727,75 @@ SELECT * from mar_v_factuur_ax
WHERE fin_factuur_statuses_key = 6;
-- MARX#59862: Tobias 365 - Mareon
-- Nieuwe functie omdat deze code vanuit verschillende plekken aangeroepen kan worden....
-- mbmb
CREATE OR REPLACE FUNCTION mar_post_factuur_verwerking (p_perslid_key IN NUMBER, p_fin_factuur_key IN NUMBER, p_fin_factuur_succes_verwerkt IN NUMBER, p_extra_omschr IN VARCHAR2)
RETURN VARCHAR2
IS
v_result VARCHAR2(1000);
v_prs_woco_close_opdracht NUMBER(10);
v_mld_opdr_key NUMBER(10);
l_omschr VARCHAR2(4000);
BEGIN
BEGIN
v_result := NULL;
IF (p_fin_factuur_succes_verwerkt = 1)
THEN
-- Factuur is door ERP opdrachtgever goed verwerkt
v_result := 'UPDATE factuur met status 7 is mislukt';
UPDATE fin_factuur
SET fin_factuur_statuses_key = 7
WHERE fin_factuur_key = p_fin_factuur_key;
v_result := 'INSERT into tracking FINVER mislukt';
fac.trackaction ('#FINVER', p_fin_factuur_key, p_perslid_key, NULL, 'Factuur is verwerkt');
v_result := 'SELECT v_prs_woco_close_opdracht mislukt';
SELECT COALESCE(MAX((SELECT prs_bedrijf_close_opdracht FROM mar_v_bedrijf_kenmerken bc WHERE bc.prs_bedrijf_key = woco.prs_bedrijf_key)), 0), MAX(o.mld_opdr_key)
INTO v_prs_woco_close_opdracht, v_mld_opdr_key
FROM fin_factuur f, mld_opdr o, mld_melding m, mar_v_woco_perslid woco
WHERE f.fin_factuur_key = p_fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.prs_perslid_key = woco.prs_perslid_key;
IF v_prs_woco_close_opdracht = 1
THEN
IF v_mld_opdr_key IS NOT NULL
THEN
-- Eerst afmelden, daarna op verwerkt.
-- Als die al afgemeld was, dan is deze call een dummy call en gebeurt verder niets.
v_result := 'mld setopdrachtstatus met 6 mislukt';
mld.setopdrachtstatus (v_mld_opdr_key, 6, p_perslid_key);
-- Als die al verwerkt was, dan is deze call een dummy call en gebeurt verder niets.
v_result := 'mld setopdrachtstatus met 7 mislukt';
mld.setopdrachtstatus (v_mld_opdr_key, 7, p_perslid_key);
END IF;
END IF;
ELSE
-- Factuur is door ERP opdrachtgever NIET (goed) verwerkt
IF fac.gettrackingdate('CUST04', p_fin_factuur_key) IS NULL
THEN
-- Alleen eenmalig een CUST04 toevoegen is voldoende, we willen de tracking niet onnodig volbouwen)
l_omschr := SUBSTR('Factuur kan NIET verwerkt worden: ' || p_extra_omschr, 1, 2048);
fac.trackaction ('#CUST04', p_fin_factuur_key, p_perslid_key, NULL, l_omschr);
END IF;
END IF;
COMMIT;
RETURN NULL;
EXCEPTION
WHEN OTHERS
THEN
RETURN v_result;
END;
END;
/
-- Algemeen: sync status...
CREATE OR REPLACE PROCEDURE mar_import_ax_sync (
p_import_key IN NUMBER
@@ -7876,6 +7971,11 @@ BEGIN
IF (v_count_tot = 0)
THEN
v_count_tot := v_count_tot + 1;
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
-- v_ax_sync_mode heeft de volgende mogelijke waarden:
-- 0 = start van de sync
-- 1 = einde van de sync (AX2009/2012/REMS/Facilitor)
-- 2 = einde van de sync (AX365)
v_ax_sync_mode := rec_ax.sync_mode;
IF (v_ax_sync_mode IS NOT NULL)
THEN
@@ -7903,40 +8003,20 @@ BEGIN
AND fac_usrdata_verwijder IS NULL;
END IF;
-- EINDE SYNC
IF (v_ax_sync_mode = '1')
THEN
-- Einde sync
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
-- voor de ERP's (AX2009/2012/REMS/Facilitor) die sync-mode met 1 aanroepen, worden alle facturen conform cursor c_exporteerde_facturen onvoorwaardelijk op verwerkt gezet....
-- voor de ERP's (AX365) die sync mode met 2 aanroepen, wordt deze stap niet hier gedaan, maar in de Mareon sync zelf geregeld, omdat dit afhankelijk is gemaakt van de response uit AX365.
-- In cursor c_exporteerde_facturen zitten ook eventueel de records van andere woco's...
FOR rec_fac IN c_exporteerde_facturen(v_prs_perslid_key)
LOOP
BEGIN
v_errorhint := 'UPDATE factuur met status 7 mislukt';
UPDATE fin_factuur
SET fin_factuur_statuses_key = 7
WHERE fin_factuur_key = rec_fac.fin_factuur_key;
v_errorhint := 'INSERT into tracking FINVER mislukt';
-- Verplaatsen van INSERT hierboven die in 1x een insert van alle regels doet, ivm table MARX.FAC_TRACKING is mutating, trigger/function may not see it
INSERT INTO fac_tracking (fac_tracking_refkey, fac_srtnotificatie_key, prs_perslid_key)
SELECT rec_fac.fin_factuur_key, (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'FINVER'), v_prs_perslid_key
FROM dual;
IF rec_fac.prs_woco_close_opdracht = 1
THEN
IF rec_fac.mld_opdr_key IS NOT NULL
THEN
-- Eerst afmelden, daarna op verwerkt.
-- Als die al afgemeld was, dan is deze call een dummy call en gebeurt verder niets.
v_errorhint := 'mld setopdrachtstatus met 6 mislukt';
mld.setopdrachtstatus (rec_fac.mld_opdr_key, 6, v_prs_perslid_key);
-- Als die al verwerkt was, dan is deze call een dummy call en gebeurt verder niets.
v_errorhint := 'mld setopdrachtstatus met 7 mislukt';
mld.setopdrachtstatus (rec_fac.mld_opdr_key, 7, v_prs_perslid_key);
END IF;
END IF;
v_errorhint := mar_post_factuur_verwerking (v_prs_perslid_key, rec_fac.fin_factuur_key, 1, '');
EXCEPTION
WHEN OTHERS
THEN
@@ -7956,7 +8036,11 @@ BEGIN
COMMIT;
END;
END LOOP;
END IF;
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365).
-- Voor alle ERP's (mode =1 of mode = 2) moet onderstaande volgen...
IF ((v_ax_sync_mode = '1') OR (v_ax_sync_mode = '2'))
THEN
v_errorhint := 'SYNC DATE LASTTIME mislukt';
UPDATE fac_usrdata ud1
SET ud1.fac_usrdata_omschr = (SELECT to_char(sync_date_now,'DD-MM-YYYY HH24:MI:SS') FROM mar_v_sync_ax s WHERE s.prs_perslid_key = v_prs_perslid_key)
@@ -12292,7 +12376,7 @@ AND l_prs_bedrijf_key = flex2.prs_bedrijf_key;
-----------------------------------------------
BEGIN fac.registercustversion('MARX', 16); END;
BEGIN fac.registercustversion('MARX', 17); END;
/
------ payload end ------