Files
Mareon/sql/mareon.sql
Marcel Bourseau e7376be1cd MARX#59862: Tobias 365 - Mareon
svn path=/Mareon/trunk/; revision=45192
2019-12-11 11:07:31 +00:00

12393 lines
564 KiB
MySQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for MAREON (MARX)
DEFINE thisfile = 'MAREON.SQL'
DEFINE dbuser = '^MARX'
DEFINE custid = 'MARX'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF
------ payload begin ------
-- 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_aantal NUMBER(10);
v_apikey VARCHAR2(255);
v_result VARCHAR2(1000);
v_vakman 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;
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;
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_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)
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_aantal NUMBER(10);
v_apikey VARCHAR2(255);
v_result VARCHAR2(1000);
v_vakman NUMBER(10);
v_planner NUMBER(10);
v_facturatie NUMBER(10);
v_beheerder NUMBER(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;
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;
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_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)
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;
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);
-- 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;
-- MARX#: Het max. aantal accounts dat leveranciers standaard kan inzetten is vooralsnog voor iedereen dezelfde: 3.
v_max_accounts := 3;
--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 ...
SELECT COUNT(*)
INTO v_aantal_accounts_nu
FROM prs_contactpersoon
WHERE prs_bedrijf_key = v_prs_bedrijf_key
AND prs_perslid_key IS NOT NULL
AND prs_contactpersoon_verwijder IS NULL;
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' ;
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: prs_srtperslid_key 1
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, 1, 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;
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;
/
-- 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;
/
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-----------------------
-----------------------
----------------------- Webservices voor AX (via adapter AxFacilitor.js)
-----------------------
-----------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 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 = 1;
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 b.prs_bedrijf_intern = 1
AND p.prs_perslid_verwijder is NULL
AND NOT EXISTS (select 'x' FROM mar_v_all_leverancier_perslid cp WHERE cp.prs_perslid_key = p.prs_perslid_key);
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);
----------------------------------------------------------------------------------------------------------------------------------------
-- 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
(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)
AS
SELECT 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
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
(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)
AS
SELECT 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
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(+);
CREATE OR REPLACE VIEW mar_v_rap_woco_x_lev
(fclt_f_woco, woco_externe_id, woco_login, woco_apikey, 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)
AS
SELECT w_prs_bedrijf_naam, w_prs_overeenkomst_nr, w_prs_perslid_oslogin, w_prs_perslid_apikey, 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.fac_usrdata_omschr
FROM mar_v_woco_x_lev, mar_v_sync_ax_lasttime s, prs_kenmerklink kl, fac_usrdata ud
WHERE s.prs_perslid_key = w_prs_perslid_key
AND l_prs_bedrijf_key = kl.prs_link_key(+)
AND kl.prs_kenmerk_key(+)= 29
AND kl.prs_kenmerklink_niveau(+)= 'B'
AND kl.prs_kenmerklink_verwijder(+) IS NULL
AND ud.fac_usrdata_key(+) = fac.safe_to_number(kl.prs_kenmerklink_waarde);
-- 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;
-- 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).
CREATE OR REPLACE VIEW mar_v_mareon_info
( FCLT_MAR_VERSION,
MAR_MIN_ADAPTER_VERSION,
PRS_BEDRIJF_KEY,
PRS_BEDRIJF_NAAM,
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_ABORT_SYNC_HTTP_ERROR,
MAR_USE_COMMUNICATIE_LOGBOEK,
MAR_SYNC_HTTP_TIMEOUT,
MAR_SYNC_BIJLAGES_VAN_OPDRGVR,
MAR_SYNC_BIJLAGES_NAAR_OPDRGVR
)
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_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(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')
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
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;
-- 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,
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_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 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)
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';
-- 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';
--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)
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 ('#ORDUPD', 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;
/
-- 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 )
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_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);
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;
-- 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))
INTO v_prs_bedrijfadres_url, v_prs_bedrijfadres_xsl
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;
SELECT prs_bedrijf_key
INTO v_woco_prs_bedrijf_key
FROM mar_v_woco_perslid
WHERE prs_perslid_key = v_prs_perslid_key;
-- 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#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.
IF (v_prs_bedrijfadres_url IS NOT NULL) AND (v_do_send_opdr = 1 OR v_prs_bedrijfadres_xsl IS NULL) AND (v_opdr_matcht_chargemode = 1)
THEN
v_result := 1;
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
)
IS
v_do_send_opdr NUMBER(10);
v_do_send_annu_opdr NUMBER(10);
c_kenmerkopdr_key_annuleer NUMBER(10);
BEGIN
c_kenmerkopdr_key_annuleer := 22;
-- 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#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)
-- 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);
END IF;
EXCEPTION
WHEN OTHERS
THEN
COMMIT;
END mar_annuleer_mld_opdr;
/
-- 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_import_key IN NUMBER
)
IS
v_aanduiding VARCHAR2 (2000);
v_errorhint VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
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_flexsummary mld_opdr.mld_opdr_omschrijving%TYPE;
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_soort VARCHAR2(1000);
v_mld_opdr_typering VARCHAR2(1000);
v_mld_opdr_afspraak 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_opdrsoort NUMBER(10);
c_kenmerkopdr_key_opdrtype NUMBER(10);
c_kenmerkopdr_key_opdrafspraak NUMBER(10);
-- 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_opdrsoort := 24;
c_kenmerkopdr_key_opdrtype := 25;
c_kenmerkopdr_key_opdrafspraak := 26;
v_count_differences := 0;
v_aanduiding := '';
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;
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;
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_opdr_datumbegin, mld_opdr_plandatum, mld_opdr_einddatum,
mld_opdr_opzichter, mld_opdr_complexnr, mld_opdr_pandnr, mld_opdr_VGEnummer,
mld_opdr_soort, mld_opdr_typering, mld_opdr_afspraak
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_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_soort, v_mld_opdr_typering, v_mld_opdr_afspraak
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_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);
-- Datum verschillen
v_errorhint := 'Fout bij check verschil van begindatum bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
v_mld_opdr_imp_datumbegin := to_date(REPLACE(rec_ax.mld_opdr_datumbegin, 'T', ' '),'YYYY-MM-DD hh24:mi:ss');
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');
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 := to_date(REPLACE(rec_ax.mld_opdr_datumplan, 'T', ' '),'YYYY-MM-DD hh24:mi:ss');
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');
v_errorhint := 'Fout bij check verschil van einddatum bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
v_mld_opdr_imp_einddatum := to_date(REPLACE(COALESCE(rec_ax.mld_opdr_einddatum,'2099-12-31T00:00'), 'T', ' '),'YYYY-MM-DD hh24:mi:ss');
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');
-- 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#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 opdracht typering bij opdracht(key)' || p_mld_opdr_key || '(' || v_mld_opdr_id || ')';
v_count_differences := v_count_differences + mar_diff_varchar(v_mld_opdr_typering, GetMareonDescription('mld_opdr_typering', rec_ax.mld_opdr_typering), p_mld_opdr_key, v_prs_perslid_key, 'Opdracht typering');
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdrtype, p_mld_opdr_key, GetMareonDescription('mld_opdr_typering', rec_ax.mld_opdr_typering));
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);
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!
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;
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;
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;
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;
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;
-- 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;
fac.trackaction ('#ORDUPD', p_mld_opdr_key, v_prs_perslid_key, NULL, 'Opdracht heeft ' || v_count_differences || ' wijzigingen');
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;
-- 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)
-- 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 gewijzigde opdracht ontvangen.
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 AND v_count_differences > 0
THEN
mar_resend_mld_opdr_2_lev(p_mld_opdr_key, 2);
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#58945: Bijlages bij opdrachten die al verstuurd zijn
CREATE OR REPLACE FUNCTION mar_post_action_maak_mao (v_order_typering_A IN NUMBER, v_order_status_B IN NUMBER, v_order_plan_tosend_C IN NUMBER, v_order_is_send_D IN NUMBER)
RETURN NUMBER
AS
BEGIN
RETURN LEAST((v_order_typering_A * v_order_is_send_D) + (v_order_typering_A * (1 - v_order_status_B) * (1 - v_order_plan_tosend_C)), 1);
END;
/
CREATE OR REPLACE FUNCTION mar_post_action_resend_order (v_order_plan_tosend_C IN NUMBER, v_order_is_send_D IN NUMBER, v_supplier_wants_resend_E IN NUMBER)
RETURN NUMBER
AS
BEGIN
RETURN LEAST((v_order_plan_tosend_C * v_order_is_send_D * v_supplier_wants_resend_E) , 1);
END;
/
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_typering_A NUMBER(10);
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);
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);
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';
ELSE
-- 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.
v_track_id := 2;
SELECT COALESCE(MAX(0),1), COALESCE(MAX(ko.mld_kenmerkopdr_waarde), 'Onbekend')
INTO v_order_typering_A, 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
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 -1, 0 of 1:
-- -1 als opdracht gesloten is (1 Afgewezen / 6 Afgemeld / 7 Verwerkt/ 9 Afgerond)
-- 1 als opdracht te behandelen is (5 Te behandelen)
-- 0 als opdracht actief is (2 Niet akkoord / 3 Ter fiattering / 4 Gefiatteerd / 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
v_track_id := 3;
SELECT DECODE(mld_statusopdr_key, 1, -1, 5, 1, 6, -1, 7, -1, 9, -1, 0), COALESCE(mld_opdr_teverzenden, 0),
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, mar_v_sync_ax_lasttime ax
WHERE o.mld_opdr_key = p_mld_opdr_key
AND ax.prs_perslid_key = o.prs_perslid_key;
v_track_id := 4;
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.
v_track_id := 5;
IF (v_supplier_wants_resend_E = -1)
THEN v_supplier_wants_resend_E := 0;
END IF;
v_track_id := 6;
IF (v_order_status_B <> -1)
THEN
-- Alleen als status lopende opdracht is, bij gesloten opdracht moet er niets gebeuren en dit geskipt worden.
-- Check of we de opdracht MAO moeten maken...
v_maak_mao := mar_post_action_maak_mao (v_order_typering_A, v_order_status_B, v_order_plan_tosend_C, v_order_is_send_D);
v_track_id := 7;
IF (v_maak_mao = 1)
THEN
v_track_id := 8;
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opdr_type, p_mld_opdr_key, GetMareonDescription('mld_opdr_typering', 'MAO'));
v_track_id := 9;
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 := 10;
-- Check of we een resend van de opdracht moeten doen
v_resend_order := mar_post_action_resend_order (v_order_plan_tosend_C, v_order_is_send_D, v_supplier_wants_resend_E);
v_track_id := 11;
-- 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 := 12;
mar_resend_mld_opdr_2_lev(p_mld_opdr_key, 2);
END IF;
v_track_id := 13;
END IF;
END IF;
RETURN v_result;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_result := 'Onbekende fout in mar_post_action_bijlages';
RETURN v_result || 'Trackid:' || v_track_id;
COMMIT;
END mar_post_action_bijlages;
/
--
CREATE OR REPLACE PROCEDURE mar_import_action_ref_key (
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_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
fac.imp_writelog (p_import_key,
'S',
'mar_import_action_ref_key: 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_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_BIJLAGE' THEN v_result := mar_post_action_bijlages (v_ref_key, v_prs_perslid_key);
WHEN UPPER(v_action_code) = 'FIN_FACTUUR_POST_SUCCESS' THEN v_result := mar_post_factuur_verwerking (v_prs_perslid_key, v_ref_key, 1, '');
WHEN UPPER(v_action_code) = 'FIN_FACTUUR_POST_FAIL' THEN v_result := mar_post_factuur_verwerking (v_prs_perslid_key, v_ref_key, 0, v_extra_omschr);
ELSE v_result := 'Onbekende action_code';
END CASE;
END IF;
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;
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_update_action_ref_key;
/
-------------------------------------------------------------------------------------------------------------------------------------
-- 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);
p_huisnr := TRIM(p_huisnr);
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_ax_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;
-- 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_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);
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_opdrachten
WHERE fac_import_key = p_import_key;
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
-- 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 - Opdracht soort: INS, REP, MUT
v_aanduiding := 'Probleem bij v_mld_opdr_soort: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_mld_opdr_soort);
-- 04 - Opdracht typering: ORG, MAO, GAR
v_aanduiding := 'Probleem bij v_mld_opdr_typering: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_mld_opdr_typering);
-- 05 - Opdracht afspraak: REG, AFK, ANS, EHP
v_aanduiding := 'Probleem bij v_mld_opdr_afspraak: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_mld_opdr_afspraak);
-- 06 - 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, 6, v_mld_melding_externnr);
-- 07 - Melding omschrijving
v_aanduiding := 'Probleem bij v_mld_melding_omschrijving: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_mld_melding_omschrijving);
-- 08 - 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, 8, v_prs_afdeling_naam);
-- 09 - 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, 9, v_mld_opdr_po_companyid);
-- 10 - Naam opzichter
v_aanduiding := 'Probleem bij v_mld_opdr_opzichter: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_mld_opdr_opzichter);
-- 11 - Flexprop huurdernaam / bewoners van woning
v_aanduiding := 'Probleem bij v_mld_melding_cust_name: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 11, v_mld_melding_cust_name);
-- 12 - Flexprop straatnaam van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_straat: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 12, v_mld_melding_cust_straat);
-- 13 - Flexprop huisnr van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_huisnr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, v_mld_melding_cust_huisnr);
-- 14 - Flexprop huisnr toevoeging van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_huisnr2: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 14, v_mld_melding_cust_huisnr2);
-- 15 - Flexprop postcode van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_postcode: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 15, v_mld_melding_cust_postcode);
-- 16 - Flexprop plaats van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_plaats: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 16, v_mld_melding_cust_plaats);
-- 17 - Flexprop telefoonnummer van melder/huurder
v_aanduiding := 'Probleem bij v_mld_melding_cust_telefoonnr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 17, v_mld_melding_cust_telefoonnr);
-- 18 - Flexprop mobielnr van melder/huurder
v_aanduiding := 'Probleem bij v_mld_melding_cust_mobielnr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 18, v_mld_melding_cust_mobielnr);
-- 19 - Flexprop email van melder/huurder
v_aanduiding := 'Probleem bij v_mld_melding_cust_email: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 19, v_mld_melding_cust_email);
-- 20 - Flexprop omschrijving van object
v_aanduiding := 'Probleem bij v_mld_melding_cust_object_oms: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 20, v_mld_melding_cust_object_oms);
-- 21 - Complexnummer
v_aanduiding := 'Probleem bij v_mld_opdr_complexnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 21, v_mld_opdr_complexnummer);
-- 22 - Pandnummer
v_aanduiding := 'Probleem bij v_mld_opdr_pandnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 22, v_mld_opdr_pandnummer);
-- 23 - VGEnummer
v_aanduiding := 'Probleem bij v_mld_opdr_VGEnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 23, v_mld_opdr_VGEnummer);
-- 24 - Flexprop memo/opdrachtomschrijving bij object
v_aanduiding := 'Probleem bij v_mld_melding_memo: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 24, v_mld_melding_memo);
-- 25 - Externe opdrachtnr / purchase Ordernr
v_aanduiding := 'Probleem bij v_mld_opdr_externnr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 25, v_mld_opdr_externnr);
-- 26 - Externe opdrachtnr / purchase Ordernr
v_aanduiding := 'Probleem bij v_mld_opdr_ordernr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 26, v_mld_opdr_ordernr);
-- 27 - Start opdrachtdatum
v_aanduiding := 'Probleem bij v_mld_opdr_datumbegin: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 27, v_mld_opdr_datumbegin);
-- 28 - Plan opdrachtdatum
v_aanduiding := 'Probleem bij v_mld_opdr_datumplan: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 28, v_mld_opdr_datumplan);
-- 29 - Einde opdrachtdatum
v_aanduiding := 'Probleem bij v_mld_opdr_einddatum: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 29, v_mld_opdr_einddatum);
--
-- 30 - Externe URL
v_aanduiding := 'Probleem bij v_mld_opdr_kenmerk_url: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 30, v_mld_opdr_kenmerk_url);
--
-- HIER KOMEN DE MATERIAAL REGELS
-- 31 - mld_opdr_mat_linenr
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_linenr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 31, v_mld_opdr_materiaal_linenr);
--
-- 32 - mld_opdr_mat_code
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_code: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 32, v_mld_opdr_materiaal_code);
--
-- 33 - v_mld_opdr_materiaal_omschr
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_omschr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 33, v_mld_opdr_materiaal_omschr);
--
--MARX#53353: LEDO uitbreiding
-- 34 - 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, 34, v_mld_opdr_materiaal_groep);
-- 35 - v_mld_opdr_materiaal_extra2 (element)
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_extra2: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 35, v_mld_opdr_materiaal_extra2);
-- 36 - v_mld_opdr_materiaal_extra4 (oorzaak)
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_extra4: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 36, v_mld_opdr_materiaal_extra4);
-- 37 - v_mld_opdr_materiaal_eenhcode (tbv SidB)
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_eenhcode: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 37, v_mld_opdr_materiaal_eenhcode);
-- 38 - v_mld_opdr_materiaal_eenheid
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_eenheid: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 38, v_mld_opdr_materiaal_eenheid);
--
-- 39 - v_mld_opdr_materiaal_prijs
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_prijs: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 39, v_mld_opdr_materiaal_prijs);
--
-- 40 - v_mld_opdr_materiaal_aantal
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_aantal: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 40, v_mld_opdr_materiaal_aantal);
--
-- 41 - v_mld_opdr_materiaal_btwperc
v_aanduiding := 'Probleem bij v_mld_opdr_materiaal_btwperc: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 41, v_mld_opdr_materiaal_btwperc);
--
-- 42 - 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, 42, 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, 'W', 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, 'W', v_aanduiding, v_errorhint || ' - Opdracht wordt overgeslagen');
v_ongeldig := 1;
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;
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, 'W', 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)||CHR(13));
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 (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 (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)||CHR(13));
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, 'W', 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, 'W', 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) > 20
THEN
v_mld_opdr_datumbegin := SUBSTR (v_mld_opdr_datumbegin, 1, 20);
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) > 20
THEN
v_mld_opdr_datumplan := SUBSTR (v_mld_opdr_datumplan, 1, 20);
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) > 20
THEN
v_mld_opdr_einddatum := SUBSTR (v_mld_opdr_einddatum, 1, 20);
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
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 := '?';
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Materiaal omschrijving is leeg', 'Omschrijving wordt gevuld met een [?] als markering dat materiaal onbekend is');
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
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_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_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_ax_opdrachten;
/
CREATE OR REPLACE PROCEDURE mar_update_ax_opdrachten (
p_import_key IN NUMBER
)
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_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_do_send_opdr 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);
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_PO_companyID NUMBER (10);
c_kenmerkopdr_key_URL NUMBER (10);
c_kenmerkopdr_key_opdr_soort NUMBER (10);
c_kenmerkopdr_key_opdr_type NUMBER (10);
c_kenmerkopdr_key_opdr_afspr NUMBER (10);
v_pos NUMBER(10);
-- 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;
BEGIN
v_count_tot := 0;
v_count_materiaal_tot := 0;
v_count_error := 0;
v_count_mat_error := 0;
--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_PO_companyID := 17;
c_kenmerkopdr_key_URL := 21;
c_kenmerkopdr_key_opdr_soort := 24;
c_kenmerkopdr_key_opdr_type := 25;
c_kenmerkopdr_key_opdr_afspr := 26;
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;
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;
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 (v_ax_company_id = rec_ax.prs_afdeling_naam)
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 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;
-- 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,
to_date(REPLACE(rec_ax.mld_opdr_datumbegin, 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
rec_ax.mld_melding_omschrijving,
v_mld_stdmelding_key,
to_date(REPLACE(COALESCE(rec_ax.mld_opdr_einddatum,'2099-12-31T00:00'), 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
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 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.
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;
-- 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.
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,
to_date(REPLACE(rec_ax.mld_opdr_datumbegin, 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
to_date(REPLACE(COALESCE(rec_ax.mld_opdr_einddatum,'2099-12-31T00:00'), 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
v_mld_opdr_bedrijfopdr_volgnr
) RETURNING mld_opdr_key INTO v_mld_opdr_key;
IF rec_ax.mld_opdr_datumplan IS NOT NULL
THEN
UPDATE mld_opdr
SET mld_opdr_plandatum = to_date(REPLACE(rec_ax.mld_opdr_datumplan, 'T', ' '),'YYYY-MM-DD hh24:mi:ss')
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#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#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));
-- 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
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_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)
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, safe_concat(safe_concat(rec_ax.mld_melding_omschrijving, CHR(10)), rec_ax.mld_melding_memo));
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!
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;
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)
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, safe_concat(safe_concat(rec_1_ax.mld_melding_omschrijving, CHR(10)), rec_1_ax.mld_melding_memo));
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;
fac.trackaction ('#ORDNEW', v_mld_opdr_key, v_prs_perslid_key, NULL, 'Opdracht is aangemaakt');
v_errorhint := 'Technisch adres / versturen van opdracht(key) ' || v_mld_opdr_key || ' is fout gegaan';
v_do_send_opdr := mar_send_mld_opdr_to_supplier(v_mld_opdr_key);
IF v_do_send_opdr = 1
THEN
mar_resend_mld_opdr_2_lev(v_mld_opdr_key, 1);
END IF;
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');
mar_annuleer_mld_opdr (v_mld_opdr_key, v_prs_perslid_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');
mar_wijzig_mld_opdr (v_mld_opdr_key, p_import_key);
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, 'W', v_aanduiding || ':' || v_errorhint, 'Opdracht is al bekend en wordt overgeslagen / niet bijgewerkt (B)');
END IF;
END IF;
-- Skip rec_ax omdat dezelfde IONR als is verwerkt
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', 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;
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),
''
);
fac.imp_writelog (p_import_key,
'S',
'Opdrachten: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Materiaal regels: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_materiaal_tot - v_count_mat_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Materiaal regels: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_mat_error),
''
);
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_update_ax_opdrachten;
/
-- 3c Import tbv Tobias-opdrachten
CREATE OR REPLACE PROCEDURE mar_import_tobias_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;
-- De importvelden:
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_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_object_oms VARCHAR2 (256);
v_mld_opdr_complexnummer VARCHAR2 (256);
v_mld_opdr_pandnummer VARCHAR2 (256);
v_mld_opdr_VGEnummer VARCHAR2 (256);
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);
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_opdrachten
WHERE fac_import_key = p_import_key;
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
-- v_bes_bestelopdr_id VARCHAR2 (256);
-- v_bes_srtdeel_nr VARCHAR2 (256);
-- v_serienummer VARCHAR2 (256);
-- v_datum VARCHAR2 (256);
-- 01 - AX Vendor Account nr (ax supplier id)
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, v_ax_supplier_id);
-- 02 - 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.
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, v_mld_melding_externnr);
-- 03 - Melding omschrijving
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, v_mld_melding_omschrijving);
-- 04 - Externe Company-id / company_id (Afdeling-code in Facilitor?)
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, v_prs_afdeling_naam);
-- 05 - Naam opzichter
v_aanduiding := 'Probleem bij v_mld_opdr_opzichter: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, v_mld_opdr_opzichter);
-- 06 - Flexprop huurdernaam / bewoners van woning
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, v_mld_melding_cust_name);
-- 07 - Flexprop straatnaam van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, v_mld_melding_cust_straat);
-- 08 - Flexprop huisnr van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, v_mld_melding_cust_huisnr);
-- 09 - Flexprop huisnr toevoeging van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, v_mld_melding_cust_huisnr2);
-- 10 - Flexprop postcode van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, v_mld_melding_cust_postcode);
-- 11 - Flexprop plaats van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 11, v_mld_melding_cust_plaats);
-- 12 - Flexprop telefoonnummer van melder/huurder
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 12, v_mld_melding_cust_telefoonnr);
-- 13 - Flexprop mobielnr van melder/huurder
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, v_mld_melding_cust_mobielnr);
-- 14 - Flexprop omschrijving van object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 14, v_mld_melding_cust_object_oms);
-- 15 - Complexnummer
v_aanduiding := 'Probleem bij v_mld_opdr_complexnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 15, v_mld_opdr_complexnummer);
-- 16 - Pandnummer
v_aanduiding := 'Probleem bij v_mld_opdr_pandnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 16, v_mld_opdr_pandnummer);
-- 17 - VGEnummer
v_aanduiding := 'Probleem bij v_mld_opdr_VGEnummer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 17, v_mld_opdr_VGEnummer);
-- 18 - Flexprop memo/opdrachtomschrijving bij object
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 18, v_mld_melding_memo);
-- 19 - Externe opdrachtnr / purchase Ordernr
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 19, v_mld_opdr_externnr);
-- 20 - Externe opdrachtnr / purchase Ordernr
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 20, v_mld_opdr_ordernr);
-- 21 - Start opdrachtdatum
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 21, v_mld_opdr_datumbegin);
-- 22 - Plan opdrachtdatum
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 22, v_mld_opdr_datumplan);
-- 23 - Einde opdrachtdatum
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 23, v_mld_opdr_einddatum);
--
v_aanduiding := SUBSTR(
'['
|| 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 := '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, 'W', v_aanduiding, v_errorhint || ' - Opdracht wordt overgeslagen');
v_ongeldig := 1;
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, 'W', 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)||CHR(13));
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 := '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 objectomschrijving';
v_mld_melding_cust_object_oms := TRIM (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)||CHR(13));
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, 'W', 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, 'W', 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) > 20
THEN
v_mld_opdr_datumbegin := SUBSTR (v_mld_opdr_datumbegin, 1, 20);
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) > 20
THEN
v_mld_opdr_datumplan := SUBSTR (v_mld_opdr_datumplan, 1, 20);
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) > 20
THEN
v_mld_opdr_einddatum := SUBSTR (v_mld_opdr_einddatum, 1, 20);
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;
-- 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,
ax_supplier_id,
mld_melding_externnr,
mld_melding_omschrijving,
prs_afdeling_naam,
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_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)
VALUES
(p_import_key,
SYSDATE,
v_ax_supplier_id,
v_mld_melding_externnr,
v_mld_melding_omschrijving,
v_prs_afdeling_naam,
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_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);
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_tobias_opdrachten;
/
CREATE OR REPLACE PROCEDURE mar_update_tobias_opdrachten (
p_import_key IN NUMBER
)
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_error NUMBER (10);
v_count NUMBER (10);
v_aantal NUMBER (10);
v_mld_melding_key NUMBER (10);
v_mld_opdr_key NUMBER (10);
v_mld_stdmelding_key NUMBER (10);
v_prs_perslid_key NUMBER (10);
v_prs_bedrijf_key NUMBER (10);
v_woco_prs_bedrijf_key NUMBER (10);
v_do_send_opdr 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_prs_bedrijfadres_url prs_bedrijfadres.prs_bedrijfadres_url%TYPE;
v_prs_bedrijfadres_xsl prs_bedrijfadres.prs_bedrijfadres_xsl%TYPE;
v_adres VARCHAR2 (100);
v_straatnaam VARCHAR2 (100);
v_huisnr VARCHAR2 (100);
v_huisnr_toev VARCHAR2 (100);
c_mld_typeopdr_key NUMBER(10);
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_object_oms NUMBER (10);
c_kenmerkopdr_key_locatie 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);
v_pos NUMBER(10);
-- Alle ingelezen AX opdrachten
CURSOR c_ax_opdrachten
IS
SELECT *
FROM mar_imp_ax_opdrachten
WHERE fac_import_key = p_import_key;
BEGIN
v_count_tot := 0;
v_count_error := 0;
--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_object_oms := 6;
c_kenmerkopdr_key_locatie := 11;
c_kenmerkopdr_key_opzichter := 13;
c_kenmerkopdr_key_complexnr := 14;
c_kenmerkopdr_key_pandnummer := 15;
c_kenmerkopdr_key_VGEnummer := 16;
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;
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;
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 (v_ax_company_id = rec_ax.prs_afdeling_naam)
THEN
-- Dit is een melding/opdracht van dit onderhoudsbedrijf, dus verder ...
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 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 NULL
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,
to_date(REPLACE(rec_ax.mld_opdr_datumbegin, 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
rec_ax.mld_melding_omschrijving,
v_mld_stdmelding_key,
to_date(REPLACE(COALESCE(rec_ax.mld_opdr_einddatum,'2099-12-31T00:00'), 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
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);
END IF;
-- Tobias (oud) geeft netjes de straat + huisnr + huisnr-toevoeging in 3 losse velden mee, Tobias (AX) niet, alles komt in 1 veld straat.
-- Dus als huisnr (of toevoeging) is gevuld (Tobias oud), dan plakken we evt. huisnr-toevoeging erachter.
-- Zo niet (Tobias AX), 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_object_oms, v_mld_melding_key, rec_ax.mld_melding_cust_object_omschr);
COMMIT;
-- Eerst checken of opdracht met externe opdrachtnummer al bestaat (bij deze of een andere melding), want dan niet aanmaken en (vooralsnog) ook niet updaten.
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;
IF v_mld_opdr_key IS NULL
THEN
-- Opdracht is nieuw, dus inserten...
-- 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) || ' niet gevonden, er is geen opdracht aangemaakt';
SELECT MAX(l_prs_bedrijf_key)
INTO v_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);
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;
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_prs_bedrijf_key, v_prs_perslid_key,
c_mld_typeopdr_key, 5, SUBSTR(rec_ax.mld_melding_omschrijving || CHR(10) || rec_ax.mld_melding_memo,1,4000),
to_date(REPLACE(rec_ax.mld_opdr_datumbegin, 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
to_date(REPLACE(COALESCE(rec_ax.mld_opdr_einddatum,'2099-12-31T00:00'), 'T', ' '),'YYYY-MM-DD hh24:mi:ss'),
v_mld_opdr_bedrijfopdr_volgnr
) RETURNING mld_opdr_key INTO v_mld_opdr_key;
IF rec_ax.mld_opdr_datumplan IS NOT NULL
THEN
UPDATE mld_opdr
SET mld_opdr_plandatum = to_date(REPLACE(rec_ax.mld_opdr_datumplan, 'T', ' '),'YYYY-MM-DD hh24:mi:ss')
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);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_opzichter, v_mld_opdr_key, rec_ax.mld_opdr_opzichter);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_complexnr, v_mld_opdr_key, rec_ax.mld_opdr_complexnummer);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_pandnummer, v_mld_opdr_key, rec_ax.mld_opdr_pandnummer);
mld.upsertopdrachtkenmerk (c_kenmerkopdr_key_VGEnummer, v_mld_opdr_key, rec_ax.mld_opdr_VGEnummer);
fac.trackaction ('#ORDNEW', v_mld_opdr_key, v_prs_perslid_key, NULL, 'Opdracht is aangemaakt');
v_errorhint := 'Technisch adres / versturen van opdracht(key) ' || v_mld_opdr_key || ' is fout gegaan';
v_do_send_opdr := mar_send_mld_opdr_to_supplier(v_mld_opdr_key);
IF v_do_send_opdr = 1
THEN
mar_resend_mld_opdr_2_lev(v_mld_opdr_key, 1);
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Opdracht bestaat al', 'Opdracht wordt overgeslagen');
END IF;
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;
END LOOP;
fac.imp_writelog (p_import_key,
'S',
'AX opdrachten: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'AX opdrachten: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
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_update_tobias_opdrachten;
/
-- 3d Import tbv Facilitor-opdrachten
CREATE OR REPLACE PROCEDURE mar_import_fclt_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_import_ax_opdrachten(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE mar_update_fclt_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_update_ax_opdrachten(p_import_key);
END;
/
--- MARX#48947: Koppeling REMS <--> Mareon
CREATE OR REPLACE PROCEDURE mar_import_rems_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_import_ax_opdrachten(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE mar_update_rems_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_update_ax_opdrachten(p_import_key);
END;
/
-- MARX#55436: POC: Koppeling Dispatch <--> Mareon
CREATE OR REPLACE PROCEDURE mar_import_disp_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_import_ax_opdrachten(p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE mar_update_disp_opdracht (
p_import_key IN NUMBER
)
AS
BEGIN
mar_update_ax_opdrachten(p_import_key);
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
CREATE OR REPLACE VIEW mar_v_new_opdr_4_fclt
(prs_perslid_apikey, mld_opdr_key, mld_opdr_key_fclt, mld_opdr_externnr)
AS
SELECT 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_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, fac_srtnotificatie_key, fac_tracking_datum, mld_opdr_kosten)
AS
SELECT 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, 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;
-- View van opdrachten met een opmerking sinds de 'laatste' keer.
CREATE OR REPLACE VIEW mar_v_opdr_opmerking_ax
(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_apikey, mld_opdr_key, ax_company_id, mld_melding_externnr, mld_opdr_externnr, mld_opdr_ordernr, mld_opdr_opmerking
FROM mar_v_opdr_info_4_ax
WHERE mld_opdr_opmerking IS NOT NULL;
-- View van afgemelde opdrachten sinds de 'laatste' keer.
CREATE OR REPLACE VIEW mar_v_opdr_afgemeld_ax
(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_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
(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_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
(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_apikey, mld_opdr_key, ax_company_id, mld_melding_externnr, mld_opdr_externnr, mld_opdr_ordernr, fac_tracking_datum, mld_opdr_opmerking, 'ORDACP', NULL, mld_opdr_opmerking
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
(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_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
(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_apikey, mld_opdr_key, ax_company_id, mld_melding_externnr, mld_opdr_externnr, mld_opdr_ordernr, mld_opdr_plandatum, mld_opdr_opmerking
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
(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_apikey, mld_opdr_key, ax_company_id, mld_melding_externnr, mld_opdr_externnr, mld_opdr_ordernr, mld_opdr_plandatum2, mld_opdr_opmerking
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
(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_apikey, mld_opdr_key, ax_company_id, mld_melding_externnr, mld_opdr_externnr, mld_opdr_ordernr, mld_opdr_opmerking
FROM mar_v_opdr_info_4_ax
WHERE mld_statusopdr_key = 8
AND mld_opdr_halted = 0
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)
CREATE OR REPLACE VIEW mar_v_opdr_onderbroken_ax
(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 DISTINCT s.prs_perslid_apikey, s.mld_opdr_key, s.ax_company_id, s.mld_melding_externnr, s.mld_opdr_externnr, s.mld_opdr_ordernr, s.mld_opdr_opmerking, ud.fac_usrdata_code
FROM mar_v_opdr_info_4_ax s, mld_kenmerkopdr ko, fac_usrdata ud
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 ud.fac_usrdata_key = fac.safe_to_number(ko.mld_kenmerkopdr_waarde);
-- MARX#58812: Bijlage vanuit opdrachtNeMer naar opdrachtGeVer
-- Punt is dat in DB niet wordt geregistreerd of/dat er bijlagen aanwezig zijn, erg jammer.
-- Of en zo ja welke bijlagen er zijn, laten we dan in de Mareon adapter bepalen (via API2).
-- Wel wordt de srtnotificatie-code ORDUPD getrackd in geval van een toevoeging van flex-bijlage, zowel via UI als API.
CREATE OR REPLACE VIEW mar_v_opdr_mogelijk_bijlagen
(prs_perslid_apikey, mld_opdr_key, mld_opdr_key_fclt, mld_opdr_externnr)
AS
SELECT DISTINCT s.prs_perslid_apikey, s.mld_opdr_key, s.mld_opdr_ordernr, s.mld_opdr_externnr
FROM mar_v_opdr_info_4_ax s
WHERE s.fac_srtnotificatie_key = (select fac_srtnotificatie_key from fac_srtnotificatie where fac_srtnotificatie_code = 'ORDUPD');
--------------------------------------------------------------------------------------------
-- MARX51522: Uitbreiding REMS - Mareon: bijlage(foto's) in de opdrachtverstrekking
CREATE OR REPLACE VIEW mar_v_opdr_data
(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_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;
/
----------------------------------------------------------------------------------------------------------------------------------------------------------
-- 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;3;4;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;0;0;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
-- v_kenmerk18: 34
-- v_kenmerk19: 35
-- 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);
BEGIN
p_broc_key := NULL;
BEGIN
IF (UPPER(SUBSTR(p_broc_nr,1,3)) = 'MAR')
THEN
-- 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 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 || m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr = p_broc_nr;
-- 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#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;
/
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, 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);
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;
FOR rc IN lev_ordernrs
LOOP
p_mldbes_opdr_key := check_mareon_nr_is_oke(rc.ordernr, v_prs_perslid_key, 1);
IF p_mldbes_opdr_key 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);
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...
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;
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;
ELSE
-- Is die nog steeds null, dan gaan we uiteindelijk het contractnummer als verplichting gebruiken....
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;
ELSE
-- 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,
'W',
'MAReon-nr ' || rc.ordernr || ' van leverancier ' || rc.leveranciernr || ' is ongeldig: factuur wordt niet ingelezen (regel ' || rc.fac_imp_file_index || ')',
'Factuurnummer:' || rc.factuurnr
);
END IF;
END IF;
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_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
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.docid IS NOT NULL OR b.prs_bedrijf_pdfverplicht = 0)
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
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.docid IS NOT NULL OR b.prs_bedrijf_pdfverplicht = 0)
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
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.docid IS NOT NULL OR b.prs_bedrijf_pdfverplicht = 0)
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_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;
-- 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 'Factuur versturen?'
c_kenmerk_key_versturen NUMBER(10) := 9;
-- 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;
v_kenmerk6 VARCHAR2 (255);
v_prs_kostensoort_key NUMBER(10);
v_g_bedrag NUMBER(14,2);
BEGIN
-- 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)||CHR(13));
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_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;
-- 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
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rc.fin_factuur_key, c_kenmerk_key_versturen, 1);
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
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rc.fin_factuur_key, c_kenmerk_key_versturen, 1);
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
INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
VALUES (rc.fin_factuur_key, c_kenmerk_key_versturen, 1);
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.
-- MARX#
-- 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)
CREATE OR REPLACE VIEW mar_v_mld_factuur_ax (
prs_perslid_key,
prs_perslid_apikey,
prs_woco_naam,
prs_woco_adres,
prs_woco_postcode,
prs_woco_plaats,
prs_woco_gln,
prs_woco_axnr,
prs_woco_close_opdracht,
prs_woco_factuur_bron,
prs_woco_adres_in_factuur,
fin_factuur_key,
opdracht_id,
fin_factuur_boekdatum,
fin_factuur_datum,
fin_factuur_boekmaand,
fin_factuur_nr,
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_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_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_aanmaak
)
AS
SELECT DISTINCT
woco.prs_perslid_key,
woco.prs_perslid_apikey,
woco.prs_bedrijf_naam,
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),
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),
(SELECT prs_bedrijf_adres_in_factuur FROM mar_v_bedrijf_kenmerken bc WHERE bc.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_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_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,
ROUND(fr.fin_factuurregel_btw,2),
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_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,
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,
fac_tracking t,
fac_srtnotificatie sn
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 t.fac_tracking_refkey = f.fin_factuur_key
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = woco.prs_perslid_key))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_cnt_factuur_ax (
prs_perslid_key,
prs_perslid_apikey,
prs_woco_naam,
prs_woco_adres,
prs_woco_postcode,
prs_woco_plaats,
prs_woco_gln,
prs_woco_axnr,
prs_woco_close_opdracht,
prs_woco_factuur_bron,
prs_woco_adres_in_factuur,
fin_factuur_key,
opdracht_id,
fin_factuur_boekdatum,
fin_factuur_datum,
fin_factuur_boekmaand,
fin_factuur_nr,
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_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_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_aanmaak
)
AS
SELECT DISTINCT
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),
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(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)),
0,
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_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_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,
ROUND(fr.fin_factuurregel_btw,2),
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_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,
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,
fac_tracking t,
fac_srtnotificatie sn
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 t.fac_tracking_refkey = f.fin_factuur_key
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key)))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco3.prs_perslid_key, woco2.prs_perslid_key)))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_bes_factuur_ax (
prs_perslid_key,
prs_perslid_apikey,
prs_woco_naam,
prs_woco_adres,
prs_woco_postcode,
prs_woco_plaats,
prs_woco_gln,
prs_woco_axnr,
prs_woco_close_opdracht,
prs_woco_factuur_bron,
prs_woco_adres_in_factuur,
fin_factuur_key,
opdracht_id,
fin_factuur_boekdatum,
fin_factuur_datum,
fin_factuur_boekmaand,
fin_factuur_nr,
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_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_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_aanmaak
)
AS
SELECT DISTINCT
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),
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(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)),
(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)),
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_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_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,
ROUND(fr.fin_factuurregel_btw,2),
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_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,
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,
fac_tracking t,
fac_srtnotificatie sn
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 t.fac_tracking_refkey = f.fin_factuur_key
AND (
(
(t.fac_tracking_key > (SELECT sync_trackkey_lasttime FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key)))
AND
(t.fac_tracking_key <= (SELECT sync_trackkey_now FROM mar_v_sync_ax s WHERE s.prs_perslid_key = COALESCE(woco.prs_perslid_key,woco2.prs_perslid_key)))
)
OR
(sn.fac_srtnotificatie_code = 'CUST04')
)
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'factuur'
AND versturen_okee.fin_factuur_key = f.fin_factuur_key
AND versturen_okee.fin_kenmerk_key = 9
AND versturen_okee.fin_kenmerkfactuur_waarde = 1
AND fin_factuur_statuses_key IN (2,6);
CREATE OR REPLACE VIEW mar_v_factuur_ax
AS
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;
-- 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#59862: Tobias 365 - Mareon
-- Nieuwe functie omdat deze code vanuit verschillende plekken aangeroepen kan worden....
-- mbmb
CREATE OR REPLACE FUNCTION mar_post_factuur_verwerking (p_perslid_key IN NUMBER, p_fin_factuur_key IN NUMBER, p_fin_factuur_succes_verwerkt IN NUMBER, p_extra_omschr IN VARCHAR2)
RETURN VARCHAR2
IS
v_result VARCHAR2(1000);
v_prs_woco_close_opdracht NUMBER(10);
v_mld_opdr_key NUMBER(10);
l_omschr VARCHAR2(4000);
BEGIN
BEGIN
v_result := NULL;
IF (p_fin_factuur_succes_verwerkt = 1)
THEN
-- Factuur is door ERP opdrachtgever goed verwerkt
v_result := 'UPDATE factuur met status 7 is mislukt';
UPDATE fin_factuur
SET fin_factuur_statuses_key = 7
WHERE fin_factuur_key = p_fin_factuur_key;
v_result := 'INSERT into tracking FINVER mislukt';
fac.trackaction ('#FINVER', p_fin_factuur_key, p_perslid_key, NULL, 'Factuur is verwerkt');
v_result := 'SELECT v_prs_woco_close_opdracht mislukt';
SELECT COALESCE(MAX((SELECT prs_bedrijf_close_opdracht FROM mar_v_bedrijf_kenmerken bc WHERE bc.prs_bedrijf_key = woco.prs_bedrijf_key)), 0), MAX(o.mld_opdr_key)
INTO v_prs_woco_close_opdracht, v_mld_opdr_key
FROM fin_factuur f, mld_opdr o, mld_melding m, mar_v_woco_perslid woco
WHERE f.fin_factuur_key = p_fin_factuur_key
AND f.mld_opdr_key = o.mld_opdr_key
AND o.mld_melding_key = m.mld_melding_key
AND m.prs_perslid_key = woco.prs_perslid_key;
IF v_prs_woco_close_opdracht = 1
THEN
IF v_mld_opdr_key IS NOT NULL
THEN
-- Eerst afmelden, daarna op verwerkt.
-- Als die al afgemeld was, dan is deze call een dummy call en gebeurt verder niets.
v_result := 'mld setopdrachtstatus met 6 mislukt';
mld.setopdrachtstatus (v_mld_opdr_key, 6, p_perslid_key);
-- Als die al verwerkt was, dan is deze call een dummy call en gebeurt verder niets.
v_result := 'mld setopdrachtstatus met 7 mislukt';
mld.setopdrachtstatus (v_mld_opdr_key, 7, p_perslid_key);
END IF;
END IF;
ELSE
-- Factuur is door ERP opdrachtgever NIET (goed) verwerkt
IF fac.gettrackingdate('CUST04', p_fin_factuur_key) IS NULL
THEN
-- Alleen eenmalig een CUST04 toevoegen is voldoende, we willen de tracking niet onnodig volbouwen)
l_omschr := SUBSTR('Factuur kan NIET verwerkt worden: ' || p_extra_omschr, 1, 2048);
fac.trackaction ('#CUST04', p_fin_factuur_key, p_perslid_key, NULL, l_omschr);
END IF;
END IF;
COMMIT;
RETURN NULL;
EXCEPTION
WHEN OTHERS
THEN
RETURN v_result;
END;
END;
/
-- Algemeen: sync status...
CREATE OR REPLACE PROCEDURE mar_import_ax_sync (
p_import_key IN NUMBER
)
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;
/
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;
CURSOR c_exporteerde_facturen(p_prs_perslid_key NUMBER)
IS
SELECT DISTINCT fin_factuur_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_ax_sync_mode VARCHAR2(256);
v_prs_perslid_key NUMBER(10);
v_woco_prs_bedrijf_key NUMBER(10);
v_datum_logfile VARCHAR2(100);
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 := '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;
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 = v_prs_perslid_key;
FOR rec_ax IN c_ax_sync
LOOP
BEGIN
-- Eenmalig, dus alleen 1e keer (is al bij inlezen ook al wel geregeld).
IF (v_count_tot = 0)
THEN
v_count_tot := v_count_tot + 1;
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
-- v_ax_sync_mode heeft de volgende mogelijke waarden:
-- 0 = start van de sync
-- 1 = einde van de sync (AX2009/2012/REMS/Facilitor)
-- 2 = einde van de sync (AX365)
v_ax_sync_mode := rec_ax.sync_mode;
IF (v_ax_sync_mode IS NOT NULL)
THEN
IF (v_ax_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 + 7),'DD-MM-YYYY HH24:MI:SS') FROM mar_v_sync_ax s WHERE s.prs_perslid_key = v_prs_perslid_key)
WHERE fac_usrtab_key = c_fac_usrtab_key
AND fac_usrdata_upper = UPPER('$SYNC_DATE_NOW' || '_' || v_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.
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 = v_prs_perslid_key)
)
WHERE fac_usrtab_key = c_fac_usrtab_key
AND fac_usrdata_upper = UPPER('$SYNC_TRACKKEY_NOW' || '_' || v_prs_perslid_key)
AND fac_usrdata_verwijder IS NULL;
END IF;
-- EINDE SYNC
IF (v_ax_sync_mode = '1')
THEN
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365)
-- voor de ERP's (AX2009/2012/REMS/Facilitor) die sync-mode met 1 aanroepen, worden alle facturen conform cursor c_exporteerde_facturen onvoorwaardelijk op verwerkt gezet....
-- voor de ERP's (AX365) die sync mode met 2 aanroepen, wordt deze stap niet hier gedaan, maar in de Mareon sync zelf geregeld, omdat dit afhankelijk is gemaakt van de response uit AX365.
-- In cursor c_exporteerde_facturen zitten ook eventueel de records van andere woco's...
FOR rec_fac IN c_exporteerde_facturen(v_prs_perslid_key)
LOOP
BEGIN
v_errorhint := mar_post_factuur_verwerking (v_prs_perslid_key, rec_fac.fin_factuur_key, 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;
END IF;
-- MARX#59862: Tobias 365 - Mareon: Bij Tobias AX365 wordt sync-mode = 2 gestuurd (AX365).
-- Voor alle ERP's (mode =1 of mode = 2) moet onderstaande volgen...
IF ((v_ax_sync_mode = '1') OR (v_ax_sync_mode = '2'))
THEN
v_errorhint := 'SYNC DATE LASTTIME mislukt';
UPDATE fac_usrdata ud1
SET ud1.fac_usrdata_omschr = (SELECT to_char(sync_date_now,'DD-MM-YYYY HH24:MI:SS') FROM mar_v_sync_ax s WHERE s.prs_perslid_key = v_prs_perslid_key)
WHERE ud1.fac_usrtab_key = c_fac_usrtab_key
AND ud1.fac_usrdata_upper = UPPER('$SYNC_DATE_LASTTIME' || '_' || v_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 = v_prs_perslid_key)
WHERE ud1.fac_usrtab_key = c_fac_usrtab_key
AND ud1.fac_usrdata_upper = UPPER('$SYNC_TRACKKEY_LAST' || '_' || v_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, v_prs_perslid_key, NULL, 'Kenmerk $MAR_SYNC_SENDLOGFILE met waarde ' || v_datum_logfile || ' door SYNC gewist');
END IF;
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;
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_aanduiding || 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_STATUSES_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;
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---
--- 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: '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_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_mail2api_folder VARCHAR2 (200);
v_mailtoken VARCHAR2 (100);
v_fac_email_setting_attachpath VARCHAR2(1000);
v_extensie VARCHAR2(20);
BEGIN
SELECT MAX(prs_bedrijf_naam)
INTO v_prs_bedrijf_naam
FROM prs_bedrijf
WHERE prs_bedrijf_key = v_prs_bedrijf_key;
SELECT MAX(ud.fac_usrdata_omschr)
INTO v_mail2api_folder
FROM fac_usrdata ud
WHERE ud.fac_usrtab_key = 1
AND ud.fac_usrdata_code = '$MAIL2API_FOLDER'
AND ud.fac_usrdata_verwijder IS NULL;
-- 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 ('UBL','SALES005','INSBOU004', 'INSBOU003', 'PDF') AND v_mail2api_folder IS NOT NULL
THEN
-- fac_email_setting_user wordt runtime bepaalt aan de hand van prefix factuur, gevolgd door de unieke prs_bedrijf_key van de woco, gevolgd door een random 16-teken string.
v_mailtoken := 'factuur_' || v_prs_bedrijf_woco_key || '_' || dbms_random.STRING('x',16);
-- fac_email_setting_attachpath is afhankelijk van XML of PDF.
-- Bij XML gebruiken we een absoluut pad (v_mail2api_folder, dwz setting uit eigen tabel), die eindigt op een backslash \, althans dat moet!
-- Bij PDF gebruiken we eem relatief pad
IF v_prs_overeenkomst_nr = 'PDF'
THEN
v_fac_email_setting_attachpath := '@/cust/marx/export/bctadapter.asp?myapikey=' || v_prs_perslid_apikey || '&' || 'from={0}' || '&' || 'to={1}' || '&' || 'subject={2}' || '&' || 'filename={filename}';
v_extensie := 'pdf';
ELSE
SELECT v_mail2api_folder || DECODE (v_prs_overeenkomst_nr, 'UBL', 'FIN_FACTUUR_UBL', 'SALES005', 'FIN_FACTUUR_SALES005_1.0', 'INSBOU004', 'FIN_FACTUUR_SIDB4', 'INSBOU003', 'FIN_FACTUUR_SIDB') || '\' || v_prs_perslid_apikey || '\'
INTO v_fac_email_setting_attachpath
FROM DUAL;
v_extensie := 'xml';
END IF;
INSERT INTO fac_email_setting (fac_email_setting_user, fac_email_setting_frommode, fac_email_setting_attachpath, fac_email_setting_attachext)
SELECT v_mailtoken, 0, v_fac_email_setting_attachpath, v_extensie 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;
/
CREATE OR REPLACE PROCEDURE marx_post_update_leveranciers (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,
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_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_mail2api_folder VARCHAR2 (200);
v_mailtoken VARCHAR2 (100);
v_fac_email_setting_attachpath VARCHAR2(1000);
v_extensie VARCHAR2(20);
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 (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;
-- 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 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;
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;
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, 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
-- 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);
END ;
/
----------------------------------------------------------- Idem voor de leveranciers bestelopdrachten -----------------------------------------------------------------------
CREATE OR REPLACE PROCEDURE marx_import_bes_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, 'L');
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_bes_leveranciers (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_leveranciers (p_import_key);
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);
-- 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 ;
/
----------------------------------------------------------- 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, 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;
-- 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;
-- 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 warning 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;
-- 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_btw_code 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 || ']';
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;
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).
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_perslid noti
WHERE noti.prs_perslid_key = 241
AND INSTR(noti.prs_perslid_email, '@') > 0
AND s.sync_date_lasttime < SYSDATE - (select GREATEST(COALESCE (mar_delta_connecttime_bedrijf * 24 +2, 2), 2)/24 from mar_v_delta_connecttime where prs_bedrijf_key = b.prs_bedrijf_key)
AND s.sync_date_lasttime > SYSDATE - 24/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 s.sync_date_lasttime < SYSDATE - 1
AND s.sync_date_lasttime > SYSDATE - 3
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 - 1
AND s.sync_date_lasttime > SYSDATE - 3
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;
-- 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 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 = 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,
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
(SELECT bb.prs_bedrijf_bedrijf_startdatum FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = b_woco.prs_bedrijf_key
AND bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key) <= TRUNC(fac.gettrackingdate('ORDNEW', o.mld_opdr_key))
AND
(SELECT TRUNC(COALESCE(bb.prs_bedrijf_bedrijf_einddatum, o.mld_opdr_verzonden)) FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = b_woco.prs_bedrijf_key
AND bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key) >= TRUNC(fac.gettrackingdate('ORDNEW', o.mld_opdr_key))
THEN 1
ELSE 0
END mld_opdr_is_premium,
(SELECT MIN(bb.prs_bedrijf_bedrijf_startdatum)
FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key2 = b_lev.prs_bedrijf_key) prs_bedrijf_premium_start,
bp.prs_bedrijf_premium_eind,
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, 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 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,
(SELECT COALESCE(bb.prs_bedrijf_bedrijf_fee2,0)
FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = prs_bedrijf_key_opdrachtgever
AND bb.prs_bedrijf_key2 = prs_bedrijf_key_opdrachtnemer) prs_bedrijf_premium_tarief,
(SELECT COALESCE(bb.prs_bedrijf_bedrijf_fee2,0)
FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = prs_bedrijf_key_opdrachtgever
AND bb.prs_bedrijf_key2 = prs_bedrijf_key_opdrachtnemer) * mld_opdr_is_premium mld_opdr_is_premium_bedrag,
prs_bedrijf_premium_start,
prs_bedrijf_premium_eind,
prs_bedrijfadres_url,
(SELECT COALESCE(bb.prs_bedrijf_bedrijf_fee1,0)
FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = prs_bedrijf_key_opdrachtgever
AND bb.prs_bedrijf_key2 = prs_bedrijf_key_opdrachtnemer) prs_woco_premium_tarief,
(SELECT COALESCE(bb.prs_bedrijf_bedrijf_fee1,0)
FROM prs_bedrijf_bedrijf bb
WHERE bb.prs_bedrijf_key1 = prs_bedrijf_key_opdrachtgever
AND bb.prs_bedrijf_key2 = prs_bedrijf_key_opdrachtnemer) * mld_opdr_is_premium mld_opdr_woco_premium_bedrag
FROM mar_v_tmp_opdr_woco_x_lev;
-- 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 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 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),
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;
-- 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 (+);
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN ----
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-- 3c Import tbv AX-bestellingen
CREATE OR REPLACE PROCEDURE mar_import_ax_bestelling (
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;
-- De importvelden:
gln_supplier VARCHAR2 (256);
gln_buyer VARCHAR2 (256);
bes_afleveradres_code VARCHAR2 (256);
bes_afleveradres_straat_huisnr VARCHAR2 (256);
bes_afleveradres_postcode VARCHAR2 (256);
bes_afleveradres_plaats VARCHAR2 (256);
bes_bestelling_memo VARCHAR2 (1024);
bes_ordernr VARCHAR2 (256);
bes_aflever_datum VARCHAR2 (256);
bes_orderline_nr VARCHAR2 (256);
bes_orderline_gtin VARCHAR2 (256);
bes_orderline_art_code VARCHAR2 (256);
bes_orderline_art_descr VARCHAR2 (2048);
bes_orderline_art_eenheid VARCHAR2 (256);
bes_orderline_art_aantal VARCHAR2 (256);
bes_orderline_art_prijs VARCHAR2 (256);
bes_orderline_art_btw VARCHAR2 (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_bestelling
WHERE fac_import_key = p_import_key;
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 - GLN Supplier
v_aanduiding := 'Probleem bij gln_supplier: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 1, gln_supplier);
-- 02 - GLN Buyer
v_aanduiding := 'Probleem bij gln_buyer: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 2, gln_buyer);
-- 03 - bes_afleveradres_code
v_aanduiding := 'Probleem bij bes_afleveradres_code: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 3, bes_afleveradres_code);
-- 04 - bes_afleveradres_straat_huisnr
v_aanduiding := 'Probleem bij bes_afleveradres_straat_huisnr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 4, bes_afleveradres_straat_huisnr);
-- 05 - bes_afleveradres_postcode
v_aanduiding := 'Probleem bij bes_afleveradres_postcode: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 5, bes_afleveradres_postcode);
-- 06 - bes_afleveradres_plaats
v_aanduiding := 'Probleem bij bes_afleveradres_plaats: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 6, bes_afleveradres_plaats);
-- 07 - bes_bestelling_memo
v_aanduiding := 'Probleem bij bes_bestelling_memo: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 7, bes_bestelling_memo);
-- 08 - bes_ordernr
v_aanduiding := 'Probleem bij bes_ordernr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 8, bes_ordernr);
-- 09 - bes_aflever_datum
v_aanduiding := 'Probleem bij bes_aflever_datum: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 9, bes_aflever_datum);
-- 10 - bes_orderline_nr
v_aanduiding := 'Probleem bij bes_orderline_nr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 10, bes_orderline_nr);
-- 11 - bes_orderline_gtin
v_aanduiding := 'Probleem bij bes_orderline_gtin: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 11, bes_orderline_gtin);
-- 12 - bes_orderline_art_code
v_aanduiding := 'Probleem bij bes_orderline_art_code: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 12, bes_orderline_art_code);
-- 13 - bes_orderline_art_descr
v_aanduiding := 'Probleem bij bes_orderline_art_descr: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 13, bes_orderline_art_descr);
-- 14 - bes_orderline_art_eenheid
v_aanduiding := 'Probleem bij bes_orderline_art_eenheid: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 14, bes_orderline_art_eenheid);
-- 15 - bes_orderline_art_aantal
v_aanduiding := 'Probleem bij bes_orderline_art_aantal: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 15, bes_orderline_art_aantal);
-- 16 - bes_orderline_art_prijs
v_aanduiding := 'Probleem bij bes_orderline_art_prijs: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 16, bes_orderline_art_prijs);
-- 17 - bes_orderline_art_btw
v_aanduiding := 'Probleem bij bes_orderline_art_btw: ';
fac.imp_getfield_nr (v_newline, c_fielddelimitor, 17, bes_orderline_art_btw);
--
v_aanduiding := SUBSTR(
'['
|| gln_supplier
|| '|'
|| gln_buyer
|| '|'
|| bes_ordernr
|| '|'
|| bes_orderline_nr
|| '|'
|| bes_orderline_gtin
|| '|'
|| bes_orderline_art_code
|| '|'
|| bes_orderline_art_aantal
|| '] ', 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 (gln_supplier) = 'GLN_SUPPLIER'
AND UPPER (gln_buyer) = 'GLN_BUYER'
AND UPPER (bes_afleveradres_code) = 'BES_AFLEVERADRES_CODE'
AND UPPER (bes_ordernr) = 'BES_ORDERNR'
THEN
header_is_valid := 1;
END IF;
ELSE
v_count_tot := v_count_tot + 1;
-- Controleer alle veldwaarden
--
v_errorhint := 'Ongeldig gln_supplier';
gln_supplier := TRIM (gln_supplier);
IF (gln_supplier IS NOT NULL)
THEN
IF LENGTH (gln_supplier) > 20
THEN
gln_supplier := SUBSTR (gln_supplier, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'gln_supplier te lang', 'Afgebroken tot [' || gln_supplier || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Opdracht wordt overgeslagen');
v_ongeldig := 1;
END IF;
--
v_errorhint := 'Ongeldig gln_buyer';
gln_buyer := TRIM (gln_buyer);
IF (gln_buyer IS NOT NULL)
THEN
IF LENGTH (gln_buyer) > 20
THEN
gln_buyer := SUBSTR (gln_buyer, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'gln_buyer te lang', 'Afgebroken tot [' || gln_buyer || ']' );
END IF;
ELSE
-- GLN Opdrachtgever is niet perse verplicht om mee te geven (staat ook in Mareon geregistreerd namelijk, deze nemen we over.
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - GLN opdrachtgever ontbreekt.');
END IF;
--
--
v_errorhint := 'Ongeldig bes_afleveradres_code';
bes_afleveradres_code := TRIM (bes_afleveradres_code);
IF (bes_afleveradres_code IS NOT NULL)
THEN
IF LENGTH (bes_afleveradres_code) > 50
THEN
bes_afleveradres_code := SUBSTR (bes_afleveradres_code, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_afleveradres_code te lang', 'Afgebroken tot [' || bes_afleveradres_code || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_afleveradres_straat_huisnr';
IF (bes_afleveradres_straat_huisnr IS NOT NULL)
THEN
IF LENGTH (bes_afleveradres_straat_huisnr) > 50
THEN
bes_afleveradres_straat_huisnr := SUBSTR (bes_afleveradres_straat_huisnr, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_afleveradres_straat_huisnr te lang', 'Afgebroken tot [' || bes_afleveradres_straat_huisnr || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_afleveradres_postcode';
IF (bes_afleveradres_postcode IS NOT NULL)
THEN
IF LENGTH (bes_afleveradres_postcode) > 10
THEN
bes_afleveradres_postcode := SUBSTR (bes_afleveradres_postcode, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_afleveradres_postcode te lang', 'Afgebroken tot [' || bes_afleveradres_postcode || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_afleveradres_plaats';
IF (bes_afleveradres_plaats IS NOT NULL)
THEN
IF LENGTH (bes_afleveradres_plaats) > 50
THEN
bes_afleveradres_plaats := SUBSTR (bes_afleveradres_plaats, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_afleveradres_plaats te lang', 'Afgebroken tot [' || bes_afleveradres_plaats || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_bestelling_memo';
IF (bes_bestelling_memo IS NOT NULL)
THEN
bes_bestelling_memo := replace(bes_bestelling_memo, '@@',CHR (10)||CHR(13));
IF LENGTH (bes_bestelling_memo) > 320
THEN
bes_bestelling_memo := SUBSTR (bes_bestelling_memo, 1, 320);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Memo omschrijving te lang', 'memo wordt afgebroken tot 320 tekens' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_ordernr';
IF (bes_ordernr IS NOT NULL)
THEN
IF LENGTH (bes_ordernr) > 50
THEN
bes_ordernr := SUBSTR (bes_ordernr, 1, 50);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_ordernr te lang', 'Afgebroken tot [' || bes_ordernr || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_aflever_datum';
IF (bes_aflever_datum IS NOT NULL)
THEN
IF LENGTH (bes_aflever_datum) > 20
THEN
bes_aflever_datum := SUBSTR (bes_aflever_datum, 1, 20);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_aflever_datum te lang', 'Afgebroken tot [' || bes_aflever_datum || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_nr';
IF (bes_orderline_nr IS NOT NULL)
THEN
IF LENGTH (bes_orderline_nr) > 10
THEN
bes_orderline_nr := SUBSTR (bes_orderline_nr, 1, 10);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_nr te lang', 'Afgebroken tot [' || bes_orderline_nr || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_gtin';
IF (bes_orderline_gtin IS NOT NULL)
THEN
IF LENGTH (bes_orderline_gtin) > 32
THEN
bes_orderline_gtin := SUBSTR (bes_orderline_gtin, 1, 32);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_gtin te lang', 'Afgebroken tot [' || bes_orderline_gtin || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_code';
IF (bes_orderline_art_code IS NOT NULL)
THEN
IF LENGTH (bes_orderline_art_code) > 32
THEN
bes_orderline_art_code := SUBSTR (bes_orderline_art_code, 1, 32);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_code te lang', 'Afgebroken tot [' || bes_orderline_art_code || ']' );
END IF;
END IF;
v_errorhint := 'Zowel bes_orderline_gtin als bes_orderline_art_code ontbreekt: mag niet';
-- Maar dit komt niet voor, want AX stuurt altijd een GTIN code mee, als die niet is ingevuld in TobiasAX wordt 14x0 (00000000000000) gestuurd. Betekent iets als leeg/onbekend.
-- Er is met Emmen afgesproken dat of GTIN (<>14x0) of artikelcode v.d. leverancier gevuld moet zijn voor een juiste werking.
IF (bes_orderline_gtin IS NULL AND bes_orderline_art_code IS NULL)
THEN
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Opdracht wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_descr';
IF (bes_orderline_art_descr IS NOT NULL)
THEN
IF LENGTH (bes_orderline_art_descr) > 100
THEN
bes_orderline_art_descr := SUBSTR (bes_orderline_art_descr, 1, 100);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_descr te lang', 'Afgebroken tot [' || bes_orderline_art_descr || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_eenheid';
IF (bes_orderline_art_eenheid IS NOT NULL)
THEN
IF LENGTH (bes_orderline_art_eenheid) > 30
THEN
bes_orderline_art_eenheid := SUBSTR (bes_orderline_art_eenheid, 1, 30);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_eenheid te lang', 'Afgebroken tot [' || bes_orderline_art_eenheid || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_aantal';
IF (COALESCE(bes_orderline_art_aantal,0) <> 0)
THEN
IF LENGTH (bes_orderline_art_aantal) > 5
THEN
bes_orderline_art_aantal := SUBSTR (bes_orderline_art_aantal, 1, 5);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_aantal te lang', 'Afgebroken tot [' || bes_orderline_art_aantal || ']' );
END IF;
ELSE
fac.imp_writelog (p_import_key, 'W', v_aanduiding, v_errorhint || ' - Aantal is leeg of 0. Opdrachtregel wordt overgeslagen');
v_ongeldig := 1;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_prijs';
IF (bes_orderline_art_prijs IS NOT NULL)
THEN
IF LENGTH (bes_orderline_art_prijs) > 8
THEN
bes_orderline_art_prijs := SUBSTR (bes_orderline_art_prijs, 1, 8);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_prijs te lang', 'Afgebroken tot [' || bes_orderline_art_prijs || ']' );
END IF;
END IF;
v_errorhint := 'Ongeldig bes_orderline_art_btw';
IF (bes_orderline_art_btw IS NOT NULL)
THEN
IF LENGTH (bes_orderline_art_btw) > 3
THEN
bes_orderline_art_btw := SUBSTR (bes_orderline_art_btw, 1, 3);
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'bes_orderline_art_btw te lang', 'Afgebroken tot [' || bes_orderline_art_btw || ']' );
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_bestelling';
INSERT INTO mar_imp_ax_bestelling
(fac_import_key,
mar_imp_ax_bestelling_datum,
gln_supplier,
gln_buyer,
bes_afleveradres_code,
bes_afleveradres_straat_huisnr,
bes_afleveradres_postcode,
bes_afleveradres_plaats,
bes_bestelling_memo,
bes_ordernr,
bes_aflever_datum,
bes_orderline_nr,
bes_orderline_gtin,
bes_orderline_art_code,
bes_orderline_art_descr,
bes_orderline_art_eenheid,
bes_orderline_art_aantal,
bes_orderline_art_prijs,
bes_orderline_art_btw)
VALUES
(p_import_key,
SYSDATE,
gln_supplier,
gln_buyer,
bes_afleveradres_code,
bes_afleveradres_straat_huisnr,
bes_afleveradres_postcode,
bes_afleveradres_plaats,
bes_bestelling_memo,
bes_ordernr,
bes_aflever_datum,
bes_orderline_nr,
bes_orderline_gtin,
bes_orderline_art_code,
bes_orderline_art_descr,
bes_orderline_art_eenheid,
bes_orderline_art_aantal,
bes_orderline_art_prijs,
bes_orderline_art_btw);
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 bestelopdrachten: aantal ingelezen regels: '
|| TO_CHAR (v_count_tot),
''
);
fac.imp_writelog (p_import_key,
'S',
'AX bestelopdrachten: 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_ax_bestelling;
/
CREATE OR REPLACE PROCEDURE mar_update_ax_bestelling (
p_import_key IN NUMBER
)
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_ongeldig NUMBER (1);
v_bes_discipline_key NUMBER(10);
v_bes_srtgroep_key NUMBER(10);
v_bes_srtgroep_omschrijving VARCHAR2 (100);
mld_adres_key NUMBER(10);
bes_bestelling_key NUMBER (10);
bes_bestelling_status NUMBER (10);
bes_bestell_key NUMBER (10);
v_bes_srtdeel_key NUMBER (10);
bes_bestelling_item_key NUMBER (10);
v_prs_perslid_key NUMBER (10);
v_prs_bedrijf_key NUMBER (10);
v_ax_company_id prs_bedrijf.prs_overeenkomst_nr%TYPE;
c_kenmerk_key_bestel_ionr NUMBER (10);
--
c_kenmerk_key_aflevername NUMBER (10);
c_kenmerk_key_afleveradres NUMBER (10);
c_kenmerk_key_afleverpostcode NUMBER (10);
c_kenmerk_key_afleverplaats NUMBER (10);
--
c_kenmerk_key_bestelline_nr NUMBER (10);
c_kenmerk_key_artikelnr NUMBER (10);
CURSOR c_ax_bestelling
IS
SELECT gln_supplier, bes_ordernr, bes_aflever_datum, bes_afleveradres_code, bes_afleveradres_straat_huisnr, bes_afleveradres_postcode, bes_afleveradres_plaats, bes_bestelling_memo
FROM mar_imp_ax_bestelling
WHERE fac_import_key = p_import_key
GROUP BY gln_supplier, bes_ordernr, bes_aflever_datum, bes_afleveradres_code, bes_afleveradres_straat_huisnr, bes_afleveradres_postcode, bes_afleveradres_plaats, bes_bestelling_memo;
CURSOR c_ax_bestelling_lines(p_gln_supplier VARCHAR2, p_bes_ordernr VARCHAR2)
IS
SELECT *
FROM mar_imp_ax_bestelling
WHERE fac_import_key = p_import_key
AND gln_supplier = p_gln_supplier
AND bes_ordernr = p_bes_ordernr
ORDER BY bes_orderline_nr;
BEGIN
v_count_tot := 0;
v_count_materiaal_tot := 0;
v_count_error := 0;
v_count_mat_error := 0;
--Standaard catalogus (key 4), en daarbinnen de soortgroep (key 2) waar de artikelen van de bestelling in geplaatst worden, zie marx11.sql
v_bes_discipline_key := 4;
v_bes_srtgroep_key := 2;
--Standaard afleveradres (key 2) wat we hier gebruiken, zie marx11.sql
mld_adres_key := 2;
-- bes_bestelling_status zetten we meteen hard op 5 (omdat we de bestelopdracht ook hard aanmaken, dus ongeacht of de catalogus instelling 'autoorder'.
bes_bestelling_status := 5;
-- Standaard kenmerk-keys, zie marx11.sql
c_kenmerk_key_bestel_ionr := 6;
c_kenmerk_key_aflevername := 1;
c_kenmerk_key_afleveradres:= 3;
c_kenmerk_key_afleverpostcode:= 4;
c_kenmerk_key_afleverplaats:= 5;
c_kenmerk_key_bestelline_nr:= 8;
c_kenmerk_key_artikelnr:= 9;
--------------------------
v_aanduiding := '';
-- Elke opdracht verwerken tot eventuele nieuwe srtdeel-records (via nativefunctie upsert_deel), bestelling, bestelling-items, bestelopdracht, bestelopdracht-items
v_errorhint := 'Naam van de soortgroep binnen catalogus niet gevonden, er is geen bestelopdracht aangemaakt';
-- Naam van de groep (binnen de catalogus) hebben we straks nodig bij aanmaken van artikelen (verderop)...
SELECT bes_srtgroep_omschrijving
INTO v_bes_srtgroep_omschrijving
FROM bes_srtgroep
WHERE bes_srtgroep_key = v_bes_srtgroep_key;
v_errorhint := 'SYSTEM API user van import ' || p_import_key || ' niet gevonden, er is geen bestel/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 COALESCE(prs_overeenkomst_nr,'1')
INTO v_ax_company_id
FROM mar_v_woco_perslid
WHERE prs_perslid_key = v_prs_perslid_key;
FOR rec_ax IN c_ax_bestelling
LOOP
BEGIN
v_ongeldig := 0;
v_count_tot := v_count_tot + 1;
v_aanduiding := SUBSTR(
'['
|| rec_ax.gln_supplier
|| '|'
|| rec_ax.bes_ordernr
|| '|'
|| rec_ax.bes_aflever_datum
|| '] ',1,1000);
-- Bestaat de leverancier obv meegegeven GLN in Mareon? Zo nee, dan kunnen deze hele bestelling overslaan...
SELECT MAX(prs_bedrijf_key)
INTO v_prs_bedrijf_key
FROM prs_bedrijf
WHERE prs_bedrijf_intern IS NULL
AND prs_bedrijf_leverancier = 1
AND prs_bedrijf_verwijder IS NULL
AND prs_leverancier_nr = rec_ax.gln_supplier;
IF (v_prs_bedrijf_key IS NULL)
THEN
-- Geen leverancier gevonden, deze bestelling gaan we skippen
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Leverancier is niet gevonden', 'Bestelling wordt overgeslagen');
v_ongeldig := 1;
END IF;
-- Checken of de bestelling met het IOR voor de WOCO al bestaat, want dan niet aanmaken en updaten doen we (eerst maar eens) ook niet
SELECT MAX(b.bes_bestelling_key)
INTO bes_bestelling_key
FROM bes_bestelling b, bes_kenmerkbestell k, mar_v_woco_perslid woco1, mar_v_woco_perslid woco2
WHERE b.bes_bestelling_key = k.bes_bestelling_key
AND k.bes_kenmerkbestell_waarde = rec_ax.bes_ordernr
AND b.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 (bes_bestelling_key IS NOT NULL)
THEN
-- Bestelopdracht voor woco bestaat al, die gaan we niet nog eens aanmaken, dus overslaan.
fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Bestelopdracht bij opdrachtgever bestaat al', 'Bestelling wordt overgeslagen');
v_ongeldig := 1;
END IF;
IF (v_ongeldig = 0)
THEN
-- Het is geldig: Bestelling is nieuw, en leverancier is gevonden, dus we kunnen de bestelling inserten...
-- We gaan nu (eenmalig) de bestelling aanmaken, voor deze bestelregel (waarop alle andere bestelregels ook aan worden gehangen).
INSERT INTO bes_bestelling (bes_bestelling_module, bes_bestelling_leverdatum, bes_bestelling_status,
prs_perslid_key, prs_perslid_key_voor, bes_bestelling_opmerking, bes_bestelling_kosten_klant,
mld_adres_key_lev, bes_bestelling_levkosten, bes_bestelling_korting)
VALUES('BES', COALESCE(fac.safe_to_date(rec_ax.bes_aflever_datum, 'yyyy-mm-dd'),TRUNC(SYSDATE)), bes_bestelling_status,
v_prs_perslid_key, v_prs_perslid_key, rec_ax.bes_bestelling_memo , 1,
mld_adres_key, 0, 0) RETURNING bes_bestelling_key INTO bes_bestelling_key;
-- Nu nog wat kenmerken bij de bestelling
--
-- IONR uit AX
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (bes_bestelling_key, c_kenmerk_key_bestel_ionr, rec_ax.bes_ordernr);
-- Afleveradres-gegevens
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (bes_bestelling_key, c_kenmerk_key_aflevername, rec_ax.bes_afleveradres_code);
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (bes_bestelling_key, c_kenmerk_key_afleveradres, rec_ax.bes_afleveradres_straat_huisnr);
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (bes_bestelling_key, c_kenmerk_key_afleverpostcode, rec_ax.bes_afleveradres_postcode);
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde) VALUES (bes_bestelling_key, c_kenmerk_key_afleverplaats, rec_ax.bes_afleveradres_plaats);
FOR rec2_ax IN c_ax_bestelling_lines(rec_ax.gln_supplier, rec_ax.bes_ordernr)
LOOP
BEGIN
v_count_materiaal_tot := v_count_materiaal_tot + 1;
-- Eerst maar eens het artikel obv standaard functie...
bes.upsert_srtdeel (v_bes_discipline_key, v_bes_srtgroep_omschrijving, COALESCE(rec2_ax.bes_orderline_art_descr,'-'), COALESCE(fac.safe_to_number(rec2_ax.bes_orderline_art_prijs), 0),
COALESCE(fac.safe_to_number(rec2_ax.bes_orderline_art_btw), 21),COALESCE(rec2_ax.bes_orderline_art_eenheid,'-'),
rec2_ax.bes_orderline_gtin, v_prs_bedrijf_key, NULL, NULL, 1, NULL);
-- Dan de BES_BESTELLING_ITEM's, maar daarvoor hebben we wel de key van bovenstaande aangemaakt artikel nodig, helaas is dat geen functie maar proc, zie ook bes.inc
-- die ook aandacht vraagt om volgende onhandige gedoe te voorkomen, nl:
-- Zoek aangemaakte bes_srtdeel item terug (overgenomen uit bes.inc en aangepast voor sql).
SELECT MAX(bes_srtdeel_key)
INTO v_bes_srtdeel_key
FROM bes_srtdeel sd, bes_srtgroep sg
WHERE sg.ins_discipline_key = v_bes_discipline_key
AND sg.bes_srtgroep_key = sd.bes_srtgroep_key
AND sg.bes_srtgroep_omschrijving = v_bes_srtgroep_omschrijving
AND UPPER(sd.bes_srtdeel_omschrijving) = COALESCE(rec2_ax.bes_orderline_art_descr,'-')
AND sd.bes_srtdeel_eenheid = COALESCE(rec2_ax.bes_orderline_art_eenheid,'-')
AND sd.bes_srtdeel_nr = rec2_ax.bes_orderline_gtin
AND sd.prs_bedrijf_key = v_prs_bedrijf_key;
-- bes_orderline_art_aantal is hier > 0 (in het inlees-gedeelte van de import worden deze regels geskipped namelijk).
INSERT INTO bes_bestelling_item (bes_bestelling_key, bes_srtdeel_key, bes_bestelling_item_aantal,
bes_bestelling_item_brutoprijs, bes_bestelling_item_prijs, bes_bestelling_item_status)
VALUES (bes_bestelling_key, v_bes_srtdeel_key, rec2_ax.bes_orderline_art_aantal, rec2_ax.bes_orderline_art_prijs, rec2_ax.bes_orderline_art_prijs,
bes_bestelling_status) RETURNING bes_bestelling_item_key INTO bes_bestelling_item_key;
-- Het bestelregelnummer uit AX stoppen we in een flexprop (er is hier geen standaard veld voorhanden in bes_bestelling_item).
INSERT INTO bes_kenmerkbesteli (bes_bestelling_item_key, bes_kenmerk_key, bes_kenmerkbesteli_waarde) VALUES (bes_bestelling_item_key, c_kenmerk_key_bestelline_nr, rec2_ax.bes_orderline_nr);
-- Het artikelnummer uit AX stoppen we in een flexprop (het standaard veld bes_srtdeel_nr wordt al gebruikt/gevuld door GTIN, die altijd zeker wordt gestuurd (deze wordt optioneel gestuurd, afh. van de inrichting in AX).
INSERT INTO bes_kenmerkbesteli (bes_bestelling_item_key, bes_kenmerk_key, bes_kenmerkbesteli_waarde) VALUES (bes_bestelling_item_key, c_kenmerk_key_artikelnr, rec2_ax.bes_orderline_art_code);
COMMIT;
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;
END IF; -- v_ongeldig = 0
-- En nu: de bestelopdracht aanmaken (bes_bestelopdr en bes_bestelopdr_item), die doen we via standaard functie...
bes.makeorders (v_prs_perslid_key, bes_bestelling_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',
'Bestelopdrachten: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_tot - v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bestelopdrachten: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bestel regels: verwerkte regels zonder foutmelding: '
|| TO_CHAR (v_count_materiaal_tot - v_count_mat_error),
''
);
fac.imp_writelog (p_import_key,
'S',
'Bestel regels: verwerkte regels met foutmelding: '
|| TO_CHAR (v_count_mat_error),
''
);
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_update_ax_bestelling;
/
-- MARX#41535: Opruimen Mareon bijlagen
-- MARX#53086: Factuurbestanden van meer dan 3 maanden ook verwijderen
-- Export die elke maand plaatsvind via marx_delete_factuurdocumenten.bat / marx_delete_factuurdocumenten.js
-- Verwijdert alle documenten bij de facturen, waarvan de factuur is verwerkt en de verwerkingsdatum
-- meer dan 90 dagen geleden is (overeenkomend met 3 maanden), en (technische aanvulling) niet meer dan 1 jaar is (365 dagen)
CREATE OR REPLACE VIEW marx_v_factuur_docs_delete
(
fin_factuur_key,
fin_factuur_datum,
fin_factuur_verwerkt,
folderfactuurdocumenten
)
AS
SELECT f.fin_factuur_key,
f.fin_factuur_datum,
fac.gettrackingdate ('FINVER', f.fin_factuur_key),
'FIN/F'
|| SUBSTR (LPAD (f.fin_factuur_key, 7, '0'), 1, 4)
|| '___'
|| '/F'
|| f.fin_factuur_key
|| '/'
|| k.fin_kenmerk_key
folderfactuurldocumenten
FROM fin_factuur f, fin_kenmerk k, fin_kenmerkfactuur kf
WHERE k.fin_kenmerk_key = 11 -- Factuurbijlage
AND k.fin_kenmerk_verwijder IS NULL
AND kf.fin_kenmerk_key = k.fin_kenmerk_key
AND kf.fin_factuur_key = f.fin_factuur_key
AND kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_factuur_statuses_key = 7
AND fac.gettrackingdate ('FINVER', f.fin_factuur_key) < (SYSDATE - 90)
AND fac.gettrackingdate ('FINVER', f.fin_factuur_key) > (SYSDATE - 365);
-- 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,
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_bron,
fin_factuur_ubl_verwerking,
fin_factuur_mareon_module
)
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,
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,
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 Basis'
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 Factuurmodule', '2', 'Mareon Factuurscanning', 'Mareon Premium')
END
FROM fin_factuur f,
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 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,
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_bron,
fin_factuur_ubl_verwerking,
fin_factuur_mareon_module
)
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,
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,
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 Basis'
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 Factuurmodule', '2', 'Mareon Factuurscanning', 'Mareon Premium')
END
FROM fin_factuur f,
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 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 Factuurmodule, 2 = PDF scan gevolgd door optie 1 (Mareon Factuurmodule)
-- 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).
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,
kl.prs_kenmerklink_waarde xreceiver,
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, cnt_contract c, prs_afdeling a, prs_kenmerklink kl
WHERE sn.fac_srtnotificatie_code = 'CUST01'
AND c.cnt_contract_key = f.cnt_contract_key
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 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 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 = 'FININF'));
-- 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 = 'FININF'));
-- 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.
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, mar_v_leverancier_api_perslid lp
WHERE sn.fac_srtnotificatie_code = 'CUST03'
AND f.fin_factuur_statuses_key = 3
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') = '0'
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 = 'FININF'));
-- MARX#52342: Rapport met leveranciersgegevens per woco
CREATE OR REPLACE VIEW mar_v_rap_lev_4_woco
( fclt_3d_afdeling_key,
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,
leverancier_premium)
AS
SELECT p.prs_afdeling_key,
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,
flex1.prs_bedrijf_bankreknr, 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, DECODE(prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
FROM mar_v_woco_x_lev, prs_perslid p, prs_bedrijf b, mar_v_sync_ax_lasttime s, mar_v_bedrijf_bankrek_nr flex1, mar_v_bedrijf_kvk_btw_nr flex2
WHERE p.prs_perslid_key = w_prs_perslid_key
AND s.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 p.prs_afdeling_key,
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,
flex1.prs_bedrijf_bankreknr, 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, DECODE(prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
FROM mar_v_woco_x_grooth, prs_perslid p, prs_bedrijf b, mar_v_sync_ax_lasttime s, mar_v_bedrijf_bankrek_nr flex1, mar_v_bedrijf_kvk_btw_nr flex2
WHERE p.prs_perslid_key = w_prs_perslid_key
AND s.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 p.prs_afdeling_key,
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,
flex1.prs_bedrijf_bankreknr, 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, DECODE(prs_bedrijf_bedrijf_status, 0, 'Nee', 'Ja')
FROM mar_v_woco_x_contractant, prs_perslid p, prs_bedrijf b, mar_v_sync_ax_lasttime s, mar_v_bedrijf_bankrek_nr flex1, mar_v_bedrijf_kvk_btw_nr flex2
WHERE p.prs_perslid_key = w_prs_perslid_key
AND s.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;
-----------------------------------------------
BEGIN fac.registercustversion('MARX', 17); END;
/
------ 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