21397 lines
1019 KiB
PL/PgSQL
21397 lines
1019 KiB
PL/PgSQL
--
|
||
-- $Id$
|
||
--
|
||
-- Script containing customer specific sql statements for the FACILITOR database
|
||
-- 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'
|
||
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
|
||
-- (dit in tegenstelling tot sample_xxxx.sql)
|
||
|
||
DEFINE thisfile = 'MAREON.SQL'
|
||
DEFINE dbuser = '^MARX'
|
||
|
||
SET ECHO ON
|
||
SET DEFINE ON
|
||
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
|
||
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
|
||
WHENEVER SQLERROR CONTINUE;
|
||
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
|
||
SPOOL &fcltlogfile
|
||
WHENEVER SQLERROR EXIT;
|
||
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
|
||
WHENEVER SQLERROR CONTINUE;
|
||
---------------------------------------
|
||
PROMPT &fcltcusttxt
|
||
---------------------------------------
|
||
SET DEFINE OFF
|
||
|
||
------ payload begin ------
|
||
|
||
|
||
-- MARX#83874 Koppeling met Zig/Casix: toepassing van timezones
|
||
-- p_datumtime is ISO datum in 2 mogelijke formaten
|
||
-- 1. Zulu time, in formaat: YYYY-MM-DDThh:mi:ss.000Z (of YYYY-MM-DDThh:mi:ssZ of YYYY-MM-DDThh:miZ), b.v. 2024-05-23T21:57:59Z
|
||
-- 2. UTC time, in formaat: YYYY-MM-DDThh:mi:ss+02:00, b.v. 2024-05-23T21:57:59+02:00
|
||
-- 3. En anders wordt gewoon de localtimeals DATE teruggegeven.
|
||
CREATE OR REPLACE FUNCTION marx_get_local_time (p_datumtime VARCHAR2)
|
||
RETURN DATE
|
||
AS
|
||
v_date DATE;
|
||
v_offset VARCHAR(100);
|
||
l_datumtime VARCHAR(100);
|
||
c_minlen_utc NUMBER(3);
|
||
BEGIN
|
||
c_minlen_utc := 20;
|
||
IF LENGTH(p_datumtime) >= c_minlen_utc
|
||
THEN
|
||
-- With offset
|
||
IF UPPER(SUBSTR(p_datumtime, LENGTH(p_datumtime))) = 'Z'
|
||
THEN
|
||
-- Zulu time
|
||
v_offset := '+00:00';
|
||
l_datumtime := SUBSTR(p_datumtime, 1, LENGTH(p_datumtime) - 1);
|
||
ELSE
|
||
IF INSTR(SUBSTR(p_datumtime,c_minlen_utc),'+') > 0 OR INSTR(SUBSTR(p_datumtime,c_minlen_utc),'-') > 0
|
||
THEN
|
||
-- UTC +02:00 time, or -02:00
|
||
v_offset := SUBSTR(p_datumtime, LENGTH(p_datumtime)-5);
|
||
l_datumtime := SUBSTR(p_datumtime, 1, LENGTH(p_datumtime) - 5 - 1);
|
||
ELSE
|
||
-- Local time
|
||
v_offset := NULL;
|
||
l_datumtime := p_datumtime;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Is l_datumtime nu van het formaat 'YYYY-MM-DDTHH24:MI:SS', of zitten hier nog de milliseconden in, dus formaat YYYY-MM-DDTHH24:MI:SS.sssss dan strippen we die eruit...
|
||
IF INSTR(l_datumtime, '.') > 0
|
||
THEN
|
||
l_datumtime:=SUBSTR(l_datumtime,1, INSTR(l_datumtime, '.') - 1);
|
||
END IF;
|
||
|
||
IF v_offset IS NOT NULL
|
||
THEN
|
||
SELECT CAST (
|
||
FROM_TZ (
|
||
CAST (
|
||
TO_DATE (REPLACE (l_datumtime, 'T', ' '),
|
||
'YYYY-MM-DD HH24:MI:SS') AS TIMESTAMP), v_offset)
|
||
AT TIME ZONE (SELECT fac.getsetting('fac_server_timezone') FROM DUAL)
|
||
AS DATE)
|
||
INTO v_date
|
||
FROM DUAL;
|
||
ELSE
|
||
SELECT TO_DATE(REPLACE(l_datumtime ,'T',' '), 'YYYY-MM-DD HH24:MI:SS')
|
||
INTO v_date
|
||
FROM DUAL;
|
||
END IF;
|
||
ELSE
|
||
SELECT TO_DATE(REPLACE(p_datumtime ,'T',' '), 'YYYY-MM-DD HH24:MI:SS')
|
||
INTO v_date
|
||
FROM DUAL;
|
||
END IF;
|
||
RETURN v_date;
|
||
END;
|
||
/
|
||
|
||
-- Formaat p_datumtime wordt verwacht te zijn: YYYY-MM-DD hh24:mi:ss als localtime, resultaat is string met 'Z' op eind.
|
||
-- Ook toegestaan is formaat met T, dus YYYY-MM-DDThh24:mi:ss
|
||
CREATE OR REPLACE FUNCTION marx_get_zulu_time (p_datumtime VARCHAR2)
|
||
RETURN VARCHAR
|
||
AS
|
||
v_date_str VARCHAR(100);
|
||
BEGIN
|
||
SELECT TO_CHAR(CAST(TO_DATE(REPLACE(p_datumtime,'T',' '),'YYYY-MM-DD hh24:mi:ss') AS TIMESTAMP) AT TIME ZONE 'GMT', 'YYYY-MM-DD hh24:mi:ss') || 'Z'
|
||
INTO v_date_str
|
||
FROM dual;
|
||
RETURN v_date_str;
|
||
END;
|
||
/
|
||
|
||
-- MARX#85966 Authentication in sommige subfunctions van API ACTION_REF_KEY
|
||
-- Mag persoon p_prs_perslid_key de opdracht p_mld_opdr_key muteren/aanpassen?
|
||
-- persoon kan van woco zijn, of van leverancier (lev).
|
||
-- Met waarde p_mode kun je sturen of:
|
||
-- 1 = persoon moet van woco zijn (default)
|
||
-- 2 = persoon moet van lev zijn
|
||
-- 3 = persoon mag beide zijn (woco of lev)
|
||
CREATE OR REPLACE FUNCTION marx_prs_canchange_mldopdr (p_prs_perslid_key IN NUMBER, p_mld_opdr_key IN NUMBER, p_mode IN NUMBER DEFAULT 1)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER(1);
|
||
BEGIN
|
||
|
||
v_result := 0;
|
||
-- Eerst: is persoon woco of lev?
|
||
-- Als woco, dan moet de perslid geregistereerd staan als 'owner' of maker van de opdracht.
|
||
-- Als lev, dan moet de perslid van de lev zijn die staat geregistereerd staan als 'uitvoerder' van de opdracht.
|
||
|
||
-- Eerst ingeval perslid WOCO zou zijn, d.w.z. in mar_v_woco_perslid incl. APIKEY(!) aanwezig is
|
||
|
||
IF BITAND (p_mode,1) = 1
|
||
THEN
|
||
-- Check Woco
|
||
SELECT LEAST(count(*),1)
|
||
INTO v_result
|
||
FROM mld_opdr o
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND o.prs_perslid_key = p_prs_perslid_key
|
||
AND EXISTS (SELECT 'x' from mar_v_woco_perslid woco
|
||
WHERE woco.prs_perslid_key = p_prs_perslid_key
|
||
AND prs_perslid_apikey IS NOT NULL);
|
||
END IF;
|
||
|
||
-- Daarna, als v_result nog 0 is, gaan we kijken of perslid LEV zou zijn, d.w.z. in mar_v_leverancier_api_perslid aanwezig is
|
||
IF v_result = 0 AND BITAND (p_mode,2) = 2
|
||
THEN
|
||
-- Check Lev
|
||
SELECT LEAST(count(*),1)
|
||
INTO v_result
|
||
FROM mld_opdr o
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND EXISTS (SELECT 'x' from mar_v_leverancier_api_perslid lev
|
||
WHERE lev.prs_perslid_key = p_prs_perslid_key
|
||
AND lev.prs_bedrijf_key = o.mld_uitvoerende_keys);
|
||
END IF;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#85966 Authentication in sommige subfunctions van API ACTION_REF_KEY
|
||
-- Mag persoon p_prs_perslid_key de factuur p_fin_factuur_key muteren/aanpassen?
|
||
-- persoon kan van woco zijn, of van leverancier (lev).
|
||
-- Met waarde p_mode kun je sturen of:
|
||
-- 1 = persoon moet van woco zijn (default)
|
||
-- 2 = persoon moet van lev zijn
|
||
-- 3 = persoon mag beide zijn (woco of lev)
|
||
-- PS. Alleen nog p_mode = 1 wordt ondersteund (dus voor woco), nog niet voor lev (omdat dit nog niet gevraagd wordt).
|
||
CREATE OR REPLACE FUNCTION marx_prs_canchange_factuur (p_prs_perslid_key IN NUMBER, p_fin_factuur_key IN NUMBER, p_mode IN NUMBER DEFAULT 1)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER(1);
|
||
BEGIN
|
||
v_result := 0;
|
||
IF p_prs_perslid_key = marx_get_woco_perslid_factuur (p_fin_factuur_key)
|
||
THEN
|
||
v_result := 1;
|
||
END IF;
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#55736: MovinU: Missende opdrachtregels - concat moet binnen 4000 blijven!
|
||
CREATE OR REPLACE FUNCTION safe_concat (p_str1 IN VARCHAR2, p_str2 IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_result VARCHAR2 (4000);
|
||
BEGIN
|
||
v_result := p_str1 || SUBSTR (p_str2, 1, 4000 - LENGTH (p_str1));
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278)
|
||
CREATE OR REPLACE PROCEDURE mld_opdr_bal_bij_lev (p_mld_opdr_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- Bitje 1 (actie opdrachtgever) halen we eraf (dwz als bitje 1 AAN staat)
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_actiecode = mld_opdr_actiecode - 1
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND BITAND(mld_opdr_actiecode, 1) = 1;
|
||
|
||
-- Bitje 4 (actie leverancier) zetten we erop (dwz als bitje 4 UIT staat)
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_actiecode = mld_opdr_actiecode + 4
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND NOT BITAND(mld_opdr_actiecode, 4) = 4;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mld_opdr_bal_bij_woco (p_mld_opdr_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- Bitje 1 (actie opdrachtgever) zetten we erop (dwz als bitje 1 UIT staat)
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_actiecode = mld_opdr_actiecode + 1
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND NOT BITAND(mld_opdr_actiecode, 1) = 1;
|
||
|
||
-- Bitje 4 (actie leverancier) halen we eraf (dwz als bitje 4 AAN staat)
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_actiecode = mld_opdr_actiecode - 4
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND BITAND(mld_opdr_actiecode, 4) = 4;
|
||
END;
|
||
/
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
-----------------------
|
||
-----------------------
|
||
----------------------- Webservices voor AX (via adapter AxFacilitor.js)
|
||
-----------------------
|
||
-----------------------
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- Alleen de woco-bedrijven, oftewel de opdrachtgevers
|
||
-- MARX#60941: Twinq koppeling voor statusberichten naar Mareon, terugweg vereist een dummy VvE beheerder (account/apikey) die vanuit Twinq voor alle VvE's vanuit 1 opdrachtgever aangeroepen kan worden
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdrachtgevers
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam
|
||
FROM prs_bedrijf b
|
||
WHERE b.prs_bedrijf_intern = 1 AND b.prs_bedrijf_verwijder IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_vvebeheerders
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam
|
||
FROM prs_bedrijf b
|
||
WHERE b.prs_bedrijf_intern IS NULL
|
||
AND b.prs_bedrijf_verwijder IS NULL
|
||
AND ( EXISTS
|
||
(SELECT 'x'
|
||
FROM prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key = 46
|
||
AND kl.prs_kenmerklink_niveau = 'B'
|
||
AND kl.prs_kenmerklink_verwijder IS NULL
|
||
AND kl.prs_link_key = b.prs_bedrijf_key)
|
||
OR EXISTS
|
||
(SELECT 'x'
|
||
FROM prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key = 47
|
||
AND kl.prs_kenmerklink_niveau = 'B'
|
||
AND kl.prs_kenmerklink_verwijder IS NULL
|
||
AND kl.prs_link_key = b.prs_bedrijf_key));
|
||
|
||
CREATE OR REPLACE VIEW mar_v_dummy_vvebeheerders_woco
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_woco_key,
|
||
prs_bedrijf_woco_naam
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
woco.prs_bedrijf_key,
|
||
woco.prs_bedrijf_naam
|
||
FROM prs_bedrijf b, prs_kenmerklink kl, prs_bedrijf woco
|
||
WHERE b.prs_bedrijf_intern IS NULL
|
||
AND b.prs_bedrijf_verwijder IS NULL
|
||
AND kl.prs_kenmerk_key = 47
|
||
AND kl.prs_kenmerklink_niveau = 'B'
|
||
AND kl.prs_kenmerklink_verwijder IS NULL
|
||
AND kl.prs_link_key = b.prs_bedrijf_key
|
||
AND woco.prs_bedrijf_key = kl.prs_kenmerklink_waarde;
|
||
|
||
-- De leverancier-personen (perslid via contactpersoon naar externe bedrijven)
|
||
-- We sluiten hier de contactpersonen (perslid-records) uit die contractant-functie hebben, m.a.w. alleen de perslid-records van soort 'Opdrachtnemer'.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_all_leverancier_perslid
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_bezoek_adres,
|
||
prs_bedrijf_bezoek_postcode,
|
||
prs_bedrijf_bezoek_plaats,
|
||
prs_leverancier_nr,
|
||
prs_overeenkomst_nr,
|
||
prs_perslid_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_apikey,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_email,
|
||
prs_srtperslid_key
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
b.prs_bedrijf_bezoek_adres,
|
||
b.prs_bedrijf_bezoek_postcode,
|
||
b.prs_bedrijf_bezoek_plaats,
|
||
b.prs_leverancier_nr,
|
||
b.prs_overeenkomst_nr,
|
||
p.prs_perslid_key,
|
||
p.prs_perslid_naam,
|
||
p.prs_perslid_apikey,
|
||
p.prs_perslid_oslogin,
|
||
p.prs_perslid_email,
|
||
p.prs_srtperslid_key
|
||
FROM prs_bedrijf b, prs_contactpersoon cp, prs_perslid p
|
||
WHERE b.prs_bedrijf_key = cp.prs_bedrijf_key
|
||
AND cp.prs_perslid_key = p.prs_perslid_key
|
||
AND p.prs_perslid_verwijder IS NULL
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND b.prs_bedrijf_intern IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_leverancier_perslid
|
||
AS
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_bezoek_adres,
|
||
prs_bedrijf_bezoek_postcode,
|
||
prs_bedrijf_bezoek_plaats,
|
||
prs_leverancier_nr,
|
||
prs_overeenkomst_nr,
|
||
prs_perslid_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_apikey,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_email
|
||
FROM mar_v_all_leverancier_perslid
|
||
WHERE prs_srtperslid_key <> 2;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_leverancier_api_perslid
|
||
AS
|
||
SELECT *
|
||
FROM mar_v_leverancier_perslid
|
||
WHERE prs_perslid_apikey IS NOT NULL;
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_contractant_perslid
|
||
AS
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_bezoek_adres,
|
||
prs_bedrijf_bezoek_postcode,
|
||
prs_bedrijf_bezoek_plaats,
|
||
prs_leverancier_nr,
|
||
prs_overeenkomst_nr,
|
||
prs_perslid_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_apikey,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_email
|
||
FROM mar_v_all_leverancier_perslid
|
||
WHERE prs_srtperslid_key = 2;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_contractant_api_perslid
|
||
AS
|
||
SELECT *
|
||
FROM mar_v_contractant_perslid
|
||
WHERE prs_perslid_apikey IS NOT NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_woco_perslid
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_bezoek_adres,
|
||
prs_bedrijf_bezoek_postcode,
|
||
prs_bedrijf_bezoek_plaats,
|
||
prs_leverancier_nr,
|
||
prs_overeenkomst_nr,
|
||
prs_perslid_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_apikey,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_email
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
b.prs_bedrijf_bezoek_adres,
|
||
b.prs_bedrijf_bezoek_postcode,
|
||
b.prs_bedrijf_bezoek_plaats,
|
||
b.prs_leverancier_nr,
|
||
b.prs_overeenkomst_nr,
|
||
p.prs_perslid_key,
|
||
p.prs_perslid_naam,
|
||
p.prs_perslid_apikey,
|
||
p.prs_perslid_oslogin,
|
||
p.prs_perslid_email
|
||
FROM prs_bedrijf b, prs_afdeling a, prs_perslid p
|
||
WHERE b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND a.prs_afdeling_verwijder IS NULL
|
||
AND b.prs_bedrijf_intern = 1
|
||
AND prs_srtperslid_key IN (221, 222)
|
||
AND p.prs_perslid_verwijder IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_perslid
|
||
AS
|
||
SELECT * FROM mar_v_woco_perslid
|
||
UNION
|
||
SELECT * FROM mar_v_leverancier_perslid
|
||
UNION
|
||
SELECT * FROM mar_v_contractant_perslid;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_std_refusecode
|
||
(
|
||
std_weigercode
|
||
)
|
||
AS
|
||
SELECT fac_usrdata_omschr
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper = UPPER ('$MLD_OPDR_STD_REFUSECODE')
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_sync_ax_lasttime
|
||
(
|
||
prs_perslid_key,
|
||
sync_date_lasttime,
|
||
sync_trackkey_lasttime
|
||
)
|
||
AS
|
||
SELECT fac.safe_to_number (SUBSTR (ud.fac_usrdata_code, 1 + LENGTH ('$SYNC_DATE_LASTTIME_'))),
|
||
fac.safe_to_date (ud.fac_usrdata_omschr, 'DD-MM-YYYY HH24:MI:SS'),
|
||
fac.safe_to_number (ud2.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud, fac_usrdata ud2
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper LIKE UPPER ('$SYNC_DATE_LASTTIME%')
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND ud2.fac_usrtab_key = 1
|
||
AND ud2.fac_usrdata_upper LIKE UPPER ('$SYNC_TRACKKEY_LAST%')
|
||
AND ud2.fac_usrdata_verwijder IS NULL
|
||
AND SUBSTR (ud.fac_usrdata_upper, 1 + LENGTH ('$SYNC_DATE_LASTTIME_')) =
|
||
SUBSTR (ud2.fac_usrdata_upper, 1 + LENGTH ('$SYNC_TRACKKEY_LAST_'));
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_sync_ax_now
|
||
(
|
||
prs_perslid_key,
|
||
sync_date_now,
|
||
sync_trackkey_now
|
||
)
|
||
AS
|
||
SELECT fac.safe_to_number (SUBSTR (ud.fac_usrdata_code, 1 + LENGTH ('$SYNC_DATE_NOW_'))),
|
||
fac.safe_to_date (ud.fac_usrdata_omschr, 'DD-MM-YYYY HH24:MI:SS'),
|
||
fac.safe_to_number (ud2.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud, fac_usrdata ud2
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper LIKE UPPER ('$SYNC_DATE_NOW%')
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND ud2.fac_usrdata_upper LIKE UPPER ('$SYNC_TRACKKEY_NOW%')
|
||
AND ud2.fac_usrdata_verwijder IS NULL
|
||
AND SUBSTR (ud.fac_usrdata_upper, 1 + LENGTH ('$SYNC_DATE_NOW_')) =
|
||
SUBSTR (ud2.fac_usrdata_upper, 1 + LENGTH ('$SYNC_TRACKKEY_NOW_'));
|
||
|
||
CREATE OR REPLACE VIEW mar_v_sync_ax
|
||
(
|
||
prs_perslid_key,
|
||
sync_date_lasttime,
|
||
sync_date_now,
|
||
sync_trackkey_lasttime,
|
||
sync_trackkey_now
|
||
)
|
||
AS
|
||
SELECT n.prs_perslid_key,
|
||
lt.sync_date_lasttime,
|
||
n.sync_date_now,
|
||
lt.sync_trackkey_lasttime,
|
||
n.sync_trackkey_now
|
||
FROM mar_v_sync_ax_lasttime lt, mar_v_sync_ax_now n
|
||
WHERE COALESCE (lt.prs_perslid_key, -1) = COALESCE (n.prs_perslid_key, -1);
|
||
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION get_woco_api_user_from_gln (p_gln IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
p_api_prs_perslid_key NUMBER(10);
|
||
BEGIN
|
||
p_api_prs_perslid_key := NULL;
|
||
BEGIN
|
||
SELECT prs_perslid_key
|
||
INTO p_api_prs_perslid_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_leverancier_nr = p_gln
|
||
AND prs_perslid_apikey IS NOT NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_api_prs_perslid_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_api_prs_perslid_key := NULL;
|
||
END;
|
||
RETURN p_api_prs_perslid_key;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE FUNCTION get_lev_api_user_from_gln (p_gln IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
p_api_prs_perslid_key NUMBER(10);
|
||
BEGIN
|
||
p_api_prs_perslid_key := NULL;
|
||
BEGIN
|
||
SELECT prs_perslid_key
|
||
INTO p_api_prs_perslid_key
|
||
FROM mar_v_leverancier_api_perslid
|
||
WHERE prs_leverancier_nr = p_gln;
|
||
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_api_prs_perslid_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_api_prs_perslid_key := NULL;
|
||
END;
|
||
RETURN p_api_prs_perslid_key;
|
||
END;
|
||
/
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- 3a View tbv websebservice voor AX/Tobias, zowel de leveranciers bestaande uit uitvoerenden (mld) en groothandelaren (bes) maar niet de contractanten!
|
||
|
||
CREATE OR REPLACE VIEW mar_v_woco_x_lev_and_grooth
|
||
(
|
||
prs_bedrijf_bedrijf_key,
|
||
w_prs_bedrijf_key,
|
||
w_prs_bedrijf_naam,
|
||
w_prs_leverancier_nr,
|
||
w_prs_overeenkomst_nr,
|
||
w_prs_perslid_key,
|
||
w_prs_perslid_naam,
|
||
w_prs_perslid_apikey,
|
||
w_prs_perslid_oslogin,
|
||
l_prs_bedrijf_key,
|
||
l_prs_bedrijf_naam,
|
||
l_prs_leverancier_nr,
|
||
l_prs_overeenkomst_nr,
|
||
l_prs_perslid_key,
|
||
l_prs_perslid_naam,
|
||
l_prs_perslid_apikey,
|
||
l_prs_perslid_oslogin,
|
||
l_ax_supplier_id,
|
||
waarde_code,
|
||
prs_bedrijf_bedrijf_status,
|
||
prs_bedrijf_bedrijf_chargemode,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bedrijf_account2
|
||
)
|
||
AS
|
||
SELECT bb.prs_bedrijf_bedrijf_key,
|
||
w.prs_bedrijf_key,
|
||
w.prs_bedrijf_naam,
|
||
w.prs_leverancier_nr,
|
||
COALESCE (w.prs_overeenkomst_nr, '1'),
|
||
w.prs_perslid_key,
|
||
w.prs_perslid_naam,
|
||
w.prs_perslid_apikey,
|
||
w.prs_perslid_oslogin,
|
||
l.prs_bedrijf_key,
|
||
l.prs_bedrijf_naam,
|
||
l.prs_leverancier_nr,
|
||
l.prs_overeenkomst_nr,
|
||
l.prs_perslid_key,
|
||
l.prs_perslid_naam,
|
||
l.prs_perslid_apikey,
|
||
l.prs_perslid_oslogin,
|
||
bb.prs_bedrijf_externid2,
|
||
'$WOCO_' || w.prs_bedrijf_key || '_LEV_' || l.prs_bedrijf_key,
|
||
bb.prs_bedrijf_bedrijf_status,
|
||
bb.prs_bedrijf_bedrijf_chargemode,
|
||
btw.fin_btwtabelwaarde_code,
|
||
bb.prs_bedrijf_bedrijf_g_pct,
|
||
bb.prs_bedrijf_bedrijf_account1,
|
||
bb.prs_bedrijf_bedrijf_account2
|
||
FROM prs_bedrijf_bedrijf bb,
|
||
mar_v_woco_perslid w,
|
||
mar_v_leverancier_api_perslid l,
|
||
fin_btwtabelwaarde btw
|
||
WHERE w.prs_perslid_apikey IS NOT NULL
|
||
AND w.prs_bedrijf_key = bb.prs_bedrijf_key1
|
||
AND l.prs_bedrijf_key = bb.prs_bedrijf_key2
|
||
AND bb.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key(+);
|
||
|
||
-- Dit zijn alleen de uitvoerders-leveranciers (mld)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_woco_x_lev
|
||
AS
|
||
SELECT *
|
||
FROM mar_v_woco_x_lev_and_grooth
|
||
WHERE l_ax_supplier_id IS NOT NULL;
|
||
|
||
-- Dit zijn alleen de groothandel-leveranciers (bes)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_woco_x_grooth
|
||
AS
|
||
SELECT *
|
||
FROM mar_v_woco_x_lev_and_grooth
|
||
WHERE l_ax_supplier_id IS NULL;
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_woco_x_contractant
|
||
(
|
||
prs_bedrijf_bedrijf_key,
|
||
w_prs_bedrijf_key,
|
||
w_prs_bedrijf_naam,
|
||
w_prs_leverancier_nr,
|
||
w_prs_overeenkomst_nr,
|
||
w_prs_perslid_key,
|
||
w_prs_perslid_naam,
|
||
w_prs_perslid_apikey,
|
||
w_prs_perslid_oslogin,
|
||
l_prs_bedrijf_key,
|
||
l_prs_bedrijf_naam,
|
||
l_prs_leverancier_nr,
|
||
l_prs_overeenkomst_nr,
|
||
l_prs_perslid_key,
|
||
l_prs_perslid_naam,
|
||
l_prs_perslid_apikey,
|
||
l_prs_perslid_oslogin,
|
||
l_ax_supplier_id,
|
||
waarde_code,
|
||
prs_bedrijf_bedrijf_status,
|
||
prs_bedrijf_bedrijf_chargemode,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bedrijf_account2
|
||
)
|
||
AS
|
||
SELECT bb.prs_bedrijf_bedrijf_key,
|
||
w.prs_bedrijf_key,
|
||
w.prs_bedrijf_naam,
|
||
w.prs_leverancier_nr,
|
||
COALESCE (w.prs_overeenkomst_nr, '1'),
|
||
w.prs_perslid_key,
|
||
w.prs_perslid_naam,
|
||
w.prs_perslid_apikey,
|
||
w.prs_perslid_oslogin,
|
||
l.prs_bedrijf_key,
|
||
l.prs_bedrijf_naam,
|
||
l.prs_leverancier_nr,
|
||
l.prs_overeenkomst_nr,
|
||
l.prs_perslid_key,
|
||
l.prs_perslid_naam,
|
||
l.prs_perslid_apikey,
|
||
l.prs_perslid_oslogin,
|
||
bb.prs_bedrijf_externid2,
|
||
'$WOCO_' || w.prs_bedrijf_key || '_LEV_' || l.prs_bedrijf_key,
|
||
bb.prs_bedrijf_bedrijf_status,
|
||
bb.prs_bedrijf_bedrijf_chargemode,
|
||
btw.fin_btwtabelwaarde_code,
|
||
bb.prs_bedrijf_bedrijf_g_pct,
|
||
bb.prs_bedrijf_bedrijf_account1,
|
||
bb.prs_bedrijf_bedrijf_account2
|
||
FROM prs_bedrijf_bedrijf bb,
|
||
mar_v_woco_perslid w,
|
||
mar_v_contractant_api_perslid l,
|
||
fin_btwtabelwaarde btw
|
||
WHERE w.prs_perslid_apikey IS NOT NULL
|
||
AND w.prs_bedrijf_key = bb.prs_bedrijf_key1
|
||
AND l.prs_bedrijf_key = bb.prs_bedrijf_key2
|
||
AND bb.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key(+);
|
||
|
||
-- MARX#80492 Uitbreiding / aanpassing Rapport: Woco x Leverancier
|
||
-- Nieuwe kolom ERP_systeem_woco (en ERP_systeem renamed naar ERP_systeem_lev)
|
||
-- En daarnaast 5 nieuwe leveranciers-kolommen: prs_bedrijfadres_type, prs_bedrijfadres_url, prs_bedrijfadres_xsl, messageservice, dico
|
||
CREATE OR REPLACE VIEW mar_v_rap_woco_x_lev
|
||
(
|
||
fclt_f_woco,
|
||
woco_externe_id,
|
||
woco_login,
|
||
woco_apikey,
|
||
sync_startdate,
|
||
datum_sync,
|
||
trackkey_sync,
|
||
l_prs_bedrijf_key,
|
||
fclt_f_leverancier,
|
||
leverancier_login,
|
||
leverancier_apikey,
|
||
fclt_f_leverancier_externe_id,
|
||
waarde_code,
|
||
fclt_f_relatie,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
fac_usrdata_volgnr,
|
||
prs_bedrijf_bedrijf_charge_str,
|
||
ERP_systeem_woco,
|
||
ERP_systeem_lev,
|
||
prs_bedrijfadres_type_lev,
|
||
prs_bedrijfadres_url_lev,
|
||
prs_bedrijfadres_xsl_lev,
|
||
messageservice_lev,
|
||
dico_lev
|
||
)
|
||
AS
|
||
SELECT w_prs_bedrijf_naam,
|
||
w_prs_overeenkomst_nr,
|
||
w_prs_perslid_oslogin,
|
||
w_prs_perslid_apikey,
|
||
TO_CHAR (sync_date_now, 'DD-MM-YYYY HH24:MI'),
|
||
TO_CHAR (sync_date_lasttime, 'DD-MM-YYYY HH24:MI'),
|
||
sync_trackkey_lasttime || '/' || (SELECT MAX (fac_tracking_key) FROM fac_tracking),
|
||
l_prs_bedrijf_key,
|
||
l_prs_bedrijf_naam,
|
||
l_prs_perslid_oslogin,
|
||
l_prs_perslid_apikey,
|
||
l_ax_supplier_id,
|
||
waarde_code,
|
||
'Ja',
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
prs_bedrijf_bedrijf_status,
|
||
SUBSTR (
|
||
DECODE (BITAND (prs_bedrijf_bedrijf_chargemode, 1), 1, '-Onbekend', '')
|
||
|| DECODE (BITAND (prs_bedrijf_bedrijf_chargemode, 2), 2, '-REP', '')
|
||
|| DECODE (BITAND (prs_bedrijf_bedrijf_chargemode, 4), 4, '-MUT', '')
|
||
|| DECODE (BITAND (prs_bedrijf_bedrijf_chargemode, 8), 8, '-INS', ''),
|
||
2),
|
||
ud_woco.fac_usrdata_omschr,
|
||
ud_lev.fac_usrdata_omschr,
|
||
DECODE(ba.prs_bedrijfadres_type, 'O','Opdracht', 'V', 'Planning', 'B', 'Bestelling', 'C', 'Contract', 'Overig'),
|
||
ba.prs_bedrijfadres_url,
|
||
ba.prs_bedrijfadres_xsl,
|
||
CASE
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%ETIM2.4%' THEN 'MessageService 2.4'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%ETIM3.0%' THEN 'MessageService 3.0'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%ETIM3.1%' THEN 'MessageService 3.1'
|
||
END,
|
||
CASE
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%SALES005_1.0%' THEN 'SALES005 v1.0'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%SALES005%' THEN 'SALES005 beta'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%INSBOU001%' THEN 'SALES005 draft'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%CONNECTIT_2%' THEN 'VIADATA CONNECTIT v2'
|
||
WHEN UPPER(ba.prs_bedrijfadres_plugin) LIKE '%ACTO%' THEN 'ACTO JSON'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%INSBOU003%' THEN 'INSBOU003'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%INSBOU004%' THEN 'INSBOU004'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%INSBOU005%' THEN 'SALES005 v1.0'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%MARX.XSL%' THEN 'Mareon Opdrachtbon'
|
||
WHEN UPPER(ba.prs_bedrijfadres_xsl) LIKE '%SIDB%' THEN 'SALES005 draft'
|
||
END
|
||
FROM (SELECT * FROM mar_v_woco_x_lev_and_grooth UNION ALL SELECT * FROM mar_v_woco_x_contractant),
|
||
mar_v_sync_ax s,
|
||
prs_kenmerklink kl_woco,
|
||
prs_kenmerklink kl_lev,
|
||
fac_usrdata ud_woco,
|
||
fac_usrdata ud_lev,
|
||
prs_bedrijfadres ba
|
||
WHERE s.prs_perslid_key = w_prs_perslid_key
|
||
AND l_prs_bedrijf_key = kl_lev.prs_link_key(+)
|
||
AND kl_lev.prs_kenmerk_key(+) = 29
|
||
AND kl_lev.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl_lev.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND ud_lev.fac_usrdata_key(+) = fac.safe_to_number (kl_lev.prs_kenmerklink_waarde)
|
||
AND w_prs_bedrijf_key = kl_woco.prs_link_key(+)
|
||
AND kl_woco.prs_kenmerk_key(+) = 29
|
||
AND kl_woco.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl_woco.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND ud_woco.fac_usrdata_key(+) = fac.safe_to_number (kl_woco.prs_kenmerklink_waarde)
|
||
AND ba.prs_bedrijf_key(+) = l_prs_bedrijf_key;
|
||
|
||
|
||
|
||
-- FSN#33332
|
||
-- mar_delta_connecttime is de instelling in $System tabel in seconden hoeveel minimaal een vorige connectie geleden moet zijn opdat een nieuwe connectie allowed is.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_min_adapter_version
|
||
(
|
||
min_adapter_version
|
||
)
|
||
AS
|
||
SELECT COALESCE (fac.safe_to_number (fac_usrdata_omschr), 1.0)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper = UPPER ('$MAR_MIN_ADAPTER_VERSION')
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_delta_connecttime
|
||
(
|
||
prs_bedrijf_key,
|
||
mar_delta_connecttime,
|
||
mar_delta_connecttime_bedrijf
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
COALESCE (fac.safe_to_number (fac_usrdata_omschr) / (24 * 3600), 1 / 24),
|
||
fac.safe_to_number (kl.prs_kenmerklink_waarde) / (24 * 3600)
|
||
FROM fac_usrdata ud, mar_v_woco_perslid b, prs_kenmerklink kl
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper = UPPER ('$MAR_DELTA_CONNECTTIME')
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND b.prs_perslid_apikey IS NOT NULL
|
||
AND b.prs_bedrijf_key = kl.prs_link_key(+)
|
||
AND kl.prs_kenmerk_key(+) = 3
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL;
|
||
|
||
|
||
-- MARX#62284: Identityserver gegevens (tbv AX2012) niet in mareon sync.xml
|
||
|
||
CREATE OR REPLACE VIEW marx_v_identityserver
|
||
(
|
||
prs_bedrijf_key,
|
||
ax2012_bcproxy,
|
||
identityserver_url,
|
||
identityserver_clientid,
|
||
identityserver_clientsecret,
|
||
identityserver_granttype,
|
||
identityserver_resource,
|
||
identityserver_scope
|
||
)
|
||
AS
|
||
SELECT w.prs_bedrijf_key,
|
||
kl1.prs_kenmerklink_waarde,
|
||
kl2.prs_kenmerklink_waarde,
|
||
kl3.prs_kenmerklink_waarde,
|
||
kl4.prs_kenmerklink_waarde,
|
||
kl5.prs_kenmerklink_waarde,
|
||
kl6.prs_kenmerklink_waarde,
|
||
kl7.prs_kenmerklink_waarde
|
||
FROM mar_v_opdrachtgevers w,
|
||
prs_kenmerklink kl1,
|
||
prs_kenmerklink kl2,
|
||
prs_kenmerklink kl3,
|
||
prs_kenmerklink kl4,
|
||
prs_kenmerklink kl5,
|
||
prs_kenmerklink kl6,
|
||
prs_kenmerklink kl7
|
||
WHERE kl1.prs_kenmerk_key(+) = 48
|
||
AND kl1.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl1.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl1.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl2.prs_kenmerk_key(+) = 50
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl2.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl3.prs_kenmerk_key(+) = 51
|
||
AND kl3.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl3.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl3.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl4.prs_kenmerk_key(+) = 52
|
||
AND kl4.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl4.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl4.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl5.prs_kenmerk_key(+) = 53
|
||
AND kl5.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl5.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl5.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl6.prs_kenmerk_key(+) = 54
|
||
AND kl6.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl6.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl6.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl7.prs_kenmerk_key(+) = 55
|
||
AND kl7.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl7.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl7.prs_link_key(+) = w.prs_bedrijf_key;
|
||
|
||
-- MAR_BEDRIJF_LASTCONNECTION = laatste connected timestamp van de woco
|
||
-- MAR_BEDRIJF_NEXTCONNECTION = eerst volgende timestamp van de woco waarop geconnect mag worden
|
||
-- prs_kenmerk_key(+) = 3 is de woco-instelling $MAR_DELTA_CONNECTTIME die de algemene instelling mag overrulen (voorgaat)
|
||
-- kl = key 10 Bedrijf $MAR_SYNC_OPDR_PAST_DAYS (< 0 in dagen, 1 = laatste tijdswindow, >= 2 in uren) 11 Numeriek
|
||
-- kl2 = key 11 Bedrijf $MAR_SYNC_OPDR_BUFFER (in seconden) 12 Numeriek
|
||
-- kl3 = key 12 Bedrijf $MAR_MIN_ADAPTER_VERSION 8 Karakter
|
||
-- kl4 = key 17 Bedrijf $MAR_SYNC_LOGLEVEL 14 Numeriek
|
||
-- kl5 = key 18 Bedrijf $MAR_SYNC_SENDLOGFILE 15 Datum
|
||
-- kl6 = key 19 Bedrijf $MAR_ABORT_SYNC_HTTP_ERROR 16 Numeriek
|
||
-- kl7 = key 27 Bedrijf $MAR_SYNC_OPDR_DELAY (in seconden) 13 Numeriek
|
||
-- kl8 = key 31 Bedrijf Communicatielogboek (ja/nee), maakt woco gebruik van het communictaielogboek (dus UAX webservice UpdatePurchStatus beschikbaar)
|
||
-- kl9 = key 32 Bedrijf $MAR_SYNC_HTTP_TIMEOUT (in seconden) Numeriek, minimaal 30.
|
||
-- kl10 = key 40 Bedrijf Bijlages van opdrachtgever, Karakter (10), 0/leeg is geen sync van bijlages, <> 0 wel sync (voor Facilitor kenmerk-key hier registreren).
|
||
-- kl11 = key 41 Bedrijf Bijlages naar opdrachtgever, Karakter (10), 0/leeg is geen sync van bijlages, <> 0 wel sync (voor Facilitor kenmerk-key hier registreren).
|
||
-- kl12 = key 58 Bedrijf $MAR_PUSH_NOTIFYQUEUE Numeriek
|
||
|
||
CREATE OR REPLACE VIEW mar_v_mareon_info
|
||
(
|
||
FCLT_MAR_VERSION,
|
||
MAR_MIN_ADAPTER_VERSION,
|
||
PRS_BEDRIJF_KEY,
|
||
PRS_BEDRIJF_NAAM,
|
||
PRS_OVEREENKOMST_NR,
|
||
FCLT_3D_USER_KEY,
|
||
PRS_PERSLID_APIKEY,
|
||
MAR_BEDRIJF_SYNC_BUFFER,
|
||
MAR_BEDRIJF_DATE_NOW,
|
||
MAR_BEDRIJF_LASTCONNECTION,
|
||
MAR_BEDRIJF_NEXTCONNECTION,
|
||
MAR_CONNECTION_ALLOWED,
|
||
MAR_SYNC_OPDR_PAST_DAYS,
|
||
MAR_SYNC_OPDR_PAST_SECS_START,
|
||
MAR_SYNC_OPDR_PAST_SECS_STOP,
|
||
MAR_SYNC_LOGLEVEL,
|
||
MAR_SYNC_DATE_SENDLOGFILE,
|
||
MAR_PUSH_NOTIFYQUEUE,
|
||
MAR_ABORT_SYNC_HTTP_ERROR,
|
||
MAR_USE_COMMUNICATIE_LOGBOEK,
|
||
MAR_SYNC_HTTP_TIMEOUT,
|
||
MAR_SYNC_BIJLAGES_VAN_OPDRGVR,
|
||
MAR_SYNC_BIJLAGES_NAAR_OPDRGVR,
|
||
ax2012_bcproxy,
|
||
identityserver_url,
|
||
identityserver_clientid,
|
||
identityserver_clientsecret,
|
||
identityserver_granttype,
|
||
identityserver_resource,
|
||
identityserver_scope
|
||
)
|
||
AS
|
||
SELECT 'Mareon ' || fac.getdbversion (),
|
||
GREATEST (v.min_adapter_version, COALESCE (fac.safe_to_number (kl3.prs_kenmerklink_waarde), 1.0)),
|
||
w.prs_bedrijf_key,
|
||
w.prs_bedrijf_naam,
|
||
w.prs_overeenkomst_nr,
|
||
w.prs_perslid_key,
|
||
w.prs_perslid_apikey,
|
||
COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0),
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) >= 1
|
||
THEN
|
||
REPLACE (
|
||
TO_CHAR (
|
||
sync_date_now - (ABS (COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)) / (24 * 60 * 60)),
|
||
'YYYY-MM-DD HH24:MI:SS'),
|
||
' ',
|
||
'T')
|
||
ELSE
|
||
REPLACE (
|
||
TO_CHAR (
|
||
sync_date_now
|
||
- ( ( ( GREATEST (ABS (COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0)) - 7, 0)
|
||
* 24
|
||
* 60
|
||
* 60)
|
||
+ ABS (COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)))
|
||
/ (24 * 60 * 60)),
|
||
'YYYY-MM-DD HH24:MI:SS'),
|
||
' ',
|
||
'T')
|
||
END,
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) = 1
|
||
THEN
|
||
REPLACE (
|
||
TO_CHAR (
|
||
sync_date_lasttime
|
||
- ( ( COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)
|
||
+ ABS (COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)))
|
||
/ (24 * 60 * 60)),
|
||
'YYYY-MM-DD HH24:MI:SS'),
|
||
' ',
|
||
'T')
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) > 1
|
||
THEN
|
||
REPLACE (
|
||
TO_CHAR (
|
||
sync_date_now
|
||
- ( ( (COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) * 60 * 60)
|
||
+ ABS (COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)))
|
||
/ (24 * 60 * 60)),
|
||
'YYYY-MM-DD HH24:MI:SS'),
|
||
' ',
|
||
'T')
|
||
ELSE
|
||
REPLACE (
|
||
TO_CHAR (
|
||
TRUNC (
|
||
sync_date_now
|
||
- ( ( (ABS (COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0)) * 24 * 60 * 60)
|
||
+ ABS (COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)))
|
||
/ (24 * 60 * 60))),
|
||
'YYYY-MM-DD HH24:MI:SS'),
|
||
' ',
|
||
'T')
|
||
END,
|
||
sync_date_lasttime + COALESCE (mar_delta_connecttime_bedrijf, t.mar_delta_connecttime),
|
||
CASE
|
||
WHEN sync_date_lasttime + COALESCE (mar_delta_connecttime_bedrijf, t.mar_delta_connecttime) <= SYSDATE THEN 1
|
||
ELSE 0
|
||
END,
|
||
LEAST (COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0), 1),
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) = 1
|
||
THEN
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0) > 0
|
||
THEN
|
||
ROUND (
|
||
((SYSDATE - sync_date_lasttime) * 24 * 60 * 60)
|
||
+ COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)
|
||
+ COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0))
|
||
ELSE
|
||
ROUND (
|
||
((SYSDATE - sync_date_lasttime) * 24 * 60 * 60)
|
||
+ COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0))
|
||
END
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) > 1
|
||
THEN
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0) > 0
|
||
THEN
|
||
ROUND (
|
||
(COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) * 60 * 60)
|
||
+ COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)
|
||
+ COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0))
|
||
ELSE
|
||
ROUND (
|
||
(COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) * 60 * 60)
|
||
+ COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0))
|
||
END
|
||
ELSE
|
||
0
|
||
END,
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) = 1
|
||
THEN
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0) > 0
|
||
THEN
|
||
GREATEST (
|
||
ROUND (
|
||
((SYSDATE - sync_date_now) * 24 * 60 * 60)
|
||
- COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)
|
||
+ COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)),
|
||
0)
|
||
ELSE
|
||
GREATEST (
|
||
ROUND (
|
||
((SYSDATE - sync_date_now) * 24 * 60 * 60)
|
||
- COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)),
|
||
0)
|
||
END
|
||
WHEN COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0) > 1
|
||
THEN
|
||
CASE
|
||
WHEN COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0) > 0
|
||
THEN
|
||
GREATEST (
|
||
ROUND (
|
||
0
|
||
- COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)
|
||
+ COALESCE (fac.safe_to_number (kl7.prs_kenmerklink_waarde), 0)),
|
||
0)
|
||
ELSE
|
||
GREATEST (ROUND (0 - COALESCE (fac.safe_to_number (kl2.prs_kenmerklink_waarde), 0)), 0)
|
||
END
|
||
ELSE
|
||
0
|
||
END,
|
||
fac.safe_to_number (kl4.prs_kenmerklink_waarde),
|
||
TO_CHAR (fac.safe_to_date (kl5.prs_kenmerklink_waarde, 'DD-MM-YYYY'), 'YYYY-MM-DD'),
|
||
COALESCE (fac.safe_to_number (kl12.prs_kenmerklink_waarde), 0),
|
||
COALESCE (fac.safe_to_number (kl6.prs_kenmerklink_waarde), 0),
|
||
COALESCE (fac.safe_to_number (kl8.prs_kenmerklink_waarde), 0),
|
||
COALESCE (fac.safe_to_number (kl9.prs_kenmerklink_waarde), 0),
|
||
COALESCE (kl10.prs_kenmerklink_waarde, '0'),
|
||
COALESCE (kl11.prs_kenmerklink_waarde, '0'),
|
||
ax2012_bcproxy,
|
||
identityserver_url,
|
||
identityserver_clientid,
|
||
identityserver_clientsecret,
|
||
identityserver_granttype,
|
||
identityserver_resource,
|
||
identityserver_scope
|
||
FROM mar_v_min_adapter_version v,
|
||
mar_v_woco_perslid w,
|
||
mar_v_sync_ax_lasttime s,
|
||
mar_v_sync_ax_now n,
|
||
mar_v_delta_connecttime t,
|
||
prs_kenmerklink kl,
|
||
prs_kenmerklink kl2,
|
||
prs_kenmerklink kl3,
|
||
prs_kenmerklink kl4,
|
||
prs_kenmerklink kl5,
|
||
prs_kenmerklink kl6,
|
||
prs_kenmerklink kl7,
|
||
prs_kenmerklink kl8,
|
||
prs_kenmerklink kl9,
|
||
prs_kenmerklink kl10,
|
||
prs_kenmerklink kl11,
|
||
prs_kenmerklink kl12,
|
||
marx_v_identityserver idsrv
|
||
WHERE s.prs_perslid_key = w.prs_perslid_key
|
||
AND n.prs_perslid_key = w.prs_perslid_key
|
||
AND t.prs_bedrijf_key = w.prs_bedrijf_key
|
||
AND kl.prs_kenmerk_key(+) = 10
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl2.prs_kenmerk_key(+) = 11
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl2.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl3.prs_kenmerk_key(+) = 12
|
||
AND kl3.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl3.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl3.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl4.prs_kenmerk_key(+) = 17
|
||
AND kl4.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl4.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl4.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl5.prs_kenmerk_key(+) = 18
|
||
AND kl5.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl5.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl5.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl6.prs_kenmerk_key(+) = 19
|
||
AND kl6.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl6.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl6.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl7.prs_kenmerk_key(+) = 27
|
||
AND kl7.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl7.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl7.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl8.prs_kenmerk_key(+) = 31
|
||
AND kl8.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl8.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl8.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl9.prs_kenmerk_key(+) = 32
|
||
AND kl9.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl9.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl9.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl10.prs_kenmerk_key(+) = 40
|
||
AND kl10.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl10.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl10.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl11.prs_kenmerk_key(+) = 41
|
||
AND kl11.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl11.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl11.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND kl12.prs_kenmerk_key(+) = 58
|
||
AND kl12.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl12.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl12.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND idsrv.prs_bedrijf_key = w.prs_bedrijf_key;
|
||
|
||
-- MARX#83818 Opdrachtupdates naar Premium aannemer mailen die geen MAO kan ontvangen, idem voor ANN
|
||
-- b.v. Aanroep: marx_send_mao_ann_by_noti met parameters 123, 'Opdracht is door opdrachtgever aangevuld of is voorzien van meerwerk (MAO)'
|
||
-- b.v. Aanroep: marx_send_mao_ann_by_noti met parameters 123, 'Opdracht is door opdrachtgever geannuleerd (ANN)'
|
||
CREATE OR REPLACE PROCEDURE marx_send_mao_ann_by_noti (p_mld_opdr_key NUMBER, p_noti_onderwerp VARCHAR2)
|
||
IS
|
||
v_oke_to_send NUMBER (1);
|
||
v_woco_prs_perslid_key NUMBER(10);
|
||
v_lev_prs_perslid_key NUMBER(10);
|
||
v_lev_prs_bedrijf_key NUMBER(10);
|
||
BEGIN
|
||
v_oke_to_send := 0;
|
||
|
||
|
||
-- opdrachttype-key, uitvoerende-bedrijf-key, opdrachtgever prs_perslid_key (API)
|
||
SELECT prs_perslid_key, mld_uitvoerende_keys
|
||
INTO v_woco_prs_perslid_key, v_lev_prs_bedrijf_key
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
SELECT MAX(lev.prs_perslid_key)
|
||
INTO v_lev_prs_perslid_key
|
||
FROM mar_v_leverancier_api_perslid lev
|
||
WHERE lev.prs_bedrijf_key = v_lev_prs_bedrijf_key;
|
||
|
||
-- Is voor de leverancier het kenmerk 'Reminder datum' in gesteld en is deze kleiner dan vandaag/sysdate, dan sturen we een CUST09 notificatie (indien deze datum in de toekomst, dan sturen we deze niet).
|
||
SELECT COALESCE(MAX(1),0)
|
||
INTO v_oke_to_send
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_lev_prs_bedrijf_key
|
||
AND prs_kenmerk_key = 69
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND SYSDATE >= fac.safe_to_date(prs_kenmerklink_waarde, 'dd-mm-yyyy');
|
||
|
||
IF v_oke_to_send = 1
|
||
THEN
|
||
-- Sender Receiver srt_notif opdracht-key tekst/onderwerp
|
||
fac.putnotificationsrtprio (v_woco_prs_perslid_key, v_lev_prs_perslid_key, 'CUST09', p_mld_opdr_key, p_noti_onderwerp,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
2,
|
||
NULL);
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#55214: OVERALL TICKET MARX15: Vervroegde HaagWonen release agv Alliantie VFU "MovinU"
|
||
-- Alsmede ook of juiste vooral Haagwonen / SALES005 1.0
|
||
-- Deze view geeft aan of er opdrachten vanuit opdrachtgever (prs_bedrijf_key) geupdate mogen/moeten worden: dan moet bedrijfskenmerk $MAR_SYNC_OPDR_BUFFER op 0 (of leeg) staan.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_updates_on_opdr_allowed
|
||
(
|
||
prs_bedrijf_key,
|
||
mld_opdr_updates_allowed
|
||
)
|
||
AS
|
||
SELECT w.prs_bedrijf_key, DECODE (COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0), 0, 1, 0)
|
||
FROM mar_v_woco_perslid w, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 11
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl.prs_link_key(+) = w.prs_bedrijf_key
|
||
AND w.prs_perslid_apikey IS NOT NULL;
|
||
|
||
|
||
|
||
-- MARX#41690: Alleen de leveranciers van de woco die een supplier-id hebben, zodat hiervan de opdrachten opgehaald kunnen worden
|
||
-- Leveranciers zonder supplier-id, b.v. contractanten die geen afzonderlijke opdrachten ontvangen (en geen supplier-id hebben), willen we hier niet tussen hebben staan.
|
||
-- Dan bijft alles compatibel en gaan we geen problemen krijgen dat we bedrijven (aannemers) aanbieden die hier niets te zoeken hebben.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijven_ax
|
||
(
|
||
PRS_BEDRIJF_KEY,
|
||
PRS_BEDRIJF_NAAM,
|
||
PRS_LEVERANCIER_NR,
|
||
PRS_OVEREENKOMST_NR,
|
||
AX_SUPPLIER_ID,
|
||
FCLT_3D_USER_KEY,
|
||
PRS_PERSLID_APIKEY
|
||
)
|
||
AS
|
||
SELECT l_prs_bedrijf_key,
|
||
l_prs_bedrijf_naam,
|
||
l_prs_leverancier_nr,
|
||
l_prs_overeenkomst_nr,
|
||
l_ax_supplier_id,
|
||
w_prs_perslid_key,
|
||
w_prs_perslid_apikey
|
||
FROM mar_v_woco_x_lev;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_verwerkprijzen
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_verwerkprijzen
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 13 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- PRS-Flexprop IBAN (bankrekeningnummer; key = 1) en IBAN G-rekening (key = 2) bij bedrijf
|
||
-- MARX#52519: Mareon -> REMS ipv UBL2.1 wordt Simplerinvoicing Invoice 1.1 verwacht: BIC: BANK IDENTIFIER CODE + Banknaam is vereist
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_bankrek_nr
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_bankreknr,
|
||
prs_bedrijf_g_bankreknr,
|
||
prs_bedrijf_bankbic,
|
||
prs_bedrijf_banknaam
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_leverancier_nr,
|
||
kl.prs_kenmerklink_waarde,
|
||
kl2.prs_kenmerklink_waarde,
|
||
kl3.prs_kenmerklink_waarde,
|
||
kl4.prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink kl,
|
||
prs_kenmerklink kl2,
|
||
prs_bedrijf b,
|
||
prs_kenmerklink kl3,
|
||
prs_kenmerklink kl4
|
||
WHERE kl.prs_kenmerk_key(+) = 1
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl2.prs_kenmerk_key(+) = 2
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl2.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl3.prs_kenmerk_key(+) = 20
|
||
AND kl3.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl3.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl3.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl4.prs_kenmerk_key(+) = 21
|
||
AND kl4.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl4.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl4.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND b.prs_bedrijf_verwijder IS NULL;
|
||
|
||
-- PRS-Flexprop KVK (key = 25) en BTWnr (key = 26) bij bedrijf
|
||
-- MARX#56505: Factuur-koppeling naar Tobias-AX de NAW/KVK/BTWnr/leverdatum opnemen
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_kvk_btw_nr
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_kvknr,
|
||
prs_bedrijf_btwnr
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_leverancier_nr,
|
||
kl.prs_kenmerklink_waarde,
|
||
kl2.prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink kl, prs_kenmerklink kl2, prs_bedrijf b
|
||
WHERE kl.prs_kenmerk_key(+) = 25
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl2.prs_kenmerk_key(+) = 26
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl2.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND b.prs_bedrijf_verwijder IS NULL;
|
||
|
||
-- PRS-Flexprop '$MAR_DONOT_CLOSE_OPDRACHT_AFTER_INVOICE' bij woco (prs_kenmerk_key = 4)
|
||
-- Inverse via abs, zodat DO-NOT-CLOSE een DO-CLOSE wordt...
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_kenmerken
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_close_opdracht,
|
||
prs_bedrijf_adres_in_factuur
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
ABS (fac.safe_to_number (COALESCE (kl.prs_kenmerklink_waarde, '0')) - 1),
|
||
fac.safe_to_number (COALESCE (kl2.prs_kenmerklink_waarde, '0'))
|
||
FROM prs_bedrijf b, prs_kenmerklink kl, prs_kenmerklink kl2
|
||
WHERE kl.prs_kenmerk_key(+) = 4
|
||
AND kl.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_kenmerk_key(+) = 5
|
||
AND kl2.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- PRS Flexprops Start- en einddatum van de PREMIUM opdrachtNEMERS: resp. key 7 en 8
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_premium
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
prs_bedrijf_is_premium,
|
||
prs_bedrijfadres_url
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
fac.safe_to_date (kl.prs_kenmerklink_waarde, 'DD-MM-YYYY'),
|
||
fac.safe_to_date (kl2.prs_kenmerklink_waarde, 'DD-MM-YYYY'),
|
||
CASE
|
||
WHEN TRUNC (COALESCE (fac.safe_to_date (kl.prs_kenmerklink_waarde, 'DD-MM-YYYY'), SYSDATE + 1)) <=
|
||
TRUNC (SYSDATE)
|
||
AND TRUNC (COALESCE (fac.safe_to_date (kl2.prs_kenmerklink_waarde, 'DD-MM-YYYY'), SYSDATE)) >=
|
||
TRUNC (SYSDATE)
|
||
THEN
|
||
1
|
||
ELSE
|
||
0
|
||
END,
|
||
(SELECT MAX(ba.prs_bedrijfadres_url)
|
||
FROM prs_bedrijfadres ba
|
||
WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'O' AND ba.mld_typeopdr_key IS NULL
|
||
AND ba.prs_bedrijfadres_startdatum = (SELECT MAX(ba2.prs_bedrijfadres_startdatum)
|
||
FROM prs_bedrijfadres ba2
|
||
WHERE ba2.prs_bedrijf_key = b.prs_bedrijf_key AND ba2.prs_bedrijfadres_type = 'O' AND ba2.mld_typeopdr_key IS NULL AND ba2.prs_bedrijfadres_startdatum <= SYSDATE)
|
||
)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl, prs_kenmerklink kl2
|
||
WHERE kl.prs_kenmerk_key(+) = 7
|
||
AND kl.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl2.prs_kenmerk_key(+) = 8
|
||
AND kl2.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl2.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- PRS-Flexprop '$MAR_MAILADRES_STORING' bij woco (prs_kenmerk_key = 9)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_storingmailadres
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_mailadres
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, kl.prs_kenmerklink_waarde
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 9 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- MARX#63257: Het aantal maximum accounts per leverancier kunnen instellen, minimum / default = 3 stuks.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_maxaccounts
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_maxaccounts
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 3)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 56 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- key 58 = Bedrijf $MAR_PUSH_NOTIFYQUEUE
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_push_NQ
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_push_nq
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 58
|
||
AND kl.prs_link_key(+) = b.prs_bedrijf_key
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder IS NULL;
|
||
|
||
-- PRS-Flexprop '$PDF_BIJ_SIDB_FACTUUR' bij woco (prs_kenmerk_key = 16)
|
||
-- Uitleg: 0 of leeg = PDF in de (ketenstandaard)koppeling is verplicht, 1 = PDF in de (ketenstandaard)koppeling is optioneel (dus niet verplicht)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_pdf_bij_sidb
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_pdfverplicht
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, DECODE (COALESCE (kl.prs_kenmerklink_waarde, '0'), '0', 1, '1', 0, 1)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 16 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_puo_mode
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
puo_mode
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, COALESCE (kl.prs_kenmerklink_waarde, '0')
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 23 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- MARX#59880: Uitbreiding Salesforce - Tobias koppeling met: vullen van bron-kenmerk met waarde (bv) SALESFORCE
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_factuurbron
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
factuurbron
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, kl.prs_kenmerklink_waarde
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 42 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
-- MARX#69028 Uitvalfacturen toch naar het prefacturen register.
|
||
CREATE OR REPLACE VIEW mar_v_bedrijf_uitval_versturen
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_bedrijf_uitval_versturen
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, COALESCE (fac.safe_to_number (kl.prs_kenmerklink_waarde), 0)
|
||
FROM prs_bedrijf b, prs_kenmerklink kl
|
||
WHERE kl.prs_kenmerk_key(+) = 62 AND kl.prs_link_key(+) = b.prs_bedrijf_key AND kl.prs_kenmerklink_niveau(+) = 'B';
|
||
|
||
--Algemene functie ter bepaling van de juiste key van een btw-percentage bij een opdracht p_mld_opdr_key
|
||
|
||
CREATE OR REPLACE FUNCTION get_btwperc_key (p_mld_opdr_key IN NUMBER, p_percentage IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_btwtabel_key NUMBER (10);
|
||
v_btwperc_key NUMBER (10);
|
||
BEGIN
|
||
v_btwtabel_key :=
|
||
fin.getbtwtabelkey (NULL,
|
||
NULL,
|
||
p_mld_opdr_key,
|
||
TRUE);
|
||
v_btwperc_key := fin.getbtwtabelwaardekey_perc (p_percentage, v_btwtabel_key, 0);
|
||
RETURN v_btwperc_key;
|
||
END;
|
||
/
|
||
|
||
|
||
--Algemene functie om te bepalen of er verschil tussen 2 char-velden is
|
||
|
||
CREATE OR REPLACE FUNCTION mar_diff_varchar (p_var1 IN VARCHAR2,
|
||
p_var2 IN VARCHAR2,
|
||
p_mld_opdr_key IN NUMBER,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_veldnaam IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
l_van VARCHAR2 (1000);
|
||
l_naar VARCHAR2 (1000);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := 0; -- No diff
|
||
|
||
IF (p_var1 IS NOT NULL AND p_var2 IS NULL) OR (p_var1 IS NULL AND p_var2 IS NOT NULL) OR (p_var1 <> p_var2)
|
||
THEN
|
||
v_result := 1;
|
||
|
||
IF p_mld_opdr_key IS NOT NULL AND p_prs_perslid_key IS NOT NULL AND p_veldnaam IS NOT NULL
|
||
THEN
|
||
l_van := SUBSTR (COALESCE (p_var1, 'leeg'), 1, 1000);
|
||
l_naar := SUBSTR (COALESCE (p_var2, 'leeg'), 1, 1000);
|
||
|
||
IF LENGTH (l_van) > 100
|
||
THEN
|
||
l_van := SUBSTR (l_van, 1, 100) || '...';
|
||
END IF;
|
||
|
||
IF LENGTH (l_naar) > 100
|
||
THEN
|
||
l_naar := SUBSTR (l_naar, 1, 100) || '...';
|
||
END IF;
|
||
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
p_veldnaam || ' gewijzigd van ' || l_van || ' naar ' || l_naar);
|
||
COMMIT;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
--Algemene functie om te bepalen of er verschil tussen 2 datumvelden is
|
||
|
||
CREATE OR REPLACE FUNCTION mar_diff_date (p_var1 IN DATE,
|
||
p_var2 IN DATE,
|
||
p_mld_opdr_key IN NUMBER,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_veldnaam IN VARCHAR2,
|
||
p_fac_srtnot_code IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := 0; -- No diff
|
||
|
||
IF (p_var1 IS NOT NULL AND p_var2 IS NULL) OR (p_var1 IS NULL AND p_var2 IS NOT NULL) OR (p_var1 <> p_var2)
|
||
THEN
|
||
v_result := 1;
|
||
|
||
IF p_mld_opdr_key IS NOT NULL AND p_prs_perslid_key IS NOT NULL AND p_veldnaam IS NOT NULL
|
||
THEN
|
||
fac.trackaction (
|
||
p_fac_srtnot_code,
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
p_veldnaam
|
||
|| ' gewijzigd van '
|
||
|| COALESCE (TO_CHAR (p_var1, 'dd-mm-yyyy hh24:mi'), 'leeg')
|
||
|| ' naar '
|
||
|| COALESCE (TO_CHAR (p_var2, 'dd-mm-yyyy hh24:mi'), 'leeg'));
|
||
COMMIT;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
--Algemene functie om te bepalen of er verschil tussen 2 numerieke velden is
|
||
|
||
CREATE OR REPLACE FUNCTION mar_diff_number (p_var1 IN NUMBER,
|
||
p_var2 IN NUMBER,
|
||
p_mld_opdr_key IN NUMBER,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_veldnaam IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := 0; -- No diff
|
||
|
||
-- NB: ROUND-functie op 2 decimalen gebruikt omdat 100.00 dat wordt aangeboden als 100 wordt opgeslagen, en bij een volgende keer wordt dat als verschil gezien (=onterecht).
|
||
IF (p_var1 IS NOT NULL AND p_var2 IS NULL) OR (p_var1 IS NULL AND p_var2 IS NOT NULL) OR (p_var1 <> p_var2)
|
||
THEN
|
||
v_result := 1;
|
||
|
||
IF p_mld_opdr_key IS NOT NULL AND p_prs_perslid_key IS NOT NULL AND p_veldnaam IS NOT NULL
|
||
THEN
|
||
fac.trackaction (
|
||
'#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
p_veldnaam
|
||
|| ' gewijzigd van '
|
||
|| COALESCE (TO_CHAR (p_var1), 'leeg')
|
||
|| ' naar '
|
||
|| COALESCE (TO_CHAR (p_var2), 'leeg'));
|
||
COMMIT;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- Vertaaltabel: vertaalt van een onderwerp 'p_subject' de megegeven code 'p_code' in een omschrijving.
|
||
-- Mogelijke onderwerpen zijn: mld_opdr_soort, mld_opdr_afspraak, mld_opdr_typering
|
||
-- B.v. code REP van het onderwerp 'mld_opdr_soort' geeft 'Reparatie'
|
||
|
||
CREATE OR REPLACE FUNCTION GetMareonDescription (p_subject IN VARCHAR2, p_code IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_result VARCHAR2 (1000);
|
||
BEGIN
|
||
v_result := '';
|
||
|
||
IF UPPER (p_subject) = 'MLD_OPDR_SOORT'
|
||
THEN
|
||
SELECT DECODE (UPPER (p_code), 'INS', 'Inspectie', 'REP', 'Reparatie', 'MUT', 'Mutatie', '') INTO v_result FROM DUAL;
|
||
END IF;
|
||
|
||
IF UPPER (p_subject) = 'MLD_OPDR_TYPERING'
|
||
THEN
|
||
SELECT DECODE (UPPER (p_code), 'ORG', 'Origineel', 'MAO', 'Meerwerk/aanvullend', 'GAR', 'Garantie', '')
|
||
INTO v_result
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
IF UPPER (p_subject) = 'MLD_OPDR_AFSPRAAK'
|
||
THEN
|
||
SELECT DECODE (UPPER (p_code), 'AFK', 'Afkoop', 'ANS', 'Aanneemsom', 'REG', 'Regie', 'EHP', 'Eenheidsprijs', '')
|
||
INTO v_result
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- MARX#59855: Mareon Premum: REP-opdracht doorsturen en MUT opdrachten tegenhouden.
|
||
-- De opdracht wordt alleen doorgestuurd indien het type van de opdracht past in de bitwise-instellingen van prs_bedrijf_bedrijf_chargemode.
|
||
|
||
CREATE OR REPLACE FUNCTION mld_opdr_match_with_chargemode (p_mld_opdr_key IN NUMBER, p_bedrijf_bedrijf_chargemode IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
v_opdr_soort_code NUMBER (10);
|
||
BEGIN
|
||
v_result := 0;
|
||
|
||
BEGIN
|
||
SELECT DECODE (UPPER (MAX (ko.mld_kenmerkopdr_waarde)), NULL, 1, 'REPARATIE', 2, 'MUTATIE', 4, 'INSPECTIE', 8)
|
||
INTO v_opdr_soort_code
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = p_mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL;
|
||
|
||
SELECT DECODE (BITAND (p_bedrijf_bedrijf_chargemode, v_opdr_soort_code), 0, 0, 1) INTO v_result FROM DUAL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push): XML met result retour, hier algemene functie helemaal op einde import met succes = true of false....
|
||
-- p_success is evt overrule-mechanisme ter aansturing van succes (values -1, 0 ,1): 0 is neutraal (=laat deze functie bepalen), -1 is overrule deze functie met success = false (failure), 1 is overrule deze functie met success = true
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_response_API_Import (p_import_key IN NUMBER, p_success IN NUMBER)
|
||
IS
|
||
v_aantal_errors NUMBER (10);
|
||
v_result_str VARCHAR2 (100);
|
||
BEGIN
|
||
v_result_str := 'true';
|
||
v_aantal_errors := 0;
|
||
|
||
IF (p_success = -1)
|
||
THEN
|
||
-- Overrule met failure / GEEN success
|
||
v_result_str := 'false';
|
||
ELSE
|
||
IF (p_success = 1)
|
||
THEN
|
||
-- Overrule met SUCCESS
|
||
v_result_str := 'true';
|
||
ELSE
|
||
SELECT COUNT (*)
|
||
INTO v_aantal_errors
|
||
FROM imp_log
|
||
WHERE fac_import_key = p_import_key AND imp_log_status = 'E';
|
||
|
||
IF (v_aantal_errors > 0)
|
||
THEN
|
||
-- Er zijn error(s), dit is GEEN succes
|
||
v_result_str := 'false';
|
||
ELSE
|
||
-- Er zijn GEEN error(s), dit is WEL succes
|
||
v_result_str := 'true';
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT_' || TO_CHAR (p_import_key), 'success', v_result_str);
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Algemene functie om te checken of aannemer de opdracht(bon/xml) gestuurd moet gaan krijgen:
|
||
-- 1. aannemer een technisch adres voor (dit type) opdracht heeft waarop de bon of (ketenstandaard)XML bericht op afgeleverd kan worden
|
||
-- 2. aannemer bij (ketenstandaard)-XML bericht wel premium aannemer is
|
||
-- 3. aannemer het type opdracht (REP-MUT-INS) wel ontvangen wil (prs_bedrijf_bedrijf_chargemode, zie MARX#59855: Mareon Premum: REP-opdracht doorsturen en MUT opdrachten tegenhouden )
|
||
-- 4. aannemer een VvE beheerder is en GLN VvE (flexprop key 29) wel gevuld is, als deze GLN VvE leeg is, dan niet sturen! Zie MARX#63028: Twinq koppeling: alleen sturen als GLN vanuit Tobias is gevuld
|
||
|
||
CREATE OR REPLACE FUNCTION mar_send_mld_opdr_to_supplier (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_prs_bedrijfadres_url prs_bedrijfadres.prs_bedrijfadres_url%TYPE;
|
||
v_prs_bedrijfadres_xsl prs_bedrijfadres.prs_bedrijfadres_xsl%TYPE;
|
||
v_prs_bedrijfadres_plugin prs_bedrijfadres.prs_bedrijfadres_plugin%TYPE;
|
||
v_mld_typeopdr_key NUMBER (10);
|
||
v_mld_uitvoerende_keys NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_do_send_opdr NUMBER (10);
|
||
v_chargemode NUMBER (10);
|
||
v_opdr_matcht_chargemode NUMBER (10);
|
||
v_result NUMBER (10);
|
||
l_lev_is_vvebeheerder NUMBER (10);
|
||
l_gln_vve_gevuld NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- v_result is resultaat van deze functie, en bepaalt of de opdracht (nog eens) verstuurd moet worden (=1) of niet (=0).
|
||
v_result := 0;
|
||
|
||
-- opdrachttype-key, uitvoerende-bedrijf-key, opdrachtgever prs_perslid_key (API)
|
||
SELECT mld_typeopdr_key, mld_uitvoerende_keys, prs_perslid_key
|
||
INTO v_mld_typeopdr_key, v_mld_uitvoerende_keys, v_prs_perslid_key
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- MARX#47287: Automatische mails via putorders worden niet in alle gevallen meer verstuurd
|
||
SELECT MAX (prs_bedrijfadres_url),
|
||
DECODE (MAX (UPPER (prs_bedrijfadres_xsl)),
|
||
NULL, NULL,
|
||
'XSL\CUST.XSL', NULL,
|
||
'XSL/CUST.XSL', NULL,
|
||
'XSL\MARX.XSL', NULL,
|
||
'XSL/MARX.XSL', NULL,
|
||
MAX (prs_bedrijfadres_xsl)),
|
||
MAX(prs_bedrijfadres_plugin)
|
||
INTO v_prs_bedrijfadres_url, v_prs_bedrijfadres_xsl, v_prs_bedrijfadres_plugin
|
||
FROM prs_bedrijfadres
|
||
WHERE prs_bedrijfadres_type = 'O'
|
||
AND (mld_typeopdr_key IS NULL OR mld_typeopdr_key = v_mld_typeopdr_key)
|
||
AND prs_bedrijf_key = v_mld_uitvoerende_keys
|
||
AND prs_bedrijf_key2 = v_woco_prs_bedrijf_key
|
||
AND prs_bedrijfadres_startdatum = (SELECT MAX(ba.prs_bedrijfadres_startdatum)
|
||
FROM prs_bedrijfadres ba
|
||
WHERE ba.prs_bedrijf_key = v_mld_uitvoerende_keys
|
||
AND ba.prs_bedrijfadres_type = 'O'
|
||
AND (ba.mld_typeopdr_key IS NULL OR ba.mld_typeopdr_key = v_mld_typeopdr_key)
|
||
AND ba.prs_bedrijf_key2 = v_woco_prs_bedrijf_key
|
||
AND ba.prs_bedrijfadres_startdatum <= SYSDATE);
|
||
IF v_prs_bedrijfadres_url IS NULL
|
||
THEN
|
||
-- MARX#83495 AiAi in rapport "Mijn Mareon Premium"
|
||
-- Hierboven met extra dimensie "opdrachtgever" (prs_bedrijf_key2) niet gevonden, dan gaan we op zoek naar adres zonder opdrachtgever (NULL = fallback/default)...
|
||
SELECT MAX (prs_bedrijfadres_url),
|
||
DECODE (MAX (UPPER (prs_bedrijfadres_xsl)),
|
||
NULL, NULL,
|
||
'XSL\CUST.XSL', NULL,
|
||
'XSL/CUST.XSL', NULL,
|
||
'XSL\MARX.XSL', NULL,
|
||
'XSL/MARX.XSL', NULL,
|
||
MAX (prs_bedrijfadres_xsl)),
|
||
MAX(prs_bedrijfadres_plugin)
|
||
INTO v_prs_bedrijfadres_url, v_prs_bedrijfadres_xsl, v_prs_bedrijfadres_plugin
|
||
FROM prs_bedrijfadres
|
||
WHERE prs_bedrijfadres_type = 'O'
|
||
AND (mld_typeopdr_key IS NULL OR mld_typeopdr_key = v_mld_typeopdr_key)
|
||
AND prs_bedrijf_key = v_mld_uitvoerende_keys
|
||
AND prs_bedrijf_key2 IS NULL
|
||
AND prs_bedrijfadres_startdatum = (SELECT MAX(ba.prs_bedrijfadres_startdatum)
|
||
FROM prs_bedrijfadres ba
|
||
WHERE ba.prs_bedrijf_key = v_mld_uitvoerende_keys
|
||
AND ba.prs_bedrijfadres_type = 'O'
|
||
AND (ba.mld_typeopdr_key IS NULL OR ba.mld_typeopdr_key = v_mld_typeopdr_key)
|
||
AND ba.prs_bedrijf_key2 IS NULL
|
||
AND ba.prs_bedrijfadres_startdatum <= SYSDATE);
|
||
END IF;
|
||
|
||
-- MARX#39902: Mogelijkheid om gefaseerd (premium) opdrachten per woco in te regelen
|
||
-- Ophalen van code of voor deze woco de opdracht naar de leverancier moet worden verstuurd, zeg maar, is leverancier voor deze opdrachtgever PREMIUM...
|
||
SELECT COALESCE (MAX (prs_bedrijf_bedrijf_status), 0), MAX (prs_bedrijf_bedrijf_chargemode)
|
||
INTO v_do_send_opdr, v_chargemode
|
||
FROM mar_v_woco_x_lev
|
||
WHERE w_prs_bedrijf_key = v_woco_prs_bedrijf_key AND l_prs_bedrijf_key = v_mld_uitvoerende_keys;
|
||
|
||
-- MARX#59855: Mareon Premum: REP-opdracht doorsturen en MUT opdrachten tegenhouden )
|
||
v_opdr_matcht_chargemode := mld_opdr_match_with_chargemode (p_mld_opdr_key, v_chargemode);
|
||
|
||
-- MARX#63028: Twinq koppeling: alleen sturen als GLN vanuit Tobias is gevuld
|
||
-- Is leverancier een VvE beheerder?
|
||
SELECT COUNT (*)
|
||
INTO l_lev_is_vvebeheerder
|
||
FROM mar_v_vvebeheerders
|
||
WHERE prs_bedrijf_key = v_mld_uitvoerende_keys;
|
||
|
||
SELECT COUNT (*)
|
||
INTO l_gln_vve_gevuld
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = p_mld_opdr_key
|
||
AND ko.mld_kenmerk_key = 29
|
||
AND ko.mld_kenmerkopdr_waarde IS NOT NULL
|
||
AND ko.mld_kenmerkopdr_verwijder IS NULL;
|
||
|
||
|
||
-- MARX#41154: Automatische mails obv techadres via putorders voor niet-Premiums omgevallen
|
||
-- Als v_prs_bedrijfadres_xsl NULL is (of cust.xsl), dan wel versturen, ook al is v_do_send_opdr niet 1.
|
||
|
||
-- MARX#83027 Koppeling Mareon - ActoBusiness (deel 2): bij een JSON-koppeling is xsl leeg, maar dan is v_do_send_opdr wel weer leidend, vandaar de extra conditie v_prs_bedrijfadres_plugin naast v_prs_bedrijfadres_xsl)
|
||
-- Zonder deze extra conditie zou de Premium koppeling namelijk actief zijn, ook in geval dat v_do_send_opdr niet aan staat, en dat zou niet goed zijn.
|
||
IF (v_prs_bedrijfadres_url IS NOT NULL)
|
||
AND (v_do_send_opdr = 1 OR (v_prs_bedrijfadres_xsl IS NULL AND v_prs_bedrijfadres_plugin IS NULL))
|
||
AND (v_opdr_matcht_chargemode = 1)
|
||
THEN
|
||
v_result := 1;
|
||
|
||
-- MARX#63028: Twinq koppeling: alleen sturen als GLN vanuit Tobias is gevuld
|
||
-- Echter, als de leverancier beheer is en GLN is leeg, dan moet het versturen alsnog niet, dus dan op 0 zetten:
|
||
IF l_lev_is_vvebeheerder <> 0 AND l_gln_vve_gevuld = 0
|
||
THEN
|
||
-- Het betreft een vve-beheerder en gln is niet gevuld
|
||
-- Dan niet naar Twinq sturen, resultaat is dan toch 0!
|
||
v_result := 0;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- Bepaal de waarde kenmerk '$MAR_PUO_MODE' bij de leverancier (prs_kenmerk_key = 23)
|
||
-- Resultaat is getal:
|
||
-- -1: er is iets fout gegaan, b.v. leverancier 'p_mld_uitvoerende_keys' bestaat niet.
|
||
-- leeg of 0: geen actie
|
||
-- 1: bij gewijzigde opdracht dan nogmaals via putorders versturen naar leverancier
|
||
-- 2: bij geannuleerde opdracht dan nogmaals via putorders versturen naar leverancier
|
||
-- 3. bij gewijzigde en/of geannuleerde opdracht dan nogmaals via putorders versturen naar leverancier
|
||
-- Resultaat
|
||
|
||
CREATE OR REPLACE FUNCTION mar_get_supplier_puo_mode (p_mld_uitvoerende_keys IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
SELECT puo_mode
|
||
INTO v_result
|
||
FROM mar_v_bedrijf_puo_mode
|
||
WHERE prs_bedrijf_key = p_mld_uitvoerende_keys;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := -1;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
-- Bepaal de waarde kenmerk '$MAR_PUO_MODE' van de leverancier van opdracht p_mld_opdr_key
|
||
|
||
CREATE OR REPLACE FUNCTION mar_get_opdracht_puo_mode (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_mld_uitvoerende_keys NUMBER (10);
|
||
v_result NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- v_result is resultaat van deze functie, en bepaalt de puo_mode bij de leverancier.
|
||
v_result := 0;
|
||
|
||
-- uitvoerende-bedrijf-keys
|
||
SELECT mld_uitvoerende_keys
|
||
INTO v_mld_uitvoerende_keys
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_result := mar_get_supplier_puo_mode (v_mld_uitvoerende_keys);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- Check of de aannemer de geannuleerde opdracht opnieuw wil ontvangen.
|
||
-- Leeg (= default, geen acties),
|
||
-- 1 (= bij opdracht wijziging opnieuw sturen),
|
||
-- 2 (= bij opdracht annuleren opnieuw sturen),
|
||
-- 3 (= bij zowel opdracht wijziging als annulering opnieuw sturen).
|
||
|
||
CREATE OR REPLACE FUNCTION mar_check_resend_annu_opdr (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
v_puo_mode NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- v_result is resultaat van deze functie, en bepaalt de puo_mode bij de leverancier.
|
||
v_result := 0;
|
||
v_puo_mode := mar_get_opdracht_puo_mode (p_mld_opdr_key);
|
||
|
||
IF BITAND (v_puo_mode, 2) = 2
|
||
THEN
|
||
v_result := 1;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := -1;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Check of de aannemer de geannuleerde opdracht opnieuw wil ontvangen.
|
||
-- Leeg (= default, geen acties),
|
||
-- 1 (= bij opdracht wijziging opnieuw sturen),
|
||
-- 2 (= bij opdracht annuleren opnieuw sturen),
|
||
-- 3 (= bij zowel opdracht wijziging als annulering opnieuw sturen).
|
||
|
||
CREATE OR REPLACE FUNCTION mar_check_resend_changed_opdr (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (10);
|
||
v_puo_mode NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- v_result is resultaat van deze functie, en bepaalt de puo_mode bij de leverancier.
|
||
v_result := 0;
|
||
v_puo_mode := mar_get_opdracht_puo_mode (p_mld_opdr_key);
|
||
|
||
IF BITAND (v_puo_mode, 1) = 1
|
||
THEN
|
||
v_result := 1;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := -1;
|
||
END;
|
||
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
-- Zie MARX#53975: Ook bij gewijzigde of geannuleerde opdrachten via putorders kunnen versturen
|
||
-- Met mld_opdr.mld_opdr_teverzenden op 2 wordt de opdracht onafhankelijk van de status (4 of 5) altijd verstuurd, bij mld_opdr_teverzenden = 1 wordt de opdracht alleen bij status 4 of 5 verstuurd (historisch zo geregeld).
|
||
-- Omdat bij annuleren opdracht de status op 1 wordt gezet , en zou het versturen met mld_opdr_teverzenden = 1 niet werken.
|
||
-- En bij een gewijzigde opdracht waarbij de status al op geaccepteerd staat (status 8), zou het versturen met mld_opdr_teverzenden = 1 ook niet werken
|
||
-- Om dit te wel laten werken (2de keer opnieuw versturen ongeacht de status), moet de mld_opdr.mld_opdr_verzonden leeg gemaakt worden en de mld_opdr.mld_opdr_teverzenden op 2 gezet worden.
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_resend_mld_opdr_2_lev (p_mld_opdr_key IN NUMBER, p_mld_opdr_teverzenden IN NUMBER)
|
||
IS
|
||
BEGIN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_teverzenden = p_mld_opdr_teverzenden, mld_opdr_verzonden = NULL
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#53107: SALES005 Annuleren van opdrachtverstrekking (p_mld_opdr_key) door persoon p_prs_perslid_key, b.v. vanuit opdrachtgever (import)
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_annuleer_mld_opdr (p_mld_opdr_key IN NUMBER, p_prs_perslid_key IN NUMBER, p_res_rsv_ruimte_key IN NUMBER, p_import_key IN NUMBER)
|
||
IS
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_push_notifyqueue NUMBER (10);
|
||
v_push_err_warn VARCHAR2(1);
|
||
|
||
v_do_send_opdr NUMBER (10);
|
||
v_do_send_annu_opdr NUMBER (10);
|
||
c_kenmerkopdr_key_annuleer NUMBER (10);
|
||
l_currentstatus NUMBER (10);
|
||
l_mld_statusopdr_omschrijving VARCHAR2 (100);
|
||
BEGIN
|
||
-- Default Error
|
||
v_push_err_warn := 'E';
|
||
|
||
v_errormsg := 'Opdracht ' || p_mld_opdr_key || ' kan niet geannuleerd worden';
|
||
c_kenmerkopdr_key_annuleer := 22;
|
||
|
||
v_errorhint :=
|
||
'prs_bedrijf van SYSTEM API user van import '
|
||
|| p_import_key
|
||
|| ' niet gevonden, de opdracht is niet geannuleerd';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
-- MARX#84279 Bij een niet correcte verwerkte API-call een HTTP4xx retourneren
|
||
-- MARX#84565 Mareon sync 400 - Bad Request
|
||
-- Maakt woco-bedrijf gebruikt van $MAR_PUSH_NOTIFYQUEUE?
|
||
-- Ja, in dat geval willen we dat een fout ook daadwerkelijk als fout wordt teruggestuurd naar de aanroeper, dus als 'E'.
|
||
-- Nee, in dat geval willen we dat een waarschuwing 'W' wordt gegegeven (AX2009, AX2012), om te voorkomen dat de SYNC AA geeft.
|
||
|
||
SELECT prs_bedrijf_push_nq, DECODE(prs_bedrijf_push_nq, 0, 'W', 'E')
|
||
INTO v_push_notifyqueue, v_push_err_warn
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
|
||
|
||
SELECT mld_statusopdr_key
|
||
INTO l_currentstatus
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
-- Zie ook api_opdrsoap en/of mld.setopdrachtstatus (package-functie)
|
||
-- Als status = 2,4,5,8 dan mag die naar status 1.
|
||
-- 1=Afgewezen
|
||
-- 2=Niet akkoord / 4=Gefiatteerd / 5=Te behandelen / 8=Geaccepteerd
|
||
|
||
|
||
IF (l_currentstatus = 2 OR l_currentstatus = 4 OR l_currentstatus = 5 OR l_currentstatus = 8)
|
||
THEN
|
||
-- De opdracht 'p_mld_opdr_key' krijgt de status afgewezen, er wordt getrackt dat opdrachtgever de opdracht heeft geannuleerd.
|
||
mld.setopdrachtstatus (p_mld_opdr_key, 1, p_prs_perslid_key);
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278): actie terug bij leverancier (mocht dat niet het geval zijn).
|
||
mld_opdr_bal_bij_lev (p_mld_opdr_key);
|
||
-- MARX#56368: Aanmaak opdracht en direct annuleer opdracht moet leiden tot geen opdracht: flexprop 'Reden van afwijzen' vullen met 'annuleer' (key 11)
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_annuleer, p_mld_opdr_key, 11);
|
||
-- OPNIEUW opdracht versturen naar aannemer, indien:
|
||
-- 1. aannemer een technisch adres voor (dit type) opdracht heeft waarop de bon of (ketenstandaard)XML bericht op afgeleverd kan worden
|
||
-- 2. aannemer bij (ketenstandaard)-XML bericht wel premium aannemer is
|
||
-- 3. aannemer geannuleerde opdrachten wel wil/kan ontvangen, dit wordt vastgelegd in het kenmerk '$MAR_PUO_MODE' bij de leverancier (prs_kenmerk_key = 23)
|
||
|
||
-- MARX#66773 Module Mareon Planning: bij annuleren opdracht (vanuit woco) moet een eventuele gekoppelde OFFICIEUZE planning res_rsv_ruimte etc ook verwijderd worden.
|
||
IF p_res_rsv_ruimte_key IS NOT NULL
|
||
THEN
|
||
res.remove(p_res_rsv_ruimte_key);
|
||
END IF;
|
||
-- Maar ook alle (eventuele) officiele (toekomstige) planningen verwijderen...
|
||
marx_delete_res_bij_mld_opdr(p_mld_opdr_key);
|
||
|
||
-- Eerst punten 1 en 2, oftewel check of aannemer tech adres heeft voor deze opdracht(type) waarnaar opdrachten gestuurd kunnen worden
|
||
v_do_send_opdr := mar_send_mld_opdr_to_supplier (p_mld_opdr_key);
|
||
-- Daarna punt 3, wil/kan de aannemer ook de geannuleerde opdracht ontvangen.
|
||
v_do_send_annu_opdr := mar_check_resend_annu_opdr (p_mld_opdr_key);
|
||
|
||
IF v_do_send_opdr = 1 AND v_do_send_annu_opdr = 1
|
||
THEN
|
||
mar_resend_mld_opdr_2_lev (p_mld_opdr_key, 2);
|
||
ELSE
|
||
IF v_do_send_opdr = 1
|
||
THEN
|
||
-- MARX#83818 Opdracht Annulering naar Premium aannemer mailen die geen ANN status kan ontvangen
|
||
marx_send_mao_ann_by_noti(p_mld_opdr_key, 'Opdracht is door opdrachtgever geannuleerd (ANN)');
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
IF (l_currentstatus = 1)
|
||
THEN
|
||
v_errorhint := 'Huidige status was al afgewezen, kan niet nogmaals worden afgewezen.';
|
||
fac.imp_writelog (p_import_key, 'W', v_errormsg, v_errorhint);
|
||
ELSE
|
||
SELECT mld_statusopdr_omschrijving
|
||
INTO l_mld_statusopdr_omschrijving
|
||
FROM mld_statusopdr
|
||
WHERE mld_statusopdr_key = l_currentstatus;
|
||
|
||
v_errorhint := 'Huidige status is ' || l_mld_statusopdr_omschrijving || ' , opdracht kan daarom niet worden afgewezen.';
|
||
fac.imp_writelog (p_import_key, v_push_err_warn, v_errormsg, v_errorhint);
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_annuleer_mld_opdr;
|
||
/
|
||
|
||
|
||
|
||
-- Intentie op een opdracht te versturen, b.v. als er verschillen tov een ORG zijn geconstateerd (dat gebeurt niet in deze functie, maar moet zelf in de aanroep gebeuren
|
||
-- En als dat zo is (er zijn verschillen), dan gaat deze prcdure:
|
||
-- Checken of een opdracht (opnieuw) gestuurd moet worden, adhv een aantal (algemene) Mareon criteria.
|
||
-- En zo ja, doet dat ook.
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_resend_order (p_mld_opdr_key IN NUMBER)
|
||
AS
|
||
v_do_send_opdr NUMBER (10);
|
||
v_do_send_changed_opdr NUMBER (10);
|
||
----------- Start procedure ---
|
||
BEGIN
|
||
|
||
-- OPNIEUW opdracht versturen naar aannemer, indien:
|
||
-- 1. aannemer een technisch adres voor (dit type) opdracht heeft waarop de bon of (ketenstandaard)XML bericht op afgeleverd kan worden
|
||
-- 2. aannemer bij (ketenstandaard)-XML bericht wel premium aannemer is
|
||
v_do_send_opdr := mar_send_mld_opdr_to_supplier (p_mld_opdr_key);
|
||
|
||
-- 3. aannemer gewijzigde opdrachten wel wil/kan ontvangen, dit wordt vastgelegd in het kenmerk '$MAR_PUO_MODE' bij de leverancier (prs_kenmerk_key = 23)
|
||
v_do_send_changed_opdr := mar_check_resend_changed_opdr (p_mld_opdr_key);
|
||
|
||
IF v_do_send_opdr = 1 AND v_do_send_changed_opdr = 1
|
||
THEN
|
||
mar_resend_mld_opdr_2_lev (p_mld_opdr_key, 2);
|
||
ELSE
|
||
IF v_do_send_opdr = 1
|
||
THEN
|
||
-- MARX#83818 Opdrachtupdates naar Premium aannemer mailen die geen MAO kan ontvangen
|
||
marx_send_mao_ann_by_noti(p_mld_opdr_key, 'Opdracht is door opdrachtgever aangevuld of is voorzien van meerwerk (MAO)');
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_opdr_track_wijziging (p_mld_opdr_key IN NUMBER,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_count_differences IN NUMBER)
|
||
IS
|
||
v_diff_label VARCHAR2 (100);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_aantal NUMBER (10);
|
||
v_push_notifyqueue NUMBER (10);
|
||
BEGIN
|
||
v_diff_label := 'Opdracht heeft ' || p_count_differences || ' wijzigingen';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
-- key 58 = Bedrijf $MAR_PUSH_NOTIFYQUEUE? Kan gevonden via view mar_v_bedrijf_push_NQ
|
||
SELECT prs_bedrijf_push_nq
|
||
INTO v_push_notifyqueue
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
IF (p_count_differences = 0 AND v_push_notifyqueue = 0)
|
||
THEN
|
||
-- Er zijn 0 wijzigingen en push staat UIT (= niet aan), die gaan we alleen tracken als dat 'vandaag' nog niet eerder is gebeurd...
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_oms = v_diff_label
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDUPD')
|
||
AND fac_tracking_refkey = p_mld_opdr_key
|
||
AND TRUNC (fac_tracking_datum) = TRUNC (SYSDATE);
|
||
|
||
IF (v_aantal = 0)
|
||
THEN
|
||
-- Vandaag zijn er nog geen tracking-records gemaakt met de tekst "Opdracht heeft 0 wijzigingen"
|
||
-- Zie MARX#64838: Onnodige tracking achterwege laten, de tracking met "0 wijzigingen" staan we op een dag max. 1x toe.
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
v_diff_label);
|
||
END IF;
|
||
ELSE
|
||
-- Er zijn 1 of meer wijzigingen, of de PUSH staat AAN, dan gaan we (onvoorwaardelijk) tracken
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
v_diff_label);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
'Exception: ' || v_diff_label);
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION marx_auth (p_prs_perslid_key IN NUMBER, p_module_code IN VARCHAR2)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER (1);
|
||
BEGIN
|
||
v_result := 0;
|
||
IF p_module_code = 'MARXREP'
|
||
THEN
|
||
SELECT DECODE(count(*), 0, 0, 1)
|
||
INTO v_result
|
||
FROM prs_v_aanwezigperslid p
|
||
WHERE p.prs_perslid_key = p_prs_perslid_key
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_gebruikersgroep gg, fac_groeprechten grr, fac_functie f
|
||
WHERE gg.prs_perslid_key = p.prs_perslid_key
|
||
AND grr.fac_groep_key = gg.FAC_GROEP_KEY
|
||
AND grr.ins_discipline_key = 3
|
||
AND f.fac_functie_key = grr.FAC_FUNCTIE_KEY
|
||
AND f.fac_functie_code = 'WEB_MLDBOF'
|
||
)
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_gebruikersgroep gg, fac_groeprechten grr, fac_functie f
|
||
WHERE gg.prs_perslid_key = p.prs_perslid_key
|
||
AND grr.fac_groep_key = gg.FAC_GROEP_KEY
|
||
AND grr.ins_discipline_key = 3
|
||
AND f.fac_functie_key = grr.FAC_FUNCTIE_KEY
|
||
AND f.fac_functie_code = 'WEB_ORDBOF'
|
||
);
|
||
END IF;
|
||
RETURN v_result;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
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#86957 Nieuwe mogelijkheid voor dispatching Vesteda-opdrachten naar JH-vestigingen: UDR-rapport voor PostcodeVertaalGLN.asp
|
||
CREATE OR REPLACE VIEW marx_v_vertaal_postcodegln
|
||
(FCLT_3D_USER_KEY, postcode, gln_lev, 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 = 12
|
||
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;
|
||
|
||
CREATE OR REPLACE VIEW marx_udr_vertaal_postcodegln
|
||
(FCLT_3D_USER_KEY, postcode, gln_lev, prs_bedrijf_key)
|
||
AS
|
||
SELECT FCLT_3D_USER_KEY, postcode || '-' ||
|
||
(SELECT TO_CHAR(COALESCE(MIN(pc1.postcode), '10000') - 1)
|
||
FROM marx_v_vertaal_postcodegln pc1
|
||
WHERE pc1.prs_bedrijf_key IN (SELECT prs_bedrijf_key2 FROM marx_v_gelieerde_lev_bedrijven WHERE prs_bedrijf_key1 = pc1.prs_bedrijf_key)
|
||
AND pc1.fclt_3d_user_key = pc.fclt_3d_user_key
|
||
AND pc1.postcode > pc.postcode) postcode,
|
||
gln_lev,
|
||
prs_bedrijf_key
|
||
FROM marx_v_vertaal_postcodegln pc;
|
||
|
||
|
||
-- MARX#86957 Nieuwe mogelijkheid voor dispatching Vesteda-opdrachten naar JH-vestigingen
|
||
CREATE OR REPLACE FUNCTION mld_opdr_vertaal_postcode_gln (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_result NUMBER(10);
|
||
v_woco_prs_bedrijf_key NUMBER(10);
|
||
v_mld_uitvoerende_keys NUMBER(10);
|
||
v_prs_perslid_key NUMBER(10);
|
||
v_bedrijf_bedrijf_chargemode NUMBER(10);
|
||
|
||
v_bit_vertaal_postcode_gln NUMBER(10);
|
||
|
||
BEGIN
|
||
v_result := 0;
|
||
v_bit_vertaal_postcode_gln := 16;
|
||
BEGIN
|
||
-- uitvoerende-bedrijf-key, woco-perslid
|
||
SELECT mld_uitvoerende_keys, prs_perslid_key
|
||
INTO v_mld_uitvoerende_keys, v_prs_perslid_key
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
SELECT MAX (prs_bedrijf_bedrijf_chargemode)
|
||
INTO v_bedrijf_bedrijf_chargemode
|
||
FROM mar_v_woco_x_lev
|
||
WHERE w_prs_bedrijf_key = v_woco_prs_bedrijf_key AND l_prs_bedrijf_key = v_mld_uitvoerende_keys;
|
||
IF v_bedrijf_bedrijf_chargemode IS NOT NULL THEN
|
||
-- ALs chargemode niet is ingevuld, dan moet er niet vertaald worden (default)
|
||
-- Oftewel, wil je vertalen, dan moet bitje 4 gezet zijn (waarmee chargemode gevuld is)
|
||
SELECT DECODE (BITAND (v_bedrijf_bedrijf_chargemode, v_bit_vertaal_postcode_gln), 0, 0, 1) INTO v_result FROM DUAL;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_result := 0;
|
||
END;
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- Kijkt of leverancier een vertaling heeft ingesteld voor v_postcode (formaat nnnn, dus de 4 cijfers van postcode) in de tabel.
|
||
-- De tabel zou een sluitende reeks van postcodes moeten hebben, van 1000-9999.
|
||
-- Als v_postcode valt in een van - t/m valt, dan wordt bijbehorende GLN opgeleverd.
|
||
-- Wordt geen record gevonden, dan wordt NULL opgeleverd.
|
||
|
||
CREATE OR REPLACE FUNCTION marx_do_vertaal_postcode_GLN (v_prs_bedrijf_key IN NUMBER, v_postcode IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_result VARCHAR2(1000);
|
||
BEGIN
|
||
|
||
v_result := NULL;
|
||
IF LENGTH(v_postcode) = 4
|
||
THEN
|
||
SELECT MAX(gln_lev)
|
||
INTO v_result
|
||
FROM marx_v_vertaal_postcodegln pc
|
||
WHERE pc.prs_bedrijf_key IN (SELECT prs_bedrijf_key2 FROM marx_v_gelieerde_lev_bedrijven WHERE prs_bedrijf_key1 = v_prs_bedrijf_key)
|
||
AND pc.postcode = (SELECT MAX(pc2.postcode) FROM marx_v_vertaal_postcodegln pc2
|
||
WHERE pc2.prs_bedrijf_key = pc.prs_bedrijf_key
|
||
AND fac.safe_to_number(pc2.postcode) <= fac.safe_to_number(v_postcode));
|
||
END IF;
|
||
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
|
||
-- Eikenboomlaan 123-1
|
||
-- 1234 AB Amsterdam
|
||
CREATE OR REPLACE FUNCTION marx_mld_construct_locatie (pmelding_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
CURSOR c1
|
||
IS
|
||
SELECT k.mld_kenmerk_key,
|
||
t.mld_srtkenmerk_kenmerktype,
|
||
t.mld_srtkenmerk_nmin nmin,
|
||
t.mld_srtkenmerk_nmax nmax,
|
||
t.fac_kenmerkdomein_key,
|
||
k.mld_kenmerk_volgnummer,
|
||
COALESCE (
|
||
lcl.x ('mld_kenmerk_omschrijving', k.mld_kenmerk_key, k.mld_kenmerk_omschrijving),
|
||
lcl.x ('mld_srtkenmerk_omschrijving',
|
||
t.mld_srtkenmerk_key,
|
||
t.mld_srtkenmerk_omschrijving))
|
||
mld_kenmerk_omschrijving,
|
||
v.mld_kenmerkmelding_waarde
|
||
FROM mld_srtkenmerk t, mld_kenmerk k, mld_kenmerkmelding v
|
||
WHERE v.mld_kenmerk_key = k.mld_kenmerk_key
|
||
AND k.mld_srtkenmerk_key = t.mld_srtkenmerk_key
|
||
AND BITAND(t.mld_srtkenmerk_systeem,4) = 0 -- gewoon niet als vertrouwelijk
|
||
AND k.mld_kenmerk_verwijder IS NULL
|
||
AND t.mld_srtkenmerk_verwijder IS NULL
|
||
AND v.mld_melding_key = pmelding_key
|
||
AND k.mld_kenmerk_key IN (9, 10, 19, 3, 4)
|
||
ORDER BY k.mld_kenmerk_volgnummer,
|
||
UPPER(COALESCE(mld_kenmerk_omschrijving, mld_srtkenmerk_omschrijving)); --field-order always in native language order
|
||
waarde mld_kenmerkmelding.mld_kenmerkmelding_waarde%TYPE;
|
||
builder VARCHAR2 (4000 CHAR);
|
||
l_space VARCHAR2 (1);
|
||
l_cr NUMBER(1);
|
||
BEGIN
|
||
l_cr := 0; -- Default geen CR (Carriage return), alleen als minimaal een van de flexprops 9 = straatnaam, 10 = huisnr, 19 = huisnr toevoeging is gevuld, en minimaal een van de flexprops 3 = postcode, 4 = plaatsnaam is gevuld
|
||
FOR r IN c1 LOOP
|
||
waarde := r.mld_kenmerkmelding_waarde;
|
||
IF waarde IS NOT NULL AND waarde <> '-1'
|
||
-- gevuld
|
||
THEN
|
||
IF r.mld_srtkenmerk_kenmerktype = 'V'
|
||
-- checkbox
|
||
THEN
|
||
IF waarde = '0'
|
||
THEN
|
||
waarde := lcl.l ('lcl_check_0');
|
||
ELSIF waarde = '1'
|
||
THEN
|
||
waarde := lcl.l ('lcl_check_1');
|
||
END IF;
|
||
ELSIF r.mld_srtkenmerk_kenmerktype = 'R' OR r.mld_srtkenmerk_kenmerktype = 'S'
|
||
-- referentie
|
||
THEN
|
||
waarde := flx.getdomeinwaarde (r.fac_kenmerkdomein_key, TO_NUMBER (waarde));
|
||
END IF;
|
||
-- In het zeldzame geval dat de tekst te lang zou worden slaan we sommige
|
||
-- kenmerken gewoon silent over. Niet ideaal maar toch vrij theoretisch
|
||
IF (COALESCE(LENGTH(builder),0) + LENGTH(r.mld_kenmerk_omschrijving) + LENGTH(waarde) < 3990)
|
||
THEN
|
||
-- Uitleg: 9 = straatnaam, 10 = huisnr, 19 = huisnr toevoeging, 3 = postcode, 4 = plaatsnaam, alle kunnen gevuld of leeg zijn.
|
||
l_space := '';
|
||
IF r.mld_kenmerk_key IN (10, 3, 4) THEN l_space := ' '; END IF;
|
||
IF r.mld_kenmerk_key IN (9, 10, 19) THEN l_cr := 1; END IF;
|
||
IF r.mld_kenmerk_key IN (3, 4)
|
||
THEN
|
||
IF l_cr = 1
|
||
THEN -- Plaats eenmalig een CR (ervoor), daarom gaan we l_cr resetten
|
||
waarde:= CHR(10) || waarde;
|
||
l_cr := 0;
|
||
END IF;
|
||
END IF;
|
||
builder := builder || l_space || waarde;
|
||
END IF;
|
||
END IF;
|
||
END LOOP;
|
||
RETURN TRIM(builder);
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#58945: Bijlages bij opdrachten die al verstuurd zijn
|
||
-- MARX#72932 Testbevinding bij bundelen opdrachten: MAO gewenst in portaal
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_maak_mao (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_order_typering_A NUMBER (10);
|
||
v_order_status_B NUMBER (10);
|
||
v_order_plan_tosend_C NUMBER (10);
|
||
v_order_is_send_D NUMBER (10);
|
||
c_kenmerkopdr_key_opdrtype NUMBER (10);
|
||
BEGIN
|
||
c_kenmerkopdr_key_opdrtype := 25;
|
||
|
||
-- MARX#72932 Testbevinding bij bundelen opdrachten: MAO gewenst in portaal
|
||
-- Er is minimaal 1 aanpassing in de opdracht
|
||
-- We willen er MAO van maken, eerst enkele voorwaarden aftasten of dat wel gewenst is, mn in geval waarin de opdracht nog niet verstuurd is naar Premium (maar ingepland staat om te versturen)
|
||
|
||
-- v_order_typering_A (is opdracht ORG of GAR?) heeft waarde 0 of 1:
|
||
-- 1 als opdracht ORG/GAR (of onbekend) is,
|
||
-- 0 als opdracht (al) MAO is.
|
||
SELECT COALESCE (MAX (0), 1)
|
||
INTO v_order_typering_A
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = p_mld_opdr_key
|
||
AND ko.mld_kenmerk_key = c_kenmerkopdr_key_opdrtype
|
||
AND ko.mld_kenmerkopdr_verwijder IS NULL
|
||
AND UPPER (ko.mld_kenmerkopdr_waarde) = UPPER (GetMareonDescription ('mld_opdr_typering', 'MAO'));
|
||
|
||
-- v_order_status_B (is status van opdracht inactief (= te behandelen of afgemeld of afgerond of afgewezen) heeft waarde 0 of 1:
|
||
-- 0 als opdracht gesloten is (1 Afgewezen / 6 Afgemeld / 7 Verwerkt/ 9 Afgerond)
|
||
-- 1 als opdracht actief is (2 Niet akkoord / 3 Ter fiattering / 4 Gefiatteerd / 5 Te behandelen / 8 Geaccepteerd / 10 Ter goedkeuring)
|
||
|
||
-- v_order_plan_tosend_C (= opdracht zou gestuurd moeten worden) heeft waarde 0 of 1:
|
||
-- 1 als opdracht gestuurd moet worden (ingepland te versturen)
|
||
-- 0 als opdracht niet gestuurd moet worden (niet ingepland te versturen)
|
||
|
||
-- v_order_is_send_D (= opdracht is zojuist gestuurd, nadat deze sync-sessie is gestart)
|
||
-- 0 als niet verstuurd
|
||
-- 1 als wel verstuurd
|
||
|
||
SELECT DECODE (mld_statusopdr_key, 1, 0, 6, 0, 7, 0, 9, 0, 1),
|
||
LEAST (COALESCE (mld_opdr_teverzenden, 0),1),
|
||
CASE WHEN mld_opdr_verzonden IS NULL THEN 0 ELSE 1 END
|
||
INTO v_order_status_B, v_order_plan_tosend_C, v_order_is_send_D
|
||
FROM mld_opdr o
|
||
WHERE o.mld_opdr_key = p_mld_opdr_key;
|
||
|
||
RETURN LEAST (
|
||
(v_order_typering_A * v_order_status_B * v_order_is_send_D)
|
||
+ (v_order_typering_A * v_order_status_B * (1 - v_order_plan_tosend_C)),
|
||
1);
|
||
END;
|
||
/
|
||
|
||
-- Levert True (1) op als alle 3 voorwaarden wordt voldaan (en anders False/0):
|
||
-- mld_opdr_teverzenden = 1
|
||
-- mld_opdr_verzonden = gevuld met datum
|
||
-- supplier kan/wil gewijzigde opdrachten ontvangen.
|
||
CREATE OR REPLACE FUNCTION mar_post_action_resend_order (p_mld_opdr_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_order_status_B NUMBER (10);
|
||
v_order_plan_tosend_C NUMBER (10);
|
||
v_order_is_send_D NUMBER (10);
|
||
v_supplier_wants_resend_E NUMBER (10);
|
||
|
||
BEGIN
|
||
-- v_order_plan_tosend_C (= opdracht zou gestuurd moeten worden) heeft waarde 0 of 1:
|
||
-- 1 als opdracht gestuurd moet worden (ingepland te versturen)
|
||
-- 0 als opdracht niet gestuurd moet worden (niet ingepland te versturen)
|
||
|
||
-- v_order_is_send_D (= opdracht is zojuist gestuurd, nadat deze sync-sessie is gestart)
|
||
-- 0 als niet verstuurd
|
||
-- 1 als wel verstuurd
|
||
|
||
SELECT COALESCE (mld_opdr_teverzenden, 0),
|
||
CASE WHEN mld_opdr_verzonden IS NULL THEN 0 ELSE 1 END
|
||
INTO v_order_plan_tosend_C, v_order_is_send_D
|
||
FROM mld_opdr o
|
||
WHERE o.mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_supplier_wants_resend_E := mar_check_resend_changed_opdr (p_mld_opdr_key);
|
||
-- Als deze in -1 oplevert (theoretisch geval, agv foutje), dan ombuigen naar 0.
|
||
IF (v_supplier_wants_resend_E = -1)
|
||
THEN
|
||
v_supplier_wants_resend_E := 0;
|
||
END IF;
|
||
|
||
RETURN LEAST ((v_order_plan_tosend_C * v_order_is_send_D * v_supplier_wants_resend_E), 1);
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
-- MARX54179: Een gewijzigde opdracht (key p_mld_opdr_key) opnieuw aanbieden aan Mareon voor verwerking, p_import_key is nodig omdat de nieuwe (gewijzigde) gegevens zich in de import-tabel bevinden en hier nodig is.
|
||
-- En ook kunnen de (import/verwerkings)resultaten in de import logging worden gezet.
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_wijzig_mld_opdr (p_mld_opdr_key IN NUMBER, p_res_rsv_ruimte_key IN NUMBER, p_import_key IN NUMBER, p_erp_opdrachtgever IN VARCHAR2)
|
||
IS
|
||
v_aanduiding VARCHAR2 (2000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
l_currentstatus NUMBER (10);
|
||
l_mld_statusopdr_omschrijving VARCHAR2 (100);
|
||
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_prs_bedrijf_verwerkprijzen NUMBER (10);
|
||
|
||
|
||
v_count_differences NUMBER (10);
|
||
v_count_mat_differences NUMBER (10);
|
||
v_eerste_keer NUMBER (10);
|
||
|
||
v_do_send_opdr NUMBER (10);
|
||
v_do_send_changed_opdr NUMBER (10);
|
||
|
||
v_mld_opdr_id VARCHAR2 (30);
|
||
v_mld_melding_key NUMBER (10);
|
||
|
||
v_mld_melding_huurder VARCHAR2 (1000);
|
||
v_mld_melding_imp_huurder VARCHAR2 (1000);
|
||
|
||
v_mld_melding_straatnaam VARCHAR2 (1000);
|
||
v_mld_melding_huisnr VARCHAR2 (1000);
|
||
v_mld_melding_huisnr2 VARCHAR2 (1000);
|
||
v_mld_melding_postcode VARCHAR2 (1000);
|
||
v_mld_melding_plaats VARCHAR2 (1000);
|
||
v_mld_melding_telefoonnr VARCHAR2 (1000);
|
||
v_mld_melding_mobiel VARCHAR2 (1000);
|
||
v_mld_melding_email VARCHAR2 (1000);
|
||
v_mld_melding_loc_aanduiding VARCHAR2 (1000);
|
||
|
||
v_mld_opdr_omschrijving mld_opdr.mld_opdr_omschrijving%TYPE;
|
||
v_flexsummary mld_opdr.mld_opdr_omschrijving%TYPE;
|
||
v_uitvoeringslocatie VARCHAR2 (1000);
|
||
|
||
v_straatnaam VARCHAR2 (100);
|
||
v_huisnr VARCHAR2 (100);
|
||
v_huisnr_toev VARCHAR2 (100);
|
||
|
||
v_mld_opdr_datumbegin DATE;
|
||
v_mld_opdr_imp_datumbegin DATE;
|
||
v_mld_opdr_plandatum DATE;
|
||
v_mld_opdr_imp_plandatum DATE;
|
||
v_mld_opdr_einddatum DATE;
|
||
v_mld_opdr_imp_einddatum DATE;
|
||
|
||
v_mld_opdr_opzichter VARCHAR2 (1000);
|
||
v_mld_opdr_complexnr VARCHAR2 (1000);
|
||
v_mld_opdr_pandnr VARCHAR2 (1000);
|
||
v_mld_opdr_VGEnummer VARCHAR2 (1000);
|
||
v_mld_opdr_bouwjaar VARCHAR2 (1000);
|
||
|
||
v_mld_opdr_soort VARCHAR2 (1000);
|
||
v_mld_opdr_typering VARCHAR2 (1000);
|
||
v_mld_opdr_afspraak VARCHAR2 (1000);
|
||
|
||
v_mld_opdr_gln_vve VARCHAR2 (1000);
|
||
|
||
v_mld_opdr_gln_eigenaar VARCHAR2 (1000);
|
||
v_mld_opdr_naam_eigenaar VARCHAR2 (1000);
|
||
v_mld_opdr_adres_eigenaar VARCHAR2 (1000);
|
||
v_mld_opdr_postcode_eigenaar VARCHAR2 (1000);
|
||
v_mld_opdr_plaats_eigenaar VARCHAR2 (1000);
|
||
|
||
v_opdr_heeft_materiaal NUMBER (10);
|
||
-- Materiaal regels
|
||
v_mld_opdr_materiaal_code VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_aantal VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_prijs VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_omschr VARCHAR2 (1024);
|
||
|
||
|
||
v_mld_opdr_materiaal_groep VARCHAR2 (1024);
|
||
v_mld_opdr_materiaal_extra1 VARCHAR2 (1024);
|
||
v_mld_opdr_materiaal_extra2 VARCHAR2 (1024);
|
||
v_mld_opdr_materiaal_extra3 VARCHAR2 (4000);
|
||
v_mld_opdr_materiaal_extra3new VARCHAR2 (4000);
|
||
v_mld_opdr_materiaal_extra4 VARCHAR2 (4000);
|
||
|
||
v_mld_opdr_materiaal_eenhcode VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_eenheid VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_btwperc VARCHAR2 (256);
|
||
|
||
|
||
v_fin_btwtabelwaarde_key NUMBER (10);
|
||
v_btwperc_key NUMBER (10);
|
||
v_mld_opdr_kosten mld_opdr.mld_opdr_kosten%TYPE;
|
||
|
||
c_kenmerk_key_cust_name NUMBER (10);
|
||
c_kenmerk_key_cust_adres NUMBER (10);
|
||
c_kenmerk_key_cust_straatnaam NUMBER (10);
|
||
c_kenmerk_key_cust_huisnr NUMBER (10);
|
||
c_kenmerk_key_cust_huisnr_toev NUMBER (10);
|
||
c_kenmerk_key_cust_postcode NUMBER (10);
|
||
c_kenmerk_key_cust_plaats NUMBER (10);
|
||
c_kenmerk_key_cust_telefoonnr NUMBER (10);
|
||
c_kenmerk_key_cust_mobielnr NUMBER (10);
|
||
c_kenmerk_key_cust_email NUMBER (10);
|
||
c_kenmerk_key_cust_object_oms NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_locatie NUMBER (10);
|
||
c_kenmerkopdr_key_memo NUMBER (10);
|
||
c_kenmerkopdr_key_opzichter NUMBER (10);
|
||
c_kenmerkopdr_key_complexnr NUMBER (10);
|
||
c_kenmerkopdr_key_pandnummer NUMBER (10);
|
||
c_kenmerkopdr_key_VGEnummer NUMBER (10);
|
||
c_kenmerkopdr_key_bouwjaar NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_opdrsoort NUMBER (10);
|
||
c_kenmerkopdr_key_opdrtype NUMBER (10);
|
||
c_kenmerkopdr_key_opdrafspraak NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_opdr_gln_vve NUMBER (10);
|
||
c_kenmerkopdr_key_uitv_locatie NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_opdr_gln_eig NUMBER (10);
|
||
c_kenmerkopdr_key_eig_naam NUMBER (10);
|
||
c_kenmerkopdr_key_eig_adres NUMBER (10);
|
||
c_kenmerkopdr_key_eig_pc NUMBER (10);
|
||
c_kenmerkopdr_key_eig_plaats NUMBER (10);
|
||
|
||
v_push_notifyqueue NUMBER (10);
|
||
v_push_err_warn VARCHAR2(1);
|
||
|
||
v_maak_mao NUMBER (10);
|
||
|
||
c_date_2099 DATE;
|
||
|
||
|
||
|
||
-- 01 - Mareon execcode: 1, 2 of 3 en bepaalt de soort regel en manier van verwerken:
|
||
-- exec_code = 1 : Hoofdregel, de AX inkooporder IONR-nummer i.c.m. de AX-opdracht (task-id)
|
||
-- exec_code = 2 : Bijbehorende extra kenmerken behorende bij exec_code 1, op ditzelfde nivo.
|
||
-- exec_code = 3 : Bijbehorende materiaalregels (kunnen dus meer regels zijn, voorzien van een regelnr in v_mld_opdr_materiaal_linenr)
|
||
|
||
|
||
-- Alle ingelezen AX opdrachten, d.w.z. de HOOFD-opdracht (IONR) met SUB-opdracht (tasks), oftewel hier NIET de materiaal regels
|
||
-- Gesorteerd op TASKID 'p_mld_opdr_ordernr', zodat als er meerdere SUB-opdrachten bij 1 IONR zijn, die netjes in volgorde worden aangemaakt (altijd beter dan random).
|
||
CURSOR c_ax_changed_opdracht (
|
||
p_mld_opdr_externnr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_execcode = '1'
|
||
AND mld_opdr_materiaal_linenr IS NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
-- Van de ingelezen HOOFD-opdracht met SUB-opdracht (cursor hierboven) enkele aanvullende gegevens die horen bij HOOFDOPDRACHT (IONR), zoals opzichter, perceelnr, pandid etc.
|
||
CURSOR c_ax_opdrachten_overige_regels (
|
||
p_execcode VARCHAR2,
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_ordernr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = p_execcode
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_ordernr = p_mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
-- Alle ANDERE! ingelezen AX HOOFD-opdrachten van 1 inkooporder IONR (inkooporder) / externe opdrachtnummer 'p_mld_opdr_externnr'
|
||
-- ANDERE! (of beter gezegd: overige) betekent dus met dezelfde IONR maar NIET! dezelfde TASKID 'p_mld_opdr_ordernr'
|
||
-- Ook hier gesorteerd op TASKID 'p_mld_opdr_ordernr'.
|
||
CURSOR c_ax_opdrachten_1_inkooporder (
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_ordernr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '1'
|
||
AND mld_opdr_materiaal_linenr IS NULL
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_ordernr <> p_mld_opdr_ordernr
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
|
||
-- Materiaal-regels hebben een gevulde (unieke) opdrachtline-nummer
|
||
-- We willen alle materiaal-regels van dezelfde IONR (inkooporder) / externe opdrachtnummer 'p_mld_opdr_externnr' vergelijken met de bestaande opdracht(materiaal)regel in de DB en ook omgekeerd, die uit de DB vergelijken met de nieuwe import.
|
||
-- En ook hier gesorteerd op 'p_mld_opdr_ordernr', en daarbinnen op linenummer.
|
||
-- Deze cursor is bedoeld voor UPDATE, oftewel de materiaal-records bestaan aan beide kanten
|
||
CURSOR c_ax_upd_opdrachten_materiaal (p_mld_opdr_externnr VARCHAR2, p_mld_opdr_key NUMBER)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '3'
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_materiaal_linenr IS NOT NULL
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_opdr_materiaal mom
|
||
WHERE mom.mld_opdr_key = p_mld_opdr_key AND mom.mld_opdr_materiaal_id = mld_opdr_materiaal_linenr)
|
||
ORDER BY mld_opdr_materiaal_linenr;
|
||
|
||
-- Opdrachtregels (die nog in DB bestaan) maar niet meer in import, dus die vervallen moeten worden gemaakt (delete)
|
||
CURSOR c_ax_del_opdrachten_materiaal (
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_key NUMBER)
|
||
IS
|
||
SELECT mld_opdr_materiaal_id, mld_opdr_materiaal_code, mld_opdr_materiaal_omschr
|
||
FROM mld_opdr_materiaal mom
|
||
WHERE mom.mld_opdr_key = p_mld_opdr_key
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '3'
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_materiaal_linenr IS NOT NULL
|
||
AND mld_opdr_materiaal_linenr = mom.mld_opdr_materiaal_id);
|
||
|
||
-- Nieuwe opdrachtregels (die nog niet in DB bestaan)
|
||
CURSOR c_ax_ins_opdrachten_materiaal (p_mld_opdr_externnr VARCHAR2, p_mld_opdr_key NUMBER)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '3'
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_materiaal_linenr IS NOT NULL
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_opdr_materiaal mom
|
||
WHERE mom.mld_opdr_key = p_mld_opdr_key AND mom.mld_opdr_materiaal_id = mld_opdr_materiaal_linenr)
|
||
ORDER BY mld_opdr_materiaal_linenr;
|
||
BEGIN
|
||
c_kenmerk_key_cust_name := 1;
|
||
c_kenmerk_key_cust_adres := 2;
|
||
c_kenmerk_key_cust_straatnaam := 9;
|
||
c_kenmerk_key_cust_huisnr := 10;
|
||
c_kenmerk_key_cust_huisnr_toev := 19;
|
||
c_kenmerk_key_cust_postcode := 3;
|
||
c_kenmerk_key_cust_plaats := 4;
|
||
c_kenmerk_key_cust_telefoonnr := 5;
|
||
c_kenmerk_key_cust_mobielnr := 8;
|
||
c_kenmerk_key_cust_email := 18;
|
||
c_kenmerk_key_cust_object_oms := 6;
|
||
|
||
c_kenmerkopdr_key_locatie := 11;
|
||
c_kenmerkopdr_key_memo := 12;
|
||
|
||
c_kenmerkopdr_key_opzichter := 13;
|
||
c_kenmerkopdr_key_complexnr := 14;
|
||
c_kenmerkopdr_key_pandnummer := 15;
|
||
c_kenmerkopdr_key_VGEnummer := 16;
|
||
c_kenmerkopdr_key_bouwjaar := 57;
|
||
|
||
c_kenmerkopdr_key_opdrsoort := 24;
|
||
c_kenmerkopdr_key_opdrtype := 25;
|
||
c_kenmerkopdr_key_opdrafspraak := 26;
|
||
|
||
c_kenmerkopdr_key_opdr_gln_vve := 29;
|
||
c_kenmerkopdr_key_uitv_locatie := 37;
|
||
|
||
c_kenmerkopdr_key_opdr_gln_eig := 38;
|
||
c_kenmerkopdr_key_eig_naam := 101;
|
||
c_kenmerkopdr_key_eig_adres := 102;
|
||
c_kenmerkopdr_key_eig_pc := 103;
|
||
c_kenmerkopdr_key_eig_plaats := 104;
|
||
|
||
c_date_2099 := to_date('2099-12-31 00:00','YYYY-MM-DD hh24:mi');
|
||
|
||
v_count_differences := 0;
|
||
|
||
-- Default Error
|
||
v_push_err_warn := 'E';
|
||
|
||
v_aanduiding := '';
|
||
v_errormsg := 'Fout';
|
||
v_errorhint := 'Fout in de functie mar_wijzig_mld_opdr';
|
||
|
||
SELECT mld_opdr_id, mld_melding_key
|
||
INTO v_mld_opdr_id, v_mld_melding_key
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_errorhint := 'SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_errorhint :=
|
||
'prs_bedrijf van SYSTEM API user van import '
|
||
|| p_import_key
|
||
|| ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- MARX#84279 Bij een niet correcte verwerkte API-call een HTTP4xx retourneren
|
||
-- MARX#84565 Mareon sync 400 - Bad Request
|
||
-- Maakt woco-bedrijf gebruikt van $MAR_PUSH_NOTIFYQUEUE?
|
||
-- Ja, in dat geval willen we dat een fout ook daadwerkelijk als fout wordt teruggestuurd naar de aanroeper, dus als 'E'.
|
||
-- Nee, in dat geval willen we dat een waarschuwing 'W' wordt gegegeven (AX2009, AX2012), om te voorkomen dat de SYNC AA geeft.
|
||
|
||
SELECT prs_bedrijf_push_nq, DECODE(prs_bedrijf_push_nq, 0, 'W', 'E')
|
||
INTO v_push_notifyqueue, v_push_err_warn
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
v_errorhint :=
|
||
'Setting $Verwerken eenheidsprijzen van opdrachtgever van import '
|
||
|| p_import_key
|
||
|| ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_bedrijf_verwerkprijzen
|
||
INTO v_prs_bedrijf_verwerkprijzen
|
||
FROM mar_v_bedrijf_verwerkprijzen
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
SELECT mld_statusopdr_key
|
||
INTO l_currentstatus
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
-- Zie ook api_opdrsoap en/of mld.setopdrachtstatus (package-functie)
|
||
-- Allen bij lopende opdracht mag een wijziging, anders niet, dus alleen als status <> 1, 2, 6, 7, 9, dan is wijziging akkoord.
|
||
-- 1=Afgewezen / 2=Niet akkoord / 6=Afgemeld / 7=Verwerkt / 9=Afgerond
|
||
|
||
IF NOT (l_currentstatus = 1 OR l_currentstatus = 2 OR l_currentstatus = 6 OR l_currentstatus = 7 OR l_currentstatus = 9)
|
||
THEN
|
||
v_eerste_keer := 1;
|
||
|
||
FOR rec_ax IN c_ax_changed_opdracht (v_mld_opdr_id)
|
||
LOOP
|
||
BEGIN
|
||
-- Hoewel dit een loop is, toch eenmalig uitvoeren, d.w.z. alleen voor het 1e record (van alle subopdrachten die b.v. vanuit AX naast elkaar zijn platgeslagen en toch dezelfde info bevatten op hoofd-nivo)
|
||
IF v_eerste_keer = 1
|
||
THEN
|
||
v_errorhint :=
|
||
'Fout bij ophalen van de geimporteerde gegevens bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
|
||
SELECT mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_melding_loc_aanduiding,
|
||
mld_opdr_omschrijving,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_opzichter,
|
||
mld_opdr_complexnr,
|
||
mld_opdr_pandnr,
|
||
mld_opdr_VGEnummer,
|
||
mld_opdr_bouwjaar,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_opdr_gln_vve,
|
||
mld_opdr_gln_eigenaar,
|
||
mld_opdr_naam_eigenaar,
|
||
mld_opdr_adres_eigenaar,
|
||
mld_opdr_postcode_eigenaar,
|
||
mld_opdr_plaats_eigenaar
|
||
INTO v_mld_melding_huurder,
|
||
v_mld_melding_straatnaam,
|
||
v_mld_melding_huisnr,
|
||
v_mld_melding_huisnr2,
|
||
v_mld_melding_postcode,
|
||
v_mld_melding_plaats,
|
||
v_mld_melding_telefoonnr,
|
||
v_mld_melding_mobiel,
|
||
v_mld_melding_email,
|
||
v_mld_melding_loc_aanduiding,
|
||
v_mld_opdr_omschrijving,
|
||
v_mld_opdr_datumbegin,
|
||
v_mld_opdr_plandatum,
|
||
v_mld_opdr_einddatum,
|
||
v_mld_opdr_opzichter,
|
||
v_mld_opdr_complexnr,
|
||
v_mld_opdr_pandnr,
|
||
v_mld_opdr_VGEnummer,
|
||
v_mld_opdr_bouwjaar,
|
||
v_mld_opdr_soort,
|
||
v_mld_opdr_typering,
|
||
v_mld_opdr_afspraak,
|
||
v_mld_opdr_gln_vve,
|
||
v_mld_opdr_gln_eigenaar,
|
||
v_mld_opdr_naam_eigenaar,
|
||
v_mld_opdr_adres_eigenaar,
|
||
v_mld_opdr_postcode_eigenaar,
|
||
v_mld_opdr_plaats_eigenaar
|
||
FROM mar_v_tmp_opdr_woco_x_lev
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
-- NAW verschillen
|
||
v_straatnaam := rec_ax.mld_melding_cust_straat;
|
||
v_huisnr := rec_ax.mld_melding_cust_huisnr;
|
||
v_huisnr_toev := rec_ax.mld_melding_cust_huisnr2;
|
||
mar_get_straat_huinrs (v_straatnaam, v_huisnr, v_huisnr_toev);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van melder bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_huurder,
|
||
rec_ax.mld_melding_cust_name,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Contactpersoon');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_name, v_mld_melding_key, rec_ax.mld_melding_cust_name);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van straat bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_straatnaam,
|
||
v_straatnaam,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Straatnaam');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_straatnaam, v_mld_melding_key, v_straatnaam);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van huisnummer bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_huisnr,
|
||
v_huisnr,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Huisnr');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_huisnr, v_mld_melding_key, v_huisnr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van huisnummer toevoeging bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_huisnr2,
|
||
v_huisnr_toev,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Huisnr toevoeging');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_huisnr_toev, v_mld_melding_key, v_huisnr_toev);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van postcode bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_postcode,
|
||
rec_ax.mld_melding_cust_postcode,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Postcode');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_postcode, v_mld_melding_key, rec_ax.mld_melding_cust_postcode);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van plaats bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_plaats,
|
||
rec_ax.mld_melding_cust_plaats,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Plaats');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_plaats, v_mld_melding_key, rec_ax.mld_melding_cust_plaats);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van telefoonnr bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_telefoonnr,
|
||
rec_ax.mld_melding_cust_telefoonnr,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Telefoonnr');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_telefoonnr,
|
||
v_mld_melding_key,
|
||
rec_ax.mld_melding_cust_telefoonnr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van mobielnr bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_mobiel,
|
||
rec_ax.mld_melding_cust_mobielnr,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Mobielnr');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_mobielnr, v_mld_melding_key, rec_ax.mld_melding_cust_mobielnr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van e-mail bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_email,
|
||
rec_ax.mld_melding_cust_email,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'E-mail');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_email, v_mld_melding_key, rec_ax.mld_melding_cust_email);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van locatieaanduiding bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_melding_loc_aanduiding,
|
||
rec_ax.mld_melding_cust_object_omschr,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Locatieaanduiding');
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_object_oms, v_mld_melding_key, rec_ax.mld_melding_cust_object_omschr);
|
||
|
||
|
||
v_flexsummary := mld.mldflexsummary (v_mld_melding_key);
|
||
-- De 1e CR eraf snoepen... en maximaal 4000 tekens
|
||
v_flexsummary := SUBSTR (v_flexsummary, 2, 4000);
|
||
-- Huurder/locatie gegevens in flex-veld 'Locatie' (key 11) zetten...
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_locatie, p_mld_opdr_key, v_flexsummary);
|
||
|
||
-- MARX#66907: Opdrachten overzichtsscherm: kolom locatiegegevens compact en volgorde fixed
|
||
v_uitvoeringslocatie := marx_mld_construct_locatie (v_mld_melding_key);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_uitv_locatie, p_mld_opdr_key, v_uitvoeringslocatie);
|
||
|
||
-- Datum verschillen
|
||
IF (rec_ax.mld_opdr_datumbegin IS NOT NULL)
|
||
THEN
|
||
-- MARX#75149: Alleen indien de geimporteerde datum een waarde heeft, anders gaan we in dit geval bij mld_opdr_datumbegin niet updaten, deze mag niet NULL zijn namelijk.
|
||
v_errorhint :=
|
||
'Fout bij check verschil van begindatum bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_mld_opdr_imp_datumbegin := marx_get_local_time(rec_ax.mld_opdr_datumbegin);
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_date (v_mld_opdr_datumbegin,
|
||
v_mld_opdr_imp_datumbegin,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Opdrachtdatum',
|
||
'#ORDUPD');
|
||
ELSE
|
||
-- MARX#75149: datum blijft wat die was...
|
||
v_mld_opdr_imp_datumbegin := v_mld_opdr_datumbegin;
|
||
END IF;
|
||
v_errorhint :=
|
||
'Fout bij check verschil van plan(afspraak)datum bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_mld_opdr_imp_plandatum := marx_get_local_time(rec_ax.mld_opdr_datumplan);
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_date (v_mld_opdr_plandatum,
|
||
v_mld_opdr_imp_plandatum,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Plan(afspraak) datum',
|
||
'#ORDUPD');
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van einddatum bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_mld_opdr_imp_einddatum := COALESCE(marx_get_local_time(rec_ax.mld_opdr_einddatum), c_date_2099);
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_date (v_mld_opdr_einddatum,
|
||
v_mld_opdr_imp_einddatum,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Uiterste uitvoerdatum',
|
||
'#ORDUPD');
|
||
|
||
v_errorhint := 'Fout bij check verschil van opdrachtomschrijving opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
v_count_differences := v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_omschrijving,
|
||
rec_ax.mld_melding_omschrijving,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Opdrachtomschrijving');
|
||
|
||
|
||
-- Tenslotte nog de update's van datumvelden van mld_opdr, en ook een start maken met update van opdracht_omschrijving (in de loop van c_ax_opdrachten_1_inkooporder volgen de anderen, vergelijkbaar met add opdracht voor de 1e keer)
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_datumbegin = v_mld_opdr_imp_datumbegin,
|
||
mld_opdr_plandatum = v_mld_opdr_imp_plandatum,
|
||
mld_opdr_einddatum = v_mld_opdr_imp_einddatum,
|
||
mld_opdr_omschrijving = rec_ax.mld_melding_omschrijving
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
-- MARX#59976: Koppeling Twinq: <20>Onderhoudsopdrachten vanuit Tobias via Mareon voor de VvE
|
||
-- Verschil in GLN VvE is niet relevant en gaan we dus niet ondersteunen. Daarom is dit hier uitgecommentarieerd...
|
||
-- v_errorhint := 'Fout bij check verschil van gln-vve bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
|
||
-- v_count_differences := v_count_differences + mar_diff_varchar(v_mld_opdr_gln_vve, rec_ax.v_mld_opdr_gln_vve, p_mld_opdr_key, v_prs_perslid_key, 'GLN VvE');
|
||
-- mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_vve, p_mld_opdr_key, rec_ax.v_mld_opdr_gln_vve);
|
||
|
||
-- MARX#54417: Opdrachtsoort - INS Inspectie MUT Mutatie REP Reparatie
|
||
v_errorhint :=
|
||
'Fout bij check verschil van opdrachtsoort bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_soort,
|
||
GetMareonDescription ('mld_opdr_soort', rec_ax.mld_opdr_soort),
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Soort opdracht');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdrsoort,
|
||
p_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_soort', rec_ax.mld_opdr_soort));
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van afspraakwijze bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_afspraak,
|
||
GetMareonDescription ('mld_opdr_afspraak', rec_ax.mld_opdr_afspraak),
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Afspraakwijze');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdrafspraak,
|
||
p_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_afspraak', rec_ax.mld_opdr_afspraak));
|
||
|
||
-- Dan komen hier nog wat andere velden, die in exec_code '2' zitten., deze loop levert exact 1 regel op.
|
||
FOR rec_vervolg_ax IN c_ax_opdrachten_overige_regels ('2', rec_ax.mld_opdr_externnr, rec_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Fout bij check verschil van opzichter bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_opzichter,
|
||
rec_vervolg_ax.mld_opdr_opzichter,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Opzichter');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opzichter,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_opzichter);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van complexnummer bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_complexnr,
|
||
rec_vervolg_ax.mld_opdr_complexnummer,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Complexnummer');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_complexnr,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_complexnummer);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van pandnummer bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_pandnr,
|
||
rec_vervolg_ax.mld_opdr_pandnummer,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Pandnummer');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_pandnummer,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_pandnummer);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van VGEnummer bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_VGEnummer,
|
||
rec_vervolg_ax.mld_opdr_VGEnummer,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'VGEnummer');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_VGEnummer,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_VGEnummer);
|
||
|
||
-- MARX#84250 Bouwjaar van een gebouw/woning
|
||
v_errorhint :=
|
||
'Fout bij check verschil van Bouwjaar bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_bouwjaar,
|
||
SUBSTR(rec_vervolg_ax.mld_opdr_datumbegin,1,4),
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Bouwjaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_bouwjaar,
|
||
p_mld_opdr_key,
|
||
SUBSTR(rec_vervolg_ax.mld_opdr_datumbegin,1,4));
|
||
|
||
-- MARX#84378 Eigenaar gegevens vanuit REMS365
|
||
-- GLN Eigenaar
|
||
v_errorhint :=
|
||
'Fout bij check verschil van GLN Eigenaar (Affiliate) bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_gln_eigenaar,
|
||
rec_vervolg_ax.mld_opdr_gln_vve,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'GLN Eigenaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_eig,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_gln_vve);
|
||
-- Naam Eigenaar
|
||
v_errorhint :=
|
||
'Fout bij check verschil van Naam Eigenaar (Affiliate) bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_naam_eigenaar,
|
||
rec_vervolg_ax.mld_melding_cust_name,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Naam Eigenaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_naam,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_melding_cust_name);
|
||
-- Adres Eigenaar
|
||
v_errorhint :=
|
||
'Fout bij check verschil van Adres Eigenaar (Affiliate) bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_adres_eigenaar,
|
||
rec_vervolg_ax.mld_melding_cust_straat,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Adres Eigenaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_adres,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_melding_cust_straat);
|
||
-- Postcode Eigenaar
|
||
v_errorhint :=
|
||
'Fout bij check verschil van Postcode Eigenaar (Affiliate) bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_postcode_eigenaar,
|
||
rec_vervolg_ax.mld_melding_cust_postcode,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Postcode Eigenaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_pc,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_melding_cust_postcode);
|
||
-- Plaats Eigenaar
|
||
v_errorhint :=
|
||
'Fout bij check verschil van Plaats Eigenaar (Affiliate) bij opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_differences :=
|
||
v_count_differences
|
||
+ mar_diff_varchar (v_mld_opdr_plaats_eigenaar,
|
||
rec_vervolg_ax.mld_melding_cust_plaats,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Plaats Eigenaar');
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_plaats,
|
||
p_mld_opdr_key,
|
||
rec_vervolg_ax.mld_melding_cust_plaats);
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
|
||
-- Hier wel de andere subopdrachten processen/verwerken, is met omschrijving en memo niet veel ...
|
||
|
||
FOR rec_1_ax IN c_ax_opdrachten_1_inkooporder (rec_ax.mld_opdr_externnr, rec_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
BEGIN
|
||
-- Er zijn dus meer dan 1 sub-opdrachten (task-ids) bij deze hoofd-opdracht (IONR)
|
||
-- Het markeren via v_opdr_heeft_meerdere_subopdr is niet hier bij wijzigen nodig, omdat mld_opdr_ordernr bij aanmaak al is overruled met IONR (ipv TASKID, zie info hierboven bij MARX#35461.)
|
||
-- v_opdr_heeft_meerdere_subopdr := 1;
|
||
|
||
-- Op gelijke wijze, idem procedureel en niet via een functie vooralsnog, wordt de opdrachtomschrijving opnieuw geconstrueerd.
|
||
v_errorhint := 'Fout bij update van opdrachtomschrijving bij opdracht(key)' || p_mld_opdr_key;
|
||
|
||
-- MARX#55736: MovinU: Missende opdrachtregels - concat moet binnen 4000 blijven!
|
||
-- MARX#69220 Koppeling Mareon -> Twinq - De opdrachtomschrijving in geval van SALES005 niet met opdrachtregel (instructionlines) bijwerken, da's niet goed.
|
||
IF p_erp_opdrachtgever <> 'Twinq' AND p_erp_opdrachtgever <> 'SALES005'
|
||
THEN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_omschrijving =
|
||
safe_concat (safe_concat (mld_opdr_omschrijving, CHR (10)),
|
||
rec_1_ax.mld_melding_omschrijving)
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
-- En tenslotte gaan we de nieuwe materiaalregels checken tegen de materiaalregels in de database:
|
||
-- 1. Er komt een nieuwe materiaalregel bij (nieuwe mld_opdr_materiaal_id) -> INSERT
|
||
-- 2. Er komt een materiaalregel te vervallen/verwijderen (mld_opdr_materiaal_id in DB niet meer in de import) -> DELETE
|
||
-- 3. Beide materiaalregels bestaan (obv mld_opdr_materiaal_id), er is een inhoudelijk (veld)verschil -> UPDATE
|
||
|
||
-- 3. We beginnen met stap 3, dus vergelijk van records (veld voor veld) die aan beide kanten bestaan -> UPDATE
|
||
v_opdr_heeft_materiaal := 0;
|
||
|
||
FOR rec_mat IN c_ax_upd_opdrachten_materiaal (rec_ax.mld_opdr_externnr, p_mld_opdr_key)
|
||
LOOP
|
||
BEGIN
|
||
v_count_mat_differences := 0;
|
||
-- Er zijn dus materiaalregels bij deze opdracht.
|
||
-- Dat gaan we even markeren, om straks hieronder nog een nabewerking te doen (opdrachtkosten registratie).....
|
||
v_opdr_heeft_materiaal := 1;
|
||
|
||
SELECT mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_aantal,
|
||
mld_opdr_materiaal_prijs,
|
||
fin_btwtabelwaarde_key,
|
||
mld_opdr_materiaal_extra1,
|
||
mld_opdr_materiaal_extra3
|
||
INTO v_mld_opdr_materiaal_code,
|
||
v_mld_opdr_materiaal_omschr,
|
||
v_mld_opdr_materiaal_groep,
|
||
v_mld_opdr_materiaal_extra2,
|
||
v_mld_opdr_materiaal_extra4,
|
||
v_mld_opdr_materiaal_eenhcode,
|
||
v_mld_opdr_materiaal_eenheid,
|
||
v_mld_opdr_materiaal_aantal,
|
||
v_mld_opdr_materiaal_prijs,
|
||
v_fin_btwtabelwaarde_key,
|
||
v_mld_opdr_materiaal_extra1,
|
||
v_mld_opdr_materiaal_extra3
|
||
FROM mld_opdr_materiaal
|
||
WHERE mld_opdr_key = p_mld_opdr_key AND mld_opdr_materiaal_id = rec_mat.mld_opdr_materiaal_linenr;
|
||
|
||
-- Extra3 (defect-omschrijving) wordt bij insert geconstrueerd uit melding-omschr en "melding-memo", die moeten we nu ophalen bij execcode = 1 (staat niet bij execcode 3 in de cursor van 'rec_mat')
|
||
v_errorhint :=
|
||
'Fout bij ophalen van v_mld_opdr_materiaal_extra3new bij materiaalregels [Extern opdrachtnr: '
|
||
|| rec_mat.mld_opdr_externnr
|
||
|| '] bij opdracht(key)'
|
||
|| p_mld_opdr_key;
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Voor SALES005 of TWINQ opdracht bestaat MEMO-veld niet bij materiaal-regel, en laten we in dat geval weg...
|
||
IF p_erp_opdrachtgever = 'Twinq' OR p_erp_opdrachtgever = 'SALES005'
|
||
THEN
|
||
SELECT mld_melding_omschrijving
|
||
INTO v_mld_opdr_materiaal_extra3new
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = 1
|
||
AND mld_opdr_externnr = rec_mat.mld_opdr_externnr
|
||
AND mld_opdr_ordernr = rec_mat.mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL;
|
||
ELSE
|
||
SELECT mld_melding_omschrijving || CHR (10) || mld_melding_memo
|
||
INTO v_mld_opdr_materiaal_extra3new
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = 1
|
||
AND mld_opdr_externnr = rec_mat.mld_opdr_externnr
|
||
AND mld_opdr_ordernr = rec_mat.mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL;
|
||
END IF;
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van code bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_code,
|
||
rec_mat.mld_opdr_materiaal_code,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Code opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van omschrijving bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_omschr,
|
||
rec_mat.mld_opdr_materiaal_omschr,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Omschrijving opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van locatie bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_groep,
|
||
rec_mat.mld_opdr_materiaal_groep,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Locatie opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van element bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_extra2,
|
||
rec_mat.mld_opdr_materiaal_extra2,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Element opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van oorzaak bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_extra4,
|
||
rec_mat.mld_opdr_materiaal_extra4,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Oorzaak opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van eenheid bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_eenhcode,
|
||
rec_mat.mld_opdr_materiaal_eenheidcode,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Eenheid opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
v_errorhint :=
|
||
'Fout bij check verschil van eenheid bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_eenheid,
|
||
rec_mat.mld_opdr_materiaal_eenheid,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Eenheid opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van aantal bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_number (v_mld_opdr_materiaal_aantal,
|
||
rec_mat.mld_opdr_materiaal_aantal,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Aantal opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
IF v_prs_bedrijf_verwerkprijzen <> 1
|
||
THEN
|
||
v_errorhint :=
|
||
'Fout bij check verschil van (eenheids)prijs bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_number (v_mld_opdr_materiaal_prijs,
|
||
rec_mat.mld_opdr_materiaal_prijs,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Prijs opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
END IF;
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen van btw-percentage ['
|
||
|| rec_mat.mld_opdr_materiaal_btwperc
|
||
|| '] bij opdracht(key)'
|
||
|| p_mld_opdr_key;
|
||
v_btwperc_key :=
|
||
get_btwperc_key (p_mld_opdr_key, fac.safe_to_number (rec_mat.mld_opdr_materiaal_btwperc));
|
||
v_errorhint :=
|
||
'Fout bij check verschil van BTW bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_number (v_fin_btwtabelwaarde_key,
|
||
v_btwperc_key,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'BTW opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
v_errorhint :=
|
||
'Fout bij check verschil van opmerking bij opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| 'van opdracht(key)'
|
||
|| p_mld_opdr_key
|
||
|| '('
|
||
|| v_mld_opdr_id
|
||
|| ')';
|
||
v_count_mat_differences :=
|
||
v_count_mat_differences
|
||
+ mar_diff_varchar (v_mld_opdr_materiaal_extra3,
|
||
v_mld_opdr_materiaal_extra3new,
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
'Defect opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr);
|
||
|
||
IF v_count_mat_differences > 0
|
||
THEN
|
||
-- Er zijn dus verschillen in deze materiaalregel, een update dus...
|
||
-- We tellen dit als 1 wijziging op het geheel.
|
||
v_count_differences := v_count_differences + 1;
|
||
|
||
|
||
UPDATE MLD_OPDR_MATERIAAL
|
||
SET mld_opdr_materiaal_code = rec_mat.mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_omschr = rec_mat.mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep = rec_mat.mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2 = rec_mat.mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4 = rec_mat.mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode = rec_mat.mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid = rec_mat.mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_aantal = fac.safe_to_number (rec_mat.mld_opdr_materiaal_aantal),
|
||
mld_opdr_materiaal_prijs =
|
||
DECODE (v_prs_bedrijf_verwerkprijzen,
|
||
1, NULL,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_prijs)),
|
||
fin_btwtabelwaarde_key = v_btwperc_key,
|
||
mld_opdr_materiaal_extra1 = rec_mat.mld_opdr_ordernr,
|
||
mld_opdr_materiaal_extra3 = SUBSTR (v_mld_opdr_materiaal_extra3new, 1, 4000)
|
||
WHERE mld_opdr_key = p_mld_opdr_key
|
||
AND mld_opdr_materiaal_id = rec_mat.mld_opdr_materiaal_linenr;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- 2. En dan stap 2, een materiaalregel komt te vervallen/verwijderen (mld_opdr_materiaal_id in DB niet meer in de import) -> DELETE
|
||
FOR rec_mat IN c_ax_del_opdrachten_materiaal (rec_ax.mld_opdr_externnr, p_mld_opdr_key)
|
||
LOOP
|
||
BEGIN
|
||
DELETE FROM MLD_OPDR_MATERIAAL
|
||
WHERE mld_opdr_key = p_mld_opdr_key AND mld_opdr_materiaal_id = rec_mat.mld_opdr_materiaal_id;
|
||
|
||
fac.trackaction (
|
||
'#ORDUPD',
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
NULL,
|
||
'Opdrachtregel '
|
||
|| rec_mat.mld_opdr_materiaal_id
|
||
|| ' is verwijderd (Code: '
|
||
|| rec_mat.mld_opdr_materiaal_code
|
||
|| ' , omschrijving: '
|
||
|| rec_mat.mld_opdr_materiaal_omschr
|
||
|| ')');
|
||
v_count_differences := v_count_differences + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- 3. En tenslotte nog stap 3, nieuwe materiaalregel(s) die nog niet bestaan in DB -> INSERT
|
||
FOR rec_mat IN c_ax_ins_opdrachten_materiaal (rec_ax.mld_opdr_externnr, p_mld_opdr_key)
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint :=
|
||
'Fout bij bepalen van btw-percentage ['
|
||
|| rec_mat.mld_opdr_materiaal_btwperc
|
||
|| '] bij regel'
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| ' van opdracht(key)'
|
||
|| p_mld_opdr_key;
|
||
v_btwperc_key :=
|
||
get_btwperc_key (p_mld_opdr_key, fac.safe_to_number (rec_mat.mld_opdr_materiaal_btwperc));
|
||
|
||
v_errorhint :=
|
||
'Fout bij insert van nieuwe materiaalregel '
|
||
|| rec_mat.mld_opdr_materiaal_linenr
|
||
|| ' bij opdracht(key)'
|
||
|| p_mld_opdr_key;
|
||
-- MARX#39467: mld_opdr_materiaal_code vullen met artikelcode
|
||
-- Zie ook call MARX#35460: code wordt in extra1 gezet (dit is taskid oftewel het MLD00001234-01 nummer uit AX)
|
||
|
||
|
||
-- Extra3 (defect-omschrijving) wordt bij insert geconstrueerd uit melding-omschr en "melding-memo", die moeten we nu ophalen bij execcode = 1 (staat niet bij execcode 3 in de cursor van 'rec_mat')
|
||
v_errorhint :=
|
||
'Fout bij ophalen van v_mld_opdr_materiaal_extra3new bij materiaalregels [Extern opdrachtnr: '
|
||
|| rec_mat.mld_opdr_externnr
|
||
|| '] bij opdracht(key)'
|
||
|| p_mld_opdr_key;
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Voor SALES005 of TWINQ opdracht bestaat MEMO-veld niet bij materiaal-regel, en laten we in dat geval weg...
|
||
IF p_erp_opdrachtgever = 'Twinq' OR p_erp_opdrachtgever = 'SALES005'
|
||
THEN
|
||
SELECT mld_melding_omschrijving
|
||
INTO v_mld_opdr_materiaal_extra3new
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = 1
|
||
AND mld_opdr_externnr = rec_mat.mld_opdr_externnr
|
||
AND mld_opdr_ordernr = rec_mat.mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL;
|
||
ELSE
|
||
SELECT mld_melding_omschrijving || CHR (10) || mld_melding_memo
|
||
INTO v_mld_opdr_materiaal_extra3new
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = 1
|
||
AND mld_opdr_externnr = rec_mat.mld_opdr_externnr
|
||
AND mld_opdr_ordernr = rec_mat.mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL;
|
||
END IF;
|
||
|
||
|
||
-- Let op: mld_opdr_materiaal_info voorlopig ook nog vullen met NULL, er wordt nog geen aanvullende aanwijzing/opmerking bij de opdrachtregel meegestuurd -> toekomst...
|
||
-- Zie ook call MARX#35460: info wordt in extra3 gezet (dit is de omschrijving van taskid MLD00001234-01 nummer uit AX)
|
||
INSERT INTO MLD_OPDR_MATERIAAL (mld_opdr_key,
|
||
mld_opdr_materiaal_id,
|
||
mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_info,
|
||
mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_aantal,
|
||
mld_opdr_materiaal_prijs,
|
||
fin_btwtabelwaarde_key,
|
||
mld_opdr_materiaal_extra1,
|
||
mld_opdr_materiaal_extra3)
|
||
VALUES (
|
||
p_mld_opdr_key,
|
||
rec_mat.mld_opdr_materiaal_linenr,
|
||
rec_mat.mld_opdr_materiaal_code,
|
||
NULL,
|
||
rec_mat.mld_opdr_materiaal_omschr,
|
||
rec_mat.mld_opdr_materiaal_groep,
|
||
rec_mat.mld_opdr_materiaal_extra2,
|
||
rec_mat.mld_opdr_materiaal_extra4,
|
||
rec_mat.mld_opdr_materiaal_eenheidcode,
|
||
rec_mat.mld_opdr_materiaal_eenheid,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_aantal),
|
||
DECODE (v_prs_bedrijf_verwerkprijzen,
|
||
1, NULL,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_prijs)),
|
||
v_btwperc_key,
|
||
rec_mat.mld_opdr_ordernr,
|
||
SUBSTR (v_mld_opdr_materiaal_extra3new, 1, 4000));
|
||
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
NULL,
|
||
'Nieuwe opdrachtregel ' || rec_mat.mld_opdr_materiaal_linenr || ' toegevoegd');
|
||
v_count_differences := v_count_differences + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
|
||
IF v_prs_bedrijf_verwerkprijzen <> 1
|
||
THEN
|
||
-- Er zijn dus materiaalregels bij de opdracht, nog even een nabewerking, namelijk de kosten kunnen we in de opdracht doorrekenen en registeren
|
||
|
||
v_errorhint := 'Materiaalkosten bij opdracht(key)' || p_mld_opdr_key || ' is fout gegaan';
|
||
|
||
-- Dan stoppen we de totaalprijs (ex BTW) vanuit de materialen in de opdracht-kosten:
|
||
SELECT ROUND (SUM (COALESCE (mld_opdr_materiaal_aantal, 1) * COALESCE (mld_opdr_materiaal_prijs, 0)), 2)
|
||
INTO v_mld_opdr_kosten
|
||
FROM mld_opdr_materiaal
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
IF v_mld_opdr_kosten IS NOT NULL
|
||
THEN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_materiaal = v_mld_opdr_kosten, mld_opdr_kosten = v_mld_opdr_kosten
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
END IF;
|
||
END IF;
|
||
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
|
||
v_eerste_keer := 0;
|
||
END LOOP;
|
||
|
||
v_errorhint := 'Update res_rsv_ruimte met key ' || p_res_rsv_ruimte_key || ' geeft een probleem.';
|
||
-- MARX#66773 Module Mareon Planning: bij annuleren opdracht (vanuit woco) moet een eventuele gekoppelde planning res_rsv_ruimte etc ook verwijderd worden.
|
||
IF p_res_rsv_ruimte_key IS NOT NULL
|
||
THEN
|
||
-- Officieuze maar geen officiele planning (reservering) bestaat dus, we gaan hem nu officieel maken (alsnog, eigenlijk gebeurt dat bij een nieuwe opdracht) door:
|
||
-- 1. mld_opdr_key in te vullen bij res_rsv_ruimte...
|
||
-- 2. status (van optie) naar definitief te zetten
|
||
UPDATE res_rsv_ruimte
|
||
SET mld_opdr_key = p_mld_opdr_key, res_status_fo_key = 2
|
||
WHERE res_rsv_ruimte_key = p_res_rsv_ruimte_key;
|
||
END IF;
|
||
|
||
IF v_count_differences > 0
|
||
THEN
|
||
-- MARX#72932 Testbevinding bij bundelen opdrachten: MAO gewenst in portaal
|
||
-- Er is minimaal 1 aanpassing in de opdracht
|
||
-- We willen er MAO van maken, eerst enkele voorwaarden aftasten of dat wel gewenst is, mn in geval waarin de opdracht nog niet verstuurd is naar Premium (maar ingepland staat om te versturen)
|
||
-- Check of we de opdracht MAO moeten maken...
|
||
|
||
v_errorhint := 'Controle of de typering van de opdracht met key ' || p_mld_opdr_key || ' mogelijk MAO moet worden, is mislukt';
|
||
v_maak_mao := mar_post_action_maak_mao(p_mld_opdr_key);
|
||
|
||
IF (v_maak_mao = 1)
|
||
THEN
|
||
-- Dan was typering nog geen MAO (want we doen geen change van MAO in MAO)
|
||
-- We zetten de typering dus expliciet op MAO (van ORG of van GAR), waarmee aantal verschillen nog + 1 gaat worden
|
||
v_count_differences := v_count_differences + 1;
|
||
v_errorhint := 'De typering van de opdracht met key ' || p_mld_opdr_key || ' wordt MAO gemaakt en faalt';
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdrtype,
|
||
p_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_typering', 'MAO'));
|
||
v_errorhint := 'Het tracken dat de typering van de opdracht met key ' || p_mld_opdr_key || ' MAO is geworden, is mislukt';
|
||
fac.trackaction (
|
||
'#ORDUPD',
|
||
p_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
NULL,
|
||
'Opdracht typering'
|
||
|| ' gewijzigd van '
|
||
|| v_mld_opdr_typering
|
||
|| ' naar '
|
||
|| GetMareonDescription ('mld_opdr_typering', 'MAO'));
|
||
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Het totaal aantal verschillen in de opdracht kan niet worden getrackt (marx_opdr_track_wijziging)';
|
||
-- Nu registreren bij de opdracht het aantal wijzigingen
|
||
marx_opdr_track_wijziging (p_mld_opdr_key, v_prs_perslid_key, v_count_differences);
|
||
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278): de opdracht wordt nogmaals gestuurd, is mogelijk/hoogst waarschijnlijk gewijzigd (met diffs), actie ligt iig weer bij de leverancier
|
||
mld_opdr_bal_bij_lev(p_mld_opdr_key);
|
||
|
||
IF v_count_differences > 0
|
||
THEN
|
||
-- Er zijn diff's (wijzigingen), dus OPNIEUW opdracht versturen naar aannemer, indien:
|
||
-- 1. aannemer een technisch adres voor (dit type) opdracht heeft waarop de bon of (ketenstandaard)XML bericht op afgeleverd kan worden
|
||
-- 2. aannemer bij (ketenstandaard)-XML bericht wel premium aannemer is
|
||
-- 3. aannemer geannuleerde opdrachten wel wil/kan ontvangen, dit wordt vastgelegd in het kenmerk '$MAR_PUO_MODE' bij de leverancier (prs_kenmerk_key = 23)
|
||
|
||
v_errorhint := 'Het opnieuw versturen van de opdracht mislukt (mar_send_mld_opdr_to_supplier)';
|
||
marx_resend_order (p_mld_opdr_key);
|
||
END IF;
|
||
|
||
ELSE
|
||
v_errormsg := 'Opdracht ' || p_mld_opdr_key || ' kan niet gewijzigd worden';
|
||
|
||
-- Status is dusdanig dat wijzigen op opdracht niet geoorloofd is...
|
||
SELECT mld_statusopdr_omschrijving
|
||
INTO l_mld_statusopdr_omschrijving
|
||
FROM mld_statusopdr
|
||
WHERE mld_statusopdr_key = l_currentstatus;
|
||
|
||
v_errorhint := 'Huidige status is ' || l_mld_statusopdr_omschrijving || ' , opdracht kan daarom niet worden gewijzigd.';
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_errormsg,
|
||
v_errorhint);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_wijzig_mld_opdr;
|
||
/
|
||
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push) --> Na doorgeven van "onderbreken van een opdracht aan ERP opdrachtgever (woco)" in Mareon bijhouden welke onderbreek-code is doorgegeven om doublure-berichten (agv ORDUPD) te voorkomen
|
||
-- Er is namelijk wel een aparte notificatie (ORDHLT), echter ORDHLT op ORDHLT wordt niet getracked, dat gebeurt wel obv ORDUPD op ORDUPD (flexprop onderbreek-code), maar ORDUPD is weer te algemeen die ook bij andere wijzigingen optreedt.
|
||
-- En daarom gebruiken we ORDUPD, maar moeten we even bijhouden wat de laatste onderbreekcode is geweest.
|
||
-- En bij in uitvoering zetten, wissen we deze.
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_hold_opdr (p_mld_opdr_key IN NUMBER,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_onderbreek_code IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
AS
|
||
c_kenmerkopdr_key NUMBER (10);
|
||
|
||
v_aantal NUMBER (10);
|
||
v_result VARCHAR2 (1024);
|
||
v_track_id NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
v_track_id := 0;
|
||
v_result := NULL;
|
||
|
||
|
||
v_result := 'Geen autorisatie om opdracht te wijzigen';
|
||
SELECT 1 / marx_prs_canchange_mldopdr (p_prs_perslid_key, p_mld_opdr_key)
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
|
||
--Flexprop 30 is het hidden flexprop veld om de onderbreek code, die is gestuurd naar het externe systeem, te onthouden
|
||
c_kenmerkopdr_key := 30;
|
||
|
||
-- Is van p_mld_opdr_key wel een bestaande opdracht?
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_track_id := 1;
|
||
|
||
IF (v_aantal = 0)
|
||
THEN
|
||
v_result := 'Geen actie: opdracht niet gevonden';
|
||
SELECT 1/0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
ELSE
|
||
v_track_id := 2;
|
||
-- Vullen/onthouden van de gestuurde onderbreek-code
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key, p_mld_opdr_key, p_onderbreek_code);
|
||
IF p_onderbreek_code = 'AFR'
|
||
THEN
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278): zet actie nu bij woco, deze heeft AFR (Afwachten reactie opdrachtgever) ontvangen, en is aan zet!
|
||
mld_opdr_bal_bij_woco(p_mld_opdr_key);
|
||
END IF;
|
||
IF p_onderbreek_code IS NULL
|
||
THEN
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278): zet actie nu bij LEV, deze heeft UIT (In uitvoering) gestuurd, en is zelf weer aan zet (als die dat nog niet was)!
|
||
mld_opdr_bal_bij_lev(p_mld_opdr_key);
|
||
END IF;
|
||
END IF;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
IF v_result IS NULL
|
||
THEN v_result := 'Onbekende fout in mar_post_action_hold_opdr';
|
||
END IF;
|
||
RETURN v_result || 'Trackid:' || v_track_id;
|
||
COMMIT;
|
||
END mar_post_action_hold_opdr;
|
||
/
|
||
|
||
-- MARX#65463: Bijlages komen niet aan AAGN -> Schekman
|
||
-- Uitgestelde putorders, vanwege eerst bijlages uit Facilitor opsnorren...
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_opdr_putorders (p_mld_opdr_key IN NUMBER, p_prs_perslid_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_result VARCHAR2 (1024);
|
||
v_track_id NUMBER (10);
|
||
v_do_send_opdr NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
v_track_id := 0;
|
||
v_result := NULL;
|
||
|
||
v_result := 'Geen autorisatie om opdracht te wijzigen';
|
||
SELECT 1 / marx_prs_canchange_mldopdr (p_prs_perslid_key, p_mld_opdr_key)
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
|
||
v_result := NULL;
|
||
v_do_send_opdr := mar_send_mld_opdr_to_supplier (p_mld_opdr_key);
|
||
|
||
IF v_do_send_opdr = 1
|
||
THEN
|
||
v_track_id := 1;
|
||
mar_resend_mld_opdr_2_lev (p_mld_opdr_key, 2);
|
||
END IF;
|
||
|
||
v_track_id := 2;
|
||
COMMIT;
|
||
RETURN v_result;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
IF v_result IS NULL
|
||
THEN v_result := 'Onbekende fout in mar_post_opdr_putorders';
|
||
END IF;
|
||
RETURN v_result || 'Trackid:' || v_track_id;
|
||
COMMIT;
|
||
END mar_post_opdr_putorders;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_bijlages (p_mld_opdr_key IN NUMBER, p_prs_perslid_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
AS
|
||
|
||
v_order_status_B NUMBER (10);
|
||
c_kenmerkopdr_key_opdr_type NUMBER (10);
|
||
|
||
v_order_typering_waarde VARCHAR2 (1000);
|
||
|
||
v_maak_mao NUMBER (10);
|
||
v_can_send_opdr NUMBER (10);
|
||
v_resend_order NUMBER (10);
|
||
|
||
v_aantal NUMBER (10);
|
||
v_result VARCHAR2 (1024);
|
||
v_track_id NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
v_track_id := 0;
|
||
v_result := NULL;
|
||
|
||
--Flexprop 25 is typering van opdracht (ORG/GAR/MAO).
|
||
c_kenmerkopdr_key_opdr_type := 25;
|
||
|
||
-- Is van p_mld_opdr_key wel een bestaande opdracht?
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_track_id := 1;
|
||
|
||
IF (v_aantal = 0)
|
||
THEN
|
||
v_result := 'Geen actie: opdracht niet gevonden';
|
||
SELECT 1/0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
ELSE
|
||
|
||
v_result := 'Geen autorisatie om opdracht te wijzigen';
|
||
SELECT 1 / marx_prs_canchange_mldopdr (p_prs_perslid_key, p_mld_opdr_key)
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
|
||
-- MARX#83118 Bijlagen in ORG opdracht / (near)realtime opdrachten vanuit Tobias (365)
|
||
fac.trackaction ('#ORDUPD', p_mld_opdr_key, p_prs_perslid_key, NULL, 'Opdracht n.a.v. bijlage(s) bijgewerkt (opdr_post_bijlage)');
|
||
v_track_id := 2;
|
||
|
||
SELECT COALESCE (MAX (ko.mld_kenmerkopdr_waarde), 'Onbekend')
|
||
INTO v_order_typering_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = p_mld_opdr_key
|
||
AND ko.mld_kenmerk_key = c_kenmerkopdr_key_opdr_type
|
||
AND ko.mld_kenmerkopdr_verwijder IS NULL;
|
||
|
||
|
||
-- v_order_status_B (is status van opdracht inactief (= te behandelen of afgemeld of afgerond of afgewezen) heeft waarde 0 of 1:
|
||
-- 0 als opdracht gesloten is (1 Afgewezen / 6 Afgemeld / 7 Verwerkt/ 9 Afgerond)
|
||
-- 1 als opdracht actief is (2 Niet akkoord / 3 Ter fiattering / 4 Gefiatteerd / 5 Te behandelen / 8 Geaccepteerd / 10 Ter goedkeuring)
|
||
|
||
v_track_id := 3;
|
||
|
||
SELECT DECODE (mld_statusopdr_key, 1, 0, 6, 0, 7, 0, 9, 0, 1)
|
||
INTO v_order_status_B
|
||
FROM mld_opdr o
|
||
WHERE o.mld_opdr_key = p_mld_opdr_key;
|
||
|
||
v_track_id := 4;
|
||
|
||
IF (v_order_status_B <> 0)
|
||
THEN
|
||
-- Alleen als status lopende opdracht is, bij gesloten opdracht moet er niets gebeuren en dit geskipt worden.
|
||
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278): deze post-bijlage aanroep betekent dat er bijlagen zijn toegevoegd door opdrachtgever, we geven in dat geval de (actie van de)opdracht terug aan leverancier
|
||
mld_opdr_bal_bij_lev(p_mld_opdr_key);
|
||
|
||
-- Check of we de opdracht MAO moeten maken...
|
||
v_maak_mao := mar_post_action_maak_mao (p_mld_opdr_key);
|
||
v_track_id := 5;
|
||
|
||
|
||
IF (v_maak_mao = 1)
|
||
THEN
|
||
v_track_id := 6;
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_type,
|
||
p_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_typering', 'MAO'));
|
||
v_track_id := 7;
|
||
fac.trackaction (
|
||
'#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
'Opdracht typering'
|
||
|| ' gewijzigd van '
|
||
|| v_order_typering_waarde
|
||
|| ' naar '
|
||
|| GetMareonDescription ('mld_opdr_typering', 'MAO'));
|
||
END IF;
|
||
|
||
v_track_id := 8;
|
||
-- Check of we een resend van de opdracht moeten doen
|
||
v_resend_order := mar_post_action_resend_order (p_mld_opdr_key);
|
||
|
||
|
||
v_track_id := 9;
|
||
-- Eerst check of aannemer tech adres heeft voor deze opdracht(type) waarnaar opdrachten gestuurd kunnen worden, geen blokkade voor deze opdrachten is etc
|
||
v_can_send_opdr := mar_send_mld_opdr_to_supplier (p_mld_opdr_key);
|
||
|
||
IF (v_can_send_opdr = 1 AND v_resend_order = 1)
|
||
THEN
|
||
v_track_id := 10;
|
||
mar_resend_mld_opdr_2_lev (p_mld_opdr_key, 2);
|
||
END IF;
|
||
|
||
v_track_id := 11;
|
||
END IF;
|
||
END IF;
|
||
|
||
RETURN NULL;
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
IF v_result IS NULL
|
||
THEN v_result := 'Onbekende fout in mar_post_action_bijlages';
|
||
END IF;
|
||
RETURN v_result || 'Trackid:' || v_track_id;
|
||
COMMIT;
|
||
END mar_post_action_bijlages;
|
||
/
|
||
|
||
-- MARX#XXXXX: Mogelijk maken aanpassen loglevel bij opdrachtgever (WOCO) door Aareon Helpdesk (Wonen) tbv snelle support
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_loglevel (p_perslid_key IN NUMBER, p_opdrgever_naam IN VARCHAR2, p_loglevel IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_prs_kenmerk_key NUMBER (10);
|
||
v_fac_functie_key NUMBER (10);
|
||
v_aantal NUMBER (10);
|
||
v_loglevel_was VARCHAR2 (1000);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- $MAR_SYNC_LOGLEVEL heeft kenmerk-key 17
|
||
v_prs_kenmerk_key := 17;
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen autorisatie om het loglevel te wijzigen';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_USER04 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_USER04')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'Loglevel kan alleen 0, 1, 2 of 3 zijn';
|
||
|
||
IF p_loglevel NOT IN (0,
|
||
1,
|
||
2,
|
||
3)
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- Checken of we moeten inserten of updaten, oftewel is $MAR_SYNC_LOGLEVEL voor bedrijf al gevuld (dan een update) of leeg (dan een insert)?
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
v_loglevel_was := '';
|
||
v_result := 'Toevoegen nieuwe loglevel is mislukt';
|
||
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (v_prs_kenmerk_key,
|
||
'B',
|
||
v_prs_bedrijf_key,
|
||
p_loglevel);
|
||
ELSE
|
||
v_result := 'Ophalen huidige loglevel is mislukt';
|
||
|
||
SELECT prs_kenmerklink_waarde
|
||
INTO v_loglevel_was
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
|
||
v_result := 'Update nieuwe loglevel is mislukt';
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = p_loglevel
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
END IF;
|
||
|
||
IF COALESCE (v_loglevel_was, -1) <> COALESCE (p_loglevel, -1)
|
||
THEN
|
||
-- Alleen als nieuwe loglvel anders is als die was, dan tracken (anders niet).
|
||
v_result := 'Tracking is mislukt';
|
||
fac.trackaction ('#PRSUPB',
|
||
v_prs_bedrijf_key,
|
||
p_perslid_key,
|
||
NULL,
|
||
'$MAR_SYNC_LOGLEVEL: ' || v_loglevel_was || ' --> ' || p_loglevel);
|
||
END IF;
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
-- MARX#XXXXX: Mogelijk maken van opvragen (download) logbestand bij opdrachtgever (WOCO) door Aareon Helpdesk (Wonen) tbv snelle support
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_logbestand (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_aantal_dagen_terug IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_prs_kenmerk_key NUMBER (10);
|
||
v_fac_functie_key NUMBER (10);
|
||
v_aantal NUMBER (10);
|
||
v_datum_logbestand_new DATE;
|
||
v_datum_logbestand_was DATE;
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
-- $MAR_SYNC_SENDLOGFILE heeft kenmerk-key 18
|
||
v_prs_kenmerk_key := 18;
|
||
v_result := NULL;
|
||
|
||
|
||
v_result := 'U heeft geen autorisatie om het loglevel te wijzigen';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_USER04 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_USER04')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'Datum is onjuist, en kan maximaal 7 dagen in verleden liggen';
|
||
|
||
IF p_aantal_dagen_terug NOT IN (0,
|
||
1,
|
||
2,
|
||
3,
|
||
4,
|
||
5,
|
||
6,
|
||
7)
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
v_datum_logbestand_new := TRUNC (SYSDATE - p_aantal_dagen_terug);
|
||
|
||
-- Checken of we moeten inserten of updaten, oftewel is $MAR_SYNC_SENDLOGFILE voor bedrijf al gevuld (dan een update) of leeg (dan een insert)?
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
v_datum_logbestand_was := NULL;
|
||
v_result := 'Toevoegen nieuwe datum logbestand is mislukt';
|
||
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (v_prs_kenmerk_key,
|
||
'B',
|
||
v_prs_bedrijf_key,
|
||
TO_CHAR (v_datum_logbestand_new, 'DD-MM-YYYY'));
|
||
ELSE
|
||
v_result := 'Ophalen huidige datum logbestand is mislukt';
|
||
|
||
SELECT fac.safe_to_date (prs_kenmerklink_waarde, 'DD-MM-YYYY')
|
||
INTO v_datum_logbestand_was
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
|
||
v_result := 'Update nieuwe datum logbestand is mislukt';
|
||
|
||
UPDATE prs_kenmerklink
|
||
SET prs_kenmerklink_waarde = TO_CHAR (v_datum_logbestand_new, 'DD-MM-YYYY')
|
||
WHERE prs_kenmerk_key = v_prs_kenmerk_key AND prs_kenmerklink_niveau = 'B' AND prs_link_key = v_prs_bedrijf_key;
|
||
END IF;
|
||
|
||
IF COALESCE (v_datum_logbestand_was, TRUNC (SYSDATE - 100)) <> COALESCE (v_datum_logbestand_new, TRUNC (SYSDATE - 100))
|
||
THEN
|
||
-- Alleen als nieuwe datum anders is als die was, dan tracken (anders niet).
|
||
v_result := 'Tracking is mislukt';
|
||
fac.trackaction ('#PRSUPB',
|
||
v_prs_bedrijf_key,
|
||
p_perslid_key,
|
||
NULL,
|
||
'$MAR_SYNC_SENDLOGFILE: ' || v_datum_logbestand_was || ' --> ' || v_datum_logbestand_new);
|
||
END IF;
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
|
||
|
||
-- 3c Import tbv AX-opdrachten
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_get_straat_huinrs (p_straatnaam IN OUT VARCHAR2,
|
||
p_huisnr IN OUT VARCHAR2,
|
||
p_huisnr2 IN OUT VARCHAR2)
|
||
IS
|
||
v_adres VARCHAR2 (1000);
|
||
v_pos NUMBER (10);
|
||
BEGIN
|
||
IF (p_huisnr IS NOT NULL OR p_huisnr2 IS NOT NULL)
|
||
THEN
|
||
-- Tobias AX 4.9+: mooi in aparte velden
|
||
p_straatnaam := TRIM (p_straatnaam);
|
||
IF p_huisnr = 'MARX_NULL'
|
||
THEN
|
||
p_huisnr := '';
|
||
ELSE
|
||
p_huisnr := TRIM (p_huisnr);
|
||
END IF;
|
||
p_huisnr2 := TRIM (p_huisnr2);
|
||
ELSE
|
||
-- Tobias AX: alles in 1 veld 'straat', zelf maar huisnr gedeelte eruit.
|
||
-- Dus een adres als 'Boulevard 1945 23a' wordt: straatnaam: Boulevard 1945 en huisnr: 23a
|
||
v_adres := p_straatnaam;
|
||
v_pos := REGEXP_INSTR (v_adres, ' [[:digit:]]');
|
||
|
||
IF v_pos > 0
|
||
THEN
|
||
-- Er zit een cijfer in adres voorafgegaan door een spatie.
|
||
p_straatnaam := SUBSTR (v_adres, 1, v_pos);
|
||
p_huisnr := SUBSTR (v_adres, v_pos + 1);
|
||
|
||
-- Zitten er geen andere cijfers meer in met spatie vooraf?
|
||
-- Deze check doen we nog 1 x (geen while)
|
||
|
||
v_pos := REGEXP_INSTR (p_huisnr, ' [[:digit:]]');
|
||
|
||
IF v_pos > 0
|
||
THEN
|
||
-- Er zit NOG een cijfer met spatie erin, dat wordt het huisnr
|
||
p_straatnaam := p_straatnaam || SUBSTR (p_huisnr, 1, v_pos);
|
||
p_huisnr := SUBSTR (p_huisnr, v_pos + 1);
|
||
END IF;
|
||
ELSE
|
||
-- Er zit geen cijfer in adres, dus alleen de straatnaam zonder huisnr) die in geval van kavels wordt meegegeven.
|
||
-- Zie call MARX#42668: Straatnaam niet in Mareon bij serviceobject Kavel(Alliantie)
|
||
-- Dan wordt de straatnaam gewoon het hele adres, huisnr blijft logischerwijs leeg.
|
||
p_straatnaam := TRIM (v_adres);
|
||
END IF;
|
||
|
||
p_straatnaam := TRIM (p_straatnaam);
|
||
p_huisnr := TRIM (p_huisnr);
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_gen_opdrachten (p_import_key IN NUMBER)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (4096); -- Input line
|
||
v_aanduiding VARCHAR2 (2000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_push_notifyqueue NUMBER (10);
|
||
v_push_err_warn VARCHAR2(1);
|
||
|
||
-- De importvelden:
|
||
v_mld_opdr_execcode VARCHAR2 (256);
|
||
v_ax_supplier_id VARCHAR2 (256);
|
||
v_mld_melding_externnr VARCHAR2 (256);
|
||
v_mld_melding_omschrijving VARCHAR2 (4000);
|
||
v_prs_afdeling_naam VARCHAR2 (256);
|
||
v_mld_opdr_po_companyid VARCHAR2 (256);
|
||
v_mld_opdr_opzichter VARCHAR2 (256);
|
||
v_mld_melding_cust_name VARCHAR2 (256);
|
||
v_mld_melding_cust_straat VARCHAR2 (256);
|
||
v_mld_melding_cust_huisnr VARCHAR2 (256);
|
||
v_mld_melding_cust_huisnr2 VARCHAR2 (256);
|
||
v_mld_melding_cust_postcode VARCHAR2 (256);
|
||
v_mld_melding_cust_plaats VARCHAR2 (256);
|
||
v_mld_melding_cust_telefoonnr VARCHAR2 (256);
|
||
v_mld_melding_cust_mobielnr VARCHAR2 (256);
|
||
v_mld_melding_cust_email VARCHAR2 (256);
|
||
v_mld_melding_cust_object_oms VARCHAR2 (256);
|
||
|
||
v_mld_opdr_gln_vve VARCHAR2 (256);
|
||
|
||
v_mld_opdr_soort VARCHAR2 (256);
|
||
v_mld_opdr_typering VARCHAR2 (256);
|
||
v_mld_opdr_afspraak VARCHAR2 (256);
|
||
|
||
v_mld_opdr_complexnummer VARCHAR2 (256);
|
||
v_mld_opdr_pandnummer VARCHAR2 (256);
|
||
v_mld_opdr_VGEnummer VARCHAR2 (256);
|
||
v_mld_opdr_kenmerk_url VARCHAR2 (512);
|
||
|
||
v_mld_melding_memo VARCHAR2 (4000);
|
||
v_mld_opdr_externnr VARCHAR2 (256);
|
||
v_mld_opdr_ordernr VARCHAR2 (256);
|
||
v_mld_opdr_datumbegin VARCHAR2 (256);
|
||
v_mld_opdr_datumplan VARCHAR2 (256);
|
||
v_mld_opdr_einddatum VARCHAR2 (256);
|
||
|
||
v_mld_opdr_materiaal_linenr VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_aantal VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_prijs VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_omschr VARCHAR2 (1024);
|
||
|
||
v_mld_opdr_materiaal_groep VARCHAR2 (1024);
|
||
v_mld_opdr_materiaal_extra2 VARCHAR2 (1024);
|
||
v_mld_opdr_materiaal_extra4 VARCHAR2 (4000);
|
||
|
||
v_mld_opdr_materiaal_eenhcode VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_eenheid VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_btwperc VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_totprijs VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_code VARCHAR2 (256);
|
||
v_mld_opdr_materiaal_info VARCHAR2 (4000);
|
||
|
||
v_dummy NUMBER(1);
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
-- Default Error
|
||
v_push_err_warn := 'E';
|
||
|
||
DELETE FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
COMMIT;
|
||
|
||
v_errorhint := 'SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_errorhint := 'SYSTEM API user van import ' || p_import_key || ' is niet geautoriseerd, er is geen melding/opdracht aangemaakt';
|
||
SELECT 1/marx_auth(v_prs_perslid_key,'MARXREP') INTO v_dummy FROM dual;
|
||
|
||
v_errorhint := 'prs_bedrijf van SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- MARX#66752: Extreem veel WEB_USER_MESSAGE record
|
||
-- Maakt woco-bedrijf gebruikt van $MAR_PUSH_NOTIFYQUEUE?
|
||
-- Ja, in dat geval willen we dat een fout ook daadwerkelijk als fout wordt teruggestuurd naar de aanroeper, dus als 'E'.
|
||
-- Nee, in dat geval willen we dat een waarschuwing 'W' wordt gegegeven (AX2009, AX2012), om bv bij multicompany/interne bedrijven (zoals bij Ymere het geval is) die bij zowel intern bedrijf A als intern bedrijf B eenzelfde opdracht in de query opgelevert, en er geen sprake is van een echte fout.
|
||
SELECT prs_bedrijf_push_nq, DECODE(prs_bedrijf_push_nq, 0, 'W', 'E')
|
||
INTO v_push_notifyqueue, v_push_err_warn
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
|
||
-- v_bes_bestelopdr_id VARCHAR2 (256);
|
||
-- v_bes_srtdeel_nr VARCHAR2 (256);
|
||
-- v_serienummer VARCHAR2 (256);
|
||
-- v_datum VARCHAR2 (256);
|
||
|
||
|
||
-- 01 - Mareon execcode: 1, 2 of 3 en bepaalt de soort regel en manier van verwerken:
|
||
-- exec_code = 1 : Hoofdregel, de AX inkooporder IONR-nummer i.c.m. de AX-opdracht (task-id)
|
||
-- exec_code = 2 : Bijbehorende extra kenmerken behorende bij exec_code 1, op ditzelfde nivo.
|
||
-- exec_code = 3 : Bijbehorende materiaalregels (kunnen dus meer regels zijn, voorzien van een regelnr in v_mld_opdr_materiaal_linenr)
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_execcode: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
1,
|
||
v_mld_opdr_execcode);
|
||
|
||
-- 02 - AX Vendor Account nr (ax supplier id)
|
||
v_aanduiding := 'Probleem bij v_ax_supplier_id: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
2,
|
||
v_ax_supplier_id);
|
||
|
||
-- 03 - GLN VvE: MARX#59976: Koppeling Twinq: <20>Onderhoudsopdrachten vanuit Tobias via Mareon voor de VvE
|
||
v_aanduiding := 'Probleem bij GLN VvE: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
3,
|
||
v_mld_opdr_gln_vve);
|
||
|
||
-- 04 - Opdracht soort: INS, REP, MUT
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_soort: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
4,
|
||
v_mld_opdr_soort);
|
||
|
||
-- 05 - Opdracht typering: ORG, MAO, GAR
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_typering: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
5,
|
||
v_mld_opdr_typering);
|
||
|
||
-- 06 - Opdracht afspraak: REG, AFK, ANS, EHP
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_afspraak: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
6,
|
||
v_mld_opdr_afspraak);
|
||
|
||
-- 07 - Meldingnr EXTERN,
|
||
-- - voor AX is dat iets als MLD00004574-01, en wordt gebruikt als taskID voor webservice communicatie voor accepteren, weigeren, plannen of afmelden opdracht.
|
||
-- - voor Tobias is dat iets als 156720, en wordt idemdito gebruikt als BonId voor webservie communicatie voor accepteren, weigeren, plannen of afmelden opdracht.
|
||
v_aanduiding := 'Probleem bij v_mld_melding_externnr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
7,
|
||
v_mld_melding_externnr);
|
||
|
||
-- 08 - Melding omschrijving
|
||
v_aanduiding := 'Probleem bij v_mld_melding_omschrijving: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
8,
|
||
v_mld_melding_omschrijving);
|
||
|
||
-- 09 - Externe Company-id / company_id (Afdeling-code in Facilitor?)
|
||
v_aanduiding := 'Probleem bij v_prs_afdeling_naam: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
9,
|
||
v_prs_afdeling_naam);
|
||
|
||
-- 10 - Externe Company-id waar factuur gestuurd moet worden -- zie MARX#37262: Dit kan namelijk een ander company ID zijn dan de company die de opdracht verstrekt.
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_po_companyid: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
10,
|
||
v_mld_opdr_po_companyid);
|
||
|
||
-- 11 - Naam opzichter
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_opzichter: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
11,
|
||
v_mld_opdr_opzichter);
|
||
|
||
-- 12 - Flexprop huurdernaam / bewoners van woning
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_name: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
12,
|
||
v_mld_melding_cust_name);
|
||
|
||
-- 13 - Flexprop straatnaam van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_straat: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
13,
|
||
v_mld_melding_cust_straat);
|
||
|
||
-- 14 - Flexprop huisnr van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_huisnr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
14,
|
||
v_mld_melding_cust_huisnr);
|
||
|
||
-- 15 - Flexprop huisnr toevoeging van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_huisnr2: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
15,
|
||
v_mld_melding_cust_huisnr2);
|
||
|
||
-- 16 - Flexprop postcode van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_postcode: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
16,
|
||
v_mld_melding_cust_postcode);
|
||
|
||
-- 17 - Flexprop plaats van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_plaats: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
17,
|
||
v_mld_melding_cust_plaats);
|
||
|
||
-- 18 - Flexprop telefoonnummer van melder/huurder
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_telefoonnr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
18,
|
||
v_mld_melding_cust_telefoonnr);
|
||
|
||
-- 19 - Flexprop mobielnr van melder/huurder
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_mobielnr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
19,
|
||
v_mld_melding_cust_mobielnr);
|
||
|
||
-- 20 - Flexprop email van melder/huurder
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_email: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
20,
|
||
v_mld_melding_cust_email);
|
||
|
||
-- 21 - Flexprop omschrijving van object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_cust_object_oms: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
21,
|
||
v_mld_melding_cust_object_oms);
|
||
|
||
-- 22 - Complexnummer
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_complexnummer: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
22,
|
||
v_mld_opdr_complexnummer);
|
||
|
||
-- 23 - Pandnummer
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_pandnummer: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
23,
|
||
v_mld_opdr_pandnummer);
|
||
|
||
-- 24 - VGEnummer
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_VGEnummer: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
24,
|
||
v_mld_opdr_VGEnummer);
|
||
|
||
|
||
-- 25 - Flexprop memo/opdrachtomschrijving bij object
|
||
v_aanduiding := 'Probleem bij v_mld_melding_memo: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
25,
|
||
v_mld_melding_memo);
|
||
|
||
-- 26 - Externe opdrachtnr / purchase Ordernr
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_externnr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
26,
|
||
v_mld_opdr_externnr);
|
||
|
||
-- 27 - Externe opdrachtnr / purchase Ordernr
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_ordernr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
27,
|
||
v_mld_opdr_ordernr);
|
||
|
||
-- 28 - Start opdrachtdatum
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_datumbegin: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
28,
|
||
v_mld_opdr_datumbegin);
|
||
|
||
-- 29 - Plan opdrachtdatum
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_datumplan: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
29,
|
||
v_mld_opdr_datumplan);
|
||
|
||
-- 30 - Einde opdrachtdatum
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_einddatum: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
30,
|
||
v_mld_opdr_einddatum);
|
||
--
|
||
|
||
-- 31 - Externe URL
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_kenmerk_url: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
31,
|
||
v_mld_opdr_kenmerk_url);
|
||
--
|
||
|
||
|
||
-- HIER KOMEN DE MATERIAAL REGELS
|
||
-- 32 - mld_opdr_mat_linenr
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_linenr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
32,
|
||
v_mld_opdr_materiaal_linenr);
|
||
--
|
||
-- 33 - mld_opdr_mat_code
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_code: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
33,
|
||
v_mld_opdr_materiaal_code);
|
||
--
|
||
-- 34 - v_mld_opdr_materiaal_omschr
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_omschr: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
34,
|
||
v_mld_opdr_materiaal_omschr);
|
||
--
|
||
|
||
--MARX#53353: LEDO uitbreiding
|
||
-- 35 - v_mld_opdr_materiaal_groep (locatie/ruimte, zoals keuken, badkamer etc)
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_groep: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
35,
|
||
v_mld_opdr_materiaal_groep);
|
||
|
||
-- 36 - v_mld_opdr_materiaal_extra2 (element)
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_extra2: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
36,
|
||
v_mld_opdr_materiaal_extra2);
|
||
|
||
-- 37 - v_mld_opdr_materiaal_extra4 (oorzaak)
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_extra4: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
37,
|
||
v_mld_opdr_materiaal_extra4);
|
||
|
||
|
||
-- 38 - v_mld_opdr_materiaal_eenhcode (tbv SidB)
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_eenhcode: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
38,
|
||
v_mld_opdr_materiaal_eenhcode);
|
||
|
||
-- 39 - v_mld_opdr_materiaal_eenheid
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_eenheid: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
39,
|
||
v_mld_opdr_materiaal_eenheid);
|
||
--
|
||
-- 40 - v_mld_opdr_materiaal_prijs
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_prijs: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
40,
|
||
v_mld_opdr_materiaal_prijs);
|
||
--
|
||
-- 41 - v_mld_opdr_materiaal_aantal
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_aantal: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
41,
|
||
v_mld_opdr_materiaal_aantal);
|
||
--
|
||
-- 42 - v_mld_opdr_materiaal_btwperc
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_btwperc: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
42,
|
||
v_mld_opdr_materiaal_btwperc);
|
||
--
|
||
-- 43 - v_mld_opdr_materiaal_totprijs; Doen we (voorlopig) niets mee, er is geen veld in mld_opdr_materialen hiervoor, en bovendien kunnen we dat ook zelf uitrekenen.
|
||
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_totprijs: ';
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
43,
|
||
v_mld_opdr_materiaal_totprijs);
|
||
--
|
||
|
||
|
||
v_aanduiding :=
|
||
SUBSTR (
|
||
'['
|
||
|| v_mld_opdr_execcode
|
||
|| '|'
|
||
|| v_mld_melding_externnr
|
||
|| '|'
|
||
|| SUBSTR (v_mld_melding_omschrijving, 1, 100)
|
||
|| '|'
|
||
|| v_mld_melding_cust_name
|
||
|| '|'
|
||
|| v_mld_melding_cust_straat
|
||
|| '|'
|
||
|| v_mld_melding_cust_plaats
|
||
|| '|'
|
||
|| v_mld_opdr_externnr
|
||
|| '] ',
|
||
1,
|
||
1000);
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_mld_melding_externnr) = 'MLD_MELDING_EXTERNNR'
|
||
AND UPPER (v_mld_melding_omschrijving) = 'MLD_MELDING_OMSCHRIJVING'
|
||
AND UPPER (v_mld_opdr_externnr) = 'MLD_OPDR_EXTERNNR'
|
||
AND UPPER (v_mld_opdr_ordernr) = 'MLD_OPDR_ORDERNR'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
|
||
v_errorhint := 'Ongeldige exec-code';
|
||
v_mld_opdr_execcode := TRIM (v_mld_opdr_execcode);
|
||
|
||
IF (v_mld_opdr_execcode IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_execcode) > 10
|
||
THEN
|
||
v_mld_opdr_execcode := SUBSTR (v_mld_opdr_execcode, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Exec Code te lang',
|
||
'Nummer wordt afgebroken tot [' || v_mld_opdr_execcode || ']');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding,
|
||
v_errorhint || ' - Opdracht wordt overgeslagen');
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig extern leveranciernummer (vendor account number)';
|
||
v_ax_supplier_id := TRIM (v_ax_supplier_id);
|
||
|
||
IF (v_ax_supplier_id IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_ax_supplier_id) > 50
|
||
THEN
|
||
v_ax_supplier_id := SUBSTR (v_ax_supplier_id, 1, 50);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Extern leveranciersnummer te lang',
|
||
'Nummer wordt afgebroken tot [' || v_ax_supplier_id || ']');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding,
|
||
v_errorhint || ' - Opdracht wordt overgeslagen');
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig GLN Eigenaar/VvE';
|
||
v_mld_opdr_gln_vve := TRIM (v_mld_opdr_gln_vve);
|
||
|
||
IF (v_mld_opdr_gln_vve IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_gln_vve) > 50
|
||
THEN
|
||
v_mld_opdr_gln_vve := SUBSTR (v_mld_opdr_gln_vve, 1, 50);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'GLN Eigenaar/VvE te lang',
|
||
'GLN wordt afgebroken tot [' || v_mld_opdr_gln_vve || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig opdrachtsoort';
|
||
v_mld_opdr_soort := TRIM (v_mld_opdr_soort);
|
||
|
||
IF (v_mld_opdr_soort IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_soort) > 3
|
||
THEN
|
||
v_mld_opdr_soort := SUBSTR (v_mld_opdr_soort, 1, 3);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Opdrachtsoort te lang',
|
||
'Soort wordt afgebroken tot [' || v_mld_opdr_soort || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig opdrachttypering';
|
||
v_mld_opdr_typering := TRIM (v_mld_opdr_typering);
|
||
|
||
IF (v_mld_opdr_typering IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_typering) > 3
|
||
THEN
|
||
v_mld_opdr_typering := SUBSTR (v_mld_opdr_typering, 1, 3);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Opdrachttypering te lang',
|
||
'Typering wordt afgebroken tot [' || v_mld_opdr_typering || ']');
|
||
END IF;
|
||
-- Ticket MARX#74867 Opdrachttypering lijkt niet juist in Mareon (oorzaak is dat Tobias MAO kan sturen bij een 1e opdracht via update-triggers, en kans met nieuwe fucntionaliteit "bundelen opdrachten" is dat flink toegenomen).
|
||
-- Besloten is dat Mareon een MAO (vanuit Tobias) overruled met ORG (een GAR moet wel GAR blijven!)
|
||
IF v_mld_opdr_typering = 'MAO'
|
||
THEN v_mld_opdr_typering := 'ORG';
|
||
END IF;
|
||
ELSE
|
||
-- MARX#72932 Testbevinding bij bundelen opdrachten: MAO gewenst in portaal
|
||
-- Kennelijk is er een situatie waarbij T365 niet altijd ORG doorgeeft
|
||
-- Maar daarnaast ontbreekt dit gegeven ook bij opdrachten vanuit Facilitor en Rems.
|
||
-- Bij aanmaak vult Mareon bij ontbreken van een expliciete typering deze op met (default) ORG.
|
||
v_mld_opdr_typering := 'ORG';
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig opdrachtafspraak';
|
||
v_mld_opdr_afspraak := TRIM (v_mld_opdr_afspraak);
|
||
|
||
IF (v_mld_opdr_afspraak IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_afspraak) > 3
|
||
THEN
|
||
v_mld_opdr_afspraak := SUBSTR (v_mld_opdr_afspraak, 1, 3);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Opdrachtafspraak te lang',
|
||
'Afspraak wordt afgebroken tot [' || v_mld_opdr_afspraak || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldig extern meldingnummer';
|
||
v_mld_melding_externnr := TRIM (v_mld_melding_externnr);
|
||
|
||
IF (v_mld_melding_externnr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_externnr) > 30
|
||
THEN
|
||
v_mld_melding_externnr := SUBSTR (v_mld_melding_externnr, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Extern meldingnummer te lang',
|
||
'Nummer wordt afgebroken tot [' || v_mld_melding_externnr || ']');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding,
|
||
v_errorhint || ' - Opdracht wordt overgeslagen');
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig melding omschrijving';
|
||
v_mld_melding_omschrijving := TRIM (v_mld_melding_omschrijving);
|
||
|
||
IF (v_mld_melding_omschrijving IS NOT NULL)
|
||
THEN
|
||
v_mld_melding_omschrijving := REPLACE (v_mld_melding_omschrijving, '@@', CHR(10));
|
||
|
||
IF LENGTH (v_mld_melding_omschrijving) > 4000
|
||
THEN
|
||
v_mld_melding_omschrijving := SUBSTR (v_mld_melding_omschrijving, 1, 4000);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Melding omschrijving te lang',
|
||
'Omschrijving wordt afgebroken tot 4000 tekens');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig afdelingsnaam';
|
||
v_prs_afdeling_naam := TRIM (v_prs_afdeling_naam);
|
||
|
||
IF (v_prs_afdeling_naam IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_prs_afdeling_naam) > 10
|
||
THEN
|
||
v_prs_afdeling_naam := SUBSTR (v_prs_afdeling_naam, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Afdelingscode te lang',
|
||
'Afdelingscode wordt afgebroken tot [' || v_prs_afdeling_naam || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig purchorder company ID';
|
||
v_mld_opdr_po_companyid := TRIM (v_mld_opdr_po_companyid);
|
||
|
||
IF (v_mld_opdr_po_companyid IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_po_companyid) > 20
|
||
THEN
|
||
v_mld_opdr_po_companyid := SUBSTR (v_mld_opdr_po_companyid, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'purchorder company ID te lang',
|
||
'purchorder company ID wordt afgebroken tot [' || v_mld_opdr_po_companyid || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige naam opzichter';
|
||
v_mld_opdr_opzichter := TRIM (v_mld_opdr_opzichter);
|
||
|
||
IF (v_mld_opdr_opzichter IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_opzichter) > 50
|
||
THEN
|
||
v_mld_opdr_opzichter := SUBSTR (v_mld_opdr_opzichter, 1, 50);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Naam opzichter te lang',
|
||
'Naam wordt afgebroken tot [' || v_mld_opdr_opzichter || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige klantnaam/contactpersoon';
|
||
v_mld_melding_cust_name := TRIM (v_mld_melding_cust_name);
|
||
|
||
IF (v_mld_melding_cust_name IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_name) > 50
|
||
THEN
|
||
v_mld_melding_cust_name := SUBSTR (v_mld_melding_cust_name, 1, 50);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Naam klant/contactpersoon te lang',
|
||
'Naam wordt afgebroken tot [' || v_mld_melding_cust_name || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige straatnaam';
|
||
v_mld_melding_cust_straat := TRIM (v_mld_melding_cust_straat);
|
||
|
||
IF (v_mld_melding_cust_straat IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_straat) > 40
|
||
THEN
|
||
v_mld_melding_cust_straat := SUBSTR (v_mld_melding_cust_straat, 1, 40);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Straatnaam te lang',
|
||
'Naam wordt afgebroken tot [' || v_mld_melding_cust_straat || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig huisnr';
|
||
v_mld_melding_cust_huisnr := TRIM (v_mld_melding_cust_huisnr);
|
||
|
||
IF (v_mld_melding_cust_huisnr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_huisnr) > 10
|
||
THEN
|
||
v_mld_melding_cust_huisnr := SUBSTR (v_mld_melding_cust_huisnr, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Huisnr te lang',
|
||
'Nummer wordt afgebroken tot [' || v_mld_melding_cust_huisnr || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige toevoeging huisnr';
|
||
v_mld_melding_cust_huisnr2 := TRIM (v_mld_melding_cust_huisnr2);
|
||
|
||
IF (v_mld_melding_cust_huisnr2 IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_huisnr2) > 10
|
||
THEN
|
||
v_mld_melding_cust_huisnr2 := SUBSTR (v_mld_melding_cust_huisnr, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Toevoeging huisnr te lang',
|
||
'Nummer wordt afgebroken tot [' || v_mld_melding_cust_huisnr2 || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige postcode';
|
||
v_mld_melding_cust_postcode := TRIM (v_mld_melding_cust_postcode);
|
||
|
||
IF (v_mld_melding_cust_postcode IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_postcode) > 10
|
||
THEN
|
||
v_mld_melding_cust_postcode := SUBSTR (v_mld_melding_cust_postcode, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Postcode te lang',
|
||
'Postcode wordt afgebroken tot [' || v_mld_melding_cust_postcode || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
|
||
v_errorhint := 'Ongeldige plaatsnaam';
|
||
v_mld_melding_cust_plaats := TRIM (v_mld_melding_cust_plaats);
|
||
|
||
IF (v_mld_melding_cust_plaats IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_plaats) > 50
|
||
THEN
|
||
v_mld_melding_cust_plaats := SUBSTR (v_mld_melding_cust_plaats, 1, 50);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Plaatsnaam te lang',
|
||
'Plaatsnaam wordt afgebroken tot [' || v_mld_melding_cust_plaats || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige telefoonnummer';
|
||
v_mld_melding_cust_telefoonnr := TRIM (v_mld_melding_cust_telefoonnr);
|
||
|
||
IF (v_mld_melding_cust_telefoonnr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_telefoonnr) > 20
|
||
THEN
|
||
v_mld_melding_cust_telefoonnr := SUBSTR (v_mld_melding_cust_telefoonnr, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Telefoonnummer is te lang',
|
||
'Telefoonnummer wordt afgebroken tot [' || v_mld_melding_cust_telefoonnr || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig mobielnr';
|
||
v_mld_melding_cust_mobielnr := TRIM (v_mld_melding_cust_mobielnr);
|
||
|
||
IF (v_mld_melding_cust_mobielnr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_mobielnr) > 20
|
||
THEN
|
||
v_mld_melding_cust_mobielnr := SUBSTR (v_mld_melding_cust_mobielnr, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Mobielnr is te lang',
|
||
'Mobielnummer wordt afgebroken tot [' || v_mld_melding_cust_mobielnr || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige e-mail';
|
||
v_mld_melding_cust_email := TRIM (REPLACE (v_mld_melding_cust_email, '@@', ''));
|
||
|
||
IF (v_mld_melding_cust_email IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_email) > 250
|
||
THEN
|
||
v_mld_melding_cust_email := SUBSTR (v_mld_melding_cust_email, 1, 250);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'E-mail is te lang',
|
||
'E-mail wordt afgebroken tot [' || v_mld_melding_cust_email || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige objectomschrijving';
|
||
v_mld_melding_cust_object_oms := TRIM (REPLACE (v_mld_melding_cust_object_oms, '@@', ', '));
|
||
|
||
IF (v_mld_melding_cust_object_oms IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_cust_object_oms) > 255
|
||
THEN
|
||
v_mld_melding_cust_object_oms := SUBSTR (v_mld_melding_cust_object_oms, 1, 255);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Objectomschrijving te lang',
|
||
'Objectomschrijving wordt afgebroken tot [' || v_mld_melding_cust_object_oms || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige complexnummer';
|
||
v_mld_opdr_complexnummer := TRIM (v_mld_opdr_complexnummer);
|
||
|
||
IF (v_mld_opdr_complexnummer IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_complexnummer) > 20
|
||
THEN
|
||
v_mld_opdr_complexnummer := SUBSTR (v_mld_opdr_complexnummer, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Complexnummer te lang',
|
||
'Complexnummer wordt afgebroken tot [' || v_mld_opdr_complexnummer || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige pandnummer';
|
||
v_mld_opdr_pandnummer := TRIM (v_mld_opdr_pandnummer);
|
||
|
||
IF (v_mld_opdr_pandnummer IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_pandnummer) > 20
|
||
THEN
|
||
v_mld_opdr_pandnummer := SUBSTR (v_mld_opdr_pandnummer, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Pandnummer te lang',
|
||
'Pandnummer wordt afgebroken tot [' || v_mld_opdr_pandnummer || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige VGE nummer';
|
||
v_mld_opdr_VGEnummer := TRIM (v_mld_opdr_VGEnummer);
|
||
|
||
IF (v_mld_opdr_VGEnummer IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_VGEnummer) > 20
|
||
THEN
|
||
v_mld_opdr_VGEnummer := SUBSTR (v_mld_opdr_VGEnummer, 1, 20);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'VGE nummer te lang',
|
||
'VGE nummer wordt afgebroken tot [' || v_mld_opdr_VGEnummer || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige opdrachtomschrijving (memo)';
|
||
v_mld_melding_memo := TRIM (v_mld_melding_memo);
|
||
|
||
IF (v_mld_melding_memo IS NOT NULL)
|
||
THEN
|
||
v_mld_melding_memo := REPLACE (v_mld_melding_memo, '@@', CHR(10));
|
||
|
||
IF LENGTH (v_mld_melding_memo) > 4000
|
||
THEN
|
||
v_mld_melding_memo := SUBSTR (v_mld_melding_memo, 1, 4000);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Opdrachtomschrijving (memo) te lang',
|
||
'Omschrijving wordt afgebroken tot 4000 tekens');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldig extern opdrachtnummer';
|
||
v_mld_opdr_externnr := TRIM (v_mld_opdr_externnr);
|
||
|
||
IF (v_mld_opdr_externnr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_externnr) > 30
|
||
THEN
|
||
v_mld_opdr_externnr := SUBSTR (v_mld_opdr_externnr, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Externe opdrachtnummer te lang',
|
||
'Opdrachtnummer wordt afgebroken tot [' || v_mld_opdr_externnr || ']');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding,
|
||
v_errorhint || ' - Opdracht wordt overgeslagen');
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig externe taskId(AX)/BonId(Tobias)';
|
||
v_mld_opdr_ordernr := TRIM (v_mld_opdr_ordernr);
|
||
|
||
IF (v_mld_opdr_ordernr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_ordernr) > 30
|
||
THEN
|
||
v_mld_opdr_ordernr := SUBSTR (v_mld_opdr_ordernr, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Externe TaskId/BonId te lang',
|
||
'TaskId/BonId wordt afgebroken tot [' || v_mld_opdr_ordernr || ']');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding,
|
||
v_errorhint || ' - Opdracht wordt overgeslagen');
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige opdracht startdatum';
|
||
v_mld_opdr_datumbegin := TRIM (v_mld_opdr_datumbegin);
|
||
|
||
IF (v_mld_opdr_datumbegin IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_datumbegin) > 40
|
||
THEN
|
||
v_mld_opdr_datumbegin := SUBSTR (v_mld_opdr_datumbegin, 1, 40);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Startdatum van opdracht te lang',
|
||
'Datum wordt afgebroken tot [' || v_mld_opdr_datumbegin || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige opdracht plandatum';
|
||
v_mld_opdr_datumplan := TRIM (v_mld_opdr_datumplan);
|
||
|
||
IF (v_mld_opdr_datumplan IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_datumplan) > 40
|
||
THEN
|
||
v_mld_opdr_datumplan := SUBSTR (v_mld_opdr_datumplan, 1, 40);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Plandatum van opdracht te lang',
|
||
'Datum wordt afgebroken tot [' || v_mld_opdr_datumplan || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige opdracht einddatum';
|
||
v_mld_opdr_einddatum := TRIM (v_mld_opdr_einddatum);
|
||
|
||
IF (v_mld_opdr_einddatum IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_einddatum) > 40
|
||
THEN
|
||
v_mld_opdr_einddatum := SUBSTR (v_mld_opdr_einddatum, 1, 40);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Einddatum van opdracht te lang',
|
||
'Datum wordt afgebroken tot [' || v_mld_opdr_einddatum || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige URL (aanvullende externe informatie)';
|
||
v_mld_opdr_kenmerk_url := TRIM (v_mld_opdr_kenmerk_url);
|
||
|
||
IF (v_mld_opdr_kenmerk_url IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_melding_memo) > 512
|
||
THEN
|
||
v_mld_opdr_kenmerk_url := SUBSTR (v_mld_opdr_kenmerk_url, 1, 512);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Externe URL te lang',
|
||
'URL wordt afgebroken tot 512 tekens');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
------- Materiaal regels
|
||
|
||
v_errorhint := 'Ongeldige materiaal regelnr';
|
||
v_mld_opdr_materiaal_linenr := TRIM (v_mld_opdr_materiaal_linenr);
|
||
|
||
IF (v_mld_opdr_materiaal_linenr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_linenr) > 10
|
||
THEN
|
||
v_mld_opdr_materiaal_linenr := SUBSTR (v_mld_opdr_materiaal_linenr, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal regelnr te lang',
|
||
'Regelnr wordt afgebroken tot [' || v_mld_opdr_materiaal_linenr || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal code';
|
||
v_mld_opdr_materiaal_code := TRIM (v_mld_opdr_materiaal_code);
|
||
|
||
IF (v_mld_opdr_materiaal_code IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_code) > 30
|
||
THEN
|
||
v_mld_opdr_materiaal_code := SUBSTR (v_mld_opdr_materiaal_code, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal code te lang',
|
||
'Code wordt afgebroken tot [' || v_mld_opdr_materiaal_code || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal omschrijving';
|
||
v_mld_opdr_materiaal_omschr := TRIM (v_mld_opdr_materiaal_omschr);
|
||
|
||
IF (v_mld_opdr_materiaal_omschr IS NOT NULL)
|
||
THEN
|
||
v_mld_opdr_materiaal_omschr := REPLACE (v_mld_opdr_materiaal_omschr, '@@', CHR(10));
|
||
IF LENGTH (v_mld_opdr_materiaal_omschr) > 255
|
||
THEN
|
||
v_mld_opdr_materiaal_omschr := SUBSTR (v_mld_opdr_materiaal_omschr, 1, 255);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal omschrijving te lang',
|
||
'Omschrijving wordt afgebroken tot [' || v_mld_opdr_materiaal_omschr || ']');
|
||
END IF;
|
||
ELSE
|
||
v_mld_opdr_materiaal_omschr := '?';
|
||
END IF;
|
||
|
||
|
||
--MARX#53353: LEDO uitbreiding
|
||
|
||
v_errorhint := 'Ongeldige locatie bij materiaal (LEDO)';
|
||
v_mld_opdr_materiaal_groep := TRIM (v_mld_opdr_materiaal_groep);
|
||
|
||
IF (v_mld_opdr_materiaal_groep IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_groep) > 60
|
||
THEN
|
||
v_mld_opdr_materiaal_groep := SUBSTR (v_mld_opdr_materiaal_groep, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal locatie (LEDO)',
|
||
'Locatie/ruimte wordt afgebroken tot [' || v_mld_opdr_materiaal_groep || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldig element bij materiaal (LEDO)';
|
||
v_mld_opdr_materiaal_extra2 := TRIM (v_mld_opdr_materiaal_extra2);
|
||
|
||
IF (v_mld_opdr_materiaal_extra2 IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_extra2) > 60
|
||
THEN
|
||
v_mld_opdr_materiaal_extra2 := SUBSTR (v_mld_opdr_materiaal_extra2, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal element (LEDO)',
|
||
'Element wordt afgebroken tot [' || v_mld_opdr_materiaal_extra2 || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige oorzaak bij materiaal (LEDO)';
|
||
v_mld_opdr_materiaal_extra4 := TRIM (v_mld_opdr_materiaal_extra4);
|
||
|
||
IF (v_mld_opdr_materiaal_extra4 IS NOT NULL)
|
||
THEN
|
||
v_mld_opdr_materiaal_extra4 := REPLACE (v_mld_opdr_materiaal_extra4, '@@', CHR(10));
|
||
IF LENGTH (v_mld_opdr_materiaal_extra4) > 4000
|
||
THEN
|
||
v_mld_opdr_materiaal_extra4 := SUBSTR (v_mld_opdr_materiaal_extra4, 1, 4000);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal element (LEDO)',
|
||
'Element wordt afgebroken tot [' || v_mld_opdr_materiaal_extra4 || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige materiaal eenheid code';
|
||
v_mld_opdr_materiaal_eenhcode := TRIM (v_mld_opdr_materiaal_eenhcode);
|
||
|
||
IF (v_mld_opdr_materiaal_eenhcode IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_eenhcode) > 10
|
||
THEN
|
||
v_mld_opdr_materiaal_eenhcode := SUBSTR (v_mld_opdr_materiaal_eenhcode, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal eenheid code te lang',
|
||
'Code eenheid wordt afgebroken tot [' || v_mld_opdr_materiaal_eenhcode || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal eenheid';
|
||
v_mld_opdr_materiaal_eenheid := TRIM (v_mld_opdr_materiaal_eenheid);
|
||
|
||
IF (v_mld_opdr_materiaal_eenheid IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_eenheid) > 30
|
||
THEN
|
||
v_mld_opdr_materiaal_eenheid := SUBSTR (v_mld_opdr_materiaal_eenheid, 1, 30);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal eenheid te lang',
|
||
'Eenheid wordt afgebroken tot [' || v_mld_opdr_materiaal_eenheid || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal prijs';
|
||
v_mld_opdr_materiaal_prijs := TRIM (v_mld_opdr_materiaal_prijs);
|
||
|
||
IF (v_mld_opdr_materiaal_prijs IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_prijs) > 10
|
||
THEN
|
||
v_mld_opdr_materiaal_prijs := SUBSTR (v_mld_opdr_materiaal_prijs, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal prijs te lang',
|
||
'Prijs wordt afgebroken tot [' || v_mld_opdr_materiaal_prijs || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal aantal';
|
||
v_mld_opdr_materiaal_aantal := TRIM (v_mld_opdr_materiaal_aantal);
|
||
|
||
IF (v_mld_opdr_materiaal_aantal IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_aantal) > 8
|
||
THEN
|
||
v_mld_opdr_materiaal_aantal := SUBSTR (v_mld_opdr_materiaal_aantal, 1, 8);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal aantal te lang',
|
||
'Aantal wordt afgebroken tot [' || v_mld_opdr_materiaal_aantal || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige materiaal btw percentage';
|
||
v_mld_opdr_materiaal_btwperc := TRIM (v_mld_opdr_materiaal_btwperc);
|
||
|
||
IF (v_mld_opdr_materiaal_btwperc IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_mld_opdr_materiaal_btwperc) > 10
|
||
THEN
|
||
v_mld_opdr_materiaal_btwperc := SUBSTR (v_mld_opdr_materiaal_btwperc, 1, 10);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Materiaal btw perc. te lang',
|
||
'Percentage wordt afgebroken tot [' || v_mld_opdr_materiaal_btwperc || ']');
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF (v_ongeldig = 0)
|
||
THEN
|
||
BEGIN
|
||
v_errorhint := 'Fout bij toevoegen regel aan importtabel mar_imp_ax_opdrachten';
|
||
|
||
INSERT INTO mar_imp_ax_opdrachten (fac_import_key,
|
||
mar_imp_ax_opdrachten_datum,
|
||
mld_opdr_execcode,
|
||
ax_supplier_id,
|
||
mld_opdr_gln_vve,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_melding_externnr,
|
||
mld_melding_omschrijving,
|
||
prs_afdeling_naam,
|
||
mld_opdr_purchOrderCompanyId,
|
||
mld_opdr_opzichter,
|
||
mld_melding_cust_name,
|
||
mld_melding_cust_straat,
|
||
mld_melding_cust_huisnr,
|
||
mld_melding_cust_huisnr2,
|
||
mld_melding_cust_postcode,
|
||
mld_melding_cust_plaats,
|
||
mld_melding_cust_telefoonnr,
|
||
mld_melding_cust_mobielnr,
|
||
mld_melding_cust_email,
|
||
mld_melding_cust_object_omschr,
|
||
mld_opdr_complexnummer,
|
||
mld_opdr_pandnummer,
|
||
mld_opdr_VGEnummer,
|
||
mld_melding_memo,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_datumplan,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_kenmerk_url,
|
||
mld_opdr_materiaal_linenr,
|
||
mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_prijs,
|
||
mld_opdr_materiaal_aantal,
|
||
mld_opdr_materiaal_btwperc)
|
||
VALUES (p_import_key,
|
||
SYSDATE,
|
||
v_mld_opdr_execcode,
|
||
v_ax_supplier_id,
|
||
v_mld_opdr_gln_vve,
|
||
v_mld_opdr_soort,
|
||
v_mld_opdr_typering,
|
||
v_mld_opdr_afspraak,
|
||
v_mld_melding_externnr,
|
||
v_mld_melding_omschrijving,
|
||
v_prs_afdeling_naam,
|
||
v_mld_opdr_po_companyid,
|
||
v_mld_opdr_opzichter,
|
||
v_mld_melding_cust_name,
|
||
v_mld_melding_cust_straat,
|
||
v_mld_melding_cust_huisnr,
|
||
v_mld_melding_cust_huisnr2,
|
||
v_mld_melding_cust_postcode,
|
||
v_mld_melding_cust_plaats,
|
||
v_mld_melding_cust_telefoonnr,
|
||
v_mld_melding_cust_mobielnr,
|
||
v_mld_melding_cust_email,
|
||
v_mld_melding_cust_object_oms,
|
||
v_mld_opdr_complexnummer,
|
||
v_mld_opdr_pandnummer,
|
||
v_mld_opdr_VGEnummer,
|
||
v_mld_melding_memo,
|
||
v_mld_opdr_externnr,
|
||
v_mld_opdr_ordernr,
|
||
v_mld_opdr_datumbegin,
|
||
v_mld_opdr_datumplan,
|
||
v_mld_opdr_einddatum,
|
||
v_mld_opdr_kenmerk_url,
|
||
v_mld_opdr_materiaal_linenr,
|
||
v_mld_opdr_materiaal_code,
|
||
v_mld_opdr_materiaal_omschr,
|
||
v_mld_opdr_materiaal_groep,
|
||
v_mld_opdr_materiaal_extra2,
|
||
v_mld_opdr_materiaal_extra4,
|
||
v_mld_opdr_materiaal_eenhcode,
|
||
v_mld_opdr_materiaal_eenheid,
|
||
v_mld_opdr_materiaal_prijs,
|
||
v_mld_opdr_materiaal_aantal,
|
||
v_mld_opdr_materiaal_btwperc);
|
||
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Ingelezen regel kan niet worden weggeschreven!');
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX opdrachten: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX opdrachten: aantal geldige regels: ' || TO_CHAR (v_count_import),
|
||
'');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_import_gen_opdrachten;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_gen_opdrachten (p_import_key IN NUMBER, p_erp_opdrachtgever IN VARCHAR2)
|
||
IS
|
||
v_aanduiding VARCHAR2 (2000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_materiaal_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count_mat_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
|
||
v_aantal NUMBER (10);
|
||
|
||
v_mld_melding_key NUMBER (10);
|
||
v_mld_melding_status NUMBER (10);
|
||
v_mld_opdr_key NUMBER (10);
|
||
v_mld_stdmelding_key NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_prs_bedrijf_verwerkprijzen NUMBER (10);
|
||
|
||
v_mld_opdr_updates_allowed NUMBER (10);
|
||
|
||
v_ax_company_id prs_bedrijf.prs_overeenkomst_nr%TYPE;
|
||
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;
|
||
v_opdr_heeft_meerdere_subopdr NUMBER (10);
|
||
v_opdr_heeft_materiaal NUMBER (10);
|
||
|
||
v_prs_bedrijfadres_url prs_bedrijfadres.prs_bedrijfadres_url%TYPE;
|
||
v_prs_bedrijfadres_xsl prs_bedrijfadres.prs_bedrijfadres_xsl%TYPE;
|
||
v_btwperc_key NUMBER (10);
|
||
|
||
v_adres VARCHAR2 (100);
|
||
v_straatnaam VARCHAR2 (100);
|
||
v_huisnr VARCHAR2 (100);
|
||
v_huisnr_toev VARCHAR2 (100);
|
||
|
||
v_vertaalde_GLN_eigenaar VARCHAR2 (1000);
|
||
v_vertaalde_GLN_postcode VARCHAR2 (1000);
|
||
|
||
c_mld_typeopdr_key NUMBER (10);
|
||
v_prev_mld_opdr_externnr VARCHAR2 (100);
|
||
|
||
|
||
c_kenmerk_key_cust_name NUMBER (10);
|
||
c_kenmerk_key_cust_adres NUMBER (10);
|
||
c_kenmerk_key_cust_straatnaam NUMBER (10);
|
||
c_kenmerk_key_cust_huisnr NUMBER (10);
|
||
c_kenmerk_key_cust_huisnr_toev NUMBER (10);
|
||
c_kenmerk_key_cust_postcode NUMBER (10);
|
||
c_kenmerk_key_cust_plaats NUMBER (10);
|
||
c_kenmerk_key_cust_telefoonnr NUMBER (10);
|
||
c_kenmerk_key_cust_mobielnr NUMBER (10);
|
||
c_kenmerk_key_cust_email NUMBER (10);
|
||
c_kenmerk_key_cust_object_oms NUMBER (10);
|
||
c_kenmerkopdr_key_locatie NUMBER (10);
|
||
c_kenmerkopdr_key_memo NUMBER (10);
|
||
c_kenmerkopdr_key_opzichter NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_complexnr NUMBER (10);
|
||
c_kenmerkopdr_key_pandnummer NUMBER (10);
|
||
c_kenmerkopdr_key_VGEnummer NUMBER (10);
|
||
c_kenmerkopdr_key_bouwjaar NUMBER (10);
|
||
c_kenmerkopdr_key_PO_companyID NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_URL NUMBER (10);
|
||
c_kenmerkopdr_key_bijlagen NUMBER (10);
|
||
|
||
|
||
c_kenmerkopdr_key_opdr_soort NUMBER (10);
|
||
c_kenmerkopdr_key_opdr_type NUMBER (10);
|
||
c_kenmerkopdr_key_opdr_afspr NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_opdr_gln_vve NUMBER (10);
|
||
c_kenmerkopdr_key_opdr_gln_eig NUMBER (10);
|
||
c_kenmerkopdr_key_opdr_gln_opn NUMBER (10);
|
||
|
||
c_kenmerkopdr_key_eig_naam NUMBER (10);
|
||
c_kenmerkopdr_key_eig_adres NUMBER (10);
|
||
c_kenmerkopdr_key_eig_pc NUMBER (10);
|
||
c_kenmerkopdr_key_eig_plaats NUMBER (10);
|
||
|
||
|
||
c_kenmerkopdr_key_opdr_erp NUMBER (10);
|
||
|
||
v_txt_ordnew VARCHAR2 (100);
|
||
|
||
v_uitvoeringslocatie VARCHAR2 (1000);
|
||
c_kenmerkopdr_key_uitv_locatie NUMBER (10);
|
||
|
||
v_pos NUMBER (10);
|
||
v_overrule_success NUMBER (10);
|
||
|
||
v_push_notifyqueue NUMBER (10);
|
||
v_push_err_warn VARCHAR2(1);
|
||
|
||
l_res_rsv_ruimte_key NUMBER(10);
|
||
l_res_rsv_ruimte_van DATE;
|
||
|
||
v_mld_opdr_materiaal_extra3new VARCHAR2 (4000);
|
||
|
||
l_lat NUMBER(16,6);
|
||
l_lng NUMBER(16,6);
|
||
|
||
c_date_2099 DATE;
|
||
|
||
-- 01 - Mareon execcode: 1, 2 of 3 en bepaalt de soort regel en manier van verwerken:
|
||
-- exec_code = 1 : Hoofdregel, de AX inkooporder IONR-nummer i.c.m. de AX-opdracht (task-id)
|
||
-- exec_code = 2 : Bijbehorende extra kenmerken behorende bij exec_code 1, op ditzelfde nivo.
|
||
-- exec_code = 3 : Bijbehorende materiaalregels (kunnen dus meer regels zijn, voorzien van een regelnr in v_mld_opdr_materiaal_linenr)
|
||
|
||
|
||
-- Alle ingelezen AX opdrachten, d.w.z. de HOOFD-opdracht (IONR) met SUB-opdracht (tasks), oftewel hier NIET de materiaal regels
|
||
-- Gesorteerd op TASKID 'p_mld_opdr_ordernr', zodat als er meerdere SUB-opdrachten bij 1 IONR zijn, die netjes in volgorde worden aangemaakt (altijd beter dan random).
|
||
CURSOR c_ax_opdrachten
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key AND mld_opdr_execcode = '1' AND mld_opdr_materiaal_linenr IS NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
|
||
-- Van de ingelezen HOOFD-opdracht met SUB-opdracht (cursor hierboven) enkele aanvullende gegevens die horen bij HOOFDOPDRACHT (IONR), zoals opzichter, perceelnr, pandid etc.
|
||
-- Reden om dit in aanvullende regels te doen is de maximale lengte van 4000 tekens op 1 regel, op deze manier worden alle gegevens over meerdere regels verdeeld....
|
||
-- Dit levert per IONR (p_mld_opdr_externnr) en taskid (p_mld_opdr_ordernr) exact 1 regel op.
|
||
CURSOR c_ax_opdrachten_overige_regels (
|
||
p_execcode VARCHAR2,
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_ordernr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = p_execcode
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_ordernr = p_mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
-- Alle ANDERE! ingelezen AX HOOFD-opdrachten van 1 inkooporder IONR (inkooporder) / externe opdrachtnummer 'p_mld_opdr_externnr'
|
||
-- ANDERE! (of beter gezegd: overige) betekent dus met dezelfde IONR maar NIET! dezelfde TASKID 'p_mld_opdr_ordernr'
|
||
-- Ook hier gesorteerd op TASKID 'p_mld_opdr_ordernr'.
|
||
CURSOR c_ax_opdrachten_1_inkooporder (
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_ordernr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '1'
|
||
AND mld_opdr_materiaal_linenr IS NULL
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_ordernr <> p_mld_opdr_ordernr
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
|
||
-- Materiaal-regels hebben een gevulde line-nummer (wordt in de XSL voor gezorgd),
|
||
-- En we willen alle materiaal-regels van dezelfde IONR (inkooporder) / externe opdrachtnummer 'p_mld_opdr_externnr' en daarbinnen van 1 sub(opdracht) p_mld_opdr_ordernr
|
||
-- En ook hier gesorteerd op 'p_mld_opdr_ordernr', en daarbinnen op linenummer.
|
||
CURSOR c_ax_opdrachten_materiaal (
|
||
p_mld_opdr_externnr VARCHAR2,
|
||
p_mld_opdr_ordernr VARCHAR2)
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key
|
||
AND mld_opdr_execcode = '3'
|
||
AND mld_opdr_externnr = p_mld_opdr_externnr
|
||
AND mld_opdr_ordernr = p_mld_opdr_ordernr
|
||
AND mld_opdr_materiaal_linenr IS NOT NULL
|
||
ORDER BY mld_opdr_ordernr, mld_opdr_materiaal_linenr;
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Twinq stuurt bestanden ineens mee in order-XML (SALES005)
|
||
CURSOR c_ax_opdr_attached_file
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key AND mld_opdr_execcode = '4' AND mld_opdr_materiaal_linenr IS NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
CURSOR c_ax_opdr_mat_attached_file
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_opdrachten
|
||
WHERE fac_import_key = p_import_key AND mld_opdr_execcode = '5' AND mld_opdr_materiaal_linenr IS NOT NULL
|
||
ORDER BY mld_opdr_ordernr;
|
||
|
||
BEGIN
|
||
-- Default Error
|
||
v_push_err_warn := 'E';
|
||
|
||
v_count_tot := 0;
|
||
v_count_materiaal_tot := 0;
|
||
v_count_error := 0;
|
||
v_count_mat_error := 0;
|
||
v_overrule_success := 0; -- Neutraal (geen overrule).
|
||
|
||
--Standaard opdracht key 5 (bestaat standaard)
|
||
c_mld_typeopdr_key := 5;
|
||
|
||
c_kenmerk_key_cust_name := 1;
|
||
c_kenmerk_key_cust_adres := 2;
|
||
c_kenmerk_key_cust_straatnaam := 9;
|
||
c_kenmerk_key_cust_huisnr := 10;
|
||
c_kenmerk_key_cust_huisnr_toev := 19;
|
||
c_kenmerk_key_cust_postcode := 3;
|
||
c_kenmerk_key_cust_plaats := 4;
|
||
c_kenmerk_key_cust_telefoonnr := 5;
|
||
c_kenmerk_key_cust_mobielnr := 8;
|
||
c_kenmerk_key_cust_email := 18;
|
||
c_kenmerk_key_cust_object_oms := 6;
|
||
|
||
c_kenmerkopdr_key_locatie := 11;
|
||
c_kenmerkopdr_key_memo := 12;
|
||
c_kenmerkopdr_key_opzichter := 13;
|
||
|
||
c_kenmerkopdr_key_complexnr := 14;
|
||
c_kenmerkopdr_key_pandnummer := 15;
|
||
c_kenmerkopdr_key_VGEnummer := 16;
|
||
c_kenmerkopdr_key_bouwjaar := 57;
|
||
|
||
c_kenmerkopdr_key_PO_companyID := 17;
|
||
|
||
c_kenmerkopdr_key_URL := 21;
|
||
c_kenmerkopdr_key_bijlagen := 20;
|
||
|
||
c_kenmerkopdr_key_opdr_soort := 24;
|
||
c_kenmerkopdr_key_opdr_type := 25;
|
||
c_kenmerkopdr_key_opdr_afspr := 26;
|
||
|
||
c_kenmerkopdr_key_opdr_gln_vve := 29;
|
||
c_kenmerkopdr_key_opdr_gln_eig := 38;
|
||
c_kenmerkopdr_key_eig_naam := 101;
|
||
c_kenmerkopdr_key_eig_adres := 102;
|
||
c_kenmerkopdr_key_eig_pc := 103;
|
||
c_kenmerkopdr_key_eig_plaats := 104;
|
||
|
||
--Overrule GLN: specifieke vestiging van OPdrachtNemer OPN:
|
||
c_kenmerkopdr_key_opdr_gln_opn := 58;
|
||
|
||
c_kenmerkopdr_key_opdr_erp := 31;
|
||
c_kenmerkopdr_key_uitv_locatie := 37;
|
||
|
||
v_aanduiding := '';
|
||
|
||
-- Elke opdracht verwerken tot eventuele nieuwe melding (als deze nog niet bestaat) en een opdracht (indien opdracht ook nog niet bestaat).
|
||
|
||
-- Key van de standaard melding die wordt gebruikt voor de evt. nieuwe melding....
|
||
v_mld_stdmelding_key := 1;
|
||
|
||
|
||
c_date_2099 := to_date('2099-12-31 00:00','YYYY-MM-DD hh24:mi');
|
||
|
||
|
||
v_errorhint := 'SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_errorhint := 'prs_bedrijf van SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_bedrijf_key, COALESCE (prs_overeenkomst_nr, '1')
|
||
INTO v_woco_prs_bedrijf_key, v_ax_company_id
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
v_errorhint :=
|
||
'Setting $Verwerken eenheidsprijzen van opdrachtgever van import '
|
||
|| p_import_key
|
||
|| ' niet gevonden, er is geen melding/opdracht aangemaakt';
|
||
|
||
SELECT prs_bedrijf_verwerkprijzen
|
||
INTO v_prs_bedrijf_verwerkprijzen
|
||
FROM mar_v_bedrijf_verwerkprijzen
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
-- MARX#66752: Extreem veel WEB_USER_MESSAGE record
|
||
-- Maakt woco-bedrijf gebruikt van $MAR_PUSH_NOTIFYQUEUE?
|
||
-- Ja, in dat geval willen we dat een fout ook daadwerkelijk als fout wordt teruggestuurd naar de aanroeper, dus als 'E'.
|
||
-- Nee, in dat geval willen we dat een waarschuwing 'W' wordt gegegeven (AX2009, AX2012), om bv bij multicompany/interne bedrijven (zoals bij Ymere het geval is) die bij zowel intern bedrijf A als intern bedrijf B eenzelfde opdracht in de query opgelevert, en er geen sprake is van een echte fout.
|
||
SELECT prs_bedrijf_push_nq, DECODE(prs_bedrijf_push_nq, 0, 'W', 'E')
|
||
INTO v_push_notifyqueue, v_push_err_warn
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
v_prev_mld_opdr_externnr := '$MAREON$DUMMY$';
|
||
|
||
FOR rec_ax IN c_ax_opdrachten
|
||
LOOP
|
||
BEGIN
|
||
-- Check: in geval van multicompany kunnen ook opdrachten van een ander (onderhouds)bedrijf in de cursor staan, die moeten worden uitgesloten hier.
|
||
-- Dus alleen een melding/opdracht maken als die van dit onderhoudsbedrijf is
|
||
IF (UPPER (v_ax_company_id) = UPPER (rec_ax.prs_afdeling_naam) OR v_ax_company_id = -1)
|
||
THEN
|
||
-- Dit is een melding/opdracht van dit onderhoudsbedrijf, dus verder ...
|
||
|
||
-- Maar eerst even (vanwege het niet gebruik van GROUP-BY in cursor c_ax_opdrachten) een group-by functie hier toepassen, de andere regels van dezelfde IONR (mld_opdr_externnr) zijn al behandeld, dus hier overslaan (skippen)!
|
||
IF UPPER (v_prev_mld_opdr_externnr) <> UPPER (rec_ax.mld_opdr_externnr)
|
||
THEN
|
||
-- Het is een regel rec_ax met een andere IONR dan de vorige regel. Dus behandelen deze (niet skippen)
|
||
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_aanduiding :=
|
||
SUBSTR (
|
||
'['
|
||
|| rec_ax.mld_melding_externnr
|
||
|| '|'
|
||
|| SUBSTR (rec_ax.mld_melding_omschrijving, 1, 100)
|
||
|| '|'
|
||
|| rec_ax.mld_melding_cust_name
|
||
|| '|'
|
||
|| rec_ax.mld_melding_cust_straat
|
||
|| '|'
|
||
|| rec_ax.mld_melding_cust_plaats
|
||
|| '|'
|
||
|| rec_ax.mld_opdr_externnr
|
||
|| '] ',
|
||
1,
|
||
1000);
|
||
|
||
-- 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)
|
||
-- We kijken eerst of de opdracht al bestaat (code-verplaatsing), want als dat zo is, dan moet er sowieso geen melding aangemaakt worden (robuuster zo), b.v. ingeval van MAO van een opdracht (op een gearchiveerde melding), zou niet kunnen voorkomen, maar wel mee kunnen dealen.
|
||
SELECT MAX (o.mld_opdr_key)
|
||
INTO v_mld_opdr_key
|
||
FROM mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco1,
|
||
mar_v_woco_perslid woco2
|
||
WHERE o.mld_opdr_id = rec_ax.mld_opdr_externnr
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.prs_perslid_key = woco1.prs_perslid_key
|
||
AND woco1.prs_bedrijf_key = woco2.prs_bedrijf_key
|
||
AND woco2.prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- Dan eerst maar checken of melding met externe melding nummer voor de WOCO al bestaat, want dan niet aanmaken en (vooralsnog) ook niet updaten.
|
||
|
||
SELECT MAX (m.mld_melding_key)
|
||
INTO v_mld_melding_key
|
||
FROM mld_melding m, mar_v_woco_perslid woco1, mar_v_woco_perslid woco2
|
||
WHERE m.mld_melding_externnr = rec_ax.mld_melding_externnr
|
||
AND m.prs_perslid_key = woco1.prs_perslid_key
|
||
AND woco1.prs_bedrijf_key = woco2.prs_bedrijf_key
|
||
AND woco2.prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_mld_melding_key IS NOT NULL
|
||
THEN
|
||
-- Bestaande melding
|
||
-- MARX#58610: Mareon AVG Proof: alleen een nieuwe opdracht op een bestaande melding die in archief (status 6) staat, moet via een nieuwe (copy) melding lopen
|
||
-- een bestaande opdracht doen we niets mee, dus geen nieuwe opdracht, maar ook geen update (via mar_wijzig_mld_opdr verderop hieronder)
|
||
-- Check eerst de status van de melding...
|
||
SELECT mld_melding_status
|
||
INTO v_mld_melding_status
|
||
FROM mld_melding
|
||
WHERE mld_melding_key = v_mld_melding_key;
|
||
|
||
IF v_mld_melding_status = 6 AND v_mld_opdr_key IS NULL
|
||
THEN
|
||
-- De melding is gearchiveerd, dat betekent dat er alleen een nieuwe melding aangemaakt moet worden als de opdracht nieuw is (dus v_mld_opdr_key NULL is)
|
||
-- Dat doen we door v_mld_melding_key op NULL te zetten (alsof de melding niet gevonden was in bovenstaande query, zodat alsnog (hieronder) een nieuwe melding wordt gemaakt, hierna
|
||
-- Bij een bestaande opdracht (onder een melding die gearchiveerd is) doen we niet ==> NOOP.
|
||
v_mld_melding_key := NULL;
|
||
END IF;
|
||
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')
|
||
THEN
|
||
-- Melding is nieuw, dus inserten...
|
||
|
||
-- Api user gevonden, we kunnen een melding aanmaken.
|
||
-- Meldbron-key = 6 (System), meldbron-nr is de company-id in AX.
|
||
INSERT INTO mld_melding (mld_melding_module,
|
||
mld_meldbron_key,
|
||
mld_meldbron_nr,
|
||
mld_melding_datum,
|
||
mld_melding_omschrijving,
|
||
mld_stdmelding_key,
|
||
mld_melding_einddatum,
|
||
prs_perslid_key,
|
||
prs_perslid_key_voor,
|
||
mld_melding_status,
|
||
mld_melding_spoed,
|
||
mld_melding_externnr)
|
||
VALUES (
|
||
'MLD',
|
||
6,
|
||
rec_ax.prs_afdeling_naam,
|
||
COALESCE(marx_get_local_time(rec_ax.mld_opdr_datumbegin), rec_ax.mar_imp_ax_opdrachten_datum),
|
||
rec_ax.mld_melding_omschrijving,
|
||
v_mld_stdmelding_key,
|
||
COALESCE(marx_get_local_time(rec_ax.mld_opdr_einddatum), c_date_2099),
|
||
v_prs_perslid_key,
|
||
v_prs_perslid_key,
|
||
2,
|
||
3,
|
||
rec_ax.mld_melding_externnr)
|
||
RETURNING mld_melding_key
|
||
INTO v_mld_melding_key;
|
||
|
||
mld.setmeldingstatus (v_mld_melding_key, 4, NULL);
|
||
|
||
-- Tobias AX geeft vanaf dec 2017 (EP 4.9+) netjes de straat + huisnr + huisnr-toevoeging in 3 losse velden mee, Tobias AX daarvoor niet,
|
||
-- en dan alles komt in 1 veld straat overwaaien (dus straatnaam + huisnr + toevoeging)
|
||
-- Dus als huisnr (of toevoeging) is gevuld (Tobias AX 4.9+), dan kunnen we dat netjes in 3 velden stoppen.
|
||
-- Zo niet (Tobias AX 4.9 en voorheen), dan halen we uit het complete veld 'adres' wel het huisnr op een slimme manier.
|
||
v_straatnaam := rec_ax.mld_melding_cust_straat;
|
||
v_huisnr := rec_ax.mld_melding_cust_huisnr;
|
||
v_huisnr_toev := rec_ax.mld_melding_cust_huisnr2;
|
||
mar_get_straat_huinrs (v_straatnaam, v_huisnr, v_huisnr_toev);
|
||
|
||
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_name, v_mld_melding_key, rec_ax.mld_melding_cust_name);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_straatnaam, v_mld_melding_key, v_straatnaam);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_huisnr, v_mld_melding_key, v_huisnr);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_huisnr_toev, v_mld_melding_key, v_huisnr_toev);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_postcode,
|
||
v_mld_melding_key,
|
||
rec_ax.mld_melding_cust_postcode);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_plaats, v_mld_melding_key, rec_ax.mld_melding_cust_plaats);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_telefoonnr,
|
||
v_mld_melding_key,
|
||
rec_ax.mld_melding_cust_telefoonnr);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_mobielnr,
|
||
v_mld_melding_key,
|
||
rec_ax.mld_melding_cust_mobielnr);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_email, v_mld_melding_key, rec_ax.mld_melding_cust_email);
|
||
mld.upsertmeldingkenmerk (c_kenmerk_key_cust_object_oms,
|
||
v_mld_melding_key,
|
||
rec_ax.mld_melding_cust_object_omschr);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
|
||
-- 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)
|
||
|| ' bij opdrachtgever met company_id ['
|
||
|| v_ax_company_id
|
||
|| '] niet gevonden, er is geen opdracht aangemaakt';
|
||
|
||
-- Let op: we hebben hier nu MAX-functie gebruikt a.g.v. call MARX#39666, want er kunnen dan meerdere contactpersonen (met APIkey) bij 1 bedrijf bestaan.
|
||
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);
|
||
|
||
-- 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#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)
|
||
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');
|
||
END IF;
|
||
|
||
IF (v_mld_opdr_key IS NULL) AND (v_lev_prs_bedrijf_key IS NOT NULL)
|
||
THEN
|
||
-- Opdracht is nieuw, en leverancier bestaat bij de woco, en opdracht is niet direct geannuleerd (MARX#56368), dus inserten...
|
||
|
||
v_errorhint := 'Fout bij bepalen van hoogste opdracht volgnummer (MLD_OPDR_BEDRIJFOPDR_VOLGNR)';
|
||
|
||
v_mld_opdr_bedrijfopdr_volgnr := mld.bepaalopdrmeldingvolgnr (v_mld_melding_key);
|
||
|
||
|
||
v_errorhint := 'Fout bij insert van nieuwe opdracht bij melding(key)' || v_mld_melding_key;
|
||
|
||
-- Let op: zie MARX#35461. Kolom mld_opdr_ordernr (bedoeld voor status-updates naar Tobias) wordt gevuld met:
|
||
-- a) TASKID. Indien er GEEN materiaalregels zijn (AX release 4.5 en daarvoor), dan gaan we de opdrachtstatus terugkoppelen op basis van taskId (dit is een opdracht uit AX4.5)
|
||
-- b) IONR. Indien er WEL materiaalregels zijn (AX release 4.6) dan gaan we de opdrachtstatus terugkoppelen met IONR (dit is een opdracht uit AX 4.6)
|
||
-- c) BONID. Indien we koppelen met Tobias (Progress), dan zijn er geen materiaalregels en gaan we ongewijzigd terugkoppelen met BonId (geen wijziging dus).
|
||
--
|
||
-- In geval a) en c) is het recht-toe-recht-aan vullen met rec_ax.mld_opdr_ordernr, die uit de XSL afkomstig is.
|
||
-- In geval b) als verbijzondering van geval a) wordt dat met IONR geupdate als er dus materiaal-regels zijn. Dat gebeurt verderop hieronder in de LOOP van materiaalregels...
|
||
|
||
INSERT INTO mld_opdr (mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_module,
|
||
mld_melding_key,
|
||
mld_uitvoerende_keys,
|
||
prs_perslid_key,
|
||
mld_typeopdr_key,
|
||
mld_statusopdr_key,
|
||
mld_opdr_omschrijving,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_bedrijfopdr_volgnr)
|
||
VALUES (
|
||
rec_ax.mld_opdr_externnr,
|
||
rec_ax.mld_opdr_ordernr,
|
||
'MLD',
|
||
v_mld_melding_key,
|
||
v_lev_prs_bedrijf_key,
|
||
v_prs_perslid_key,
|
||
c_mld_typeopdr_key,
|
||
5,
|
||
rec_ax.mld_melding_omschrijving,
|
||
COALESCE(marx_get_local_time(rec_ax.mld_opdr_datumbegin), rec_ax.mar_imp_ax_opdrachten_datum),
|
||
COALESCE(marx_get_local_time(rec_ax.mld_opdr_einddatum), c_date_2099),
|
||
v_mld_opdr_bedrijfopdr_volgnr)
|
||
RETURNING mld_opdr_key
|
||
INTO v_mld_opdr_key;
|
||
|
||
-- MARX#86957 Nieuwe mogelijkheid voor dispatching Vesteda-opdrachten naar JH-vestigingen
|
||
IF mld_opdr_vertaal_postcode_gln (v_mld_opdr_key) = 1
|
||
THEN
|
||
-- Oke, deze opdracht voor deze leverancier (van deze woco) moet langs vertaling postcode naar GLN voor redirecting/dispatching de opdracht
|
||
-- Als postcode netjes gevuld is, en binnen 1000 en 9999 ligt, en een vertaling kan worden gevonden, dan vullen we flexprop "GLN Opdrachtnemer" (key 58) met de vertaalde GLN tbv specifieke vestiging van OPN.
|
||
v_vertaalde_GLN_postcode := marx_do_vertaal_postcode_GLN(v_lev_prs_bedrijf_key, substr(trim(rec_ax.mld_melding_cust_postcode),1,4));
|
||
IF v_vertaalde_GLN_postcode IS NOT NULL
|
||
THEN
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_gln_opn, v_mld_opdr_key, v_vertaalde_GLN_postcode);
|
||
END IF;
|
||
END IF;
|
||
|
||
-- MARX#81606 Signaleren dat een opdracht gewijzigd is (VM000000566278)
|
||
mld_opdr_bal_bij_lev(v_mld_opdr_key);
|
||
|
||
IF rec_ax.mld_opdr_datumplan IS NOT NULL
|
||
THEN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_plandatum = marx_get_local_time(rec_ax.mld_opdr_datumplan)
|
||
WHERE mld_opdr_key = v_mld_opdr_key;
|
||
END IF;
|
||
|
||
-- next line added by PF thanks to FSN#30247/untested
|
||
v_flexsummary := mld.mldflexsummary (v_mld_melding_key);
|
||
-- De 1e CR eraf snoepen... en maximaal 4000 tekens
|
||
v_flexsummary := SUBSTR (v_flexsummary, 2, 4000);
|
||
-- Huurder/locatie gegevens in flex-veld 'Locatie' (key 11) zetten...
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_locatie, v_mld_opdr_key, v_flexsummary);
|
||
|
||
-- MARX#66907: Opdrachten overzichtsscherm: kolom locatiegegevens compact en volgorde fixed
|
||
v_uitvoeringslocatie := marx_mld_construct_locatie (v_mld_melding_key);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_uitv_locatie, v_mld_opdr_key, v_uitvoeringslocatie);
|
||
|
||
-- MARX#37262: Facturen worden bij Lescaut, in de verkeerde bedrijf aangeboden
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_PO_companyID,
|
||
v_mld_opdr_key,
|
||
rec_ax.mld_opdr_purchordercompanyid);
|
||
|
||
-- MARX#59976: Koppeling Twinq: <20>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);
|
||
|
||
-- MARX#54417: Opdrachtsoort - INS Inspectie MUT Mutatie REP Reparatie
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_soort,
|
||
v_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_soort', rec_ax.mld_opdr_soort));
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_type,
|
||
v_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_typering', rec_ax.mld_opdr_typering));
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_afspr,
|
||
v_mld_opdr_key,
|
||
GetMareonDescription ('mld_opdr_afspraak', rec_ax.mld_opdr_afspraak));
|
||
-- MARX#65463: Bijlages komen niet aan AAGN -> Schekman: nieuw (tekst C50) flexprop om te registeren uit wel ERP (Tobias/Facilitor/REMS) de opdracht afkomstig is.
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_erp,
|
||
v_mld_opdr_key,
|
||
SUBSTR (p_erp_opdrachtgever, 1, 50));
|
||
|
||
|
||
-- Vervolgregels verwerken van de (1e) opdracht.
|
||
|
||
FOR rec_vervolg_ax
|
||
IN c_ax_opdrachten_overige_regels ('2', rec_ax.mld_opdr_externnr, rec_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
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);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_eig_plaats, v_mld_opdr_key, rec_vervolg_ax.mld_melding_cust_plaats);
|
||
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opzichter,
|
||
v_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_opzichter);
|
||
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_complexnr,
|
||
v_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_complexnummer);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_pandnummer,
|
||
v_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_pandnummer);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_VGEnummer,
|
||
v_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_VGEnummer);
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_bouwjaar,
|
||
v_mld_opdr_key,
|
||
SUBSTR(rec_vervolg_ax.mld_opdr_datumbegin,1,4));
|
||
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_URL,
|
||
v_mld_opdr_key,
|
||
rec_vervolg_ax.mld_opdr_kenmerk_url);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_mat_error := v_count_mat_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- MARX#39851: Niet direct zichtbaar dat er een prijsafspraak aanwezig is
|
||
v_opdr_heeft_materiaal := 0;
|
||
|
||
-- Materiaalregels verwerken van de (1e) opdracht.
|
||
FOR rec_mat IN c_ax_opdrachten_materiaal (rec_ax.mld_opdr_externnr, rec_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
BEGIN
|
||
-- Er zijn dus materiaalregels bij deze opdracht.
|
||
-- Dat gaan we even markeren, om straks hieronder nog een nabewerking te doen (opdrachtkosten registratie).....
|
||
v_opdr_heeft_materiaal := 1;
|
||
|
||
v_count_materiaal_tot := v_count_materiaal_tot + 1;
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen van btw-percentage ['
|
||
|| rec_mat.mld_opdr_materiaal_btwperc
|
||
|| '] bij opdracht(key)'
|
||
|| v_mld_opdr_key;
|
||
v_btwperc_key :=
|
||
get_btwperc_key (v_mld_opdr_key, fac.safe_to_number (rec_mat.mld_opdr_materiaal_btwperc));
|
||
|
||
v_errorhint := 'Fout bij insert van nieuwe materiaalregel bij opdracht(key)' || v_mld_opdr_key;
|
||
|
||
-- MARX#39467: mld_opdr_materiaal_code vullen met artikelcode
|
||
-- Zie ook call MARX#35460: code wordt in extra1 gezet (dit is taskid oftewel het MLD00001234-01 nummer uit AX)
|
||
|
||
-- Let op: mld_opdr_materiaal_info voorlopig ook nog vullen met NULL, er wordt nog geen aanvullende aanwijzing/opmerking bij de opdrachtregel meegestuurd -> toekomst...
|
||
-- Zie ook call MARX#35460: info wordt in extra3 gezet (dit is de omschrijving van taskid MLD00001234-01 nummer uit AX)
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Voor SALES005 of TWINQ opdracht bestaat MEMO-veld niet bij materiaal-regel, en laten we in dat geval weg...
|
||
IF p_erp_opdrachtgever = 'Twinq' OR p_erp_opdrachtgever = 'SALES005'
|
||
THEN
|
||
v_mld_opdr_materiaal_extra3new := rec_ax.mld_melding_omschrijving;
|
||
ELSE
|
||
v_mld_opdr_materiaal_extra3new := safe_concat (safe_concat (rec_ax.mld_melding_omschrijving, CHR (10)), rec_ax.mld_melding_memo);
|
||
END IF;
|
||
|
||
INSERT INTO MLD_OPDR_MATERIAAL (mld_opdr_key,
|
||
mld_opdr_materiaal_id,
|
||
mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_info,
|
||
mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_aantal,
|
||
mld_opdr_materiaal_prijs,
|
||
fin_btwtabelwaarde_key,
|
||
mld_opdr_materiaal_extra1,
|
||
mld_opdr_materiaal_extra3)
|
||
VALUES (
|
||
v_mld_opdr_key,
|
||
rec_mat.mld_opdr_materiaal_linenr,
|
||
rec_mat.mld_opdr_materiaal_code,
|
||
NULL,
|
||
rec_mat.mld_opdr_materiaal_omschr,
|
||
rec_mat.mld_opdr_materiaal_groep,
|
||
rec_mat.mld_opdr_materiaal_extra2,
|
||
rec_mat.mld_opdr_materiaal_extra4,
|
||
rec_mat.mld_opdr_materiaal_eenheidcode,
|
||
rec_mat.mld_opdr_materiaal_eenheid,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_aantal),
|
||
DECODE (v_prs_bedrijf_verwerkprijzen,
|
||
1, NULL,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_prijs)),
|
||
v_btwperc_key,
|
||
rec_mat.mld_opdr_ordernr,
|
||
v_mld_opdr_materiaal_extra3new
|
||
);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_mat_error := v_count_mat_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
-- Nu alle eventuele OVERIGE/ANDERE !!!! opdrachten die er zijn bij dezelfde inkooporder, die moeten ook in dezelfde mld_opdr worden verwerkt.
|
||
v_opdr_heeft_meerdere_subopdr := 0;
|
||
|
||
FOR rec_1_ax IN c_ax_opdrachten_1_inkooporder (rec_ax.mld_opdr_externnr, rec_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
BEGIN
|
||
-- Er zijn dus meer dan 1 sub-opdrachten (task-ids) bij deze hoofd-opdracht (IONR)
|
||
-- Dat gaan we even markeren, zodat mld_opdr_ordernr wordt overruled met IONR (ipv TASKID, zie info hierboven bij MARX#35461.)
|
||
v_opdr_heeft_meerdere_subopdr := 1;
|
||
|
||
v_errorhint := 'Fout bij update van opdrachtomschrijving bij opdracht(key)' || v_mld_opdr_key;
|
||
|
||
-- MARX#55736: MovinU: Missende opdrachtregels - concat moet binnen 4000 blijven!
|
||
-- MARX#69220 Koppeling Mareon -> Twinq - De opdrachtomschrijving in geval van SALES005 niet met opdrachtregel (instructionlines) bijwerken, da's niet goed.
|
||
IF p_erp_opdrachtgever <> 'Twinq' AND p_erp_opdrachtgever <> 'SALES005'
|
||
THEN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_omschrijving =
|
||
safe_concat (safe_concat (mld_opdr_omschrijving, CHR (10)),
|
||
rec_1_ax.mld_melding_omschrijving)
|
||
WHERE mld_opdr_key = v_mld_opdr_key;
|
||
END IF;
|
||
|
||
|
||
FOR rec_mat IN c_ax_opdrachten_materiaal (rec_ax.mld_opdr_externnr, rec_1_ax.mld_opdr_ordernr)
|
||
LOOP
|
||
BEGIN
|
||
-- Er zijn dus materiaalregels bij deze opdracht.
|
||
-- Dat gaan we even markeren, om straks hieronder nog een nabewerking te doen (opdrachtkosten registratie).....
|
||
v_opdr_heeft_materiaal := 1;
|
||
|
||
v_count_materiaal_tot := v_count_materiaal_tot + 1;
|
||
|
||
v_errorhint :=
|
||
'Fout bij bepalen van btw-percentage ['
|
||
|| rec_mat.mld_opdr_materiaal_btwperc
|
||
|| '] bij opdracht(key)'
|
||
|| v_mld_opdr_key;
|
||
v_btwperc_key :=
|
||
get_btwperc_key (v_mld_opdr_key,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_btwperc));
|
||
|
||
|
||
v_errorhint :=
|
||
'Fout bij insert van nieuwe materiaalregel bij opdracht(key)' || v_mld_opdr_key;
|
||
|
||
-- MARX#39467: mld_opdr_materiaal_code vullen met artikelcode
|
||
-- Zie ook call MARX#35460: code wordt in extra1 gezet (dit is taskid oftewel het MLD00001234-01 nummer uit AX)
|
||
|
||
-- Let op: mld_opdr_materiaal_info voorlopig ook nog vullen met NULL, er wordt nog geen aanvullende aanwijzing/opmerking bij de opdrachtregel meegestuurd -> toekomst...
|
||
-- Zie ook call MARX#35460: info wordt in extra3 gezet (dit is de omschrijving van taskid MLD00001234-01 nummer uit AX)
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Voor SALES005 of TWINQ opdracht bestaat MEMO-veld niet bij materiaal-regel, en laten we in dat geval weg...
|
||
IF p_erp_opdrachtgever = 'Twinq' OR p_erp_opdrachtgever = 'SALES005'
|
||
THEN
|
||
v_mld_opdr_materiaal_extra3new := rec_1_ax.mld_melding_omschrijving;
|
||
ELSE
|
||
v_mld_opdr_materiaal_extra3new := safe_concat (safe_concat (rec_1_ax.mld_melding_omschrijving, CHR (10)), rec_1_ax.mld_melding_memo);
|
||
END IF;
|
||
|
||
|
||
INSERT INTO MLD_OPDR_MATERIAAL (mld_opdr_key,
|
||
mld_opdr_materiaal_id,
|
||
mld_opdr_materiaal_code,
|
||
mld_opdr_materiaal_info,
|
||
mld_opdr_materiaal_omschr,
|
||
mld_opdr_materiaal_groep,
|
||
mld_opdr_materiaal_extra2,
|
||
mld_opdr_materiaal_extra4,
|
||
mld_opdr_materiaal_eenheidcode,
|
||
mld_opdr_materiaal_eenheid,
|
||
mld_opdr_materiaal_aantal,
|
||
mld_opdr_materiaal_prijs,
|
||
fin_btwtabelwaarde_key,
|
||
mld_opdr_materiaal_extra1,
|
||
mld_opdr_materiaal_extra3)
|
||
VALUES (
|
||
v_mld_opdr_key,
|
||
rec_mat.mld_opdr_materiaal_linenr,
|
||
rec_mat.mld_opdr_materiaal_code,
|
||
NULL,
|
||
rec_mat.mld_opdr_materiaal_omschr,
|
||
rec_mat.mld_opdr_materiaal_groep,
|
||
rec_mat.mld_opdr_materiaal_extra2,
|
||
rec_mat.mld_opdr_materiaal_extra4,
|
||
rec_mat.mld_opdr_materiaal_eenheidcode,
|
||
rec_mat.mld_opdr_materiaal_eenheid,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_aantal),
|
||
DECODE (v_prs_bedrijf_verwerkprijzen,
|
||
1, NULL,
|
||
fac.safe_to_number (rec_mat.mld_opdr_materiaal_prijs)),
|
||
v_btwperc_key,
|
||
rec_mat.mld_opdr_ordernr,
|
||
v_mld_opdr_materiaal_extra3new
|
||
);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_mat_error := v_count_mat_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_mat_error := v_count_mat_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- En nog enkele na-bewerkingen....
|
||
|
||
IF v_opdr_heeft_meerdere_subopdr = 1
|
||
THEN
|
||
-- Er zijn dus meer dan 1 subopdrachten (TAKSID's) bij de hoofdopdracht (IONR), daarom nog even een nabewerking, namelijk geval b) bij MARX#35461, zie ook hierboven (bij insert opdracht)
|
||
-- Dit is nodig om op de juiste ID naar Tobias de status terug te kunnen melden:
|
||
-- Bij max. 1 subopdracht, kunnen (4.6 e.v) of moeten (4.5) we terugmelden op TASKID
|
||
-- Bij meerdere subopdrachten moeten we terugmelden op IONR (vanaf AX 4.6)
|
||
-- Met name vanwege oog op niet Tobias hier ook gekozen om 1 generieke methode na te streven.
|
||
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_ordernr = mld_opdr_id
|
||
WHERE mld_opdr_key = v_mld_opdr_key;
|
||
END IF;
|
||
|
||
-- MARX#39689: Onderdrukken van eenheidsprijzen
|
||
IF v_opdr_heeft_materiaal = 1 AND v_prs_bedrijf_verwerkprijzen <> 1
|
||
THEN
|
||
-- Er zijn dus materiaalregels bij de opdracht, nog even een nabewerking, namelijk de kosten kunnen we in de opdracht doorrekenen en registeren
|
||
|
||
v_errorhint := 'Materiaalkosten bij opdracht(key)' || v_mld_opdr_key || ' is fout gegaan';
|
||
|
||
-- Dan stoppen we de totaalprijs (ex BTW) vanuit de materialen in de opdracht-kosten:
|
||
SELECT ROUND (SUM (COALESCE (mld_opdr_materiaal_aantal, 1) * COALESCE (mld_opdr_materiaal_prijs, 0)),
|
||
2)
|
||
INTO v_mld_opdr_kosten
|
||
FROM mld_opdr_materiaal
|
||
WHERE mld_opdr_key = v_mld_opdr_key;
|
||
|
||
IF v_mld_opdr_kosten IS NOT NULL
|
||
THEN
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_materiaal = v_mld_opdr_kosten, mld_opdr_kosten = v_mld_opdr_kosten
|
||
WHERE mld_opdr_key = v_mld_opdr_key;
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
-- MARX#69220 Koppeling Mareon -> Twinq
|
||
-- Twinq stuurt bestanden ineens mee in order-XML (SALES005), hier de nabewerking...
|
||
|
||
FOR rc IN c_ax_opdr_attached_file
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT:' || TO_CHAR (p_import_key),
|
||
'flexcode',
|
||
'MLD:' || TO_CHAR (v_mld_opdr_key) -- We kunnen niet meerdere imports tegelijk aan!
|
||
|| ':' || c_kenmerkopdr_key_bijlagen || ':' -- De kenmerk key
|
||
|| 'O');
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van opdracht met key '
|
||
|| v_mld_opdr_key
|
||
|| ' is de bestandsnaam '
|
||
|| rc.mld_opdr_kenmerk_url
|
||
|| ' niet bewaard (regel '
|
||
|| rc.mld_opdr_materiaal_linenr
|
||
|| ')',
|
||
'Opdracht key:' || v_mld_opdr_key || ' / Bestandsnaam: ' || rc.mld_opdr_kenmerk_url);
|
||
END;
|
||
END LOOP;
|
||
FOR rc IN c_ax_opdr_mat_attached_file
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT:' || TO_CHAR (p_import_key),
|
||
'flexcode',
|
||
'MLD:' || TO_CHAR (v_mld_opdr_key) -- We kunnen niet meerdere imports tegelijk aan!
|
||
|| ':' || c_kenmerkopdr_key_bijlagen || ':' -- De kenmerk key
|
||
|| 'O');
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van opdracht met key '
|
||
|| v_mld_opdr_key
|
||
|| ' is de bestandsnaam '
|
||
|| rc.mld_opdr_kenmerk_url
|
||
|| ' niet bewaard (opdrachtregel '
|
||
|| rc.mld_opdr_materiaal_linenr
|
||
|| ')',
|
||
'Opdracht key:' || v_mld_opdr_key || ' / Bestandsnaam: ' || rc.mld_opdr_kenmerk_url);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
-- MARX#66773 Module Mareon Planning
|
||
-- Wanneer d'r een geplande reservering is, dan gaan we deze nieuwe opdracht daar aan knopen...
|
||
l_res_rsv_ruimte_key := marx_ion_already_planned (v_woco_prs_bedrijf_key, rec_ax.mld_opdr_externnr);
|
||
IF l_res_rsv_ruimte_key IS NOT NULL
|
||
THEN
|
||
-- Planning bestaat dus, dit ION staat bij een uitvoerder als optie ingevuld, we gaan hem nu eraan knopen en status (van optie) naar definitief te zetten.
|
||
UPDATE res_rsv_ruimte
|
||
SET mld_opdr_key = v_mld_opdr_key, res_status_fo_key = 2
|
||
WHERE res_rsv_ruimte_key = l_res_rsv_ruimte_key;
|
||
|
||
-- En we gaan de afspraak-datum vullen met die van de RES-planning, maar alleen als die (vanuit WOCO) LEEG(!) is aangeboden, wordt die wel meegestuurd vanuit WOCO dan blijven wij ervan af
|
||
SELECT res_rsv_ruimte_van
|
||
INTO l_res_rsv_ruimte_van
|
||
FROM res_rsv_ruimte
|
||
WHERE res_rsv_ruimte_key = l_res_rsv_ruimte_key;
|
||
marx_update_mld_opdr_plandatum(NULL, v_mld_opdr_key, l_res_rsv_ruimte_van, 'Plan(afspraak) datum', 'ORDPLD', 1, 0);
|
||
|
||
-- MARX#70053 Mareon Premium Groene Planningen: plannen met geografische optimalisatie
|
||
-- Indien LatLong bekend zijn, bij de gereserveeerde planning (reservering ), dan gaan we die in de melding overnemen
|
||
-- (zodat we de coordinaten vanuit deze hoek alsvast hebben bij Geografische opdrachten, dan is Google daar niet meer voor nodig)
|
||
SELECT ROUND(fac.safe_to_number(MAX(res_kenmerkreservering_waarde)),6)
|
||
INTO l_lat
|
||
FROM res_kenmerkwaarde
|
||
WHERE res_kenmerk_key = 6
|
||
AND res_rsv_ruimte_key = l_res_rsv_ruimte_key
|
||
AND res_kenmerkwaarde_verwijder IS NULL;
|
||
|
||
SELECT ROUND(fac.safe_to_number(MAX(res_kenmerkreservering_waarde)),6)
|
||
INTO l_lng
|
||
FROM res_kenmerkwaarde
|
||
WHERE res_kenmerk_key = 7
|
||
AND res_rsv_ruimte_key = l_res_rsv_ruimte_key
|
||
AND res_kenmerkwaarde_verwijder IS NULL;
|
||
|
||
IF l_lat IS NOT NULL AND l_lng IS NOT NULL
|
||
THEN
|
||
UPDATE mld_melding
|
||
SET mld_melding_x = l_lat,mld_melding_y = l_lng
|
||
WHERE mld_melding_key = v_mld_melding_key;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- MARX#76900 Mareon Universele Opdracht API: Bijlagen bij Facilitor opdrachten gaan we nu direct verwerken, waardoor ook putorders geen uitgestelde actie meer is via de SYNC: TOP!
|
||
-- ORDNEW kunnen we nu ook weer negeren, weg ermee uit NQ!
|
||
v_txt_ordnew := '#ORDNEW';
|
||
fac.trackaction (v_txt_ordnew,
|
||
v_mld_opdr_key,
|
||
v_prs_perslid_key,
|
||
NULL,
|
||
'Opdracht is aangemaakt');
|
||
|
||
-- Zonder uitstel de opdracht sturen via putorders, ook indien ERP opdrachtgever Facilitor ;-)
|
||
v_errorhint :=
|
||
'Technisch adres / versturen van opdracht(key) ' || v_mld_opdr_key || ' is fout gegaan';
|
||
v_errorhint := mar_post_opdr_putorders (v_mld_opdr_key, v_prs_perslid_key);
|
||
ELSE
|
||
-- MARX55214: Vervroegde HaagWonen release agv Alliantie VFU "MovinU"
|
||
SELECT mld_opdr_updates_allowed
|
||
INTO v_mld_opdr_updates_allowed
|
||
FROM mar_v_updates_on_opdr_allowed
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
|
||
IF (v_mld_opdr_updates_allowed = 1)
|
||
THEN
|
||
IF (v_mld_opdr_key IS NOT NULL) AND (rec_ax.ax_supplier_id = '-1')
|
||
THEN
|
||
-- aanduiding vanuit AX is annuleer
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_aanduiding || 'Opdracht bestaat al',
|
||
'Opdracht wordt geannuleerd');
|
||
-- MARX#66773 Module Mareon Planning
|
||
-- Voorbereiding, als er een geplande reservering bestaat, dan meegeven aan mar_annuleer_mld_opdr zodat die daar verwijderd kan worden...
|
||
l_res_rsv_ruimte_key := marx_ion_already_planned (v_woco_prs_bedrijf_key, rec_ax.mld_opdr_externnr);
|
||
mar_annuleer_mld_opdr (v_mld_opdr_key, v_prs_perslid_key, l_res_rsv_ruimte_key, p_import_key);
|
||
ELSE
|
||
IF (v_mld_opdr_key IS NOT NULL) AND (v_lev_prs_bedrijf_key IS NOT NULL)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
v_aanduiding || 'Opdracht bestaat al',
|
||
'Opdracht wordt gewijzigd');
|
||
|
||
-- MARX#66773 Module Mareon Planning
|
||
-- Voorbereiding: Wanneer d'r een officieuze geplande reservering is op deze IONR (van de WOCO), dan gaan we deze bestaande opdracht daar aan knopen...
|
||
-- Maar alleen als deze opdracht nog geen officiele geplande reservering heeft...
|
||
-- NB: In principe zou dit al geregeld moeten zijn bij de nieuwe opdracht, echter in geval dat nieuwe opdracht (mld_opdr) eerder dan de planning (reservering) komt, mist deze koppeling.
|
||
-- en als een opdracht alsnog (2e keer) wordt gestuurd, dan komt dat alsnog voor elkaar....
|
||
l_res_rsv_ruimte_key := marx_ion_already_planned (v_woco_prs_bedrijf_key, rec_ax.mld_opdr_externnr);
|
||
IF marx_mld_opdr_already_planned(v_mld_opdr_key) IS NOT NULL
|
||
THEN
|
||
-- Officiele planning bestaat dus OOk al wel, dus we moeten niets doen, kortom, reset van l_res_rsv_ruimte_key
|
||
l_res_rsv_ruimte_key := NULL;
|
||
END IF;
|
||
mar_wijzig_mld_opdr (v_mld_opdr_key, l_res_rsv_ruimte_key, p_import_key, p_erp_opdrachtgever);
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || ':' || v_errorhint,
|
||
'Opdracht is al bekend en wordt overgeslagen / niet bijgewerkt (A)');
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding || ':' || v_errorhint,
|
||
'Opdracht-update bij deze opdrachtgever staat uit / opdracht wordt niet bijgewerkt');
|
||
END IF;
|
||
END IF;
|
||
-- Skip rec_ax omdat dezelfde IONR als is verwerkt
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
v_push_err_warn,
|
||
v_aanduiding
|
||
|| 'ID Opdrachtgever ['
|
||
|| v_ax_company_id
|
||
|| '] komt niet overeen met die van de opdracht ['
|
||
|| rec_ax.prs_afdeling_naam
|
||
|| ']. Let op: kan van doen hebben met multicompany',
|
||
'Opdracht wordt overgeslagen');
|
||
END IF;
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push) icm MARX#65138: (API)Wrapper om fac_import die XML of JSON terug stuurt.
|
||
-- Nog iets rubuuster, indien gene opdracht aangemaakt kan worden, dan geen mld_opdr_key en wordt geen node teruggestuurd
|
||
IF v_mld_opdr_key IS NOT NULL AND rec_ax.mld_opdr_externnr IS NOT NULL
|
||
THEN
|
||
SELECT COUNT(*)
|
||
INTO v_aantal
|
||
FROM fac_result
|
||
WHERE fac_result_sessionid = 'IMPORT_' || TO_CHAR (p_import_key)
|
||
AND fac_result_naam = 'mld_opdr_key'
|
||
AND fac_result_waarde = TO_CHAR (v_mld_opdr_key);
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT_' || TO_CHAR (p_import_key), 'mld_opdr_externnr', rec_ax.mld_opdr_externnr);
|
||
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT_' || TO_CHAR (p_import_key), 'mld_opdr_key', TO_CHAR (v_mld_opdr_key));
|
||
END IF;
|
||
ELSE
|
||
v_overrule_success := -1; -- Hier is bij aanmaak opdracht echt wat fout gegaan, overrule van keiharde failure (-1).
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
|
||
|
||
v_prev_mld_opdr_externnr := rec_ax.mld_opdr_externnr;
|
||
END LOOP;
|
||
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Opdrachten: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error),
|
||
'');
|
||
IF v_count_error > 0
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Opdrachten: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
|
||
'');
|
||
END IF;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'Materiaal regels: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_materiaal_tot - v_count_mat_error),
|
||
'');
|
||
IF v_count_mat_error > 0
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Materiaal regels: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_mat_error),
|
||
'');
|
||
END IF;
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push): XML met result retour
|
||
mar_response_API_Import (p_import_key, v_overrule_success);
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
mar_response_API_Import (p_import_key, -1);
|
||
COMMIT;
|
||
END mar_update_gen_opdrachten;
|
||
/
|
||
|
||
|
||
|
||
|
||
-- MARX#86196 Afspraakdatum/tijd synchronisatie vanuit Mareon planbord naar ERP
|
||
-- p_prs_perslid_key is de persoon die de de afspraakdatum wijzigt, en zou idealiter de leverancier moeten zijn.
|
||
-- p_mld_opdr_key is de opdracht waar het hier om gaat
|
||
-- p_mld_opdr_plandatum is de (nieuwe) gemaakte afspraakdatum
|
||
-- p_veldnaam is de naam van het afspraak/datumveld die in de tracking-tekst wordt vermeld
|
||
-- p_fac_srtnot_code is de notificatiecode die bij de tracking moet worden geregistreerd
|
||
-- p_exec_only_oldplandatum_empty, wanneer 1 wordt meegegeven dat wordt deze PROC alleen uitgevoerd als de de huidige (oude) afspraakdatum nog leeg is.
|
||
-- p_exec_resendorder, wanneer 1 wordt meegegeven, dan wordt aan de leverancier de opdracht opnieuw gestuurd.
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_mld_opdr_plandatum
|
||
( p_prs_perslid_key IN NUMBER,
|
||
p_mld_opdr_key IN NUMBER,
|
||
p_mld_opdr_plandatum IN DATE,
|
||
p_veldnaam IN VARCHAR2,
|
||
p_fac_srtnot_code IN VARCHAR2,
|
||
p_exec_only_oldplandatum_empty IN NUMBER,
|
||
p_exec_resendorder IN NUMBER
|
||
)
|
||
AS
|
||
l_prs_perslid_key NUMBER(10);
|
||
v_aantal NUMBER(10);
|
||
|
||
l_currentstatus NUMBER (10);
|
||
l_opdr_status_is_oke_to_change NUMBER (1);
|
||
|
||
v_mld_opdr_plandatum DATE;
|
||
|
||
v_count_differences NUMBER (10);
|
||
v_do_send_opdr NUMBER (10);
|
||
v_do_send_changed_opdr NUMBER (10);
|
||
|
||
----------- Start procedure ---
|
||
BEGIN
|
||
-- Init...
|
||
l_opdr_status_is_oke_to_change := NULL;
|
||
|
||
IF p_mld_opdr_key IS NOT NULL
|
||
THEN
|
||
l_prs_perslid_key := p_prs_perslid_key;
|
||
IF l_prs_perslid_key IS NULL
|
||
THEN
|
||
-- Fallback, in geval de perslid key niet is meegegeven, dan wordt default de API perslid van de leverancier gebruikt
|
||
SELECT MAX(lev.prs_perslid_key)
|
||
INTO l_prs_perslid_key
|
||
FROM mar_v_leverancier_api_perslid lev
|
||
WHERE lev.prs_bedrijf_key = (SELECT mld_uitvoerende_keys FROM mld_opdr WHERE mld_opdr_key = p_mld_opdr_key);
|
||
END IF;
|
||
|
||
SELECT mld_opdr_plandatum
|
||
INTO v_mld_opdr_plandatum
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
-- Opdracht bestaat al, kan zijn omdat:
|
||
-- 1. De planning (na een tijdje) door huurder gewijzigd wordt, en de opdracht inmiddels (al enige tijd) bestaat
|
||
-- 2. wat onwaarschijnlijk, maar timing-issue, dat de opdracht (net) iets eerder binnen is gekomen dan de bevestiging door huuder.
|
||
SELECT mld_statusopdr_key
|
||
INTO l_currentstatus
|
||
FROM mld_opdr
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
-- Zie ook api_opdrsoap en/of mld.setopdrachtstatus (package-functie)
|
||
-- Allen bij lopende opdracht mag een wijziging, anders niet, dus alleen als status <> 1, 2, 6, 7, 9, dan is wijziging akkoord.
|
||
-- 1=Afgewezen / 2=Niet akkoord / 6=Afgemeld / 7=Verwerkt / 9=Afgerond
|
||
|
||
IF NOT (l_currentstatus = 1 OR l_currentstatus = 2 OR l_currentstatus = 6 OR l_currentstatus = 7 OR l_currentstatus = 9)
|
||
THEN
|
||
l_opdr_status_is_oke_to_change := 1;
|
||
END IF;
|
||
END IF;
|
||
|
||
IF p_exec_only_oldplandatum_empty = 1
|
||
THEN
|
||
-- (oude) plandatum moet dus leeg zijn, alleen dan gaan we deze uitvoeren.
|
||
IF v_mld_opdr_plandatum IS NOT NULL
|
||
THEN
|
||
-- Maar deze is niet leeg, dus gaan we 'm niet uitvoeren
|
||
l_opdr_status_is_oke_to_change := NULL;
|
||
END IF;
|
||
END IF;
|
||
|
||
-------
|
||
-- Final check obv l_opdr_status_is_oke_to_change
|
||
-------
|
||
IF l_opdr_status_is_oke_to_change = 1
|
||
THEN
|
||
-- Opdracht mag gemuteerd worden
|
||
|
||
-- En ook de plandatum van de opdracht bijwerken, d.w.z. alleen als die anders is (dan ie was)...
|
||
|
||
v_count_differences := 0;
|
||
-- Hier wordt een tracking gedaan van ORDPLD zodat woco op de hoogte wordt gebracht, alleen als de afspraakdatum anders is geworden
|
||
v_count_differences := mar_diff_date (v_mld_opdr_plandatum,
|
||
p_mld_opdr_plandatum,
|
||
p_mld_opdr_key,
|
||
l_prs_perslid_key,
|
||
p_veldnaam,
|
||
p_fac_srtnot_code);
|
||
UPDATE mld_opdr
|
||
SET mld_opdr_plandatum = p_mld_opdr_plandatum
|
||
WHERE mld_opdr_key = p_mld_opdr_key;
|
||
|
||
IF v_count_differences > 0 AND p_exec_resendorder = 1
|
||
THEN
|
||
marx_resend_order (p_mld_opdr_key);
|
||
END IF;
|
||
|
||
END IF; -- Opdracht mag gemuteerd worden, of is er nog niet...
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_res_opdr_plandatum
|
||
( p_res_rsv_ruimte_key IN NUMBER
|
||
)
|
||
AS
|
||
l_aantal NUMBER(10);
|
||
l_mld_opdr_key NUMBER(10);
|
||
l_fac_tracking_key NUMBER(10);
|
||
l_prs_perslid_key NUMBER(10);
|
||
l_res_rsv_ruimte_van DATE;
|
||
----------- Start procedure ---
|
||
BEGIN
|
||
-- Init...
|
||
|
||
SELECT mld_opdr_key, res_rsv_ruimte_van
|
||
INTO l_mld_opdr_key, l_res_rsv_ruimte_van
|
||
FROM res_rsv_ruimte
|
||
WHERE res_rsv_ruimte_key = p_res_rsv_ruimte_key;
|
||
|
||
IF l_mld_opdr_key IS NOT NULL
|
||
THEN
|
||
-- deze reservering heeft geen gekoppelde opdracht
|
||
|
||
-- We gaan eerst de user-key bepalen die deze reservering zojuist heeft aangepast, dat is de hoogste fac_tracking van res_rsvruimte met RESUPD van zojuist (en zojuist = max 3 sec geleden)
|
||
|
||
SELECT MAX(fac_tracking_key)
|
||
INTO l_fac_tracking_key
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = p_res_rsv_ruimte_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'RESUPD')
|
||
AND fac_tracking_datum >= SYSDATE - 3/(24*60*60);
|
||
|
||
IF l_fac_tracking_key IS NOT NULL
|
||
THEN
|
||
SELECT prs_perslid_key
|
||
INTO l_prs_perslid_key
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = l_fac_tracking_key;
|
||
ELSE
|
||
-- Niet gevonden, dan doen we maar als fallback de API-perslid van de leverancier van de opdracht
|
||
SELECT MAX(lev.prs_perslid_key)
|
||
INTO l_prs_perslid_key
|
||
FROM mar_v_leverancier_api_perslid lev
|
||
WHERE lev.prs_bedrijf_key = (SELECT mld_uitvoerende_keys FROM mld_opdr WHERE mld_opdr_key = l_mld_opdr_key);
|
||
END IF;
|
||
|
||
-- Als l_prs_perslid_key een perslid is van het bedrijf/aannemer bij deze opdracht, dan oke.
|
||
SELECT COUNT(*)
|
||
INTO l_aantal
|
||
FROM mld_opdr o, mar_v_all_leverancier_perslid lev
|
||
WHERE o.mld_opdr_key = l_mld_opdr_key
|
||
AND lev.prs_bedrijf_key = o.mld_uitvoerende_keys
|
||
AND lev.prs_perslid_key = l_prs_perslid_key;
|
||
|
||
IF l_aantal > 0
|
||
THEN
|
||
-- l_prs_perslid_key is persoon van uitvoerende van de opdracht, dat is oke
|
||
marx_update_mld_opdr_plandatum(l_prs_perslid_key, l_mld_opdr_key, l_res_rsv_ruimte_van, 'Plan(afspraak) datum', 'ORDPLD', 0, 1);
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- MARX#65463: Bijlages komen niet aan AAGN -> Schekman
|
||
-- Ook voor AX maken we een eigen proc, uiteindelijk maken ze allen gebruik van de generieke import (voorheen mar_import_ax_opdrachten)
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_ax_opdrachten (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_ax_opdrachten (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'Tobias');
|
||
END;
|
||
/
|
||
|
||
|
||
-- 3d Import tbv Facilitor-opdrachten
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_fclt_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_fclt_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'Facilitor');
|
||
END;
|
||
/
|
||
|
||
--- MARX#48947: Koppeling REMS <--> Mareon
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_rems_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_rems_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'Rems');
|
||
END;
|
||
/
|
||
|
||
-- MARX#55436: POC: Koppeling Dispatch <--> Mareon
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_disp_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_disp_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'Dispatch');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_mldopdr_sales005_10 (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_mldopdr_sales005_10 (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'SALES005');
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_twinq_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_import_gen_opdrachten (p_import_key);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_twinq_opdracht (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
mar_update_gen_opdrachten (p_import_key, 'Twinq');
|
||
END;
|
||
/
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- Webservice 6. View tbv webservice om opdrachten te accepteren, weigeren, af te melden...
|
||
|
||
-- MARX#57420: Documenten van Tobias AX naar Mareon
|
||
-- Deze view is helemaal (en alleen) voor Facilitor bedoeld.
|
||
-- Dit omdat we uit Facilitor moeten pullen, en niet weten - itt ax waar we via time (start+einde) -- wat nieuwe opdrachten zijn.
|
||
-- Deze nieuwe opdrachten laten we bepalen door Mareon, via deze view.
|
||
-- Van de nieuwe opdrachten die in Mareon net zijn aangemaakt, gaan we via de sync adapter checken of daar bijlages van bestaan in Facilitor.
|
||
-- Resultaat view: apikey van woco, opdracht-key van Mareon, opdracht-key van Facilitor-omgeving, opdracht-nr van Facilitor omgeving
|
||
|
||
-- MARX#84168 Bijlagen in de notities bij opdrachten naar de opdrachtgever
|
||
-- FUNCTIE die notitie-key ophaalt/bepaald bij een tracking-key
|
||
|
||
CREATE OR REPLACE FUNCTION get_mldopdr_note_key_of_track(p_tracking_key IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
l_note_key NUMBER(10);
|
||
BEGIN
|
||
BEGIN
|
||
SELECT mld_opdr_note_key
|
||
INTO l_note_key
|
||
FROM mld_opdr_note n
|
||
WHERE n.fac_tracking_key = p_tracking_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
RETURN NULL;
|
||
END;
|
||
RETURN l_note_key;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_new_opdr_4_fclt
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
mld_opdr_key_fclt,
|
||
mld_opdr_externnr
|
||
)
|
||
AS
|
||
SELECT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_id
|
||
FROM mld_melding m,
|
||
mld_opdr o,
|
||
fac_tracking t,
|
||
mar_v_woco_perslid woco
|
||
WHERE t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDNEW')
|
||
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 o.mld_opdr_key = t.fac_tracking_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_info_4_ax
|
||
(
|
||
prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
mld_opdr_halted,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_opmerking,
|
||
mld_opdr_notitie,
|
||
fac_srtnotificatie_key,
|
||
fac_tracking_datum,
|
||
mld_opdr_kosten
|
||
)
|
||
AS
|
||
SELECT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
o.mld_opdr_key,
|
||
o.mld_statusopdr_key,
|
||
o.mld_opdr_halted,
|
||
m.mld_meldbron_nr,
|
||
m.mld_melding_externnr,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_plandatum,
|
||
o.mld_opdr_plandatum2,
|
||
o.mld_opdr_opmerking,
|
||
fac.getnoteoftracking(t.fac_tracking_key),
|
||
t.fac_srtnotificatie_key,
|
||
t.fac_tracking_datum,
|
||
o.mld_opdr_kosten
|
||
FROM mld_melding m,
|
||
mld_opdr o,
|
||
fac_tracking t,
|
||
fac_srtnotificatie sn,
|
||
mar_v_woco_perslid woco
|
||
WHERE o.mld_opdr_key = t.fac_tracking_refkey
|
||
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 sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon, verbeterde versie 2 van mar_v_opdr_info_4_ax obv notify-queue
|
||
-- Wanneer er een notify-record van dezelfde opdracht bestaat die uitgesteld is (dwz eerder fout is gegaan, dus fac_notificatie_notbefore in de toekomst heeft), dan slaan we die opdracht totaal over.
|
||
-- Evt nieuwe notify op dezelfde opdracht zou anders gewoon meedoen, en is nog niet de bedoeling, ook die moet onderdrukt worden
|
||
-- Vandaar de not-exists aan het einde van deze query...
|
||
-- MARX#69220 Koppeling Mareon -> Twinq: GLN's van woco en lev zijn toegevoegd, zodat in SALES005 bericht (waar Twinq gebruik van maakt) dit kan worden verwerkt.
|
||
|
||
CREATE OR REPLACE VIEW marx_v_notifyqueue_order
|
||
(
|
||
fclt_3d_user_key,
|
||
mld_opdr_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_notbefore,
|
||
mld_opdr_marx_nr,
|
||
fac_tracking_datum,
|
||
mld_statusopdr_key,
|
||
ax_company_id,
|
||
woco_prs_leverancier_nr,
|
||
lev_prs_leverancier_nr,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_halted,
|
||
mld_opdr_onderbreek_code,
|
||
mld_opdr_afwijs_code,
|
||
mld_opdr_opmerking,
|
||
mld_opdr_notitie,
|
||
mld_opdr_note_key,
|
||
mld_opdr_kosten
|
||
)
|
||
AS
|
||
SELECT m.prs_perslid_key,
|
||
o.mld_opdr_key,
|
||
q.fac_notificatie_key,
|
||
sn.fac_srtnotificatie_key,
|
||
q.fac_srtnotificatie_code,
|
||
q.fac_notificatie_notbefore,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
|
||
q.fac_notificatie_datum,
|
||
o.mld_statusopdr_key,
|
||
COALESCE((select ko.mld_kenmerkopdr_waarde from mld_kenmerkopdr ko where ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 17 AND ko.mld_kenmerkopdr_verwijder IS NULL), m.mld_meldbron_nr),
|
||
woco.prs_leverancier_nr,
|
||
COALESCE(lev.prs_leverancier_nr,'0000000000000'),
|
||
m.mld_melding_externnr,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_plandatum,
|
||
o.mld_opdr_plandatum2,
|
||
fac.gettrackingdate('ORDAFM', o.mld_opdr_key),
|
||
o.mld_opdr_halted,
|
||
ud_hold.fac_usrdata_code,
|
||
ud_annwei.fac_usrdata_code,
|
||
o.mld_opdr_opmerking,
|
||
fac.getnoteofnotification(n.fac_notificatie_key),
|
||
get_mldopdr_note_key_of_track(n.fac_notificatie_extrakey),
|
||
o.mld_opdr_kosten
|
||
FROM fac_v_notifyqueue q,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
fac_srtnotificatie sn,
|
||
mld_kenmerkopdr ko_annwei,
|
||
fac_usrdata ud_annwei,
|
||
mld_kenmerkopdr ko_hold,
|
||
fac_usrdata ud_hold,
|
||
mld_stdmelding std,
|
||
ins_tab_discipline d,
|
||
ins_srtdiscipline sd,
|
||
fac_notificatie n,
|
||
prs_bedrijf woco,
|
||
prs_afdeling a,
|
||
prs_perslid p,
|
||
prs_bedrijf lev
|
||
WHERE BITAND (q.fac_notificatie_status, 64) = 64
|
||
AND q.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND sn.fac_srtnotificatie_code = q.fac_srtnotificatie_code
|
||
AND q.fac_notificatie_key = n.fac_notificatie_key
|
||
AND m.prs_perslid_key <> n.prs_perslid_key_sender
|
||
AND o.mld_opdr_key = q.fac_notificatie_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND woco.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND p.prs_perslid_key = m.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND ko_annwei.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND ko_annwei.mld_kenmerk_key(+) = 22
|
||
AND ko_annwei.mld_kenmerkopdr_verwijder(+) IS NULL
|
||
AND ud_annwei.fac_usrdata_key(+) = fac.safe_to_number (ko_annwei.mld_kenmerkopdr_waarde)
|
||
AND ko_hold.mld_opdr_key(+) = o.mld_opdr_key
|
||
AND ko_hold.mld_kenmerk_key(+) = 23
|
||
AND ko_hold.mld_kenmerkopdr_verwijder(+) IS NULL
|
||
AND ud_hold.fac_usrdata_key(+) = fac.safe_to_number (ko_hold.mld_kenmerkopdr_waarde)
|
||
AND std.mld_stdmelding_key = m.mld_stdmelding_key
|
||
AND d.ins_discipline_key = std.mld_ins_discipline_key
|
||
AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_v_notifyqueue q2
|
||
WHERE q2.fac_notificatie_refkey = q.fac_notificatie_refkey
|
||
AND BITAND (q2.fac_notificatie_status, 64) = 64
|
||
AND q2.fac_srtnotificatie_xmlnode = q.fac_srtnotificatie_xmlnode
|
||
AND q2.fac_notificatie_notbefore > SYSDATE);
|
||
|
||
|
||
CREATE OR REPLACE VIEW marx_v_opdr_prev_onhold_code
|
||
(
|
||
fclt_3d_user_key,
|
||
mld_opdr_key,
|
||
mld_opdr_onhold_code
|
||
)
|
||
AS
|
||
SELECT m.prs_perslid_key, o.mld_opdr_key, ko_hold.mld_kenmerkopdr_waarde
|
||
FROM mld_melding m, mld_opdr o, mld_kenmerkopdr ko_hold
|
||
WHERE m.mld_melding_key = o.mld_melding_key
|
||
AND ko_hold.mld_opdr_key = o.mld_opdr_key
|
||
AND ko_hold.mld_kenmerk_key = 30
|
||
AND ko_hold.mld_kenmerkopdr_verwijder IS NULL;
|
||
|
||
-- Een bij de opdrachten queue bijbehorende opschoonprocedure, die gedraaid kan/ MOET! worden als een opdrachtgever (dit is API key user/ perslid) van de 'oude' sync overstapt op queue-ing mechanisme.
|
||
-- Omdat van deze opdrachtgever die op de oude sync tot dusver draait, alle bit64 notificaties, voor zover die door de Facilitor-code nog niet zijn opgeruimd,
|
||
-- alsnog bij de overstap opgeruimd moeten! worden.
|
||
-- Om te voorkomen dat deze 64-bit notifies alsnog ongewenste/dubbele API-calls naar opdrachtgever worden afgevuurd, die op de oude sync al voor elkaar waren gemaakt.
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_clean_opdr_queue_perslid (p_prs_perslid_key IN NUMBER, p_date_tot IN DATE)
|
||
AS
|
||
BEGIN
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount = 0
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_melding m, mld_opdr o, fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND o.mld_opdr_key = n.fac_notificatie_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = p_prs_perslid_key);
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
-- MARX#76556 Oude fac_notificaties met bitje 64 worden niet gekilled/omgeruimd
|
||
-- Hier worden records gekilled (64 bitje gereset) waarvan p_prs_perslid_key (=opdrachtgever) de notificatie zelf (= myself) heeft geinitieerd, oftewel AND p_prs_perslid_key = prs_perslid_key_sender
|
||
-- Allen notificaties voor p_datum_tot doen mee, erna worden buiten beschouwing gelaten (doen niet mee).
|
||
-- En ook niet als die een failcount heeft (wat in theorie niet kan, anders doet ie mee in de SYNC, wat juist niet gebeurt).
|
||
CREATE OR REPLACE PROCEDURE marx_clean_opdr_from_NQ_myself (p_prs_perslid_key IN NUMBER, p_date_tot IN DATE)
|
||
AS
|
||
BEGIN
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount = 0
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_melding m, mld_opdr o, fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND o.mld_opdr_key = n.fac_notificatie_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = n.prs_perslid_key_sender
|
||
AND m.prs_perslid_key = p_prs_perslid_key);
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
-- MARX#76813 Bekende 3 HTTP400-fouten vanuit Tobias gaan we killen, tijdelijke procedure, op termijn kan deze (erg specifieke) code weg.
|
||
CREATE OR REPLACE PROCEDURE marx_clean_opdr_from_NQ_TEMP
|
||
AS
|
||
CURSOR c_NQ_T365_error_maar_toch_goed
|
||
IS SELECT fac_notificatie_key from marx_v_rap_queue_error
|
||
WHERE fac_tracking_oms like '400%'
|
||
AND ( fac_tracking_oms like '%code":"MAINTENANCE_UNKNOWN_TASK%'
|
||
OR fac_tracking_oms like '%code":"MAINTENANCE_UNKNOWN_PURCHANDTASK%'
|
||
OR fac_tracking_oms like '%code":"MAINTENANCE_UNKNOWN_PURCHID%'
|
||
);
|
||
|
||
BEGIN
|
||
FOR rec IN c_NQ_T365_error_maar_toch_goed
|
||
LOOP
|
||
BEGIN
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE n.fac_notificatie_key = rec.fac_notificatie_key
|
||
AND BITAND (n.fac_notificatie_status, 64) = 64;
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
-- Levert van elke factuur de API-key perslid op van de woco, voor wie de factuur bedoeld is...
|
||
|
||
CREATE OR REPLACE VIEW marx_v_factuur_4_woco
|
||
(
|
||
fin_factuur_key,
|
||
woco_prs_bedrijf_key,
|
||
woco_prs_perslid_key
|
||
)
|
||
AS
|
||
SELECT x.fin_factuur_key, wp.prs_bedrijf_key, x.woco_prs_perslid_key
|
||
FROM mar_v_woco_perslid wp,
|
||
(SELECT fin_factuur_key, COALESCE (m.prs_perslid_key, woco.prs_perslid_key, bo.prs_perslid_key) woco_prs_perslid_key
|
||
FROM fin_factuur f,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
cnt_contract c,
|
||
prs_afdeling a,
|
||
bes_bestelopdr bo,
|
||
mar_v_woco_perslid woco
|
||
WHERE f.mld_opdr_key = o.mld_opdr_key(+)
|
||
AND o.mld_melding_key = m.mld_melding_key(+)
|
||
AND f.cnt_contract_key = c.cnt_contract_key(+)
|
||
AND c.prs_afdeling_key_eig = a.prs_afdeling_key(+)
|
||
AND a.prs_bedrijf_key = woco.prs_bedrijf_key(+)
|
||
AND woco.prs_perslid_apikey(+) IS NOT NULL
|
||
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key(+)) x
|
||
WHERE wp.prs_perslid_key = x.woco_prs_perslid_key;
|
||
|
||
-- MARX#73665 Facilitor notifier: Invalid weekly job
|
||
-- Performance issue oplossen door een LOOP...
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_clean_fact_queue_perslid (p_prs_perslid_key IN NUMBER, p_date_tot IN DATE)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT n.fac_notificatie_key FROM fac_notificatie n
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount = 0
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur')
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM marx_v_factuur_4_woco f
|
||
WHERE f.fin_factuur_key = n.fac_notificatie_refkey
|
||
AND f.woco_prs_perslid_key = p_prs_perslid_key);
|
||
BEGIN
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE n.fac_notificatie_key = rec.fac_notificatie_key;
|
||
END;
|
||
END LOOP;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_clean_all_UNused_NQ
|
||
AS
|
||
-- Alle API-perslid records van de "woco's" die GEEN gebruik maken van NQ
|
||
CURSOR c_no_NQ
|
||
IS
|
||
SELECT p.prs_perslid_key FROM mar_v_woco_perslid p
|
||
WHERE prs_perslid_apikey IS NOT NULL
|
||
AND NOT EXISTS ( SELECT 'x' FROM prs_kenmerklink kl
|
||
WHERE kl.PRS_LINK_KEY = p.prs_bedrijf_key
|
||
AND kl.prs_kenmerk_key = 58
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_waarde = 1);
|
||
|
||
-- Alle API-perslid records van de "woco's" die WEL gebruik maken van NQ
|
||
CURSOR c_NQ
|
||
IS
|
||
SELECT p.prs_perslid_key FROM mar_v_woco_perslid p
|
||
WHERE prs_perslid_apikey IS NOT NULL
|
||
AND EXISTS ( SELECT 'x' FROM prs_kenmerklink kl
|
||
WHERE kl.PRS_LINK_KEY = p.prs_bedrijf_key
|
||
AND kl.prs_kenmerk_key = 58
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_waarde = 1);
|
||
v_datum DATE;
|
||
BEGIN
|
||
-- Dit is weliswaar vandaag, maar clean-up doet alles kleiner dan deze v_datum (=vandaag), oftewel alles van gisteren en eerder wordt opgeruimd.
|
||
v_datum := TRUNC(SYSDATE);
|
||
FOR rec IN c_no_NQ
|
||
LOOP
|
||
BEGIN
|
||
marx_clean_opdr_queue_perslid (rec.prs_perslid_key, v_datum);
|
||
marx_clean_fact_queue_perslid (rec.prs_perslid_key, v_datum);
|
||
END;
|
||
END LOOP;
|
||
FOR rec IN c_NQ
|
||
LOOP
|
||
BEGIN
|
||
marx_clean_opdr_from_NQ_myself (rec.prs_perslid_key, v_datum);
|
||
END;
|
||
END LOOP;
|
||
-- MARX#76813 Bekende 3 HTTP400-fouten vanuit Tobias gaan we killen
|
||
marx_clean_opdr_from_NQ_TEMP();
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#80878 Resetten van langdurige / old NQ items (die telkens error geven)
|
||
-- Verwijdert OPDRACHT NQ-records voor de "woco" met API-perslid "p_prs_perslid_key" die EN meer push-pogingen hebben gedaan dan ingesteld (a) EN die al langer bestaan dan is toegestaan/ingesteld (b),
|
||
-- oftewel reset de NQs met failcount >= max EN met datum in verrre verleden:
|
||
CREATE OR REPLACE PROCEDURE marx_clean_OLD_opdr_queue (p_prs_perslid_key IN NUMBER, p_max_failcount IN NUMBER, p_date_tot IN DATE)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT n.fac_notificatie_key, fac_srtnotificatie_key, fac_notificatie_refkey, fac_notificatie_datum, fac_notificatie_failcount
|
||
FROM fac_notificatie n
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount >= p_max_failcount
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_melding m, mld_opdr o, fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND o.mld_opdr_key = n.fac_notificatie_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = p_prs_perslid_key);
|
||
|
||
v_fac_srtnotificatie_code VARCHAR(100);
|
||
|
||
BEGIN
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
SELECT fac_srtnotificatie_code
|
||
INTO v_fac_srtnotificatie_code
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_key = rec.fac_srtnotificatie_key;
|
||
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE n.fac_notificatie_key = rec.fac_notificatie_key;
|
||
|
||
fac.trackaction ('#ORDUPD', rec.fac_notificatie_refkey, p_prs_perslid_key, SYSDATE,
|
||
'SYSTEM NQ Reset van notificatiesoort ' || v_fac_srtnotificatie_code || ': sinds ' || TO_CHAR(rec.fac_notificatie_datum,'DD-MM-YYYY') || ' is het aantal (send)failures ' || rec.fac_notificatie_failcount);
|
||
|
||
END;
|
||
END LOOP;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
-- MARX#80878 Resetten van langdurige / old NQ items (die telkens error geven)
|
||
-- Verwijdert FACTUUR NQ-records voor de "woco" met API-perslid "p_prs_perslid_key" die EN meer push-pogingen hebben gedaan dan ingesteld (a) EN die al langer bestaan dan is toegestaan/ingesteld (b),
|
||
-- oftewel reset de NQs met failcount >= max EN met datum in verrre verleden:
|
||
CREATE OR REPLACE PROCEDURE marx_clean_OLD_fact_queue (p_prs_perslid_key IN NUMBER, p_max_failcount IN NUMBER, p_date_tot IN DATE)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT n.fac_notificatie_key, fac_srtnotificatie_key, fac_notificatie_refkey, fac_notificatie_datum, fac_notificatie_failcount
|
||
FROM fac_notificatie n
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount >= p_max_failcount
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur')
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM marx_v_factuur_4_woco f
|
||
WHERE f.fin_factuur_key = n.fac_notificatie_refkey
|
||
AND f.woco_prs_perslid_key = p_prs_perslid_key);
|
||
|
||
-- MARX#81752 Beter opruimen zeer oude CUST-notificaties: alle oude NQ's die niet/nooit aan de beurt zijn geweest (failcount = 0), en ook nooit meer aan de beurt (kunnen) komen, gaan we ook verwijderen...
|
||
-- Dat betreffen dan de facturen NQ's die verwijderd zijn of wel verwerkt maar niet uit NQ zijn verwijderd (agv communicatie incidenten / fouten bv)
|
||
CURSOR c2
|
||
IS
|
||
SELECT n.fac_notificatie_key, fac_srtnotificatie_key, fac_notificatie_refkey, fac_notificatie_datum, fac_notificatie_failcount
|
||
FROM fac_notificatie n, fin_factuur f
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount = 0
|
||
AND n.fac_notificatie_datum < p_date_tot
|
||
AND n.fac_notificatie_refkey = f.fin_factuur_key
|
||
AND (f.fin_factuur_statuses_key IN (3, 7) OR f.fin_factuur_verwijder IS NOT NULL)
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur')
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM marx_v_factuur_4_woco f
|
||
WHERE f.fin_factuur_key = n.fac_notificatie_refkey
|
||
AND f.woco_prs_perslid_key = p_prs_perslid_key);
|
||
|
||
v_fac_srtnotificatie_code VARCHAR(100);
|
||
|
||
BEGIN
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
SELECT fac_srtnotificatie_code
|
||
INTO v_fac_srtnotificatie_code
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_key = rec.fac_srtnotificatie_key;
|
||
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE n.fac_notificatie_key = rec.fac_notificatie_key;
|
||
|
||
fac.trackaction ('#FINUPD', rec.fac_notificatie_refkey, p_prs_perslid_key, SYSDATE,
|
||
'SYSTEM NQ Reset van notificatiesoort ' || v_fac_srtnotificatie_code || ': sinds ' || TO_CHAR(rec.fac_notificatie_datum,'DD-MM-YYYY') || ' is het aantal (send)failures ' || rec.fac_notificatie_failcount);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rec IN c2
|
||
LOOP
|
||
BEGIN
|
||
SELECT fac_srtnotificatie_code
|
||
INTO v_fac_srtnotificatie_code
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_key = rec.fac_srtnotificatie_key;
|
||
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE n.fac_notificatie_key = rec.fac_notificatie_key;
|
||
|
||
fac.trackaction ('#FINUPD', rec.fac_notificatie_refkey, p_prs_perslid_key, SYSDATE,
|
||
'SYSTEM NQ Reset van notificatiesoort ' || v_fac_srtnotificatie_code || ': NQ registratie niet (meer) nodig');
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
-- MARX#80878 Resetten van langdurige / old NQ items (die telkens error geven)
|
||
CREATE OR REPLACE PROCEDURE marx_clean_OLD_error_NQ
|
||
AS
|
||
|
||
-- Alle API-perslid records van de opdrachtgevers ("woco's") die gebruik maken van NQ
|
||
CURSOR c_NQ
|
||
IS
|
||
SELECT p.prs_perslid_key FROM mar_v_woco_perslid p
|
||
WHERE prs_perslid_apikey IS NOT NULL
|
||
AND EXISTS ( SELECT 'x' FROM prs_kenmerklink kl
|
||
WHERE kl.PRS_LINK_KEY = p.prs_bedrijf_key
|
||
AND kl.prs_kenmerk_key = 58
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_waarde = 1);
|
||
v_max_aant_push NUMBER(10);
|
||
v_datum DATE;
|
||
BEGIN
|
||
|
||
-- Bepaling via $NQ_MAX_PUSHEVENTS (uitgedrukt in een aantal) van het maximum aantal NQ push-pogingen.
|
||
-- Indien $NQ_MAX_PUSHEVENTS kleiner is dan 25, wordt dit door deze functie op minimaal 25 gezet.
|
||
|
||
SELECT GREATEST(COALESCE(fac.safe_to_number(fac_usrdata_omschr),25), 25)
|
||
INTO v_max_aant_push
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_key = 42
|
||
AND fac_usrdata_code = '$NQ_MAX_PUSHEVENTS';
|
||
|
||
-- Bepaling via $NQ_MAX_TIME (uitgedrukt in uren) van de datum zodat alle NQ's die hiervoor liggen (langer geleden zijn ontstaan) worden verwijder.
|
||
-- Indien $NQ_MAX_TIME kleiner is dan 10 dagen (= 10*24), wordt dit door deze functie op minimaal 10 dagen (=240 uur) gezet.
|
||
|
||
SELECT SYSDATE - GREATEST(COALESCE(fac.safe_to_number(fac_usrdata_omschr),240),240)/24
|
||
INTO v_datum
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_key = 43
|
||
AND fac_usrdata_code = '$NQ_MAX_TIME';
|
||
|
||
FOR rec IN c_NQ
|
||
LOOP
|
||
BEGIN
|
||
marx_clean_OLD_opdr_queue (rec.prs_perslid_key, v_max_aant_push, v_datum);
|
||
marx_clean_OLD_fact_queue (rec.prs_perslid_key, v_max_aant_push, v_datum);
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Functie activeer NQ voor API p_prs_perslid_key van opdrachtgever/woco/prs_bedrijf vanaf datum/tijdstip p_date.
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_ACTIVATE_NQ_date (p_prs_perslid_key IN NUMBER, p_date IN DATE)
|
||
IS
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (2000);
|
||
l_error VARCHAR2 (500);
|
||
v_errormsg VARCHAR2 (3000);
|
||
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_woco_prs_bedrijf_naam VARCHAR2 (250);
|
||
|
||
v_push_notifyqueue NUMBER (10);
|
||
v_mar_abort_sync_http_error NUMBER (10);
|
||
BEGIN
|
||
-- Ten eerste veiligheidscheck: moet de instelling van het bedrijf van p_prs_perslid_key moet uit staan (om te voorkomen dat per ongeluk NQ records van een actief bedrijf worden verwijderd)
|
||
|
||
BEGIN
|
||
v_errormsg :=
|
||
'Succesvol alle oude NQ communicatie tot '
|
||
|| TO_CHAR (p_date, 'dd-mm-yyyy hh24:mi:ss')
|
||
|| ' opgeschoond en NC is nu geactiveerd.';
|
||
|
||
l_error := 'FOUT: Opdrachtgever/bedrijf van persoon ' || p_prs_perslid_key || ' kan niet worden gevonden';
|
||
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam
|
||
INTO v_woco_prs_bedrijf_key, v_woco_prs_bedrijf_naam
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
|
||
-- key 58 = Bedrijf $MAR_PUSH_NOTIFYQUEUE? Kan gevonden via view mar_v_bedrijf_push_NQ
|
||
SELECT prs_bedrijf_push_nq
|
||
INTO v_push_notifyqueue
|
||
FROM mar_v_bedrijf_push_NQ
|
||
WHERE prs_bedrijf_key = v_woco_prs_bedrijf_key;
|
||
|
||
IF (v_push_notifyqueue = 0)
|
||
THEN
|
||
-- Oke, notify staat dus nog niet, dan mogen we activeren (en cleanen)...
|
||
l_error := 'FOUT in proc marx_clean_opdr_queue_perslid';
|
||
marx_clean_opdr_queue_perslid (p_prs_perslid_key, p_date);
|
||
l_error := 'FOUT in proc marx_clean_fact_queue_perslid';
|
||
marx_clean_fact_queue_perslid (p_prs_perslid_key, p_date);
|
||
|
||
l_error := 'FOUT bij aanzetten $MAR_PUSH_NOTIFYQUEUE';
|
||
|
||
-- Nu kan $MAR_PUSH_NOTIFYQUEUE (key 58) worden ingesteld...
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (58,
|
||
'B',
|
||
v_woco_prs_bedrijf_key,
|
||
1);
|
||
|
||
fac.trackaction ('#PRSUPB',
|
||
v_woco_prs_bedrijf_key,
|
||
NULL,
|
||
NULL,
|
||
'Kenmerk $MAR_PUSH_NOTIFYQUEUE aangezet door marx_ACTIVATE_NQ');
|
||
|
||
-- Mocht de instelling $MAR_ABORT_SYNC_HTTP_ERROR (key 19) van (woco)bedrijf nog aan staan, deze moet uitgezet worden...
|
||
l_error := 'FOUT bij uitzetten $MAR_ABORT_SYNC_HTTP_ERROR';
|
||
|
||
SELECT COALESCE (MAX (fac.safe_to_number (prs_kenmerklink_waarde)), 0)
|
||
INTO v_mar_abort_sync_http_error
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 19
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_link_key = v_woco_prs_bedrijf_key;
|
||
|
||
IF (v_mar_abort_sync_http_error = 1)
|
||
THEN
|
||
DELETE FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 19
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_link_key = v_woco_prs_bedrijf_key;
|
||
|
||
fac.trackaction ('#PRSUPB',
|
||
v_woco_prs_bedrijf_key,
|
||
NULL,
|
||
NULL,
|
||
'Kenmerk $MAR_ABORT_SYNC_HTTP_ERROR uitgezet door marx_ACTIVATE_NQ');
|
||
END IF;
|
||
ELSE
|
||
-- Not oke, notify staat dus al aan, oude NQ kunnen/ mogen we niet opschonen, en activeren kan niet als die al actief is ;-)
|
||
v_errormsg :=
|
||
'FOUT: Instelling "$MAR_PUSH_NOTIFYQUEUE" van bedrijf '
|
||
|| v_woco_prs_bedrijf_naam
|
||
|| ' staat al AAN, dat mag niet, deze had UIT moeten staan, NQ kan/mag daarom niet worden opgeschoond.';
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := l_error || ' OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
END;
|
||
|
||
fac.trackaction ('#PRSUPB',
|
||
v_woco_prs_bedrijf_key,
|
||
NULL,
|
||
NULL,
|
||
'marx_ACTIVATE_NQ: ' || v_errormsg);
|
||
END;
|
||
/
|
||
|
||
-- Functie activeer NQ voor API p_prs_perslid_key van opdrachtgever/woco/prs_bedrijf
|
||
-- Eventuele NQ-records voor de laatste succesvolle SYNC worden gecleared (om te voorkomen dat status- en vooral factuurberichten dubbel worden gestuurd, die ook met de oude sync al zijn gestuurd
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_ACTIVATE_NQ (p_prs_perslid_key IN NUMBER)
|
||
IS
|
||
l_sync_date_lasttime DATE;
|
||
BEGIN
|
||
SELECT sync_date_lasttime
|
||
INTO l_sync_date_lasttime
|
||
FROM mar_v_sync_ax_lasttime
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
marx_ACTIVATE_NQ_date (p_prs_perslid_key, l_sync_date_lasttime);
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE VIEW marx_v_rap_queue_order_error
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_perslid_key,
|
||
mld_opdr_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount,
|
||
fac_notificatie_notbefore,
|
||
mld_opdr_marx_nr,
|
||
fac_tracking_datum,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_oms
|
||
)
|
||
AS
|
||
SELECT w.prs_bedrijf_key,
|
||
w.prs_bedrijf_naam,
|
||
m.prs_perslid_key,
|
||
o.mld_opdr_key,
|
||
q.fac_notificatie_key,
|
||
sn.fac_srtnotificatie_key,
|
||
q.fac_srtnotificatie_code,
|
||
n.fac_notificatie_failcount,
|
||
q.fac_notificatie_notbefore,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr,
|
||
q.fac_notificatie_datum,
|
||
m.mld_melding_externnr,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
(SELECT fac_tracking_oms
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT MAX (fac_tracking_key)
|
||
FROM fac_tracking
|
||
WHERE fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDTRK')
|
||
AND fac_tracking_refkey = o.mld_opdr_key))
|
||
FROM fac_v_notifyqueue q,
|
||
mld_melding m,
|
||
mld_opdr o,
|
||
fac_srtnotificatie sn,
|
||
mld_stdmelding std,
|
||
ins_tab_discipline d,
|
||
ins_srtdiscipline sd,
|
||
fac_notificatie n,
|
||
mar_v_woco_perslid w
|
||
WHERE BITAND (q.fac_notificatie_status, 64) = 64
|
||
AND q.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND sn.fac_srtnotificatie_code = q.fac_srtnotificatie_code
|
||
AND q.fac_notificatie_key = n.fac_notificatie_key
|
||
AND m.prs_perslid_key <> n.prs_perslid_key_sender
|
||
AND o.mld_opdr_key = q.fac_notificatie_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND std.mld_stdmelding_key = m.mld_stdmelding_key
|
||
AND d.ins_discipline_key = std.mld_ins_discipline_key
|
||
AND sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
|
||
AND n.fac_notificatie_failcount > 0
|
||
AND w.prs_perslid_key = m.prs_perslid_key;
|
||
|
||
CREATE OR REPLACE VIEW marx_v_rap_queue_factuur_error
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_perslid_key,
|
||
fin_factuur_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount,
|
||
fac_notificatie_notbefore,
|
||
fin_factuur_nr,
|
||
fac_tracking_datum,
|
||
fac_tracking_oms
|
||
)
|
||
AS
|
||
SELECT f.woco_prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
f.woco_prs_perslid_key,
|
||
fc.fin_factuur_key,
|
||
q.fac_notificatie_key,
|
||
sn.fac_srtnotificatie_key,
|
||
q.fac_srtnotificatie_code,
|
||
n.fac_notificatie_failcount,
|
||
q.fac_notificatie_notbefore,
|
||
fc.fin_factuur_nr,
|
||
q.fac_notificatie_datum,
|
||
(SELECT fac_tracking_oms
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT MAX (fac_tracking_key)
|
||
FROM fac_tracking
|
||
WHERE fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'FINTRK')
|
||
AND fac_tracking_refkey = fc.fin_factuur_key))
|
||
FROM fac_v_notifyqueue q,
|
||
marx_v_factuur_4_woco f,
|
||
prs_bedrijf b,
|
||
fac_srtnotificatie sn,
|
||
fac_notificatie n,
|
||
fin_factuur fc
|
||
WHERE BITAND (q.fac_notificatie_status, 64) = 64
|
||
AND q.fac_srtnotificatie_xmlnode = 'factuur'
|
||
AND sn.fac_srtnotificatie_code = q.fac_srtnotificatie_code
|
||
AND q.fac_notificatie_key = n.fac_notificatie_key
|
||
AND f.fin_factuur_key = q.fac_notificatie_refkey
|
||
AND fc.fin_factuur_key = f.fin_factuur_key
|
||
AND b.prs_bedrijf_key = f.woco_prs_bedrijf_key
|
||
AND n.fac_notificatie_failcount > 0;
|
||
|
||
|
||
CREATE OR REPLACE VIEW marx_v_rap_queue_error
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_perslid_key,
|
||
fac_entity,
|
||
the_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount,
|
||
fac_notificatie_notbefore,
|
||
the_reference,
|
||
the_ext_reference,
|
||
fac_tracking_datum,
|
||
fac_tracking_oms
|
||
)
|
||
AS
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_perslid_key,
|
||
'Opdracht',
|
||
mld_opdr_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount,
|
||
fac_notificatie_notbefore,
|
||
mld_opdr_marx_nr,
|
||
mld_opdr_externnr,
|
||
fac_tracking_datum,
|
||
fac_tracking_oms
|
||
FROM marx_v_rap_queue_order_error
|
||
UNION ALL
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
prs_perslid_key,
|
||
'Factuur',
|
||
fin_factuur_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount,
|
||
fac_notificatie_notbefore,
|
||
fin_factuur_nr,
|
||
NULL,
|
||
fac_tracking_datum,
|
||
fac_tracking_oms
|
||
FROM marx_v_rap_queue_factuur_error;
|
||
|
||
-- MARX#65192: MARX19 OVERALL TICKET - Reset NQ: Mogelijkheid om (in sommige gevallen waarin dat wenselijk/noodzakelijk is) een bericht die fout blijft gaan, uit de NQ te verwijderen.
|
||
-- Bv HTTP-errors die niet in Mareon te herstellen zijn (omdat oorzaak bij externe systeem ligt), en externe systeem geen oplossing biedt. Of wel, maar over enkele maanden (jaren).
|
||
-- Perslid p_perslid_key die aanroep (import) doet, deze moet PRSSYS rechten hebben.
|
||
-- Opdrachtgever waar notificatie betrekking op heeft (alleen extra check/controle icm p_fac_notificatie_key)
|
||
-- Notificatie p_fac_notificatie_key die gereste moet worden.
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_reset_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_fac_notificatie_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
|
||
v_fac_functie_key NUMBER (10);
|
||
v_entity VARCHAR2 (100);
|
||
v_key NUMBER (10);
|
||
v_srtnot_code VARCHAR2 (100);
|
||
v_not_failcount NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen autorisatie om het een NQ record te resetten';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_PRSSYS 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_PRSSYS')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'Notificatie key is geen positief getal t/m 9999999999';
|
||
|
||
IF p_fac_notificatie_key < 0 OR p_fac_notificatie_key > 9999999999
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- Checken of de NQ wel bestaat, bij bedrijf 'opdrachtgever' hoort en vaker mis is gegaan (dwz fouten heeft opgeleverd).
|
||
-- Alleen dan mag deze verwijderd worden.
|
||
|
||
|
||
v_result := 'Ongeldige notificatie key icm opdrachtgever of niet bestaande NQ';
|
||
|
||
-- Levert entiteit (OPDRACHT of FACTUUR) op waar het om gaat, met de bijbehorende the_key mld_opdr_key of fin_factuur_key
|
||
SELECT DECODE (UPPER (fac_entity), 'OPDRACHT', '#ORDUPD', 'FACTUUR', '#FINUPD', ''),
|
||
the_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_failcount
|
||
INTO v_entity,
|
||
v_key,
|
||
v_srtnot_code,
|
||
v_not_failcount
|
||
FROM marx_v_rap_queue_error
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key
|
||
AND fac_notificatie_key = p_fac_notificatie_key
|
||
AND fac_notificatie_failcount > 0;
|
||
|
||
-- Fac notificatie bestaat bij opdrachtgever en heeft een of meer fouten, mag gereset worden...
|
||
v_result := 'Reset van NQ is mislukt';
|
||
|
||
UPDATE fac_notificatie n
|
||
SET n.fac_notificatie_status = BITAND (n.fac_notificatie_status, 255 - 64)
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_failcount > 0
|
||
AND n.fac_notificatie_key = p_fac_notificatie_key;
|
||
|
||
v_result := 'Tracking is mislukt';
|
||
fac.trackaction (v_entity,
|
||
v_key,
|
||
p_perslid_key,
|
||
NULL,
|
||
'NQ Reset van notificatiesoort ' || v_srtnot_code || ' (aantal failures: ' || v_not_failcount || ')');
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#77152 Factuur opnieuw vanuit Mareon kunnen sturen
|
||
-- (Extra) Check cq. bepaling van API perslid van de woco die bij de factuur hoort, oftewel, welke API perslid krijgt de factuur toegestuurd...
|
||
CREATE OR REPLACE FUNCTION marx_get_woco_perslid_factuur (p_factuur_key IN NUMBER)
|
||
RETURN NUMBER
|
||
IS
|
||
v_mld_opdr_key NUMBER (10);
|
||
v_cnt_contract_key NUMBER (10);
|
||
v_bes_bestelopdr_key NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
BEGIN
|
||
v_prs_perslid_key := NULL;
|
||
SELECT mld_opdr_key, cnt_contract_key, bes_bestelopdr_key
|
||
INTO v_mld_opdr_key, v_cnt_contract_key, v_bes_bestelopdr_key
|
||
FROM fin_factuur
|
||
WHERE fin_factuur_key = p_factuur_key;
|
||
|
||
IF v_mld_opdr_key IS NOT NULL
|
||
THEN SELECT m.prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM mld_opdr o,
|
||
mld_melding m
|
||
WHERE o.mld_opdr_key = v_mld_opdr_key
|
||
AND m.mld_melding_key = o.mld_melding_key;
|
||
ELSE IF v_cnt_contract_key IS NOT NULL
|
||
THEN
|
||
SELECT woco.prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM mar_v_woco_perslid woco,
|
||
cnt_contract c,
|
||
prs_afdeling a
|
||
WHERE c.cnt_contract_key = v_cnt_contract_key
|
||
AND a.prs_afdeling_key = c.prs_afdeling_key_eig
|
||
AND a.prs_bedrijf_key = woco.prs_bedrijf_key(+)
|
||
AND woco.prs_perslid_apikey(+) IS NOT NULL;
|
||
ELSE IF v_bes_bestelopdr_key IS NOT NULL
|
||
THEN
|
||
SELECT bo.prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM bes_bestelopdr bo
|
||
WHERE bo.bes_bestelopdr_key = v_bes_bestelopdr_key;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
RETURN v_prs_perslid_key;
|
||
END;
|
||
/
|
||
|
||
-- MARX#77152 Factuur opnieuw vanuit Mareon kunnen sturen
|
||
-- Functie die factuur in NQ zet, dit trackt.
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_factuur_add_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_fin_factuur_key IN NUMBER)
|
||
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_fac_srtnotificatie_key NUMBER(10);
|
||
|
||
v_fac_functie_key NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen autorisatie om factuur opnieuw via NQ te versturen';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_PRSSYS 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_PRSSYS')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'Factuur key is geen positief getal t/m 9999999999';
|
||
|
||
IF p_fin_factuur_key < 0 OR p_fin_factuur_key > 9999999999
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- Extra check: is factuur wel voor opdrachtgever 'p_opdrgever_naam' is bedoeld.
|
||
-- Alleen dan mag deze factuur opnieuw in NQ komen.
|
||
|
||
v_result := 'Ongeldige factuurkey icm opdrachtgever';
|
||
|
||
SELECT 1
|
||
INTO l_force_error
|
||
FROM mar_v_woco_perslid woco
|
||
WHERE woco.prs_bedrijf_key = v_prs_bedrijf_key
|
||
AND woco.prs_perslid_apikey IS NOT NULL
|
||
AND marx_get_woco_perslid_factuur (p_fin_factuur_key) = woco.prs_perslid_key;
|
||
|
||
|
||
v_result := 'Ongeldige factuurkey: er bestaat al een NQ met FINNEW bij deze factuur, kan niet nogmaals worden toegevoegd';
|
||
SELECT 1
|
||
INTO l_force_error
|
||
FROM dual
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_notificatie n, fac_srtnotificatie sn
|
||
WHERE BITAND (n.fac_notificatie_status, 64) = 64
|
||
AND n.fac_notificatie_refkey = p_fin_factuur_key
|
||
AND n.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_code = 'FINNEW');
|
||
|
||
|
||
-- Oke, factuur is voor opdrachtgever bedoeld en heeft nog geen NQ FINNEW, dus NQ voor deze factuur mag toegevoegd worden...
|
||
v_result := 'Toevoegen van NQ FINNEW voor deze factuur is mislukt';
|
||
|
||
-- Eerst de factuur naar status Ingevoerd en de SYNC datum weer leeg maken
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_statuses_key = 2,
|
||
fin_factuur_externsyncdate = NULL
|
||
WHERE fin_factuur_key = p_fin_factuur_key;
|
||
|
||
-- En nu toevoegen aan NQ
|
||
SELECT fac_srtnotificatie_key
|
||
INTO v_fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'FINNEW';
|
||
BEGIN fac.notifytracking(v_fac_srtnotificatie_key, NULL, 'Factuur opnieuw aanbieden aan (ERP) opdrachtgever', p_fin_factuur_key ); END;
|
||
|
||
-- Om te eindigen met een tracking
|
||
v_result := 'Tracking voor deze factuur is mislukt';
|
||
BEGIN fac.trackaction ('FINUPD', p_fin_factuur_key, p_perslid_key, SYSDATE, 'Factuur opnieuw aanbieden aan (ERP) opdrachtgever'); END;
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#77152 Factuur opnieuw vanuit Mareon kunnen sturen
|
||
-- Functie die alle facturen voor een opdrachtgever met bedrijfsnaam 'p_opdrgever_naam', die in een tijdsvak p_date_start-p_date_end zijn binnengekomen, opnieuw in NQ zet (om te versturen).
|
||
CREATE OR REPLACE FUNCTION mar_facturen_uit_tijdvak_2_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_date_start IN DATE,
|
||
p_date_end IN DATE)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
l_api_perslid_key NUMBER (10);
|
||
v_result VARCHAR2 (1000);
|
||
v_teller NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_teller := 0;
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
FOR curs IN
|
||
( SELECT ft.fac_tracking_refkey fin_factuur_key
|
||
FROM fac_tracking ft
|
||
WHERE ft.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'FINNEW')
|
||
AND ft.fac_tracking_datum >= p_date_start
|
||
AND ft.fac_tracking_datum <= p_date_end
|
||
ORDER BY fac_tracking_key
|
||
)
|
||
LOOP
|
||
-- In de functie mar_post_action_factuur_add_nq wordt ook wel gecheckt of factuur wel bij opdrachtgever hoort, en die check zit vanwege performance niet in de query
|
||
-- we willen voorkomen dat er van 1000-den facturen die toch niet geldig zijn bij die opdrachtgever, de result-string onzinnig (groot) wordt met meldingen.
|
||
-- Daarom de check hier alvast gedaan, om die factuur uit te sluiten cq. niet aan te bieden (is onzinnig namelijk)
|
||
SELECT MAX(woco.prs_perslid_key)
|
||
INTO l_api_perslid_key
|
||
FROM mar_v_woco_perslid woco
|
||
WHERE woco.prs_bedrijf_key = v_prs_bedrijf_key
|
||
AND woco.prs_perslid_apikey IS NOT NULL
|
||
AND marx_get_woco_perslid_factuur (curs.fin_factuur_key) = woco.prs_perslid_key;
|
||
|
||
IF l_api_perslid_key IS NOT NULL
|
||
THEN
|
||
-- Factuur hoort bij opdrachtgever
|
||
v_result := mar_post_action_factuur_add_nq (p_perslid_key, p_opdrgever_naam, curs.fin_factuur_key);
|
||
v_teller := v_teller + 1;
|
||
END IF;
|
||
END LOOP;
|
||
COMMIT;
|
||
v_result := 'Er zijn ' || v_teller || 'facturen in NQ gezet';
|
||
RETURN v_result;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#77152 Factuur opnieuw vanuit Mareon kunnen sturen
|
||
-- Functie die alle facturen voor een opdrachtgever, die in een tijdsvak t1-t2 zijn binnengekomen, opnieuw in NQ zet (om te versturen).
|
||
-- Parameter p_opdrgever_naam_t1_t2 bestaat uit de 3 gegevens 'prs_bedrijf_naam', tijdstippen t1 en t2, beide in formaat yyyy-mm-ddThh:mm. De 3 gegevens worden gescheiden door @@.
|
||
-- Voorbeeld: Ymere@@2023-03-09T19:45@@2023-03-25T08:00
|
||
-- Aanroep van deze functie is uit mareon_support.html
|
||
CREATE OR REPLACE FUNCTION mar_post_action_fact_time_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam_t1_t2 IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
IS
|
||
l_opdrgever_naam VARCHAR2 (1000);
|
||
l_t1 VARCHAR2 (1000);
|
||
l_t2 VARCHAR2 (1000);
|
||
l_rest VARCHAR2 (1000);
|
||
l_date_start DATE;
|
||
l_date_end DATE;
|
||
v_result VARCHAR2 (1000);
|
||
|
||
BEGIN
|
||
BEGIN
|
||
l_opdrgever_naam := substr(p_opdrgever_naam_t1_t2, 1, instr(p_opdrgever_naam_t1_t2, '@@')- 1);
|
||
l_rest := substr(p_opdrgever_naam_t1_t2, instr(p_opdrgever_naam_t1_t2, '@@') + 2);
|
||
l_t1 := substr(l_rest, 1, instr(l_rest, '@@')- 1);
|
||
l_rest := substr(l_rest, instr(l_rest, '@@') + 2);
|
||
l_t2 := l_rest;
|
||
|
||
l_date_start := fac.safe_to_date (replace(l_t1,'T', ' '), 'yyyy-mm-dd hh24:mi');
|
||
l_date_end := fac.safe_to_date (replace(l_t2,'T', ' '), 'yyyy-mm-dd hh24:mi');
|
||
|
||
IF l_date_start IS NOT NULL AND l_date_end IS NOT NULL AND l_opdrgever_naam IS NOT NULL
|
||
THEN
|
||
v_result := mar_facturen_uit_tijdvak_2_nq(p_perslid_key, l_opdrgever_naam, l_date_start, l_date_end);
|
||
ELSE
|
||
v_result := 'Opdrachtgever (' || l_opdrgever_naam || ') en/of datum(s) (' || l_t1 || ',' || l_t2 || ') zijn niet correct.';
|
||
END IF;
|
||
COMMIT;
|
||
RETURN v_result;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
-- MARX#71467 Optimalisatie SUPPORT: Logging Mareon Sync Adapter
|
||
-- PUNT 2: Alle NQ's van een opdracht kunnen verwijderen.
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_del_mldopdr_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_mld_opdr_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
|
||
v_fac_functie_key NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen autorisatie om het een NQ record te resetten';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_PRSSYS 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_PRSSYS')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'Notificatie key is geen positief getal t/m 9999999999';
|
||
|
||
IF p_mld_opdr_key < 0 OR p_mld_opdr_key > 9999999999
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- Checken of er wel NQ's voor deze opdracht bestaan, en zo ja , dat er minimaal 1 NQ is die fout is gegaan, oftewel we kunnen via deze functie geen opdracht uit NQ verwijderen waarvan er GEEN fout is geregistreerd.
|
||
-- Alleen dan mag deze opdracht uit NQ verwijderd worden.
|
||
v_result := 'Ongeldige opdrachtkey icm opdrachtgever';
|
||
|
||
SELECT 1
|
||
INTO l_force_error
|
||
FROM mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco1
|
||
WHERE o.mld_opdr_key = p_mld_opdr_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.prs_perslid_key = woco1.prs_perslid_key
|
||
AND woco1.prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
|
||
v_result := 'Ongeldige opdrachtkey: er bestaan geen NQ bij deze opdracht met minimaal 1 NQ error';
|
||
SELECT 1
|
||
INTO l_force_error
|
||
FROM fac_notificatie n1
|
||
WHERE BITAND (n1.fac_notificatie_status, 64) = 64
|
||
AND n1.fac_notificatie_refkey = p_mld_opdr_key
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n1.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht')
|
||
AND EXISTS (select 'x' FROM fac_notificatie n2
|
||
WHERE BITAND (n2.fac_notificatie_status, 64) = 64
|
||
AND n2.fac_notificatie_refkey = n1.fac_notificatie_refkey
|
||
AND n2.fac_notificatie_failcount > 0
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_srtnotificatie sn2
|
||
WHERE sn2.fac_srtnotificatie_key = n2.fac_srtnotificatie_key
|
||
AND sn2.fac_srtnotificatie_xmlnode = 'opdracht')
|
||
)
|
||
GROUP BY n1.fac_notificatie_refkey;
|
||
|
||
-- Oke, opdracht bestaat bij opdrachtgever en heeft NQ met een of meer fouten, alle NQs van deze opdracht mogen gereset worden...
|
||
v_result := 'Reset van alle NQs voor deze opdracht is mislukt';
|
||
|
||
UPDATE fac_notificatie n1
|
||
SET n1.fac_notificatie_status = BITAND (n1.fac_notificatie_status, 255 - 64)
|
||
WHERE BITAND (n1.fac_notificatie_status, 64) = 64
|
||
AND n1.fac_notificatie_refkey = p_mld_opdr_key
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_key = n1.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht')
|
||
AND EXISTS (select 'x' FROM fac_notificatie n2
|
||
WHERE BITAND (n2.fac_notificatie_status, 64) = 64
|
||
AND n2.fac_notificatie_refkey = n1.fac_notificatie_refkey
|
||
AND n2.fac_notificatie_failcount > 0
|
||
AND EXISTS (SELECT 'x'
|
||
FROM fac_srtnotificatie sn2
|
||
WHERE sn2.fac_srtnotificatie_key = n2.fac_srtnotificatie_key
|
||
AND sn2.fac_srtnotificatie_xmlnode = 'opdracht')
|
||
);
|
||
|
||
v_result := 'Tracking is mislukt';
|
||
fac.trackaction ('#ORDUPD',
|
||
p_mld_opdr_key,
|
||
p_perslid_key,
|
||
NULL,
|
||
'NQ Reset van alle notificaties tot dit moment');
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#71467 Optimalisatie SUPPORT: Logging Mareon Sync Adapter
|
||
-- PUNT 3: De once-scripts die we tot nu toe gebruiken om een opdrachtgever over te schakelen van de 'oude' SYNC naar NQ (via aanroep van marx_ACTIVATE_NQ in once-script),
|
||
-- doen we nu hier zodat die once-scripts niet meer nodig zijn.
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_action_activate_nq (p_perslid_key IN NUMBER,
|
||
p_opdrgever_naam IN VARCHAR2,
|
||
p_api_perslid_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
|
||
v_fac_functie_key NUMBER (10);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen autorisatie om bij bedrijf de activatie van NQ in te stellen';
|
||
|
||
-- Heeft perslid voldoende rechten, dwz WEB_PRSSYS 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_PRSSYS')
|
||
AND prs_perslid_key = p_perslid_key;
|
||
|
||
v_result := 'Opdrachtgever ' || p_opdrgever_naam || ' is niet gevonden/bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (p_opdrgever_naam) AND prs_bedrijf_intern = 1 AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_result := 'API perslidkey is geen positief getal t/m 9999999999';
|
||
|
||
IF p_api_perslid_key < 0 OR p_api_perslid_key > 9999999999
|
||
THEN
|
||
SELECT 1 / 0
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- Checken of de NQ wel bestaat, bij bedrijf 'opdrachtgever' hoort en vaker mis is gegaan (dwz fouten heeft opgeleverd).
|
||
-- Alleen dan mag deze verwijderd worden.
|
||
|
||
|
||
v_result := 'Ongeldige perslidkey van de API-user van de opdrachtgever';
|
||
|
||
|
||
-- Hoort de ingevulde perslid-key die wordt meegestuurd (in parameter p_api_perslid_key) wel bij de meegestuurde opdrachtgever (in parameter p_opdrgever_naam)?
|
||
-- Oftewel horen beide wel bij elkaar? Dit is tbv extra controle om fouten te voorkomen
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_apikey IS NOT NULL
|
||
AND prs_bedrijf_key = v_prs_bedrijf_key
|
||
AND prs_perslid_key = p_api_perslid_key;
|
||
|
||
marx_ACTIVATE_NQ(v_prs_perslid_key);
|
||
|
||
v_result := NULL;
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
-- In tabel fac_usrdata (van fac_usrtab_key 8 cq. Vertaaltabel vaardigheden) 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_vaardigheid (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 vaardigheden vertalingen is 8.
|
||
l_fac_usrtab_key := 8;
|
||
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen beheerrechten voor de vertaaltabel van vaardigheden.';
|
||
|
||
-- 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 Mareon Planning';
|
||
v_aantal := marx_bedrijf_auth_4premiumplan (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 vertaal/vaardigheidscode(s)';
|
||
|
||
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 vertaal/vaardigheidscode 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 vertaal/vaardigheidscode(s) 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 := 'Code van vaardigheid van leverancier kan 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 vertaal/vaardigheidscode(s) 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 vertaal/vaardigheidscode(s) 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 := 'Code van vaardigheid vanuit opdrachtgever kan 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;
|
||
/
|
||
|
||
|
||
-----
|
||
|
||
-- 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;
|
||
/
|
||
|
||
-----
|
||
--MARX#86957 Nieuwe mogelijkheid voor dispatching Vesteda-opdrachten naar JH-vestigingen
|
||
CREATE OR REPLACE FUNCTION mar_post_action_postcodegln(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 postcode-gln vertalingen is 12.
|
||
l_fac_usrtab_key := 12;
|
||
|
||
v_result := NULL;
|
||
|
||
v_result := 'U heeft geen beheerrechten voor de vertaaltabel van postcode-GLN.';
|
||
|
||
-- 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 := 'Er is iets mis met de vertaling: geef postcode 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 AND LENGTH(v_code1)=4
|
||
THEN
|
||
|
||
v_result := 'Er kan niet worden bepaald of postcode 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 postcode-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 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 postcode-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 postcode-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 := 'Cijferdeel van postcode mag niet leeg zijn en moet bestaan uit exact 4 cijfers.';
|
||
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;
|
||
/
|
||
|
||
-- MARX#87282 Nieuwe API voor activeren leveranciers vanuit (opdrachtgevers)ERP naar Mareon
|
||
-- p_perslid_key = woco die deze functie uitvoert
|
||
-- p_mareonid_erpid = combi van MareonID (die in Mareon moet bestaan) en ERP 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_mareonid_erpid IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_mareon_id VARCHAR2 (1000);
|
||
v_erp_id VARCHAR2 (1000);
|
||
v_erpid_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_lev_naam VARCHAR2(250);
|
||
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_mareon_id:= SUBSTR(p_mareonid_erpid, 1, INSTR(p_mareonid_erpid,'|')-1);
|
||
v_erp_id:= SUBSTR(p_mareonid_erpid, INSTR(p_mareonid_erpid,'|')+1);
|
||
|
||
IF v_mareon_id IS NOT NULL AND v_erp_id IS NOT NULL
|
||
THEN
|
||
v_result := 'MareonID ' || v_mareon_id || ' bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam
|
||
INTO v_prs_bedrijf_lev_key, v_prs_bedrijf_lev_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = v_mareon_id AND prs_bedrijf_intern IS NULL AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
-- Wanneer het erp-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_erp_id;
|
||
|
||
IF v_aantal > 0
|
||
THEN
|
||
-- Forceer error
|
||
v_result := 'MareonID ' || v_mareon_id || ' kan niet met ERP ID ' || v_erp_id || ' worden geactiveerd omdat dit ERPID 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_prs_bedrijf_lev_naam || '] 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_erp_id,
|
||
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_prs_bedrijf_lev_naam || ' (MareonID: ' || v_mareon_id || ') is als leverancier met ID ' || v_erp_id || ' succesvol geactiveerd t.b.v. het ontvangen van uw (uitvoerings)opdrachten');
|
||
fac.trackaction ('#CUST10',
|
||
v_prs_bedrijf_lev_key,
|
||
p_perslid_key,
|
||
NULL,
|
||
'Opdrachtgever ' || v_woco_prs_bedrijf_naam || ' heeft Mareon deelnemer ' || v_prs_bedrijf_lev_naam || ' geactiveerd t.b.v. het ontvangen van (uitvoerings)opdrachten');
|
||
ELSE
|
||
-- Combi bestaat al, we gaan updaten
|
||
v_result := 'Het updaten/koppelen van leverancier [' || v_woco_prs_bedrijf_naam || ' x ' || v_prs_bedrijf_lev_naam || '] 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_erpid_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_erpid_oud IS NULL OR v_erpid_oud <> v_erp_id
|
||
THEN
|
||
UPDATE prs_bedrijf_bedrijf
|
||
SET prs_bedrijf_externid2 = v_erp_id
|
||
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_prs_bedrijf_lev_naam || ' (MareonID: ' || v_mareon_id || ') is als leverancier van uw (uitvoerings)opdrachten succesvol aangepast van ID ' || COALESCE(v_erpid_oud, 'Leeg') || ' naar ID ' || v_erp_id);
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
IF v_erp_id IS NULL AND v_mareon_id IS NOT NULL
|
||
THEN
|
||
-- Mogelijkheid om combi prs_bedrijf_bedrijf te verwijderen, alleen als nog geen opdrachten van deze opdrachtgever.
|
||
v_result := 'MareonID ' || v_mareon_id || ' bestaat niet in Mareon';
|
||
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam
|
||
INTO v_prs_bedrijf_lev_key, v_prs_bedrijf_lev_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = v_mareon_id AND prs_bedrijf_intern IS NULL AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
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 nietm en kan dus helemaal niet verwijderd worden
|
||
v_result := 'Mareon deelnemer ' || v_prs_bedrijf_lev_naam || ' (MareonID: ' || v_mareon_id || ') is niet actief en daarom niet inactief worden gemaakt.';
|
||
SELECT 1/0 INTO l_force_error FROM dual;
|
||
ELSE
|
||
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_prs_bedrijf_lev_naam || ' (MareonID: ' || v_mareon_id || ') is als leverancier inactief gemaakt.');
|
||
|
||
ELSE
|
||
v_result := 'Mareon deelnemer ' || v_prs_bedrijf_lev_naam || ' (MareonID: ' || v_mareon_id || ') heeft reeds opdrachten en kan daarom niet inactief worden gemaakt.';
|
||
SELECT 1/0 INTO l_force_error FROM dual;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- v_mareon_id is NULL en/of v_erp_id is evt. leeg
|
||
v_result := 'MareonID 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.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_opmerking_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_opmerking
|
||
)
|
||
AS
|
||
SELECT DISTINCT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_notitie
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_opdr_notitie IS NOT NULL
|
||
AND mld_statusopdr_key NOT IN (1, 6, 7, 9)
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDNOB');
|
||
|
||
-- View van afgemelde opdrachten sinds de 'laatste' keer.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_afgemeld_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking
|
||
)
|
||
AS
|
||
SELECT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE (mld_statusopdr_key = 6 OR mld_statusopdr_key = 9)
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDAFM');
|
||
|
||
--MARX#60079: Mareon inrichten voor reversible billing KPN, View van afgeronde opdrachten sinds de 'laatste' keer.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_afgerond_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking,
|
||
mld_opdr_kosten
|
||
)
|
||
AS
|
||
SELECT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking,
|
||
mld_opdr_kosten
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_statusopdr_key = 9
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDAFR');
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_accept_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking,
|
||
fac_srtnotificatie_code,
|
||
ann_of_wei,
|
||
mld_opdr_extrainfo
|
||
)
|
||
AS
|
||
SELECT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_notitie,
|
||
'ORDACP',
|
||
NULL,
|
||
mld_opdr_notitie
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_statusopdr_key = 8
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDACP');
|
||
|
||
|
||
-- Constante c_fac_usrtab_key :=2 voor de user-tabel met weiger return codes.
|
||
-- Constante flexprop-key := 7 voor weiger-code (tekst) bij afgewezen opdracht.
|
||
|
||
-- MARX#57368: Aanpassing 'huidige' aanroep Tobias-AX webservice ivm communicatie logboek
|
||
-- Nieuwe kolom "mld_opdr_extrainfo", hierin staat altijd de mld_opdr_opmerking, ook bij WEIgeren. Punt is dat bij WEIgeren de bestaande kolom mld_opdr_opmerking ivm backward compatibiliteit zo moet blijven voor de bestaande adapters (ook in AX2009), en GEWEIGERD als code verwacht
|
||
-- Daarom een nieuwe kolom die bijna dezelfde vulling kent: mld_opdr_extrainfo
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_refuse_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
fac_tracking_datum,
|
||
mld_opdr_opmerking,
|
||
fac_srtnotificatie_code,
|
||
ann_of_wei,
|
||
mld_opdr_extrainfo
|
||
)
|
||
AS
|
||
SELECT s.prs_perslid_key,
|
||
s.prs_perslid_apikey,
|
||
s.mld_opdr_key,
|
||
s.ax_company_id,
|
||
s.mld_melding_externnr,
|
||
s.mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
s.fac_tracking_datum,
|
||
COALESCE (ud.fac_usrdata_code, REF.std_weigercode),
|
||
DECODE (ud2.fac_usrdata_code, 'ANN', 'ORDANN', 'ORDCAN'),
|
||
ud2.fac_usrdata_code,
|
||
mld_opdr_opmerking
|
||
FROM mar_v_opdr_info_4_ax s,
|
||
mld_kenmerkopdr ko,
|
||
fac_usrdata ud,
|
||
mar_v_std_refusecode REF,
|
||
mld_kenmerkopdr ko2,
|
||
fac_usrdata ud2
|
||
WHERE s.mld_statusopdr_key = 1
|
||
AND s.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDCAN')
|
||
AND ko.mld_opdr_key(+) = s.mld_opdr_key
|
||
AND ko.mld_kenmerk_key(+) = 7
|
||
AND ko.mld_kenmerkopdr_verwijder(+) IS NULL
|
||
AND ud.fac_usrtab_key(+) = 2
|
||
AND ud.fac_usrdata_key(+) = fac.safe_to_number (ko.mld_kenmerkopdr_waarde)
|
||
AND ko2.mld_opdr_key(+) = s.mld_opdr_key
|
||
AND ko2.mld_kenmerk_key(+) = 22
|
||
AND ko2.mld_kenmerkopdr_verwijder(+) IS NULL
|
||
AND ud2.fac_usrdata_key(+) = fac.safe_to_number (ko2.mld_kenmerkopdr_waarde);
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_accept_refused_ax
|
||
AS
|
||
SELECT * FROM mar_v_opdr_accept_ax
|
||
UNION ALL
|
||
SELECT * FROM mar_v_opdr_refuse_ax;
|
||
|
||
|
||
-- View van opdrachten met een plandatum sinds de 'laatste' keer.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_plandatum_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_opmerking
|
||
)
|
||
AS
|
||
SELECT DISTINCT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_notitie
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_statusopdr_key NOT IN (7, 9)
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDPLD');
|
||
|
||
-- MARX#54121: De status VER - verlengen (het gaat langer duren)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_plandatum2_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_opmerking
|
||
)
|
||
AS
|
||
SELECT DISTINCT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_notitie
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_statusopdr_key NOT IN (7, 9)
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDPL2');
|
||
|
||
|
||
-- MARX56792: Mareon sync adapter aanpassen tbv nieuwe statussen naar Tobias2012
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_uitvoering_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_opmerking
|
||
)
|
||
AS
|
||
SELECT DISTINCT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_notitie
|
||
FROM mar_v_opdr_info_4_ax
|
||
WHERE mld_statusopdr_key = 8
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDRSM');
|
||
|
||
-- MARX56792: Mareon sync adapter aanpassen tbv nieuwe statussen naar Tobias2012
|
||
-- MARX57626: Twee onderbreken statussen achter elkaar in Mareon (2x ORDHLT achter elkaar doen we niet, flexprop wordt aangepast, dit wordt getrackt via ORDUPD)
|
||
-- MARX#69956 Notities bij opdrachten naar de opdrachtgever - GROUP BY om te voorkomen dat agv notitie nu 2 records zouden ontstaan, voor zowel ORDHLT als ORDUPD (waar dat voorheen met mld_opdr_opmerking niet mogelijk was).
|
||
CREATE OR REPLACE VIEW mar_v_opdr_onderbroken_ax
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
mld_opdr_opmerking,
|
||
mld_opdr_onderbreek_code
|
||
)
|
||
AS
|
||
SELECT s.prs_perslid_key,
|
||
s.prs_perslid_apikey,
|
||
s.mld_opdr_key,
|
||
s.ax_company_id,
|
||
s.mld_melding_externnr,
|
||
s.mld_opdr_externnr,
|
||
s.mld_opdr_ordernr,
|
||
MAX(s.mld_opdr_notitie),
|
||
MAX(ud.fac_usrdata_code)
|
||
FROM mar_v_opdr_info_4_ax s, mld_kenmerkopdr ko, fac_usrdata ud, mld_kenmerkopdr ko2
|
||
WHERE mld_statusopdr_key = 8
|
||
AND mld_opdr_halted = 1
|
||
AND ( fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDHLT')
|
||
OR fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDUPD'))
|
||
AND ko.mld_opdr_key = s.mld_opdr_key
|
||
AND ko.mld_kenmerk_key = 23
|
||
AND ko.mld_kenmerkopdr_verwijder IS NULL
|
||
AND ko2.mld_opdr_key (+) = s.mld_opdr_key
|
||
AND ko2.mld_kenmerk_key (+) = 30
|
||
AND ko2.mld_kenmerkopdr_verwijder (+) IS NULL
|
||
AND ud.fac_usrdata_key = fac.safe_to_number (ko.mld_kenmerkopdr_waarde)
|
||
AND ud.fac_usrdata_upper <> COALESCE(UPPER(ko2.MLD_KENMERKOPDR_WAARDE), '$MAREON$DUMMY$')
|
||
GROUP BY s.prs_perslid_key,
|
||
s.prs_perslid_apikey,
|
||
s.mld_opdr_key,
|
||
s.ax_company_id,
|
||
s.mld_melding_externnr,
|
||
s.mld_opdr_externnr,
|
||
s.mld_opdr_ordernr;
|
||
|
||
-- MARX#58812: Bijlage vanuit opdrachtNeMer naar opdrachtGeVer
|
||
|
||
-- MARX#61048: Documenten versturen van Mareon naar AX (Stadgenoot)
|
||
-- Kenmerk 28 zijn de bijlagen (folder) van opdrachtnemer (voor communicatie naar opdrachtgever).
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_mogelijk_bijlagen
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
ax_company_id,
|
||
mld_opdr_key,
|
||
mld_opdr_key_fclt,
|
||
mld_opdr_externnr,
|
||
fac_bijlagen_filename
|
||
)
|
||
AS
|
||
SELECT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
m.mld_meldbron_nr,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_id,
|
||
b.fac_bijlagen_filename
|
||
FROM fac_bijlagen b,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco
|
||
WHERE b.fac_bijlagen_aanmaak > (SELECT fac_tracking_datum
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT sync_trackkey_lasttime
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = woco.prs_perslid_key))
|
||
AND b.fac_bijlagen_aanmaak <= (SELECT fac_tracking_datum
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT sync_trackkey_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = woco.prs_perslid_key))
|
||
AND b.fac_bijlagen_kenmerk_key = 28
|
||
AND b.fac_bijlagen_module = 'MLD'
|
||
AND b.fac_bijlagen_verwijder IS NULL
|
||
AND o.mld_opdr_key = b.fac_bijlagen_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
|
||
-- MARX#69956 Notities bij opdrachten naar de opdrachtgever, bijlagen worden via NQ ook meegestuurd, bv naar T365, Facilitor
|
||
-- Maar bijlagen uit notities willen we ook naar AX2012 sturen (AX2009 laten we zitten).
|
||
-- Daarom deze view, die in SYNC wordt gebruikt.
|
||
CREATE OR REPLACE VIEW mar_v_opdr_note_mog_bijlagen
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
ax_company_id,
|
||
mld_opdr_key,
|
||
mld_opdr_key_fclt,
|
||
mld_opdr_externnr,
|
||
mld_opdr_note_key
|
||
)
|
||
AS
|
||
SELECT DISTINCT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
m.mld_meldbron_nr,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_id,
|
||
n.mld_opdr_note_key
|
||
FROM fac_bijlagen b,
|
||
mld_opdr_note n,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco
|
||
WHERE b.fac_bijlagen_aanmaak > (SELECT fac_tracking_datum
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT sync_trackkey_lasttime
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = woco.prs_perslid_key))
|
||
AND b.fac_bijlagen_aanmaak <= (SELECT fac_tracking_datum
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_key = (SELECT sync_trackkey_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = woco.prs_perslid_key))
|
||
AND b.fac_bijlagen_kenmerk_key = -1
|
||
AND b.fac_bijlagen_module = 'ORDN'
|
||
AND b.fac_bijlagen_verwijder IS NULL
|
||
AND n.mld_opdr_note_key = b.fac_bijlagen_refkey
|
||
AND n.mld_opdr_key = o.mld_opdr_key
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push), bijlagen bij opdrachten
|
||
-- Deze lijkt erg veel op mar_v_opdr_mogelijk_bijlagen
|
||
-- Alleen ontbreekt deze view aan de tracking-info om de juiste bijlagen in de sync te verkrijgen
|
||
-- Die info verloopt via de (hoofd)queue zelf, doordat daar de API (=deze view) met de datum van ORDUPD notificatie wordt aangeroepen.
|
||
-- Alle bijlagen die na deze datum zijn geupload (aanmaakdatum_, doen mee als nieuwe bijlage.
|
||
-- Vanwege verwerkingstijd tussen ORDUPD-datum registratie en bijlage aanmaakdatum registratie (kan 1 sec tussen zitten), nemen we een wat ruimere marge van 3 sec.
|
||
|
||
CREATE OR REPLACE VIEW marx_v_bijlagenqueue_order
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
ax_company_id,
|
||
mld_opdr_key,
|
||
mld_opdr_key_fclt,
|
||
mld_opdr_externnr,
|
||
fac_bijlagen_filename,
|
||
fac_bijlagen_aanmaakplus3sec
|
||
)
|
||
AS
|
||
SELECT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
m.mld_meldbron_nr,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_ordernr,
|
||
o.mld_opdr_id,
|
||
b.fac_bijlagen_filename,
|
||
b.fac_bijlagen_aanmaak + 3 / (24 * 60 * 60)
|
||
FROM fac_bijlagen b,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco
|
||
WHERE b.fac_bijlagen_kenmerk_key = 28
|
||
AND b.fac_bijlagen_module = 'MLD'
|
||
AND b.fac_bijlagen_verwijder IS NULL
|
||
AND o.mld_opdr_key = b.fac_bijlagen_refkey
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
|
||
--------------------------------------------------------------------------------------------
|
||
-- MARX51522: Uitbreiding REMS - Mareon: bijlage(foto's) in de opdrachtverstrekking
|
||
|
||
CREATE OR REPLACE VIEW mar_v_opdr_data
|
||
(
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
mld_opdr_key,
|
||
ax_company_id,
|
||
mld_melding_externnr,
|
||
mld_opdr_externnr,
|
||
mld_opdr_ordernr,
|
||
marx_nummer
|
||
)
|
||
AS
|
||
SELECT woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
o.mld_opdr_key,
|
||
m.mld_meldbron_nr,
|
||
m.mld_melding_externnr,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
FROM mld_melding m, mld_opdr o, mar_v_woco_perslid woco
|
||
WHERE m.mld_melding_key = o.mld_melding_key AND m.prs_perslid_key = woco.prs_perslid_key;
|
||
|
||
--------------------------------------------------------------------------------------------
|
||
|
||
-- FSN#34800: Adres in factuuronderwerp naar Tobias is optie, daarom mee in factuur naar AX.
|
||
-- View van meldingen met kenmerken adres(key=2), postcode(key=3), plaats(key=4)
|
||
-- Adres (key 2) is vervangen door 2 flexvelden Straatnaam (key 9) en Huisnr (key 10)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_mldkenmerken
|
||
(
|
||
mld_melding_key,
|
||
adres,
|
||
postcode,
|
||
plaats
|
||
)
|
||
AS
|
||
SELECT m.mld_melding_key,
|
||
km1.mld_kenmerkmelding_waarde || ' ' || km4.mld_kenmerkmelding_waarde,
|
||
km2.mld_kenmerkmelding_waarde,
|
||
km3.mld_kenmerkmelding_waarde
|
||
FROM mld_melding m,
|
||
mld_kenmerkmelding km1,
|
||
mld_kenmerkmelding km2,
|
||
mld_kenmerkmelding km3,
|
||
mld_kenmerkmelding km4
|
||
WHERE m.mld_melding_key = km1.mld_melding_key(+)
|
||
AND km1.mld_kenmerk_key(+) = 9
|
||
AND m.mld_melding_key = km4.mld_melding_key(+)
|
||
AND km4.mld_kenmerk_key(+) = 10
|
||
AND m.mld_melding_key = km2.mld_melding_key(+)
|
||
AND km2.mld_kenmerk_key(+) = 3
|
||
AND m.mld_melding_key = km3.mld_melding_key(+)
|
||
AND km3.mld_kenmerk_key(+) = 4;
|
||
|
||
-- View van bestelopdrachten met kenmerken ionr (key = 6), aflevercode (key=1), afleveradres(key=3), postcode(key=4), plaats(key=5)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_beskenmerken
|
||
(
|
||
bes_bestelopdr_key,
|
||
bes_bestelling_key,
|
||
ionr,
|
||
code,
|
||
adres,
|
||
postcode,
|
||
plaats
|
||
)
|
||
AS
|
||
SELECT bo.bes_bestelopdr_key,
|
||
b.bes_bestelling_key,
|
||
MAX (kb1.bes_kenmerkbestell_waarde),
|
||
MAX (kb2.bes_kenmerkbestell_waarde),
|
||
MAX (kb3.bes_kenmerkbestell_waarde),
|
||
MAX (kb4.bes_kenmerkbestell_waarde),
|
||
MAX (kb5.bes_kenmerkbestell_waarde)
|
||
FROM bes_bestelling b,
|
||
bes_bestelling_item bi,
|
||
bes_bestelopdr_item boi,
|
||
bes_bestelopdr bo,
|
||
bes_kenmerkbestell kb1,
|
||
bes_kenmerkbestell kb2,
|
||
bes_kenmerkbestell kb3,
|
||
bes_kenmerkbestell kb4,
|
||
bes_kenmerkbestell kb5
|
||
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
|
||
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
|
||
AND b.bes_bestelling_key = bi.bes_bestelling_key
|
||
AND b.bes_bestelling_key = kb1.bes_bestelling_key(+)
|
||
AND kb1.bes_kenmerk_key(+) = 6
|
||
AND b.bes_bestelling_key = kb2.bes_bestelling_key(+)
|
||
AND kb2.bes_kenmerk_key(+) = 1
|
||
AND b.bes_bestelling_key = kb3.bes_bestelling_key(+)
|
||
AND kb3.bes_kenmerk_key(+) = 3
|
||
AND b.bes_bestelling_key = kb4.bes_bestelling_key(+)
|
||
AND kb4.bes_kenmerk_key(+) = 4
|
||
AND b.bes_bestelling_key = kb5.bes_bestelling_key(+)
|
||
AND kb5.bes_kenmerk_key(+) = 5
|
||
GROUP BY bo.bes_bestelopdr_key, b.bes_bestelling_key;
|
||
|
||
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- Flexprop bestand met key = 1
|
||
-- View waarin bij de factuur met fin_factuur_key het bijbehorende factuurbestand (PDF) geldt.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_bestand
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_bestand
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 1;
|
||
|
||
-- FIN-Flexprop externe opdrachtnummer (AX nr) met key = 2
|
||
-- View waarin bij de factuur met fin_factuur_key het (voor Facilitor) vreemde opdrachtnummer staat (AX-nr)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_externe_opdnr
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_opdnr
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 2;
|
||
|
||
|
||
-- FIN-Flexprop externe leveranciernummer (AX nr) met key = 3
|
||
-- View waarin bij de factuur met fin_factuur_key het (voor Facilitor) vreemde leverancier staat (AX-nr)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_externe_levnr
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_levnr
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 3;
|
||
|
||
-- FIN-Flexprop IBAN met key = 4
|
||
-- View waarin bij de factuur met fin_factuur_key het (voor Facilitor) 'vreemde' leverancier IBAN staat
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_iban
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_iban
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 4;
|
||
|
||
-- FIN-Flexprop G-IBAN met key = 5
|
||
-- View waarin bij de factuur met fin_factuur_key het (voor Facilitor) 'vreemde' leverancier G-IBAN staat
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_g_iban
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_g_iban
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 5;
|
||
|
||
|
||
-- FIN-Flexprop Factuur-onderwerp met key = 7
|
||
-- View waarin bij de factuur met fin_factuur_key het onderwerp staat.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_onderwerp
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_onderwerp
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 7;
|
||
|
||
-- FIN-Flexprop externe woco-nummer met key = 10
|
||
-- View waarin bij de factuur met fin_factuur_key het (voor Facilitor) vreemde woco-nr (GLN) staat.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_externe_woconr
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_woconr
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 10;
|
||
|
||
-- Flexprop upload-bestand (PDF) met key = 11
|
||
-- View waarin bij de factuur met fin_factuur_key het bijbehorende ge-uploade factuurbestand (PDF) staat vermeld.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_bestand_upload
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_upload_bestand
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 11;
|
||
|
||
-- MARX#39807: FIN-Flexprop met key = 12: KvK nummer
|
||
-- View waarin bij de factuur met fin_factuur_key het KvK nummer is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_kvknr
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_kvknr
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 12;
|
||
|
||
-- MARX#39807: FIN-Flexprop met key = 13: BTW nummer
|
||
-- View waarin bij de factuur met fin_factuur_key het BTW nummer is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_btwnr
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_btwnr
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 13;
|
||
|
||
-- MARX#39807: FIN-Flexprop met key = 14: Afleverdatum in VARCHAR2 in formaat dd-mm-yyyy
|
||
-- View waarin bij de factuur met fin_factuur_key de afleverdatum is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_afleverdatum
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_afleverdatum
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 14;
|
||
|
||
-- MARX#56505: Factuur-koppeling naar Tobias-AX de NAW: Naam
|
||
-- View waarin bij de factuur met fin_factuur_key de naam leverancier is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_naam_lev
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_naam_lev
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 15;
|
||
|
||
-- View waarin bij de factuur met fin_factuur_key het adres van leverancier is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_adres_lev
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_adres_lev
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 16;
|
||
|
||
-- View waarin bij de factuur met fin_factuur_key de postcode van leverancier is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_postcode_lev
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_postcode_lev
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 17;
|
||
|
||
-- View waarin bij de factuur met fin_factuur_key de plaatsnaam van leverancier is meegestuurd
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_plaats_lev
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_plaats_lev
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 18;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_autoincasso
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_autoincasso
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL AND fin_kenmerk_key = 20;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factregel_addit_info
|
||
(
|
||
fin_factuurregel_key,
|
||
fin_factregel_additionele_info
|
||
)
|
||
AS
|
||
SELECT kf.fin_factuurregel_key, kf.fin_kenmerkfactregel_waarde
|
||
FROM fin_kenmerkfactregel kf
|
||
WHERE kf.fin_kenmerkfactregel_verwijder IS NULL AND fin_kenmerk_key = 21;
|
||
|
||
------------------
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_weiger_returncodes (p_import_key IN NUMBER)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
-- De importvelden:
|
||
v_ax_return_code VARCHAR (256);
|
||
v_ax_return_omschr VARCHAR (256);
|
||
v_ax_company_id VARCHAR (256);
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM mar_imp_ax_returncodes;
|
||
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
|
||
-- 01 - Ax return code van de weigertekst
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
1,
|
||
v_ax_return_code);
|
||
|
||
-- 02 - Ax weigertekst
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
2,
|
||
v_ax_return_omschr);
|
||
|
||
|
||
--
|
||
v_aanduiding := '[' || v_ax_return_code || '|' || v_ax_return_omschr || '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_ax_return_code) = 'FAC_USRDATA_CODE' AND UPPER (v_ax_return_omschr) = 'FAC_USRDATA_OMSCHR'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige returncode';
|
||
v_ax_return_code := TRIM (v_ax_return_code);
|
||
|
||
IF (v_ax_return_code IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_ax_return_code) > 40
|
||
THEN
|
||
v_ax_return_code := SUBSTR (v_ax_return_code, 1, 40);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Returncode te lang',
|
||
'Returncode wordt afgebroken tot [' || v_ax_return_code || ']');
|
||
END IF;
|
||
ELSE
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige returncode omschrijving';
|
||
v_ax_return_omschr := TRIM (v_ax_return_omschr);
|
||
|
||
IF (v_ax_return_omschr IS NOT NULL)
|
||
THEN
|
||
IF LENGTH (v_ax_return_omschr) > 60
|
||
THEN
|
||
v_ax_return_omschr := SUBSTR (v_ax_return_omschr, 1, 60);
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
v_aanduiding || 'Meetwaarde te lang',
|
||
'Meetwaarde wordt afgebroken tot [' || v_ax_return_omschr || ']');
|
||
END IF;
|
||
ELSE
|
||
v_ongeldig := 1;
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
BEGIN
|
||
v_errorhint := 'Fout bij toevoegen regel aan importtabel mar_imp_ax_returncodes';
|
||
|
||
INSERT INTO mar_imp_ax_returncodes (ax_return_code, ax_return_omschr)
|
||
VALUES (v_ax_return_code, v_ax_return_omschr);
|
||
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Ingelezen regel kan niet worden weggeschreven!');
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Returncodes: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_import_weiger_returncodes;
|
||
/
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_weiger_returncodes (p_import_key IN NUMBER)
|
||
IS
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
|
||
|
||
v_fac_usrdata_key NUMBER (10);
|
||
|
||
|
||
-- Vaste key voor usertabel 'Returncodes': 2
|
||
c_fac_usrtab_key NUMBER (10);
|
||
|
||
|
||
CURSOR c_ax_codes
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_returncodes k;
|
||
|
||
CURSOR c_ax_codes_2_delete
|
||
IS
|
||
SELECT fac_usrdata_key
|
||
FROM fac_usrdata ud
|
||
WHERE fac_usrtab_key = c_fac_usrtab_key
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_imp_ax_returncodes
|
||
WHERE UPPER (ax_return_code) = ud.fac_usrdata_upper)
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
BEGIN
|
||
c_fac_usrtab_key := 2;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
v_aanduiding := '';
|
||
|
||
-- Alles verwerken...
|
||
FOR c_ax IN c_ax_codes
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_errorhint := 'Fout bij bepalen returncode [' || c_ax.ax_return_code || ']';
|
||
|
||
SELECT MAX (ud.fac_usrdata_key)
|
||
INTO v_fac_usrdata_key
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrdata_upper = UPPER (c_ax.ax_return_code)
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND ud.fac_usrtab_key = c_fac_usrtab_key;
|
||
|
||
IF (v_fac_usrdata_key IS NULL)
|
||
THEN
|
||
v_errorhint := 'Fout bij insert returncode [' || c_ax.ax_return_code || ']';
|
||
|
||
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
VALUES (c_fac_usrtab_key, c_ax.ax_return_code, c_ax.ax_return_omschr);
|
||
ELSE
|
||
v_errorhint := 'Fout bij update returncode [' || c_ax.ax_return_code || ']';
|
||
|
||
UPDATE fac_usrdata
|
||
SET fac_usrdata_omschr = c_ax.ax_return_omschr
|
||
WHERE fac_usrdata_key = v_fac_usrdata_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX Returncodes: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error),
|
||
'');
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX Returncodes: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
|
||
'');
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
v_aanduiding := '';
|
||
|
||
FOR c_ax IN c_ax_codes_2_delete
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
v_errorhint := 'Fout bij delete (verwijderdatum) waarde in eigen tabel [' || c_ax.fac_usrdata_key || ']';
|
||
|
||
UPDATE fac_usrdata
|
||
SET fac_usrdata_verwijder = SYSDATE
|
||
WHERE fac_usrdata_key = c_ax.fac_usrdata_key;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'S',
|
||
'AX Returncodes verwijderen: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error),
|
||
'');
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX Returncodes verwijderen: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
|
||
'');
|
||
COMMIT;
|
||
END mar_update_weiger_returncodes;
|
||
/
|
||
|
||
|
||
|
||
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
-- MARX#81443 Digitaal "Account/licentie" mutatieformulier in Mareon
|
||
|
||
CREATE OR REPLACE VIEW marx_v_accounts_staffel (marx_v_accounts_staffel_key, marx_v_accounts_staffel_omschr, marx_v_accounts_staffel_aantal, marx_v_accounts_staffel_kosten)
|
||
AS
|
||
SELECT fac_usrdata_key, fac_usrdata_code || ': ' || fac_usrdata_omschr || ' (EUR. ' || fac_usrdata_prijs || ' excl. BTW per kwartaal)', fac_usrdata_volgnr, fac_usrdata_prijs
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 10
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW marx_v_aantalaccounts_woco
|
||
AS
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
accounts_ingebruik_no_apikey,
|
||
accounts_ingebruik_with_apikey,
|
||
accounts_ingebruik_no_apikey + accounts_ingebruik_with_apikey totaal_aantal_accounts,
|
||
accounts_ingebruik_no_apikey + 0 aantal_accounts_inuse,
|
||
accounts_geregistreerd,
|
||
COALESCE(accounts_geregistreerd , '1')- accounts_ingebruik_no_apikey aantal_accounts_beschikbaar,
|
||
account_registratiedatum,
|
||
(SELECT marx_v_accounts_staffel_kosten FROM marx_v_accounts_staffel WHERE marx_v_accounts_staffel_aantal = accounts_geregistreerd) account_kosten_per_kwartaal
|
||
FROM
|
||
(
|
||
SELECT b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
( SELECT count(*)
|
||
FROM mar_v_woco_perslid p
|
||
WHERE p.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND p.prs_perslid_apikey IS NULL -- Hoofdaccounts met APIkey (tech reden) sluiten we uit, rekenen we niet mee.
|
||
)
|
||
accounts_ingebruik_no_apikey,
|
||
( SELECT count(*)
|
||
FROM mar_v_woco_perslid p
|
||
WHERE p.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND p.prs_perslid_apikey IS NOT NULL -- Hoofdaccounts met APIkey (tech reden) sluiten we uit, rekenen we niet mee.
|
||
)
|
||
accounts_ingebruik_with_apikey,
|
||
( select prs_kenmerklink_waarde
|
||
from prs_kenmerklink
|
||
where prs_kenmerk_key = 56
|
||
and prs_link_key = b.prs_bedrijf_key
|
||
and prs_kenmerklink_niveau = 'B'
|
||
and prs_kenmerklink_verwijder is null
|
||
)
|
||
accounts_geregistreerd,
|
||
(select prs_kenmerklink_aanmaak from prs_kenmerklink
|
||
where prs_kenmerk_key = 56
|
||
and prs_link_key = b.prs_bedrijf_key
|
||
and prs_kenmerklink_niveau = 'B'
|
||
and prs_kenmerklink_verwijder is null
|
||
)
|
||
account_registratiedatum
|
||
FROM mar_v_opdrachtgevers b
|
||
)
|
||
WHERE accounts_ingebruik_no_apikey >= 1
|
||
AND accounts_ingebruik_with_apikey > 0;
|
||
|
||
|
||
CREATE OR REPLACE VIEW marx_v_aantalaccounts_lev
|
||
AS
|
||
SELECT prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
accounts_ingebruik_no_apikey,
|
||
accounts_ingebruik_with_apikey,
|
||
accounts_ingebruik_no_apikey + accounts_ingebruik_with_apikey totaal_aantal_accounts,
|
||
accounts_ingebruik_no_apikey + 1 aantal_accounts_inuse,
|
||
accounts_geregistreerd,
|
||
COALESCE(accounts_geregistreerd , '3')- accounts_ingebruik_no_apikey - 1 aantal_accounts_beschikbaar,
|
||
account_registratiedatum,
|
||
(SELECT marx_v_accounts_staffel_kosten FROM marx_v_accounts_staffel WHERE marx_v_accounts_staffel_aantal = accounts_geregistreerd) account_kosten_per_kwartaal
|
||
FROM
|
||
(
|
||
SELECT b.prs_bedrijf_naam,
|
||
b.prs_bedrijf_key,
|
||
( SELECT count(*)
|
||
FROM prs_contactpersoon cp, prs_perslid p
|
||
WHERE cp.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND cp.prs_perslid_key IS NOT NULL
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND p.prs_perslid_apikey IS NULL -- Hoofdaccounts met APIkey die ook gedeeld KUNNEN worden bij meerdere bedrijven (tech reden) sluiten we maar even uit.
|
||
)
|
||
accounts_ingebruik_no_apikey,
|
||
( SELECT count(*)
|
||
FROM prs_contactpersoon cp, prs_perslid p
|
||
WHERE cp.prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND cp.prs_perslid_key IS NOT NULL
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND p.prs_perslid_apikey IS NOT NULL -- Alleen de hoofdaccounts met APIkey
|
||
)
|
||
accounts_ingebruik_with_apikey,
|
||
( select prs_kenmerklink_waarde
|
||
from prs_kenmerklink
|
||
where prs_kenmerk_key = 56
|
||
and prs_link_key = b.prs_bedrijf_key
|
||
and prs_kenmerklink_niveau = 'B'
|
||
and prs_kenmerklink_verwijder is null
|
||
)
|
||
accounts_geregistreerd,
|
||
(select prs_kenmerklink_aanmaak from prs_kenmerklink
|
||
where prs_kenmerk_key = 56
|
||
and prs_link_key = b.prs_bedrijf_key
|
||
and prs_kenmerklink_niveau = 'B'
|
||
and prs_kenmerklink_verwijder is null
|
||
)
|
||
account_registratiedatum
|
||
FROM prs_bedrijf b
|
||
WHERE b.prs_bedrijf_intern IS NULL
|
||
AND b.prs_bedrijf_verwijder IS NULL
|
||
);
|
||
|
||
CREATE OR REPLACE VIEW marx_v_rap_licentiekosten
|
||
AS
|
||
SELECT 'Opdrachtgever' prs_bedrijf_type,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
accounts_ingebruik_no_apikey,
|
||
accounts_ingebruik_with_apikey,
|
||
totaal_aantal_accounts,
|
||
aantal_accounts_inuse,
|
||
accounts_geregistreerd,
|
||
aantal_accounts_beschikbaar,
|
||
account_registratiedatum,
|
||
account_kosten_per_kwartaal
|
||
FROM marx_v_aantalaccounts_woco
|
||
UNION ALL
|
||
SELECT 'Opdrachtnemer' prs_bedrijf_type,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
accounts_ingebruik_no_apikey,
|
||
accounts_ingebruik_with_apikey,
|
||
totaal_aantal_accounts,
|
||
aantal_accounts_inuse,
|
||
accounts_geregistreerd,
|
||
aantal_accounts_beschikbaar,
|
||
account_registratiedatum,
|
||
account_kosten_per_kwartaal
|
||
FROM marx_v_aantalaccounts_lev;
|
||
|
||
|
||
-- MARX#87350 Premium uitbreiding in Mareon door leverancier zelf te regelen
|
||
-- VIEW van alle opdrachtgevers die deze leverancier (of een vestiging) heeft.
|
||
CREATE OR REPLACE VIEW marx_v_mijn_opdrachtgevers
|
||
AS
|
||
SELECT * FROM mar_v_woco_x_lev, prs_bedrijf woco
|
||
WHERE l_prs_perslid_key = TO_NUMBER(sys_context('USERENV', 'CLIENT_IDENTIFIER'))
|
||
AND woco.prs_bedrijf_key = w_prs_bedrijf_key;
|
||
|
||
-- Levert van een Premium(!) leverancier alle actieve (dwz met actieve SYNC!) Opdrachtgevers met een GLN(!) op waarmee deze leverancier nog geen Premium is (en volgens prs_bedrij_bedrijf dat wel zou kunnen worden).
|
||
CREATE OR REPLACE VIEW marx_v_mijn_OPG_geen_Premium
|
||
(prs_bedrijf_bedrijf_key, w_l_prs_bedrijf_omschr, w_prs_perslid_key, l_prs_bedrijf_key, mijn_OPG_Premium_datum)
|
||
AS
|
||
SELECT prs_bedrijf_bedrijf_key, w_prs_bedrijf_naam || ' (' || l_prs_bedrijf_naam || ')' , w_prs_perslid_key, l_prs_bedrijf_key,
|
||
DECODE(prs_bedrijf_bedrijf_status, 1 ,SYSDATE-1, NULL)
|
||
FROM marx_v_mijn_opdrachtgevers mo
|
||
WHERE mo.prs_leverancier_nr IS NOT NULL
|
||
AND EXISTS (SELECT 'x' FROM mar_v_bedrijf_premium bp WHERE bp.prs_bedrijf_key = mo.l_prs_bedrijf_key AND bp.prs_bedrijf_premium_start IS NOT NULL)
|
||
AND EXISTS (SELECT 'y' FROM mar_v_sync_ax_lasttime s WHERE s.prs_perslid_key = mo.w_prs_perslid_key AND sync_date_lasttime >= SYSDATE - 10);
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_mld_melding_save (p_mld_melding_key IN NUMBER)
|
||
IS
|
||
v_mld_stdmelding_key NUMBER(10);
|
||
v_prs_perslid_key NUMBER(10);
|
||
v_prs_bedrijf_bedrijf_key NUMBER(10);
|
||
v_woco_bedrijf_key NUMBER(10);
|
||
v_woco_prs_bedrijf_naam VARCHAR2(255);
|
||
v_lev_bedrijf_key NUMBER(10);
|
||
v_lev_prs_bedrijf_naam VARCHAR2(255);
|
||
v_max_accounts NUMBER(10);
|
||
v_aant_account_inuse NUMBER(10);
|
||
v_aant_account_geregistreerd NUMBER(10);
|
||
v_mag_accounts_aanpassen NUMBER(1);
|
||
v_mld_melding_opmerking VARCHAR2(1000);
|
||
v_prs_bedrijf_naam VARCHAR2(255);
|
||
BEGIN
|
||
|
||
SELECT mld_stdmelding_key
|
||
INTO v_mld_stdmelding_key
|
||
FROM mld_melding m
|
||
WHERE m.mld_melding_key = p_mld_melding_key;
|
||
|
||
IF v_mld_stdmelding_key = 2
|
||
THEN
|
||
-- Standaard melding 'Licentie/account mutatieformulier'
|
||
-- Dan gaan we nog een POST-actie doen: update van aantal accounts van betreffende bedrijf...
|
||
|
||
SELECT m.prs_perslid_key, acc.marx_v_accounts_staffel_aantal
|
||
INTO v_prs_perslid_key, v_max_accounts
|
||
FROM mld_melding m, mld_kenmerkmelding km, marx_v_accounts_staffel acc
|
||
WHERE m.mld_melding_key = p_mld_melding_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND km.mld_kenmerk_key = 49
|
||
AND fac.safe_to_number(km.mld_kenmerkmelding_waarde) = acc.marx_v_accounts_staffel_key;
|
||
|
||
-- Is het de opdrachtgever die accounts aanvraagt?
|
||
SELECT MAX(prs_bedrijf_key)
|
||
INTO v_woco_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
v_mag_accounts_aanpassen := 0;
|
||
IF v_woco_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- WOCO Bedrijf is gevonden
|
||
-- Eerst nog check of gekozen/gewenste max. accounts niet lager is dan het aantal actieve gebruikers bij de WOCO nu, dat mag niet!
|
||
SELECT MAX(aantal_accounts_inuse), MAX(accounts_geregistreerd)
|
||
INTO v_aant_account_inuse, v_aant_account_geregistreerd
|
||
FROM marx_v_aantalaccounts_woco
|
||
WHERE prs_bedrijf_key = v_woco_bedrijf_key;
|
||
|
||
IF v_max_accounts >= v_aant_account_inuse
|
||
THEN
|
||
v_mag_accounts_aanpassen := 1;
|
||
END IF;
|
||
ELSE
|
||
-- Woco niet gevonden, dan kan het nog de leverancier LEV zijn...
|
||
|
||
-- Omdat de v_prs_perslid_key vaker bij een andere leverancier (bij contactpersoon) kan zijn geregsitreerd, mn (of in marx uitsluitend) als die apikey heeft (tbv shared views),
|
||
-- zijn we op zoek naar de contactpersoon die het eerste bij v_prs_perslid_key is aangemaakt (origineel), vandaar MIN:
|
||
|
||
SELECT MAX(cp.prs_bedrijf_key)
|
||
INTO v_lev_bedrijf_key
|
||
FROM prs_contactpersoon cp
|
||
WHERE cp.prs_contactpersoon_key = ( SELECT MIN(cp2.prs_contactpersoon_key)
|
||
FROM prs_contactpersoon cp2
|
||
WHERE cp2.prs_perslid_key = v_prs_perslid_key
|
||
AND cp2.prs_contactpersoon_verwijder IS NULL
|
||
);
|
||
|
||
IF v_lev_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- LEV Bedrijf is gevonden
|
||
-- Eerst nog check of gekozen/gewenste max. accounts niet lager is dan het aantal actieve gebruikers bij de LEV nu, dat mag niet!
|
||
SELECT MAX(aantal_accounts_inuse), MAX(accounts_geregistreerd)
|
||
INTO v_aant_account_inuse, v_aant_account_geregistreerd
|
||
FROM marx_v_aantalaccounts_lev
|
||
WHERE prs_bedrijf_key = v_lev_bedrijf_key;
|
||
|
||
IF v_max_accounts >= v_aant_account_inuse
|
||
THEN
|
||
v_mag_accounts_aanpassen := 1;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_woco_bedrijf_key IS NOT NULL OR v_lev_bedrijf_key IS NOT NULL
|
||
THEN
|
||
IF v_mag_accounts_aanpassen = 1
|
||
THEN
|
||
|
||
SELECT prs_bedrijf_naam
|
||
INTO v_prs_bedrijf_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = COALESCE(v_woco_bedrijf_key, v_lev_bedrijf_key);
|
||
|
||
prs.upsertkenmerk (56, COALESCE(v_woco_bedrijf_key, v_lev_bedrijf_key), v_max_accounts);
|
||
fac.trackaction ('#PRSUPB',COALESCE(v_woco_bedrijf_key, v_lev_bedrijf_key), NULL, NULL, 'Aantal licenties/accounts aangepast van ' || COALESCE(v_aant_account_geregistreerd, 0) || ' naar ' || v_max_accounts || ' a.g.v. melding ' || p_mld_melding_key);
|
||
|
||
-- We gaan de melding direct afsluiten/afmelden
|
||
IF v_woco_bedrijf_key IS NOT NULL
|
||
THEN
|
||
v_mld_melding_opmerking := 'Uw melding is afgehandeld - het aantal accounts is voor bedrijf ' || v_prs_bedrijf_naam || ' aangepast naar het maximum van: ' || v_max_accounts || '. Mail Mareon Helpdesk de gebruikersnamen/mailadressen voor de nieuwe accounts door, u krijgt na verwerking ervan een bevestigingsberichtje terug.';
|
||
END IF;
|
||
IF v_lev_bedrijf_key IS NOT NULL
|
||
THEN
|
||
v_mld_melding_opmerking := 'Uw melding is afgehandeld - het aantal accounts is voor bedrijf ' || v_prs_bedrijf_naam || ' aangepast naar het maximum van: ' || v_max_accounts || '.';
|
||
END IF;
|
||
ELSE
|
||
-- We gaan de melding direct afsluiten/afmelden, ook als het aantal niet kan/mag worden aangepast.
|
||
v_mld_melding_opmerking := 'Uw melding is afgehandeld - bedrijf ' || v_prs_bedrijf_naam || ' heeft op dit moment te veel accounts in gebruik (aantal = ' || v_aant_account_inuse || '): het aantal accounts kan daarom niet worden aangepast naar maximum aantal van ' || v_max_accounts || '.';
|
||
END IF;
|
||
ELSE
|
||
-- We gaan de melding direct afsluiten/afmelden, ook als er geen bedrijf kan worden gevonden (wat eigenlijk niet kan)
|
||
v_mld_melding_opmerking := 'Uw melding is afgehandeld - bedrijf is niet gevonden, daardoor kan het aantal accounts niet aangepast worden.';
|
||
END IF;
|
||
UPDATE mld_melding
|
||
SET mld_melding_opmerking = v_mld_melding_opmerking,
|
||
mld_melding_status = 5
|
||
WHERE mld_melding_key = p_mld_melding_key;
|
||
fac.trackaction ('MLDAFM', p_mld_melding_key, 4, NULL, 'Uw melding is gereed gemeld');
|
||
END IF;
|
||
IF v_mld_stdmelding_key = 3
|
||
THEN
|
||
-- MARX#87350 Premium uitbreiding in Mareon door leverancier zelf te regelen
|
||
-- Standaard melding 'Uitbreiden Premium met opdrachtgever'
|
||
-- Dan gaan we nog een POST-actie doen: update PRS_BEDRIJF_BEDRIJF
|
||
|
||
SELECT fac.safe_to_number(km.mld_kenmerkmelding_waarde)
|
||
INTO v_prs_bedrijf_bedrijf_key
|
||
FROM mld_melding m, mld_kenmerkmelding km
|
||
WHERE m.mld_melding_key = p_mld_melding_key
|
||
AND km.mld_melding_key = m.mld_melding_key
|
||
AND km.mld_kenmerk_key = 68;
|
||
|
||
SELECT woco.prs_bedrijf_key, woco.prs_bedrijf_naam, lev.prs_bedrijf_key, lev.prs_bedrijf_naam
|
||
INTO v_woco_bedrijf_key, v_woco_prs_bedrijf_naam, v_lev_bedrijf_key, v_lev_prs_bedrijf_naam
|
||
FROM prs_bedrijf_bedrijf, prs_bedrijf woco, prs_bedrijf lev
|
||
WHERE prs_bedrijf_bedrijf_key = v_prs_bedrijf_bedrijf_key
|
||
AND woco.prs_bedrijf_key = prs_bedrijf_key1
|
||
AND lev.prs_bedrijf_key = prs_bedrijf_key2;
|
||
|
||
UPDATE prs_bedrijf_bedrijf
|
||
SET prs_bedrijf_bedrijf_status = 1,
|
||
prs_bedrijf_bedrijf_startdatum = TRUNC(SYSDATE),
|
||
prs_bedrijf_bedrijf_fee2 = (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrtab_key = 1 AND fac_usrdata_key = 31)
|
||
WHERE prs_bedrijf_bedrijf_key = v_prs_bedrijf_bedrijf_key;
|
||
|
||
fac.trackaction ('#PRSUPB',v_lev_bedrijf_key, NULL, NULL, 'Het Premium abonnement voor ' || v_lev_prs_bedrijf_naam || ' is uitgebreid met opdrachtgever ' || v_woco_prs_bedrijf_naam || ' a.g.v. melding ' || p_mld_melding_key);
|
||
v_mld_melding_opmerking := 'Uw melding is afgehandeld - het Premium abonnement voor ' || v_lev_prs_bedrijf_naam || ' is uitgebreid met opdrachtgever ' || v_woco_prs_bedrijf_naam || '.';
|
||
UPDATE mld_melding
|
||
SET mld_melding_opmerking = v_mld_melding_opmerking,
|
||
mld_melding_status = 5
|
||
WHERE mld_melding_key = p_mld_melding_key;
|
||
fac.trackaction ('MLDAFM', p_mld_melding_key, 4, NULL, 'Uw melding is gereed gemeld');
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- Webservice 7. View tbv webservice voor Leverancier (SIDB-facturen)
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_fin_factuur_sidb (p_import_key IN NUMBER)
|
||
AS
|
||
v_seq_of_columns VARCHAR (255);
|
||
BEGIN
|
||
-- In de XSL: woconr(1);leveranciernr(2);factuurnr(3);factuurdatum(4);factuuronderwerp(5);opdrachtnr(6);omschrijving(7);bedrag(8);btwperc(9);btwbedrag(10);btw_verlegd(11);document(12);IBAN(13);G_IBAN(14);G_bedrag(15);kvk_nr(16);btw_nr(17);afleverdatum(18)
|
||
-- LET OP: de kenmerken 1 en 2 worden al gebruikt voor opdrachtnummer (IONRxxxx) en leveranciernr (GLN) in geval dat referentienummer niet in Facilitor kan worden gevonden.
|
||
-- Daarom voor het 1e kenmerk 'IBAN' deze in kenmerk 3 zetten!
|
||
-- Kenmerk 1: kopie van het oorspronkelijke opdrachtnummer (ordernr), indien ordernr namelijk niet wordt gevonden in import, dan hebben we nog het origineel
|
||
-- Kenmerk 2: kopie van het oorspronkelijke leveranciernr, indien ordernr namelijk niet wordt gevonden in import, dan hebben we nog het origineel (anders is lev via MARnr te bepalen).
|
||
-- Kenmerk 4 en 5 zijn voor resp. G-rekening en G-bedrag.
|
||
-- Kenmerk 6 (vanaf 5.4.4) is het onderwerp van de factuur
|
||
-- Kenmerk 7 (vanaf mareon.nl) is het GLN van de woco. Uniek is OF 1)MARnr + GLN lev OF 2) TOBIASnr + GLN woco + GLN lev
|
||
|
||
--hulp voor pos : '1;2;3;4;05;06;7;8;9;10;1;12;3;4;15;6;7;18;19;20;1;2;3;24;25;26;27;28;29;30;31;32;33;34;5;36;37;38;39;40'
|
||
v_seq_of_columns := '2;3;4;6;19;18;7;0;8;10;9;12;0;0;11;6;2;13;14;15;0;5;1;16;17;20;25;26;27;28;30;31;32;33;0;29;22;23;24;21';
|
||
|
||
|
||
-- Variabelelijst
|
||
-- v_leveranciernr: 1
|
||
-- v_factuurnr: 2 (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
|
||
-- v_factuurdatum: 3
|
||
-- v_ordernr: 4 (VERPLICHT, anders is status van factuur "Incompleet")
|
||
-- v_locatie: 5 (MARX#53540: Ontblobben facturatie in Mareon verwerken) --> nr 19
|
||
-- v_afleverdatum: 6 (MARX#39807 - Hidden Afleverdatum)
|
||
-- v_omschrijving: 7
|
||
-- v_aantal: 8
|
||
-- v_kostprijs: 9 (VERPLICHT, anders is status van factuur "Incompleet")
|
||
-- v_btw_bedrag: 10 (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
|
||
-- v_btw: 11 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
|
||
-- v_docid: 12
|
||
-- v_debiteur_nr: 13
|
||
-- v_opmerking: 14
|
||
-- v_btw_verlegd: 15 (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
|
||
-- v_kenmerk1: 16 (kopie van ordernr indien refnr niet bestaat, dus b.v. het AX opdrachtnummer: IONRxxxx)
|
||
-- v_kenmerk2: 17 (kopie van GLN Leverancier(snummer) indien refnr niet bestaat.
|
||
-- v_kenmerk3: 18 (IBAN)
|
||
-- v_kenmerk4: 19 (G-IBAN - geblokkeerde rekening)
|
||
-- v_kenmerk5: 20 (G-Amount - bedrag geblokeerde rekening)
|
||
-- v_boekmaand: 21
|
||
-- v_kenmerk6: 22 (Factuuronderwerp)
|
||
-- v_kenmerk7: 23 (GLN Woco(nummer))
|
||
-- v_kenmerk8: 24 (MARX#39807 - Hidden KvK nummer)
|
||
-- v_kenmerk9: 25 (MARX#39807 - Hidden BTW nummer)
|
||
-- v_kenmerk10: 26 (MARX#53540: Ontblobben facturatie in Mareon verwerken: Kostensoort) --> nr 20
|
||
-- v_kenmerk11: 27 (MARX#56505: Factuur-koppeling naar Tobias-AX de NAW: Naam van leverancier)
|
||
-- v_kenmerk12: 28 (MARX#56505: Factuur-koppeling naar Tobias-AX de NAW: Adres van leverancier)
|
||
-- Uitbreiding, vanaf Facilitor 2018.2 zijn deze kolommen ook mogelijk!
|
||
-- v_kenmerk13: 29 (MARX#56505: Factuur-koppeling naar Tobias-AX de NAW: Postcode van leverancier)
|
||
-- v_kenmerk14: 30 (MARX#56505: Factuur-koppeling naar Tobias-AX de NAW: Plaats van leverancier)
|
||
-- v_kenmerk15: 31 (MARX#58510: Het gegeven "Automatische incasso" toevoegen bij de factuur) --> nr 30
|
||
-- v_kenmerk16: 32 (MARX#57670: Koppeling facturen vanuit Salesforce naar Tobias AX) --> nr 31
|
||
-- v_kenmerk17: 33 (MARX#75028 Mareon Facturen: Opnemen betalingskenmerk) --> 32
|
||
-- v_kenmerk18: 34 (MARX#78867 Mareon Factuur - Herkenning bedrijven zodat 1 mailadres nodig is)
|
||
-- v_kenmerk19: 35 (MARX#73756: Notjob "uitvalmail naar woco" gaat fout bij facturen die aan opdr zijn geknoopt:
|
||
-- Bij E-invoicing+Factuurscanning de contractkey als factuur wordt verlegd van contract (cnt_contract_key) naar (mld)opdracht mld_opdr_key, anders mist uitvalmail naar woco.
|
||
-- v_kenmerk20: 36 (MARX#57931: Abonnement Mareon Factuurverwerking (UBL/SALES/PDF), onzichtbaar flexprop bij factuur die aangeeft of via abonnement Mareon Factuurverwerking loopt) --> nr 29
|
||
-- v_artikelcode: 37 (MARX#53540: Ontblobben facturatie in Mareon verwerken) --> nr 22
|
||
-- v_factuurregelaantal: 38 (MARX#53540: Ontblobben facturatie in Mareon verwerken) --> nr 23
|
||
-- v_eenheid: 39 (MARX#53540: Ontblobben facturatie in Mareon verwerken) --> nr 24
|
||
-- v_opdrachtregelid: 40 (MARX#53540: Ontblobben facturatie in Mareon verwerken) --> nr 21
|
||
fac_import_factuur_body (p_import_key, v_seq_of_columns);
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Check: Heeft de leverancier inderdaad de p_broc die hij 'claimt' (op de factuur vermeld)?
|
||
-- Input:
|
||
-- p_broc_nr (opdracht (MAR)-nummer)
|
||
-- prs_perslid_key (als contactpersoon van externe prs_bedrijf, de leverancier dus)
|
||
-- p_check_premium (0 of 1, 0 is niet checken, 1 is wel checken), nav MARX#55044: PDF Scanning in the cloud
|
||
-- NB: woco is niet interessant, die volgt uit p_broc_nr, en is hier DON't CARE (negeren we dus)
|
||
|
||
-- Als uitvoerende inderdaad opdracht met p_broc_nr heeft (MAR-nr), dan valide en niets doen.
|
||
-- Zo niet, dus bij een invalide MAR-nr (van andere uitvoerende, of het is een IO-nr, of een geheel ander order-nr), dan ordernummer leeg maken (staat alsnog in kenmerk 1, deze is straks nodig voor de 2e poging).
|
||
-- Output:
|
||
-- p_broc_key (= mld_opdr_key)
|
||
|
||
CREATE OR REPLACE FUNCTION check_mareon_nr_is_oke (p_broc_nr IN VARCHAR2, p_prs_perslid_key IN NUMBER, p_check_premium IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
p_broc_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
v_do_send_opdr NUMBER (10);
|
||
|
||
l_ins_srtdiscipline_prefix VARCHAR2(10);
|
||
l_slash VARCHAR2(1);
|
||
l_melding_key NUMBER(10);
|
||
l_mld_opdr_bedrijfopdr_volgnr NUMBER(10);
|
||
|
||
BEGIN
|
||
p_broc_key := NULL;
|
||
|
||
l_ins_srtdiscipline_prefix := 'MAR';
|
||
l_slash := '/';
|
||
|
||
BEGIN
|
||
IF (UPPER (SUBSTR (p_broc_nr, 1, 3)) = l_ins_srtdiscipline_prefix)
|
||
THEN
|
||
l_melding_key := fac.safe_to_number(SUBSTR(p_broc_nr,4,INSTR(p_broc_nr ,l_slash)-4));
|
||
l_mld_opdr_bedrijfopdr_volgnr := fac.safe_to_number(SUBSTR(p_broc_nr, INSTR(p_broc_nr ,l_slash)+1));
|
||
|
||
-- We hebben van doen met een mld_opdr
|
||
--Interne opdrachtnummer 'p_broc_nr' die leverancier heeft toegekend.`
|
||
-- Query overgenomen uit fin.inc (funtie analysereferentie)
|
||
|
||
SELECT o.mld_opdr_key, wp.prs_bedrijf_key, o.mld_uitvoerende_keys
|
||
INTO p_broc_key, v_woco_prs_bedrijf_key, v_lev_prs_bedrijf_key
|
||
FROM mld_opdr o,
|
||
mld_typeopdr mto,
|
||
mar_v_leverancier_api_perslid lp,
|
||
mar_v_woco_perslid wp,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd
|
||
WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key
|
||
AND mto.mld_typeopdr_kosten = 1
|
||
AND o.mld_statusopdr_key NOT IN (1,
|
||
2,
|
||
3,
|
||
10)
|
||
AND o.mld_uitvoerende_keys = lp.prs_bedrijf_key
|
||
AND lp.prs_perslid_key = p_prs_perslid_key
|
||
AND o.prs_perslid_key = wp.prs_perslid_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND o.mld_opdr_bedrijfopdr_volgnr = l_mld_opdr_bedrijfopdr_volgnr
|
||
AND m.mld_melding_key = l_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND sd.ins_srtdiscipline_prefix = l_ins_srtdiscipline_prefix;
|
||
|
||
-- MARX#55044: PDF Scanning in the cloud
|
||
IF p_check_premium = 1
|
||
THEN
|
||
-- MARX#39902: Ophalen van code of deze leverancier de factuur naar de woco wel mag sturen: oftewel staat premium voor deze woco wel aan?
|
||
SELECT COALESCE (MAX (prs_bedrijf_bedrijf_status), 0)
|
||
INTO v_do_send_opdr
|
||
FROM mar_v_woco_x_lev
|
||
WHERE w_prs_bedrijf_key = v_woco_prs_bedrijf_key AND l_prs_bedrijf_key = v_lev_prs_bedrijf_key;
|
||
|
||
IF v_do_send_opdr = 0
|
||
THEN
|
||
-- Opdracht hoort wel bij deze leverancier, maar heeft voor opdrachtgever de setting v_do_send_opdr gelijk aan 0,
|
||
-- dus is niet premium voor deze woco, op deze opdracht mag geen factuur op gestuurd worden ...
|
||
p_broc_key := NULL;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- We hebben van doen met bes_bestelopdr?
|
||
SELECT bo.bes_bestelopdr_key
|
||
INTO p_broc_key
|
||
FROM bes_bestelopdr bo, mar_v_leverancier_api_perslid lp
|
||
WHERE bo.bes_bestelopdr_status NOT IN (1, 3, 8) -- Dat zijn echte bestellingen
|
||
AND bo.bes_bestelopdr_status <> 2 -- Added by MB: status nieuw is ook nog niet bij leverancier, kan derhalve ook geen factuur op geboekt worden (toch?)
|
||
AND lp.prs_perslid_key = p_prs_perslid_key
|
||
AND bo.prs_bedrijf_key = lp.prs_bedrijf_key
|
||
AND bo.bes_bestelopdr_id = p_broc_nr;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_broc_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_broc_key := NULL;
|
||
END;
|
||
|
||
RETURN p_broc_key;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#68872 Factuur op bestelopdracht ook ION uit AX toestaan
|
||
-- Wanneer een de relatie een leverancier (L) betreft, dus bestellingen (voorraadmodule), dan mag deze ook een ION nummer sturen
|
||
-- Maw het hoeft niet perse mareon bestelnummer 1234/1 te zijn.
|
||
-- In deze functie checken we of dit ion wel geldig is in de combinatie WOCO x LEV.
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION check_io_nr_is_bestelling (p_inkooporder_nr IN VARCHAR2,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_prs_perslid_key_opdrgever IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
p_broc_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
BEGIN
|
||
p_broc_key := NULL;
|
||
|
||
BEGIN
|
||
-- Mogelijk hebben we van doen met een bes_bestelopdr waarvan de leverancier het IONR meestuurt
|
||
|
||
SELECT DISTINCT bo.bes_bestelopdr_key
|
||
INTO p_broc_key
|
||
FROM bes_bestelling b, bes_kenmerkbestell k, bes_bestelling_item bi, bes_bestelopdr bo, bes_bestelopdr_item boi,
|
||
mar_v_woco_perslid woco, mar_v_leverancier_api_perslid lp
|
||
WHERE bo.prs_perslid_key = p_prs_perslid_key_opdrgever -- woco-perslid-api
|
||
AND bo.bes_bestelopdr_status NOT IN (1, 3, 8) -- Dat zijn echte bestellingen
|
||
AND bo.bes_bestelopdr_status <> 2 -- Added by MB: status nieuw is ook nog niet bij leverancier, kan derhalve ook geen factuur op geboekt worden (toch?)
|
||
AND bo.prs_bedrijf_key = lp.prs_bedrijf_key -- lev bedrijf
|
||
AND lp.prs_perslid_key = p_prs_perslid_key -- lev api-user
|
||
AND bi.BES_BESTELLING_KEY = b.BES_BESTELLING_KEY
|
||
and bi.BES_BESTELOPDR_ITEM_KEY = boi.BES_BESTELOPDR_ITEM_KEY
|
||
and bo.BES_BESTELOPDR_KEY = boi.BES_BESTELOPDR_KEY
|
||
AND b.bes_bestelling_key = k.bes_bestelling_key
|
||
AND k.bes_kenmerkbestell_waarde = p_inkooporder_nr
|
||
AND k.bes_kenmerk_key = 6;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_broc_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_broc_key := NULL;
|
||
END;
|
||
|
||
RETURN p_broc_key;
|
||
END;
|
||
/
|
||
|
||
-- MARX#55044: PDF Scanning in the cloud
|
||
-- Check: Heeft de leverancier inderdaad de p_broc die hij 'claimt' (op de factuur vermeld)?
|
||
-- Input:
|
||
-- p_inkooporder_nr (opdrachtnummer vanuit systeem opdrachtgever, e.g. IO-nummer)
|
||
-- prs_perslid_key (als contactpersoon van externe prs_bedrijf, de leverancier dus)
|
||
-- p_prs_perslid_key_opdrgever (key van de persoon van de opdrachtgever)
|
||
-- Output:
|
||
-- p_broc_key (= mld_opdr_key)
|
||
|
||
CREATE OR REPLACE FUNCTION check_io_nr_is_oke (p_inkooporder_nr IN VARCHAR2,
|
||
p_prs_perslid_key IN NUMBER,
|
||
p_prs_perslid_key_opdrgever IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
p_broc_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
BEGIN
|
||
p_broc_key := NULL;
|
||
|
||
BEGIN
|
||
-- Mogelijk hebben we van doen met een mld_opdr
|
||
-- Op basis van een IO-nr van de originele opdracht vanuit de opdrachtgever
|
||
-- NB: Query overgenomen check_mareon_nr_is_oke
|
||
|
||
SELECT o.mld_opdr_key, wp.prs_bedrijf_key, o.mld_uitvoerende_keys
|
||
INTO p_broc_key, v_woco_prs_bedrijf_key, v_lev_prs_bedrijf_key
|
||
FROM mld_opdr o,
|
||
mld_typeopdr mto,
|
||
mar_v_woco_perslid wp,
|
||
mar_v_woco_x_contractant wc
|
||
WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key
|
||
AND mto.mld_typeopdr_kosten = 1
|
||
AND o.mld_statusopdr_key NOT IN (1,
|
||
2,
|
||
3,
|
||
10)
|
||
AND o.mld_uitvoerende_keys = wc.l_prs_bedrijf_key
|
||
AND wc.l_prs_perslid_key = p_prs_perslid_key
|
||
AND wc.w_prs_bedrijf_key = wp.prs_bedrijf_key
|
||
AND wp.prs_perslid_key = o.prs_perslid_key
|
||
AND o.prs_perslid_key = p_prs_perslid_key_opdrgever
|
||
AND o.mld_opdr_id = p_inkooporder_nr;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_broc_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_broc_key := NULL;
|
||
END;
|
||
|
||
RETURN p_broc_key;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#71781 Factuur via Factuurscanning koppelen aan opdracht (mld_opdr)
|
||
-- Op zoek naar de mld_opdr (opdracht) obv ION bij de opdrachtgever en IBAN die in de Factuurscanning zijn ge-extraheerd
|
||
-- ION (p_inkooporder_nr) kan leeg ('') zijn (dwz niet gescand)
|
||
-- IBAN (p_iban) is doorgaans wel gescand (999 van 1000 keer, of zelf 1000/1000)
|
||
-- OPDRACHTGEVER (wordt bepaald door de mailer obv contract, verloopt via bv functie get_woco_perslid_of_contract)
|
||
-- Resultaat:
|
||
-- 1. mld_opdr_key van mld_opdr waarvan ION bij OPDRACHTGEVER is gevonden, en IBAN is van de leverancier waar de opdracht aan is uitgegeven.
|
||
-- 2. null indien geen ION, of geen IBAN, of wel IBAN maar bij meerdere leveranciers geregistreerd.
|
||
CREATE OR REPLACE FUNCTION check_io_nr_icm_iban_is_oke (p_inkooporder_nr IN VARCHAR2,
|
||
p_iban IN VARCHAR2,
|
||
p_prs_perslid_key_opdrgever IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
p_broc_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
BEGIN
|
||
p_broc_key := NULL;
|
||
|
||
BEGIN
|
||
-- Mogelijk hebben we van doen met een mld_opdr
|
||
-- Op basis van een IO-nr van de originele opdracht vanuit de opdrachtgever icm de IBAN die door leverancier in de factuur wordt meegestuurd
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = p_prs_perslid_key_opdrgever;
|
||
|
||
|
||
SELECT o.mld_opdr_key, o.mld_uitvoerende_keys
|
||
INTO p_broc_key, v_lev_prs_bedrijf_key
|
||
FROM mld_opdr o,
|
||
mld_typeopdr mto
|
||
WHERE o.mld_typeopdr_key = mto.mld_typeopdr_key
|
||
AND mto.mld_typeopdr_kosten = 1
|
||
AND o.mld_statusopdr_key NOT IN (1,
|
||
2,
|
||
3,
|
||
10)
|
||
AND (o.mld_uitvoerende_keys = (SELECT MAX(prs_bedrijf_key) FROM mar_v_bedrijf_bankrek_nr WHERE prs_bedrijf_bankreknr = p_iban)
|
||
OR
|
||
o.mld_uitvoerende_keys = (SELECT MAX(prs_bedrijf_key2) FROM prs_bedrijf_bedrijf WHERE prs_bedrijf_key1 = v_woco_prs_bedrijf_key AND prs_bedrijf_bedrijf_account1 = p_iban)
|
||
)
|
||
AND o.prs_perslid_key = p_prs_perslid_key_opdrgever
|
||
AND o.mld_opdr_id = p_inkooporder_nr;
|
||
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_broc_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_broc_key := NULL;
|
||
END;
|
||
|
||
RETURN p_broc_key;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION check_of_contract_bestaat (p_prs_perslid_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
p_broc_key NUMBER (10);
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_lev_prs_bedrijf_key NUMBER (10);
|
||
v_do_send_opdr NUMBER (10);
|
||
BEGIN
|
||
p_broc_key := NULL;
|
||
v_woco_prs_bedrijf_key := NULL;
|
||
|
||
BEGIN
|
||
-- we zoeken het naar *het* contract van de soort 'Diversen/Overig' (= discipline-key 5), waarvan p_prs_perslid_key de contractpersoon is. Looptijd contract is allemaal dummy (vooralsnog).
|
||
-- Er mogen niet meerdere contacten van soort/key 5 met dezelfde contactpersoon zijn, anders kunnen we niet eenduidig bepalen naar welke opdrachtgever de factuur gestuurd moet worden.
|
||
-- UBL verplicht namelijk niet dat een opdrachtgever-id (GLN of iets dergelijks) mee gestuurd moet worden. En er is in Mareon geen verplichting op deze vreemde factuur bekend, en we willen
|
||
-- wel de opdrachtgever eenduidig kunnen bepalen.
|
||
-- Als er toch meerdere contracten gevonden worden (hetgeen een configuratie-fout is, de FIP import zorgt voor deze eenduidigheid namelijk), dan vinden we dat niet goed, en besluiten
|
||
-- we dat er alsnog geen contract bestaat (= keuze).
|
||
|
||
-- Aldus: zoek unieke contract met de contactperoon = parameter p_prs_perslid_key
|
||
SELECT c.cnt_contract_key
|
||
INTO p_broc_key
|
||
FROM cnt_contract c,
|
||
prs_contactpersoon cp,
|
||
prs_afdeling a,
|
||
mar_v_woco_x_contractant wc
|
||
WHERE ins_discipline_key = 5
|
||
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
||
AND cp.prs_perslid_key = p_prs_perslid_key
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND c.cnt_contract_looptijd_van <= TRUNC (SYSDATE)
|
||
AND c.cnt_contract_looptijd_tot >= TRUNC (SYSDATE)
|
||
AND c.prs_afdeling_key_eig = a.prs_afdeling_key
|
||
AND a.prs_bedrijf_key = wc.w_prs_bedrijf_key
|
||
AND wc.l_prs_perslid_key = cp.prs_perslid_key;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
p_broc_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
p_broc_key := NULL;
|
||
END;
|
||
|
||
RETURN p_broc_key;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE FUNCTION get_woco_perslid_of_contract (p_cnt_contract_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_woco_prs_perslid_key NUMBER (10);
|
||
BEGIN
|
||
v_woco_prs_perslid_key := NULL;
|
||
|
||
BEGIN
|
||
-- Levert de API-perslid op van het bedrijf (= opdrachtgever) van het contract met p_cnt_contract_key op.
|
||
|
||
SELECT wp.prs_perslid_key
|
||
INTO v_woco_prs_perslid_key
|
||
FROM cnt_contract c, prs_afdeling a, mar_v_woco_perslid wp
|
||
WHERE c.cnt_contract_key = p_cnt_contract_key
|
||
AND c.prs_afdeling_key_eig = a.prs_afdeling_key
|
||
AND a.prs_bedrijf_key = wp.prs_bedrijf_key
|
||
AND wp.prs_perslid_apikey IS NOT NULL;
|
||
EXCEPTION
|
||
WHEN NO_DATA_FOUND
|
||
THEN
|
||
v_woco_prs_perslid_key := NULL;
|
||
WHEN TOO_MANY_ROWS
|
||
THEN
|
||
v_woco_prs_perslid_key := NULL;
|
||
END;
|
||
|
||
RETURN v_woco_prs_perslid_key;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_pre_update_factuur_sidb (p_import_key IN NUMBER)
|
||
AS
|
||
-- In cursor cfactuur is alles mooi getrimmed. NB: de sortering is cruciaal!
|
||
CURSOR lev_ordernrs
|
||
IS
|
||
SELECT DISTINCT leveranciernr,
|
||
ordernr,
|
||
factuurnr,
|
||
fac_import_key,
|
||
kenmerk7 AS woconr,
|
||
kenmerk3 AS iban,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
p_mldbes_opdr_key NUMBER (10);
|
||
p_cnt_key NUMBER (10);
|
||
p_fclt_broc_nr VARCHAR2 (30);
|
||
v_mar_nr VARCHAR2 (100);
|
||
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_perslid_key_opdrgever NUMBER (10);
|
||
|
||
h_rc_ordernr VARCHAR2(100);
|
||
v_verplichtings_soort VARCHAR2(20);
|
||
|
||
BEGIN
|
||
v_errorhint :=
|
||
'SYSTEM API user [_API_AX_xxxx] van import ' || p_import_key || ' niet gevonden, er is geen factuur aangemaakt';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
-- "Welke verplichtingssoort" is het opdrachtnummer.
|
||
-- Mogelijke waarden zijn: "MAR/BES", "ION/BES", "ION/MAR", "ION/CNT" en "INVALID" voor resp:
|
||
-- 1. het is een MARnummer of een BESnummer(1) en wordt niet vertaald,
|
||
-- 2. het is een (in Mareon bekend) ION wat vertaald wordt in BES nummer
|
||
-- 3. het is een (in Mareon bekend) ION wat vertaald wordt in MAR nummer
|
||
-- 4. het is een (in Mareon ONbekend) ION (of nog ander nummer wat op zichzelf staan) en wordt vertaald naar CNT omdat er een contract bestaat.
|
||
-- 5. het is een ongeldig MAR/BES/ION, er bestaat geen contract (tbv mareon facturen), we staan deze factuur derhalve niet toe (en verwijderen deze)!
|
||
|
||
v_verplichtings_soort := NULL;
|
||
h_rc_ordernr := 'MARX_dit_ordernummer_bestaat_niet_1234_MARX';
|
||
|
||
FOR rc IN lev_ordernrs
|
||
LOOP
|
||
-- MARX#80722 foutmelding "operation has timed out"
|
||
IF (h_rc_ordernr IS NULL AND rc.ordernr IS NOT NULL) OR (h_rc_ordernr IS NOT NULL AND rc.ordernr IS NULL) OR h_rc_ordernr <> rc.ordernr
|
||
THEN
|
||
-- Verplichtingsnummer is veranderd en moet (voor eerste keer of opnieuw) bepaald worden:
|
||
v_verplichtings_soort := NULL;
|
||
END IF;
|
||
|
||
IF v_verplichtings_soort IS NULL
|
||
THEN
|
||
p_mldbes_opdr_key := check_mareon_nr_is_oke (rc.ordernr, v_prs_perslid_key, 1);
|
||
IF p_mldbes_opdr_key IS NOT NULL
|
||
THEN
|
||
v_verplichtings_soort := 'MAR/BES';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_verplichtings_soort IS NULL
|
||
THEN
|
||
-- Oke, dus geen MAR-opdrachtnummer en geen MAR-bestelnummer.
|
||
-- Maar misschien is ipv het MAR-bestelnummer wel het IONR gestuurd, dat mag want Mareon stuurt namelijk IONR op in bestelbericht 'OrderNumber',
|
||
-- en krijgt dit mogelijk/hoogstwaarschijnlijk in factuur in BuyerOrdernumber retour
|
||
v_prs_perslid_key_opdrgever := get_woco_api_user_from_gln(rc.woconr);
|
||
p_mldbes_opdr_key := check_io_nr_is_bestelling (rc.ordernr, v_prs_perslid_key, v_prs_perslid_key_opdrgever);
|
||
IF p_mldbes_opdr_key IS NOT NULL
|
||
THEN
|
||
v_verplichtings_soort := 'ION/BES';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_verplichtings_soort IS NULL
|
||
THEN
|
||
-- Importeur stuurt een ONgeldige MARnummer mee (niet van deze leverancier, of helemaal van geen enkele)
|
||
-- MARX#41690: UBL ondersteuning voor Rochdale via Mareon, hetgeen neerkomt op de verwerking van - voor Mareon - vreemde facturen obv UBL.
|
||
-- Als leverancier een contract van soort 'Diversen', bedoeld t.b.v. van insturen van 'vreemde facturen', dan gedogen we deze (voor Mareon) vreemde factuur, en boeken we die op dat contractnummer.
|
||
-- En anders, als leverancier ook niet zo'n contract heeft, dan beschouwen we de factuur als 'onguur', en wordt deze niet geimporteerd.
|
||
p_cnt_key := check_of_contract_bestaat (v_prs_perslid_key);
|
||
|
||
IF p_cnt_key IS NOT NULL
|
||
THEN
|
||
-- Aha, deze leverancier heeft zo'n contract, snel ff het contractnummer als 'ordernummer'in de import tabel inschieten, zodat de factuur netjes (= volledig) kan worden geimporteerd.
|
||
-- Het echte ordernr die leverancier heeft meegestuurd, staat in kenmerk van factuur, en deze wordt uiteraard aan opdrachtgever doorgestuurd.
|
||
|
||
-- Alleen nav MARX#55044(PDF Scanning in the cloud) willen we factuur met een MAR of IO nr - indien geldig - wel aan de opdracht mld_opdr willen koppelen (ipv aan de dummy contract).
|
||
p_mldbes_opdr_key := check_mareon_nr_is_oke (rc.ordernr, v_prs_perslid_key, 0);
|
||
|
||
IF p_mldbes_opdr_key IS NULL
|
||
THEN
|
||
-- Mogelijk en zelfs (zeer) waarschijnlijker is een IO-nr nummers meegestuurd in de factuur, die gaan we opzoeken.
|
||
-- Haal eerst de API-perslid opdrachtgever op, adhv het contract 'p_cnt_key'
|
||
v_prs_perslid_key_opdrgever := get_woco_perslid_of_contract (p_cnt_key);
|
||
-- Om vervolgens te checken of IO-nr bij die combi opdrachtgever en opdrachtnemer valide is...
|
||
p_mldbes_opdr_key := check_io_nr_is_oke (rc.ordernr, v_prs_perslid_key, v_prs_perslid_key_opdrgever);
|
||
|
||
-- Als p_mldbes_opdr_key hier nog steeds null is, dan een final laatste poging obv IBAN (die uniek zou mogen zijn, waar we overigens niet knetterhard van uit gaan...)
|
||
-- Bij Mareon Factuurscanning is de v_prs_perslid_key namelijk de 'algemene'/dummy perslid voor 'alle' factuurverwerking voor een woco (via contract), en perslid levert in de vorige poging dan geen resultaat (want die perslid heeft nooit een ION)
|
||
-- MARX#71781 Factuur via Factuurscanning koppelen aan opdracht (mld_opdr)
|
||
IF p_mldbes_opdr_key IS NULL
|
||
THEN
|
||
p_mldbes_opdr_key := check_io_nr_icm_iban_is_oke (rc.ordernr, rc.iban, v_prs_perslid_key_opdrgever);
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
IF p_mldbes_opdr_key IS NOT NULL
|
||
THEN
|
||
-- IO nr (of MAR nr) is een geldig nummer bij de contractant, bijbehorende mld_opdr is gevonden, we gaan hier het MAR-nummer neerzetten als verplichting...
|
||
v_verplichtings_soort := 'ION/MAR';
|
||
SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
INTO v_mar_nr
|
||
FROM mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding std,
|
||
ins_tab_discipline d,
|
||
ins_srtdiscipline sd
|
||
WHERE o.mld_opdr_key = p_mldbes_opdr_key
|
||
AND m.mld_melding_key = o.mld_melding_key
|
||
AND m.mld_stdmelding_key = std.mld_stdmelding_key
|
||
AND std.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key;
|
||
ELSE
|
||
-- Is die nog steeds null, dan gaan we uiteindelijk het contractnummer als verplichting gebruiken....
|
||
v_verplichtings_soort := 'ION/CNT';
|
||
END IF;
|
||
|
||
ELSE
|
||
v_verplichtings_soort := 'INVALID';
|
||
-- Ongure factuur, vod d'r mee.
|
||
END IF;
|
||
END IF;
|
||
|
||
-- In geval van MAR/BES is geen SQL-actie nodig...
|
||
IF v_verplichtings_soort IS NOT NULL AND UPPER (v_verplichtings_soort) <> 'MAR/BES'
|
||
THEN
|
||
CASE
|
||
WHEN UPPER (v_verplichtings_soort) = 'ION/BES'
|
||
THEN
|
||
-- Import aanpassen, het veld vullen met Mareon bestelnummer 1234/1 behorende bij het ION...
|
||
-- Het ION gaan we vervangen door BES nummer, p_mldbes_opdr_key mag niet leeg zijn (en dat is ie als het goed is ook niet, maar hier super defensief nog maar een checkje...
|
||
IF p_mldbes_opdr_key IS NOT NULL
|
||
THEN
|
||
UPDATE fac_imp_factuur
|
||
SET ORDERNR = (SELECT bo.bes_bestelopdr_id FROM bes_bestelopdr bo WHERE bo.bes_bestelopdr_key = p_mldbes_opdr_key)
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
END IF;
|
||
WHEN UPPER (v_verplichtings_soort) = 'ION/MAR'
|
||
THEN
|
||
-- Het ION gaan we vervangen door MAR nummer, v_mar_nr en p_cnt_key mogen niet leeg zijn (en dat zijn ze als het goed is ook niet, maar hier super defensief nog maar een checkje...
|
||
IF v_mar_nr IS NOT NULL AND p_cnt_key IS NOT NULL
|
||
THEN
|
||
UPDATE fac_imp_factuur
|
||
SET ORDERNR = v_mar_nr
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
|
||
-- MARX#73756: Notjob "uitvalmail naar woco" gaat fout bij facturen die aan opdr zijn geknoopt
|
||
-- We gaan hier het originele contract-key ff bewaren...
|
||
UPDATE fac_imp_factuur
|
||
SET kenmerk19 = p_cnt_key
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
END IF;
|
||
-- En we willen ook dat deze factuur 'Via module Mareon factuurverwerking (UBL)' (=flexprop key 19 bij fin_factuur) wordt geregistreerd, daarom vullen we kenmerk ... met '1'
|
||
-- MARX#57931: Abonnement Mareon Factuurverwerking (UBL/SALES/PDF)
|
||
-- Let op: conditie "kenmerk20 IS NULL" is cruciaal, in F_PutFactuurPDF wordt deze namelijk met 2 gezet, en die moet niet om zeep hiermee...
|
||
UPDATE fac_imp_factuur
|
||
SET kenmerk20 = '1'
|
||
WHERE kenmerk20 IS NULL AND fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
WHEN UPPER (v_verplichtings_soort) = 'ION/CNT'
|
||
THEN
|
||
-- Het ION gaan we vervangen door CNT nummer, p_cnt_key mag niet leeg zijn (en dat is ie als het goed is ook niet, maar hier super defensief nog maar een checkje...
|
||
IF p_cnt_key IS NOT NULL
|
||
THEN
|
||
UPDATE fac_imp_factuur
|
||
SET ORDERNR = 'C' || p_cnt_key
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
END IF;
|
||
-- En we willen ook dat deze factuur 'Via module Mareon factuurverwerking (UBL)' (=flexprop key 19 bij fin_factuur) wordt geregistreerd, daarom vullen we kenmerk ... met '1'
|
||
-- MARX#57931: Abonnement Mareon Factuurverwerking (UBL/SALES/PDF)
|
||
-- Let op: conditie "kenmerk20 IS NULL" is cruciaal, in F_PutFactuurPDF wordt deze namelijk met 2 gezet, en die moet niet om zeep hiermee...
|
||
UPDATE fac_imp_factuur
|
||
SET kenmerk20 = '1'
|
||
WHERE kenmerk20 IS NULL AND fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
WHEN UPPER (v_verplichtings_soort) = 'INVALID'
|
||
THEN
|
||
-- Ongure factuur, vod d'r mee.
|
||
DELETE FROM fac_imp_factuur
|
||
WHERE fac_import_key = p_import_key AND fac_imp_file_index = rc.fac_imp_file_index;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'MAReon-nr '
|
||
|| rc.ordernr
|
||
|| ' van leverancier '
|
||
|| rc.leveranciernr
|
||
|| ' is ongeldig: factuur wordt niet ingelezen (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnummer:' || rc.factuurnr);
|
||
END CASE;
|
||
END IF;
|
||
h_rc_ordernr := rc.ordernr;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_post_factuur_ready_en_sent (p_fin_factuur_key IN NUMBER)
|
||
AS
|
||
-- Key van het kenmerk 'Factuur gereed?'
|
||
c_kenmerk_key_gereed NUMBER (10) := 22;
|
||
-- Key van het kenmerk 'Factuur versturen?'
|
||
c_kenmerk_key_versturen NUMBER (10) := 9;
|
||
BEGIN
|
||
-- MARX#66905: Mareon update a.g.v. revamp Facilitor, ook kenmerk 'Factuur gereed?' op JA (key 20) zetten.
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (p_fin_factuur_key, c_kenmerk_key_gereed, 20);
|
||
-- En daarna Factuur versturen op 1 (= vinkje AAN)
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (p_fin_factuur_key, c_kenmerk_key_versturen, 1);
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_post_factuur_incompleet (p_fin_factuur_key IN NUMBER, p_fin_factuur_statuses_key_nu IN NUMBER, p_factuur_opmerking IN VARCHAR2)
|
||
AS
|
||
l_opmerking VARCHAR2 (1000);
|
||
BEGIN
|
||
IF p_fin_factuur_statuses_key_nu <> 3
|
||
THEN
|
||
-- Was nog niet compleet, alsnog dan..
|
||
l_opmerking := lcl.l('lcl_fin_imp_errors') || TO_CHAR(SYSDATE,'dd-mm-yyyy') || CHR(10) || '----' || p_factuur_opmerking;
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_statuses_key = 3,
|
||
fin_factuur_opmerking = SUBSTR(l_opmerking , 1, 250)
|
||
WHERE fin_factuur_key = p_fin_factuur_key;
|
||
-- Overschrijven dat het een import met fouten betreft...
|
||
UPDATE fac_tracking
|
||
SET fac_tracking_oms = lcl.l('lcl_fin_imp_bad')
|
||
WHERE fac_tracking_refkey = p_fin_factuur_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'FINNEW');
|
||
ELSE
|
||
-- Was al incompleet, wordt nog incompleter, alleen opmerking gaan we uitbreiden, de rest staat al goed..
|
||
l_opmerking := CHR(10) || p_factuur_opmerking;
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_opmerking = SUBSTR(fin_factuur_opmerking || l_opmerking , 1, 250)
|
||
WHERE fin_factuur_key = p_fin_factuur_key;
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_post_factuur_pdfcheck (p_docid IN VARCHAR2, p_prs_bedrijf_pdfverplicht IN NUMBER, p_fin_factuur_key IN NUMBER, p_fin_factuur_statuses_key_nu IN NUMBER)
|
||
AS
|
||
l_opmerking VARCHAR2 (1000);
|
||
l_pdf_opm VARCHAR2 (100) := 'PDF ontbreekt bij de factuur.';
|
||
BEGIN
|
||
IF (p_docid IS NULL AND p_prs_bedrijf_pdfverplicht = 1)
|
||
THEN
|
||
-- PDF afwezig, MAAR woco vereist hem wel, dus incompleet
|
||
mar_post_factuur_incompleet (p_fin_factuur_key, p_fin_factuur_statuses_key_nu, l_pdf_opm);
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- MARX#83584 Afwijking bij Mareon Bedrijfsherkenning per klant
|
||
-- Functie die bij een klant de drempelwaarde bepaalt voor de accuraatheid voor het toestaan afwijkingen in bedrijfsnamen...
|
||
|
||
CREATE OR REPLACE FUNCTION mar_get_drempelwaarde_custrec (v_woco_prs_bedrijf_key IN NUMBER)
|
||
RETURN NUMBER
|
||
AS
|
||
v_drempel_score NUMBER(10,4);
|
||
BEGIN
|
||
SELECT MAX(fac.safe_to_number(prs_kenmerklink_waarde))
|
||
INTO v_drempel_score
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 70
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_link_key = v_woco_prs_bedrijf_key;
|
||
|
||
IF v_drempel_score IS NOT NULL
|
||
THEN
|
||
-- Er is een drempelscore op klant-nivo ingesteld
|
||
v_drempel_score := ROUND(v_drempel_score/100, 2);
|
||
ELSE
|
||
-- Er is geen drempelscore op klant-nivo ingesteld, we gaan dan rekenen met de globale instelling
|
||
SELECT COALESCE(fac.safe_to_number (ud.fac_usrdata_omschr), 0.75)
|
||
INTO v_drempel_score
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1 AND ud.fac_usrdata_code = '$MAR_CUSTOMER_RECOGNITION_DREMPELWAARDE' AND ud.fac_usrdata_verwijder IS NULL;
|
||
END IF;
|
||
RETURN v_drempel_score;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE FUNCTION mar_get_intern_woconr (p_email_adres IN VARCHAR2, p_woconaam IN VARCHAR2, p_drempel_score IN NUMBER)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_intern_woconr VARCHAR2(1000);
|
||
BEGIN
|
||
SELECT MAX(fac_usrdata_code)
|
||
INTO v_intern_woconr
|
||
FROM (SELECT fac_usrdata_key, fac_usrdata_code, fac_usrdata_omschr, fac_usrdata_omschr2,
|
||
UTL_MATCH.jaro_winkler(UPPER(fac_usrdata_omschr), UPPER(p_woconaam)) AS score1,
|
||
UTL_MATCH.jaro_winkler(UPPER(REVERSE(fac_usrdata_omschr)), UPPER(REVERSE(p_woconaam))) AS score2
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 9
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND UPPER(fac_usrdata_omschr2) = UPPER(p_email_adres)
|
||
)
|
||
WHERE score1+score2 >= 2*p_drempel_score
|
||
AND score1+score2 = (SELECT MAX(UTL_MATCH.jaro_winkler(UPPER(fac_usrdata_omschr), UPPER(p_woconaam)) + UTL_MATCH.jaro_winkler(UPPER(REVERSE(fac_usrdata_omschr)), REVERSE(UPPER(p_woconaam))))
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 9
|
||
AND fac_usrdata_verwijder IS NULL
|
||
AND UPPER(fac_usrdata_omschr2) = UPPER(p_email_adres)
|
||
);
|
||
RETURN v_intern_woconr;
|
||
END;
|
||
/
|
||
|
||
|
||
-- Als 'woco' de instelling 'Customer Recognition' heeft ingesteld, en leverancier stuurt factuur met de tenaamstelling opdrachtgever naar 1 mailadres, en opdrachtgever heeft meer (interne) bedrijven,
|
||
-- dan wordt hier het interne bedrijf (zo goed mogelijk) bepaald...
|
||
CREATE OR REPLACE FUNCTION mar_post_factuur_intern_woconr (p_prs_perslid_key IN NUMBER, p_woconaam IN VARCHAR2, p_fin_factuur_key IN NUMBER, p_fin_factuur_statuses_key_nu IN NUMBER)
|
||
RETURN VARCHAR2
|
||
AS
|
||
-- Alle interne bedrijven die in aanmerking komen bij het mailadres waar de factuur naar toe is gestuurd
|
||
-- We bepalen daaruit het interne bedrijf dat het dichtst in de buurt komt van de meegegeven bedrijfsnaam op de factuur
|
||
-- Wel met de voorwaarde dat die overeenkomstige naam goed scoort, dus boven een zekere drempelwaarde (instelling $MAR_CUSTOMER_RECOGNITION_DREMPELWAARDE) is,
|
||
-- anders beschouwen we het niet als goede match
|
||
-- PS. er zouden evt meer records in de tabel kunnen worden toegevoegd, zodat voor de volgende keer wel match wordt gevonden
|
||
|
||
v_fac_email_setting_user VARCHAR2(1000);
|
||
v_intern_woconr VARCHAR2(1000);
|
||
v_woco_prs_bedrijf_key NUMBER(10);
|
||
v_customer_recognition NUMBER(10);
|
||
v_count NUMBER(10);
|
||
l_woconr_opm VARCHAR2 (1000) := 'Intern bedrijf is niet (goed) vastgesteld: ';
|
||
v_drempel_score NUMBER(10,4);
|
||
|
||
BEGIN
|
||
-- Als intern bedrijf niet kan worden bepaald, dan ook de 'woconaam' in de opmerking noemen, ter info zodat we weten waarop is gezocht, mocht dat er toe doen...
|
||
l_woconr_opm := l_woconr_opm || p_woconaam;
|
||
-- We doen dit alleen als:
|
||
-- 1) Leverancier een contract heeft
|
||
-- 2) Opdrachtgever van dat contract de instelling 'Customer Recognition' aan heeft staan
|
||
-- 3) Mailadres van Leverancier staat in fac_usrdata geregistreerd.
|
||
|
||
-- 1)
|
||
SELECT MAX(w_prs_bedrijf_key)
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_x_contractant
|
||
WHERE l_prs_perslid_key = p_prs_perslid_key;
|
||
|
||
|
||
-- 2)
|
||
IF v_woco_prs_bedrijf_key IS NOT NULL
|
||
THEN
|
||
SELECT COALESCE(MAX(fac.safe_to_number(prs_kenmerklink_waarde)),0)
|
||
INTO v_customer_recognition
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_woco_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 64
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
END IF;
|
||
|
||
|
||
-- 3a) We zoeken het mailadres van de (UBL/Scan) contractant op, alleen de fac_usrdata records met zo'n mailadres geregistreerd, behoren bij die opdrachtgever, en komen in aanmerking
|
||
SELECT MAX(fac_email_setting_user)
|
||
INTO v_fac_email_setting_user
|
||
FROM fac_email_setting
|
||
WHERE prs_perslid_key_auth = p_prs_perslid_key;
|
||
-- 3b) Check of gevonden mailadres in fac_usrdata records aanwezig is.
|
||
v_count := 0;
|
||
IF v_fac_email_setting_user IS NOT NULL
|
||
THEN
|
||
SELECT count(*)
|
||
INTO v_count
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 9
|
||
AND UPPER(fac_usrdata_omschr2) = UPPER(v_fac_email_setting_user);
|
||
END IF;
|
||
|
||
IF v_woco_prs_bedrijf_key IS NOT NULL AND v_customer_recognition = 1 AND v_fac_email_setting_user IS NOT NULL AND v_count > 0
|
||
THEN
|
||
-- Nu op zoek naar alle records uit fac_usrdata (uit eigen tabel "Interne bedrijf tbv financiele administraties" key 9) met het mailadres v_fac_email_setting_user in omschrijving2
|
||
-- Zodat we zeker weten dat NIET per ongeluk een intern bedrijf van een geheel andere woco wordt bepaald, dus dat we ALLEEN op zoek gaan naar de juiste interne bedrijven van de WOCO.
|
||
-- En dan het fac_usrdata record dat het dichtst in de buurt komt van de meegegeven p_woconaam, oftewel de (juridische) bedrijfsnaam of handelsnaam van opdrachtgever op de factuur...
|
||
|
||
-- MARX#83584 Afwijking bij Mareon Bedrijfsherkenning per klant
|
||
v_drempel_score := mar_get_drempelwaarde_custrec(v_woco_prs_bedrijf_key);
|
||
v_intern_woconr := mar_get_intern_woconr(v_fac_email_setting_user, p_woconaam, v_drempel_score);
|
||
|
||
IF v_intern_woconr IS NULL
|
||
THEN
|
||
-- Intern woconr is niet gevonden, MAAR woco vereist/wenst hem wel, dus incompleet, zodat opdrachtgever een signaal heeft dat het interne bedrijf niet (goed) kon worden bepaald...
|
||
IF p_fin_factuur_key IS NOT NULL AND p_fin_factuur_statuses_key_nu IS NOT NULL
|
||
THEN
|
||
-- Doen we alleen als factuurkey and status is meegegeven, anders doen we dat niet...
|
||
mar_post_factuur_incompleet (p_fin_factuur_key, p_fin_factuur_statuses_key_nu, l_woconr_opm);
|
||
END IF;
|
||
|
||
-- We proberen terug te vallen op het evt. hoofd-bedrijf welke (mogelijk) staat gemarkeerd in fac_usrdata (= record waar volgnummer = 1)...
|
||
SELECT MAX(fac_usrdata_code)
|
||
INTO v_intern_woconr
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 9
|
||
AND UPPER(fac_usrdata_omschr2) = UPPER(v_fac_email_setting_user)
|
||
AND fac_usrdata_volgnr = 1;
|
||
|
||
-- Mocht dat niet lukken, omdat er geen hoofdbedrijf is geregisteerd, dan hebben we de standaard fall-back (as-is) de opdrachtgever volgens contract
|
||
END IF;
|
||
|
||
END IF;
|
||
|
||
RETURN v_intern_woconr;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_post_update_factuur_sidb (p_import_key IN NUMBER)
|
||
AS
|
||
CURSOR cfactuur_kenmerk_opdrnr_ax
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk1,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk1 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_levnr_ax
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk2,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk2 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_iban
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk3,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk3 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_g_iban
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk4,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk4 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_g_ammount
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk5,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk5 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_onderwerp
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk6,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk6 IS NOT NULL;
|
||
|
||
-- MARX#38907: Vinkje 'factuur versturen' bij een SidB Factuur import zonder PDF niet zetten.
|
||
-- MARX#38905: Verplichte PDF(upload) als bijlage bij SIDB-factuur loslaten en optioneel maken? -> Als setting PDF_BIJ_SIDB_FACTUUR bij woco = 1 (=optioneel), dan is PFD niet nodig
|
||
-- om toch het vinkje 'factuur versturen' te zetten. Om de woco (beter gezegd: opdrachtgever) erbij te zoeken, splitsen we de cursor in 2-en: voor mld en bes.
|
||
CURSOR c_mld_factuur_vinkje_versturen
|
||
IS
|
||
SELECT DISTINCT fif.fin_factuur_key, fif.factuurnr, f.fin_factuur_statuses_key, fif.docid, b.prs_bedrijf_pdfverplicht
|
||
FROM fac_imp_factuur fif,
|
||
fin_factuur f,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_bedrijf_pdf_bij_sidb b
|
||
WHERE fif.fac_import_key = p_import_key
|
||
AND fif.fin_factuur_key IS NOT NULL
|
||
AND fif.fin_factuur_key = f.fin_factuur_key
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND f.cnt_contract_key IS NULL
|
||
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
|
||
AND woco.prs_bedrijf_key = b.prs_bedrijf_key;
|
||
|
||
CURSOR c_bes_factuur_vinkje_versturen
|
||
IS
|
||
SELECT DISTINCT fif.fin_factuur_key, fif.factuurnr, f.fin_factuur_statuses_key, fif.docid, b.prs_bedrijf_pdfverplicht
|
||
FROM fac_imp_factuur fif,
|
||
fin_factuur f,
|
||
bes_bestelopdr bo,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_bedrijf_pdf_bij_sidb b
|
||
WHERE fif.fac_import_key = p_import_key
|
||
AND fif.fin_factuur_key IS NOT NULL
|
||
AND fif.fin_factuur_key = f.fin_factuur_key
|
||
AND f.mld_opdr_key IS NULL
|
||
AND f.cnt_contract_key IS NULL
|
||
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
|
||
AND bo.prs_perslid_key = woco.prs_perslid_key
|
||
AND woco.prs_bedrijf_key = b.prs_bedrijf_key;
|
||
|
||
CURSOR c_cnt_factuur_vinkje_versturen
|
||
IS
|
||
SELECT DISTINCT fif.fin_factuur_key, fif.factuurnr, f.fin_factuur_statuses_key, fif.docid, b.prs_bedrijf_pdfverplicht
|
||
FROM fac_imp_factuur fif,
|
||
fin_factuur f,
|
||
cnt_contract c,
|
||
prs_afdeling a_woco,
|
||
mar_v_bedrijf_pdf_bij_sidb b
|
||
WHERE fif.fac_import_key = p_import_key
|
||
AND fif.fin_factuur_key IS NOT NULL
|
||
AND fif.fin_factuur_key = f.fin_factuur_key
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND f.mld_opdr_key IS NULL
|
||
AND f.cnt_contract_key = c.cnt_contract_key
|
||
AND c.prs_afdeling_key_eig = a_woco.prs_afdeling_key
|
||
AND a_woco.prs_bedrijf_key = b.prs_bedrijf_key;
|
||
|
||
CURSOR cfactuur_kenmerk_woco_nr
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk7,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk7 IS NOT NULL;
|
||
|
||
-- Volgens JGL kunnen we niet meerdere imports tegelijk aan bij fac_result, zie hieronder.
|
||
-- Vandaar de conditie met max(fin_factuur_key), die levert maximaal 1 record op.
|
||
CURSOR cfactuur_docid
|
||
IS
|
||
SELECT fin_factuur_key,
|
||
docid,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL
|
||
AND fac_import_key = p_import_key
|
||
AND docid IS NOT NULL
|
||
AND fin_factuur_key = (SELECT MAX (fin_factuur_key)
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND docid IS NOT NULL);
|
||
|
||
|
||
-- MARX#39807: Factuurbericht vanuit Mareon rechtsgeldig maken
|
||
CURSOR cfactuur_kenmerk_kvknr
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk8,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk8 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_btwnr
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk9,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk9 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_afleverdatum
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
afleverdatum,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL
|
||
AND fac_import_key = p_import_key
|
||
AND fac.safe_to_date (afleverdatum, 'yyyy-mm-dd') IS NOT NULL;
|
||
|
||
-- MARX#53540: Ontblobben facturatie in Mareon verwerken: Kostensoort
|
||
CURSOR cfactuur_kenmerk_kostensoort
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
fin_factuurregel_key,
|
||
kenmerk10,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuurregel_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk10 IS NOT NULL;
|
||
|
||
-- MARX#56505: Factuur-koppeling naar Tobias-AX de NAW opnemen.
|
||
CURSOR cfactuur_kenmerk_naw
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
fin_factuurregel_key,
|
||
kenmerk11 naam,
|
||
kenmerk12 adres,
|
||
kenmerk13 postcode,
|
||
kenmerk14 plaats,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk11 IS NOT NULL;
|
||
|
||
|
||
CURSOR cfactuur_store_contract_key
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk19,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk19 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_ubl_module
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk20,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk20 IS NOT NULL;
|
||
|
||
CURSOR cfactuur_kenmerk_autoincasso
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk15,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk15 IS NOT NULL;
|
||
|
||
-- MARX#57670: Koppeling facturen vanuit Salesforce naar Tobias AX
|
||
CURSOR cfactuur_kenmerk_aanvul_info
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
fin_factuurregel_key,
|
||
kenmerk16,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuurregel_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk16 IS NOT NULL;
|
||
|
||
-- MARX#75028 Mareon Facturen: Opnemen betalingskenmerk
|
||
CURSOR cfactuur_betalingskenmerk
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
kenmerk17,
|
||
factuurnr,
|
||
fac_imp_file_index
|
||
FROM fac_imp_factuur
|
||
WHERE fin_factuur_key IS NOT NULL AND fac_import_key = p_import_key AND kenmerk17 IS NOT NULL;
|
||
|
||
-- MARX#78867 Mareon Factuur - Herkenning bedrijven zodat 1 mailadres nodig is
|
||
CURSOR cfactuur_kenmerk_woconaam
|
||
IS
|
||
SELECT DISTINCT fif.fin_factuur_key,
|
||
f.fin_factuur_statuses_key,
|
||
fif.kenmerk18,
|
||
fif.factuurnr,
|
||
fif.fac_imp_file_index
|
||
FROM fac_imp_factuur fif, fin_factuur f
|
||
WHERE fif.fin_factuur_key IS NOT NULL AND fif.fac_import_key = p_import_key AND f.fin_factuur_key = fif.fin_factuur_key;
|
||
|
||
-- Perslid van leverancier die import doet (Premium is LEV op naam / UBL + Scanning zijn fictieve perslids)
|
||
v_prs_perslid_key NUMBER (10);
|
||
|
||
-- Key van het kenmerk 'extern opdrachtnummer (opdr-nr AX) ' bij de factuur
|
||
c_kenmerk_key_opdrnr_ax NUMBER (10) := 2;
|
||
-- Key van het kenmerk 'leverancier nummer (lev-nr AX) ' bij de factuur
|
||
c_kenmerk_key_levnr_ax NUMBER (10) := 3;
|
||
-- Key van het kenmerk 'IBAN' bij de factuur
|
||
c_kenmerk_key_iban NUMBER (10) := 4;
|
||
-- Key van het kenmerk 'IBAN G-rekening' bij de factuur
|
||
c_kenmerk_key_g_iban NUMBER (10) := 5;
|
||
-- Key van het kenmerk 'Bedrag G-rekening' bij de factuur
|
||
c_kenmerk_key_g_ammount NUMBER (10) := 6;
|
||
-- Key van het kenmerk 'Factuuronderwerp'
|
||
c_kenmerk_key_onderwerp NUMBER (10) := 7;
|
||
|
||
-- Key van het kenmerk 'Woco nummer (GLN)'
|
||
c_kenmerk_key_woco_nr NUMBER (10) := 10;
|
||
-- Key van het kenmerk 'Factuurbijlage'
|
||
c_kenmerk_key_bijlage NUMBER (10) := 11;
|
||
|
||
c_kenmerk_key_kvknr NUMBER (10) := 12;
|
||
c_kenmerk_key_btwnr NUMBER (10) := 13;
|
||
c_kenmerk_key_opleverdatum NUMBER (10) := 14;
|
||
|
||
-- MARX#56505: Factuur-koppeling naar Tobias-AX de NAW opnemen.
|
||
c_kenmerk_key_naam_lev NUMBER (10) := 15;
|
||
c_kenmerk_key_adres_lev NUMBER (10) := 16;
|
||
c_kenmerk_key_postcode_lev NUMBER (10) := 17;
|
||
c_kenmerk_key_plaats_lev NUMBER (10) := 18;
|
||
|
||
c_kenmerk_key_module_ubl NUMBER (10) := 19;
|
||
c_kenmerk_key_autoincasso NUMBER (10) := 20;
|
||
c_kenmerk_key_aanv_info NUMBER (10) := 21;
|
||
c_kenmerk_key_store_cntkey NUMBER (10) := 23;
|
||
|
||
c_kenmerk_key_betaling_id NUMBER (10) := 24;
|
||
|
||
c_kenmerk_key_intern_woconr NUMBER (10) := 25;
|
||
v_intern_woconr VARCHAR2(1000);
|
||
|
||
v_kenmerk6 VARCHAR2 (255);
|
||
v_prs_kostensoort_key NUMBER (10);
|
||
v_g_bedrag NUMBER (14, 2);
|
||
BEGIN
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
-- Het externe opdrachtnr (AX) wordt in kenmerk 1 van fac_imp_factuur gezet, dus alle fac_imp_factuur langsgaan en verwerken
|
||
|
||
FOR rc IN cfactuur_kenmerk_opdrnr_ax
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_opdrnr_ax, rc.kenmerk1);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de externe opdrnr (AX) niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Opdr. nr. (AX): ' || rc.kenmerk1);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
|
||
FOR rc IN cfactuur_kenmerk_levnr_ax
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_levnr_ax, rc.kenmerk2);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de leveranciersnummer (AX) niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Leveranciernr (AX): ' || rc.kenmerk2);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_iban
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_iban, rc.kenmerk3);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het IBAN niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / IBAN: ' || rc.kenmerk3);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
FOR rc IN cfactuur_kenmerk_g_iban
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_g_iban, rc.kenmerk4);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het IBAN G-rekening niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / IBAN G-rekening: ' || rc.kenmerk4);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_g_ammount
|
||
LOOP
|
||
BEGIN
|
||
-- MARX#59014: Gbedrag bij factuurscanning niet verwerkt
|
||
v_g_bedrag := COALESCE (fac.safe_to_number (rc.kenmerk5), fac.safe_to_number (REPLACE (rc.kenmerk5, ',', '.')));
|
||
|
||
IF v_g_bedrag IS NOT NULL
|
||
THEN
|
||
--MARX#37486: Puntje 3B: Sales in de bouw koppeling hierop aanpassen, van flexprop naar fin_factuur_gbedrag
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_gbedrag = v_g_bedrag
|
||
WHERE fin_factuur_key = rc.fin_factuur_key;
|
||
ELSE
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het Bedrag G-rekening voldoet niet aan formaat en is niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Bedrag G-rekening: ' || rc.kenmerk5);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het Bedrag G-rekening niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Bedrag G-rekening: ' || rc.kenmerk5);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
FOR rc IN cfactuur_kenmerk_onderwerp
|
||
LOOP
|
||
BEGIN
|
||
v_kenmerk6 := REPLACE (rc.kenmerk6, '@@', CHR(10));
|
||
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_onderwerp, v_kenmerk6);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het onderwerp niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Onderwerp: ' || rc.kenmerk6);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
|
||
FOR rc IN cfactuur_kenmerk_woco_nr
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_woco_nr, rc.kenmerk7);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het woco-nummer (GLN) niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Woco nr.: ' || rc.kenmerk7);
|
||
END;
|
||
END LOOP;
|
||
|
||
-- MARX#39807:Factuurbericht vanuit Mareon rechtsgeldig maken
|
||
FOR rc IN cfactuur_kenmerk_kvknr
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_kvknr, rc.kenmerk8);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het KvK-nr niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / KvK-nr: ' || rc.kenmerk8);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_btwnr
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_btwnr, rc.kenmerk9);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het BTW-nr niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / BTW-nr: ' || rc.kenmerk9);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_afleverdatum
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key,
|
||
c_kenmerk_key_opleverdatum,
|
||
TO_CHAR (fac.safe_to_date (rc.afleverdatum, 'yyyy-mm-dd'), 'dd-mm-yyyy'));
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de afleverdatum niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Afleverdatum: ' || rc.afleverdatum);
|
||
END;
|
||
END LOOP;
|
||
|
||
-- MARX#56505: Factuur-koppeling naar Tobias-AX de NAW opnemen.
|
||
FOR rc IN cfactuur_kenmerk_naw
|
||
LOOP
|
||
BEGIN
|
||
IF rc.naam IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_naam_lev, rc.naam);
|
||
END IF;
|
||
|
||
IF rc.adres IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_adres_lev, rc.adres);
|
||
END IF;
|
||
|
||
IF rc.postcode IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_postcode_lev, rc.postcode);
|
||
END IF;
|
||
|
||
IF rc.plaats IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_plaats_lev, rc.plaats);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' zijn de NA(P)W leverancier niet (correct) bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:'
|
||
|| rc.factuurnr
|
||
|| ' / N-A(P)W: '
|
||
|| rc.naam
|
||
|| '-'
|
||
|| rc.adres
|
||
|| '('
|
||
|| rc.postcode
|
||
|| ')'
|
||
|| rc.plaats);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_kostensoort
|
||
LOOP
|
||
BEGIN
|
||
SELECT prs_kostensoort_key
|
||
INTO v_prs_kostensoort_key
|
||
FROM prs_kostensoort ks
|
||
WHERE ks.prs_kostensoort_refcode = UPPER (rc.kenmerk10);
|
||
|
||
UPDATE fin_factuurregel
|
||
SET prs_kostensoort_key = v_prs_kostensoort_key
|
||
WHERE fin_factuurregel_key = rc.fin_factuurregel_key;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de (ongeldige) kostensoort niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Kostensoort: ' || rc.kenmerk10);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_store_contract_key
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_store_cntkey, rc.kenmerk19);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het kenmerk oorspronkelijke contractkey niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_ubl_module
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_module_ubl, rc.kenmerk20);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het kenmerk factuur-UBL niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_autoincasso
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_autoincasso, rc.kenmerk15);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het kenmerk automatische incasso niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_aanvul_info
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactregel (fin_factuurregel_key, fin_kenmerk_key, fin_kenmerkfactregel_waarde)
|
||
VALUES (rc.fin_factuurregel_key, c_kenmerk_key_aanv_info, rc.kenmerk16);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de aanvullende,additionele informatie bij in de factuurregel niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Aanvullende informatie: ' || SUBSTR (rc.kenmerk16, 1, 100));
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_betalingskenmerk
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_betaling_id, rc.kenmerk17);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het betalingskenmerk niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN cfactuur_kenmerk_woconaam
|
||
LOOP
|
||
BEGIN
|
||
-- Kenmerk 18 is de (gescande of in UBL meegegeven) juridische bedrijfsnaam of handelsnaam van de opdrachtgever, kortweg 'woconaam'
|
||
-- We gaan op zoek of deze woconaam op basis van string-matching met een drempelwaarde (nauwkeurigheid) van 75% gevonden kan worden.
|
||
-- Alleen als woco instelling 'Customer Recognition' aan heeft staan!
|
||
v_intern_woconr := mar_post_factuur_intern_woconr (v_prs_perslid_key, rc.kenmerk18, rc.fin_factuur_key, rc.fin_factuur_statuses_key);
|
||
IF v_intern_woconr IS NOT NULL
|
||
THEN
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_intern_woconr, v_intern_woconr);
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is het interne bedrijfsnummer (AXnr) niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
-- FSN#33105 / FSN#33629: PDF's via Sidb-XML door Mareon in Tobias: -- Hier mogen eventuele flexbijlagen naar toe
|
||
-- Code aangeleverd door JGL
|
||
-- De regel van het kenmerk-key voor bijlage in Mareon = 11 (Factuurbijlage, type = bestand, zie marx03.sql)
|
||
-- De code van JGL hieronder verder verwerkt:
|
||
--INSERT INTO fac_result (fac_result_sessionid,
|
||
-- fac_result_naam,
|
||
-- fac_result_waarde)
|
||
-- VALUES ('IMPORT:' || TO_CHAR (p_import_key),
|
||
-- 'flexcode',
|
||
-- (SELECT 'FIN:'
|
||
-- || TO_CHAR (MAX (fin_factuur_key)) -- We kunnen niet meerdere imports tegelijk aan!
|
||
-- || ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key
|
||
-- || 'F'
|
||
-- FROM fac_imp_factuur
|
||
-- WHERE fin_factuur_key IS NOT NULL
|
||
-- AND fac_import_key = p_import_key
|
||
-- AND docid IS NOT NULL));
|
||
|
||
|
||
|
||
FOR rc IN cfactuur_docid
|
||
LOOP
|
||
BEGIN
|
||
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
|
||
VALUES ('IMPORT:' || TO_CHAR (p_import_key),
|
||
'flexcode',
|
||
'FIN:' || TO_CHAR (rc.fin_factuur_key) -- We kunnen niet meerdere imports tegelijk aan!
|
||
|| ':' || c_kenmerk_key_bijlage || ':' -- De kenmerk key
|
||
|| 'F');
|
||
|
||
-- FSN#33363: Zelf de insert in fin_kenmerkfactuur doen van het bestandskenmerk (FSN#33105 verzorgt dit niet namelijk)
|
||
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
|
||
VALUES (rc.fin_factuur_key, c_kenmerk_key_bijlage, rc.docid);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key '
|
||
|| rc.fin_factuur_key
|
||
|| ' is de bestandsnaam niet bewaard (regel '
|
||
|| rc.fac_imp_file_index
|
||
|| ')',
|
||
'Factuurnr:' || rc.factuurnr || ' / Bestandsnaam: ' || rc.docid);
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
-- Laatste post-processing --
|
||
-- Van ALLE ingelezen/geimporteerde factuurrecords wordt automatisch het vinkje 'Factuur versturen' (key ..) aangezet.
|
||
-- MARX#38907: Vinkje 'factuur versturen' bij een SidB Factuur import zonder PDF niet zetten.
|
||
-- MARX#38905: Aanvulling: Als setting PDF_BIJ_SIDB_FACTUUR bij woco = 1 (=optioneel), dan is PFD niet nodig om toch het vinkje 'factuur versturen' te zetten.
|
||
-- MARX#41690: UBL ondersteuning
|
||
FOR rc IN c_mld_factuur_vinkje_versturen
|
||
LOOP
|
||
BEGIN
|
||
mar_post_factuur_ready_en_sent (rc.fin_factuur_key);
|
||
mar_post_factuur_pdfcheck (rc.docid , rc.prs_bedrijf_pdfverplicht, rc.fin_factuur_key, rc.fin_factuur_statuses_key);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key ' || rc.fin_factuur_key || ' is het kenmerk [Factuur Gereed] niet aangevinkt',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN c_bes_factuur_vinkje_versturen
|
||
LOOP
|
||
BEGIN
|
||
mar_post_factuur_ready_en_sent (rc.fin_factuur_key);
|
||
mar_post_factuur_pdfcheck (rc.docid , rc.prs_bedrijf_pdfverplicht, rc.fin_factuur_key, rc.fin_factuur_statuses_key);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key ' || rc.fin_factuur_key || ' is het kenmerk [Factuur Gereed] niet aangevinkt',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
|
||
FOR rc IN c_cnt_factuur_vinkje_versturen
|
||
LOOP
|
||
BEGIN
|
||
mar_post_factuur_ready_en_sent (rc.fin_factuur_key);
|
||
mar_post_factuur_pdfcheck (rc.docid , rc.prs_bedrijf_pdfverplicht, rc.fin_factuur_key, rc.fin_factuur_statuses_key);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Van factuur met key ' || rc.fin_factuur_key || ' is het kenmerk [Factuur Gereed] niet aangevinkt',
|
||
'Factuurnr:' || rc.factuurnr);
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_fin_factuur_sidb (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- Voordat de standaard factuur-verwerking wordt aangeroepen, eerst alle fin_factuur records verwijderen die naar een MAR-nr verwijzen, die NIET(!) van de leverancier is (maar van een andere, die mag ik niet invoeren).
|
||
-- Dat doe ik niet in de import (inlees) routine, want dan is de prs_perslid_key van degene die import doet, nog *niet* bekend. Hier wel!
|
||
mar_pre_update_factuur_sidb (p_import_key);
|
||
|
||
-- Standaard FCLT verwerk import facturen
|
||
fac_update_factuur (p_import_key);
|
||
-- CUST: post processing voor verwerking van kenmerken 'Extern opdrachtnr' en 'Extern leveranciernr', alleen indien het referentienummer niet is gevonden
|
||
mar_post_update_factuur_sidb (p_import_key);
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Webservice 8. View tbv webservice voor AX/Tobias (Xtractor-facturen)
|
||
-- Let op: prs_bedrijf_bankreknr en prs_bedrijf_bankreknr2 is normaal gesproken (bij een factuur met geldige referentie) dezelfde waarden, echter bij een
|
||
-- factuur zonder geldige refentie (import fout) kan de 1e waarde niet worden gevonden (via opdracht->prs_bedrijf) en wordt teruggevallen op de 2e waarde bankrekeningnr,
|
||
-- die mogelijk wel wordt gevonden obv GLN (lev. nr).
|
||
|
||
-- Welke facturen worden verstuurd:
|
||
-- Alleen de facturen die nog niet eerder zijn verstuurd (op basis van t.fac_tracking_datum en sync-date) ,
|
||
-- en de facturen waarvan het flex-kenmerk (key = 9) op Ja staat (d.i. fin_kenmerkfactuur versturen_okee).
|
||
|
||
-- woco is de woningbouw die regulier opdr->mld->melder->afd->bedrijf wordt gevonden.
|
||
-- woco2 indien woco niet gevonden (dus geen opdr aanwezig), dan via flexprop (key 10) GLN in factuur -> bedrijf.
|
||
|
||
-- Melding(opdracht) en contractfacturen uit elkaar getrokken, oftewel alles mbt contract uit de view mar_v_mld_factuur_ax gehaald, hiervoor nieuwe view mar_v_cnt_factuur_ax erbij gekomen (zie verderop)
|
||
|
||
-- MARX#72382 Factuur koppeling met specifieke IBAN naar opdrachtgever ERP (prs_bedrijf_bedrijf_account1 en 2 erbij)
|
||
-- MARX#75029 Mareon Facturen: Factuurbron (type) --> nieuw veld marx_factuur_brontype, waarden zijn 0,1,2,3 voor resp portaal(0), premium(1), e-invoicing(2), scanning(3)
|
||
-- MARX#75028 Mareon Facturen: Opnemen betalingskenmerk --> nieuw veld fin_factuur_betalingskenmerk
|
||
-- MARX#83629 Resultaat van Mareon bedrijfsherkenning naar Facilitor sturen
|
||
CREATE OR REPLACE VIEW mar_v_mld_factuur_ax
|
||
(
|
||
prs_perslid_key,
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
prs_woco_naam,
|
||
prs_woco_naam_recognition,
|
||
prs_woco_adres,
|
||
prs_woco_postcode,
|
||
prs_woco_plaats,
|
||
prs_woco_gln,
|
||
prs_woco_axnr,
|
||
prs_woco_close_opdracht,
|
||
prs_woco_factuur_bron,
|
||
marx_factuur_brontype,
|
||
prs_woco_adres_in_factuur,
|
||
prs_woco_uitval_versturen,
|
||
fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_boekdatum,
|
||
fin_factuur_datum,
|
||
fin_factuur_boekmaand,
|
||
fin_factuur_nr,
|
||
fin_factuur_betalingskenmerk,
|
||
fin_factuur_onderwerp,
|
||
prs_huurder_adres,
|
||
prs_huurder_postcode,
|
||
prs_huurder_plaats,
|
||
fin_factuur_bestand,
|
||
fin_factuur_upload_bestand,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
fin_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
fin_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_bedrijf_plaats,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_axnr,
|
||
prs_bedrijf_bankbic,
|
||
prs_bedrijf_banknaam,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bankreknr,
|
||
prs_bedrijf_bankreknr2,
|
||
fin_factuur_iban,
|
||
prs_bedrijf_kvknr,
|
||
fin_factuur_kvknr,
|
||
prs_bedrijf_btwnr,
|
||
fin_factuur_btwnr,
|
||
fin_factuur_afleverdatum,
|
||
fin_factuur_autoincasso,
|
||
fin_factuurregel_totaal,
|
||
fin_factuurregel_btw,
|
||
fin_factuurregel_btw_perc,
|
||
fin_btwtabelwaarde_btwcode,
|
||
fin_btwtabelwaarde_verlegd,
|
||
fin_factuurregel_nr,
|
||
fin_factuurregel_id,
|
||
fin_factuurregel_code,
|
||
fin_factuurregel_aantal,
|
||
fin_factuurregel_eenheid,
|
||
fin_factuurregel_omschrijving,
|
||
fin_factuurregel_referentie,
|
||
fin_factregel_additionele_info,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_ext_levnr,
|
||
prs_kostensoort_refcode,
|
||
prs_kostenplaats_nr,
|
||
prs_bedrijf_bedrijf_account2,
|
||
prs_bedrijf_g_bankreknr,
|
||
prs_bedrijf_g_bankreknr2,
|
||
fin_factuur_g_iban,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_aanmaak
|
||
)
|
||
AS
|
||
SELECT DISTINCT
|
||
woco.prs_perslid_key,
|
||
woco.prs_perslid_key,
|
||
woco.prs_perslid_apikey,
|
||
woco.prs_bedrijf_naam,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
woco.prs_bedrijf_bezoek_adres,
|
||
woco.prs_bedrijf_bezoek_postcode,
|
||
woco.prs_bedrijf_bezoek_plaats,
|
||
woco.prs_leverancier_nr,
|
||
COALESCE (
|
||
(SELECT mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 17 AND ko.mld_kenmerkopdr_verwijder IS NULL),
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
woco.prs_overeenkomst_nr,
|
||
'1'),
|
||
(SELECT prs_bedrijf_close_opdracht
|
||
FROM mar_v_bedrijf_kenmerken bc
|
||
WHERE bc.prs_bedrijf_key = woco.prs_bedrijf_key),
|
||
(SELECT factuurbron
|
||
FROM mar_v_bedrijf_factuurbron fp
|
||
WHERE fp.prs_bedrijf_key = woco.prs_bedrijf_key),
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
0
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 2,
|
||
'2', 3,
|
||
1)
|
||
END marx_factuur_brontype,
|
||
(SELECT prs_bedrijf_adres_in_factuur
|
||
FROM mar_v_bedrijf_kenmerken bc
|
||
WHERE bc.prs_bedrijf_key = woco.prs_bedrijf_key),
|
||
(SELECT uitv.prs_bedrijf_uitval_versturen
|
||
FROM mar_v_bedrijf_uitval_versturen uitv
|
||
WHERE uitv.prs_bedrijf_key = woco.prs_bedrijf_key),
|
||
f.fin_factuur_key,
|
||
(SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
FROM mld_melding m,
|
||
mld_stdmelding std,
|
||
ins_tab_discipline d,
|
||
ins_srtdiscipline sd
|
||
WHERE m.mld_melding_key = o.mld_melding_key
|
||
AND m.mld_stdmelding_key = std.mld_stdmelding_key
|
||
AND std.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key)
|
||
opdracht_id,
|
||
TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
|
||
TO_CHAR (f.fin_factuur_datum, 'DD-MM-YYYY'),
|
||
f.fin_factuur_boekmaand,
|
||
f.fin_factuur_nr,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 24
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL)
|
||
fin_factuur_betalingskenmerk,
|
||
(SELECT fin_factuur_onderwerp
|
||
FROM mar_v_factuur_onderwerp
|
||
WHERE fin_factuur_key = f.fin_factuur_key)
|
||
fin_factuur_onderwerp,
|
||
mk.adres,
|
||
mk.postcode,
|
||
mk.plaats,
|
||
fb.fin_factuur_bestand,
|
||
fbu.fin_factuur_upload_bestand,
|
||
b_o.prs_bedrijf_key
|
||
prs_bedrijf_key,
|
||
b_o.prs_bedrijf_naam
|
||
prs_bedrijf_naam,
|
||
(SELECT fin_factuur_naam_lev
|
||
FROM mar_v_factuur_naam_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_o.prs_bedrijf_bezoek_adres
|
||
prs_bedrijf_bezoek_adres,
|
||
(SELECT fin_factuur_adres_lev
|
||
FROM mar_v_factuur_adres_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_o.prs_bedrijf_bezoek_postcode
|
||
prs_bedrijf_bezoek_postcode,
|
||
(SELECT fin_factuur_postcode_lev
|
||
FROM mar_v_factuur_postcode_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_o.prs_bedrijf_bezoek_plaats
|
||
prs_bedrijf_bezoek_plaats,
|
||
(SELECT fin_factuur_plaats_lev
|
||
FROM mar_v_factuur_plaats_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_leverancier_nr
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT MAX (l_ax_supplier_id)
|
||
FROM mar_v_woco_x_lev
|
||
WHERE w_prs_bedrijf_key = woco.prs_bedrijf_key AND l_prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bankbic
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_banknaam
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bedrijf_account1
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = woco.prs_bedrijf_key AND prs_bedrijf_key2 = b_o.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = b_o.prs_leverancier_nr),
|
||
(SELECT fin_factuur_iban
|
||
FROM mar_v_factuur_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_kvknr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT fin_factuur_kvknr
|
||
FROM mar_v_factuur_kvknr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_btwnr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT fin_factuur_btwnr
|
||
FROM mar_v_factuur_btwnr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_afleverdatum
|
||
FROM mar_v_factuur_afleverdatum
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_autoincasso
|
||
FROM mar_v_factuur_autoincasso
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
fr.fin_factuurregel_totaal,
|
||
fr.fin_factuurregel_btw,
|
||
btw.fin_btwtabelwaarde_perc,
|
||
btw.fin_btwtabelwaarde_code,
|
||
COALESCE (btw.fin_btwtabelwaarde_verlegd, 0),
|
||
fr.fin_factuurregel_nr,
|
||
fr.fin_factuurregel_id,
|
||
fr.fin_factuurregel_code,
|
||
fr.fin_factuurregel_aantal,
|
||
fr.fin_factuurregel_eenheid,
|
||
fr.fin_factuurregel_omschrijving,
|
||
fr.fin_factuurregel_referentie,
|
||
(SELECT fin_factregel_additionele_info
|
||
FROM mar_v_factregel_addit_info
|
||
WHERE fin_factuurregel_key = fr.fin_factuurregel_key),
|
||
f.fin_factuur_debiteur_nr,
|
||
COALESCE (o.mld_opdr_id, fopdr.fin_factuur_opdnr),
|
||
b_o.prs_leverancier_nr,
|
||
COALESCE (ks_regel.prs_kostensoort_refcode, ks.prs_kostensoort_refcode),
|
||
kp_o.prs_kostenplaats_nr
|
||
prs_kostenplaats_nr,
|
||
(SELECT prs_bedrijf_bedrijf_account2
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = woco.prs_bedrijf_key AND prs_bedrijf_key2 = b_o.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_g_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_o.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_g_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = b_o.prs_leverancier_nr),
|
||
(SELECT fin_factuur_g_iban
|
||
FROM mar_v_factuur_g_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
f.fin_factuur_gbedrag,
|
||
NULL
|
||
bes_opdr_key,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
NULL
|
||
cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
f.fin_factuur_opmerking,
|
||
fac.gettrackingdate ('FINNEW', f.fin_factuur_key)
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur versturen_okee,
|
||
mar_v_factuur_bestand fb,
|
||
mar_v_factuur_bestand_upload fbu,
|
||
mar_v_factuur_externe_opdnr fopdr,
|
||
fin_factuurregel fr,
|
||
fin_btwtabelwaarde btw,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_mldkenmerken mk,
|
||
mar_v_woco_perslid woco,
|
||
mld_typeopdr ot,
|
||
prs_bedrijf b_o,
|
||
prs_kostensoort ks,
|
||
prs_kostensoort ks_regel,
|
||
prs_kostenplaats kp_o
|
||
WHERE f.fin_factuur_key = fr.fin_factuur_key
|
||
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
|
||
AND f.fin_factuur_key = fb.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fbu.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fopdr.fin_factuur_key(+)
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND f.cnt_contract_key IS NULL
|
||
AND f.mld_opdr_key = o.mld_opdr_key(+)
|
||
AND o.mld_melding_key = m.mld_melding_key(+)
|
||
AND m.mld_melding_key = mk.mld_melding_key(+)
|
||
AND m.prs_perslid_key = woco.prs_perslid_key(+)
|
||
AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key(+)
|
||
AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
|
||
AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
|
||
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
|
||
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
|
||
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 fin_factuur_statuses_key IN (2, 6, 3)
|
||
AND fin_factuur_externsyncdate IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_mld_factuur_ax_sync
|
||
AS
|
||
SELECT DISTINCT f.*
|
||
FROM mar_v_mld_factuur_ax f, fac_tracking t, fac_srtnotificatie sn
|
||
WHERE 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 = f.prs_perslid_key))
|
||
AND (t.fac_tracking_key <= (SELECT sync_trackkey_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = f.prs_perslid_key)))
|
||
OR (sn.fac_srtnotificatie_code = 'CUST04'))
|
||
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur';
|
||
|
||
CREATE OR REPLACE VIEW mar_v_cnt_factuur_ax
|
||
(
|
||
prs_perslid_key,
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
prs_woco_naam,
|
||
prs_woco_naam_recognition,
|
||
prs_woco_adres,
|
||
prs_woco_postcode,
|
||
prs_woco_plaats,
|
||
prs_woco_gln,
|
||
prs_woco_axnr,
|
||
prs_woco_close_opdracht,
|
||
prs_woco_factuur_bron,
|
||
marx_factuur_brontype,
|
||
prs_woco_adres_in_factuur,
|
||
prs_woco_uitval_versturen,
|
||
fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_boekdatum,
|
||
fin_factuur_datum,
|
||
fin_factuur_boekmaand,
|
||
fin_factuur_nr,
|
||
fin_factuur_betalingskenmerk,
|
||
fin_factuur_onderwerp,
|
||
prs_huurder_adres,
|
||
prs_huurder_postcode,
|
||
prs_huurder_plaats,
|
||
fin_factuur_bestand,
|
||
fin_factuur_upload_bestand,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
fin_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
fin_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_bedrijf_plaats,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_axnr,
|
||
prs_bedrijf_bankbic,
|
||
prs_bedrijf_banknaam,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bankreknr,
|
||
prs_bedrijf_bankreknr2,
|
||
fin_factuur_iban,
|
||
prs_bedrijf_kvknr,
|
||
fin_factuur_kvknr,
|
||
prs_bedrijf_btwnr,
|
||
fin_factuur_btwnr,
|
||
fin_factuur_afleverdatum,
|
||
fin_factuur_autoincasso,
|
||
fin_factuurregel_totaal,
|
||
fin_factuurregel_btw,
|
||
fin_factuurregel_btw_perc,
|
||
fin_btwtabelwaarde_btwcode,
|
||
fin_btwtabelwaarde_verlegd,
|
||
fin_factuurregel_nr,
|
||
fin_factuurregel_id,
|
||
fin_factuurregel_code,
|
||
fin_factuurregel_aantal,
|
||
fin_factuurregel_eenheid,
|
||
fin_factuurregel_omschrijving,
|
||
fin_factuurregel_referentie,
|
||
fin_factregel_additionele_info,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_ext_levnr,
|
||
prs_kostensoort_refcode,
|
||
prs_kostenplaats_nr,
|
||
prs_bedrijf_bedrijf_account2,
|
||
prs_bedrijf_g_bankreknr,
|
||
prs_bedrijf_g_bankreknr2,
|
||
fin_factuur_g_iban,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_aanmaak
|
||
)
|
||
AS
|
||
SELECT DISTINCT COALESCE (woco3.prs_perslid_key, woco2.prs_perslid_key),
|
||
COALESCE (woco3.prs_perslid_key, woco2.prs_perslid_key),
|
||
COALESCE (woco3.prs_perslid_apikey, woco2.prs_perslid_apikey),
|
||
COALESCE (woco3.prs_bedrijf_naam, woco2.prs_bedrijf_naam),
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
COALESCE (woco3.prs_bedrijf_bezoek_adres, woco2.prs_bedrijf_bezoek_adres),
|
||
COALESCE (woco3.prs_bedrijf_bezoek_postcode, woco2.prs_bedrijf_bezoek_postcode),
|
||
COALESCE (woco3.prs_bedrijf_bezoek_plaats, woco2.prs_bedrijf_bezoek_plaats),
|
||
COALESCE (woco3.prs_leverancier_nr, woco2.prs_leverancier_nr),
|
||
COALESCE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
b_c.PRS_OVEREENKOMST_NR,
|
||
woco3.prs_overeenkomst_nr,
|
||
woco2.prs_overeenkomst_nr,
|
||
'1'),
|
||
0,
|
||
(SELECT factuurbron
|
||
FROM mar_v_bedrijf_factuurbron fp
|
||
WHERE fp.prs_bedrijf_key = COALESCE (woco3.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
0
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 2,
|
||
'2', 3,
|
||
1)
|
||
END marx_factuur_brontype,
|
||
0,
|
||
(SELECT uitv.prs_bedrijf_uitval_versturen
|
||
FROM mar_v_bedrijf_uitval_versturen uitv
|
||
WHERE uitv.prs_bedrijf_key = COALESCE (woco3.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
f.fin_factuur_key,
|
||
COALESCE (TO_CHAR (c.cnt_contract_nummer), 'C' || TO_CHAR (c.cnt_contract_key))
|
||
opdracht_id,
|
||
TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
|
||
TO_CHAR (f.fin_factuur_datum, 'DD-MM-YYYY'),
|
||
f.fin_factuur_boekmaand,
|
||
f.fin_factuur_nr,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 24
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL)
|
||
fin_factuur_betalingskenmerk,
|
||
(SELECT fin_factuur_onderwerp
|
||
FROM mar_v_factuur_onderwerp
|
||
WHERE fin_factuur_key = f.fin_factuur_key)
|
||
fin_factuur_onderwerp,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
fb.fin_factuur_bestand,
|
||
fbu.fin_factuur_upload_bestand,
|
||
b_c.prs_bedrijf_key
|
||
prs_bedrijf_key,
|
||
b_c.prs_bedrijf_naam
|
||
prs_bedrijf_naam,
|
||
(SELECT fin_factuur_naam_lev
|
||
FROM mar_v_factuur_naam_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_c.prs_bedrijf_bezoek_adres
|
||
prs_bedrijf_bezoek_adres,
|
||
(SELECT fin_factuur_adres_lev
|
||
FROM mar_v_factuur_adres_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_c.prs_bedrijf_bezoek_postcode
|
||
prs_bedrijf_bezoek_postcode,
|
||
(SELECT fin_factuur_postcode_lev
|
||
FROM mar_v_factuur_postcode_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_c.prs_bedrijf_bezoek_plaats
|
||
prs_bedrijf_bezoek_plaats,
|
||
(SELECT fin_factuur_plaats_lev
|
||
FROM mar_v_factuur_plaats_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_leverancier_nr
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
NULL,
|
||
(SELECT prs_bedrijf_bankbic
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_banknaam
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bedrijf_account1
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = COALESCE (woco3.prs_bedrijf_key, woco2.prs_bedrijf_key) AND prs_bedrijf_key2 = b_c.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = COALESCE (b_c.prs_leverancier_nr, flev.fin_factuur_levnr)),
|
||
(SELECT fin_factuur_iban
|
||
FROM mar_v_factuur_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_kvknr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT fin_factuur_kvknr
|
||
FROM mar_v_factuur_kvknr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_btwnr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT fin_factuur_btwnr
|
||
FROM mar_v_factuur_btwnr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_afleverdatum
|
||
FROM mar_v_factuur_afleverdatum
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_autoincasso
|
||
FROM mar_v_factuur_autoincasso
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
fr.fin_factuurregel_totaal,
|
||
fr.fin_factuurregel_btw,
|
||
btw.fin_btwtabelwaarde_perc,
|
||
btw.fin_btwtabelwaarde_code,
|
||
COALESCE (btw.fin_btwtabelwaarde_verlegd, 0),
|
||
fr.fin_factuurregel_nr,
|
||
fr.fin_factuurregel_id,
|
||
fr.fin_factuurregel_code,
|
||
fr.fin_factuurregel_aantal,
|
||
fr.fin_factuurregel_eenheid,
|
||
fr.fin_factuurregel_omschrijving,
|
||
fr.fin_factuurregel_referentie,
|
||
(SELECT fin_factregel_additionele_info
|
||
FROM mar_v_factregel_addit_info
|
||
WHERE fin_factuurregel_key = fr.fin_factuurregel_key),
|
||
f.fin_factuur_debiteur_nr,
|
||
fopdr.fin_factuur_opdnr,
|
||
COALESCE (b_c.prs_leverancier_nr, flev.fin_factuur_levnr),
|
||
COALESCE (ks_regel.prs_kostensoort_refcode, ks.prs_kostensoort_refcode),
|
||
kp_c.prs_kostenplaats_nr
|
||
prs_kostenplaats_nr,
|
||
(SELECT prs_bedrijf_bedrijf_account2
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = COALESCE (woco3.prs_bedrijf_key, woco2.prs_bedrijf_key) AND prs_bedrijf_key2 = b_c.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_g_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b_c.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_g_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = COALESCE (b_c.prs_leverancier_nr, flev.fin_factuur_levnr)),
|
||
(SELECT fin_factuur_g_iban
|
||
FROM mar_v_factuur_g_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
f.fin_factuur_gbedrag,
|
||
NULL
|
||
bes_opdr_key,
|
||
NULL
|
||
mld_opdr_key,
|
||
NULL
|
||
mld_opdr_id,
|
||
NULL
|
||
mld_opdr_ordernr,
|
||
c.cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
f.fin_factuur_opmerking,
|
||
fac.gettrackingdate ('FINNEW', f.fin_factuur_key)
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur versturen_okee,
|
||
mar_v_factuur_bestand fb,
|
||
mar_v_factuur_bestand_upload fbu,
|
||
mar_v_factuur_externe_opdnr fopdr,
|
||
mar_v_factuur_externe_levnr flev,
|
||
mar_v_factuur_externe_woconr fwoco,
|
||
fin_factuurregel fr,
|
||
fin_btwtabelwaarde btw,
|
||
mar_v_woco_perslid woco2,
|
||
mar_v_woco_perslid woco3,
|
||
cnt_contract c,
|
||
prs_bedrijf b_c,
|
||
prs_afdeling a,
|
||
prs_kostensoort ks,
|
||
prs_kostensoort ks_regel,
|
||
prs_kostenplaats kp_c
|
||
WHERE f.fin_factuur_key = fr.fin_factuur_key
|
||
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
|
||
AND f.fin_factuur_key = fb.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fbu.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fopdr.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = flev.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fwoco.fin_factuur_key(+)
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND f.mld_opdr_key IS NULL
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND fwoco.fin_factuur_woconr = woco2.prs_leverancier_nr(+)
|
||
AND f.cnt_contract_key = c.cnt_contract_key(+)
|
||
AND c.prs_afdeling_key_eig = a.prs_afdeling_key(+)
|
||
AND a.prs_bedrijf_key = woco3.prs_bedrijf_key(+)
|
||
AND woco3.prs_perslid_apikey(+) IS NOT NULL
|
||
AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
|
||
AND c.prs_kostenplaats_key = kp_c.prs_kostenplaats_key(+)
|
||
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
|
||
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
|
||
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 fin_factuur_statuses_key IN (2, 6, 3)
|
||
AND fin_factuur_externsyncdate IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_cnt_factuur_ax_sync
|
||
AS
|
||
SELECT DISTINCT f.*
|
||
FROM mar_v_cnt_factuur_ax f, fac_tracking t, fac_srtnotificatie sn
|
||
WHERE 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 = f.prs_perslid_key))
|
||
AND (t.fac_tracking_key <= (SELECT sync_trackkey_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = f.prs_perslid_key)))
|
||
OR (sn.fac_srtnotificatie_code = 'CUST04'))
|
||
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur';
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bes_factuur_ax
|
||
(
|
||
prs_perslid_key,
|
||
FCLT_3D_USER_KEY,
|
||
prs_perslid_apikey,
|
||
prs_woco_naam,
|
||
prs_woco_naam_recognition,
|
||
prs_woco_adres,
|
||
prs_woco_postcode,
|
||
prs_woco_plaats,
|
||
prs_woco_gln,
|
||
prs_woco_axnr,
|
||
prs_woco_close_opdracht,
|
||
prs_woco_factuur_bron,
|
||
marx_factuur_brontype,
|
||
prs_woco_adres_in_factuur,
|
||
prs_woco_uitval_versturen,
|
||
fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_boekdatum,
|
||
fin_factuur_datum,
|
||
fin_factuur_boekmaand,
|
||
fin_factuur_nr,
|
||
fin_factuur_betalingskenmerk,
|
||
fin_factuur_onderwerp,
|
||
prs_huurder_adres,
|
||
prs_huurder_postcode,
|
||
prs_huurder_plaats,
|
||
fin_factuur_bestand,
|
||
fin_factuur_upload_bestand,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
fin_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
fin_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_bedrijf_plaats,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_axnr,
|
||
prs_bedrijf_bankbic,
|
||
prs_bedrijf_banknaam,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bankreknr,
|
||
prs_bedrijf_bankreknr2,
|
||
fin_factuur_iban,
|
||
prs_bedrijf_kvknr,
|
||
fin_factuur_kvknr,
|
||
prs_bedrijf_btwnr,
|
||
fin_factuur_btwnr,
|
||
fin_factuur_afleverdatum,
|
||
fin_factuur_autoincasso,
|
||
fin_factuurregel_totaal,
|
||
fin_factuurregel_btw,
|
||
fin_factuurregel_btw_perc,
|
||
fin_btwtabelwaarde_btwcode,
|
||
fin_btwtabelwaarde_verlegd,
|
||
fin_factuurregel_nr,
|
||
fin_factuurregel_id,
|
||
fin_factuurregel_code,
|
||
fin_factuurregel_aantal,
|
||
fin_factuurregel_eenheid,
|
||
fin_factuurregel_omschrijving,
|
||
fin_factuurregel_referentie,
|
||
fin_factregel_additionele_info,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_ext_levnr,
|
||
prs_kostensoort_refcode,
|
||
prs_kostenplaats_nr,
|
||
prs_bedrijf_bedrijf_account2,
|
||
prs_bedrijf_g_bankreknr,
|
||
prs_bedrijf_g_bankreknr2,
|
||
fin_factuur_g_iban,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_aanmaak
|
||
)
|
||
AS
|
||
SELECT DISTINCT COALESCE (woco.prs_perslid_key, woco2.prs_perslid_key),
|
||
COALESCE (woco.prs_perslid_key, woco2.prs_perslid_key),
|
||
COALESCE (woco.prs_perslid_apikey, woco2.prs_perslid_apikey),
|
||
COALESCE (woco.prs_bedrijf_naam, woco2.prs_bedrijf_naam),
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
COALESCE (woco.prs_bedrijf_bezoek_adres, woco2.prs_bedrijf_bezoek_adres),
|
||
COALESCE (woco.prs_bedrijf_bezoek_postcode, woco2.prs_bedrijf_bezoek_postcode),
|
||
COALESCE (woco.prs_bedrijf_bezoek_plaats, woco2.prs_bedrijf_bezoek_plaats),
|
||
COALESCE (woco.prs_leverancier_nr, woco2.prs_leverancier_nr),
|
||
COALESCE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 25 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
woco.prs_overeenkomst_nr,
|
||
woco2.prs_overeenkomst_nr,
|
||
'1'),
|
||
(SELECT prs_bedrijf_close_opdracht
|
||
FROM mar_v_bedrijf_kenmerken bc
|
||
WHERE bc.prs_bedrijf_key = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
(SELECT factuurbron
|
||
FROM mar_v_bedrijf_factuurbron fp
|
||
WHERE fp.prs_bedrijf_key = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
0
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 2,
|
||
'2', 3,
|
||
1)
|
||
END marx_factuur_brontype,
|
||
(SELECT prs_bedrijf_adres_in_factuur
|
||
FROM mar_v_bedrijf_kenmerken bc
|
||
WHERE bc.prs_bedrijf_key = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
(SELECT uitv.prs_bedrijf_uitval_versturen
|
||
FROM mar_v_bedrijf_uitval_versturen uitv
|
||
WHERE uitv.prs_bedrijf_key = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key)),
|
||
f.fin_factuur_key,
|
||
bo.bes_bestelopdr_id
|
||
opdracht_id,
|
||
TO_CHAR (SYSDATE, 'DD-MM-YYYY'),
|
||
TO_CHAR (f.fin_factuur_datum, 'DD-MM-YYYY'),
|
||
f.fin_factuur_boekmaand,
|
||
f.fin_factuur_nr,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 24
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL)
|
||
fin_factuur_betalingskenmerk,
|
||
(SELECT fin_factuur_onderwerp
|
||
FROM mar_v_factuur_onderwerp
|
||
WHERE fin_factuur_key = f.fin_factuur_key)
|
||
fin_factuur_onderwerp,
|
||
bk.adres,
|
||
bk.postcode,
|
||
bk.plaats,
|
||
fb.fin_factuur_bestand,
|
||
fbu.fin_factuur_upload_bestand,
|
||
b.prs_bedrijf_key,
|
||
b.prs_bedrijf_naam,
|
||
(SELECT fin_factuur_naam_lev
|
||
FROM mar_v_factuur_naam_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b.prs_bedrijf_bezoek_adres
|
||
prs_bedrijf_bezoek_adres,
|
||
(SELECT fin_factuur_adres_lev
|
||
FROM mar_v_factuur_adres_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b.prs_bedrijf_bezoek_postcode
|
||
prs_bedrijf_bezoek_postcode,
|
||
(SELECT fin_factuur_postcode_lev
|
||
FROM mar_v_factuur_postcode_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b.prs_bedrijf_bezoek_plaats
|
||
prs_bedrijf_bezoek_plaats,
|
||
(SELECT fin_factuur_plaats_lev
|
||
FROM mar_v_factuur_plaats_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b.prs_leverancier_nr,
|
||
NULL,
|
||
(SELECT prs_bedrijf_bankbic
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_banknaam
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bedrijf_account1
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key) AND prs_bedrijf_key2 = b.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = COALESCE (b.prs_leverancier_nr, flev.fin_factuur_levnr)),
|
||
(SELECT fin_factuur_iban
|
||
FROM mar_v_factuur_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_kvknr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT fin_factuur_kvknr
|
||
FROM mar_v_factuur_kvknr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT prs_bedrijf_btwnr
|
||
FROM mar_v_bedrijf_kvk_btw_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT fin_factuur_btwnr
|
||
FROM mar_v_factuur_btwnr
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_afleverdatum
|
||
FROM mar_v_factuur_afleverdatum
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
(SELECT fin_factuur_autoincasso
|
||
FROM mar_v_factuur_autoincasso
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
fr.fin_factuurregel_totaal,
|
||
fr.fin_factuurregel_btw,
|
||
btw.fin_btwtabelwaarde_perc,
|
||
btw.fin_btwtabelwaarde_code,
|
||
COALESCE (btw.fin_btwtabelwaarde_verlegd, 0),
|
||
fr.fin_factuurregel_nr,
|
||
fr.fin_factuurregel_id,
|
||
fr.fin_factuurregel_code,
|
||
fr.fin_factuurregel_aantal,
|
||
fr.fin_factuurregel_eenheid,
|
||
fr.fin_factuurregel_omschrijving,
|
||
fr.fin_factuurregel_referentie,
|
||
(SELECT fin_factregel_additionele_info
|
||
FROM mar_v_factregel_addit_info
|
||
WHERE fin_factuurregel_key = fr.fin_factuurregel_key),
|
||
f.fin_factuur_debiteur_nr,
|
||
COALESCE (bk.ionr, fopdr.fin_factuur_opdnr),
|
||
COALESCE (b.prs_leverancier_nr, flev.fin_factuur_levnr),
|
||
COALESCE (ks_regel.prs_kostensoort_refcode, ks.prs_kostensoort_refcode),
|
||
kp.prs_kostenplaats_nr
|
||
prs_kostenplaats_nr,
|
||
(SELECT prs_bedrijf_bedrijf_account2
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = COALESCE (woco.prs_bedrijf_key, woco2.prs_bedrijf_key) AND prs_bedrijf_key2 = b.prs_bedrijf_key),
|
||
(SELECT prs_bedrijf_g_bankreknr
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key),
|
||
(SELECT MAX (prs_bedrijf_g_bankreknr)
|
||
FROM mar_v_bedrijf_bankrek_nr
|
||
WHERE prs_leverancier_nr = COALESCE (b.prs_leverancier_nr, flev.fin_factuur_levnr)),
|
||
(SELECT fin_factuur_g_iban
|
||
FROM mar_v_factuur_g_iban
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
f.fin_factuur_gbedrag,
|
||
bo.bes_bestelopdr_key,
|
||
NULL
|
||
mld_opdr_key,
|
||
bk.ionr
|
||
mld_opdr_id,
|
||
NULL
|
||
mld_opdr_ordernr,
|
||
NULL
|
||
cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
f.fin_factuur_opmerking,
|
||
fac.gettrackingdate ('FINNEW', f.fin_factuur_key)
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur versturen_okee,
|
||
mar_v_factuur_bestand fb,
|
||
mar_v_factuur_bestand_upload fbu,
|
||
mar_v_factuur_externe_opdnr fopdr,
|
||
mar_v_factuur_externe_levnr flev,
|
||
mar_v_factuur_externe_woconr fwoco,
|
||
fin_factuurregel fr,
|
||
fin_btwtabelwaarde btw,
|
||
bes_bestelopdr bo,
|
||
bes_bestelling b,
|
||
mar_v_beskenmerken bk,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_woco_perslid woco2,
|
||
prs_bedrijf b,
|
||
prs_kostensoort ks,
|
||
prs_kostensoort ks_regel,
|
||
prs_kostenplaats kp
|
||
WHERE f.fin_factuur_key = fr.fin_factuur_key
|
||
AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
|
||
AND f.fin_factuur_key = fb.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fbu.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fopdr.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = flev.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fwoco.fin_factuur_key(+)
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND f.mld_opdr_key IS NULL
|
||
AND f.cnt_contract_key IS NULL
|
||
AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
|
||
AND bo.bes_bestelopdr_key = bk.bes_bestelopdr_key(+)
|
||
AND bo.prs_perslid_key = woco.prs_perslid_key(+)
|
||
AND fwoco.fin_factuur_woconr = woco2.prs_leverancier_nr(+)
|
||
AND bk.bes_bestelling_key = b.bes_bestelling_key(+)
|
||
AND b.prs_kostenplaats_key = kp.prs_kostenplaats_key(+)
|
||
AND bo.prs_bedrijf_key = b.prs_bedrijf_key(+)
|
||
AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
|
||
AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
|
||
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 fin_factuur_statuses_key IN (2, 6, 3)
|
||
AND fin_factuur_externsyncdate IS NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_bes_factuur_ax_sync
|
||
AS
|
||
SELECT DISTINCT f.*
|
||
FROM mar_v_bes_factuur_ax f, fac_tracking t, fac_srtnotificatie sn
|
||
WHERE 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 = f.prs_perslid_key))
|
||
AND (t.fac_tracking_key <= (SELECT sync_trackkey_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = f.prs_perslid_key)))
|
||
OR (sn.fac_srtnotificatie_code = 'CUST04'))
|
||
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'factuur';
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_ax
|
||
AS
|
||
SELECT * FROM mar_v_mld_factuur_ax_sync
|
||
UNION ALL
|
||
SELECT * FROM mar_v_cnt_factuur_ax_sync
|
||
UNION ALL
|
||
SELECT * FROM mar_v_bes_factuur_ax_sync;
|
||
|
||
-- Let op: de te exporteren facturen naar Ax, zijn die facturen die door aannemer zijn ingevoerd (status = 2).
|
||
-- Ook de akkoord-facturen (status =6) ook laten meedoen (PF). Ook al komen ze in huidige implementatie niet voor, model-technisch is dit beter.
|
||
-- Stel dat er een akkoord volgens wijzigende instellingen wordt bereikt, dan moet die factuur mee (hoewel akkoord eigenlijk betekent: akkoord voor uitbetaling).
|
||
-- Na export naar AX (of beter gezegd de folder Xtractor) wordt de status van die facturen verwerkt (status 7).
|
||
--
|
||
-- 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)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_ax_export
|
||
AS
|
||
SELECT * FROM mar_v_factuur_ax;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_tobias_export
|
||
AS
|
||
SELECT * FROM mar_v_factuur_ax_export;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_ax_akkoord
|
||
AS
|
||
SELECT *
|
||
FROM mar_v_factuur_ax
|
||
WHERE fin_factuur_statuses_key = 6;
|
||
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon, nu ook notify-queue voor facturen
|
||
|
||
CREATE OR REPLACE VIEW marx_v_notifyqueue_factuur
|
||
(
|
||
fclt_3d_user_key,
|
||
fac_notificatie_key,
|
||
fac_srtnotificatie_key,
|
||
fac_srtnotificatie_code,
|
||
fac_notificatie_notbefore,
|
||
fac_tracking_datum,
|
||
prs_woco_naam,
|
||
prs_woco_naam_recognition,
|
||
prs_woco_adres,
|
||
prs_woco_postcode,
|
||
prs_woco_plaats,
|
||
prs_woco_gln,
|
||
prs_woco_axnr,
|
||
prs_woco_close_opdracht,
|
||
prs_woco_factuur_bron,
|
||
marx_factuur_brontype,
|
||
prs_woco_adres_in_factuur,
|
||
prs_woco_uitval_versturen,
|
||
fin_factuur_key,
|
||
opdracht_id,
|
||
fin_factuur_boekdatum,
|
||
fin_factuur_datum,
|
||
fin_factuur_boekmaand,
|
||
fin_factuur_nr,
|
||
fin_factuur_betalingskenmerk,
|
||
fin_factuur_onderwerp,
|
||
prs_huurder_adres,
|
||
prs_huurder_postcode,
|
||
prs_huurder_plaats,
|
||
fin_factuur_bestand,
|
||
fin_factuur_upload_bestand,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
fin_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
fin_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_bedrijf_plaats,
|
||
prs_leverancier_nr,
|
||
prs_bedrijf_axnr,
|
||
prs_bedrijf_bankbic,
|
||
prs_bedrijf_banknaam,
|
||
prs_bedrijf_bedrijf_account1,
|
||
prs_bedrijf_bankreknr,
|
||
prs_bedrijf_bankreknr2,
|
||
fin_factuur_iban,
|
||
prs_bedrijf_kvknr,
|
||
fin_factuur_kvknr,
|
||
prs_bedrijf_btwnr,
|
||
fin_factuur_btwnr,
|
||
fin_factuur_afleverdatum,
|
||
fin_factuur_autoincasso,
|
||
fin_factuurregel_totaal,
|
||
fin_factuurregel_btw,
|
||
fin_factuurregel_btw_perc,
|
||
fin_btwtabelwaarde_btwcode,
|
||
fin_btwtabelwaarde_verlegd,
|
||
fin_factuurregel_nr,
|
||
fin_factuurregel_id,
|
||
fin_factuurregel_code,
|
||
fin_factuurregel_aantal,
|
||
fin_factuurregel_eenheid,
|
||
fin_factuurregel_omschrijving,
|
||
fin_factuurregel_referentie,
|
||
fin_factregel_additionele_info,
|
||
fin_factuur_debiteur_nr,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_ext_levnr,
|
||
prs_kostensoort_refcode,
|
||
prs_kostenplaats_nr,
|
||
prs_bedrijf_bedrijf_account2,
|
||
prs_bedrijf_g_bankreknr,
|
||
prs_bedrijf_g_bankreknr2,
|
||
fin_factuur_g_iban,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_aanmaak
|
||
)
|
||
AS
|
||
SELECT f.prs_perslid_key,
|
||
q.fac_notificatie_key,
|
||
sn.fac_srtnotificatie_key,
|
||
q.fac_srtnotificatie_code,
|
||
q.fac_notificatie_notbefore,
|
||
q.fac_notificatie_datum,
|
||
f.prs_woco_naam,
|
||
f.prs_woco_naam_recognition,
|
||
f.prs_woco_adres,
|
||
f.prs_woco_postcode,
|
||
f.prs_woco_plaats,
|
||
f.prs_woco_gln,
|
||
f.prs_woco_axnr,
|
||
f.prs_woco_close_opdracht,
|
||
f.prs_woco_factuur_bron,
|
||
f.marx_factuur_brontype,
|
||
f.prs_woco_adres_in_factuur,
|
||
f.prs_woco_uitval_versturen,
|
||
f.fin_factuur_key,
|
||
f.opdracht_id,
|
||
f.fin_factuur_boekdatum,
|
||
f.fin_factuur_datum,
|
||
f.fin_factuur_boekmaand,
|
||
f.fin_factuur_nr,
|
||
f.fin_factuur_betalingskenmerk,
|
||
f.fin_factuur_onderwerp,
|
||
f.prs_huurder_adres,
|
||
f.prs_huurder_postcode,
|
||
f.prs_huurder_plaats,
|
||
f.fin_factuur_bestand,
|
||
f.fin_factuur_upload_bestand,
|
||
f.prs_bedrijf_key,
|
||
f.prs_bedrijf_naam,
|
||
f.fin_bedrijf_naam,
|
||
f.prs_bedrijf_adres,
|
||
f.fin_bedrijf_adres,
|
||
f.prs_bedrijf_postcode,
|
||
f.fin_bedrijf_postcode,
|
||
f.prs_bedrijf_plaats,
|
||
f.fin_bedrijf_plaats,
|
||
f.prs_leverancier_nr,
|
||
f.prs_bedrijf_axnr,
|
||
f.prs_bedrijf_bankbic,
|
||
f.prs_bedrijf_banknaam,
|
||
f.prs_bedrijf_bedrijf_account1,
|
||
f.prs_bedrijf_bankreknr,
|
||
f.prs_bedrijf_bankreknr2,
|
||
f.fin_factuur_iban,
|
||
f.prs_bedrijf_kvknr,
|
||
f.fin_factuur_kvknr,
|
||
f.prs_bedrijf_btwnr,
|
||
f.fin_factuur_btwnr,
|
||
f.fin_factuur_afleverdatum,
|
||
f.fin_factuur_autoincasso,
|
||
f.fin_factuurregel_totaal,
|
||
f.fin_factuurregel_btw,
|
||
f.fin_factuurregel_btw_perc,
|
||
f.fin_btwtabelwaarde_btwcode,
|
||
f.fin_btwtabelwaarde_verlegd,
|
||
f.fin_factuurregel_nr,
|
||
f.fin_factuurregel_id,
|
||
f.fin_factuurregel_code,
|
||
f.fin_factuurregel_aantal,
|
||
f.fin_factuurregel_eenheid,
|
||
f.fin_factuurregel_omschrijving,
|
||
f.fin_factuurregel_referentie,
|
||
f.fin_factregel_additionele_info,
|
||
f.fin_factuur_debiteur_nr,
|
||
f.fin_factuur_ext_opdnr,
|
||
f.fin_factuur_ext_levnr,
|
||
f.prs_kostensoort_refcode,
|
||
f.prs_kostenplaats_nr,
|
||
f.prs_bedrijf_bedrijf_account2,
|
||
f.prs_bedrijf_g_bankreknr,
|
||
f.prs_bedrijf_g_bankreknr2,
|
||
f.fin_factuur_g_iban,
|
||
f.fin_factuur_g_ammount,
|
||
f.bes_opdr_key,
|
||
f.mld_opdr_key,
|
||
f.mld_opdr_id,
|
||
f.mld_opdr_ordernr,
|
||
f.cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
f.fin_factuur_opmerking,
|
||
f.fin_factuur_aanmaak
|
||
FROM fac_v_notifyqueue q,
|
||
(SELECT * FROM mar_v_mld_factuur_ax
|
||
UNION ALL
|
||
SELECT * FROM mar_v_cnt_factuur_ax
|
||
UNION ALL
|
||
SELECT * FROM mar_v_bes_factuur_ax) f,
|
||
fac_srtnotificatie sn
|
||
WHERE BITAND (fac_notificatie_status, 64) = 64
|
||
AND q.fac_srtnotificatie_xmlnode = 'factuur'
|
||
AND sn.fac_srtnotificatie_code = q.fac_srtnotificatie_code
|
||
AND f.fin_factuur_key = q.fac_notificatie_refkey
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_v_notifyqueue q2
|
||
WHERE q2.fac_notificatie_refkey = q.fac_notificatie_refkey
|
||
AND BITAND (q2.fac_notificatie_status, 64) = 64
|
||
AND q2.fac_srtnotificatie_xmlnode = q.fac_srtnotificatie_xmlnode
|
||
AND q2.fac_notificatie_notbefore > SYSDATE);
|
||
|
||
|
||
-- MARX#74749 Mareon Sync heel traag na MARX23
|
||
-- Wanneer de Mareon SYNC een factuur heeft behandeld (en geen error is opgetreden), dan zetten we de externsyncdate (ten teken dat die succesvol langs de SYNC is geweest)
|
||
|
||
CREATE OR REPLACE FUNCTION mar_post_fin_externsyncdate (p_perslid_key IN NUMBER, p_fin_factuur_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'Geen autorisatie om factuur te wijzigen';
|
||
SELECT 1 / COALESCE(marx_prs_canchange_factuur (p_perslid_key, p_fin_factuur_key),0)
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
|
||
-- Factuur is door ERP opdrachtgever goed verwerkt
|
||
v_result := 'UPDATE factuur met fin_factuur_externsyncdate op sysdate is mislukt';
|
||
|
||
-- MARX#74749 Mareon Sync heel traag na MARX23: we gaan fin_factuur_externsyncdate zetten (ten teken dat door MAREON SYNC is verwerkt)
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_externsyncdate = SYSDATE
|
||
WHERE fin_factuur_key = p_fin_factuur_key;
|
||
|
||
COMMIT;
|
||
RETURN NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
RETURN v_result;
|
||
END;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#59862: Tobias 365 - Mareon
|
||
-- Nieuwe functie omdat deze code vanuit verschillende plekken aangeroepen kan worden....
|
||
|
||
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);
|
||
|
||
l_force_error NUMBER (10);
|
||
BEGIN
|
||
BEGIN
|
||
v_result := NULL;
|
||
|
||
v_result := 'Geen autorisatie om factuur te wijzigen';
|
||
SELECT 1 / COALESCE(marx_prs_canchange_factuur (p_perslid_key, p_fin_factuur_key),0)
|
||
INTO l_force_error
|
||
FROM DUAL;
|
||
|
||
IF (p_fin_factuur_succes_verwerkt = 1)
|
||
THEN
|
||
-- Factuur is door ERP opdrachtgever goed verwerkt
|
||
v_result := 'UPDATE factuur met status 7 is mislukt';
|
||
|
||
-- MARX#74749 Mareon Sync heel traag na MARX23: we gaan fin_factuur_externsyncdate zetten (ten teken dat door MAREON SYNC is verwerkt)
|
||
-- zodat we op de kolom 'fin_factuur_externsyncdate' een extra filter kunnen zetten, t.b.v. betere performance.
|
||
UPDATE fin_factuur
|
||
SET fin_factuur_statuses_key = 7, fin_factuur_externsyncdate = SYSDATE
|
||
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;
|
||
/
|
||
|
||
|
||
-- Nieuwe view voor notificatie job naar storingsadres wanneer ERP (Tobias/Facilitor/REMS/...) error geeft op verwerking van factuur...
|
||
|
||
CREATE OR REPLACE VIEW mar_v_noti_factuur_erp_error
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT NULL sender,
|
||
NULL receiver,
|
||
'Factuur ' || f.fin_factuur_key || ': fout bij verwerking in (ERP) systeem.',
|
||
sn.fac_srtnotificatie_code,
|
||
f.fin_factuur_key,
|
||
NULL,
|
||
NULL xsender,
|
||
sa.prs_bedrijf_mailadres xreceiver,
|
||
NULL,
|
||
NULL
|
||
FROM fin_factuur f,
|
||
fac_tracking t,
|
||
fac_srtnotificatie sn,
|
||
mar_v_bedrijf_storingmailadres sa,
|
||
mar_v_woco_perslid wp
|
||
WHERE f.fin_factuur_verwijder IS NULL
|
||
AND f.fin_factuur_statuses_key <> 7
|
||
AND t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST04'
|
||
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
|
||
AND wp.prs_perslid_key = t.prs_perslid_key
|
||
AND sa.prs_bedrijf_key = wp.prs_bedrijf_key
|
||
AND INSTR (sa.prs_bedrijf_mailadres, '@') > 0
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_tracking t
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'FINTRK'));
|
||
|
||
|
||
|
||
-- Algemeen: sync status...
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_import_ax_sync (p_import_key IN NUMBER)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
|
||
-- De importvelden:
|
||
v_ax_sync_mode VARCHAR2 (256);
|
||
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
-- 01 - Ax sync mode
|
||
fac.imp_getfield_nr (v_newline,
|
||
c_fielddelimitor,
|
||
1,
|
||
v_ax_sync_mode);
|
||
|
||
|
||
--
|
||
v_aanduiding := '[' || v_ax_sync_mode || '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_ax_sync_mode) = 'AXSYNC_MODE'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
IF (v_count_tot = 0)
|
||
THEN
|
||
-- Eemalig.
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige sync-code, moet 0 of 1 zijn';
|
||
v_ax_sync_mode := TRIM (v_ax_sync_mode);
|
||
|
||
INSERT INTO mar_imp_ax_sync (fac_import_key, sync_mode)
|
||
VALUES (p_import_key, v_ax_sync_mode);
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'AX Syncmode: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_import_ax_sync;
|
||
/
|
||
|
||
|
||
|
||
-- Parameters: p_prs_perslid_key is woco API-perslid
|
||
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
|
||
-- p_sync_mode heeft de volgende mogelijke waarden:
|
||
-- 0 = start van de sync
|
||
-- 1 = einde van de sync (alleen voor AX2009/2012)
|
||
-- 2 = einde van de sync (voor de rest zoals AX365//REMS/Facilitor/Itris/...)
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_ax_sync (p_prs_perslid_key IN NUMBER, p_sync_mode IN VARCHAR, p_import_key NUMBER DEFAULT NULL)
|
||
IS
|
||
CURSOR c_exporteerde_facturen (p_prs_perslid_key NUMBER)
|
||
IS
|
||
SELECT DISTINCT fin_factuur_key,
|
||
prs_woco_uitval_versturen,
|
||
fin_factuur_statuses_key,
|
||
mld_opdr_key,
|
||
cnt_contract_key,
|
||
bes_opdr_key,
|
||
prs_perslid_key,
|
||
prs_woco_close_opdracht
|
||
FROM mar_v_factuur_ax_export
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
|
||
v_woco_prs_bedrijf_key NUMBER (10);
|
||
v_datum_logfile VARCHAR2 (100);
|
||
v_overrule_now NUMBER (10);
|
||
|
||
c_fac_usrtab_key NUMBER (10);
|
||
BEGIN
|
||
-- SYSTEM TABEL als usertabel met harde key 1.
|
||
c_fac_usrtab_key := 1;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
v_errorhint :=
|
||
'Opdrachtgever van API-import ' || p_import_key || ' niet gevonden, de synchronisatietijden zijn niet aangepast';
|
||
|
||
-- MARX#54452: Reset na upload van logfile "sync adapter": bepaald woco (prs_bedrijf_key) die synct.
|
||
SELECT prs_bedrijf_key
|
||
INTO v_woco_prs_bedrijf_key
|
||
FROM mar_v_woco_perslid
|
||
WHERE prs_perslid_key = p_prs_perslid_key;
|
||
|
||
-- MARX#54452: $MAR_SYNC_SHRINK_NOW: Eventuele overrule van NOW en bijbehorende max tracking-key.
|
||
-- v_overrule_now wordt uitgedrukt in seconden, en now wordt hieronder dan gelijk aan laatste sync-time + v_overrule_now
|
||
SELECT COALESCE (fac.safe_to_number (MAX (prs_kenmerklink_waarde)), 7 * 24 * 60 * 60)
|
||
INTO v_overrule_now
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_woco_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 57
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF (p_sync_mode IS NOT NULL)
|
||
THEN
|
||
IF (p_sync_mode = '0')
|
||
THEN
|
||
-- Start sync, de datum van nu registreren, maar indien de delta tijd tussen de laatste sync en nu te groot is, dan in stappen van 7 dagen synchroniseren
|
||
-- Hiermee voorkomen we dat de sync veeeel te grote XML's met gegevens bevat, waarmee timeouts en andere performanceproblemen worden vermeden...
|
||
UPDATE fac_usrdata
|
||
SET fac_usrdata_omschr =
|
||
(SELECT TO_CHAR (LEAST (SYSDATE, sync_date_lasttime + (v_overrule_now / (24 * 60 * 60))),
|
||
'DD-MM-YYYY HH24:MI:SS')
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = p_prs_perslid_key)
|
||
WHERE fac_usrtab_key = c_fac_usrtab_key
|
||
AND fac_usrdata_upper = UPPER ('$SYNC_DATE_NOW' || '_' || p_prs_perslid_key)
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
|
||
COMMIT;
|
||
|
||
-- Bepaal het maximum van de tracking_key t/m waar de sync wordt uitgevoerd, indien de sync een hele tijd niet gedraaid heeft, dan is de max trackkey 7 dagen na de laatste sync, totdat die weer bij is.
|
||
-- Hiermee voorkomen we dat de sync veeeel te grote XML's met gegevens bevat, waarmee timeouts en andere performanceproblemen worden vermeden...
|
||
-- NB: sync_date_now is zojuist hierboven, i nde vorige update, gezet.
|
||
|
||
-- MARX#54452: $MAR_SYNC_SHRINK_NOW: we moeten de ORDAFM tracking uitsluiten want die verstoren de juiste beeld.
|
||
-- Facilitor gebruikt hier namelijk in trackingdatum een antedateren datum voor wanneer de opdracht eigenlijk gereed was, dus 2 datums in 1 veld , dat werkt hier niet.
|
||
-- Je krijgt dan alsnog een foute max tracking-key...
|
||
-- Is niet erg dat we ORDAFM's altijd uitsluiten, die komt de volgende sync vanzelf aan de beurt.
|
||
-- Ook blijkt dat met een ORDAFM vanuit API (dus externe aanroep) een bijbehorende ORDUPD tracking wordt toegevoegd, met dezelfde timestamp van gereedmelding opdracht, en niet het moment waarop dit gebeurd.
|
||
-- Door deze (in mijn ogen) fout in Facilitor moeten we hierop ook gaan corrigeren. Er wordt in ORDUPD gezegd "Opdracht is gewijzigd door extern systeem",
|
||
-- Moment van tracken wordt hier niet gebruikt maar de datum waarop de opdracht gereed zou zijn gekomen (kan in verleden liggen)
|
||
|
||
-- MARX#64838: performance verbetering cq. gebruik maken van primary key index door extra AND conditie erbij te plaatsen bij ophalen max fac_tracking_key...
|
||
UPDATE fac_usrdata
|
||
SET fac_usrdata_omschr =
|
||
(SELECT MAX (fac_tracking_key)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_datum < (SELECT sync_date_now
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = p_prs_perslid_key)
|
||
AND fac_tracking_key >= (SELECT sync_trackkey_lasttime
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = p_prs_perslid_key)
|
||
AND fac_srtnotificatie_key NOT IN (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code IN ('ORDAFM', 'ORDUPD')))
|
||
WHERE fac_usrtab_key = c_fac_usrtab_key
|
||
AND fac_usrdata_upper = UPPER ('$SYNC_TRACKKEY_NOW' || '_' || p_prs_perslid_key)
|
||
AND fac_usrdata_verwijder IS NULL;
|
||
END IF;
|
||
|
||
-- EINDE SYNC
|
||
IF (p_sync_mode = '1')
|
||
THEN
|
||
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
|
||
-- voor de ERP's (AX2009/2012) die sync-mode met 1 aanroepen, worden alle facturen conform cursor c_exporteerde_facturen onvoorwaardelijk op verwerkt gezet....
|
||
-- voor de ERP's (AX365/REMS/Facilitor/...) 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 (p_prs_perslid_key)
|
||
LOOP
|
||
BEGIN
|
||
IF (rec_fac.fin_factuur_statuses_key <> 3 OR rec_fac.prs_woco_uitval_versturen = 1)
|
||
THEN
|
||
-- Dit zijn de facturen met status 2,6 en mogelijk 3 als woco deze 'uitval' wil ontvangen
|
||
v_errorhint :=
|
||
mar_post_factuur_verwerking (p_prs_perslid_key,
|
||
rec_fac.fin_factuur_key,
|
||
1,
|
||
'');
|
||
END IF;
|
||
-- MARX#74749 Mareon Sync heel traag na MARX23: we gaan fin_factuur_externsyncdate zetten (ten teken dat door MAREON SYNC is verwerkt)
|
||
-- zodat we op de kolom 'fin_factuur_externsyncdate' een extra filter kunnen zetten, t.b.v. betere performance.
|
||
-- Alle facturen, ook met status = 3 (ook al wil woco die niet ontvangen, dus die niet in bovenstaande IF THEN zijn behandeld) moeten wel externsyncdate vullen
|
||
-- Hier geen conditie op derhalve (ook al is deze externsyncdate al gevuld via bovenstaande mar_post_factuur_verwerking)
|
||
v_errorhint := mar_post_fin_externsyncdate (p_prs_perslid_key, rec_fac.fin_factuur_key);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
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 ((p_sync_mode = '1') OR (p_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 = p_prs_perslid_key)
|
||
WHERE ud1.fac_usrtab_key = c_fac_usrtab_key
|
||
AND ud1.fac_usrdata_upper = UPPER ('$SYNC_DATE_LASTTIME' || '_' || p_prs_perslid_key)
|
||
AND ud1.fac_usrdata_verwijder IS NULL;
|
||
|
||
v_errorhint := 'SYNC TRACKKEY mislukt';
|
||
|
||
UPDATE fac_usrdata ud1
|
||
SET ud1.fac_usrdata_omschr =
|
||
(SELECT TO_CHAR (sync_trackkey_now)
|
||
FROM mar_v_sync_ax s
|
||
WHERE s.prs_perslid_key = p_prs_perslid_key)
|
||
WHERE ud1.fac_usrtab_key = c_fac_usrtab_key
|
||
AND ud1.fac_usrdata_upper = UPPER ('$SYNC_TRACKKEY_LAST' || '_' || p_prs_perslid_key)
|
||
AND ud1.fac_usrdata_verwijder IS NULL;
|
||
|
||
-- MARX#54452: Reset na upload van logfile "sync adapter": indien logbestand is ingesteld, gaan we resetten...
|
||
SELECT MAX (prs_kenmerklink_waarde)
|
||
INTO v_datum_logfile
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_woco_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 18
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_datum_logfile IS NOT NULL
|
||
THEN
|
||
-- resetten, oftewel verwijderen...
|
||
DELETE FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_woco_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 18
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
-- en vooralsnog gaan we dit niet tracken alsof die handmatig is gedaan
|
||
|
||
fac.trackaction ('#PRSUPB',
|
||
v_woco_prs_bedrijf_key,
|
||
p_prs_perslid_key,
|
||
NULL,
|
||
'Kenmerk $MAR_SYNC_SENDLOGFILE met waarde ' || v_datum_logfile || ' door SYNC gewist');
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_ax_sync;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_ax_sync (p_import_key IN NUMBER)
|
||
IS
|
||
-- Alle ingelezen AX opdrachten
|
||
CURSOR c_ax_sync
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_ax_sync
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
v_prs_perslid_key NUMBER (10);
|
||
BEGIN
|
||
v_errorhint :=
|
||
'SYSTEM API user [_API_AX_xxxx] van import '
|
||
|| p_import_key
|
||
|| ' niet gevonden, de synchronisatietijden zijn niet aangepast';
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
FOR rec_ax IN c_ax_sync
|
||
LOOP
|
||
BEGIN
|
||
mar_ax_sync (v_prs_perslid_key, rec_ax.sync_mode, p_import_key);
|
||
END;
|
||
END LOOP;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_update_ax_sync;
|
||
/
|
||
|
||
|
||
|
||
--------------------------------------------------------------------------------------------------------------------------------------------------
|
||
--
|
||
-- Usergraph's
|
||
---------------
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_hulp_opdr
|
||
(
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_afmelddatum,
|
||
prs_perslid_key
|
||
)
|
||
AS
|
||
SELECT o.mld_opdr_key,
|
||
o.mld_statusopdr_key,
|
||
o.mld_opdr_datumbegin,
|
||
o.mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
(SELECT MAX (t.fac_tracking_datum)
|
||
FROM fac_tracking t, fac_srtnotificatie sn
|
||
WHERE o.mld_opdr_key = t.fac_tracking_refkey
|
||
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND o.mld_statusopdr_key = 6
|
||
AND sn.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDAFM')),
|
||
cp.prs_perslid_key
|
||
FROM mld_opdr o, prs_bedrijf b, prs_contactpersoon cp
|
||
WHERE O.MLD_UITVOERENDE_KEYS = b.prs_bedrijf_key
|
||
AND b.prs_bedrijf_key = CP.PRS_BEDRIJF_KEY
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND cp.prs_perslid_key IS NOT NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_opdr
|
||
(
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_afmelddatum,
|
||
telaat,
|
||
prs_perslid_key
|
||
)
|
||
AS
|
||
SELECT mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_afmelddatum,
|
||
CASE WHEN COALESCE (mld_opdr_afmelddatum, SYSDATE) <= mld_opdr_einddatum THEN 0 ELSE 1 END,
|
||
prs_perslid_key
|
||
FROM mar_v_graph_hulp_opdr;
|
||
|
||
|
||
-- Basisview met de laatste 12 maanden (nodig om 'opdrachtloze' maanden ook in grafiek te kunnen tonen)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_12_mnd
|
||
(
|
||
jjjjmm,
|
||
jjjjmon
|
||
)
|
||
AS
|
||
SELECT DISTINCT TO_CHAR (SYSDATE - (LEVEL - 1), 'YYYYMM'), TO_CHAR (SYSDATE - (LEVEL - 1), 'YYYYmon')
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 365;
|
||
|
||
-- Alle afgemelde opdrachten van de afgelopen 12 maanden
|
||
-- X-as: de maanden
|
||
-- Y-as (blauw) = aantal opdrachten optijd,
|
||
-- Y-as2 (oranje) = aantal opdrachten te laat
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_12mnd_opdr
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT NULL,
|
||
TO_CHAR (mld_opdr_afmelddatum, 'mon'),
|
||
COUNT (*) - SUM (telaat),
|
||
SUM (telaat),
|
||
'',
|
||
TO_CHAR (MIN (mld_opdr_afmelddatum), 'YYYY') || TO_CHAR (mld_opdr_afmelddatum, 'mm'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_opdr
|
||
WHERE mld_opdr_afmelddatum IS NOT NULL AND mld_opdr_afmelddatum >= SYSDATE - 365
|
||
GROUP BY TO_CHAR (mld_opdr_afmelddatum, 'mon'), TO_CHAR (mld_opdr_afmelddatum, 'mm'), prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
SUBSTR (m12.jjjjmon, 5),
|
||
0,
|
||
0,
|
||
'',
|
||
m12.jjjjmm,
|
||
p.prs_perslid_key
|
||
FROM mar_v_12_mnd m12, prs_perslid p
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_v_graph_opdr go
|
||
WHERE TO_CHAR (go.mld_opdr_afmelddatum, 'YYYYMM') = m12.jjjjmm AND p.prs_perslid_key = go.prs_perslid_key);
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_min14_dagen
|
||
(
|
||
datum,
|
||
dag
|
||
)
|
||
AS
|
||
SELECT TRUNC (SYSDATE - 1 - (LEVEL - 1)) datum, SUBSTR (TO_CHAR (SYSDATE - 1 - (LEVEL - 1), 'day'), 1, 2) dag
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 14;
|
||
|
||
|
||
-- Alle lopende opdrachten die de afgelopen 14 dagen afgemeld hadden moeten zijn maar nog lopen,
|
||
-- X-as = einddatum (dag) van de opdracht
|
||
-- Y-as (oranje) = had al klaar moeten zijn (nog niet afgemeld), maar wel ingepland.
|
||
-- Y-as2 (rood) = ook nog niet eens ingepland.
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_min14d_open_opdr_h
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT NULL,
|
||
SUBSTR (TO_CHAR (mld_opdr_einddatum, 'day'), 1, 2),
|
||
COUNT (*),
|
||
0,
|
||
'',
|
||
TO_CHAR (mld_opdr_einddatum, 'YYYY-MM-DD'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_opdr
|
||
WHERE TRUNC (mld_opdr_einddatum) >= TRUNC (SYSDATE - 14)
|
||
AND TRUNC (mld_opdr_einddatum) < TRUNC (SYSDATE)
|
||
AND mld_opdr_plandatum IS NOT NULL
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
AND mld_statusopdr_key <> 1
|
||
GROUP BY mld_opdr_einddatum, prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
SUBSTR (TO_CHAR (mld_opdr_einddatum, 'day'), 1, 2),
|
||
0,
|
||
COUNT (*),
|
||
'',
|
||
TO_CHAR (mld_opdr_einddatum, 'YYYY-MM-DD'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_opdr
|
||
WHERE TRUNC (mld_opdr_einddatum) >= TRUNC (SYSDATE - 14)
|
||
AND TRUNC (mld_opdr_einddatum) < TRUNC (SYSDATE)
|
||
AND mld_opdr_plandatum IS NULL
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
AND mld_statusopdr_key <> 1
|
||
GROUP BY mld_opdr_einddatum, prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
d14.dag,
|
||
0,
|
||
0,
|
||
'',
|
||
TO_CHAR (d14.datum, 'YYYY-MM-DD'),
|
||
p.prs_perslid_key
|
||
FROM mar_v_min14_dagen d14, prs_perslid p
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_v_graph_opdr go
|
||
WHERE go.mld_opdr_einddatum = d14.datum
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
AND mld_statusopdr_key <> 1
|
||
AND p.prs_perslid_key = go.prs_perslid_key);
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_min14d_open_opdr
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT MIN (fclt_key),
|
||
MIN (FCLT_XAS_),
|
||
SUM (FCLT_YAS_),
|
||
SUM (FCLT_YAS2_),
|
||
MIN (FCLT_URL),
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
FROM mar_v_graph_min14d_open_opdr_h
|
||
GROUP BY VOLGORDE, FCLT_3D_USER_KEY;
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_plus14_dagen
|
||
(
|
||
datum,
|
||
dag
|
||
)
|
||
AS
|
||
SELECT TRUNC (SYSDATE + (LEVEL - 1)) datum, SUBSTR (TO_CHAR (SYSDATE + (LEVEL - 1), 'day'), 1, 2) dag
|
||
FROM DUAL
|
||
CONNECT BY LEVEL <= 14;
|
||
|
||
-- Alle open opdrachten, die
|
||
-- a) correct staan ingepland, dus binnen begin en einddatum opdracht (blauw)
|
||
-- b) niet zijn ingepland (oranje), maar nog op tijd zijn (dus einddatum is nog niet gepaseerd, oftewek SYSDATE <= einddatum)
|
||
-- c) verkeerd staan ingepland (buiten begin/einddatum) of opdrachten die al te laat zijn (nog niet afgemeld terwijl SYSDATE > einddatum).
|
||
|
||
-- X-as is einddatum opdracht met maximum komende 14 dagen.
|
||
-- Y-as (blauw) staan aantal opdrachten die binnen begin en einddatum opdracht zijn ingepland (blauw)
|
||
-- Y2-as (oranje) staan aantal opdrachten die niet zijn ingepland (rood/oranje) danwel buiten begin-en einddatum zijn ingepland
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_pls14d_open_opdr_h
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT NULL,
|
||
SUBSTR (TO_CHAR (mld_opdr_einddatum, 'day'), 1, 2),
|
||
COUNT (*),
|
||
0,
|
||
'',
|
||
TO_CHAR (mld_opdr_einddatum, 'YYYY-MM-DD'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_opdr
|
||
WHERE TRUNC (mld_opdr_einddatum) >= TRUNC (SYSDATE)
|
||
AND TRUNC (mld_opdr_einddatum) <= TRUNC (SYSDATE + 14)
|
||
AND mld_opdr_plandatum IS NOT NULL
|
||
AND mld_opdr_plandatum >= mld_opdr_datumbegin
|
||
AND mld_opdr_plandatum <= mld_opdr_einddatum
|
||
AND mld_statusopdr_key <> 1
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
GROUP BY mld_opdr_einddatum, prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
SUBSTR (TO_CHAR (mld_opdr_einddatum, 'day'), 1, 2),
|
||
0,
|
||
COUNT (*),
|
||
'',
|
||
TO_CHAR (mld_opdr_einddatum, 'YYYY-MM-DD'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_opdr
|
||
WHERE TRUNC (mld_opdr_einddatum) >= TRUNC (SYSDATE)
|
||
AND TRUNC (mld_opdr_einddatum) <= TRUNC (SYSDATE + 14)
|
||
AND ( ( mld_opdr_plandatum IS NOT NULL
|
||
AND (mld_opdr_plandatum < mld_opdr_datumbegin OR mld_opdr_plandatum > mld_opdr_einddatum))
|
||
OR (mld_opdr_plandatum IS NULL))
|
||
AND mld_statusopdr_key <> 1
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
GROUP BY mld_opdr_einddatum, prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
d14.dag,
|
||
0,
|
||
0,
|
||
'',
|
||
TO_CHAR (d14.datum, 'YYYY-MM-DD'),
|
||
p.prs_perslid_key
|
||
FROM mar_v_plus14_dagen d14, prs_perslid p
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_v_graph_opdr go
|
||
WHERE go.mld_opdr_einddatum = d14.datum
|
||
AND mld_statusopdr_key <> 1
|
||
AND mld_opdr_afmelddatum IS NULL
|
||
AND p.prs_perslid_key = go.prs_perslid_key);
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_pls14d_open_opdr
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT MIN (fclt_key),
|
||
MIN (FCLT_XAS_),
|
||
SUM (FCLT_YAS_),
|
||
SUM (FCLT_YAS2_),
|
||
MIN (FCLT_URL),
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
FROM mar_v_graph_pls14d_open_opdr_h
|
||
GROUP BY VOLGORDE, FCLT_3D_USER_KEY;
|
||
|
||
|
||
----------------------
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_hulp_factuur
|
||
(
|
||
fin_factuur_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_datum,
|
||
fin_factuur_totaal,
|
||
prs_perslid_key
|
||
)
|
||
AS
|
||
SELECT f.fin_factuur_key,
|
||
f.fin_factuur_statuses_key,
|
||
f.fin_factuur_datum,
|
||
f.fin_factuur_totaal,
|
||
cp.prs_perslid_key
|
||
FROM fin_factuur f,
|
||
mld_opdr o,
|
||
prs_bedrijf b,
|
||
prs_contactpersoon cp
|
||
WHERE f.fin_factuur_verwijder IS NULL
|
||
AND f.mld_opdr_key = o.mld_opdr_key
|
||
AND O.MLD_UITVOERENDE_KEYS = b.prs_bedrijf_key
|
||
AND b.prs_bedrijf_key = CP.PRS_BEDRIJF_KEY
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND cp.prs_perslid_key IS NOT NULL;
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_12mnd_factuur_h
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT NULL,
|
||
TO_CHAR (fin_factuur_datum, 'mon'),
|
||
SUM (fin_factuur_totaal),
|
||
0,
|
||
'',
|
||
TO_CHAR (MIN (fin_factuur_datum), 'YYYY') || TO_CHAR (fin_factuur_datum, 'mm'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_hulp_factuur
|
||
WHERE fin_factuur_statuses_key = 7 AND fin_factuur_datum >= SYSDATE - 365
|
||
GROUP BY TO_CHAR (fin_factuur_datum, 'mon'), TO_CHAR (fin_factuur_datum, 'mm'), prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
TO_CHAR (fin_factuur_datum, 'mon'),
|
||
0,
|
||
SUM (fin_factuur_totaal),
|
||
'',
|
||
TO_CHAR (MIN (fin_factuur_datum), 'YYYY') || TO_CHAR (fin_factuur_datum, 'mm'),
|
||
prs_perslid_key
|
||
FROM mar_v_graph_hulp_factuur
|
||
WHERE fin_factuur_statuses_key <> 7
|
||
AND fin_factuur_statuses_key IN
|
||
(SELECT fac.safe_to_number (fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_upper LIKE UPPER ('$FIN_FACTUUR_STATUSES26_KEY%')
|
||
AND ud.fac_usrdata_verwijder IS NULL)
|
||
AND fin_factuur_datum >= SYSDATE - 365
|
||
GROUP BY TO_CHAR (fin_factuur_datum, 'mon'), TO_CHAR (fin_factuur_datum, 'mm'), prs_perslid_key
|
||
UNION
|
||
SELECT NULL,
|
||
SUBSTR (m12.jjjjmon, 5),
|
||
0,
|
||
0,
|
||
'',
|
||
m12.jjjjmm,
|
||
p.prs_perslid_key
|
||
FROM mar_v_12_mnd m12, prs_perslid p
|
||
WHERE NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mar_v_graph_hulp_factuur hf
|
||
WHERE TO_CHAR (hf.fin_factuur_datum, 'YYYYMM') = m12.jjjjmm AND p.prs_perslid_key = hf.prs_perslid_key);
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_graph_12mnd_factuur
|
||
(
|
||
fclt_key,
|
||
FCLT_XAS_,
|
||
FCLT_YAS_,
|
||
FCLT_YAS2_,
|
||
FCLT_URL,
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
)
|
||
AS
|
||
SELECT MIN (fclt_key),
|
||
MIN (FCLT_XAS_),
|
||
SUM (FCLT_YAS_),
|
||
SUM (FCLT_YAS2_),
|
||
MIN (FCLT_URL),
|
||
VOLGORDE,
|
||
FCLT_3D_USER_KEY
|
||
FROM mar_v_graph_12mnd_factuur_h
|
||
GROUP BY VOLGORDE, FCLT_3D_USER_KEY;
|
||
|
||
|
||
|
||
-- MARX#55971: Meerdere contactpersonen en rollen voor Mareon leveranciers/aannemers
|
||
-- Het zetten van de autorisaties van de gekoppelde prs_perslid bij contactpersoon aan de hand van de autorisatie-flexprops bij contactpersoon
|
||
-- Wordt gebruikt voor het zetten van de autorisatiegroepen bij contactpersoon/perslid.
|
||
|
||
CREATE OR REPLACE FUNCTION UpdateAccountAutorisatie (p_cps_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_aantal NUMBER (10);
|
||
v_apikey VARCHAR2 (255);
|
||
v_result VARCHAR2 (1000);
|
||
|
||
v_vakman VARCHAR2 (10);
|
||
v_planbaar VARCHAR2 (10);
|
||
v_planner VARCHAR2 (10);
|
||
v_afrond_opdr VARCHAR2 (10);
|
||
v_facturatie VARCHAR2 (10);
|
||
v_beheerder VARCHAR2 (10);
|
||
BEGIN
|
||
v_result := '0';
|
||
|
||
SELECT MAX (prs_perslid_key)
|
||
INTO v_prs_perslid_key
|
||
FROM prs_contactpersoon
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_contactpersoon
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
|
||
IF v_prs_perslid_key IS NOT NULL
|
||
THEN
|
||
-- Contactpersoon is gekoppeld aan perslid, alleen en alleen dan autorisaties regelen/updaten, anders niet!
|
||
SELECT prs_perslid_apikey
|
||
INTO v_apikey
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_vakman
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 35 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
-- MARX#66773 Module Mareon Planning
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_planbaar
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 60 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_planner
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 36 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
-- MARX#60079: Mareon inrichten voor reversible billing KPN
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_afrond_opdr
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 43 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_facturatie
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 37 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
SELECT COALESCE (MAX (prs_kenmerklink_waarde), '0')
|
||
INTO v_beheerder
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 38 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_planner = '1'
|
||
THEN
|
||
-- Eerst checken of leverancier wel geauroriseerd is voor de module Mareon Planning
|
||
IF marx_bedrijf_auth_4_planbord(v_prs_bedrijf_key) = 1
|
||
THEN
|
||
-- Eerst voor het bedrijf (voorwaardelijk) een initialisatie doen, voorwaardelijk omdat als dit al eens eerder een keer is gedaan, dan gebeurt er nu effectief niets
|
||
marx_init_planning(v_prs_bedrijf_key);
|
||
-- En nu kan persoon planner worden gemaakt...
|
||
marx_make_perslid_planner (v_prs_bedrijf_key, v_prs_perslid_key);
|
||
ELSE
|
||
-- Leverancier heeft GEEN autorisatie om Mareon Planning te gebruiken
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'U heeft geen rechten/autorisatie om de module Mareon Planning te gebruiken. Bekijk de online handleiding voor meer informatie.';
|
||
END IF;
|
||
ELSE
|
||
marx_undo_perslid_planner (v_prs_bedrijf_key, v_prs_perslid_key);
|
||
END IF;
|
||
|
||
IF v_planbaar <> '0'
|
||
THEN
|
||
IF marx_bedrijf_auth_4_planbord(v_prs_bedrijf_key) = 1
|
||
THEN
|
||
-- Eerst voor het bedrijf (voorwaardelijk) een initialisatie doen, voorwaardelijk omdat als dit al eens eerder een keer is gedaan, dan gebeurt er nu effectief niets
|
||
marx_init_planning(v_prs_bedrijf_key);
|
||
-- En nu kan persoon planbaar worden gemaakt , de expertise(s)/competentie(s) worden in apart tabblad geregistreerd: MARX#70903 Meerdere vaardigheden (expertises) voor 1 resource (persoon) kunnen registreren
|
||
marx_make_perslid_planbaar (v_prs_bedrijf_key, v_prs_perslid_key);
|
||
ELSE
|
||
-- Leverancier heeft GEEN autorisatie om Mareon Planning te gebruiken
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'U heeft geen rechten/autorisatie om de module Mareon Planning te gebruiken. Bekijk de online handleiding voor meer informatie.';
|
||
END IF;
|
||
ELSE
|
||
-- Voor het geval de persoon inplanbaar was, dan gaan we dat ongedaan maken, b.v. door de persoon niet meer planbaar te laten zijn,
|
||
-- Echter dat kan alleen als er geen toekomstige reserveringen voor de persoon zijn (anders melding geven), dus v_aantal 0 is.
|
||
v_aantal := marx_perslid_is_gepland(v_prs_perslid_key);
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
-- Persoon heeft geen toekomstige reserveringen meer, planbaar kan er dan af
|
||
marx_undo_perslid_planbaar (v_prs_bedrijf_key, v_prs_perslid_key);
|
||
ELSE
|
||
-- Persoon heeft WEL toekomstige reserveringen meer, planbaar kan er NIET af
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'Dit account staat nog ingepland, planbaar kan daarom niet leeg worden gemaakt.';
|
||
-- LET OP!! Als dit aan de hand is, en vakman is ook uitgezet, dan mag vakman niet uit gezet worden, dus moet ie AAN blijven (= afhankelijkheid)
|
||
-- Daarom zetten we vakman gewoon bikkelhard terug op '1'...
|
||
v_vakman := '1';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_vakman = '1'
|
||
THEN
|
||
-- fac_groep_key 4 is gereserveerd voor werkopdrachten...
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 4 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (4, v_prs_perslid_key);
|
||
END IF;
|
||
ELSE
|
||
--facgroep 4 (werkopdrachten) verwijderen, mits de persoon geen API-key heeft (met API-key willen we niet dat rechten onderuit gaan ivm koppelingen)
|
||
-- en mits geen melding/probleem mbt planbaar (vorige punt)
|
||
IF v_apikey IS NULL
|
||
THEN
|
||
-- Persoon heeft geen API key, dan verwijderen geen probleem
|
||
DELETE fac_gebruikersgroep
|
||
WHERE fac_groep_key = 4 AND prs_perslid_key = v_prs_perslid_key;
|
||
ELSE
|
||
-- Persoon heeft API key, en flexprop prs_kenmerk_key = 35 is leeg gemaakt, moet weer worden hersteld door deze aan te zetten....
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'Autorisatie van dit account kan niet worden gewijzigd.';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_afrond_opdr = '1'
|
||
THEN
|
||
-- fac_groep_key 12 is gereserveerd voor financieel afronden opdrachten
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 12 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (12, v_prs_perslid_key);
|
||
END IF;
|
||
ELSE
|
||
--facgroep 12 (financieel afronden opdrachten) verwijderen, hier maakt het (nog) niet uit of de persoon API-key heeft, deze optie is via koppelingen (nog) niet relevant.
|
||
DELETE fac_gebruikersgroep
|
||
WHERE fac_groep_key = 12 AND prs_perslid_key = v_prs_perslid_key;
|
||
END IF;
|
||
|
||
IF v_facturatie = '1'
|
||
THEN
|
||
-- fac_groep_key 10 is gereserveerd voor facturatieafdeling van aannemer...
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 10 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (10, v_prs_perslid_key);
|
||
END IF;
|
||
ELSE
|
||
--facgroep 10 (facturatie) verwijderen, mits de persoon geen API-key heeft (met API-key willen we niet dat rechten onderuit gaan ivm koppelingen)
|
||
IF v_apikey IS NULL
|
||
THEN
|
||
DELETE fac_gebruikersgroep
|
||
WHERE fac_groep_key = 10 AND prs_perslid_key = v_prs_perslid_key;
|
||
ELSE
|
||
-- Persoon heeft API key, en flexprop prs_kenmerk_key = 37 is leeg gemaakt, moet weer worden hersteld door deze aan te zetten....
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'Autorisatie van dit account kan niet worden gewijzigd.';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_beheerder = '1'
|
||
THEN
|
||
-- fac_groep_key 11 is gereserveerd voor de (relatie_beheerder van aannemer...
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 11 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (11, v_prs_perslid_key);
|
||
END IF;
|
||
ELSE
|
||
--facgroep 11 (relatiebeheerder) verwijderen, mits de persoon geen API-key heeft (met API-key willen we niet dat rechten onderuit gaan ivm koppelingen)
|
||
IF v_apikey IS NULL
|
||
THEN
|
||
DELETE fac_gebruikersgroep
|
||
WHERE fac_groep_key = 11 AND prs_perslid_key = v_prs_perslid_key;
|
||
ELSE
|
||
-- Persoon heeft API key, en flexprop prs_kenmerk_key = 38 is leeg gemaakt, moet weer worden hersteld door deze aan te zetten....
|
||
-- Het aanzetten gebeurt via de functie-aanroep 'UpdateAccountFlexProps'
|
||
v_result := 'Autorisatie van dit account kan niet worden gewijzigd.';
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
-- Het zetten van de autorisatie flexprops bij contactpersoon aan de hand van de autorisaties die gekoppelde prs_perslid bij contactpersoon heeft.
|
||
-- Wordt gebruikt voor herstel van de flexprop vinkjes.
|
||
|
||
CREATE OR REPLACE FUNCTION UpdateAccountFlexProps (p_cps_key IN NUMBER)
|
||
RETURN VARCHAR2
|
||
IS
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_facgroep_key NUMBER (10);
|
||
v_aantal NUMBER (10);
|
||
v_apikey VARCHAR2 (255);
|
||
v_result VARCHAR2 (1000);
|
||
|
||
v_vakman NUMBER (10);
|
||
v_planbaar NUMBER (10);
|
||
v_planner NUMBER (10);
|
||
v_facturatie NUMBER (10);
|
||
v_beheerder NUMBER (10);
|
||
|
||
v_prefix VARCHAR2(10);
|
||
BEGIN
|
||
v_result := '0';
|
||
|
||
SELECT MAX (prs_perslid_key)
|
||
INTO v_prs_perslid_key
|
||
FROM prs_contactpersoon
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_contactpersoon
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
IF v_prs_perslid_key IS NOT NULL
|
||
THEN
|
||
-- Contactpersoon is gekoppeld aan perslid, alleen en alleen dan vinkjes zetten conform huidige autorisaties
|
||
|
||
SELECT COALESCE (MAX (1), 0)
|
||
INTO v_vakman
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 4 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- MARX#66773 Module Mareon Planning
|
||
-- Op zoek naar de autorisatie-groep voor de 'planbare' personen dit bedrijf...
|
||
v_prefix := 'PLANBAAR';
|
||
v_facgroep_key := marx_bedrijf_facgroep(v_prs_bedrijf_key, v_prefix);
|
||
SELECT COALESCE (MAX (1), 0)
|
||
INTO v_planbaar
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = v_facgroep_key AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
-- Op zoek naar de autorisatie-groep voor de 'planner' personen dit bedrijf...
|
||
v_prefix := 'PLANNER';
|
||
v_facgroep_key := marx_bedrijf_facgroep(v_prs_bedrijf_key, v_prefix);
|
||
SELECT COALESCE (MAX (1), 0)
|
||
INTO v_planner
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = v_facgroep_key AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
|
||
SELECT COALESCE (MAX (1), 0)
|
||
INTO v_facturatie
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 10 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
SELECT COALESCE (MAX (1), 0)
|
||
INTO v_beheerder
|
||
FROM fac_gebruikersgroep
|
||
WHERE fac_groep_key = 11 AND prs_perslid_key = v_prs_perslid_key;
|
||
|
||
IF v_vakman = 1
|
||
THEN
|
||
-- Flexprop 35 is vinkje voor vakman, die gaat AAN (alleen als die niet al AAN was)
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 35 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (35,
|
||
'C',
|
||
p_cps_key,
|
||
'1');
|
||
END IF;
|
||
ELSE
|
||
-- Flexprop 35 is vinkje voor vakman, die gaan UIT
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 35 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
|
||
IF v_planbaar = 1
|
||
THEN
|
||
-- Flexprop 60 is listbox expertises/competenties bij planbaar, die moet worden gezet (alleen als die niet al gezet was)
|
||
SELECT COUNT(*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 60 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
-- Vinkje planbaar aanzetten.
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (60,
|
||
'C',
|
||
p_cps_key,
|
||
'1');
|
||
END IF;
|
||
ELSE
|
||
-- Flexprop 60 is vinkje voor planbaar, die gaat weg
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 60 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
|
||
|
||
IF v_planner = 1
|
||
THEN
|
||
-- Flexprop 36 is vinkje voor planner, die moet worden gezet (alleen als die niet al gezet was)
|
||
SELECT COUNT(*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 36 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (36,
|
||
'C',
|
||
p_cps_key,
|
||
'1');
|
||
END IF;
|
||
ELSE
|
||
-- Flexprop 36 is listbox voor planneer, die gaat LEEG
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 36 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
|
||
IF v_facturatie = 1
|
||
THEN
|
||
-- Flexprop 37 is vinkje voor facturatie, die gaat AAN(alleen als die niet al AAN was)
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 37 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (37,
|
||
'C',
|
||
p_cps_key,
|
||
'1');
|
||
END IF;
|
||
ELSE
|
||
-- Flexprop 37 is vinkje voor facturatie, die gaan UIT
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 37 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
|
||
IF v_beheerder = 1
|
||
THEN
|
||
-- Flexprop 38 is vinkje voor beheerder, die gaat AAN(alleen als die niet al AAN was)
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 38 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
IF v_aantal = 0
|
||
THEN
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (38,
|
||
'C',
|
||
p_cps_key,
|
||
'1');
|
||
END IF;
|
||
ELSE
|
||
-- Flexprop 38 is vinkje voor beheerder, die gaan UIT
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 38 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
ELSE
|
||
-- Contactpersoon is NIET gekoppeld aan perslid, alleen en alleen dan ALLE vinkjes UITzetten (er is geen autorisatie), ook planbaar uitzetten, ook planner uitzetten.
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 35 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 37 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 38 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 60 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 36 AND prs_kenmerklink_niveau = 'C' AND prs_link_key = p_cps_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE UpsertAccount (p_cps_key IN NUMBER)
|
||
IS
|
||
v_result VARCHAR2 (1000);
|
||
v_result2 VARCHAR2 (1000);
|
||
|
||
v_prs_contactpersoon_naam VARCHAR2 (1000);
|
||
v_prs_contactpersoon_tussenv VARCHAR2 (1000);
|
||
v_prs_contactpersoon_voorlett VARCHAR2 (1000);
|
||
v_prs_contactpersoon_voornaam VARCHAR2 (1000);
|
||
v_prs_contactpersoon_aanhef VARCHAR2 (1000);
|
||
v_prs_contactpersoon_titel VARCHAR2 (1000);
|
||
v_prs_contactpersoon_telfoon_1 VARCHAR2 (1000);
|
||
v_prs_contactpersoon_telfoon_2 VARCHAR2 (1000);
|
||
v_prs_contactpersoon_fax VARCHAR2 (1000);
|
||
v_prs_contactpersoon_email VARCHAR2 (1000);
|
||
v_prs_contactpersoon_functie VARCHAR2 (1000);
|
||
v_prs_contactpersoon_opmerking VARCHAR2 (1000);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_prs_afdeling_key NUMBER (10);
|
||
-- MARX#55971: Meerdere contactpersonen en rollen voor Mareon leveranciers/aannemers
|
||
v_aantal_accounts_nu NUMBER (10);
|
||
v_max_accounts NUMBER (10);
|
||
|
||
v_aantal NUMBER (10);
|
||
v_reset_mailadres NUMBER (10);
|
||
v_empty_mailadres NUMBER (10);
|
||
|
||
v_prefix VARCHAR2 (100);
|
||
v_loginnaam VARCHAR2 (100);
|
||
BEGIN
|
||
v_result := '0';
|
||
v_reset_mailadres := 0;
|
||
v_empty_mailadres := 0;
|
||
|
||
--Reset van eventuele foutmelding vorige keer: schone lei :-)
|
||
DELETE prs_kenmerklink
|
||
WHERE prs_link_key = p_cps_key
|
||
AND prs_kenmerk_key = 33
|
||
AND prs_kenmerklink_niveau = 'C'
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
SELECT prs_contactpersoon_naam,
|
||
prs_contactpersoon_tussenv,
|
||
prs_contactpersoon_voorletters,
|
||
prs_contactpersoon_voornaam,
|
||
prs_contactpersoon_aanhef,
|
||
prs_contactpersoon_titel,
|
||
prs_contactpersoon_telefoon_1,
|
||
prs_contactpersoon_telefoon_2,
|
||
prs_contactpersoon_fax,
|
||
prs_contactpersoon_email,
|
||
prs_contactpersoon_functie,
|
||
prs_contactpersoon_opmerking,
|
||
prs_perslid_key,
|
||
prs_bedrijf_key
|
||
INTO v_prs_contactpersoon_naam,
|
||
v_prs_contactpersoon_tussenv,
|
||
v_prs_contactpersoon_voorlett,
|
||
v_prs_contactpersoon_voornaam,
|
||
v_prs_contactpersoon_aanhef,
|
||
v_prs_contactpersoon_titel,
|
||
v_prs_contactpersoon_telfoon_1,
|
||
v_prs_contactpersoon_telfoon_2,
|
||
v_prs_contactpersoon_fax,
|
||
v_prs_contactpersoon_email,
|
||
v_prs_contactpersoon_functie,
|
||
v_prs_contactpersoon_opmerking,
|
||
v_prs_perslid_key,
|
||
v_prs_bedrijf_key
|
||
FROM prs_contactpersoon
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
IF v_prs_contactpersoon_email IS NOT NULL
|
||
THEN
|
||
v_loginnaam := SUBSTR (v_prs_contactpersoon_email, 1, 30);
|
||
|
||
-- We gaan de perslid aanmaken/wijzigen
|
||
IF v_prs_perslid_key IS NULL
|
||
THEN
|
||
v_prefix := 'Contactpersoon heeft GEEN account/autorisaties gekregen. ';
|
||
ELSE
|
||
v_prefix := 'Autorisaties van contactpersoon zijn NIET gewijzigd. ';
|
||
END IF;
|
||
|
||
-- MARX#55971: Meerdere contactpersonen en rollen voor Mareon leveranciers/aannemers
|
||
-- Eerst checken of bij leverancier het maximum aantal toegestane accounts (= dus aantal contactpersonen met perslid-key) al is bereikt, dan mag je niet meer aanmaken...
|
||
-- Dit geldt dus alleen voor aanmaak, niet wijzigen uiteraard, dus:
|
||
IF v_prs_perslid_key IS NULL
|
||
THEN
|
||
-- Aanmaken en koppelen perslid alleen als aantal accounts nog niet aan max. zit, dat gaan we hier checken ...
|
||
-- MARX#81443 Digitaal "Account/licentie" mutatieformulier in Mareon, we maken nu gebruik van nieuw view
|
||
SELECT aantal_accounts_inuse
|
||
INTO v_aantal_accounts_nu
|
||
FROM marx_v_aantalaccounts_lev
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
-- MARX#63257: Het aantal maximum accounts van 3 stuks per leverancier kunnen instellen
|
||
SELECT prs_bedrijf_maxaccounts
|
||
INTO v_max_accounts
|
||
FROM mar_v_bedrijf_maxaccounts
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
IF v_aantal_accounts_nu + 1 > v_max_accounts
|
||
THEN
|
||
v_result := v_prefix || 'Het maximum aantal accounts van ' || v_max_accounts || ' is al in gebruik. Via menutaak "Mutatieformulier Accounts" kun u desgewenst zelf extra accounts/licenties aanmaken';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_result = '0'
|
||
THEN
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_email) = UPPER (v_prs_contactpersoon_email)
|
||
AND prs_perslid_key <> COALESCE (v_prs_perslid_key, -1)
|
||
AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_aantal > 0
|
||
THEN
|
||
v_result := v_prefix || 'Account/mailadres bestaat al, kan niet nog eens worden gebruikt.';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_result = '0'
|
||
THEN
|
||
SELECT COUNT (*)
|
||
INTO v_aantal
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam)
|
||
AND prs_perslid_key <> COALESCE (v_prs_perslid_key, -1)
|
||
AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_aantal > 0
|
||
THEN
|
||
v_result := v_prefix || 'Account/mailadres (inlognaam) bestaat al, kan niet nog eens worden gebruikt.';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF (v_result = '0')
|
||
THEN
|
||
-- Geen foutmelding over mailadres...
|
||
IF v_prs_perslid_key IS NULL
|
||
THEN
|
||
-- Aanmaken en koppelen van prs_perslid
|
||
-- Uitvoerders en BES-leveranciers: initieel prs_srtperslid_key 1
|
||
|
||
-- We selecteren nog ff de afdeling van het bedrijf LEV,
|
||
-- Default is deze key=1 (waar alle lev's 'in' zitten), maar kan (bij gebruik van Mareon Planning module) een eigen afdeling hebben gekregen (andere key), zie PROC marx_init_planning
|
||
SELECT prs_afdeling_key
|
||
INTO v_prs_afdeling_key
|
||
FROM marx_v_bedrijf_afdeling
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_tussenvoegsel,
|
||
prs_perslid_voorletters,
|
||
prs_perslid_voornaam,
|
||
prs_perslid_titel,
|
||
prs_perslid_telefoonnr,
|
||
prs_perslid_mobiel)
|
||
VALUES ('PRS',
|
||
1,
|
||
v_prs_afdeling_key,
|
||
v_prs_contactpersoon_naam,
|
||
v_prs_contactpersoon_email,
|
||
v_loginnaam,
|
||
v_prs_contactpersoon_tussenv,
|
||
v_prs_contactpersoon_voorlett,
|
||
v_prs_contactpersoon_voornaam,
|
||
v_prs_contactpersoon_titel,
|
||
v_prs_contactpersoon_telfoon_1,
|
||
v_prs_contactpersoon_telfoon_2)
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
|
||
-- MARX#79548 SSO voor Aareon medewerkers, geen uid/pwd meer
|
||
-- Omdat we instelling 'email_password op 1 zetten', moet account (van aannemer) voortaan een gevuld ww hebben....
|
||
prs.setpassword(v_prs_perslid_key, DBMS_RANDOM.STRING ('x', 16));
|
||
|
||
UPDATE prs_contactpersoon
|
||
SET prs_perslid_key = v_prs_perslid_key
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
|
||
v_result := UpdateAccountAutorisatie (p_cps_key);
|
||
ELSE
|
||
-- Contactpersoon was al gekoppeld aan perslid, en geen fouten, dan updaten...
|
||
UPDATE prs_perslid
|
||
SET prs_perslid_naam = v_prs_contactpersoon_naam,
|
||
prs_perslid_email = v_prs_contactpersoon_email,
|
||
prs_perslid_oslogin = v_loginnaam,
|
||
prs_perslid_tussenvoegsel = v_prs_contactpersoon_tussenv,
|
||
prs_perslid_voorletters = v_prs_contactpersoon_voorlett,
|
||
prs_perslid_voornaam = v_prs_contactpersoon_voornaam,
|
||
prs_perslid_titel = v_prs_contactpersoon_titel,
|
||
prs_perslid_telefoonnr = v_prs_contactpersoon_telfoon_1,
|
||
prs_perslid_mobiel = v_prs_contactpersoon_telfoon_2
|
||
WHERE prs_perslid_key = v_prs_perslid_key;
|
||
|
||
v_result := UpdateAccountAutorisatie (p_cps_key);
|
||
END IF;
|
||
ELSE
|
||
-- Fout nav mailadres of max. accounts
|
||
IF v_prs_perslid_key IS NOT NULL
|
||
THEN
|
||
-- prs_perslid was dus gekoppeld aan contactpersoon
|
||
-- We gaan contactpersoon->mailadres herstellen/terugzetten cq. gelijkhouden aan prs_perslid->mailadres
|
||
v_reset_mailadres := 1;
|
||
ELSE
|
||
-- Indien nog niet gekoppeld aan perslid, dan maken we mailadres expliciet leeg.
|
||
-- Komt ook mooi uit als maximum aantal accounts wordt overschreden, ook dan mailadres leeg maken.
|
||
v_empty_mailadres := 1;
|
||
END IF;
|
||
END IF;
|
||
ELSE
|
||
-- Mailadres van contactpersoon (=account) is leeg.
|
||
-- Het leeg maken van mailadres van contactpersoon met een gekoppelde perslid mag niet, ff checken....
|
||
IF v_prs_perslid_key IS NOT NULL
|
||
THEN
|
||
v_result := 'Account/mailadres kan niet leeg worden gemaakt.';
|
||
-- We gaan contactpersoon->mailadres terugzetten cq. gelijkhouden aan prs_perslid->mailadres
|
||
v_reset_mailadres := 1;
|
||
ELSE
|
||
v_result := 'Omdat account/mailadres is leeggelaten, heeft contactpersoon geen account en autorisaties gekregen.';
|
||
END IF;
|
||
END IF;
|
||
|
||
IF (v_reset_mailadres = 1)
|
||
THEN
|
||
-- We gaan contactpersoon->mailadres herstellen/terugzetten cq. gelijkhouden aan prs_perslid->mailadres
|
||
UPDATE prs_contactpersoon
|
||
SET prs_contactpersoon_email =
|
||
(SELECT prs_perslid_email
|
||
FROM prs_perslid
|
||
WHERE prs_perslid_key = v_prs_perslid_key)
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
-- En verder gaan we alle eventuele aangepaste (aangevinkte en uitgevinkte) autorisaties gelijkzetten aan de autorisatie-groepen die er nu zijn, zodat dit weer gesynt is / gaat worden
|
||
-- Dit gebeurt hieronder in de functie-aanroep 'UpdateAutorisatie_CPSFlexProps'
|
||
|
||
END IF;
|
||
|
||
IF (v_empty_mailadres = 1)
|
||
THEN
|
||
-- We gaan mailadres leeg maken
|
||
UPDATE prs_contactpersoon
|
||
SET prs_contactpersoon_email = NULL
|
||
WHERE prs_contactpersoon_key = p_cps_key;
|
||
-- En verder gaan we alle eventuele gezette vinkjes weer uitzetten.
|
||
-- Dit gebeurt hieronder in de functie-aanroep 'UpdateAutorisatie_CPSFlexProps'
|
||
|
||
END IF;
|
||
|
||
IF v_result <> '0'
|
||
THEN
|
||
-- Foutmelding over max. aantal accounts, ontnemen van autorisaties van API-key user of bestaande/ongeldig mailadres, die gaan we loggen/opslaan in flexprop key 33 (prs_kenmerk bij contactpersoon)
|
||
-- Maar eerst gaan we alle vinkjes die eventueel zijn gewijzigd, weer gelijktrekken/corrigeren naar de autorisaties, zodat ze gesynct zijn.
|
||
v_result2 := UpdateAccountFlexProps (p_cps_key);
|
||
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (33,
|
||
'C',
|
||
p_cps_key,
|
||
v_result);
|
||
END IF;
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
---
|
||
--- FIP import van Mareon voor de leverancier en woco en hun onderlinge relatie.
|
||
---
|
||
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
|
||
-- v_prs_bedrijf_key is de leveranciers-key
|
||
-- v_prs_perslid_key is de perslid / account die contract moet krijgen, en derhalve tbv autorisatie meegaat
|
||
-- v_prs_contactpersoon_key is de contactpersoon bij het contract, en is gekoppeld aan perslid van vorig punt
|
||
-- v_prs_perslid_apikey gaat mee, omdat automatisch mail-adres wordt aangemaakt waarin deze apikey een rol in speelf
|
||
-- v_prs_overeenkomst_nr geeft aan in welk formaat de leverancier de factuur opstuurt: 'XML', 'UBL','SALES005','INSBOU004', 'INSBOU003', 'PDF'
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_add_contract_leverancier (p_import_key IN NUMBER,
|
||
v_prs_bedrijf_key IN NUMBER,
|
||
v_prs_perslid_key IN NUMBER,
|
||
v_prs_contactpersoon_key IN NUMBER,
|
||
v_prs_perslid_apikey IN VARCHAR2,
|
||
v_fac_email_setting_user IN VARCHAR2,
|
||
v_prs_overeenkomst_nr IN VARCHAR2)
|
||
AS
|
||
v_prs_bedrijf_naam VARCHAR2 (100);
|
||
v_prs_bedrijf_woco_key NUMBER (10);
|
||
prs_bedrijf_bedrijf_aantal NUMBER (10);
|
||
v_prs_afdeling_key NUMBER (10);
|
||
v_mailtoken VARCHAR2 (100);
|
||
v_fac_email_setting_attachpath VARCHAR2 (1000);
|
||
v_extensie VARCHAR2 (20);
|
||
v_extensie_verplicht VARCHAR2 (20);
|
||
v_fac_email_setting_volgnr NUMBER(10);
|
||
c_test_of_prod VARCHAR2 (100);
|
||
BEGIN
|
||
SELECT MAX (prs_bedrijf_naam)
|
||
INTO v_prs_bedrijf_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
|
||
-- fac_groep_key 9 is gereserveerd voor contractanten
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (9, v_prs_perslid_key);
|
||
|
||
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_prs_bedrijf_woco_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper =
|
||
(SELECT UPPER (ud.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
|
||
IF v_prs_bedrijf_woco_key IS NOT NULL
|
||
THEN
|
||
SELECT COUNT (*)
|
||
INTO prs_bedrijf_bedrijf_aantal
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_key;
|
||
|
||
IF prs_bedrijf_bedrijf_aantal = 0
|
||
THEN
|
||
INSERT INTO prs_bedrijf_bedrijf (prs_bedrijf_key1,
|
||
prs_bedrijf_key2,
|
||
prs_bedrijf_externid2,
|
||
prs_bedrijf_bedrijf_status,
|
||
prs_bedrijf_bedrijf_startdatum)
|
||
SELECT v_prs_bedrijf_woco_key,
|
||
v_prs_bedrijf_key,
|
||
NULL,
|
||
0,
|
||
NULL
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
SELECT MIN (prs_afdeling_key)
|
||
INTO v_prs_afdeling_key
|
||
FROM prs_afdeling
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_woco_key;
|
||
|
||
IF v_prs_afdeling_key IS NOT NULL
|
||
THEN
|
||
-- En dan nog nog het contract:
|
||
-- Nieuw contract van soort 'Overig/Diversen' (disckey 5) met als contractbeheerder 'Facilitor' (prs_perslid_key 4) en vaste kostenplaats NVT (key 1).
|
||
-- Contract gaat tussen de eerst gevonden afdeling v_prs_afdeling_key van Opdrachtgever 'v_prs_bedrijf_woco_key',
|
||
-- en van contractant 'v_prs_bedrijf_key', status van contract is gewoon actief (value 0). opzegtermijn en rappeltermijn is niet relevant, gewoon de eerste key.
|
||
INSERT INTO cnt_contract (cnt_contract_omschrijving,
|
||
cnt_contract_looptijd_tot,
|
||
cnt_contract_kosten,
|
||
cnt_prs_bedrijf_key,
|
||
prs_contactpersoon_key,
|
||
ins_discipline_key,
|
||
prs_perslid_key_beh,
|
||
prs_kostenplaats_key,
|
||
prs_afdeling_key_eig,
|
||
cnt_contract_status,
|
||
cnt_contract_looptijd_van,
|
||
cnt_contract_opzegtermijn,
|
||
cnt_contract_rappeltermijn)
|
||
SELECT 'Algemene verplichting tbv diverse facturen',
|
||
TO_DATE ('31-12-2099', 'dd-mm-yyyy'),
|
||
0,
|
||
v_prs_bedrijf_key,
|
||
v_prs_contactpersoon_key,
|
||
5,
|
||
4,
|
||
1,
|
||
v_prs_afdeling_key,
|
||
0,
|
||
TRUNC (SYSDATE),
|
||
MIN (cnt_termijn_key),
|
||
MIN (cnt_termijn_key)
|
||
FROM cnt_termijn;
|
||
|
||
-- Aanmaak van een mailadres FAC_EMAIL_SETTING, waarnaar de XML (UBL, SALES005, INSBOU...) of de PDF naar toe kan worden gestuurd.
|
||
-- Afhankelijk van het fatuurformaat, welke in de FIP wordt meegegeven in overeenkomst bij contractant (fac_imp_ext_bedrijf->prs_overeenkomst_nr VARCHAR(25), dus welke XML of PDF, zal de vervolgactie gestart.
|
||
|
||
IF v_prs_overeenkomst_nr IN ('XML',
|
||
'UBL',
|
||
'SALES005',
|
||
'INSBOU004',
|
||
'INSBOU003',
|
||
'PDF')
|
||
THEN
|
||
-- Als parameter 'v_fac_email_setting_user' wordt meegegeven, dan bepaalt deze het mailadres (= kolom user) van fac_email_setting, en anders
|
||
-- wordt fac_email_setting_user runtime bepaald aan de hand van prefix factuur, gevolgd door de unieke prs_bedrijf_key van de woco, gevolgd door een random 16-teken string.
|
||
IF v_fac_email_setting_user IS NOT NULL
|
||
THEN
|
||
-- MARX#73871 Mogelijkheid van 1 mailadres voor zowel XML als PDF
|
||
v_mailtoken := v_fac_email_setting_user;
|
||
ELSE
|
||
v_mailtoken := 'factuur_' || v_prs_bedrijf_woco_key || '_' || DBMS_RANDOM.STRING ('x', 16);
|
||
END IF;
|
||
|
||
-- fac_email_setting_attachpath is afhankelijk van XML of PDF.
|
||
IF v_prs_overeenkomst_nr = 'PDF'
|
||
THEN
|
||
SELECT DECODE (fac.getsetting ('fac_otap'), 'P', 'P', 'A', 'T', 'T') INTO c_test_of_prod FROM DUAL;
|
||
|
||
v_fac_email_setting_attachpath :=
|
||
'@/appl/marx/export/bctadapter.asp?eCapture='
|
||
|| c_test_of_prod
|
||
|| '&'
|
||
|| 'klantid='
|
||
|| v_prs_bedrijf_woco_key
|
||
|| '&'
|
||
|| 'from={0}'
|
||
|| '&'
|
||
|| 'to={1}'
|
||
|| '&'
|
||
|| 'subject={2}'
|
||
|| '&'
|
||
|| 'filename={filename}';
|
||
v_extensie := '.*\.(pdf)$';
|
||
v_extensie_verplicht := '.*\.(pdf)$';
|
||
v_fac_email_setting_volgnr := 10;
|
||
ELSE
|
||
v_fac_email_setting_attachpath := '@/appl/marx/hmail_factuur.asp?multifile=1';
|
||
v_extensie := '.*\.(xml|pdf)$';
|
||
v_extensie_verplicht := '.*\.(xml)$';
|
||
v_fac_email_setting_volgnr := 5;
|
||
END IF;
|
||
|
||
INSERT INTO fac_email_setting (fac_email_setting_user,
|
||
fac_email_setting_frommode,
|
||
fac_email_setting_attachpath,
|
||
fac_email_setting_attachext,
|
||
fac_email_setting_reqattachext,
|
||
fac_email_setting_volgnr,
|
||
prs_perslid_key_auth
|
||
)
|
||
SELECT v_mailtoken, 0, v_fac_email_setting_attachpath, v_extensie, v_extensie_verplicht,v_fac_email_setting_volgnr, v_prs_perslid_key FROM DUAL;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Bedrijf met naam '
|
||
|| v_prs_bedrijf_naam
|
||
|| ' heeft het volgende mailadres toegewezen gekregen: '
|
||
|| v_mailtoken
|
||
|| '@marx.mareon.nl voor productie (of '
|
||
|| v_mailtoken
|
||
|| '@marx.mareon-test.nl voor acceptatietestomgeving)',
|
||
'Mailadres');
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_import_leveranciers (p_import_key IN NUMBER, p_LU IN VARCHAR2)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
|
||
v_kenmerk_gevonden NUMBER (10);
|
||
v_perslid_loginnaam_gevonden NUMBER (10);
|
||
|
||
v_bedrijf_key NUMBER (10);
|
||
|
||
|
||
|
||
-- Deze cursor bepaalt/controleert of er ingelezen bedrijven zijn, waarvan de opgegeven iban of de opgegeven oslogin al bestaat.
|
||
-- Want in dat geval lijkt er er bijzonder sterk op en gaan wij ervan uit, dat dit bedrijf (leverancier) al bestaat/al eerder is geimporteerd bij een eerdere import van een andere woco.
|
||
-- Dan willen we dat record uit de ingelezen tabel wegknikkeren, om te voorkomen dat ten onrechte dat bedrijf wordt aangemaakt in prs_bedrijf, en moet de FIP maar aangepast worden
|
||
-- als het toch een ander bedrijf betreft.
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT prs_bedrijf_naam,
|
||
SUBSTR (prs_bedrijf_overig1, 1, 30) iban,
|
||
SUBSTR (prs_bedrijf_overig2, 1, 30) g_iban,
|
||
SUBSTR (prs_bedrijf_overig3, 1, 30) oslogin,
|
||
prs_leverancier_nr
|
||
FROM fac_imp_ext_bedrijf;
|
||
BEGIN
|
||
--- LUC komt (nog) niet mee in de importsheet,
|
||
--- Als parameter p_LU = Utvoerende (= aannemer), dan gewoon alle U op 1 zetten...
|
||
--- Daarom in deze post-import alle bedrijven in de import met p_import_key een LUC markeren.
|
||
IF p_LU = 'U'
|
||
THEN
|
||
UPDATE fac_imp_ext_bedrijf
|
||
SET prs_bedrijf_uitvoerende = 1;
|
||
ELSE
|
||
IF p_LU = 'L'
|
||
THEN
|
||
UPDATE fac_imp_ext_bedrijf
|
||
SET prs_bedrijf_leverancier = 1;
|
||
ELSE
|
||
IF p_LU = 'C'
|
||
THEN
|
||
UPDATE fac_imp_ext_bedrijf
|
||
SET prs_bedrijf_contract = 1;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
-- Bestaat er al een bedrijf met hetzelfde iban, dan beschouwen we dat als een potentieel probleem en willen we dat bedrijf NIET importeren
|
||
-- dus gaan we die verwijderen, wel loggen met een Error...
|
||
-- Call MARX#36582 in onderstaande query verwerkt...
|
||
-- Call MARX#37219 in onderstaande query verwerkt...
|
||
v_bedrijf_key := NULL;
|
||
|
||
SELECT MAX (prs_link_key)
|
||
INTO v_bedrijf_key
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 1
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_kenmerklink_waarde = rec.iban
|
||
AND EXISTS
|
||
(SELECT 'x'
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = prs_link_key
|
||
AND COALESCE (prs_bedrijf_intern, 0) = 0
|
||
AND prs_bedrijf_verwijder IS NULL);
|
||
|
||
|
||
IF v_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- IBAN bestond al, dus deleten en loggen
|
||
|
||
DELETE FROM fac_imp_ext_bedrijf
|
||
WHERE prs_bedrijf_naam = rec.prs_bedrijf_naam;
|
||
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'IBAN van bedrijf ' || rec.prs_bedrijf_naam || ' bestaat al bij een (ander) bedrijf',
|
||
'Bedrijf wordt overgeslagen!');
|
||
ELSE
|
||
-- Op basis van IBAN is dit een nieuw bedrijf, nu nog op oslogin checken
|
||
|
||
IF rec.oslogin IS NULL
|
||
THEN
|
||
-- LOGIN Mag niet leeg zijn, dus deleten en loggen dat we dit bedrijf niet accepteren
|
||
|
||
DELETE FROM fac_imp_ext_bedrijf
|
||
WHERE prs_bedrijf_naam = rec.prs_bedrijf_naam;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Login van bedrijf ' || rec.prs_bedrijf_naam || ' is leeg, mag niet!',
|
||
'Bedrijf wordt overgeslagen!');
|
||
ELSE
|
||
-- Login is gevuld, bestaat deze al? Want dat mag niet, gaat dan waarschijnlijk om het zelfde bedrijf....
|
||
|
||
v_perslid_loginnaam_gevonden := 0; -- init
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (rec.oslogin) AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_perslid_loginnaam_gevonden > 0
|
||
THEN
|
||
-- Login bestaat, dus deleten en loggen dat we dit bedrijf niet accepteren
|
||
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_bedrijf_key
|
||
FROM mar_v_leverancier_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (rec.oslogin);
|
||
|
||
DELETE FROM fac_imp_ext_bedrijf
|
||
WHERE prs_bedrijf_naam = rec.prs_bedrijf_naam;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Login van bedrijf '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' is niet uniek en bestaat al bij een (ander) bedrijf, mag niet!',
|
||
'Bedrijf wordt overgeslagen!');
|
||
ELSE
|
||
-- Nog ff checken of het bedrijf qua naam al bestaat, want dan kunnen we deze sowiso niet toevoegen, en willen we wel een Premium alert (MARX#39748).
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rec.prs_bedrijf_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
IF v_bedrijf_key IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Naam van bedrijf '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' is niet uniek en bestaat al bij een (ander) bedrijf, mag niet!',
|
||
'Bedrijf wordt overgeslagen!');
|
||
END IF;
|
||
|
||
|
||
-- Als het een BES-leverancier is, en GLN is leeg, dan ook deleten en loggen dat we dit bedrijf niet accepteren
|
||
IF (p_LU = 'L')
|
||
AND ( (rec.prs_leverancier_nr IS NULL)
|
||
OR (LENGTH (rec.prs_leverancier_nr) <> 13)
|
||
OR (TRIM (TRANSLATE (rec.prs_leverancier_nr, '0123456789', ' ')) IS NOT NULL))
|
||
THEN
|
||
DELETE FROM fac_imp_ext_bedrijf
|
||
WHERE prs_bedrijf_naam = rec.prs_bedrijf_naam;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf met naam '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' heeft geen GLN of ongeldig GLN terwijl die bij bestelling leveranciers verplicht is',
|
||
'Bedrijf wordt overgeslagen! Ketenstandaard vereist een GLN van opdrachtnemer bij artikel/SidB koppelingen');
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
IF v_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- Maar eerst nog call MARX#39748: FIP import leveranciers: "premium alert"
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 1001
|
||
AND prs_link_key = v_bedrijf_key
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_kenmerklink_waarde = '1';
|
||
|
||
IF v_kenmerk_gevonden > 0
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Bedrijf ' || rec.prs_bedrijf_naam || ' is PREMIUM en wordt overgeslagen',
|
||
'MARX#39748: Premium alert');
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_errorhint := v_errormsg;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_leveranciers (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
BEGIN
|
||
-- 1 2 31 32 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 33
|
||
-- 1.bedrijfsnaam 2.leveranciernummer 3.IBAN 4.IBAN G-rekening 5.AX-id 6.bezoek_adres 7.bezoek_postcode 8.bezoek_plaats 9.bezoek_land 10.post_adres 11.post_postcode 12.post_plaats 13.post_land 14.bedrijf_telefoon 15.bedrijf_fax 16.bedrijf_email 17.contactpersoon 18.contact_telefoon 19.contact_fax 20. login
|
||
|
||
-- hulpje 1;2;3;4;5;6; 7; 8; 9;10;11;12;13;14;15;16;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;34
|
||
v_seq_of_columns := '1;2;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;3;4;20';
|
||
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
|
||
marx_post_import_leveranciers (p_import_key, 'U');
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
-- MARX#60941: Twinq koppeling voor statusberichten naar Mareon
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_import_vve_lev (p_import_key IN NUMBER, p_woco_bedrijf_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
|
||
l_dummy_vvebeheerder_aanwezig NUMBER (10);
|
||
l_vve_prefix VARCHAR2 (10);
|
||
BEGIN
|
||
l_vve_prefix := 'VVE_';
|
||
|
||
-- Maak een algemene VVE-beheerder (als leverancier) bij de woco (als de woco zo'n algemene VVE-beheerder nog niet heeft tenminste)
|
||
-- Dus: check of algemene dummy VvE Beheerder voor woco bestaat, bestaat deze in de view mar_v_dummy_vvebeheerders_woco
|
||
SELECT DECODE (COUNT (*), 0, 0, 1)
|
||
INTO l_dummy_vvebeheerder_aanwezig
|
||
FROM mar_v_dummy_vvebeheerders_woco
|
||
WHERE prs_bedrijf_woco_key = p_woco_bedrijf_key;
|
||
|
||
IF l_dummy_vvebeheerder_aanwezig = 0
|
||
THEN
|
||
-- Zoek
|
||
INSERT INTO fac_imp_ext_bedrijf (prs_bedrijf_naam,
|
||
prs_overeenkomst_nr,
|
||
prs_bedrijf_leverancier,
|
||
prs_bedrijf_uitvoerende,
|
||
prs_bedrijf_contract,
|
||
prs_bedrijf_huurder,
|
||
prs_bedrijf_ingids,
|
||
prs_bedrijf_email,
|
||
prs_bedrijf_overig3)
|
||
SELECT l_vve_prefix || SUBSTR (prs_bedrijf_naam, 1, 60 - LENGTH (l_vve_prefix)),
|
||
p_woco_bedrijf_key,
|
||
0,
|
||
1,
|
||
0,
|
||
0,
|
||
0,
|
||
l_vve_prefix || SUBSTR (prs_bedrijf_email, 1, 100 - LENGTH (l_vve_prefix)),
|
||
l_vve_prefix || SUBSTR (prs_bedrijf_email, 1, 100 - LENGTH (l_vve_prefix))
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = p_woco_bedrijf_key;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_vvebeheerders (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
|
||
v_woco_bedrijf_key NUMBER (10);
|
||
v_woco_bedrijf_naam VARCHAR2 (200);
|
||
v_vve_methode VARCHAR2 (200);
|
||
BEGIN
|
||
-- Eerst ff checken of de instelling '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT' is gezet met een juiste waarde/bedrijfsnaam.
|
||
-- Met deze instelling wordt aangegeven voor welke opdrachtgever/woco de VVE-beheerders zijn (nog los van de wocoxlev waarin dat eigenlijk (ook) gebeurd).
|
||
-- Maar hier wordt de prs_bedrijf (woco) volgens '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT' eerst nog gekopieerd onder dezelfde naam VVE
|
||
|
||
|
||
SELECT MAX (prs_bedrijf_naam_upper), MAX (prs_bedrijf_key)
|
||
INTO v_woco_bedrijf_naam, v_woco_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper =
|
||
(SELECT UPPER (ud.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
|
||
-- MARX#72629 Mareon Vve: Import aanpassing voor directe communicatie Twinq
|
||
-- 2e check of instelling '$MAR_METHODE_VVEBEHEER_IMPORT' is gezet met een van deze 2 waarden: TWINQ of DATAROTONDE
|
||
|
||
SELECT MAX(UPPER (ud.fac_usrdata_omschr))
|
||
INTO v_vve_methode
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_METHODE_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND UPPER (ud.fac_usrdata_omschr) IN ('TWINQ','DATAROTONDE');
|
||
|
||
|
||
IF v_woco_bedrijf_naam IS NOT NULL
|
||
THEN
|
||
|
||
IF v_vve_methode IS NOT NULL
|
||
THEN
|
||
-- En nu kunnen we importeren....
|
||
-- Nog eerst ff de instelling loggen, zodat de importeur ziet voor welke opdrachtgever geimporteerd wordt...
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Deze import wordt volgens de instelling $MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT uitgevoerd voor opdrachtgever: '
|
||
|| v_woco_bedrijf_naam,
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT is ingesteld');
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Deze import wordt volgens de instelling $MAR_METHODE_VVEBEHEER_IMPORT uitgevoerd voor methode: '
|
||
|| v_vve_methode,
|
||
'Instelling $MAR_METHODE_VVEBEHEER_IMPORT is ingesteld');
|
||
|
||
-- 1 2 31 32 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 33
|
||
-- 1.bedrijfsnaam 2.leveranciernummer 3.IBAN 4.IBAN G-rekening 5.AX-id 6.bezoek_adres 7.bezoek_postcode 8.bezoek_plaats 9.bezoek_land 10.post_adres 11.post_postcode 12.post_plaats 13.post_land 14.bedrijf_telefoon 15.bedrijf_fax 16.bedrijf_email 17.contactpersoon 18.contact_telefoon 19.contact_fax 20. login
|
||
|
||
-- hulpje 1;2;3;4;5;6; 7; 8; 9;10;11;12;13;14;15;16;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;34
|
||
v_seq_of_columns := '1;2;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;3;4;20';
|
||
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
|
||
|
||
marx_post_import_leveranciers (p_import_key, 'U');
|
||
|
||
-- En dan nog evt. ook de dummy-vvebeheerder in de import tabel toevoegen.
|
||
-- Ivm doen we dat alleen als v_vve_methode = DATAROTONDE, ingeval van TWINQ is dat niet nodig:
|
||
IF v_vve_methode = 'DATAROTONDE'
|
||
THEN
|
||
marx_post_import_vve_lev (p_import_key, v_woco_bedrijf_key);
|
||
END IF;
|
||
ELSE
|
||
DELETE FROM fac_imp_ext_bedrijf;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Om deze import te kunnen draaien moet de instelling MAR_METHODE_VVEBEHEER_IMPORT eerst gevuld worden met de koppelmethode TWINQ of DATAROTONDE.',
|
||
'Instelling $MAR_METHODE_VVEBEHEER_IMPORT niet (goed) gezet: import wordt niet uitgevoerd.');
|
||
END IF;
|
||
|
||
ELSE
|
||
-- We gaan de import niet uitvoeren, we loggen dat de instelling niet gezet is....
|
||
-- Dan snel de import tabel alsnog opruimen...
|
||
DELETE FROM fac_imp_ext_bedrijf;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Om deze import te kunnen draaien moet de instelling $MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT eerst gevuld worden met de naam van de opdrachtgever voor wie deze vve-beheerder bedoeld zijn.',
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT niet (goed) gezet: import wordt niet uitgevoerd.');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_update_leveranciers (p_import_key IN NUMBER, p_lev_type IN VARCHAR2)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT prs_bedrijf_naam,
|
||
SUBSTR (prs_bedrijf_overig1, 1, 30) iban,
|
||
SUBSTR (prs_bedrijf_overig2, 1, 30) g_iban,
|
||
prs_bedrijf_overig3 oslogin,
|
||
prs_bedrijf_leverancier,
|
||
prs_bedrijf_uitvoerende,
|
||
prs_bedrijf_contract,
|
||
UPPER (prs_overeenkomst_nr) prs_overeenkomst_nr
|
||
FROM fac_imp_ext_bedrijf;
|
||
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_kenmerk_gevonden NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_srtperslid_key NUMBER (10);
|
||
v_prs_contactpersoon_key NUMBER (10);
|
||
v_prs_perslid_apikey VARCHAR2 (255);
|
||
v_loginnaam VARCHAR2 (255);
|
||
v_perslid_loginnaam_gevonden NUMBER (10);
|
||
v_prs_perslid_email VARCHAR2 (255);
|
||
v_fac_email_setting_user VARCHAR2 (255);
|
||
|
||
v_prs_bedrijf_woco_key NUMBER (10);
|
||
v_prs_afdeling_key NUMBER (10);
|
||
prs_bedrijf_bedrijf_aantal NUMBER (10);
|
||
l_pos_aapje NUMBER (10);
|
||
l_pos_punt NUMBER (10);
|
||
|
||
v_mailtoken VARCHAR2 (100);
|
||
v_fac_email_setting_attachpath VARCHAR2 (1000);
|
||
v_extensie VARCHAR2 (20);
|
||
BEGIN
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_fac_email_setting_user := NULL;
|
||
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rec.prs_bedrijf_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
|
||
IF v_prs_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- Bedrijf (leverancier) is gevonden, dan kunnen we kenmerken toevoegen, prs_perslid voor account toevoegen .....
|
||
|
||
|
||
IF rec.iban IS NOT NULL
|
||
THEN
|
||
-- Stap om IBAN van leverancier te registreren
|
||
-- kenmerk-key IBAN: key = 1
|
||
-- Let op: stel dat leverancier al bestaat (uit eerdere import van andere woco), dan wordt IBAN NIET(!!!) aangepast, anders gaat het bij die woco mogelijk mis.
|
||
-- In dat geval geven we een waarschuwing dat IBAN niet is bijgewerkt (wellicht loopt IBAN van deze woco achter of is het toch een nieuw bedrijf).
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 1
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- IBAN bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 1, rec.iban FROM DUAL;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'IBAN van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'IBAN wordt niet bijgewerkt!');
|
||
END IF;
|
||
END IF;
|
||
|
||
IF rec.g_iban IS NOT NULL
|
||
THEN
|
||
-- Stap om IBAN G-rekening van leverancier te registreren
|
||
-- kenmerk-key IBAN: key = 2
|
||
-- Let op: stel dat leverancier al bestaat (uit eerdere import van andere woco), dan wordt IBAN NIET(!!!) aangepast, anders gaat het bij die woco mogelijk mis.
|
||
-- In dat geval geven we een waarschuwing dat IBAN niet is bijgewerkt (wellicht loopt IBAN van deze woco achter of is het toch een nieuw bedrijf).
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 2
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- IBAN bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 2, rec.g_iban FROM DUAL;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'IBAN G-rekening van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'IBAN G-rekening wordt niet bijgewerkt!');
|
||
END IF;
|
||
END IF;
|
||
|
||
IF p_lev_type = 'VVE'
|
||
THEN
|
||
-- MARX#60941: Twinq koppeling voor statusberichten naar Mareon:
|
||
-- Alle vve-beheerders het kenmerk-vinkje 'VvE Beheerder' (prs_kenmerk_key 46) aanzetten...
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 46
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- VvE Beheerder staat nog niet aan, gan we nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 46, 1 FROM DUAL;
|
||
END IF;
|
||
|
||
-- Dummy VvE Beheerder: was er nog geen dummy VvE Beheerder, dan is deze in de marx_post_import_vve_lev erbij toegevoegd, en komen we die hier tegen.
|
||
-- En prs_overeenkomst_nr is hierbij gevuld (normaal is deze leeg), met de prs_bedrijf_key van de woco (en die we nodig hebben().
|
||
IF rec.prs_overeenkomst_nr IS NOT NULL
|
||
THEN
|
||
-- Hier hebben we te maken met de uitvoerende die is toegevoegd als Dummy VvE Beheerder in marx_post_import_vve_lev (omdat die er nog niet was)
|
||
-- Dus gaan we het referentie kenmerk "Standaard/dummy VvE Beheerder voor" (prs_kenmerk_key = 47) vullen met de woco (key van prs_bedrijf, en staat in overeenkomstnr.
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 47, rec.prs_overeenkomst_nr FROM DUAL;
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Stap om account voor leverancier/aannemer te maken, zodat deze gebruik kan maken van Mareon...
|
||
-- Alleen aanmaken indien prs_bedrijf nog geen contactpersoon heeft voor UITVOERENDE of BES-LEVERANCIER die wijst naar een prs_perslid met een api-key.
|
||
-- Als prs_bedrijf een CONTRACTANT is, oftewel we zijn bezig met de contractanten" import dan wel gewoon een 2e, 3e etc contactpersoon aanmaken voor dat bedrijf.
|
||
|
||
IF rec.prs_bedrijf_contract <> 1
|
||
THEN
|
||
SELECT MAX (p.prs_perslid_key), MAX (p.prs_perslid_apikey)
|
||
INTO v_prs_perslid_key, v_prs_perslid_apikey
|
||
FROM prs_contactpersoon c, prs_perslid p
|
||
WHERE c.prs_bedrijf_key = v_prs_bedrijf_key
|
||
AND c.prs_perslid_key = p.prs_perslid_key
|
||
AND prs_perslid_apikey IS NOT NULL
|
||
AND p.prs_perslid_verwijder IS NULL;
|
||
END IF;
|
||
|
||
IF v_prs_perslid_key IS NULL OR rec.prs_bedrijf_contract = 1
|
||
THEN
|
||
-- Leverancier heeft nog geen API-user, of we zijn bezig met de contractant import, dus nu toevoegen...
|
||
|
||
-- Wel ff checken of de loginnaam nog niet in gebruik is....
|
||
|
||
v_prs_perslid_email := NULL;
|
||
v_perslid_loginnaam_gevonden := 1; -- init
|
||
v_loginnaam := SUBSTR (rec.oslogin, 1, 30);
|
||
|
||
IF rec.prs_bedrijf_contract = 1
|
||
THEN
|
||
-- MARX#73871 Mogelijkheid van 1 mailadres voor zowel XML als PDF.
|
||
-- In de laatste kolom in de FIP-sheet kan voortaan voor 2 verschillende perslid's hetzelfde mailadres worden meegegeven tbv 1 mailadres in fac_email_setting
|
||
-- Bijvoorbeeld:
|
||
-- Ymere-100 Factuurscanning;100;;;PDF;;;;;;;;;;;;;;;facturen.ymere.100@mareon.nl
|
||
-- Ymere-100 E-invoicing;100;;;XML;;;;;;;;;;;;;;;facturen.ymere.100@mareon.nl
|
||
|
||
-- Maar de inlognaam bij perslid moet natuurlijk wel uniek worden, daarom een prefix van prs_overeenkomst_nr
|
||
-- Als die al uniek was, dan wordt die nog unieker ;-) (maw kan geen kwaad om dit onvoorwaardelijk te doen)...
|
||
IF rec.prs_overeenkomst_nr IS NOT NULL
|
||
THEN
|
||
v_loginnaam := SUBSTR(rec.prs_overeenkomst_nr || '.' || v_loginnaam, 1, 30);
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
IF v_loginnaam IS NOT NULL
|
||
THEN
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
END IF;
|
||
|
||
|
||
IF v_perslid_loginnaam_gevonden = 0
|
||
THEN
|
||
-- Loginnaam volgens kolom 20 aangemaakt.
|
||
-- Wanneer loginnaam een '@' bevat en daarna een '.' dan beschouwen we dat als mailadres, b.v. info@facilitor.nl
|
||
|
||
l_pos_aapje := INSTR (rec.oslogin, '@');
|
||
|
||
IF l_pos_aapje > 0
|
||
THEN
|
||
-- @ zit in login
|
||
l_pos_punt := INSTR (rec.oslogin, '.', l_pos_aapje);
|
||
|
||
IF l_pos_punt > 0
|
||
THEN
|
||
-- . zit na de @, dit is een mailadres, dus we gaan dit mailadres in de prs_perslid die zodadelijk wordt geinsert, toevoegen
|
||
v_prs_perslid_email := rec.oslogin;
|
||
v_fac_email_setting_user := SUBSTR(rec.oslogin, 1, INSTR (rec.oslogin, '@') - 1);
|
||
IF rec.prs_overeenkomst_nr IS NOT NULL
|
||
THEN
|
||
v_prs_perslid_email := rec.prs_overeenkomst_nr || '.' || v_prs_perslid_email;
|
||
END IF;
|
||
|
||
END IF;
|
||
END IF;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Loginnaam van bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
ELSE
|
||
-- Loginnaam bestaat al, nu gaan we de 1e tekens van bedrijfsnaam proberen ...
|
||
-- Loginnaam volgens kolom 20 aangemaakt.
|
||
IF v_loginnaam IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Loginnaam ' || v_loginnaam || ' van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'');
|
||
END IF;
|
||
|
||
v_loginnaam := SUBSTR (rec.prs_bedrijf_naam, 1, 30);
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_perslid_loginnaam_gevonden = 0
|
||
THEN
|
||
-- Loginnaam volgens 1e 30 tekens van bedrijfsnaam aangemaakt..
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Loginnaam van bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
ELSE
|
||
-- Loginnaam obv bedrijfsnaam bestaat al, nu gaan we een random loginnaam maken...
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Loginnaam ' || v_loginnaam || ' van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'');
|
||
|
||
|
||
|
||
-- Random loginnaam aangemaakt, we gaan ervan uit dat deze randwom string niet eerder is voorgekomen.
|
||
|
||
WHILE v_perslid_loginnaam_gevonden <> 0
|
||
LOOP
|
||
v_loginnaam := DBMS_RANDOM.STRING ('x', 8);
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Loginnaam van bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Nu gaan we het account voor de leverancier aanmaken...
|
||
v_prs_perslid_apikey := DBMS_RANDOM.STRING ('x', 32);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' heeft API key: ' || v_prs_perslid_apikey,
|
||
'API key');
|
||
|
||
-- Aanmaken persoon met functie 'Opdrachtnemer' (srtperlid_key = 1), Achternaam overnemen van bedrijfnaam,
|
||
|
||
IF v_prs_perslid_email IS NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf met naam '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' heeft GEEN mailadres gekregen en inloggen via wachtwoord vergeten werkt dan niet! ',
|
||
'Ongeldig/fout mailadres');
|
||
END IF;
|
||
|
||
IF rec.prs_bedrijf_contract = 1
|
||
THEN
|
||
-- Contractant
|
||
v_prs_srtperslid_key := 2;
|
||
ELSE
|
||
-- Uitvoerders en BES-leveranciers
|
||
v_prs_srtperslid_key := 1;
|
||
END IF;
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_apikey)
|
||
VALUES ('PRS',
|
||
v_prs_srtperslid_key,
|
||
1,
|
||
SUBSTR (rec.prs_bedrijf_naam, 1, 60),
|
||
v_prs_perslid_email,
|
||
v_loginnaam,
|
||
v_prs_perslid_apikey)
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
|
||
IF rec.prs_bedrijf_uitvoerende = 1
|
||
THEN
|
||
-- MARX#79548 SSO voor Aareon medewerkers, geen uid/pwd meer
|
||
-- Omdat we instelling 'email_password op 1 zetten', moet account (van aannemer) voortaan een gevuld ww hebben....
|
||
prs.setpassword(v_prs_perslid_key, DBMS_RANDOM.STRING ('x', 16));
|
||
END IF;
|
||
|
||
INSERT INTO prs_contactpersoon (prs_contactpersoon_naam,
|
||
prs_bedrijf_key,
|
||
prs_perslid_key,
|
||
prs_contactpersoon_email)
|
||
VALUES (SUBSTR (rec.prs_bedrijf_naam, 1, 30),
|
||
v_prs_bedrijf_key,
|
||
v_prs_perslid_key,
|
||
SUBSTR (v_prs_perslid_email, 1, 50))
|
||
RETURNING prs_contactpersoon_key
|
||
INTO v_prs_contactpersoon_key;
|
||
|
||
IF rec.prs_bedrijf_uitvoerende = 1
|
||
THEN
|
||
-- Flexprop autorisatie vink-veldjes met keys 35 (vakman), 37 (facturatie) en 38 (beheerder) aanzetten, daarna de functie UpdateAccountAutorisatie die de gebruikersgroepen gaat uitdelen.
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (35,
|
||
'C',
|
||
v_prs_contactpersoon_key,
|
||
'1');
|
||
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (37,
|
||
'C',
|
||
v_prs_contactpersoon_key,
|
||
'1');
|
||
|
||
INSERT INTO prs_kenmerklink (prs_kenmerk_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_link_key,
|
||
prs_kenmerklink_waarde)
|
||
VALUES (38,
|
||
'C',
|
||
v_prs_contactpersoon_key,
|
||
'1');
|
||
|
||
v_errorhint := UpdateAccountAutorisatie (v_prs_contactpersoon_key);
|
||
END IF;
|
||
|
||
IF rec.prs_bedrijf_leverancier = 1
|
||
THEN
|
||
-- fac_groep_key 7 is gereserveerd voor leverancier bestellingen
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (7, v_prs_perslid_key);
|
||
END IF;
|
||
|
||
IF rec.prs_bedrijf_contract = 1
|
||
THEN
|
||
-- We gaan contract, autorisaties, fac_email_setting etc toevoegen....
|
||
marx_add_contract_leverancier (p_import_key,
|
||
v_prs_bedrijf_key,
|
||
v_prs_perslid_key,
|
||
v_prs_contactpersoon_key,
|
||
v_prs_perslid_apikey,
|
||
v_fac_email_setting_user,
|
||
rec.prs_overeenkomst_nr);
|
||
|
||
-- Reset van overeenkomstnummer (hier stond term PDF, UBL, SALES005 etc), die gaan we nu leeg maken....
|
||
UPDATE prs_bedrijf
|
||
SET prs_overeenkomst_nr = NULL
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' had al een account',
|
||
'Account niet aangemaakt');
|
||
END IF;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' is niet gevonden',
|
||
'Postupdate wordt overgeslagen');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_errorhint := v_errormsg;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_leveranciers (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
fac_update_bedrijf_body (p_import_key, 0);
|
||
marx_post_update_leveranciers (p_import_key, 'MLD');
|
||
END;
|
||
/
|
||
|
||
-- MARX#60941: Twinq koppeling voor statusberichten naar Mareon
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_update_vvebeheerders (p_import_key IN NUMBER, p_max_prs_bedrijf_key IN NUMBER)
|
||
AS
|
||
v_woco_bedrijf_key NUMBER (10);
|
||
v_woco_bedrijf_naam VARCHAR2 (200);
|
||
v_dummy_vvebeheerder_key NUMBER (10);
|
||
v_dummy_vvebeheerder_naam VARCHAR2 (100);
|
||
v_perslid_vvebeheerder_key NUMBER (10);
|
||
v_bedrijf_bedrijf_gevonden NUMBER (10);
|
||
v_vve_methode VARCHAR2 (100);
|
||
|
||
c_prs_bedrijfadres_type VARCHAR2 (100);
|
||
c_test_of_prod VARCHAR2 (100);
|
||
c_uid VARCHAR2 (512);
|
||
c_pwd VARCHAR2 (512);
|
||
c_prs_bedrijfadres_url VARCHAR2 (512);
|
||
c_prs_bedrijfadres_oa_tokenurl VARCHAR2 (512);
|
||
c_prs_bedrijfadres_ordermode NUMBER (3);
|
||
c_prs_bedrijfadres_certificate VARCHAR2 (255);
|
||
c_prs_bedrijfadres_authmethod NUMBER (3);
|
||
c_prs_bedrijfadres_xsl VARCHAR2 (256);
|
||
c_prs_bedrijfadres_ext VARCHAR2 (10);
|
||
c_prs_bedrijfadres_flexfiles NUMBER (3);
|
||
|
||
-- Cursor met alle VveBeheerders die:
|
||
-- a) in deze import zijn toegevoegd (> p_max_prs_bedrijf_key), en
|
||
-- b) niet de dummy vve beheerder zijn.
|
||
CURSOR c1
|
||
IS
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam
|
||
FROM mar_v_vvebeheerders
|
||
WHERE prs_bedrijf_key > p_max_prs_bedrijf_key;
|
||
BEGIN
|
||
|
||
|
||
-- De import doen we voor bepaalde methode: TWINQ of DATAROTONDE...
|
||
SELECT MAX(UPPER (ud.fac_usrdata_omschr))
|
||
INTO v_vve_methode
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_METHODE_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL
|
||
AND UPPER (ud.fac_usrdata_omschr) IN ('TWINQ','DATAROTONDE');
|
||
|
||
--MARX#61326: Productie of test: oa. instellen van Twinq koppeling
|
||
--Default/standaard waarden (constanten) tbv technisch adres...
|
||
c_prs_bedrijfadres_type := 'O';
|
||
c_prs_bedrijfadres_ext := 'xml';
|
||
c_prs_bedrijfadres_flexfiles := 0;
|
||
c_uid := NULL;
|
||
c_pwd := NULL;
|
||
c_prs_bedrijfadres_oa_tokenurl := NULL;
|
||
IF v_vve_methode = 'TWINQ'
|
||
THEN
|
||
SELECT DECODE (fac.getsetting ('fac_otap'), 'P', 'portaal', 'A', 'accp-rest', 'accp-rest') INTO c_test_of_prod FROM DUAL;
|
||
|
||
SELECT MAX(ud.fac_usrdata_omschr)
|
||
INTO c_uid
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_TWINQ_UID'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
SELECT MAX(ud.fac_usrdata_omschr)
|
||
INTO c_pwd
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_TWINQ_PWD'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
c_prs_bedrijfadres_url := 'https://' || c_test_of_prod || '.twinq.nl/apex/twinq/mareon/keten';
|
||
c_prs_bedrijfadres_oa_tokenurl := 'https://' || c_test_of_prod || '.twinq.nl/apex/twinq/oauth/token';
|
||
c_prs_bedrijfadres_ordermode := NULL;
|
||
c_prs_bedrijfadres_certificate := NULL;
|
||
c_prs_bedrijfadres_authmethod := 4;
|
||
c_prs_bedrijfadres_xsl := 'xsl\F_GetOnderhoudsOpdrachtSIDB_SALES005_1.0.xsl';
|
||
END IF;
|
||
|
||
IF v_vve_methode = 'DATAROTONDE'
|
||
THEN
|
||
SELECT DECODE (fac.getsetting ('fac_otap'), 'P', 'prod', 'A', 'acc', 'acc') INTO c_test_of_prod FROM DUAL;
|
||
c_prs_bedrijfadres_url := 'https://' || c_test_of_prod || '.datarotonde.com';
|
||
c_prs_bedrijfadres_ordermode := 13;
|
||
c_prs_bedrijfadres_certificate := 'LOCAL_MACHINE\My\Mareon';
|
||
c_prs_bedrijfadres_authmethod := 0;
|
||
c_prs_bedrijfadres_xsl := 'xsl\F_GetOnderhoudsOpdrachtSIDB_SALES005_1.0_etim3.1.xsl';
|
||
END IF;
|
||
|
||
-- De import doen we voor bepaalde woco...
|
||
SELECT MAX (prs_bedrijf_naam_upper), MAX (prs_bedrijf_key)
|
||
INTO v_woco_bedrijf_naam, v_woco_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper =
|
||
(SELECT UPPER (ud.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
|
||
IF v_woco_bedrijf_naam IS NOT NULL
|
||
THEN
|
||
IF v_vve_methode = 'TWINQ'
|
||
THEN
|
||
-- Fetch de algemene TWINQ dummy vve beheerder
|
||
SELECT MAX(fac.safe_to_number(ud.fac_usrdata_omschr)), 'Twinq DUMMY VvE Beheerder'
|
||
INTO v_dummy_vvebeheerder_key, v_dummy_vvebeheerder_naam
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_TWINQ_DUMMY_VvE_Beheerder'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
END IF;
|
||
IF v_vve_methode = 'DATAROTONDE'
|
||
THEN
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam
|
||
INTO v_dummy_vvebeheerder_key, v_dummy_vvebeheerder_naam
|
||
FROM mar_v_dummy_vvebeheerders_woco
|
||
WHERE UPPER (prs_bedrijf_woco_naam) = v_woco_bedrijf_naam;
|
||
END IF;
|
||
|
||
-- Fetch de API-user (= prs_perslid) van deze bij dummy vve beheerder
|
||
SELECT prs_perslid_key
|
||
INTO v_perslid_vvebeheerder_key
|
||
FROM mar_v_leverancier_api_perslid
|
||
WHERE prs_bedrijf_key = v_dummy_vvebeheerder_key;
|
||
|
||
-- Deze dummy vve_beheerder moet bij alle vve-beheerder-leveranciers van woco (te bepalen via view mar_v_vvebeheerders) als contactpersoon worden opgenomen (tbv statusbericht)
|
||
-- behalve bij zichzelf natuurlijk en ook niet bij diegene waar die dat al was (dus max. 1 keer)
|
||
--MARX#61326: Productie of test: oa. instellen van Twinq koppeling, dus ook technisch adres toevoegen (behalve de dummy VvE beheerder, want die krijgt nooit opdrachten
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
-- Voor alle (in deze import toegevoegde) VvE beheerders muv de dummy...
|
||
|
||
IF v_vve_methode = 'TWINQ' OR rec.prs_bedrijf_key <> v_dummy_vvebeheerder_key
|
||
THEN
|
||
-- De contactpersoon van de dummy bij de andere Vve beheerders (van de woco) registreren...
|
||
INSERT INTO prs_contactpersoon (prs_contactpersoon_naam, prs_bedrijf_key, prs_perslid_key)
|
||
VALUES (SUBSTR (v_dummy_vvebeheerder_naam, 1, 30), rec.prs_bedrijf_key, v_perslid_vvebeheerder_key);
|
||
|
||
--MARX#61326: Toevoegen van een TA (technisch adres) bij de VvE beheerder (behalve de dummy)
|
||
INSERT INTO prs_bedrijfadres (prs_bedrijf_key,
|
||
prs_bedrijfadres_type,
|
||
prs_bedrijfadres_url,
|
||
prs_bedrijfadres_username,
|
||
prs_bedrijfadres_password,
|
||
prs_bedrijfadres_oa_token_url,
|
||
prs_bedrijfadres_ordermode,
|
||
prs_bedrijfadres_certificate,
|
||
prs_bedrijfadres_authmethod,
|
||
prs_bedrijfadres_xsl,
|
||
prs_bedrijfadres_ext,
|
||
prs_bedrijfadres_flexfiles)
|
||
SELECT rec.prs_bedrijf_key,
|
||
c_prs_bedrijfadres_type,
|
||
c_prs_bedrijfadres_url,
|
||
c_uid,
|
||
c_pwd,
|
||
c_prs_bedrijfadres_oa_tokenurl,
|
||
c_prs_bedrijfadres_ordermode,
|
||
c_prs_bedrijfadres_certificate,
|
||
c_prs_bedrijfadres_authmethod,
|
||
c_prs_bedrijfadres_xsl,
|
||
c_prs_bedrijfadres_ext,
|
||
c_prs_bedrijfadres_flexfiles
|
||
FROM DUAL;
|
||
END IF;
|
||
|
||
-- En voor alle VvE beheerders (incl de dummy Vve beheerder) premium registeren (want dummy zorgt voor de terugweg-berichten zoals het statusbericht).
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_bedrijf_bedrijf_gevonden
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = v_woco_bedrijf_key AND prs_bedrijf_key2 = rec.prs_bedrijf_key;
|
||
|
||
IF (v_bedrijf_bedrijf_gevonden = 0)
|
||
THEN
|
||
-- Combi bestaat nog niet, we gaan inserten (zonder nog lev-id van ERP, dat komt in de import woco_x_lev die ook MOET! volgen, daar gebeurt dan een update van dit id.
|
||
INSERT INTO prs_bedrijf_bedrijf (prs_bedrijf_key1,
|
||
prs_bedrijf_key2,
|
||
prs_bedrijf_bedrijf_startdatum,
|
||
prs_bedrijf_bedrijf_status,
|
||
prs_bedrijf_bedrijf_fee1)
|
||
SELECT v_woco_bedrijf_key, rec.prs_bedrijf_key, TRUNC (SYSDATE), 1, fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31;
|
||
ELSE
|
||
-- Combi bestaat al, we gaan updaten, in principe is dit een theoretische case, maar voor de zekerheid wel rekening mee houden...
|
||
UPDATE prs_bedrijf_bedrijf
|
||
SET prs_bedrijf_bedrijf_startdatum = TRUNC (SYSDATE),
|
||
prs_bedrijf_bedrijf_status = 1,
|
||
prs_bedrijf_bedrijf_fee1 = (SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31)
|
||
WHERE prs_bedrijf_key1 = v_woco_bedrijf_key AND prs_bedrijf_key2 = rec.prs_bedrijf_key;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
END IF;
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_vvebeheerders (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_max_prs_bedrijf_key NUMBER (10);
|
||
BEGIN
|
||
-- Bepaal eerst de max. bedrijfskey, deze wordt gebruikt in de functie marx_post_update_vvebeheerders, alle bedrijven (vve-beheerders) met een hogere key (die dus zijn toegevoegd door deze import) krijgen een post-actie...
|
||
SELECT MAX (prs_bedrijf_key) INTO v_max_prs_bedrijf_key FROM prs_bedrijf;
|
||
|
||
|
||
fac_update_bedrijf_body (p_import_key, 0);
|
||
marx_post_update_leveranciers (p_import_key, 'VVE');
|
||
marx_post_update_vvebeheerders (p_import_key, v_max_prs_bedrijf_key);
|
||
|
||
-- Reset van de instelling '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT', oftewel leeg maken voor de volgende keer dat je expliciet, dus nagedacht, de instelling weer moet zetten.
|
||
UPDATE fac_usrdata ud
|
||
SET ud.fac_usrdata_omschr = ''
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
-- Reset van de instelling '$MAR_METHODE_VVEBEHEER_IMPORT', oftewel leeg maken voor de volgende keer dat je expliciet, dus nagedacht, de instelling weer moet zetten.
|
||
UPDATE fac_usrdata ud
|
||
SET ud.fac_usrdata_omschr = ''
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_METHODE_VVEBEHEER_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#41690: UBL ondersteuning voor Rochdale via Mareon
|
||
----------------------------------------------------------- Idem voor de Contractanten --------------------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_contractant (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
v_woco_bedrijf_naam VARCHAR (200);
|
||
BEGIN
|
||
-- Eerst ff checken of de instelling '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT' is gezet met een juiste waarde/bedrijfsnaam.
|
||
-- Met deze instelling wordt anagegeven voor welke opdrachtgever/woco de contractanten zijn.
|
||
|
||
SELECT MAX (prs_bedrijf_naam_upper)
|
||
INTO v_woco_bedrijf_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper =
|
||
(SELECT UPPER (ud.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
|
||
IF v_woco_bedrijf_naam IS NOT NULL
|
||
THEN
|
||
-- En nu kunnen we importeren....
|
||
-- Nog eerst ff de instelling loggen, zodat de importeur ziet voor welke opdrachtgever geimporteerd wordt...
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Deze import wordt volgens de instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT uitgevoerd voor opdrachtgever: '
|
||
|| v_woco_bedrijf_naam,
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT is ingesteld');
|
||
|
||
-- 1 2 31 32 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 33
|
||
-- 1.bedrijfsnaam 2.leveranciernummer 3.IBAN 4.IBAN G-rekening 5.AX-id 6.bezoek_adres 7.bezoek_postcode 8.bezoek_plaats 9.bezoek_land 10.post_adres 11.post_postcode 12.post_plaats 13.post_land 14.bedrijf_telefoon 15.bedrijf_fax 16.bedrijf_email 17.contactpersoon 18.contact_telefoon 19.contact_fax 20. login
|
||
|
||
-- hulpje 1;2;3;4;5;6; 7; 8; 9;10;11;12;13;14;15;16;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;34
|
||
v_seq_of_columns := '1;2;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;3;4;20';
|
||
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
|
||
marx_post_import_leveranciers (p_import_key, 'C');
|
||
ELSE
|
||
-- We gaan de import niet uitvoeren, we loggen dat de instelling niet gezet is....
|
||
-- Dan snel de import tabel alsnog opruimen...
|
||
DELETE FROM fac_imp_ext_bedrijf;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Om deze import te kunnen draaien moet de instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT eerst gevuld worden met de naam van de opdrachtgever voor wie deze contractanten bedoeld zijn.',
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT niet (goed) gezet: import wordt niet uitgevoerd.');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_contractant (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
BEGIN
|
||
-- Parameter p_sync = 0 of 1:
|
||
-- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd.
|
||
-- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete
|
||
fac_update_bedrijf_body (p_import_key, 0);
|
||
marx_post_update_leveranciers (p_import_key, 'CNT');
|
||
|
||
-- Reset van de instelling '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT', oftewel leeg maken voor de volgende keer dat je expliciet, dus nagedacht, de instelling weer moet zetten.
|
||
|
||
UPDATE fac_usrdata ud
|
||
SET ud.fac_usrdata_omschr = ''
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#73871 Mogelijkheid van 1 mailadres voor zowel XML als PDF
|
||
-- Wanneer een opdrachtgever (woco) ons - als applicatiebeheerder - vraagt of we de 2 mailadressen, 1 voor XML en 1 voor PDF(scan), willen halveren naar 1 mailadres voor beide, dan kan dat via deze PROC
|
||
-- Uitgangspunten:
|
||
-- 1. Als parameter moet de prs_bedrijf_key van opdrachtgever worden opgegeven
|
||
-- 2. Het aantal mailadressen van die opdrachtgever (prs_bedrijf_key) worden gehalveerd, dus van 8 naar 4, van 4 naar 2, van 2 naar 1. Dwz niet het aantal records fac_email_setting, maar het aantal records met unieke fac_email_setting_user (van die opdrachtgever)
|
||
-- 3. Alleen de paren (2 stuks) mailadressen voor die opdrachtgever worden gehalveerd als er exact 2 mailadressen aanwezig zijn voor alle contractanten met hetzelfde "AX nummer" (PRS_OVEREENKOMST_NR, deze mag ook leeg zijn)
|
||
-- 4. Wanneer een opdrachtgever b.v. 1 mailadres heeft, dan gebeurt er niets (casus: klant heeft bv alleen PDF scanning). Bij 3 mailadressen waarvan de (3) contractanten allen hetzelfde "AX nummer" hebben, gebeurt ook niet.
|
||
-- 5. Dus alleen als een opdrachtgever 2 mailadressen heeft bij 2 contractanten met hetzelfde AX nummer (mag ook leeg zijn), dan wordt (analoog aan PROC marx_add_contract_leverancier):
|
||
-- a) het mailadres van de PDF in het andere mailadres (XML) gezet, zodat dus fac_email_setting_user aan elkaar gelijk is (= gelijk mailadres)
|
||
-- b) volgnummer van PDF op 10, van XML op 5
|
||
-- c) verplichte extensie gevuld
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_convert_fac_email_setting (p_prs_bedrijf_key IN NUMBER)
|
||
AS
|
||
v_fac_email_setting_key_pdf NUMBER(10);
|
||
v_fac_email_setting_key_xml NUMBER(10);
|
||
v_fac_email_setting_user_pdf VARCHAR2 (100);
|
||
v_extensie VARCHAR2 (20);
|
||
v_extensie_verplicht VARCHAR2 (20);
|
||
v_fac_email_setting_volgnr NUMBER(10);
|
||
|
||
-- Cursor met alle "paren" mailadressen van opdrachtgever
|
||
CURSOR c_mailadressen
|
||
IS
|
||
SELECT b.prs_bedrijf_key, b.prs_bedrijf_naam, b2.prs_overeenkomst_nr, count(*)
|
||
FROM cnt_contract c, prs_afdeling a, prs_bedrijf b, prs_bedrijf b2, prs_contactpersoon cp, prs_perslid p, fac_email_setting e
|
||
WHERE a.prs_afdeling_key = c.prs_afdeling_key_eig
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
||
AND b2.prs_bedrijf_key = cp.prs_bedrijf_key
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND e.fac_email_setting_attachpath like '%' || p.prs_perslid_apikey || '%'
|
||
AND b.prs_bedrijf_key = p_prs_bedrijf_key
|
||
GROUP BY b.prs_bedrijf_key, b.prs_bedrijf_naam, b2.PRS_OVEREENKOMST_NR
|
||
HAVING count(*) = 2
|
||
ORDER BY b.prs_bedrijf_key, b.prs_bedrijf_naam, b2.PRS_OVEREENKOMST_NR;
|
||
|
||
BEGIN
|
||
|
||
FOR rec_mail IN c_mailadressen
|
||
LOOP
|
||
BEGIN
|
||
-- Selecteer het PDF mailadres van het paar (2 stuks) mailadressen
|
||
SELECT e.fac_email_setting_key, e.fac_email_setting_user
|
||
INTO v_fac_email_setting_key_pdf, v_fac_email_setting_user_pdf
|
||
FROM cnt_contract c, prs_afdeling a, prs_bedrijf b, prs_bedrijf b2, prs_contactpersoon cp, prs_perslid p, fac_email_setting e
|
||
WHERE a.prs_afdeling_key = c.prs_afdeling_key_eig
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
||
AND b2.prs_bedrijf_key = cp.prs_bedrijf_key
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND e.fac_email_setting_attachpath like '%' || p.prs_perslid_apikey || '%'
|
||
AND b.prs_bedrijf_key = p_prs_bedrijf_key
|
||
AND (b2.prs_overeenkomst_nr = to_char(rec_mail.prs_overeenkomst_nr) OR b2.prs_overeenkomst_nr IS NULL)
|
||
AND UPPER(fac_email_setting_attachpath) like '%BCTADAPTER.ASP%';
|
||
|
||
v_extensie := '.*\.(pdf)$';
|
||
v_extensie_verplicht := '.*\.(pdf)$';
|
||
v_fac_email_setting_volgnr := 10;
|
||
|
||
UPDATE fac_email_setting
|
||
SET fac_email_setting_attachext = v_extensie,
|
||
fac_email_setting_reqattachext = v_extensie_verplicht,
|
||
fac_email_setting_volgnr = v_fac_email_setting_volgnr
|
||
WHERE fac_email_setting_key = v_fac_email_setting_key_pdf;
|
||
|
||
-- Selecteer de andere - dus de XML - van het paar (2 stuks) mailadressen
|
||
SELECT e.fac_email_setting_key
|
||
INTO v_fac_email_setting_key_xml
|
||
FROM cnt_contract c, prs_afdeling a, prs_bedrijf b, prs_bedrijf b2, prs_contactpersoon cp, prs_perslid p, fac_email_setting e
|
||
WHERE a.prs_afdeling_key = c.prs_afdeling_key_eig
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND c.prs_contactpersoon_key = cp.prs_contactpersoon_key
|
||
AND b2.prs_bedrijf_key = cp.prs_bedrijf_key
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND e.fac_email_setting_attachpath like '%' || p.prs_perslid_apikey || '%'
|
||
AND b.prs_bedrijf_key = p_prs_bedrijf_key
|
||
AND (b2.prs_overeenkomst_nr = to_char(rec_mail.prs_overeenkomst_nr) OR b2.prs_overeenkomst_nr IS NULL)
|
||
AND e.fac_email_setting_key <> v_fac_email_setting_key_pdf;
|
||
|
||
v_extensie := '.*\.(xml|pdf)$';
|
||
v_extensie_verplicht := '.*\.(xml)$';
|
||
v_fac_email_setting_volgnr := 5;
|
||
|
||
UPDATE fac_email_setting
|
||
SET fac_email_setting_attachext = v_extensie,
|
||
fac_email_setting_reqattachext = v_extensie_verplicht,
|
||
fac_email_setting_volgnr = v_fac_email_setting_volgnr,
|
||
fac_email_setting_user = v_fac_email_setting_user_pdf
|
||
WHERE fac_email_setting_key = v_fac_email_setting_key_xml;
|
||
|
||
END;
|
||
END LOOP;
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
-- Functie marx_opdrachtnemer_check, die controleert of een bedrijf met mailadres 'p_mailadres' in Mareon bestaat, zo niet, dan of naam 'p_bedrijfnaam' ongeveer bestaat.
|
||
-- Uitgangspunten aanroep/input-parameters: bedrijfnaam en mailadres bevatten elk 1 naam/mailadres, dus geen mail1;mail2 etc.
|
||
-- Voor elk mailadressen mail1;mail2 etc deze functie een keertje aanroepen met betreffende mailades.
|
||
|
||
-- Doel: bij aanvragen of aannemer(s) in Mareon bestaan, aanroep van deze functie kan vrij eenvoudig in een Excellijst (CSV incl macro's) worden verwerkt, iets als (stel lijst van 2 bedrijven):
|
||
-- 'Coen Hagedoorn;mailto:info@coenhagedoon.nl' || ';'|| marx_opdrachtnemer_check ('QBuild De Jong BV','mailto:servicedeskdejong@qbuild.nl') || CHR(10) ||
|
||
-- 'Zwaluwbouw BV;info@zwaluwebouw.nl'|| ';'|| marx_opdrachtnemer_check ('QBuild De Jong BV','mailto:servicedeskdejong@qbuild.nl') || CHR(10) ||
|
||
-- En dan 1 "select " ervoor en " from dual;" erachter, in sql-scriptje zetten en output rolt er als "CSV" string uit
|
||
|
||
-- Als er meerdere bedrijf-records worden gevonden, dan doen deze allemaal mee in het resultaat:
|
||
-- De volgende string-waarde worden geretourneerd:
|
||
-- <Code>;<Omschr>;<Aant_opdrGevers>;<Gemiddeld aant_opdrachten per maand>;
|
||
-- <Code>;<Omschr>:
|
||
-- 1;Onbekend --> record prs_bedrijf wordt niet gevonden
|
||
-- 2;Geregistreerd --> record prs_bedrijf wordt wel gevonden.
|
||
-- 3;Portaal --> 2 + in de laatste drie maanden zijn er opdrachten voor dit bedrijf naar Portaal gestuurd
|
||
-- 4;Premium --> 2 + in de laatste drie maanden zijn er opdrachten voor dit bedrijf naar eigen ERP systeem gestuurd
|
||
-- 5;Portaal/Premium --> 3 en 4.
|
||
|
||
|
||
-- Voorbeelden return-waarden:
|
||
-- 1;Onbekend;0;0
|
||
-- 2;Geregistreerd;0;0
|
||
-- 3;Portaal;1;50
|
||
-- 4;Premium;2;100
|
||
-- 5;Portaal/Premium;4;200
|
||
|
||
|
||
CREATE OR REPLACE FUNCTION marx_opdrachtnemer_check (p_bedrijfnaam In VARCHAR2, p_mailadres IN VARCHAR2)
|
||
RETURN VARCHAR2
|
||
AS
|
||
v_result VARCHAR2 (1000);
|
||
v_bedrijf_naam VARCHAR2 (1000);
|
||
v_mailadres VARCHAR2 (1000);
|
||
|
||
v_drempelwaarde NUMBER(10,2);
|
||
v_check_periode NUMBER(10);
|
||
|
||
v_aant_opdr_gevers NUMBER(10);
|
||
v_totaal_opdr_gevers NUMBER(10);
|
||
|
||
v_aant_portaal_opdr_per_maand NUMBER(10);
|
||
v_aant_premium_opdr_per_maand NUMBER(10);
|
||
v_aant_opdr_per_maand NUMBER(10);
|
||
|
||
v_totaal_port_opdr_per_maand NUMBER(10);
|
||
v_totaal_prem_opdr_per_maand NUMBER(10);
|
||
v_totaal_opdr_per_maand NUMBER(10);
|
||
|
||
CURSOR c_prs_bedrijven
|
||
IS
|
||
SELECT DISTINCT prs_bedrijf_key, prs_bedrijf_naam FROM
|
||
(
|
||
SELECT prs_bedrijf_key, prs_bedrijf_naam,
|
||
UTL_MATCH.jaro_winkler(UPPER(prs_bedrijf_naam), v_bedrijf_naam) AS score1
|
||
-- UTL_MATCH.jaro_winkler(REVERSE(UPPER(prs_bedrijf_naam)), (REVERSE(v_bedrijf_naam))) AS score2
|
||
FROM mar_v_leverancier_api_perslid lev
|
||
)
|
||
WHERE score1 >= v_drempelwaarde
|
||
UNION
|
||
SELECT DISTINCT prs_bedrijf_key, prs_bedrijf_naam
|
||
from mar_v_leverancier_api_perslid lev, prs_perslid p
|
||
WHERE lev.prs_perslid_key = p.prs_perslid_key
|
||
AND UPPER(p.prs_perslid_email) LIKE '%' || v_mailadres || '%';
|
||
|
||
BEGIN
|
||
v_result := '1;Onbekend';
|
||
|
||
-- We kijken 90 dagen (+- 3 maanden) terug.
|
||
v_check_periode := 90;
|
||
v_drempelwaarde := 0.9;
|
||
|
||
v_aant_opdr_gevers := 0;
|
||
v_totaal_opdr_gevers := 0;
|
||
|
||
v_aant_opdr_per_maand := 0;
|
||
v_aant_portaal_opdr_per_maand := 0;
|
||
v_aant_premium_opdr_per_maand := 0;
|
||
|
||
v_totaal_port_opdr_per_maand := 0;
|
||
v_totaal_prem_opdr_per_maand := 0;
|
||
v_totaal_opdr_per_maand := 0;
|
||
|
||
|
||
v_bedrijf_naam := UPPER(p_bedrijfnaam);
|
||
|
||
v_mailadres := UPPER(SUBSTR(p_mailadres, 1 + INSTR(p_mailadres,'@')));
|
||
IF v_mailadres IS NULL
|
||
THEN v_mailadres := 'MB_DUMMY_MB.ABC';
|
||
END IF;
|
||
|
||
FOR rc IN c_prs_bedrijven
|
||
LOOP
|
||
BEGIN
|
||
v_result := '2;Geregistreerd';
|
||
|
||
SELECT ROUND(30*count(*)/v_check_periode)
|
||
INTO v_aant_opdr_per_maand
|
||
FROM mld_opdr o
|
||
WHERE o.MLD_UITVOERENDE_KEYS = rc.prs_bedrijf_key
|
||
AND o.mld_opdr_datumbegin >= SYSDATE-v_check_periode;
|
||
|
||
SELECT
|
||
(SELECT count(distinct(wp.prs_bedrijf_key))
|
||
FROM mld_opdr o, prs_bedrijf_bedrijf bb, mar_v_woco_perslid wp
|
||
WHERE o.MLD_UITVOERENDE_KEYS = rc.prs_bedrijf_key
|
||
AND o.mld_opdr_datumbegin >= SYSDATE-v_check_periode
|
||
AND wp.prs_perslid_key = o.prs_perslid_key
|
||
AND bb.prs_bedrijf_key1 = wp.prs_bedrijf_key
|
||
AND bb.prs_bedrijf_key2 = rc.prs_bedrijf_key) aantal_opdr_gevers,
|
||
(SELECT ROUND(30*count(*)/v_check_periode)
|
||
FROM mld_opdr o, prs_bedrijf_bedrijf bb, mar_v_woco_perslid wp
|
||
WHERE o.MLD_UITVOERENDE_KEYS = rc.prs_bedrijf_key
|
||
AND o.mld_opdr_datumbegin >= SYSDATE-v_check_periode
|
||
AND wp.prs_perslid_key = o.prs_perslid_key
|
||
AND bb.prs_bedrijf_key1 = wp.prs_bedrijf_key
|
||
AND bb.prs_bedrijf_key2 = rc.prs_bedrijf_key
|
||
AND prs_bedrijf_bedrijf_status = 1) aantal_opdr
|
||
INTO v_aant_opdr_gevers, v_aant_premium_opdr_per_maand
|
||
FROM dual;
|
||
|
||
|
||
|
||
v_aant_portaal_opdr_per_maand := v_aant_opdr_per_maand - v_aant_premium_opdr_per_maand;
|
||
|
||
|
||
v_totaal_opdr_gevers := v_totaal_opdr_gevers + v_aant_opdr_gevers;
|
||
v_totaal_port_opdr_per_maand := v_totaal_port_opdr_per_maand + v_aant_portaal_opdr_per_maand;
|
||
v_totaal_prem_opdr_per_maand := v_totaal_prem_opdr_per_maand + v_aant_premium_opdr_per_maand;
|
||
v_totaal_opdr_per_maand := v_totaal_opdr_per_maand + v_aant_opdr_per_maand;
|
||
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (v_totaal_port_opdr_per_maand > 0 AND v_totaal_prem_opdr_per_maand > 0)
|
||
THEN
|
||
v_result := '5;Portaal/Premium';
|
||
ELSE
|
||
IF (v_totaal_prem_opdr_per_maand > 0)
|
||
THEN
|
||
v_result := '4;Premium';
|
||
ELSE
|
||
IF (v_totaal_port_opdr_per_maand > 0)
|
||
THEN
|
||
v_result := '3;Portaal';
|
||
END IF;
|
||
END IF;
|
||
END IF;
|
||
|
||
v_result := v_result || ';' || v_totaal_opdr_gevers || ';' || v_totaal_opdr_per_maand;
|
||
RETURN v_result;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
|
||
----------------------------------------------------------- Idem voor de toevoegen contracten bij *bestaande* bedrijven --------------------------------------------------------------------------
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_contracten (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
v_woco_bedrijf_naam VARCHAR (200);
|
||
BEGIN
|
||
-- Eerst ff checken of de instelling '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT' is gezet met een juiste waarde/bedrijfsnaam.
|
||
-- Met deze instelling wordt anagegeven voor welke opdrachtgever/woco de contractanten zijn.
|
||
|
||
SELECT MAX (prs_bedrijf_naam_upper)
|
||
INTO v_woco_bedrijf_naam
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper =
|
||
(SELECT UPPER (ud.fac_usrdata_omschr)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_code = '$MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
|
||
IF v_woco_bedrijf_naam IS NOT NULL
|
||
THEN
|
||
-- En nu kunnen we importeren....
|
||
-- Nog eerst ff de instelling loggen, zodat de importeur ziet voor welke opdrachtgever geimporteerd wordt...
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'I',
|
||
'Deze import wordt volgens de instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT uitgevoerd voor opdrachtgever: '
|
||
|| v_woco_bedrijf_naam,
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT is ingesteld');
|
||
|
||
-- 1 2 31 32 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 33
|
||
-- 1.bedrijfsnaam 2.leveranciernummer 3.IBAN 4.IBAN G-rekening 5.AX-id 6.bezoek_adres 7.bezoek_postcode 8.bezoek_plaats 9.bezoek_land 10.post_adres 11.post_postcode 12.post_plaats 13.post_land 14.bedrijf_telefoon 15.bedrijf_fax 16.bedrijf_email 17.contactpersoon 18.contact_telefoon 19.contact_fax 20. login
|
||
|
||
-- hulpje 1;2;3;4;5;6; 7; 8; 9;10;11;12;13;14;15;16;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;34
|
||
v_seq_of_columns := '1;2;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;3;4;20';
|
||
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
|
||
ELSE
|
||
-- We gaan de import niet uitvoeren, we loggen dat de instelling niet gezet is....
|
||
-- Dan snel de import tabel alsnog opruimen...
|
||
DELETE FROM fac_imp_ext_bedrijf;
|
||
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Om deze import te kunnen draaien moet de instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT eerst gevuld worden met de naam van de opdrachtgever voor wie deze contractanten bedoeld zijn.',
|
||
'Instelling $MAR_BEDRIJFSNAAM_TBV_CONTRACTANT_IMPORT niet (goed) gezet: import wordt niet uitgevoerd.');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_contracten (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_perslid_loginnaam_gevonden NUMBER (10);
|
||
v_prs_srtperslid_key NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_contactpersoon_key NUMBER (10);
|
||
|
||
v_prs_perslid_apikey VARCHAR2 (255);
|
||
v_loginnaam VARCHAR2 (255);
|
||
v_prs_perslid_email VARCHAR2 (255);
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT prs_bedrijf_naam, prs_bedrijf_overig3 oslogin, UPPER (prs_overeenkomst_nr) prs_overeenkomst_nr
|
||
FROM fac_imp_ext_bedrijf;
|
||
BEGIN
|
||
v_prs_srtperslid_key := 2;
|
||
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_errorhint := 'Bepaal prs_bedrijf_key';
|
||
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rec.prs_bedrijf_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_errorhint := 'Instellen loginnaam en email';
|
||
v_loginnaam := SUBSTR (rec.oslogin, 1, 30);
|
||
v_prs_perslid_email := rec.oslogin;
|
||
|
||
v_errorhint := 'Bepalen of loginnaam al bestaat';
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE ( UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam)
|
||
OR UPPER (prs_perslid_email) = UPPER (v_prs_perslid_email))
|
||
AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_prs_bedrijf_key IS NOT NULL AND v_perslid_loginnaam_gevonden = 0
|
||
THEN
|
||
-- Bedrijf (leverancier) is gevonden, en login + mailadres bestaat nog niet, dan kunnen we prs_perslid voor account incl APIkey toevoegen .....
|
||
v_errorhint := 'Bepalen v_prs_perslid_apikey';
|
||
v_prs_perslid_apikey := DBMS_RANDOM.STRING ('x', 32);
|
||
|
||
v_errorhint := 'INSERT prs_perslid';
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_apikey)
|
||
VALUES ('PRS',
|
||
v_prs_srtperslid_key,
|
||
1,
|
||
SUBSTR (rec.prs_bedrijf_naam, 1, 60),
|
||
v_prs_perslid_email,
|
||
v_loginnaam,
|
||
v_prs_perslid_apikey)
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
|
||
v_errorhint := 'INSERT prs_contactpersoon';
|
||
|
||
INSERT INTO prs_contactpersoon (prs_contactpersoon_naam,
|
||
prs_bedrijf_key,
|
||
prs_perslid_key,
|
||
prs_contactpersoon_email)
|
||
VALUES (SUBSTR (rec.prs_bedrijf_naam, 1, 30),
|
||
v_prs_bedrijf_key,
|
||
v_prs_perslid_key,
|
||
SUBSTR (v_prs_perslid_email, 1, 50))
|
||
RETURNING prs_contactpersoon_key
|
||
INTO v_prs_contactpersoon_key;
|
||
|
||
v_errorhint := 'PROC marx_add_contract_leverancier';
|
||
-- We gaan contract, autorisaties, fac_email_setting etc toevoegen....
|
||
marx_add_contract_leverancier (p_import_key,
|
||
v_prs_bedrijf_key,
|
||
v_prs_perslid_key,
|
||
v_prs_contactpersoon_key,
|
||
v_prs_perslid_apikey,
|
||
SUBSTR(v_prs_perslid_email, 1, INSTR (v_prs_perslid_email, '@') - 1),
|
||
rec.prs_overeenkomst_nr);
|
||
ELSE
|
||
IF v_prs_bedrijf_key IS NULL
|
||
THEN
|
||
-- Bedrijf is NIET gevonden, dat gaan we loggen
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' is niet gevonden',
|
||
'Contract niet toegevoegd');
|
||
END IF;
|
||
|
||
IF v_perslid_loginnaam_gevonden <> 0
|
||
THEN
|
||
-- Account/inlognaam bestaat al, dat gaan we loggen
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
'Account '
|
||
|| v_loginnaam
|
||
|| ' bij bedrijf met naam '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' bestaat reeds in Mareon',
|
||
'Contract niet toegevoegd');
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
----------------------------------------------------------- Idem import voor de Woningbouwcorporatie --------------------------------------------------------------------------
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_woco (p_import_key IN NUMBER)
|
||
AS
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
BEGIN
|
||
-- 1 2 31 32 25 3 4 5 6 7 8 9 10 11 12 13 14 15 16 33
|
||
-- 1.bedrijfsnaam 2.leveranciernummer 3.IBAN 4.IBAN G-rekening 5.AX-id 6.bezoek_adres 7.bezoek_postcode 8.bezoek_plaats 9.bezoek_land 10.post_adres 11.post_postcode 12.post_plaats 13.post_land 14.bedrijf_telefoon 15.bedrijf_fax 16.bedrijf_email 17.contactpersoon 18.contact_telefoon 19.contact_fax 20. login
|
||
|
||
-- hulpje 1;2;3;4;5;6; 7; 8; 9;10;11;12;13;14;15;16;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2;3;34
|
||
v_seq_of_columns := '1;2;6;7;8;9;10;11;12;13;14;15;16;17;18;19;0;0;0;0;0;0;0;0;5;0;0;0;0;0;0;3;4;20';
|
||
fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 0);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
'Inleesproces relaties afgebroken!');
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_post_update_woco (p_import_key IN NUMBER)
|
||
AS
|
||
CURSOR c1
|
||
IS
|
||
SELECT prs_bedrijf_naam,
|
||
SUBSTR (prs_bedrijf_overig1, 1, 30) iban,
|
||
SUBSTR (prs_bedrijf_overig2, 1, 30) g_iban,
|
||
prs_bedrijf_overig3 oslogin
|
||
FROM fac_imp_ext_bedrijf;
|
||
|
||
v_errormsg VARCHAR2 (1000);
|
||
v_errorhint VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_seq_of_columns VARCHAR (255);
|
||
|
||
v_prs_bedrijf_key NUMBER (10);
|
||
v_kenmerk_gevonden NUMBER (10);
|
||
v_prs_perslid_key NUMBER (10);
|
||
v_prs_perslid_apikey VARCHAR2 (255);
|
||
v_loginnaam VARCHAR2 (255);
|
||
v_perslid_loginnaam_gevonden NUMBER (10);
|
||
v_prs_afdeling_key NUMBER (10);
|
||
v_prs_perslid_email VARCHAR2 (255);
|
||
v_prs_leverancier_nr VARCHAR2 (255);
|
||
|
||
l_pos_aapje NUMBER (10);
|
||
l_pos_punt NUMBER (10);
|
||
BEGIN
|
||
FOR rec IN c1
|
||
LOOP
|
||
BEGIN
|
||
SELECT MAX (prs_bedrijf_key)
|
||
INTO v_prs_bedrijf_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rec.prs_bedrijf_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
|
||
IF v_prs_bedrijf_key IS NOT NULL
|
||
THEN
|
||
-- Bedrijf (woco) is gevonden, dan kunnen we vaste tekst, kenmerken toevoegen, prs_perslid voor account toevoegen .....
|
||
|
||
-- Allereerst: de woco moet als prs_bedrijf_intern worden gemarkeerd, de import via de standaard import voor leveranciers gelopen (intern = 0), dus ff changen...
|
||
UPDATE prs_bedrijf
|
||
SET prs_bedrijf_intern = 1
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
SELECT prs_leverancier_nr
|
||
INTO v_prs_leverancier_nr
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
-- Call MARX#39547: IP import van woco: verplichte GLN (kolom B) dicht timmeren
|
||
IF v_prs_leverancier_nr IS NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf met naam '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' heeft geen GLN terwijl die (door ketenstandaard verplicht wordt gesteld',
|
||
'Ketenstandaard vereist een GLN van opdrachtgever bij SidB koppelingen');
|
||
END IF;
|
||
|
||
IF LENGTH (v_prs_leverancier_nr) <> 13
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' heeft GLN maar is ongelijk aan 13 tekens',
|
||
'Een GLN behoort uit 13 tekens (cijfers) te bestaan');
|
||
END IF;
|
||
|
||
IF TRANSLATE (v_prs_leverancier_nr, '0123456789', '') IS NOT NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' heeft GLN met andere tekens dan cijfers 0,1,2,..9',
|
||
'Een GLN behoort uit alleen cijfers te bestaan');
|
||
END IF;
|
||
|
||
-- Call MARX#34383: AX nummer kan ook alfanumeriek, maar moet dan wel in kleine letters aan de webservice worden aangeboden. Wordt hier in de import geregeld.
|
||
UPDATE prs_bedrijf
|
||
SET prs_overeenkomst_nr = LOWER (prs_overeenkomst_nr)
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
UPDATE prs_bedrijf
|
||
SET prs_bedrijf_opmerking =
|
||
'Prijsopgaven, transacties en leveringen volgens onze Algemene Inkoopvoorwaarden gedeponeerd bij de Kamer van Koophandel. Indien sprake is van een mantelovereenkomst, prijsopgaven, transacties en leveringen onder de de bepalingen van de mantelovereenkomst.',
|
||
prs_bedrijf_opmerking2 =
|
||
'Bij facturering via Mareon het MAREON inkooporder MAR### vermelden. Bij facturering (of vragen) rechtstreeks aan opdrachtgever (buiten Mareon om) het inkooporder TOBIAS### van opdrachtgever vermelden.'
|
||
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
|
||
|
||
|
||
-- Stap om IBAN van leverancier te registreren
|
||
-- kenmerk-key IBAN: key = 1
|
||
-- Let op: stel dat leverancier al bestaat (uit eerdere import van andere woco), dan wordt IBAN NIET(!!!) aangepast, anders gaat het bij die woco mogelijk mis.
|
||
-- In dat geval geven we een waarschuwing dat IBAN niet is bijgewerkt (wellicht loopt IBAN van deze woco achter of is het toch een nieuw bedrijf).
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 1
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- IBAN bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 1, rec.iban FROM DUAL;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'IBAN van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'IBAN wordt niet bijgewerkt!');
|
||
END IF;
|
||
|
||
-- Stap om IBAN G-rekening van leverancier te registreren
|
||
-- kenmerk-key IBAN: key = 2
|
||
-- Let op: stel dat leverancier al bestaat (uit eerdere import van andere woco), dan wordt IBAN NIET(!!!) aangepast, anders gaat het bij die woco mogelijk mis.
|
||
-- In dat geval geven we een waarschuwing dat IBAN niet is bijgewerkt (wellicht loopt IBAN van deze woco achter of is het toch een nieuw bedrijf).
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 2
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- IBAN bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 2, rec.g_iban FROM DUAL;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'W',
|
||
'IBAN G-rekening van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'IBAN G-rekening wordt niet bijgewerkt!');
|
||
END IF;
|
||
|
||
|
||
-- MARX#37375: Bij woco nieuw flexprop MAR_SYNC_OPDR_BUFFER (key 11), default = 300 sec (=5 min).
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 11
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- MAR_SYNC_OPDR_BUFFER bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 11, '300' FROM DUAL;
|
||
END IF;
|
||
|
||
-- MARX#55214: Bij woco flexprop $MAR_SYNC_OPDR_PAST_DAYS [dag]: (key 10), default = 1 (het sync-tijdswindow berekend adhv laatste sync en MAR_SYNC_OPDR_BUFFER)
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 10
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- MAR_SYNC_OPDR_PAST_DAYS bestond nog niet, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 10, '1' FROM DUAL;
|
||
END IF;
|
||
|
||
-- MARX#57420: Documenten van Tobias AX naar Mareon: bij woco flexprop 'Bijlages van opdrachtgever:' (key 40) default met -1 vullen.
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_link_key = v_prs_bedrijf_key
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 40
|
||
AND prs_kenmerklink_verwijder IS NULL;
|
||
|
||
IF v_kenmerk_gevonden = 0
|
||
THEN
|
||
-- Bijlages van opdrachtgever had nog geen waarde, dus nu toevoegen...
|
||
INSERT INTO prs_kenmerklink (prs_link_key,
|
||
prs_kenmerklink_niveau,
|
||
prs_kenmerk_key,
|
||
prs_kenmerklink_waarde)
|
||
SELECT v_prs_bedrijf_key, 'B', 40, '-1' FROM DUAL;
|
||
END IF;
|
||
|
||
|
||
-- Stap om als woco / ERP te kunnen koppelen met Mareon (opdrachten insturen, opdrachtstatussen en facturatie). Hiervoor _API-perslid maken.
|
||
-- Eerst afdeling aanmaken (anders kan perslid niet)
|
||
|
||
INSERT INTO prs_afdeling (prs_bedrijf_key, prs_afdeling_naam, prs_afdeling_omschrijving)
|
||
VALUES (v_prs_bedrijf_key, 'X', rec.prs_bedrijf_naam)
|
||
RETURNING prs_afdeling_key
|
||
INTO v_prs_afdeling_key;
|
||
|
||
|
||
-- Webservice user (SYSTEM USER 'AX' voor alle API's)
|
||
|
||
|
||
-- Wel ff checken of de loginnaam nog niet in gebruik is....
|
||
|
||
v_prs_perslid_email := NULL;
|
||
v_perslid_loginnaam_gevonden := 1; -- init
|
||
v_loginnaam := SUBSTR (rec.oslogin, 1, 30);
|
||
|
||
IF v_loginnaam IS NOT NULL
|
||
THEN
|
||
-- We gaan een gewoon inlogaccount aanmaken voor de woco, waarmee zij kunnen inloggen (dit is niet de API-user, die komt hierna)
|
||
-- Wordt de kolom leeg gelaten, dan heeft de woco geen inlogaccount.
|
||
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_perslid_loginnaam_gevonden = 0
|
||
THEN
|
||
-- Loginnaam volgens kolom 20 aangemaakt.
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Loginnaam voor bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
|
||
|
||
l_pos_aapje := INSTR (rec.oslogin, '@');
|
||
|
||
IF l_pos_aapje > 0
|
||
THEN
|
||
-- @ zit in login
|
||
l_pos_punt := INSTR (rec.oslogin, '.', l_pos_aapje);
|
||
|
||
IF l_pos_punt > 0
|
||
THEN
|
||
-- . zit na de @, dit is een mailadres, dus we gaan dit mailadres in de prs_perslid die zodadelijk wordt geinsert, toevoegen
|
||
v_prs_perslid_email := rec.oslogin;
|
||
END IF;
|
||
END IF;
|
||
|
||
|
||
--- Aanmaken persoon met functie 'Opdrachtgever' (srtperlid_key = 221), Achternaam overnemen van bedrijfnaam
|
||
IF v_prs_perslid_email IS NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf met naam '
|
||
|| rec.prs_bedrijf_naam
|
||
|| ' heeft GEEN mailadres gekregen en inloggen via wachtwoord vergeten werkt dan niet! ',
|
||
'Ongeldig/fout mailadres');
|
||
END IF;
|
||
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_email,
|
||
prs_perslid_oslogin)
|
||
VALUES ('PRS',
|
||
221,
|
||
v_prs_afdeling_key,
|
||
SUBSTR (rec.prs_bedrijf_naam, 1, 60),
|
||
v_prs_perslid_email,
|
||
v_loginnaam)
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
-- MARX#79548 SSO voor Aareon medewerkers, geen uid/pwd meer
|
||
-- Omdat we instelling 'email_password op 1 zetten', moet account (van woco) voortaan een gevuld ww hebben....
|
||
prs.setpassword(v_prs_perslid_key, DBMS_RANDOM.STRING ('x', 16));
|
||
|
||
-- fac_groep_key 100 is gereserveerd voor woco, de groep 'WocoRead' om opdrachten te kunnen lezen.
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (100, v_prs_perslid_key);
|
||
|
||
COMMIT;
|
||
ELSE
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Loginnaam ' || v_loginnaam || ' voor bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'');
|
||
END IF;
|
||
END IF;
|
||
|
||
-- En nu gaan we nog de API-user voor de WOCO aanmaken....
|
||
|
||
-- Loginnaam: de 1e tekens van bedrijfsnaam proberen ...
|
||
|
||
v_loginnaam := SUBSTR (rec.prs_bedrijf_naam, 1, 30);
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
|
||
IF v_perslid_loginnaam_gevonden = 0
|
||
THEN
|
||
-- Loginnaam volgens 1e 30 tekens van bedrijfsnaam aangemaakt..
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'API Loginnaam van bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
ELSE
|
||
-- Loginnaam obv bedrijfsnaam bestaat al, nu gaan we een random loginnaam maken...
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'API Loginnaam ' || v_loginnaam || ' van bedrijf met naam ' || rec.prs_bedrijf_naam || ' bestaat al',
|
||
'');
|
||
|
||
|
||
|
||
-- Random loginnaam aangemaakt, we gaan ervan uit dat deze randwom string niet eerder is voorgekomen.
|
||
|
||
WHILE v_perslid_loginnaam_gevonden <> 0
|
||
LOOP
|
||
v_loginnaam := DBMS_RANDOM.STRING ('x', 8);
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_perslid_loginnaam_gevonden
|
||
FROM prs_perslid
|
||
WHERE UPPER (prs_perslid_oslogin) = UPPER (v_loginnaam) AND prs_perslid_verwijder IS NULL;
|
||
END LOOP;
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'API Loginnaam van bedrijf met naam ' || rec.prs_bedrijf_naam || ' :' || v_loginnaam,
|
||
'');
|
||
END IF;
|
||
|
||
|
||
-- Nu gaan we het account voor de woco aanmaken...
|
||
v_prs_perslid_apikey := DBMS_RANDOM.STRING ('x', 32);
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'I',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' heeft API key: ' || v_prs_perslid_apikey,
|
||
'API key');
|
||
|
||
--- Aanmaken persoon met functie 'Opdrachtgever-API' (srtperlid_key = 222), Achternaam overnemen van bedrijfnaam,
|
||
INSERT INTO prs_perslid (prs_perslid_module,
|
||
prs_srtperslid_key,
|
||
prs_afdeling_key,
|
||
prs_perslid_naam,
|
||
prs_perslid_oslogin,
|
||
prs_perslid_apikey)
|
||
VALUES ('PRS',
|
||
222,
|
||
v_prs_afdeling_key,
|
||
SUBSTR (rec.prs_bedrijf_naam, 1, 60),
|
||
v_loginnaam,
|
||
v_prs_perslid_apikey)
|
||
RETURNING prs_perslid_key
|
||
INTO v_prs_perslid_key;
|
||
|
||
|
||
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
VALUES (1, '$SYNC_DATE_LASTTIME_' || v_prs_perslid_key, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS'));
|
||
|
||
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
VALUES (1, '$SYNC_DATE_NOW_' || v_prs_perslid_key, TO_CHAR (SYSDATE, 'DD-MM-YYYY HH24:MI:SS'));
|
||
|
||
-- FSN#33699: Syncen obv fac_tracking_key
|
||
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
SELECT 1, '$SYNC_TRACKKEY_NOW_' || v_prs_perslid_key, MAX (fac_tracking_key)
|
||
FROM fac_tracking;
|
||
|
||
INSERT INTO fac_usrdata (fac_usrtab_key, fac_usrdata_code, fac_usrdata_omschr)
|
||
SELECT 1, '$SYNC_TRACKKEY_LAST_' || v_prs_perslid_key, MAX (fac_tracking_key)
|
||
FROM fac_tracking;
|
||
|
||
|
||
-- fac_groep_key 3 is gereserveerd voor woco
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (3, v_prs_perslid_key);
|
||
|
||
-- fac_groep_key 5 (wocoAPI) is gereserveerd voor woco
|
||
INSERT INTO fac_gebruikersgroep (fac_groep_key, prs_perslid_key)
|
||
VALUES (5, v_prs_perslid_key);
|
||
|
||
COMMIT;
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Bedrijf met naam ' || rec.prs_bedrijf_naam || ' is niet gevonden',
|
||
'Postupdate wordt overgeslagen');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_errorhint := v_errormsg;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errormsg || 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_errormsg,
|
||
v_errorhint);
|
||
COMMIT; -- tbv logging
|
||
END;
|
||
END LOOP;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_woco (p_import_key IN NUMBER)
|
||
AS
|
||
BEGIN
|
||
-- Parameter p_sync = 0 of 1:
|
||
-- 0 = er wordt niet gesynchroniseerd (op leveranciersnummer), maar gewoon (ala FIP) aangevuld. Elke leverancier wordt toegevoegd.
|
||
-- 1 = er wel wel gesynchroniseerd (op leveranciernummer), dus add + update + delete
|
||
fac_update_bedrijf_body (p_import_key, 0);
|
||
marx_post_update_woco (p_import_key);
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
----------------------------------------- Idem voor de Woningbouwcorporatie x Leverancier -----------------------------------------------------------------------
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_import_woco_x_lev (p_import_key IN NUMBER)
|
||
AS
|
||
v_newline VARCHAR2 (1000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
|
||
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
-- De importvelden:
|
||
v_prs_bedrijf_woco_naam VARCHAR2 (256);
|
||
v_prs_bedrijf_lev_naam VARCHAR2 (256);
|
||
v_prs_bedrijf_lev_nr_erp VARCHAR2 (256);
|
||
v_prs_bedrijf_bedrijf_btw_code VARCHAR2 (100);
|
||
v_prs_bedrijf_bedrijf_g_pct VARCHAR2 (100);
|
||
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
DELETE FROM marx_imp_woco_x_lev;
|
||
|
||
COMMIT;
|
||
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
-- 01, 02, 03, 04
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_bedrijf_woco_naam);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_bedrijf_lev_naam);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_bedrijf_lev_nr_erp);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_bedrijf_bedrijf_btw_code);
|
||
fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_bedrijf_bedrijf_g_pct);
|
||
|
||
v_aanduiding :=
|
||
'[' || v_prs_bedrijf_woco_naam || '|' || v_prs_bedrijf_lev_naam || '|' || v_prs_bedrijf_lev_nr_erp || '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_prs_bedrijf_woco_naam) = 'WOCO' AND UPPER (v_prs_bedrijf_lev_naam) = 'LEVERANCIER'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
-- Controleer alle veldwaarden
|
||
|
||
--
|
||
v_errorhint := 'Ongeldige woco naam';
|
||
v_prs_bedrijf_woco_naam := TRIM (v_prs_bedrijf_woco_naam);
|
||
|
||
IF (v_prs_bedrijf_woco_naam IS NULL OR LENGTH (v_prs_bedrijf_woco_naam) > 60)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Woco is niet ingevuld of groter dan 60 tekens',
|
||
'Regel wordt overgeslagen: woco is verplicht en mag niet meer dan uit 60 tekens bestaan.');
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige leverancier naam';
|
||
v_prs_bedrijf_lev_naam := TRIM (v_prs_bedrijf_lev_naam);
|
||
|
||
IF (v_prs_bedrijf_lev_naam IS NULL OR LENGTH (v_prs_bedrijf_lev_naam) > 60)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
v_aanduiding || 'Leverancier is niet ingevuld of groter dan 60 tekens',
|
||
'Regel wordt overgeslagen: leverancier is verplicht en mag niet meer dan uit 60 tekens bestaan.');
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige ERP id';
|
||
v_prs_bedrijf_lev_nr_erp := TRIM (v_prs_bedrijf_lev_nr_erp);
|
||
|
||
IF (v_prs_bedrijf_lev_nr_erp IS NULL OR LENGTH (v_prs_bedrijf_lev_nr_erp) > 20)
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'E',
|
||
v_aanduiding || 'ERP id van leverancier is niet ingevuld of groter dan 20 tekens',
|
||
'Regel wordt overgeslagen: ERP id is verplicht en mag niet meer dan uit 20 tekens bestaan.');
|
||
END IF;
|
||
|
||
v_errorhint := 'Ongeldige BTW code';
|
||
v_prs_bedrijf_bedrijf_btw_code := TRIM (v_prs_bedrijf_bedrijf_btw_code);
|
||
|
||
IF ((v_prs_bedrijf_bedrijf_btw_code IS NOT NULL) AND (LENGTH (v_prs_bedrijf_bedrijf_btw_code) > 10))
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'BTW code van leverancier is groter dan 10 tekens',
|
||
'Regel wordt overgeslagen: BTW code mag niet meer dan uit 10 tekens bestaan.');
|
||
END IF;
|
||
|
||
|
||
v_errorhint := 'Ongeldige G-Percentage';
|
||
v_prs_bedrijf_bedrijf_g_pct := TRIM (v_prs_bedrijf_bedrijf_g_pct);
|
||
|
||
IF ((v_prs_bedrijf_bedrijf_g_pct IS NOT NULL) AND (LENGTH (v_prs_bedrijf_bedrijf_g_pct) > 3))
|
||
THEN
|
||
v_ongeldig := 1;
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || 'G-percentage tbv controle G-bedrag is meer dan 3 tekens',
|
||
'Regel wordt overgeslagen: G-percentage mag niet meer dan uit 3 tekens bestaan.');
|
||
END IF;
|
||
|
||
-- Insert geformatteerde import record
|
||
IF v_ongeldig = 0
|
||
THEN
|
||
BEGIN
|
||
v_errorhint := 'Fout bij toevoegen regel aan importtabel marx_imp_woco_x_lev';
|
||
|
||
-- MARX#52342: Rapport met leveranciersgegevens per woco: BES-leveranciers mogen (moeten) wel met erp-id NULL geinsert worden
|
||
IF v_prs_bedrijf_lev_nr_erp = 'NULL'
|
||
THEN
|
||
v_prs_bedrijf_lev_nr_erp := NULL;
|
||
END IF;
|
||
|
||
INSERT INTO marx_imp_woco_x_lev (prs_bedrijf_woco_naam,
|
||
prs_bedrijf_lev_naam,
|
||
prs_bedrijf_lev_nr_erp,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct)
|
||
VALUES (v_prs_bedrijf_woco_naam,
|
||
v_prs_bedrijf_lev_naam,
|
||
v_prs_bedrijf_lev_nr_erp,
|
||
v_prs_bedrijf_bedrijf_btw_code,
|
||
v_prs_bedrijf_bedrijf_g_pct);
|
||
|
||
COMMIT;
|
||
v_count_import := v_count_import + 1;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := v_errorhint || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
'Ingelezen regel kan niet worden weggeschreven!');
|
||
COMMIT;
|
||
END;
|
||
END IF;
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Woco x Leverancier: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Woco x Leverancier: aantal ongeldige importregels: ' || TO_CHAR (v_count_tot - v_count_import),
|
||
'');
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END marx_import_woco_x_lev;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_update_woco_x_lev (p_import_key IN NUMBER)
|
||
IS
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_error NUMBER (10);
|
||
v_count NUMBER (10);
|
||
|
||
|
||
v_prs_bedrijf_woco_key NUMBER (10);
|
||
v_prs_bedrijf_lev_key NUMBER (10);
|
||
v_bedrijf_bedrijf_gevonden NUMBER (10);
|
||
v_kenmerk_gevonden NUMBER (10);
|
||
v_prs_bedrijf_bedrijf_status NUMBER (10);
|
||
|
||
v_fin_btwtabelwaarde_key NUMBER (10);
|
||
v_prs_bedrijf_bedrijf_g_pct NUMBER (3);
|
||
|
||
|
||
-- Alle geldig geimporteerde combi's woco x lev
|
||
CURSOR c
|
||
IS
|
||
SELECT * FROM marx_imp_woco_x_lev;
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_error := 0;
|
||
|
||
|
||
v_aanduiding := '';
|
||
|
||
|
||
-- Alle combi's woco x lev verwerken...
|
||
FOR rc IN c
|
||
LOOP
|
||
BEGIN
|
||
v_count_tot := v_count_tot + 1;
|
||
|
||
v_errorhint := 'Fout bij bepalen woco [' || rc.prs_bedrijf_woco_naam || ']';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_woco_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rc.prs_bedrijf_woco_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
v_errorhint := 'Fout bij bepalen woco [' || rc.prs_bedrijf_lev_naam || ']';
|
||
|
||
SELECT prs_bedrijf_key
|
||
INTO v_prs_bedrijf_lev_key
|
||
FROM prs_bedrijf
|
||
WHERE prs_bedrijf_naam_upper = UPPER (rc.prs_bedrijf_lev_naam) AND prs_bedrijf_verwijder IS NULL;
|
||
|
||
|
||
-- Check of btwcode wel bestaat
|
||
v_fin_btwtabelwaarde_key := NULL;
|
||
|
||
IF (rc.prs_bedrijf_bedrijf_btw_code IS NOT NULL)
|
||
THEN
|
||
SELECT MAX (fin_btwtabelwaarde_key)
|
||
INTO v_fin_btwtabelwaarde_key
|
||
FROM fin_btwtabelwaarde
|
||
WHERE UPPER (fin_btwtabelwaarde_code) = UPPER (rc.prs_bedrijf_bedrijf_btw_code)
|
||
AND fin_btwtabelwaarde_verwijder IS NULL;
|
||
|
||
IF v_fin_btwtabelwaarde_key IS NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf '
|
||
|| rc.prs_bedrijf_lev_naam
|
||
|| ' heeft ongeldig BTW code en wordt bij opdrachtgever '
|
||
|| rc.prs_bedrijf_woco_naam
|
||
|| ' NIET bewaard!',
|
||
'-');
|
||
END IF;
|
||
END IF;
|
||
|
||
-- Check of percentage een geheel getal van tussen 0 en 100 is.
|
||
v_prs_bedrijf_bedrijf_g_pct := NULL;
|
||
|
||
IF (rc.prs_bedrijf_bedrijf_g_pct IS NOT NULL)
|
||
THEN
|
||
SELECT MAX (fac.safe_to_number (rc.prs_bedrijf_bedrijf_g_pct))
|
||
INTO v_prs_bedrijf_bedrijf_g_pct
|
||
FROM DUAL
|
||
WHERE ROUND (fac.safe_to_number (rc.prs_bedrijf_bedrijf_g_pct)) =
|
||
fac.safe_to_number (rc.prs_bedrijf_bedrijf_g_pct)
|
||
AND fac.safe_to_number (rc.prs_bedrijf_bedrijf_g_pct) <= 100
|
||
AND fac.safe_to_number (rc.prs_bedrijf_bedrijf_g_pct) >= 0;
|
||
|
||
IF v_prs_bedrijf_bedrijf_g_pct IS NULL
|
||
THEN
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf '
|
||
|| rc.prs_bedrijf_lev_naam
|
||
|| ' heeft ongeldig G-percentage (geen geheel getal tussen 0 en 100) en wordt bij opdrachtgever '
|
||
|| rc.prs_bedrijf_woco_naam
|
||
|| ' NIET bewaard!',
|
||
'-');
|
||
END IF;
|
||
END IF;
|
||
|
||
SELECT COUNT (*)
|
||
INTO v_bedrijf_bedrijf_gevonden
|
||
FROM prs_bedrijf_bedrijf
|
||
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
|
||
|
||
IF (v_bedrijf_bedrijf_gevonden = 0)
|
||
THEN
|
||
-- Combi bestaat nog niet, we gaan inserten
|
||
v_errorhint :=
|
||
'Fout bij insert woco x leverancier [' || rc.prs_bedrijf_woco_naam || ' x ' || rc.prs_bedrijf_lev_naam || ']';
|
||
|
||
-- Maar eerst nog call MARX#39748/MARX#39902: FIP import leveranciers: "premium alert", als bedrijf al bestond en premium is,
|
||
-- dan gaan we prs_bedrijf_bedrijf_status standaard vullen met de waarde 0, zodat die niet automatisch vanaf deze import meedoet als premium, maar gefaseerd
|
||
-- kan worden geregeld. Tenzij aannemer toch nu meteen premium voor deze woco wil zijn (is in zijn systeem procesmatig geregeld).
|
||
SELECT COUNT (*)
|
||
INTO v_kenmerk_gevonden
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerklink_niveau = 'B'
|
||
AND prs_kenmerk_key = 1001
|
||
AND prs_link_key = v_prs_bedrijf_lev_key
|
||
AND prs_kenmerklink_verwijder IS NULL
|
||
AND prs_kenmerklink_waarde = '1';
|
||
|
||
v_prs_bedrijf_bedrijf_status := 0; -- Altijd premium uit.
|
||
|
||
IF v_kenmerk_gevonden > 0
|
||
THEN
|
||
-- Wel een waarschuwing als aannemer al premium is, wel zo handig om expliciet te melden dat premium voor deze woco uit staat...
|
||
fac.imp_writelog (
|
||
p_import_key,
|
||
'W',
|
||
'Bedrijf '
|
||
|| rc.prs_bedrijf_lev_naam
|
||
|| ' is PREMIUM. Voor opdrachtgever '
|
||
|| rc.prs_bedrijf_woco_naam
|
||
|| ' wordt premium daarom default uitgezet, overleg met aannemer voor inschakelen premium',
|
||
'Zie MARX#39902: Premium alert / gefaseerde premium aansluiting ? ');
|
||
END IF;
|
||
|
||
INSERT INTO prs_bedrijf_bedrijf (prs_bedrijf_key1,
|
||
prs_bedrijf_key2,
|
||
prs_bedrijf_externid2,
|
||
prs_bedrijf_bedrijf_status,
|
||
prs_bedrijf_bedrijf_startdatum,
|
||
fin_btwtabelwaarde_key,
|
||
prs_bedrijf_bedrijf_g_pct)
|
||
SELECT v_prs_bedrijf_woco_key,
|
||
v_prs_bedrijf_lev_key,
|
||
rc.prs_bedrijf_lev_nr_erp,
|
||
v_prs_bedrijf_bedrijf_status,
|
||
NULL,
|
||
v_fin_btwtabelwaarde_key,
|
||
v_prs_bedrijf_bedrijf_g_pct
|
||
FROM DUAL;
|
||
ELSE
|
||
-- Combi bestaat al, we gaan updaten
|
||
v_errorhint :=
|
||
'Fout bij update woco x leverancier [' || rc.prs_bedrijf_woco_naam || ' x ' || rc.prs_bedrijf_lev_naam || ']';
|
||
|
||
UPDATE prs_bedrijf_bedrijf
|
||
SET fin_btwtabelwaarde_key = v_fin_btwtabelwaarde_key, prs_bedrijf_bedrijf_g_pct = v_prs_bedrijf_bedrijf_g_pct
|
||
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
|
||
|
||
-- MARX#61326: Productie of test: oa. instellen van Twinq koppeling
|
||
-- Als de combi al bestaat (omdat de import VvE beheerder dit record al heeft aanmaakt tbv Premium), dan willen we het lev-id nog wel updaten (wat tot nu toe niet gebeurde).
|
||
-- Maar alleen als LEV-ID gevuld is (dus niet leeg), we willen niet dat een gevuld lev-id wordt geleegd !! (b.v. in een her-import van BTW en Verlegd waarbij LEV-ID wordt leeg gelaten, dan is de koppeling Tobias omzeep!!!)
|
||
IF rc.prs_bedrijf_lev_nr_erp IS NOT NULL
|
||
THEN
|
||
-- LEV ID is dus gevuld, die mogen we dan updaten (en eenzelfde LEV-ID blijft na update dus gelijk, geen punt ;)
|
||
UPDATE prs_bedrijf_bedrijf
|
||
SET prs_bedrijf_externid2 = rc.prs_bedrijf_lev_nr_erp
|
||
WHERE prs_bedrijf_key1 = v_prs_bedrijf_woco_key AND prs_bedrijf_key2 = v_prs_bedrijf_lev_key;
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
v_count_error := v_count_error + 1;
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Woco x Leverancier: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_tot - v_count_error),
|
||
'');
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'Woco x Leverancier: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
|
||
'');
|
||
COMMIT;
|
||
END marx_update_woco_x_lev;
|
||
/
|
||
|
||
------------
|
||
-- FSN#35381: Signalering als de sync-adapter "droog" staat
|
||
-- MARX#37154: Mailadres 'Storing Mareon adapter' voor woco's zonder Remote beheer, is de 2e query(union).
|
||
-- MARX#60323: Notify van uitval en mogelijk uitval Sync adapter maximaliseren tot x keer.
|
||
-- MARX#61157: Voor enkele woco's en de beide FCLT-klanten gaat de sync-noti nog iets te snel, factor 3 gewijzigd in factior 4 (zodat ook Wetland goed gaat)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_noti_sync_uitval
|
||
(
|
||
code,
|
||
sender,
|
||
receiver,
|
||
text,
|
||
key,
|
||
xkey,
|
||
xemail,
|
||
xmobile
|
||
)
|
||
AS
|
||
SELECT '',
|
||
'',
|
||
noti.prs_perslid_key,
|
||
'Mogelijk is er uitval van de Mareon Adapter bij '
|
||
|| b.prs_bedrijf_naam
|
||
|| ' - Laatste sync tijd: '
|
||
|| TO_CHAR (s.sync_date_lasttime, 'dd-mm-yyyy hh24:mi'),
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM mar_v_sync_ax s,
|
||
prs_perslid p,
|
||
prs_afdeling a,
|
||
prs_bedrijf b,
|
||
prs_v_aanwezigperslid noti
|
||
WHERE noti.prs_afdeling_key = 121
|
||
AND INSTR (noti.prs_perslid_email, '@') > 0
|
||
AND noti.prs_perslid_ingids = 1
|
||
AND s.sync_date_lasttime <
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
AND s.sync_date_lasttime >
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
- 3 / 24
|
||
AND p.prs_perslid_apikey IS NOT NULL
|
||
AND TO_CHAR (SYSDATE, 'HH24') >= 7
|
||
AND TO_CHAR (SYSDATE, 'HH24') <= 18
|
||
AND s.prs_perslid_key = p.prs_perslid_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT '',
|
||
'',
|
||
noti.prs_perslid_key,
|
||
'Uitval Mareon Adapter bij '
|
||
|| b.prs_bedrijf_naam
|
||
|| ' - Laatste sync tijd: '
|
||
|| TO_CHAR (s.sync_date_lasttime, 'dd-mm-yyyy hh24:mi'),
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM mar_v_sync_ax s,
|
||
prs_perslid p,
|
||
prs_afdeling a,
|
||
prs_bedrijf b,
|
||
prs_v_aanwezigperslid noti
|
||
WHERE noti.prs_afdeling_key = 121
|
||
AND INSTR (noti.prs_perslid_email, '@') > 0
|
||
AND noti.prs_perslid_ingids = 1
|
||
AND s.sync_date_lasttime <
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
- 3 / 24
|
||
AND s.sync_date_lasttime >
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
- 6 / 24
|
||
AND s.prs_perslid_key = p.prs_perslid_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT '',
|
||
'',
|
||
NULL,
|
||
'Uitval Mareon Adapter bij '
|
||
|| b.prs_bedrijf_naam
|
||
|| ' - Laatste sync tijd: '
|
||
|| TO_CHAR (s.sync_date_lasttime, 'dd-mm-yyyy hh24:mi'),
|
||
NULL,
|
||
NULL,
|
||
sa.prs_bedrijf_mailadres,
|
||
NULL
|
||
FROM mar_v_sync_ax s,
|
||
prs_perslid p,
|
||
prs_afdeling a,
|
||
prs_bedrijf b,
|
||
mar_v_bedrijf_storingmailadres sa
|
||
WHERE s.sync_date_lasttime <
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
- 3 / 24
|
||
AND s.sync_date_lasttime >
|
||
SYSDATE
|
||
- (SELECT COALESCE (mar_delta_connecttime_bedrijf * 4 * 24, mar_delta_connecttime * 24) / 24
|
||
FROM mar_v_delta_connecttime
|
||
WHERE prs_bedrijf_key = b.prs_bedrijf_key)
|
||
- 6 / 24
|
||
AND s.prs_perslid_key = p.prs_perslid_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND b.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND b.prs_bedrijf_key = sa.prs_bedrijf_key
|
||
AND INSTR (sa.prs_bedrijf_mailadres, '@') > 0
|
||
UNION ALL
|
||
SELECT DISTINCT 'CUST05', '', noti.prs_perslid_key,
|
||
'Sinds de laatste keer mail (tot nu toe): '
|
||
|| (SELECT count(*) FROM marx_v_rap_queue_error rap2 WHERE rap2.fac_tracking_datum >=
|
||
(SELECT MIN(nj.fac_notificatie_job_lastrun) FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_SYNC_UITVAL'))
|
||
|| ' nieuwe NQ fout(en) opgetreden.',
|
||
(SELECT fac_usrrap_key FROM fac_usrrap WHERE fac_usrrap_code = 'NQERRORS'),
|
||
NULL, NULL, NULL
|
||
FROM marx_v_rap_queue_error rap,
|
||
prs_v_aanwezigperslid noti
|
||
WHERE noti.prs_afdeling_key = 121
|
||
AND INSTR (noti.prs_perslid_email, '@') > 0
|
||
AND noti.prs_perslid_ingids = 1
|
||
AND rap.fac_tracking_datum >= (SELECT MIN(nj.fac_notificatie_job_lastrun) FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_SYNC_UITVAL');
|
||
|
||
|
||
-- MARX#87282 Nieuwe API voor activeren leveranciers vanuit (opdrachtgevers)ERP naar Mareon
|
||
-- Nieuwe view t.b.v. notificeren naar leverancier (en ook naar Mareon helpdesk)...
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_noti_bedrijfx2
|
||
(
|
||
code,
|
||
sender,
|
||
receiver,
|
||
text,
|
||
key,
|
||
xkey,
|
||
xemail,
|
||
xmobile,
|
||
geturl
|
||
)
|
||
AS
|
||
SELECT DISTINCT 'CUST10', '', lev.prs_perslid_key, 'Opdrachtgever heeft u via Mareon geactiveerd t.b.v. ontvangst van (onderhouds)opdrachten',
|
||
NULL,
|
||
NULL, NULL, NULL,
|
||
'appl/fac/fac_report.asp?rapcode=NOTIBEDRIJFX2' || '&' || 'mode=list' || '&' || 'noheader=1' || '&' || 'start_fac_tracking_datum=' ||
|
||
(SELECT replace(marx_get_zulu_time(to_char(MIN(nj.fac_notificatie_job_lastrun),'yyyy-mm-dd hh24:mi:ss')),' ','T')
|
||
FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_BEDRIJFX2')
|
||
FROM fac_tracking rap, mar_v_leverancier_api_perslid lev
|
||
WHERE rap.fac_srtnotificatie_key = (select fac_srtnotificatie_key from fac_srtnotificatie where fac_srtnotificatie_code = 'CUST10')
|
||
AND rap.fac_tracking_refkey = lev.prs_bedrijf_key
|
||
AND rap.fac_tracking_datum >= (SELECT MIN(nj.fac_notificatie_job_lastrun) FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_BEDRIJFX2')
|
||
UNION
|
||
SELECT DISTINCT 'CUST10', '', applbeheer.prs_perslid_key, 'Opdrachtgever heeft u via Mareon geactiveerd t.b.v. ontvangst van (onderhouds)opdrachten',
|
||
NULL,
|
||
NULL, NULL, NULL,
|
||
'appl/fac/fac_report.asp?rapcode=NOTIBEDRIJFX2' || '&' || 'mode=list' || '&' || 'noheader=1' || '&' || 'start_fac_tracking_datum=' ||
|
||
(SELECT replace(marx_get_zulu_time(to_char(MIN(nj.fac_notificatie_job_lastrun),'yyyy-mm-dd hh24:mi:ss')),' ','T')
|
||
FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_BEDRIJFX2')
|
||
FROM fac_tracking rap, mar_v_leverancier_api_perslid lev, fac_v_webgebruiker applbeheer
|
||
WHERE rap.fac_srtnotificatie_key = (select fac_srtnotificatie_key from fac_srtnotificatie where fac_srtnotificatie_code = 'CUST10')
|
||
AND rap.fac_tracking_refkey = lev.prs_bedrijf_key
|
||
AND applbeheer.fac_functie_key = (SELECT fac_functie_key FROM fac_functie WHERE fac_functie_code = 'WEB_PRSSYS')
|
||
AND applbeheer.prs_perslid_key <> 4
|
||
AND rap.fac_tracking_datum >= (SELECT MIN(nj.fac_notificatie_job_lastrun) FROM fac_notificatie_job nj
|
||
WHERE nj.fac_notificatie_job_view = 'MAR_V_NOTI_BEDRIJFX2');
|
||
|
||
CREATE OR REPLACE VIEW mar_v_rap_noti_bedrijfx2
|
||
(FCLT_3D_USER_KEY,
|
||
woco_prs_bedrijf_key,
|
||
woco_prs_bedrijf_naam,
|
||
woco_prs_bedrijf_bezoek_plaats,
|
||
woco_prs_leverancier_nr,
|
||
lev_prs_bedrijf_key,
|
||
lev_prs_bedrijf_naam,
|
||
lev_prs_bedrijf_bezoek_plaats,
|
||
lev_prs_leverancier_nr,
|
||
lev_is_premium,
|
||
fac_tracking_datum,
|
||
fac_tracking_oms
|
||
)
|
||
AS
|
||
SELECT lp.prs_perslid_key,
|
||
wp.prs_bedrijf_key,
|
||
wp.prs_bedrijf_naam,
|
||
wp.prs_bedrijf_bezoek_plaats,
|
||
wp.prs_leverancier_nr,
|
||
lev.prs_bedrijf_key,
|
||
lev.prs_bedrijf_naam,
|
||
lev.prs_bedrijf_bezoek_plaats,
|
||
lev.prs_leverancier_nr,
|
||
(SELECT MAX(prs_bedrijf_bedrijf_status) FROM prs_bedrijf_bedrijf bb WHERE prs_bedrijf_key2=lev.prs_bedrijf_key),
|
||
t.fac_tracking_datum,
|
||
t.fac_tracking_oms
|
||
FROM fac_tracking t, prs_bedrijf lev, mar_v_woco_perslid wp, mar_v_leverancier_api_perslid lp
|
||
WHERE t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie where fac_srtnotificatie_code = 'CUST10')
|
||
AND lev.prs_bedrijf_key = t.fac_tracking_refkey
|
||
AND wp.prs_perslid_key = t.prs_perslid_key
|
||
AND lp.prs_bedrijf_key = lev.prs_bedrijf_key
|
||
AND t.fac_tracking_datum >= SYSDATE-30
|
||
UNION
|
||
SELECT applbeheer.prs_perslid_key,
|
||
wp.prs_bedrijf_key,
|
||
wp.prs_bedrijf_naam,
|
||
wp.prs_bedrijf_bezoek_plaats,
|
||
wp.prs_leverancier_nr,
|
||
lev.prs_bedrijf_key,
|
||
lev.prs_bedrijf_naam,
|
||
lev.prs_bedrijf_bezoek_plaats,
|
||
lev.prs_leverancier_nr,
|
||
(SELECT MAX(prs_bedrijf_bedrijf_status) FROM prs_bedrijf_bedrijf bb WHERE prs_bedrijf_key2=lev.prs_bedrijf_key),
|
||
t.fac_tracking_datum,
|
||
t.fac_tracking_oms
|
||
FROM fac_tracking t, prs_bedrijf lev, mar_v_woco_perslid wp, fac_v_webgebruiker applbeheer
|
||
WHERE t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie where fac_srtnotificatie_code = 'CUST10')
|
||
AND lev.prs_bedrijf_key = t.fac_tracking_refkey
|
||
AND wp.prs_perslid_key = t.prs_perslid_key
|
||
AND applbeheer.fac_functie_key = (SELECT fac_functie_key FROM fac_functie WHERE fac_functie_code = 'WEB_PRSSYS')
|
||
AND t.fac_tracking_datum >= SYSDATE-30;
|
||
|
||
|
||
-- Temp view t.b.v. basis UDR rapport voor alle info plat geslagen van woco x lev: melding->opdracht. Hier zitten GEEN factuur (en geen factuurregels) erbij.
|
||
|
||
CREATE OR REPLACE VIEW mar_v_tmp_opdr_woco_x_lev
|
||
AS
|
||
SELECT m.mld_melding_key,
|
||
o.mld_opdr_key,
|
||
so.mld_statusopdr_key,
|
||
o.mld_opdr_halted,
|
||
p.prs_perslid_key,
|
||
a.prs_afdeling_key,
|
||
b_woco.prs_bedrijf_key
|
||
prs_bedrijf_key_opdrachtgever,
|
||
b_lev.prs_bedrijf_key
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
mld_opdr_nr,
|
||
b_woco.prs_leverancier_nr
|
||
opdrachtgever_gln,
|
||
b_woco.prs_bedrijf_naam
|
||
opdrachtgever_naam,
|
||
b_woco.prs_bedrijf_bezoek_adres
|
||
opdrachtgever_bezoekadres,
|
||
b_woco.prs_bedrijf_bezoek_postcode
|
||
opdrachtgever_bezoekpostcode,
|
||
b_woco.prs_bedrijf_bezoek_plaats
|
||
opdrachtgever_bezoekplaats,
|
||
b_woco.prs_bedrijf_bezoek_land
|
||
opdrachtgever_bezoekland,
|
||
b_woco.prs_bedrijf_post_adres
|
||
opdrachtgever_postadres,
|
||
b_woco.prs_bedrijf_post_postcode
|
||
opdrachtgever_postpostcode,
|
||
b_woco.prs_bedrijf_post_plaats
|
||
opdrachtgever_postplaats,
|
||
b_woco.prs_bedrijf_post_land
|
||
opdrachtgever_postland,
|
||
b_woco.prs_bedrijf_telefoon
|
||
opdrachtgever_telefoon,
|
||
b_woco.prs_bedrijf_fax
|
||
opdrachtgever_fax,
|
||
b_woco.prs_bedrijf_email
|
||
opdrachtgever_email,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_omschrijving,
|
||
b_lev.prs_leverancier_nr
|
||
opdrachtnemer_gln,
|
||
b_lev.prs_bedrijf_naam
|
||
opdrachtnemer_naam,
|
||
b_lev.prs_bedrijf_bezoek_adres
|
||
opdrachtnemer_bezoekadres,
|
||
b_lev.prs_bedrijf_bezoek_postcode
|
||
opdrachtnemer_bezoekpostcode,
|
||
b_lev.prs_bedrijf_bezoek_plaats
|
||
opdrachtnemer_bezoekplaats,
|
||
b_lev.prs_bedrijf_bezoek_land
|
||
opdrachtnemer_bezoekland,
|
||
b_lev.prs_bedrijf_post_adres
|
||
opdrachtnemer_postadres,
|
||
b_lev.prs_bedrijf_post_postcode
|
||
opdrachtnemer_postpostcode,
|
||
b_lev.prs_bedrijf_post_plaats
|
||
opdrachtnemer_postplaats,
|
||
b_lev.prs_bedrijf_post_land
|
||
opdrachtnemer_postland,
|
||
b_lev.prs_bedrijf_telefoon
|
||
opdrachtnemer_telefoon,
|
||
b_lev.prs_bedrijf_fax
|
||
opdrachtnemer_fax,
|
||
b_lev.prs_bedrijf_email
|
||
opdrachtnemer_email,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 1 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huurder,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 9 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_straatnaam,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 10 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huisnr,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 19 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huisnr2,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 3 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_postcode,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 4 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_plaats,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 5 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_telefoonnr,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 8 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_mobiel,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 18 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_email,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = m.mld_melding_key AND km.mld_kenmerk_key = 6 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_loc_aanduiding,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 13 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_opzichter,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 14 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_complexnr,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 15 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_pandnr,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 16 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_VGEnummer,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 57 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_bouwjaar,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_soort,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 25 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_typering,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 26 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_afspraak,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 29 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_gln_vve,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 38 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_gln_eigenaar,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 101 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_naam_eigenaar,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 102 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_adres_eigenaar,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 103 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_postcode_eigenaar,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 104 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_plaats_eigenaar,
|
||
o.mld_opdr_kosten,
|
||
fac.gettrackingdate ('ORDNEW', o.mld_opdr_key)
|
||
mld_opdr_aanmaak,
|
||
o.mld_opdr_verzonden,
|
||
o.mld_opdr_datumbegin,
|
||
o.mld_opdr_einddatum,
|
||
o.mld_opdr_plandatum,
|
||
o.mld_opdr_plandatum2,
|
||
(SELECT MAX (t.fac_tracking_datum)
|
||
FROM fac_tracking t, fac_srtnotificatie sn
|
||
WHERE o.mld_opdr_key = t.fac_tracking_refkey
|
||
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
|
||
AND sn.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_code = 'ORDAFM'))
|
||
mld_opdr_afmelddatum,
|
||
so.mld_statusopdr_omschrijving
|
||
mld_opdr_status,
|
||
(SELECT MAX (bb.prs_bedrijf_bedrijf_status)
|
||
FROM prs_bedrijf_bedrijf bb
|
||
WHERE bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key)
|
||
prs_bedrijf_is_premium,
|
||
DECODE ((SELECT MAX (bb.prs_bedrijf_bedrijf_status)
|
||
FROM prs_bedrijf_bedrijf bb
|
||
WHERE bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key),
|
||
1, 'Ja',
|
||
'Nee')
|
||
prs_bedrijf_is_premium_janee,
|
||
CASE
|
||
WHEN bb.prs_bedrijf_bedrijf_startdatum <= TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key))
|
||
AND TRUNC(COALESCE (bb.prs_bedrijf_bedrijf_einddatum, o.mld_opdr_verzonden)) >= TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key))
|
||
THEN
|
||
1
|
||
ELSE
|
||
0
|
||
END
|
||
mld_opdr_is_premium,
|
||
CASE
|
||
WHEN bb.prs_bedrijf_bedrijf_startdt2 <= TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key))
|
||
AND TRUNC (COALESCE (bb.prs_bedrijf_bedrijf_einddt2, o.mld_opdr_verzonden)) >= TRUNC (fac.gettrackingdate ('ORDNEW', o.mld_opdr_key))
|
||
THEN
|
||
1
|
||
ELSE
|
||
0
|
||
END
|
||
mld_opdr_is_premium_plan,
|
||
COALESCE (bb.prs_bedrijf_bedrijf_fee1, 0) prs_woco_premium_tarief,
|
||
COALESCE (bb.prs_bedrijf_bedrijf_fee2, 0) prs_bedrijf_premium_tarief,
|
||
COALESCE (bb.prs_bedrijf_bedrijf_fee3, 0) prs_woco_premiumplan_tarief,
|
||
COALESCE (bb.prs_bedrijf_bedrijf_fee4, 0) prs_bedrijf_premiumplan_tarief,
|
||
bb.prs_bedrijf_bedrijf_startdatum prs_bedrijf_premium_start,
|
||
bb.prs_bedrijf_bedrijf_einddatum prs_bedrijf_premium_eind,
|
||
bb.prs_bedrijf_bedrijf_startdt2 prs_bedrijf_premiumplan_start,
|
||
bb.prs_bedrijf_bedrijf_einddt2 prs_bedrijf_premiumplan_eind,
|
||
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 61
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_link_key = b_lev.prs_bedrijf_key) planbord_auth_code,
|
||
bp.prs_bedrijfadres_url
|
||
FROM mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
prs_bedrijf b_woco,
|
||
prs_afdeling a,
|
||
prs_perslid p,
|
||
mld_opdr o,
|
||
mld_statusopdr so,
|
||
prs_bedrijf b_lev,
|
||
prs_bedrijf_bedrijf bb,
|
||
mar_v_bedrijf_premium bp
|
||
WHERE sd.ins_srtdiscipline_key = d.ins_srtdiscipline_key
|
||
AND d.ins_discipline_key = sm.mld_ins_discipline_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND m.prs_perslid_key = p.prs_perslid_key
|
||
AND a.prs_afdeling_key = p.prs_afdeling_key
|
||
AND b_woco.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND so.mld_statusopdr_key = o.mld_statusopdr_key
|
||
AND o.mld_uitvoerende_keys = b_lev.prs_bedrijf_key
|
||
AND bb.prs_bedrijf_key1 = b_woco.prs_bedrijf_key
|
||
AND bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key
|
||
AND b_lev.prs_bedrijf_key = bp.prs_bedrijf_key;
|
||
|
||
|
||
-- Basis UDR rapport voor alle info plat geslagen van woco x lev: melding->opdracht->optionele opdrachtregels->optioneel factuur (geen factuurregels)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_opdr_woco_x_lev
|
||
AS
|
||
SELECT mld_melding_key,
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
prs_perslid_key,
|
||
prs_afdeling_key,
|
||
prs_bedrijf_key_opdrachtgever,
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
mld_opdr_nr,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtgever_bezoekadres,
|
||
opdrachtgever_bezoekpostcode,
|
||
opdrachtgever_bezoekplaats,
|
||
opdrachtgever_bezoekland,
|
||
opdrachtgever_postadres,
|
||
opdrachtgever_postpostcode,
|
||
opdrachtgever_postplaats,
|
||
opdrachtgever_postland,
|
||
opdrachtgever_telefoon,
|
||
opdrachtgever_fax,
|
||
opdrachtgever_email,
|
||
mld_opdr_id,
|
||
mld_opdr_omschrijving,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
opdrachtnemer_bezoekadres,
|
||
opdrachtnemer_bezoekpostcode,
|
||
opdrachtnemer_bezoekplaats,
|
||
opdrachtnemer_bezoekland,
|
||
opdrachtnemer_postadres,
|
||
opdrachtnemer_postpostcode,
|
||
opdrachtnemer_postplaats,
|
||
opdrachtnemer_postland,
|
||
opdrachtnemer_telefoon,
|
||
opdrachtnemer_fax,
|
||
opdrachtnemer_email,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_opdr_kosten,
|
||
mld_opdr_aanmaak,
|
||
mld_opdr_verzonden,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_status,
|
||
CASE
|
||
WHEN mld_statusopdr_key = 8
|
||
THEN
|
||
CASE
|
||
WHEN EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_tracking t, fac_srtnotificatie sn
|
||
WHERE t.FAC_TRACKING_REFKEY = mld_opdr_key
|
||
AND t.FAC_SRTNOTIFICATIE_KEY = sn.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_code IN ('ORDHLT', 'ORDRSM'))
|
||
THEN
|
||
CASE WHEN mld_opdr_halted = 0 THEN 'In uitvoering' ELSE 'Onderbroken' END
|
||
END
|
||
END
|
||
mld_opdr_substatus,
|
||
CASE
|
||
WHEN mld_statusopdr_key = 8
|
||
THEN
|
||
CASE
|
||
WHEN mld_opdr_plandatum IS NOT NULL AND mld_opdr_plandatum2 IS NOT NULL
|
||
THEN
|
||
'Gepland' || ' & ' || 'Verlengd'
|
||
WHEN mld_opdr_plandatum IS NOT NULL
|
||
THEN
|
||
'Gepland'
|
||
WHEN mld_opdr_plandatum2 IS NOT NULL
|
||
THEN
|
||
'Verlengd'
|
||
END
|
||
END
|
||
mld_opdr_planning,
|
||
prs_bedrijf_is_premium,
|
||
prs_bedrijf_is_premium_janee,
|
||
mld_opdr_is_premium,
|
||
prs_bedrijf_premium_tarief,
|
||
prs_bedrijf_premium_tarief * mld_opdr_is_premium mld_opdr_is_premium_bedrag,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
prs_bedrijfadres_url,
|
||
prs_woco_premium_tarief,
|
||
prs_woco_premium_tarief * mld_opdr_is_premium mld_opdr_woco_premium_bedrag,
|
||
mld_opdr_is_premium_plan,
|
||
prs_bedrijf_premiumplan_tarief,
|
||
prs_bedrijf_premiumplan_tarief * mld_opdr_is_premium_plan mld_opdr_premiumplan_bedrag,
|
||
prs_woco_premiumplan_tarief,
|
||
prs_woco_premiumplan_tarief * mld_opdr_is_premium_plan mld_woco_premiumplan_bedrag,
|
||
prs_bedrijf_premiumplan_start,
|
||
prs_bedrijf_premiumplan_eind,
|
||
CASE
|
||
WHEN planbord_auth_code IN (1,2) THEN (SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 25)
|
||
ELSE 0
|
||
END prs_bedrijf_planbord_tarief,
|
||
CASE
|
||
WHEN planbord_auth_code = 2 AND prs_bedrijf_premiumplan_tarief > 0 THEN 'Mareon Planbord + Premium Planning + Groene Planning'
|
||
WHEN planbord_auth_code = 1 AND prs_bedrijf_premiumplan_tarief > 0 THEN 'Mareon Planbord + Premium Planning'
|
||
WHEN planbord_auth_code = 0 AND prs_bedrijf_premiumplan_tarief > 0 THEN 'Mareon Premium Planning'
|
||
WHEN planbord_auth_code = 2 THEN 'Mareon Planbord + Groene Planning'
|
||
WHEN planbord_auth_code = 1 THEN 'Mareon Planbord'
|
||
ELSE ''
|
||
END prs_bedrijf_planmodules
|
||
FROM mar_v_tmp_opdr_woco_x_lev;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_premium_staffelkorting
|
||
AS
|
||
SELECT opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
TO_CHAR (mld_opdr_aanmaak, 'YYYY-Q')
|
||
AS mld_opdr_aanmaak_kwartaal,
|
||
SUM (mld_opdr_is_premium)
|
||
AS mld_opdr_aantal_premium,
|
||
prs_woco_premium_tarief,
|
||
prs_bedrijf_premium_tarief,
|
||
SUM (mld_opdr_is_premium_bedrag)
|
||
AS mld_premium_bedrag_excl_kort,
|
||
prs_bedrijf_is_premium_janee,
|
||
GREATEST (0, LEAST (2500 - 1000, SUM (mld_opdr_is_premium) - 1000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 32))
|
||
AS mld_korting_staffel1000_2500,
|
||
GREATEST (0, LEAST (5000 - 2500, SUM (mld_opdr_is_premium) - 2500)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 33))
|
||
AS mld_korting_staffel2500_5000,
|
||
GREATEST (0, LEAST (10000 - 5000, SUM (mld_opdr_is_premium) - 5000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 34))
|
||
AS mld_korting_staffel5000_10000,
|
||
GREATEST (0, LEAST (50000 - 10000, SUM (mld_opdr_is_premium) - 10000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 35))
|
||
AS mld_korting_staffel10000_50000,
|
||
GREATEST (0, SUM (mld_opdr_is_premium) - 50000) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 36))
|
||
AS mld_korting_staffel_50000plus,
|
||
(GREATEST (0, LEAST (2500 - 1000, SUM (mld_opdr_is_premium) - 1000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 32)))
|
||
+ (GREATEST (0, LEAST (5000 - 2500, SUM (mld_opdr_is_premium) - 2500)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 33)))
|
||
+ (GREATEST (0, LEAST (10000 - 5000, SUM (mld_opdr_is_premium) - 5000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 34)))
|
||
+ (GREATEST (0, LEAST (50000 - 10000, SUM (mld_opdr_is_premium) - 10000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 35)))
|
||
+ (GREATEST (0, SUM (mld_opdr_is_premium) - 50000) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 36)))
|
||
AS mld_korting_totaal,
|
||
SUM (mld_opdr_is_premium_bedrag)
|
||
- ( (GREATEST (0, LEAST (2500 - 1000, SUM (mld_opdr_is_premium) - 1000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 32)))
|
||
+ (GREATEST (0, LEAST (5000 - 2500, SUM (mld_opdr_is_premium) - 2500)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 33)))
|
||
+ (GREATEST (0, LEAST (10000 - 5000, SUM (mld_opdr_is_premium) - 5000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 34)))
|
||
+ (GREATEST (0, LEAST (50000 - 10000, SUM (mld_opdr_is_premium) - 10000)) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 35)))
|
||
+ (GREATEST (0, SUM (mld_opdr_is_premium) - 50000) * ((SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 31) - (SELECT fac.safe_to_number(fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 36))))
|
||
AS mld_premium_bedrag_incl_kort
|
||
FROM mar_v_udr_opdr_woco_x_lev
|
||
WHERE mar_v_udr_opdr_woco_x_lev.prs_woco_premium_tarief = 0 AND mar_v_udr_opdr_woco_x_lev.prs_bedrijf_is_premium = 1
|
||
GROUP BY opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
TO_CHAR (mld_opdr_aanmaak, 'YYYY-Q'),
|
||
prs_woco_premium_tarief,
|
||
prs_bedrijf_premium_tarief,
|
||
prs_bedrijf_is_premium_janee;
|
||
|
||
-- Basis UDR rapport voor alle info plat geslagen van woco x lev: melding->opdracht->optionele opdrachtregels->optioneel factuur erbij (geen factuurregels)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_opdr_fact_woco_x_lev
|
||
AS
|
||
SELECT mld_melding_key,
|
||
t.mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
prs_perslid_key,
|
||
prs_afdeling_key,
|
||
prs_bedrijf_key_opdrachtgever,
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
f.fin_factuur_key,
|
||
mld_opdr_nr,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtgever_bezoekadres,
|
||
opdrachtgever_bezoekpostcode,
|
||
opdrachtgever_bezoekplaats,
|
||
opdrachtgever_bezoekland,
|
||
opdrachtgever_postadres,
|
||
opdrachtgever_postpostcode,
|
||
opdrachtgever_postplaats,
|
||
opdrachtgever_postland,
|
||
opdrachtgever_telefoon,
|
||
opdrachtgever_fax,
|
||
opdrachtgever_email,
|
||
mld_opdr_id,
|
||
mld_opdr_omschrijving,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
opdrachtnemer_bezoekadres,
|
||
opdrachtnemer_bezoekpostcode,
|
||
opdrachtnemer_bezoekplaats,
|
||
opdrachtnemer_bezoekland,
|
||
opdrachtnemer_postadres,
|
||
opdrachtnemer_postpostcode,
|
||
opdrachtnemer_postplaats,
|
||
opdrachtnemer_postland,
|
||
opdrachtnemer_telefoon,
|
||
opdrachtnemer_fax,
|
||
opdrachtnemer_email,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_opdr_kosten,
|
||
mld_opdr_aanmaak,
|
||
mld_opdr_verzonden,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_status,
|
||
mld_opdr_substatus,
|
||
mld_opdr_planning,
|
||
DECODE (f.fin_factuur_key, NULL, 0, 1)
|
||
mld_opdr_factuur_aanwezig,
|
||
f.fin_factuur_nr,
|
||
f.fin_factuur_datum,
|
||
f.fin_factuur_totaal,
|
||
f.fin_factuur_totaal_btw,
|
||
f.fin_factuur_opmerking,
|
||
(SELECT kf.fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 9 AND kf.fin_kenmerkfactuur_verwijder IS NULL)
|
||
factuur_versturen,
|
||
prs_bedrijf_is_premium,
|
||
prs_bedrijf_is_premium_janee,
|
||
mld_opdr_is_premium,
|
||
prs_bedrijf_premium_tarief,
|
||
mld_opdr_is_premium_bedrag,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
prs_bedrijfadres_url
|
||
FROM mar_v_udr_opdr_woco_x_lev t,
|
||
(SELECT *
|
||
FROM fin_factuur
|
||
WHERE fin_factuur_statuses_key <> 3 AND fin_factuur_verwijder IS NULL) f
|
||
WHERE t.mld_opdr_key = f.mld_opdr_key(+) AND f.bes_bestelopdr_key IS NULL AND f.cnt_contract_key IS NULL;
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_opdr_lev
|
||
AS
|
||
SELECT cp.prs_perslid_key FCLT_3D_USER_KEY,
|
||
mld_melding_key,
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
udr.prs_perslid_key,
|
||
prs_afdeling_key,
|
||
prs_bedrijf_key_opdrachtgever,
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
fin_factuur_key,
|
||
mld_opdr_nr,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtgever_bezoekadres,
|
||
opdrachtgever_bezoekpostcode,
|
||
opdrachtgever_bezoekplaats,
|
||
opdrachtgever_bezoekland,
|
||
opdrachtgever_postadres,
|
||
opdrachtgever_postpostcode,
|
||
opdrachtgever_postplaats,
|
||
opdrachtgever_postland,
|
||
opdrachtgever_telefoon,
|
||
opdrachtgever_fax,
|
||
opdrachtgever_email,
|
||
mld_opdr_id,
|
||
mld_opdr_omschrijving,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
opdrachtnemer_bezoekadres,
|
||
opdrachtnemer_bezoekpostcode,
|
||
opdrachtnemer_bezoekplaats,
|
||
opdrachtnemer_bezoekland,
|
||
opdrachtnemer_postadres,
|
||
opdrachtnemer_postpostcode,
|
||
opdrachtnemer_postplaats,
|
||
opdrachtnemer_postland,
|
||
opdrachtnemer_telefoon,
|
||
opdrachtnemer_fax,
|
||
opdrachtnemer_email,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_opdr_kosten,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_status,
|
||
mld_opdr_substatus,
|
||
mld_opdr_planning,
|
||
mld_opdr_factuur_aanwezig,
|
||
fin_factuur_nr,
|
||
fin_factuur_datum,
|
||
fin_factuur_totaal,
|
||
fin_factuur_totaal_btw,
|
||
fin_factuur_opmerking,
|
||
factuur_versturen
|
||
FROM mar_v_udr_opdr_fact_woco_x_lev udr, prs_contactpersoon cp
|
||
WHERE udr.prs_bedrijf_key_opdrachtnemer = cp.prs_bedrijf_key
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND cp.prs_perslid_key IS NOT NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_show_premium_data
|
||
AS
|
||
SELECT p.prs_perslid_key,
|
||
p.prs_perslid_apikey,
|
||
es.fac_email_setting_user,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
mld_opdr_nr,
|
||
mld_opdr_id,
|
||
mld_opdr_omschrijving,
|
||
mld_opdr_aanmaak,
|
||
prs_bedrijf_is_premium,
|
||
prs_bedrijf_is_premium_janee,
|
||
mld_opdr_is_premium,
|
||
prs_bedrijf_premium_tarief,
|
||
mld_opdr_is_premium_bedrag,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
prs_bedrijfadres_url,
|
||
'https://marx.mareon.nl/?API=MLD_OPDR_SIDB' || '&' || 'APIKEY=' || p.prs_perslid_apikey
|
||
mareon_url_statusbericht,
|
||
'https://marx.mareon.nl/?API=FIN_FACTUUR_SIDB' || '&' || 'APIKEY=' || p.prs_perslid_apikey
|
||
mareon_url_factuurbericht,
|
||
es.fac_email_setting_user || DECODE (es.fac_email_setting_user, '', '', '@marx.mareon.nl')
|
||
mareon_mail_factuurbericht,
|
||
SUBSTR (
|
||
es.fac_email_setting_attachpath,
|
||
INSTR (es.fac_email_setting_attachpath, 'FIN_FACTUUR_'),
|
||
INSTR (es.fac_email_setting_attachpath, CHR (92), INSTR (es.fac_email_setting_attachpath, 'FIN_FACTUUR_'))
|
||
- INSTR (es.fac_email_setting_attachpath, 'FIN_FACTUUR_'))
|
||
fac_email_setting_attachpath
|
||
FROM mar_v_udr_opdr_woco_x_lev udr,
|
||
prs_contactpersoon cp,
|
||
prs_perslid p,
|
||
fac_email_setting es
|
||
WHERE udr.prs_bedrijf_key_opdrachtnemer = cp.prs_bedrijf_key
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND cp.prs_perslid_key IS NOT NULL
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND p.prs_perslid_apikey IS NOT NULL
|
||
AND es.fac_email_setting_attachpath(+) LIKE '%FIN_FACTUUR_%' || p.prs_perslid_apikey || '%'
|
||
UNION ALL
|
||
SELECT p.prs_perslid_key,
|
||
p.prs_perslid_apikey,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
b.prs_leverancier_nr,
|
||
b.prs_bedrijf_naam,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
(SELECT MAX (bb.prs_bedrijf_bedrijf_status)
|
||
FROM prs_bedrijf_bedrijf bb
|
||
WHERE bb.prs_bedrijf_key2 = b.prs_bedrijf_key)
|
||
prs_bedrijf_is_premium,
|
||
DECODE ((SELECT MAX (bb.prs_bedrijf_bedrijf_status)
|
||
FROM prs_bedrijf_bedrijf bb
|
||
WHERE bb.prs_bedrijf_key2 = b.prs_bedrijf_key),
|
||
1, 'Ja',
|
||
'Nee')
|
||
prs_bedrijf_is_premium_janee,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
(SELECT MAX(ba.prs_bedrijfadres_url)
|
||
FROM prs_bedrijfadres ba
|
||
WHERE ba.prs_bedrijf_key = b.prs_bedrijf_key AND ba.prs_bedrijfadres_type = 'O' AND ba.mld_typeopdr_key IS NULL
|
||
AND ba.prs_bedrijfadres_startdatum = (SELECT MAX(ba2.prs_bedrijfadres_startdatum)
|
||
FROM prs_bedrijfadres ba2
|
||
WHERE ba2.prs_bedrijf_key = b.prs_bedrijf_key AND ba2.prs_bedrijfadres_type = 'O' AND ba2.mld_typeopdr_key IS NULL AND ba2.prs_bedrijfadres_startdatum <= SYSDATE)
|
||
),
|
||
NULL,
|
||
NULL,
|
||
NULL,
|
||
NULL
|
||
FROM prs_bedrijf b, prs_contactpersoon cp, prs_perslid p
|
||
WHERE b.prs_bedrijf_intern IS NULL
|
||
AND b.prs_bedrijf_verwijder IS NULL
|
||
AND b.prs_bedrijf_key = cp.prs_bedrijf_key
|
||
AND cp.prs_contactpersoon_verwijder IS NULL
|
||
AND cp.prs_perslid_key IS NOT NULL
|
||
AND p.prs_perslid_key = cp.prs_perslid_key
|
||
AND p.prs_perslid_apikey IS NOT NULL;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_show_mypremium
|
||
(
|
||
prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
fac_email_setting_user,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
jaar,
|
||
kwartaal,
|
||
prs_bedrijf_premium_tarief,
|
||
aantal_premium_opdr,
|
||
premium_bedrag,
|
||
prs_bedrijfadres_url,
|
||
mareon_mail_factuurbericht,
|
||
fac_email_setting_attachpath
|
||
)
|
||
AS
|
||
SELECT prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
MIN (fac_email_setting_user),
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
MIN (prs_bedrijf_premium_start),
|
||
MAX (prs_bedrijf_premium_eind),
|
||
TO_CHAR (mld_opdr_aanmaak, 'YYYY'),
|
||
TO_CHAR (mld_opdr_aanmaak, 'Q'),
|
||
prs_bedrijf_premium_tarief,
|
||
SUM (mld_opdr_is_premium),
|
||
prs_bedrijf_premium_tarief * SUM (mld_opdr_is_premium),
|
||
MIN (prs_bedrijfadres_url),
|
||
MIN (mareon_mail_factuurbericht),
|
||
MIN (fac_email_setting_attachpath)
|
||
FROM mar_v_udr_show_premium_data
|
||
WHERE prs_bedrijf_is_premium = 1
|
||
GROUP BY prs_perslid_key,
|
||
prs_perslid_apikey,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
TO_CHAR (mld_opdr_aanmaak, 'YYYY'),
|
||
TO_CHAR (mld_opdr_aanmaak, 'Q'),
|
||
prs_bedrijf_premium_tarief;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_udr_opdr_woco
|
||
AS
|
||
SELECT mld_melding_key,
|
||
mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
udr.prs_perslid_key,
|
||
prs_afdeling_key FCLT_3D_AFDELING_KEY,
|
||
prs_bedrijf_key_opdrachtgever,
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
fin_factuur_key,
|
||
mld_opdr_nr,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtgever_bezoekadres,
|
||
opdrachtgever_bezoekpostcode,
|
||
opdrachtgever_bezoekplaats,
|
||
opdrachtgever_bezoekland,
|
||
opdrachtgever_postadres,
|
||
opdrachtgever_postpostcode,
|
||
opdrachtgever_postplaats,
|
||
opdrachtgever_postland,
|
||
opdrachtgever_telefoon,
|
||
opdrachtgever_fax,
|
||
opdrachtgever_email,
|
||
mld_opdr_id,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_opdr_omschrijving,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
opdrachtnemer_bezoekadres,
|
||
opdrachtnemer_bezoekpostcode,
|
||
opdrachtnemer_bezoekplaats,
|
||
opdrachtnemer_bezoekland,
|
||
opdrachtnemer_postadres,
|
||
opdrachtnemer_postpostcode,
|
||
opdrachtnemer_postplaats,
|
||
opdrachtnemer_postland,
|
||
opdrachtnemer_telefoon,
|
||
opdrachtnemer_fax,
|
||
opdrachtnemer_email,
|
||
mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_opdr_kosten,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_status,
|
||
mld_opdr_substatus,
|
||
mld_opdr_planning,
|
||
mld_opdr_factuur_aanwezig,
|
||
fin_factuur_nr,
|
||
fin_factuur_datum,
|
||
fin_factuur_totaal,
|
||
fin_factuur_totaal_btw,
|
||
fin_factuur_opmerking,
|
||
factuur_versturen
|
||
FROM mar_v_udr_opdr_fact_woco_x_lev udr
|
||
WHERE mld_opdr_datumbegin >= to_date('01-' || to_char(sysdate,'MM') || '-' || (to_char(sysdate, 'YYYY') - 1),'DD-MM-YYYY');
|
||
|
||
|
||
-- Temp view t.b.v. basis UDR rapport voor alle info plat geslagen van woco x lev: melding->opdracht->optionele opdrachtregels->optioneel factuur (geen factuurregels)
|
||
|
||
CREATE OR REPLACE VIEW mar_v_tmp_opdrmat_woco_x_lev
|
||
AS
|
||
SELECT mld_melding_key,
|
||
wxl.mld_opdr_key,
|
||
mld_statusopdr_key,
|
||
prs_perslid_key,
|
||
prs_afdeling_key,
|
||
prs_bedrijf_key_opdrachtgever,
|
||
prs_bedrijf_key_opdrachtnemer,
|
||
fin_factuur_key,
|
||
mld_opdr_nr,
|
||
opdrachtgever_gln,
|
||
opdrachtgever_naam,
|
||
opdrachtgever_bezoekadres,
|
||
opdrachtgever_bezoekpostcode,
|
||
opdrachtgever_bezoekplaats,
|
||
opdrachtgever_bezoekland,
|
||
opdrachtgever_postadres,
|
||
opdrachtgever_postpostcode,
|
||
opdrachtgever_postplaats,
|
||
opdrachtgever_postland,
|
||
opdrachtgever_telefoon,
|
||
opdrachtgever_fax,
|
||
opdrachtgever_email,
|
||
mld_opdr_id,
|
||
mld_opdr_omschrijving,
|
||
opdrachtnemer_gln,
|
||
opdrachtnemer_naam,
|
||
opdrachtnemer_bezoekadres,
|
||
opdrachtnemer_bezoekpostcode,
|
||
opdrachtnemer_bezoekplaats,
|
||
opdrachtnemer_bezoekland,
|
||
opdrachtnemer_postadres,
|
||
opdrachtnemer_postpostcode,
|
||
opdrachtnemer_postplaats,
|
||
opdrachtnemer_postland,
|
||
opdrachtnemer_telefoon,
|
||
opdrachtnemer_fax,
|
||
opdrachtnemer_email,
|
||
mld_opdr_soort,
|
||
mld_opdr_typering,
|
||
mld_opdr_afspraak,
|
||
mld_melding_huurder,
|
||
mld_melding_straatnaam,
|
||
mld_melding_huisnr,
|
||
mld_melding_huisnr2,
|
||
mld_melding_postcode,
|
||
mld_melding_plaats,
|
||
mld_melding_telefoonnr,
|
||
mld_melding_mobiel,
|
||
mld_melding_email,
|
||
mld_opdr_kosten,
|
||
mld_opdr_aanmaak,
|
||
mld_opdr_verzonden,
|
||
mld_opdr_datumbegin,
|
||
mld_opdr_einddatum,
|
||
mld_opdr_plandatum,
|
||
mld_opdr_plandatum2,
|
||
mld_opdr_afmelddatum,
|
||
mld_opdr_status,
|
||
mld_opdr_substatus,
|
||
mld_opdr_planning,
|
||
mld_opdr_factuur_aanwezig,
|
||
fin_factuur_nr,
|
||
fin_factuur_datum,
|
||
fin_factuur_totaal,
|
||
fin_factuur_totaal_btw,
|
||
fin_factuur_opmerking,
|
||
factuur_versturen,
|
||
prs_bedrijf_is_premium,
|
||
prs_bedrijf_is_premium_janee,
|
||
mld_opdr_is_premium,
|
||
prs_bedrijf_premium_tarief,
|
||
mld_opdr_is_premium_bedrag,
|
||
prs_bedrijf_premium_start,
|
||
prs_bedrijf_premium_eind,
|
||
prs_bedrijfadres_url,
|
||
om.mld_opdr_materiaal_key,
|
||
DECODE (om.mld_opdr_materiaal_key, NULL, 0, 1)
|
||
mld_opdr_materiaal_aanwezig,
|
||
om.mld_opdr_materiaal_groep,
|
||
om.mld_opdr_materiaal_extra1,
|
||
om.mld_opdr_materiaal_extra2,
|
||
om.mld_opdr_materiaal_extra3,
|
||
om.mld_opdr_materiaal_extra4,
|
||
om.mld_opdr_materiaal_id,
|
||
om.mld_opdr_materiaal_code,
|
||
om.mld_opdr_materiaal_omschr,
|
||
om.mld_opdr_materiaal_info,
|
||
om.mld_opdr_materiaal_eenheid,
|
||
om.mld_opdr_materiaal_eenheidcode,
|
||
om.mld_opdr_materiaal_prijs,
|
||
om.mld_opdr_materiaal_aantal,
|
||
om.mld_opdr_materiaal_aantal * om.mld_opdr_materiaal_prijs
|
||
subtotaal_ex_btw,
|
||
(SELECT btw.fin_btwtabelwaarde_code
|
||
FROM fin_btwtabelwaarde btw
|
||
WHERE btw.fin_btwtabelwaarde_key = om.fin_btwtabelwaarde_key)
|
||
fin_btwtabelwaarde_code,
|
||
(SELECT btw.fin_btwtabelwaarde_perc
|
||
FROM fin_btwtabelwaarde btw
|
||
WHERE btw.fin_btwtabelwaarde_key = om.fin_btwtabelwaarde_key)
|
||
fin_btwtabelwaarde_perc,
|
||
om.mld_opdr_materiaal_aantal * om.mld_opdr_materiaal_prijs
|
||
+ fin.getbtw_bedrag (om.mld_opdr_materiaal_aantal * om.mld_opdr_materiaal_prijs, om.fin_btwtabelwaarde_key)
|
||
subtotaal_in_btw
|
||
FROM mar_v_udr_opdr_fact_woco_x_lev wxl, mld_opdr_materiaal om
|
||
WHERE wxl.mld_opdr_key = om.mld_opdr_key(+);
|
||
|
||
|
||
|
||
-- MARX#54448: Opdrachtnotities, heldere scheiding dat dit eigen aantekeningen zijn...
|
||
-- Hier een view tbv het rapport "Wat heb ik als opdrachtnemer gedaan".
|
||
-- In deze view zitten ook de interne notities die opdrachtgever niet ziet.
|
||
-- En verder ook de gerelateerde facturen van de opdracht.
|
||
|
||
CREATE OR REPLACE VIEW marx_v_my_activity_opdnmr
|
||
AS
|
||
SELECT x.HIDE_F_SORT,
|
||
x.prs_perslid_key,
|
||
x.fac_tracking_datum,
|
||
x.mld_opdr_omschrijving,
|
||
x.mld_opdr_track_omschrijving,
|
||
x.mld_opdr_key,
|
||
x.marnr,
|
||
x.mld_opdr_id,
|
||
x.prs_bedrijf_naam,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 1 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huurder,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 9 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_straatnaam,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key
|
||
AND km.mld_kenmerk_key = 10
|
||
AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
|| ' '
|
||
|| (SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key
|
||
AND km.mld_kenmerk_key = 19
|
||
AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huisnr,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 4 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_plaats,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 13 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_opzichter,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_soort,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 25 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_typering,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 26 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_afspraak
|
||
FROM (SELECT ABS (TO_DATE ('1900-01-01', 'YYYY-MM-DD') - n.mld_opdr_note_aanmaak) HIDE_F_SORT,
|
||
n.prs_perslid_key,
|
||
n.mld_opdr_note_aanmaak fac_tracking_datum,
|
||
o.mld_opdr_omschrijving,
|
||
n.mld_opdr_note_omschrijving mld_opdr_track_omschrijving,
|
||
n.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr marnr,
|
||
o.mld_opdr_id,
|
||
woco.prs_bedrijf_naam,
|
||
m.mld_melding_key
|
||
FROM mld_opdr_note n,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco
|
||
WHERE n.mld_opdr_key = o.mld_opdr_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
UNION ALL
|
||
SELECT ABS (TO_DATE ('1900-01-01', 'YYYY-MM-DD') - tr.fac_tracking_datum)
|
||
HIDE_F_SORT,
|
||
DECODE (tr.prs_perslid_key,
|
||
NULL, lev.prs_perslid_key,
|
||
woco.prs_perslid_key, lev.prs_perslid_key,
|
||
tr.prs_perslid_key)
|
||
prs_perslid_key,
|
||
tr.fac_tracking_datum,
|
||
o.mld_opdr_omschrijving,
|
||
COALESCE (tr.fac_tracking_oms, LCL.L ('lcl_mld_is_' || LOWER (fac_srtnotificatie_code), 1))
|
||
mld_opdr_track_omschrijving,
|
||
tr.fac_tracking_refkey
|
||
mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
marnr,
|
||
o.mld_opdr_id,
|
||
woco.prs_bedrijf_naam,
|
||
m.mld_melding_key
|
||
FROM fac_tracking tr,
|
||
fac_srtnotificatie str,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_leverancier_perslid lev
|
||
WHERE tr.fac_tracking_refkey = o.mld_opdr_key
|
||
AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
|
||
AND str.fac_srtnotificatie_code <> 'MLDNOT' -- beetje dubbelop
|
||
AND str.fac_srtnotificatie_xmlnode IN ('opdracht')
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT ABS (TO_DATE ('1900-01-01', 'YYYY-MM-DD') - tr.fac_tracking_datum)
|
||
HIDE_F_SORT,
|
||
DECODE (tr.prs_perslid_key,
|
||
NULL, lev.prs_perslid_key,
|
||
woco.prs_perslid_key, lev.prs_perslid_key,
|
||
tr.prs_perslid_key)
|
||
prs_perslid_key,
|
||
tr.fac_tracking_datum,
|
||
o.mld_opdr_omschrijving,
|
||
COALESCE (tr.fac_tracking_oms, LCL.L ('lcl_fin_is_' || LOWER (fac_srtnotificatie_code), 1))
|
||
mld_opdr_track_omschrijving,
|
||
o.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
marnr,
|
||
o.mld_opdr_id,
|
||
woco.prs_bedrijf_naam,
|
||
m.mld_melding_key
|
||
FROM fac_tracking tr,
|
||
fac_srtnotificatie str,
|
||
fin_factuur f,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_leverancier_perslid lev
|
||
WHERE tr.fac_tracking_refkey = f.fin_factuur_key
|
||
AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
|
||
AND str.fac_srtnotificatie_code <> 'FINNOT' -- beetje dubbelop
|
||
AND str.fac_srtnotificatie_xmlnode IN ('factuur')
|
||
AND f.mld_opdr_key = o.mld_opdr_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key) x
|
||
WHERE x.mld_opdr_track_omschrijving IS NOT NULL;
|
||
|
||
-- MARX#54448: Opdrachtnotities
|
||
-- Hier een view tbv het rapport "Wat zijn er met mijn opdrachten als opdrachtgever uitgevoerd".
|
||
-- In deze view zitten NIET de interne notities van opdrachtnemer, opdrachtgever gaat deze niet te zien krijgen.
|
||
-- En verder wel de gerelateerde facturen van de opdracht.
|
||
|
||
CREATE OR REPLACE VIEW marx_v_my_activity_opdrgvr
|
||
AS
|
||
SELECT x.HIDE_F_SORT,
|
||
x.prs_afdeling_key
|
||
FCLT_3D_AFDELING_KEY,
|
||
x.fac_tracking_datum,
|
||
x.mld_opdr_omschrijving,
|
||
x.mld_opdr_track_omschrijving,
|
||
x.mld_opdr_key,
|
||
x.marnr,
|
||
x.mld_opdr_id,
|
||
x.prs_bedrijf_naam,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 1 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huurder,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 9 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_straatnaam,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key
|
||
AND km.mld_kenmerk_key = 10
|
||
AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
|| ' '
|
||
|| (SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key
|
||
AND km.mld_kenmerk_key = 19
|
||
AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_huisnr,
|
||
(SELECT km.mld_kenmerkmelding_waarde
|
||
FROM mld_kenmerkmelding km
|
||
WHERE km.mld_melding_key = x.mld_melding_key AND km.mld_kenmerk_key = 4 AND km.mld_kenmerkmelding_verwijder IS NULL)
|
||
mld_melding_plaats,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 13 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_opzichter,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_soort,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 25 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_typering,
|
||
(SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = x.mld_opdr_key AND ko.mld_kenmerk_key = 26 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
mld_opdr_afspraak
|
||
FROM (SELECT ABS (TO_DATE ('1900-01-01', 'YYYY-MM-DD') - tr.fac_tracking_datum)
|
||
HIDE_F_SORT,
|
||
p_woco.prs_afdeling_key,
|
||
tr.fac_tracking_datum,
|
||
o.mld_opdr_omschrijving,
|
||
COALESCE (tr.fac_tracking_oms, LCL.L ('lcl_mld_is_' || LOWER (fac_srtnotificatie_code), 1))
|
||
mld_opdr_track_omschrijving,
|
||
tr.fac_tracking_refkey
|
||
mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
marnr,
|
||
o.mld_opdr_id,
|
||
lev.prs_bedrijf_naam,
|
||
m.mld_melding_key
|
||
FROM fac_tracking tr,
|
||
fac_srtnotificatie str,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
prs_perslid p_woco,
|
||
mar_v_leverancier_api_perslid lev
|
||
WHERE tr.fac_tracking_refkey = o.mld_opdr_key
|
||
AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
|
||
AND str.fac_srtnotificatie_code <> 'MLDNOT' -- beetje dubbelop
|
||
AND str.fac_srtnotificatie_xmlnode IN ('opdracht')
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = p_woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT ABS (TO_DATE ('1900-01-01', 'YYYY-MM-DD') - tr.fac_tracking_datum)
|
||
HIDE_F_SORT,
|
||
p_woco.prs_afdeling_key,
|
||
tr.fac_tracking_datum,
|
||
o.mld_opdr_omschrijving,
|
||
COALESCE (tr.fac_tracking_oms, LCL.L ('lcl_fin_is_' || LOWER (fac_srtnotificatie_code), 1))
|
||
mld_opdr_track_omschrijving,
|
||
o.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|
||
marnr,
|
||
o.mld_opdr_id,
|
||
lev.prs_bedrijf_naam,
|
||
m.mld_melding_key
|
||
FROM fac_tracking tr,
|
||
fac_srtnotificatie str,
|
||
fin_factuur f,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
prs_perslid p_woco,
|
||
mar_v_leverancier_api_perslid lev
|
||
WHERE tr.fac_tracking_refkey = f.fin_factuur_key
|
||
AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
|
||
AND str.fac_srtnotificatie_code <> 'FINNOT' -- beetje dubbelop
|
||
AND str.fac_srtnotificatie_xmlnode IN ('factuur')
|
||
AND f.mld_opdr_key = o.mld_opdr_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = p_woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key) x
|
||
WHERE x.mld_opdr_track_omschrijving IS NOT NULL;
|
||
|
||
|
||
|
||
-- MARX#57931: Abonnement Mareon Factuurverwerking (UBL/SALES/PDF)
|
||
|
||
CREATE OR REPLACE VIEW marx_v_mld_facturen_2_woco
|
||
(
|
||
fclt_3d_afdeling_key,
|
||
prs_perslid_key,
|
||
prs_woco_key,
|
||
prs_woco_naam,
|
||
fin_factuur_key,
|
||
fin_factuur_nr,
|
||
fin_factuur_datum,
|
||
fin_factuur_upload_bestand,
|
||
fin_factuur_aanmaak,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_totaal,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_statuses_omschr,
|
||
fin_factuur_bron,
|
||
fin_factuur_ubl_verwerking,
|
||
fin_factuur_mareon_module,
|
||
fin_factuur_mareon_tarief,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_erp_error
|
||
)
|
||
AS
|
||
SELECT DISTINCT
|
||
p.prs_afdeling_key,
|
||
woco.prs_perslid_key,
|
||
woco.prs_bedrijf_key,
|
||
woco.prs_bedrijf_naam,
|
||
f.fin_factuur_key,
|
||
f.fin_factuur_nr,
|
||
f.fin_factuur_datum,
|
||
fbu.fin_factuur_upload_bestand,
|
||
fac.gettrackingdate ('FINNEW', f.fin_factuur_key),
|
||
b_o.prs_bedrijf_key
|
||
prs_bedrijf_key,
|
||
b_o.prs_bedrijf_naam
|
||
prs_bedrijf_naam,
|
||
(SELECT fin_factuur_naam_lev
|
||
FROM mar_v_factuur_naam_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_o.prs_bedrijf_bezoek_adres
|
||
prs_bedrijf_bezoek_adres,
|
||
b_o.prs_bedrijf_bezoek_postcode
|
||
prs_bedrijf_bezoek_postcode,
|
||
b_o.prs_bedrijf_bezoek_plaats
|
||
prs_bedrijf_bezoek_plaats,
|
||
COALESCE (o.mld_opdr_id, fopdr.fin_factuur_opdnr),
|
||
f.fin_factuur_totaal,
|
||
f.fin_factuur_gbedrag,
|
||
NULL
|
||
bes_opdr_key,
|
||
o.mld_opdr_key,
|
||
o.mld_opdr_id,
|
||
o.mld_opdr_ordernr,
|
||
NULL
|
||
cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
fs.fin_factuur_statuses_omschr,
|
||
f.fin_factuur_bron,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 19 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
'Mareon Portaal'
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 'Mareon E-invoicing',
|
||
'2', 'Mareon Factuurscanning',
|
||
'Mareon Premium')
|
||
END,
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
0
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', COALESCE (
|
||
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 45
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_link_key = woco.prs_bedrijf_key),
|
||
(SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 26)
|
||
),
|
||
'2', COALESCE (
|
||
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 63
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_link_key = woco.prs_bedrijf_key),
|
||
(SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 27)
|
||
),
|
||
0)
|
||
END,
|
||
fin_factuur_opmerking,
|
||
(SELECT t.fac_tracking_oms
|
||
FROM fac_tracking t, fac_srtnotificatie sn
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST04'
|
||
AND f.fin_factuur_statuses_key <> 7)
|
||
FROM fin_factuur f,
|
||
fin_factuur_statuses fs,
|
||
mar_v_factuur_bestand_upload fbu,
|
||
mar_v_factuur_externe_opdnr fopdr,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
prs_perslid p,
|
||
mar_v_woco_perslid woco,
|
||
prs_bedrijf b_o
|
||
WHERE fs.fin_factuur_statuses_key = f.fin_factuur_statuses_key
|
||
AND f.fin_factuur_key = fbu.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fopdr.fin_factuur_key(+)
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND f.cnt_contract_key IS NULL
|
||
AND f.mld_opdr_key = o.mld_opdr_key
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND m.prs_perslid_key = p.prs_perslid_key
|
||
AND woco.prs_perslid_key = p.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key;
|
||
|
||
|
||
|
||
CREATE OR REPLACE VIEW marx_v_cnt_facturen_2_woco
|
||
(
|
||
fclt_3d_afdeling_key,
|
||
prs_perslid_key,
|
||
prs_woco_key,
|
||
prs_woco_naam,
|
||
fin_factuur_key,
|
||
fin_factuur_nr,
|
||
fin_factuur_datum,
|
||
fin_factuur_upload_bestand,
|
||
fin_factuur_aanmaak,
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_naam,
|
||
fin_bedrijf_naam,
|
||
prs_bedrijf_adres,
|
||
prs_bedrijf_postcode,
|
||
prs_bedrijf_plaats,
|
||
fin_factuur_ext_opdnr,
|
||
fin_factuur_totaal,
|
||
fin_factuur_g_ammount,
|
||
bes_opdr_key,
|
||
mld_opdr_key,
|
||
mld_opdr_id,
|
||
mld_opdr_ordernr,
|
||
cnt_contract_key,
|
||
fin_factuur_statuses_key,
|
||
fin_factuur_statuses_omschr,
|
||
fin_factuur_bron,
|
||
fin_factuur_ubl_verwerking,
|
||
fin_factuur_mareon_module,
|
||
fin_factuur_mareon_tarief,
|
||
fin_factuur_opmerking,
|
||
fin_factuur_erp_error
|
||
)
|
||
AS
|
||
SELECT DISTINCT
|
||
a.prs_afdeling_key,
|
||
woco.prs_perslid_key,
|
||
woco.prs_bedrijf_key,
|
||
woco.prs_bedrijf_naam,
|
||
f.fin_factuur_key,
|
||
f.fin_factuur_nr,
|
||
f.fin_factuur_datum,
|
||
fbu.fin_factuur_upload_bestand,
|
||
fac.gettrackingdate ('FINNEW', f.fin_factuur_key),
|
||
b_c.prs_bedrijf_key
|
||
prs_bedrijf_key,
|
||
b_c.prs_bedrijf_naam
|
||
prs_bedrijf_naam,
|
||
(SELECT fin_factuur_naam_lev
|
||
FROM mar_v_factuur_naam_lev
|
||
WHERE fin_factuur_key = f.fin_factuur_key),
|
||
b_c.prs_bedrijf_bezoek_adres
|
||
prs_bedrijf_bezoek_adres,
|
||
b_c.prs_bedrijf_bezoek_postcode
|
||
prs_bedrijf_bezoek_postcode,
|
||
b_c.prs_bedrijf_bezoek_plaats
|
||
prs_bedrijf_bezoek_plaats,
|
||
fopdr.fin_factuur_opdnr,
|
||
f.fin_factuur_totaal,
|
||
f.fin_factuur_gbedrag,
|
||
NULL
|
||
bes_opdr_key,
|
||
NULL
|
||
mld_opdr_key,
|
||
NULL
|
||
mld_opdr_id,
|
||
NULL
|
||
mld_opdr_ordernr,
|
||
c.cnt_contract_key,
|
||
f.fin_factuur_statuses_key,
|
||
fs.fin_factuur_statuses_omschr,
|
||
f.fin_factuur_bron,
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key AND kf.fin_kenmerk_key = 19 AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
'Mareon Portaal'
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 'Mareon E-invoicing',
|
||
'2', 'Mareon Factuurscanning',
|
||
'Mareon Premium')
|
||
END,
|
||
CASE
|
||
WHEN fin_factuur_bron = 0
|
||
THEN
|
||
0
|
||
WHEN fin_factuur_bron = 1
|
||
THEN
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', COALESCE (
|
||
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 45
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_link_key = woco.prs_bedrijf_key),
|
||
(SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 26)
|
||
),
|
||
'2', COALESCE (
|
||
(SELECT fac.safe_to_number (prs_kenmerklink_waarde)
|
||
FROM prs_kenmerklink
|
||
WHERE prs_kenmerk_key = 63
|
||
AND prs_kenmerklink_niveau = 'B'
|
||
AND prs_link_key = woco.prs_bedrijf_key),
|
||
(SELECT fac.safe_to_number (fac_usrdata_omschr) FROM fac_usrdata WHERE fac_usrdata_key = 27)
|
||
),
|
||
0)
|
||
END,
|
||
fin_factuur_opmerking,
|
||
(SELECT t.fac_tracking_oms
|
||
FROM fac_tracking t, fac_srtnotificatie sn
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST04'
|
||
AND f.fin_factuur_statuses_key <> 7)
|
||
FROM fin_factuur f,
|
||
fin_factuur_statuses fs,
|
||
mar_v_factuur_bestand_upload fbu,
|
||
mar_v_factuur_externe_opdnr fopdr,
|
||
cnt_contract c,
|
||
prs_bedrijf b_c,
|
||
prs_afdeling a,
|
||
mar_v_woco_perslid woco
|
||
WHERE fs.fin_factuur_statuses_key = f.fin_factuur_statuses_key
|
||
AND f.fin_factuur_key = fbu.fin_factuur_key(+)
|
||
AND f.fin_factuur_key = fopdr.fin_factuur_key(+)
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND f.mld_opdr_key IS NULL
|
||
AND f.bes_bestelopdr_key IS NULL
|
||
AND f.cnt_contract_key = c.cnt_contract_key
|
||
AND c.prs_afdeling_key_eig = a.prs_afdeling_key
|
||
AND a.prs_bedrijf_key = woco.prs_bedrijf_key
|
||
AND woco.prs_perslid_apikey(+) IS NOT NULL
|
||
AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key;
|
||
|
||
CREATE OR REPLACE VIEW marx_v_facturen_2_woco
|
||
AS
|
||
SELECT * FROM marx_v_mld_facturen_2_woco
|
||
UNION ALL
|
||
SELECT * FROM marx_v_cnt_facturen_2_woco;
|
||
|
||
-----------------------------------------------------------------------------------------------------------------------------------------------------------
|
||
-- MARX#58489: Incomplete facturen notificeren
|
||
-- Noti-job voor naar woco: incomplete PDF scan.
|
||
-- Alle facturen waarvcan nog geen noti FININF via job is gestuurd, die via PDF scanning max. x (x=5) dagen geleden (oude historie gaan we niet alsnog mailen) zijn toegevoegd en
|
||
-- waarvan de status incompleet is, en wel een PDF-bestand hebben.
|
||
-- PDF zelf: kf.fin_kenmerk_key = 11 --> geuploade (PDF)bestand bij factuur, kenmerkwaarde bevat de naam van het bestand.
|
||
-- via PDF scan?: kf.fin_kenmerk_key = 19 --> Via module Mareon factuurverwerking (UBL), Uitleg: 0/leeg = geimporteerde Premium factuur, 1 = geimporteerde factuur vanuit Mareon E-invoicing, 2 = PDF scan gevolgd door optie 1 (Mareon E-invoicing)
|
||
-- De noti wordt gemaild naar flex-prop prs_kenmerk_key = 39, als deze niet gevuld is wordt er geen noti gestuurd (maw dit mailadres moet wel gevuld worden voo juiste/gewenste werking).
|
||
|
||
-- MARX#64495: XML facturen ook uitvalmail naar de opdrachtgever (woco), dus niet alleen PDF facturen, maar ook UBL/XMl facturen.
|
||
-- MARX#71668: Uitval facturen: mogelijkheid van meerdere uitvalmailadressen
|
||
-- MARX#69028 Uitvalfacturen toch naar het prefacturen register: geen noti mail wanneer opdrachtgever de incomplete facturen wil ontvangen
|
||
|
||
CREATE OR REPLACE VIEW marx_v_noti_woco_incompl_fact
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT NULL
|
||
sender,
|
||
NULL
|
||
receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
f.fin_factuur_key,
|
||
NULL,
|
||
NULL xsender,
|
||
COALESCE(k2.prs_kenmerklink_waarde, kl.prs_kenmerklink_waarde) xreceiver,
|
||
NULL,
|
||
DECODE(kf2.fin_kenmerkfactuur_waarde, NULL, NULL,
|
||
'FIN/F'
|
||
|| SUBSTR (LPAD (TO_CHAR (f.fin_factuur_key), 7, '0'), 1, 4)
|
||
|| '___/F'
|
||
|| TO_CHAR (f.fin_factuur_key)
|
||
|| '/'
|
||
|| TO_CHAR (kf2.fin_kenmerk_key)
|
||
|| '/'
|
||
|| kf2.fin_kenmerkfactuur_waarde)
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur kf,
|
||
fin_kenmerkfactuur kf2,
|
||
fin_kenmerkfactuur kf3,
|
||
fac_srtnotificatie sn,
|
||
cnt_contract c,
|
||
prs_afdeling a,
|
||
prs_kenmerklink kl,
|
||
prs_bedrijf lev,
|
||
prs_kenmerklink k2,
|
||
mar_v_bedrijf_uitval_versturen uitv
|
||
WHERE sn.fac_srtnotificatie_code = 'CUST01'
|
||
AND c.cnt_contract_key = COALESCE(f.cnt_contract_key, fac.safe_to_number(kf3.fin_kenmerkfactuur_waarde))
|
||
AND a.prs_afdeling_key = c.prs_afdeling_key_eig
|
||
AND kl.prs_kenmerk_key(+) = 39
|
||
AND kl.prs_kenmerklink_niveau(+) = 'B'
|
||
AND kl.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND kl.prs_link_key(+) = a.prs_bedrijf_key
|
||
AND c.cnt_prs_bedrijf_key = lev.prs_bedrijf_key
|
||
AND lev.prs_bedrijf_verwijder is null
|
||
AND k2.prs_kenmerk_key(+) = 39
|
||
AND k2.prs_kenmerklink_niveau(+) = 'B'
|
||
AND k2.prs_kenmerklink_verwijder(+) IS NULL
|
||
AND k2.prs_link_key(+) = lev.prs_bedrijf_key
|
||
AND COALESCE(kl.prs_kenmerklink_waarde, k2.prs_kenmerklink_waarde) IS NOT NULL
|
||
AND uitv.prs_bedrijf_key = a.prs_bedrijf_key
|
||
AND uitv.prs_bedrijf_uitval_versturen = 0
|
||
AND f.fin_factuur_statuses_key = 3
|
||
AND fin_factuur_bron = 1
|
||
AND kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_waarde IN ('1', '2')
|
||
AND kf2.fin_factuur_key(+) = f.fin_factuur_key
|
||
AND kf2.fin_kenmerk_key(+) = 11
|
||
AND kf3.fin_factuur_key(+) = f.fin_factuur_key
|
||
AND kf3.fin_kenmerk_key(+) = 23
|
||
AND kf3.fin_kenmerkfactuur_verwijder(+) IS NULL
|
||
AND fac.gettrackingdate ('FINNEW', f.fin_factuur_key) > SYSDATE - 5
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_tracking t
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'FINTRK'));
|
||
|
||
-- Alternatief is om via de tijd de nieuwe gevallen te querien die genotified moeten worden,
|
||
-- echter minder sterk/robuust in geval van uitval, maar ook wanneer gen-notify niet meer 24u zou gaan draaien (agv beleid / keuze in toekomst om snachts bv uit te zetten)),
|
||
-- dan mis je mogelijk wat. In accept draait die iig (dd juli 2019) savonds + snachts niet (itt tot productie), vast met reden!?
|
||
-- Daarom er (nu) niet voor gekozen om via tijd de query te laten lopen:
|
||
-- AND fac.gettrackingdate('FINNEW',f.fin_factuur_key) > (SELECT job.fac_srtnotificatie_job_nextrun - (job.fac_srtnotificatie_job_interval / 24) FROM fac_srtnotificatie_job job
|
||
-- Maar via robuuste methode via aanwezigheid van soort notificatie FININF (nog beter, via CUST01).
|
||
|
||
-- Noti-job voor naar BCT: missende PDF's.
|
||
-- Alle facturen waarvcan nog geen noti FININF via job is gestuurd, die via PDF scanning max. x (x=5) dagen geleden (oude historie gaan we niet alsnog mailen) zijn toegevoegd en
|
||
-- waarvan de status incompleet is, en GEEN een PDF-bestand hebben.
|
||
|
||
CREATE OR REPLACE VIEW marx_v_noti_bct_incompl_fact
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT NULL sender,
|
||
NULL receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
f.fin_factuur_key,
|
||
NULL,
|
||
NULL xsender,
|
||
ud.fac_usrdata_omschr xreceiver,
|
||
NULL,
|
||
NULL
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur kf,
|
||
fac_srtnotificatie sn,
|
||
fac_usrdata ud
|
||
WHERE sn.fac_srtnotificatie_code = 'CUST02'
|
||
AND ud.fac_usrtab_key = 1
|
||
AND ud.fac_usrdata_key = 5
|
||
AND ud.fac_usrdata_omschr IS NOT NULL
|
||
AND (f.fin_factuur_statuses_key = 2 OR f.fin_factuur_statuses_key = 3)
|
||
AND fin_factuur_bron = 1
|
||
AND kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_waarde = 2
|
||
AND fac.gettrackingdate ('FINNEW', f.fin_factuur_key) > SYSDATE - 5
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fin_kenmerkfactuur kf2
|
||
WHERE kf2.fin_factuur_key = f.fin_factuur_key AND kf2.fin_kenmerk_key = 11)
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_tracking t
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'FINTRK'));
|
||
|
||
|
||
-- MARX#57761: Factuur-verwerking met fout(en) in XML terugkoppelen (notify) naar leverancier
|
||
-- Noti-job incomplete facturen voor naar Leverancier: status = 3 (incompleet)
|
||
-- Alle facturen waarvcan nog geen noti FININF via job is gestuurd, die via Premium of Mareon factuurverwerking (UBL) max. x (x=5) dagen geleden (oude historie gaan we niet alsnog mailen) zijn toegevoegd en
|
||
-- waarvan de status incompleet is, worden gestuurd (als CUST03 notificatie) naar de mailadres waarmee de (API)perslid van de leverancier inlogt.
|
||
-- MARX#69028 Uitvalfacturen toch naar het prefacturen register: geen noti mail wanneer opdrachtgever de incomplete facturen wil ontvangen
|
||
|
||
CREATE OR REPLACE VIEW marx_v_noti_lev_incompl_fact
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT NULL
|
||
sender,
|
||
lp.prs_perslid_key
|
||
receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
f.fin_factuur_key,
|
||
NULL,
|
||
NULL
|
||
xsender,
|
||
NULL
|
||
xreceiver,
|
||
NULL,
|
||
DECODE (
|
||
kf2.fin_kenmerk_key,
|
||
NULL, NULL,
|
||
'FIN/F'
|
||
|| SUBSTR (LPAD (TO_CHAR (f.fin_factuur_key), 7, '0'), 1, 4)
|
||
|| '___/F'
|
||
|| TO_CHAR (f.fin_factuur_key)
|
||
|| '/'
|
||
|| TO_CHAR (kf2.fin_kenmerk_key)
|
||
|| '/'
|
||
|| kf2.fin_kenmerkfactuur_waarde)
|
||
FROM fin_factuur f,
|
||
fin_kenmerkfactuur kf,
|
||
fin_kenmerkfactuur kf2,
|
||
fac_srtnotificatie sn,
|
||
mld_opdr o,
|
||
mld_melding m,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_leverancier_api_perslid lp,
|
||
mar_v_bedrijf_uitval_versturen uitv
|
||
WHERE sn.fac_srtnotificatie_code = 'CUST03'
|
||
AND f.fin_factuur_statuses_key = 3
|
||
AND o.mld_melding_key = m.mld_melding_key(+)
|
||
AND m.prs_perslid_key = woco.prs_perslid_key (+)
|
||
AND woco.prs_bedrijf_key = uitv.prs_bedrijf_key (+)
|
||
AND uitv.prs_bedrijf_uitval_versturen = 0
|
||
AND fin_factuur_bron = 1
|
||
AND f.mld_opdr_key = o.mld_opdr_key(+)
|
||
AND o.mld_uitvoerende_keys = lp.prs_bedrijf_key(+)
|
||
AND kf.fin_factuur_key(+) = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key(+) = 19
|
||
AND COALESCE (kf.fin_kenmerkfactuur_waarde, '0') IN ('0', '1')
|
||
AND kf2.fin_factuur_key(+) = f.fin_factuur_key
|
||
AND kf2.fin_kenmerk_key(+) = 11
|
||
AND kf2.fin_kenmerkfactuur_waarde(+) IS NOT NULL
|
||
AND fac.gettrackingdate ('FINNEW', f.fin_factuur_key) > SYSDATE - 5
|
||
AND f.fin_factuur_verwijder IS NULL
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM fac_tracking t
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie sn
|
||
WHERE sn.fac_srtnotificatie_code = 'FINTRK'));
|
||
|
||
|
||
-- MARX#83424 Mareon signaal functies
|
||
|
||
-- Reminder view: opdracht is nog niet geaccepteerd
|
||
CREATE OR REPLACE VIEW marx_v_noti_lev_acc_opdr
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT
|
||
NULL sender,
|
||
lev.prs_perslid_key receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
o.mld_opdr_key,
|
||
NULL xkey,
|
||
NULL xsender,
|
||
NULL xreceiver,
|
||
NULL xmobile,
|
||
NULL attachments
|
||
FROM mld_opdr o,
|
||
mar_v_woco_perslid woco,
|
||
prs_kenmerklink kl,
|
||
mar_v_leverancier_api_perslid lev,
|
||
fac_srtnotificatie sn,
|
||
prs_kenmerklink kl_datum
|
||
WHERE fac.safe_to_date(kl_datum.PRS_KENMERKLINK_WAARDE, 'dd-mm-yyyy') <= (SELECT MAX(fac_tracking_datum)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'ORDNEW'))
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= ( SELECT MAX(fac_tracking_datum)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'ORDNEW'))
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= ( SELECT COALESCE(MAX(fac_tracking_datum), SYSDATE - fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE))
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = sn.fac_srtnotificatie_key)
|
||
AND to_char(sysdate,'D') NOT IN (1,7)
|
||
AND mld_statusopdr_key = 5
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND kl.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl.PRS_KENMERK_KEY = 66
|
||
AND kl_datum.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl_datum.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl_datum.PRS_KENMERK_KEY = 69
|
||
AND fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE) > 0
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST06';
|
||
|
||
|
||
|
||
-- Reminder view: opdracht is nog niet gepland
|
||
CREATE OR REPLACE VIEW marx_v_noti_lev_afh_opdr
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT
|
||
NULL sender,
|
||
lev.prs_perslid_key receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
o.mld_opdr_key,
|
||
NULL xkey,
|
||
NULL xsender,
|
||
NULL xreceiver,
|
||
NULL xmobile,
|
||
NULL attachments
|
||
FROM mld_opdr o,
|
||
mar_v_woco_perslid woco,
|
||
prs_kenmerklink kl,
|
||
mar_v_leverancier_api_perslid lev,
|
||
fac_srtnotificatie sn,
|
||
prs_kenmerklink kl_datum
|
||
WHERE fac.safe_to_date(kl_datum.PRS_KENMERKLINK_WAARDE, 'dd-mm-yyyy') <= (SELECT MAX(fac_tracking_datum)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'ORDNEW'))
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= ( SELECT MAX(fac_tracking_datum)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'ORDNEW'))
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= ( SELECT COALESCE(MAX(fac_tracking_datum), SYSDATE - fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE))
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = sn.fac_srtnotificatie_key)
|
||
AND to_char(sysdate,'D') NOT IN (1,7)
|
||
AND mld_statusopdr_key IN (5, 8)
|
||
AND mld_opdr_plandatum IS NULL
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND kl.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl.PRS_KENMERK_KEY = 67
|
||
AND kl_datum.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl_datum.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl_datum.PRS_KENMERK_KEY = 69
|
||
AND fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE) > 0
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST07';
|
||
|
||
|
||
|
||
-- Reminder view: opdracht is nog niet gereed gemeld
|
||
CREATE OR REPLACE VIEW marx_v_noti_lev_ger_opdr
|
||
(
|
||
sender,
|
||
receiver,
|
||
text,
|
||
code,
|
||
key,
|
||
xkey,
|
||
xsender,
|
||
xemail,
|
||
xmobile,
|
||
attachments
|
||
)
|
||
AS
|
||
SELECT
|
||
NULL sender,
|
||
lev.prs_perslid_key receiver,
|
||
sn.fac_srtnotificatie_oms,
|
||
sn.fac_srtnotificatie_code,
|
||
o.mld_opdr_key,
|
||
NULL xkey,
|
||
NULL xsender,
|
||
NULL xreceiver,
|
||
NULL xmobile,
|
||
NULL attachments
|
||
FROM mld_opdr o,
|
||
mar_v_woco_perslid woco,
|
||
prs_kenmerklink kl,
|
||
mar_v_leverancier_api_perslid lev,
|
||
fac_srtnotificatie sn,
|
||
prs_kenmerklink kl_datum
|
||
WHERE fac.safe_to_date(kl_datum.PRS_KENMERKLINK_WAARDE, 'dd-mm-yyyy') <= (SELECT MAX(fac_tracking_datum)
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie WHERE fac_srtnotificatie_code = 'ORDNEW'))
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= o.mld_opdr_einddatum
|
||
AND SYSDATE - (fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE)/24) >= ( SELECT COALESCE(MAX(fac_tracking_datum), SYSDATE - fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE))
|
||
FROM fac_tracking
|
||
WHERE fac_tracking_refkey = o.mld_opdr_key
|
||
AND fac_srtnotificatie_key = sn.fac_srtnotificatie_key)
|
||
AND to_char(sysdate,'D') NOT IN (1,7)
|
||
AND mld_statusopdr_key IN (5, 8)
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND kl.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl.PRS_KENMERK_KEY = 68
|
||
AND kl_datum.PRS_LINK_KEY = woco.PRS_BEDRIJF_KEY
|
||
AND kl_datum.PRS_KENMERKLINK_NIVEAU = 'B'
|
||
AND kl_datum.PRS_KENMERK_KEY = 69
|
||
AND fac.safe_to_number(kl.PRS_KENMERKLINK_WAARDE) > 0
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND sn.fac_srtnotificatie_code = 'CUST08';
|
||
|
||
|
||
-- MARX#73170 Rapport "BCT Factuur queue" geeft "to determine columns for report"-Error
|
||
|
||
CREATE OR REPLACE VIEW mar_v_factuur_queue
|
||
AS
|
||
SELECT b.prs_bedrijf_naam, f.*,
|
||
ROUND(24 * 60 * 60 * (f.mar_factuur_queue_replied - f.mar_factuur_queue_sent)) sec_ecapt,
|
||
ROUND(24 * 60 * (f.mar_factuur_queue_replied - f.mar_factuur_queue_sent),2) minuten_ecapt,
|
||
ROUND(24 * (f.mar_factuur_queue_replied - f.mar_factuur_queue_sent),2) uur_ecapt,
|
||
fac.gettrackingdate ('FINVER', f.fin_factuur_key) datum_verwerkt_opdrgvr,
|
||
ROUND(24 * 60 * 60 * (fac.gettrackingdate ('FINVER', f.fin_factuur_key) - f.mar_factuur_queue_sent)) sec_mareon,
|
||
ROUND(24 * 60 * (fac.gettrackingdate ('FINVER', f.fin_factuur_key) - f.mar_factuur_queue_sent),2) minuten_mareon,
|
||
ROUND(24 * (fac.gettrackingdate ('FINVER', f.fin_factuur_key) - f.mar_factuur_queue_sent),2) uur_mareon,
|
||
CASE WHEN fac.gettrackingdate ('FINVER', f.fin_factuur_key) IS NOT NULL THEN 4
|
||
WHEN EXISTS (SELECT 'x'
|
||
FROM fac_tracking t, fin_factuur ff
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND ff.fin_factuur_key = f.fin_factuur_key
|
||
AND ff.fin_factuur_statuses_key = 3
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key FROM fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'FINTRK')) THEN 5
|
||
WHEN mar_factuur_queue_replied IS NOT NULL THEN 3
|
||
WHEN mar_factuur_queue_sent IS NOT NULL THEN 2
|
||
ELSE 1
|
||
END mar_factuur_queue_status,
|
||
CASE WHEN fac.gettrackingdate ('FINVER', f.fin_factuur_key) IS NOT NULL THEN '4/4: In ERP opdrachtgever'
|
||
WHEN EXISTS (SELECT 'x'
|
||
FROM fac_tracking t, fin_factuur ff
|
||
WHERE t.fac_tracking_refkey = f.fin_factuur_key
|
||
AND ff.fin_factuur_key = f.fin_factuur_key
|
||
AND ff.fin_factuur_statuses_key = 3
|
||
AND t.fac_srtnotificatie_key = (SELECT sn.fac_srtnotificatie_key FROM fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code = 'FINTRK')) THEN '4/4: Uitvalmail naar opdrachtgever'
|
||
WHEN mar_factuur_queue_replied IS NOT NULL THEN '3/4: In Mareon'
|
||
WHEN mar_factuur_queue_sent IS NOT NULL THEN '2/4: In Scanner'
|
||
ELSE '1/4: In Mareon'
|
||
END mar_factuur_queue_status_oms,
|
||
DECODE (
|
||
(SELECT fin_kenmerkfactuur_waarde
|
||
FROM fin_kenmerkfactuur kf
|
||
WHERE kf.fin_factuur_key = f.fin_factuur_key
|
||
AND kf.fin_kenmerk_key = 19
|
||
AND kf.fin_kenmerkfactuur_verwijder IS NULL),
|
||
'1', 2,
|
||
'2', 3,
|
||
NULL) mar_factuur_brontype
|
||
FROM mar_factuur_queue f, prs_bedrijf b
|
||
WHERE f.prs_bedrijf_key = b.prs_bedrijf_key (+);
|
||
|
||
-- MARX#73521 Rapport "BCT Factuur queue" ook voor klant en eenvoudig naar fin_factuur
|
||
|
||
CREATE OR REPLACE VIEW mar_v_rap_factuur_queue_4_woco
|
||
AS
|
||
SELECT a.prs_afdeling_key fclt_3d_afdeling_key, f.*,
|
||
CASE WHEN sec_ecapt IS NOT NULL
|
||
THEN LPAD(FLOOR(sec_ecapt/(3600)),2,'0') || 'u:' || LPAD(FLOOR(MOD(sec_ecapt,3600)/60),2,'0') || 'm:' || LPAD(MOD(MOD(sec_ecapt,3600),60),2,'0') || 's'
|
||
ELSE NULL
|
||
END hhmmss_ecapt,
|
||
CASE WHEN sec_mareon IS NOT NULL
|
||
THEN LPAD(FLOOR(sec_mareon/(3600)),2,'0') || 'u:' || LPAD(FLOOR(MOD(sec_mareon,3600)/60),2,'0') || 'm:' || LPAD(MOD(MOD(sec_mareon,3600),60),2,'0') || 's'
|
||
ELSE NULL
|
||
END hhmmss_mareon
|
||
FROM mar_v_factuur_queue f, prs_afdeling a
|
||
WHERE f.prs_bedrijf_key = a.prs_bedrijf_key (+)
|
||
AND f.mar_factuur_queue_aanmaak >= SYSDATE - (SELECT COALESCE(fac.safe_to_number(fac_usrdata_omschr),30) FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_key = 41
|
||
AND fac_usrdata_code = '$MAX_DAYS_EXTERNAL_PEEK_INVOICE_QUEUE');
|
||
|
||
-- MARX#73521 Rapport "BCT Factuur queue" ook voor klant en eenvoudig naar fin_factuur.
|
||
-- We bieden een API (http://marx.facws001.sg.nl/branch20222/api2/reports/?rapcode=MARX_FACTUURSCANNING_QUEUE waarmee extern, vanuit ERP systeem opdrachtgever (bv T365),
|
||
-- de status van de factuurscanning-queue van de afgelopen 30 dagen (maand) runtime kan worden opgevraagd (om aldaar tonen).
|
||
CREATE OR REPLACE VIEW mar_v_api_factuur_queue_4_woco
|
||
AS
|
||
SELECT w.prs_perslid_key FCLT_3D_USER_KEY, f.*,
|
||
CASE WHEN sec_ecapt IS NOT NULL
|
||
THEN LPAD(FLOOR(sec_ecapt/(3600)),2,'0') || 'u:' || LPAD(FLOOR(MOD(sec_ecapt,3600)/60),2,'0') || 'm:' || LPAD(MOD(MOD(sec_ecapt,3600),60),2,'0') || 's'
|
||
ELSE NULL
|
||
END hhmmss_ecapt,
|
||
CASE WHEN sec_mareon IS NOT NULL
|
||
THEN LPAD(FLOOR(sec_mareon/(3600)),2,'0') || 'u:' || LPAD(FLOOR(MOD(sec_mareon,3600)/60),2,'0') || 'm:' || LPAD(MOD(MOD(sec_mareon,3600),60),2,'0') || 's'
|
||
ELSE NULL
|
||
END hhmmss_mareon
|
||
FROM mar_v_factuur_queue f, mar_v_woco_perslid w
|
||
WHERE f.prs_bedrijf_key = w.prs_bedrijf_key
|
||
AND w.prs_perslid_apikey IS NOT NULL
|
||
AND f.mar_factuur_queue_aanmaak >= SYSDATE - (SELECT COALESCE(fac.safe_to_number(fac_usrdata_omschr),30) FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_key = 41
|
||
AND fac_usrdata_code = '$MAX_DAYS_EXTERNAL_PEEK_INVOICE_QUEUE');
|
||
|
||
-- MARX#52342: Rapport met leveranciersgegevens per woco
|
||
CREATE OR REPLACE VIEW mar_v_lev_4_woco
|
||
(
|
||
prs_bedrijf_key,
|
||
prs_bedrijf_luc,
|
||
fclt_3d_afdeling_key,
|
||
woco_prs_bedrijf_naam,
|
||
fclt_f_leverancier_naam,
|
||
leverancier_gln,
|
||
leverancier_bezoekadres,
|
||
leverancier_bezoekpostcode,
|
||
leverancier_bezoekplaats,
|
||
leverancier_bezoekland,
|
||
leverancier_postadres,
|
||
leverancier_postpostcode,
|
||
leverancier_postplaats,
|
||
leverancier_postland,
|
||
leverancier_telefoon,
|
||
leverancier_fax,
|
||
leverancier_email,
|
||
leverancier_bankreknr,
|
||
leverancier_g_bankreknr,
|
||
leverancier_kvknr,
|
||
leverancier_btwnr,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
leverancier_externe_id,
|
||
leverancier_login,
|
||
prs_bedrijf_bedrijf_status,
|
||
leverancier_premium
|
||
)
|
||
AS
|
||
SELECT b.prs_bedrijf_key,
|
||
'U',
|
||
p.prs_afdeling_key,
|
||
w_prs_bedrijf_naam,
|
||
l_prs_bedrijf_naam,
|
||
flex1.prs_leverancier_nr,
|
||
b.prs_bedrijf_bezoek_adres,
|
||
b.prs_bedrijf_bezoek_postcode,
|
||
b.prs_bedrijf_bezoek_plaats,
|
||
b.prs_bedrijf_bezoek_land,
|
||
b.prs_bedrijf_post_adres,
|
||
b.prs_bedrijf_post_postcode,
|
||
b.prs_bedrijf_post_plaats,
|
||
b.prs_bedrijf_post_land,
|
||
b.prs_bedrijf_telefoon,
|
||
b.prs_bedrijf_fax,
|
||
b.prs_bedrijf_email,
|
||
COALESCE(prs_bedrijf_bedrijf_account1, flex1.prs_bedrijf_bankreknr),
|
||
COALESCE(prs_bedrijf_bedrijf_account2, flex1.prs_bedrijf_g_bankreknr),
|
||
flex2.prs_bedrijf_kvknr,
|
||
flex2.prs_bedrijf_btwnr,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
l_ax_supplier_id,
|
||
l_prs_perslid_oslogin,
|
||
prs_bedrijf_bedrijf_status,
|
||
DECODE (prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
|
||
FROM mar_v_woco_x_lev,
|
||
prs_perslid p,
|
||
prs_bedrijf b,
|
||
mar_v_bedrijf_bankrek_nr flex1,
|
||
mar_v_bedrijf_kvk_btw_nr flex2
|
||
WHERE p.prs_perslid_key = w_prs_perslid_key
|
||
AND l_prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex1.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex2.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT b.prs_bedrijf_key,
|
||
'L',
|
||
p.prs_afdeling_key,
|
||
w_prs_bedrijf_naam,
|
||
l_prs_bedrijf_naam,
|
||
flex1.prs_leverancier_nr,
|
||
b.prs_bedrijf_bezoek_adres,
|
||
b.prs_bedrijf_bezoek_postcode,
|
||
b.prs_bedrijf_bezoek_plaats,
|
||
b.prs_bedrijf_bezoek_land,
|
||
b.prs_bedrijf_post_adres,
|
||
b.prs_bedrijf_post_postcode,
|
||
b.prs_bedrijf_post_plaats,
|
||
b.prs_bedrijf_post_land,
|
||
b.prs_bedrijf_telefoon,
|
||
b.prs_bedrijf_fax,
|
||
b.prs_bedrijf_email,
|
||
COALESCE(prs_bedrijf_bedrijf_account1, flex1.prs_bedrijf_bankreknr),
|
||
COALESCE(prs_bedrijf_bedrijf_account2, flex1.prs_bedrijf_g_bankreknr),
|
||
flex2.prs_bedrijf_kvknr,
|
||
flex2.prs_bedrijf_btwnr,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
l_ax_supplier_id,
|
||
l_prs_perslid_oslogin,
|
||
prs_bedrijf_bedrijf_status,
|
||
DECODE (prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
|
||
FROM mar_v_woco_x_grooth,
|
||
prs_perslid p,
|
||
prs_bedrijf b,
|
||
mar_v_bedrijf_bankrek_nr flex1,
|
||
mar_v_bedrijf_kvk_btw_nr flex2
|
||
WHERE p.prs_perslid_key = w_prs_perslid_key
|
||
AND l_prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex1.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex2.prs_bedrijf_key
|
||
UNION ALL
|
||
SELECT b.prs_bedrijf_key,
|
||
'C',
|
||
p.prs_afdeling_key,
|
||
w_prs_bedrijf_naam,
|
||
l_prs_bedrijf_naam,
|
||
flex1.prs_leverancier_nr,
|
||
b.prs_bedrijf_bezoek_adres,
|
||
b.prs_bedrijf_bezoek_postcode,
|
||
b.prs_bedrijf_bezoek_plaats,
|
||
b.prs_bedrijf_bezoek_land,
|
||
b.prs_bedrijf_post_adres,
|
||
b.prs_bedrijf_post_postcode,
|
||
b.prs_bedrijf_post_plaats,
|
||
b.prs_bedrijf_post_land,
|
||
b.prs_bedrijf_telefoon,
|
||
b.prs_bedrijf_fax,
|
||
b.prs_bedrijf_email,
|
||
COALESCE(prs_bedrijf_bedrijf_account1, flex1.prs_bedrijf_bankreknr),
|
||
COALESCE(prs_bedrijf_bedrijf_account2, flex1.prs_bedrijf_g_bankreknr),
|
||
flex2.prs_bedrijf_kvknr,
|
||
flex2.prs_bedrijf_btwnr,
|
||
prs_bedrijf_bedrijf_btw_code,
|
||
prs_bedrijf_bedrijf_g_pct,
|
||
l_ax_supplier_id,
|
||
l_prs_perslid_oslogin,
|
||
prs_bedrijf_bedrijf_status,
|
||
DECODE (prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
|
||
FROM mar_v_woco_x_contractant,
|
||
prs_perslid p,
|
||
prs_bedrijf b,
|
||
mar_v_bedrijf_bankrek_nr flex1,
|
||
mar_v_bedrijf_kvk_btw_nr flex2
|
||
WHERE p.prs_perslid_key = w_prs_perslid_key
|
||
AND l_prs_bedrijf_key = b.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex1.prs_bedrijf_key
|
||
AND l_prs_bedrijf_key = flex2.prs_bedrijf_key;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_rap_lev_4_woco
|
||
AS SELECT * FROM mar_v_lev_4_woco;
|
||
|
||
--
|
||
|
||
CREATE OR REPLACE VIEW mar_v_public_deelnemers_OPN
|
||
(mareon_id,
|
||
opdrachtnemer,
|
||
gln,
|
||
prs_bedrijf_lucv,
|
||
vestigingsplaats,
|
||
mareonpremium,
|
||
bedrijfsprofiel,
|
||
mailadres,
|
||
webpagina,
|
||
bedrijfslogo
|
||
)
|
||
AS SELECT
|
||
prs_bedrijf_key mareon_id,
|
||
fclt_f_leverancier_naam leverancier,
|
||
CASE
|
||
WHEN LENGTH(leverancier_gln)=13 THEN leverancier_gln
|
||
END gln,
|
||
CASE
|
||
WHEN EXISTS (SELECT 'x' FROM prs_kenmerklink k1
|
||
WHERE k1.prs_link_key = prs_bedrijf_key
|
||
AND k1.prs_kenmerklink_niveau = 'B'
|
||
AND k1.prs_kenmerk_key = 46
|
||
AND k1.prs_kenmerklink_waarde = '1'
|
||
AND NOT EXISTS (SELECT 'x' FROM prs_kenmerklink k2 WHERE k1.prs_link_key = k2.prs_link_key AND k2.prs_kenmerklink_niveau = 'B' AND k2.prs_kenmerk_key = 47))
|
||
THEN 'V'
|
||
ELSE prs_bedrijf_luc
|
||
END prs_bedrijf_lucv,
|
||
COALESCE(MIN(leverancier_bezoekplaats),MIN(leverancier_postplaats)) plaats,
|
||
CASE
|
||
WHEN MAX(prs_bedrijf_bedrijf_status) = 1 THEN 1
|
||
WHEN prs_bedrijf_luc = 'L' THEN 1
|
||
ELSE 0
|
||
END Mareon_premium,
|
||
( SELECT k1.prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink k1
|
||
WHERE k1.prs_link_key = prs_bedrijf_key
|
||
AND k1.prs_kenmerklink_niveau = 'B'
|
||
AND k1.prs_kenmerk_key = 74) bedrijfsprofiel,
|
||
MIN(leverancier_email) email,
|
||
( SELECT k1.prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink k1
|
||
WHERE k1.prs_link_key = prs_bedrijf_key
|
||
AND k1.prs_kenmerklink_niveau = 'B'
|
||
AND k1.prs_kenmerk_key = 75) bedrijfspagina,
|
||
( SELECT k1.prs_kenmerklink_waarde
|
||
FROM prs_kenmerklink k1
|
||
WHERE k1.prs_link_key = prs_bedrijf_key
|
||
AND k1.prs_kenmerklink_niveau = 'B'
|
||
AND k1.prs_kenmerk_key = 76) bedrijfslogo
|
||
FROM mar_v_lev_4_woco lev
|
||
WHERE prs_bedrijf_luc IN ('U', 'L')
|
||
AND NOT EXISTS (SELECT 'x' FROM prs_kenmerklink k1
|
||
WHERE k1.prs_link_key = prs_bedrijf_key
|
||
AND k1.prs_kenmerklink_niveau = 'B'
|
||
AND k1.prs_kenmerk_key = 73)
|
||
AND (EXISTS (SELECT 'x' FROM mld_opdr o WHERE o.mld_uitvoerende_keys = lev.prs_bedrijf_key)
|
||
OR
|
||
EXISTS (SELECT 'x' FROM bes_bestelopdr bo WHERE bo.prs_bedrijf_key=lev.prs_bedrijf_key)
|
||
)
|
||
GROUP BY prs_bedrijf_key, fclt_f_leverancier_naam, prs_bedrijf_luc, leverancier_gln;
|
||
|
||
CREATE OR REPLACE VIEW mar_v_rap_public_opdrachtnemer
|
||
AS
|
||
SELECT mareon_id,
|
||
opdrachtnemer,
|
||
gln,
|
||
DECODE(prs_bedrijf_lucv,'L', 'Leverancier/groothandel', 'U', 'Uitvoerende/onderhoudsbedrijf', 'V', 'VvE beheerder', 'C' , 'Contractant', 'Overig') prs_bedrijf_type,
|
||
vestigingsplaats,
|
||
DECODE(mareonpremium, 0, 'Portaal', 1, 'Premium') mareongebruik,
|
||
bedrijfsprofiel,
|
||
'....' || SUBSTR(mailadres,INSTR(mailadres, '@')) mailadres,
|
||
webpagina,
|
||
bedrijfslogo
|
||
FROM mar_v_public_deelnemers_OPN;
|
||
|
||
|
||
--
|
||
CREATE OR REPLACE PROCEDURE mar_import_action_ref_key (p_import_key IN NUMBER)
|
||
IS
|
||
c_fielddelimitor VARCHAR2 (1) := ';';
|
||
v_newline VARCHAR2 (4000); -- Input line
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
header_is_valid NUMBER := 0;
|
||
v_ongeldig NUMBER (1);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
v_count NUMBER;
|
||
|
||
-- De importvelden:
|
||
v_action_code VARCHAR2 (256);
|
||
v_ref_key VARCHAR2 (256);
|
||
v_extra_omschr VARCHAR2 (4000);
|
||
|
||
|
||
CURSOR c1
|
||
IS
|
||
SELECT *
|
||
FROM fac_imp_file
|
||
WHERE fac_import_key = p_import_key
|
||
ORDER BY fac_imp_file_index;
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
FOR rec1 IN c1
|
||
LOOP
|
||
BEGIN
|
||
v_newline := rec1.fac_imp_file_line;
|
||
v_aanduiding := '';
|
||
v_errorhint := 'Fout bij opvragen te importeren rij';
|
||
v_ongeldig := 0;
|
||
-- Lees alle veldwaarden
|
||
|
||
-- 01 - ACTION_CODE
|
||
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 := '[' || 'Action:' || v_action_code || ' Ref-key:' || v_ref_key || '] ';
|
||
|
||
-- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
|
||
-- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
|
||
-- Ik negeer alles totdat ik een geldige header ben gepasseerd.
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
IF UPPER (v_action_code) = 'ACTION_CODE' AND UPPER (v_ref_key) = 'REF_KEY'
|
||
THEN
|
||
header_is_valid := 1;
|
||
END IF;
|
||
ELSE
|
||
v_count_tot := v_count_tot + 1;
|
||
--
|
||
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,
|
||
extra_omschr)
|
||
VALUES (p_import_key,
|
||
v_action_code,
|
||
v_ref_key,
|
||
v_extra_omschr);
|
||
END IF;
|
||
END;
|
||
END LOOP;
|
||
|
||
IF (header_is_valid = 0)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'Ongeldig importbestand',
|
||
'Geen header of header niet volgens specificatie!');
|
||
ELSE
|
||
IF v_count_tot <> 1
|
||
THEN
|
||
-- Normaliter wordt 1 regel ingelezen, en loggen we niet, alleen als dat afwijkt, dan wel...
|
||
fac.imp_writelog (p_import_key,
|
||
'S',
|
||
'mar_import_action_ref_key: aantal ingelezen regels: ' || TO_CHAR (v_count_tot),
|
||
'');
|
||
END IF;
|
||
END IF;
|
||
|
||
COMMIT;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END mar_import_action_ref_key;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE mar_update_action_ref_key (p_import_key IN NUMBER)
|
||
IS
|
||
-- Alle ingelezen AX opdrachten
|
||
CURSOR c_action_ref_key
|
||
IS
|
||
SELECT *
|
||
FROM mar_imp_action_key
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
v_aanduiding VARCHAR2 (200);
|
||
v_errorhint VARCHAR2 (1000);
|
||
v_errormsg VARCHAR2 (1000);
|
||
oracle_err_num NUMBER;
|
||
oracle_err_mes VARCHAR2 (200);
|
||
v_count_tot NUMBER (10);
|
||
v_count_import NUMBER (10);
|
||
|
||
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);
|
||
BEGIN
|
||
v_count_tot := 0;
|
||
v_count_import := 0;
|
||
|
||
v_errorhint := 'Error in mar_update_action_ref_key, import-key: ' || p_import_key;
|
||
|
||
SELECT prs_perslid_key
|
||
INTO v_prs_perslid_key
|
||
FROM fac_import
|
||
WHERE fac_import_key = p_import_key;
|
||
|
||
FOR rec_ax IN c_action_ref_key
|
||
LOOP
|
||
BEGIN
|
||
v_result := NULL;
|
||
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
|
||
|| '] ';
|
||
|
||
v_aanduiding := '[' || 'Action:' || v_action_code || ' Ref-key:' || v_ref_key || '] ';
|
||
|
||
|
||
IF (v_action_code IS NOT NULL AND v_ref_key IS NOT NULL)
|
||
THEN
|
||
CASE
|
||
WHEN UPPER (v_action_code) = 'OPDR_POST_ONDERBREEK' THEN v_result := mar_post_action_hold_opdr (v_ref_key, v_prs_perslid_key, v_extra_omschr);
|
||
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) = 'OPDR_POST_PUTORDERS' THEN v_result := mar_post_opdr_putorders (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);
|
||
WHEN UPPER (v_action_code) = 'FIN_FACTUUR_SET_EXTERNSYNCDATE' THEN v_result := mar_post_fin_externsyncdate (v_prs_perslid_key, v_ref_key);
|
||
WHEN UPPER (v_action_code) = 'PRS_BEDRIJF_LOGLEVEL' THEN v_result := mar_post_action_loglevel (v_prs_perslid_key, v_extra_omschr, v_ref_key);
|
||
WHEN UPPER (v_action_code) = 'PRS_BEDRIJF_LOGFILE_DATUM' THEN v_result := mar_post_action_logbestand (v_prs_perslid_key, v_extra_omschr, v_ref_key);
|
||
WHEN UPPER (v_action_code) = 'FAC_RESET_NQ_ERROR' THEN v_result := mar_post_action_reset_nq (v_prs_perslid_key, v_extra_omschr, v_ref_key);
|
||
WHEN UPPER (v_action_code) = 'FIN_FACTUUR_ADD_2_NQ' THEN v_result := mar_post_action_factuur_add_nq (v_prs_perslid_key, v_extra_omschr, v_ref_key);
|
||
WHEN UPPER (v_action_code) = 'FIN_FACTUUR_TIME_ADD_NQ' THEN v_result := mar_post_action_fact_time_nq (v_prs_perslid_key, v_extra_omschr);
|
||
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);
|
||
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
|
||
CASE
|
||
WHEN v_action_code IS NULL
|
||
THEN
|
||
v_result := 'Action_code mag niet leeg zijn';
|
||
WHEN v_ref_key IS NULL
|
||
THEN
|
||
v_result := 'Ref-key mag niet leeg zijn';
|
||
END CASE;
|
||
END IF;
|
||
|
||
IF (v_result IS NOT NULL)
|
||
THEN
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
'mar_update_action_ref_key: ' || v_result || v_aanduiding,
|
||
'');
|
||
END IF;
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
COMMIT;
|
||
END;
|
||
END LOOP;
|
||
|
||
-- MARX#62647: Koppeling AX365 - Mareon (Push): XML met result retour
|
||
mar_response_API_Import (p_import_key, 0);
|
||
EXCEPTION
|
||
WHEN OTHERS
|
||
THEN
|
||
oracle_err_num := SQLCODE;
|
||
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
|
||
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
|
||
fac.imp_writelog (p_import_key,
|
||
'E',
|
||
v_aanduiding || v_errormsg,
|
||
v_errorhint);
|
||
mar_response_API_Import (p_import_key, -1);
|
||
COMMIT;
|
||
END mar_update_action_ref_key;
|
||
/
|
||
|
||
|
||
-- MARX#58610: Mareon AVG Proof, dit verloopt via Oracle job's, en de logging willen we wel kunnen inzien, via een rapport (fac_usrrap) met deze view:
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_mld_freeze
|
||
IS
|
||
l_einddatum DATE;
|
||
l_killmld_period NUMBER (10);
|
||
l_prs_perslid_key_fclt NUMBER (10);
|
||
|
||
-- Schijndode meldingen in Mareon zijn meldingen die:
|
||
-- 1. niet al dood zijn (dus status <> 6 / Historie en status <> 1 /Afgewezen), dus leven, en
|
||
-- 2. waarvan alle (onderliggende) opdrachten gereed (6), afgerond (9), verwerkt(7) of afgewezen (1) zijn, EN
|
||
-- 3. in de laatste paar weken/maanden GEEN(!) activiteit (tracking) meer hebben gehad, we houden 1 jaar aan.
|
||
|
||
-- Deze meldingen willen we doodmaken (bevriezen), dus naar status 6 brengen, doen we obv deze cursor:
|
||
-- MARX#81699 Mareon licentieformulier uitsluiten van AVG, oftewel mld_stdmelding_key <> 2
|
||
|
||
CURSOR c_schijndode_meldingen (
|
||
p_einddatum DATE)
|
||
IS
|
||
SELECT m.mld_melding_key
|
||
FROM mld_melding m
|
||
WHERE mld_stdmelding_key <> 2
|
||
AND NOT EXISTS
|
||
(SELECT 'x'
|
||
FROM mld_opdr o
|
||
WHERE o.mld_melding_key = m.mld_melding_key
|
||
AND ( o.mld_statusopdr_key NOT IN (1,
|
||
6,
|
||
7,
|
||
9)
|
||
OR (SELECT MAX (ft.fac_tracking_datum)
|
||
FROM fac_tracking ft
|
||
WHERE ft.fac_tracking_refkey = o.mld_opdr_key
|
||
AND ft.fac_srtnotificatie_key IN (SELECT fac_srtnotificatie_key
|
||
FROM fac_srtnotificatie
|
||
WHERE fac_srtnotificatie_xmlnode = 'opdracht')) >
|
||
p_einddatum))
|
||
AND m.mld_melding_status NOT IN (1, 6)
|
||
ORDER BY m.mld_melding_key;
|
||
BEGIN
|
||
-- Perslid Facilitor is in alle omgevingen (prod, accept, labs, develop) waarde 4.
|
||
l_prs_perslid_key_fclt := 4;
|
||
|
||
|
||
-- We willen alleen de schijndode meldingen waarvan de opdrachten langer dan (b.v.) 365 dagen geen activiteit (tracking) meer op is geweest, dit aantal dagen staat in de setting MAR_KILLMLD_PERIOD,
|
||
-- Dus l_killmld_period bevat aantal dagen dat er geen activiteit mag zijn geweest.
|
||
|
||
SELECT fac.safe_to_number (ud.fac_usrdata_omschr)
|
||
INTO l_killmld_period
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1 AND ud.fac_usrdata_code = '$MAR_KILLMLD_PERIOD' AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
l_einddatum := SYSDATE - l_killmld_period;
|
||
|
||
FOR rec_mld IN c_schijndode_meldingen (l_einddatum)
|
||
LOOP
|
||
BEGIN
|
||
mld.setmeldingstatus (rec_mld.mld_melding_key, 5, l_prs_perslid_key_fclt);
|
||
mld.setmeldingstatus (rec_mld.mld_melding_key, 6, l_prs_perslid_key_fclt);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
|
||
-- Eerst even deze proc als dummy om toe te kunnen voegen als job
|
||
|
||
CREATE OR REPLACE PROCEDURE marx_process_avg
|
||
IS
|
||
l_anonymize_period NUMBER (10);
|
||
l_kill_fin_period NUMBER (10);
|
||
BEGIN
|
||
|
||
-- Eerst de meldingen + opdrachten
|
||
l_anonymize_period := fac.safe_to_number (fac.getSetting ('anonymize_period'));
|
||
ano.anonymizemld(TO_DATE ('01-01-2000', 'dd-mm-yyyy'), SYSDATE - l_anonymize_period);
|
||
|
||
-- En daarna de facturen, met een ingebouwde zekerheid: l_kill_fin_period willen we minimaal 90 dagen laten zijn,
|
||
-- zodat iig facturen met status "verwerkt" van > 90 dagen geleden worden geanonimiseerd en de bijlagen daarvan worden verwijderd.
|
||
-- Facturen die pas zijn verwerkt (korter dan 90 dagen geleden) worden nog niet geanonimiseerd.
|
||
|
||
SELECT GREATEST(fac.safe_to_number (ud.fac_usrdata_omschr), 90)
|
||
INTO l_kill_fin_period
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1 AND ud.fac_usrdata_code = '$MAR_KILLFIN_PERIOD' AND ud.fac_usrdata_verwijder IS NULL;
|
||
ano.anonymizefin(TO_DATE ('01-01-2000', 'dd-mm-yyyy'), SYSDATE - l_kill_fin_period);
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
-- MARX#86532 Opruimen oude logbestanden MARX-upload naar Facilitor
|
||
CREATE OR REPLACE PROCEDURE marx_delete_synclogs
|
||
IS
|
||
CURSOR c_delete_synclog_files
|
||
IS
|
||
SELECT b.fac_bijlagen_key
|
||
FROM fac_bijlagen b,
|
||
prs_kenmerk k
|
||
WHERE k.prs_kenmerk_key = 22
|
||
AND k.prs_kenmerk_niveau = 'P'
|
||
AND k.prs_kenmerk_key = b.fac_bijlagen_kenmerk_key
|
||
AND k.prs_kenmerk_kenmerktype = 'M'
|
||
AND b.fac_bijlagen_module = 'PRS'
|
||
AND b.fac_bijlagen_aanmaak < SYSDATE - (SELECT COALESCE(MIN(fac.safe_to_number (ud.fac_usrdata_omschr)), 30)
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1 AND ud.fac_usrdata_code = '$MAR_KILLPRS_PERIOD'
|
||
AND ud.fac_usrdata_verwijder IS NULL);
|
||
BEGIN
|
||
FOR rec IN c_delete_synclog_files
|
||
LOOP
|
||
BEGIN
|
||
flx.deleteflexbijlage(rec.fac_bijlagen_key);
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
-- MARX#73812 Retentieperiode m.b.t. mar_factuur_queue
|
||
CREATE OR REPLACE PROCEDURE marx_delete_factuur_queue
|
||
IS
|
||
l_einddatum DATE;
|
||
l_kill_factuur_queue_period NUMBER (10);
|
||
l_prs_perslid_key_fclt NUMBER (10);
|
||
|
||
-- Deze factuur_queue records die ouder zijn dan '365' dagen (=instelling $MAR_KILL_INVOICE_QUEUE_PERIOD) worden verwijderd:
|
||
|
||
CURSOR c_factuur_queue (p_einddatum DATE)
|
||
IS
|
||
SELECT mar_factuur_queue_key
|
||
FROM mar_factuur_queue
|
||
WHERE mar_factuur_queue_aanmaak < p_einddatum;
|
||
|
||
BEGIN
|
||
-- Perslid Facilitor is in alle omgevingen (prod, accept, labs, develop) waarde 4.
|
||
l_prs_perslid_key_fclt := 4;
|
||
|
||
|
||
SELECT fac.safe_to_number (ud.fac_usrdata_omschr)
|
||
INTO l_kill_factuur_queue_period
|
||
FROM fac_usrdata ud
|
||
WHERE ud.fac_usrtab_key = 1 AND ud.fac_usrdata_code = '$MAR_KILL_INVOICE_QUEUE_PERIOD' AND ud.fac_usrdata_verwijder IS NULL;
|
||
|
||
l_einddatum := SYSDATE - l_kill_factuur_queue_period;
|
||
|
||
FOR rec IN c_factuur_queue (l_einddatum)
|
||
LOOP
|
||
BEGIN
|
||
DELETE FROM mar_factuur_queue WHERE mar_factuur_queue_key = rec.mar_factuur_queue_key;
|
||
END;
|
||
END LOOP;
|
||
|
||
COMMIT;
|
||
END;
|
||
/
|
||
|
||
|
||
CREATE OR REPLACE PROCEDURE MARX_MONTHLY
|
||
IS
|
||
BEGIN
|
||
marx_delete_factuur_queue();
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE MARX_WEEKLY
|
||
IS
|
||
BEGIN
|
||
marx_mld_freeze ();
|
||
marx_process_avg ();
|
||
marx_delete_synclogs();
|
||
END;
|
||
/
|
||
|
||
CREATE OR REPLACE PROCEDURE MARX_DAILY
|
||
IS
|
||
BEGIN
|
||
marx_clean_all_UNused_NQ();
|
||
marx_clean_OLD_error_NQ();
|
||
END;
|
||
/
|
||
|
||
-- MARX#67261: Opdrachten geografisch in beeld
|
||
-- Deze is voor de leverancier
|
||
CREATE OR REPLACE VIEW marx_v_showmaps_4_lev
|
||
AS
|
||
SELECT DISTINCT lev.prs_perslid_key,
|
||
TRUNC(o.mld_opdr_datumbegin) mld_opdr_datumbegin,
|
||
TRUNC(SYSDATE) - TRUNC(o.mld_opdr_datumbegin) dagen_geleden,
|
||
o.mld_opdr_omschrijving,
|
||
o.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr marnr,
|
||
o.mld_opdr_id,
|
||
COALESCE( (SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
, LCL.l('lcl_unknown')) mld_opdr_soort,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NULL THEN 1 -- Nieuw
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NULL THEN 2 -- Geaccepteerd
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 6 THEN 8 -- Afgemeld
|
||
WHEN so.mld_statusopdr_key = 9 THEN 9 -- Afgerond
|
||
WHEN so.mld_statusopdr_key = 7 THEN 10 -- Verwerkt (Gefactureerd)
|
||
WHEN so.mld_statusopdr_key = 1 THEN 11 -- Afgewezen
|
||
ELSE so.mld_statusopdr_key
|
||
END mld_statusopdr_key,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key IN (5, 8) AND mld_opdr_plandatum IS NOT NULL
|
||
THEN LCL.l ('lcl_opdr_plandate')
|
||
ELSE so.mld_statusopdr_omschrijving
|
||
END mld_statusopdr_omschrijving,
|
||
woco.prs_bedrijf_naam,
|
||
adres.adres,
|
||
adres.postcode,
|
||
UPPER(adres.plaats) plaatsnaam,
|
||
mld_melding_x,
|
||
mld_melding_y,
|
||
m.mld_melding_key
|
||
FROM mld_opdr o,
|
||
mld_statusopdr so,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_all_leverancier_perslid lev,
|
||
mar_v_mldkenmerken adres
|
||
WHERE o.mld_opdr_datumbegin >= TRUNC(SYSDATE) - 10
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND so.mld_statusopdr_key = o.mld_statusopdr_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND adres.mld_melding_key = m.mld_melding_key;
|
||
|
||
-- Deze is voor de woco
|
||
CREATE OR REPLACE VIEW marx_v_showmaps_4_woco
|
||
AS
|
||
SELECT DISTINCT woco2.prs_perslid_key,
|
||
TRUNC(o.mld_opdr_datumbegin) mld_opdr_datumbegin,
|
||
TRUNC(SYSDATE) - TRUNC(o.mld_opdr_datumbegin) dagen_geleden,
|
||
o.mld_opdr_omschrijving,
|
||
o.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr marnr,
|
||
o.mld_opdr_id,
|
||
COALESCE( (SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
, LCL.l('lcl_unknown')) mld_opdr_soort,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NULL THEN 1 -- Nieuw
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NULL THEN 2 -- Geaccepteerd
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 6 THEN 8 -- Afgemeld
|
||
WHEN so.mld_statusopdr_key = 9 THEN 9 -- Afgerond
|
||
WHEN so.mld_statusopdr_key = 7 THEN 10 -- Verwerkt (Gefactureerd)
|
||
WHEN so.mld_statusopdr_key = 1 THEN 11 -- Afgewezen
|
||
ELSE so.mld_statusopdr_key
|
||
END mld_statusopdr_key,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key IN (5, 8) AND mld_opdr_plandatum IS NOT NULL
|
||
THEN LCL.l ('lcl_opdr_plandate')
|
||
ELSE so.mld_statusopdr_omschrijving
|
||
END mld_statusopdr_omschrijving,
|
||
lev.prs_bedrijf_naam,
|
||
adres.adres,
|
||
adres.postcode,
|
||
UPPER(adres.plaats) plaatsnaam,
|
||
mld_melding_x,
|
||
mld_melding_y,
|
||
m.mld_melding_key
|
||
FROM mld_opdr o,
|
||
mld_statusopdr so,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_woco_perslid woco2,
|
||
prs_bedrijf lev,
|
||
mar_v_mldkenmerken adres
|
||
WHERE o.mld_opdr_datumbegin >= TRUNC(SYSDATE) - 10
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND so.mld_statusopdr_key = o.mld_statusopdr_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND woco2.prs_bedrijf_key = woco.prs_bedrijf_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND adres.mld_melding_key = m.mld_melding_key;
|
||
|
||
|
||
-- MARX#70053 Mareon Premium Groene Planningen
|
||
-- Deze is voor de leverancier
|
||
CREATE OR REPLACE VIEW marx_v_planmaps_4_lev
|
||
AS
|
||
SELECT DISTINCT lev.prs_perslid_key,
|
||
rr.res_rsv_ruimte_van,
|
||
TRUNC(rr.res_rsv_ruimte_van) - TRUNC(SYSDATE) dagen_toekomst,
|
||
p.prs_perslid_key prs_vakman_key,
|
||
p.prs_perslid_naam prs_vakman_naam,
|
||
di.prs_dienst_key,
|
||
di.prs_dienst_omschrijving prs_vakman_functie,
|
||
o.mld_opdr_omschrijving,
|
||
o.mld_opdr_key,
|
||
sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr marnr,
|
||
o.mld_opdr_id,
|
||
COALESCE( (SELECT ko.mld_kenmerkopdr_waarde
|
||
FROM mld_kenmerkopdr ko
|
||
WHERE ko.mld_opdr_key = o.mld_opdr_key AND ko.mld_kenmerk_key = 24 AND ko.mld_kenmerkopdr_verwijder IS NULL)
|
||
, LCL.l('lcl_unknown')) mld_opdr_soort,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NULL THEN 1 -- Nieuw
|
||
WHEN so.mld_statusopdr_key = 5 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NULL THEN 2 -- Geaccepteerd
|
||
WHEN so.mld_statusopdr_key = 8 AND mld_opdr_plandatum IS NOT NULL THEN 3 -- Gepland
|
||
WHEN so.mld_statusopdr_key = 6 THEN 8 -- Afgemeld
|
||
WHEN so.mld_statusopdr_key = 9 THEN 9 -- Afgerond
|
||
WHEN so.mld_statusopdr_key = 7 THEN 10 -- Verwerkt (Gefactureerd)
|
||
WHEN so.mld_statusopdr_key = 1 THEN 11 -- Afgewezen
|
||
ELSE so.mld_statusopdr_key
|
||
END mld_statusopdr_key,
|
||
CASE
|
||
WHEN so.mld_statusopdr_key IN (5, 8) AND mld_opdr_plandatum IS NOT NULL
|
||
THEN LCL.l ('lcl_opdr_plandate')
|
||
ELSE so.mld_statusopdr_omschrijving
|
||
END mld_statusopdr_omschrijving,
|
||
woco.prs_bedrijf_naam,
|
||
adres.adres,
|
||
adres.postcode,
|
||
UPPER(adres.plaats) plaatsnaam,
|
||
mld_melding_x,
|
||
mld_melding_y,
|
||
m.mld_melding_key
|
||
FROM mld_opdr o,
|
||
mld_statusopdr so,
|
||
mld_melding m,
|
||
mld_stdmelding sm,
|
||
mld_discipline d,
|
||
ins_srtdiscipline sd,
|
||
mar_v_woco_perslid woco,
|
||
mar_v_all_leverancier_perslid lev,
|
||
mar_v_mldkenmerken adres,
|
||
res_rsv_ruimte rr,
|
||
res_kenmerkwaarde rk,
|
||
prs_dienst di,
|
||
res_rsv_deel rd,
|
||
res_deel d,
|
||
prs_perslid p
|
||
WHERE rr.res_rsv_ruimte_van >= TRUNC(SYSDATE)
|
||
AND rr.res_rsv_ruimte_tot <= TRUNC(SYSDATE) + 28
|
||
AND rr.mld_opdr_key = o.mld_opdr_key
|
||
AND rr.res_rsv_ruimte_verwijder IS NULL
|
||
AND rk.res_kenmerk_key(+) = 9
|
||
AND rk.res_rsv_ruimte_key(+) = rr.res_rsv_ruimte_key
|
||
AND rk.res_kenmerkwaarde_verwijder(+) IS NULL
|
||
AND di.prs_dienst_hint (+) = rk.res_kenmerkreservering_waarde
|
||
AND rd.res_rsv_ruimte_key = rr.res_rsv_ruimte_key
|
||
AND rd.res_rsv_deel_verwijder IS NULL
|
||
AND d.res_deel_key = rd.res_deel_key
|
||
AND d.res_deel_verwijder IS NULL
|
||
AND d.res_prs_perslid_key = p.prs_perslid_key
|
||
AND p.prs_perslid_verwijder IS NULL
|
||
AND o.mld_melding_key = m.mld_melding_key
|
||
AND so.mld_statusopdr_key = o.mld_statusopdr_key
|
||
AND m.mld_stdmelding_key = sm.mld_stdmelding_key
|
||
AND sm.mld_ins_discipline_key = d.ins_discipline_key
|
||
AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
|
||
AND o.prs_perslid_key = woco.prs_perslid_key
|
||
AND o.mld_uitvoerende_keys = lev.prs_bedrijf_key
|
||
AND adres.mld_melding_key = m.mld_melding_key;
|
||
|
||
-- MARX#81393 Prijsindexatie 2024 (deel B): Ook maar 'ns een rapport met complete prijslijst uit Mareon...
|
||
|
||
CREATE OR REPLACE VIEW marx_v_rap_pricelist
|
||
AS
|
||
SELECT substr(fac_usrdata_upper, 6) onderdeel,
|
||
round(fac.safe_to_number(fac_usrdata_omschr),2) prijs1,
|
||
CASE
|
||
WHEN substr (fac_usrdata_upper, 6) = 'PLANBORD' THEN 'per kwartaal'
|
||
WHEN substr (fac_usrdata_upper, 6) = 'UBL_EINVOICING' THEN 'per factuur'
|
||
WHEN substr (fac_usrdata_upper, 6) = 'FACTUURSCANNING' THEN 'per factuur'
|
||
WHEN substr (fac_usrdata_upper, 6) = 'FACTUREN_BEDRIJFSHERKENNING' THEN 'per factuur'
|
||
WHEN substr (fac_usrdata_upper, 6, 5) = 'USERS' THEN 'per kwartaal'
|
||
WHEN substr (fac_usrdata_upper, 6, 7) = 'PREMIUM' THEN 'per opdracht'
|
||
WHEN substr (fac_usrdata_upper, 6, 3) = 'CRE' THEN 'per jaar'
|
||
END eenheid1,
|
||
round(fac_usrdata_prijs,2) prijs2,
|
||
CASE
|
||
WHEN substr (fac_usrdata_upper, 6, 3) = 'CRE' THEN 'per opdracht'
|
||
END eenheid2
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_upper LIKE '%$FEE%';
|
||
|
||
-- MARX#86461 Kwartaalrapport facturatie Mareon abonnement REMS & Twinq klanten
|
||
-- Deze view wordt gebruikt tbv prs-flexprop (key 72), welke gebaseerd is op kenmerkdomein met referentie naar deze view...
|
||
CREATE OR REPLACE VIEW marx_cre_prijslijst
|
||
(fac_usrdata_key, cre_staffel_id, prijs_per_jaar, prijs_per_kwartaal, prijs_per_opdracht)
|
||
AS
|
||
SELECT fac_usrdata_key,
|
||
fac_usrdata_volgnr || '. ' || substr(fac_usrdata_upper, 6) cre_staffel_id,
|
||
round(fac.safe_to_number(fac_usrdata_omschr),2) prijs_per_jaar,
|
||
round(fac.safe_to_number(fac_usrdata_omschr)/4,2) prijs_per_jaar,
|
||
round(fac_usrdata_prijs,2) prijs_per_opdracht
|
||
FROM fac_usrdata
|
||
WHERE fac_usrtab_key = 1
|
||
AND fac_usrdata_upper LIKE '%$FEE_CRE%';
|
||
|
||
CREATE OR REPLACE VIEW marx_cre_Q_facturatie
|
||
(prs_bedrijf_naam, mld_opdr_key, kwartaal, aanmaak_datum, staffel, prijs_per_jaar, prijs_per_kwartaal, prijs_per_opdracht)
|
||
AS
|
||
SELECT woco.prs_bedrijf_naam, o.mld_opdr_key, to_char(t.fac_tracking_datum,'YYYY-Q'), t.fac_tracking_datum, pl.cre_staffel_id, pl.prijs_per_jaar, pl.prijs_per_kwartaal, pl.prijs_per_opdracht
|
||
FROM mld_opdr o, fac_tracking t, mar_v_woco_perslid woco, prs_kenmerklink kl, marx_cre_prijslijst pl
|
||
WHERE o.mld_opdr_key = t.fac_tracking_refkey
|
||
AND woco.prs_perslid_key = t.prs_perslid_key
|
||
AND t.fac_srtnotificatie_key = (SELECT fac_srtnotificatie_key FROM fac_srtnotificatie sn WHERE fac_srtnotificatie_code = 'ORDNEW')
|
||
AND kl.prs_kenmerk_key = 72
|
||
AND kl.prs_kenmerklink_niveau = 'B'
|
||
AND kl.prs_kenmerklink_verwijder IS NULL
|
||
AND kl.prs_link_key = woco.prs_bedrijf_key
|
||
AND fac.safe_to_number(kl.prs_kenmerklink_waarde) = pl.fac_usrdata_key;
|
||
|
||
|
||
------ payload end ------
|
||
|
||
SET DEFINE OFF
|
||
BEGIN adm.systrackscriptId ('$Id$', 0); END;
|
||
/
|
||
|
||
COMMIT;
|
||
SET ECHO OFF
|
||
SPOOL OFF
|
||
SET DEFINE ON
|
||
PROMPT Logfile of this upgrade is: &fcltlogfile
|