Files
Mareon/sql/mareon_bes.sql
Marcel Bourseau 737acb5a74 MARX#83848 Terugbrengen aantal web_user_messages
svn path=/Mareon/trunk/; revision=64853
2024-05-28 14:32:51 +00:00

1167 lines
55 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific sql statements for the FACILITOR database
-- Voor dbuser invullen: - indien script voor 1 klant is: 'MARX' (de klantcode, zoals vermeld in fac_version_cust)
-- - script is voor meerdere klanten: 'AAXX' (de groepcode, zoals vermeld in fac_version_group)
-- - script is voor meerdere klanten met naam volgens een bepaald patroon: '^AA|^ASMS|^GULU|^NMMS|^RABO|^ZKHM'
-- Ook als het script gedraaid wordt voor de verkeerde cust wordt er een logfile gemaakt.
-- (dit in tegenstelling tot sample_xxxx.sql)
DEFINE thisfile = 'MAREON_BES.SQL'
DEFINE dbuser = '^MARX'
SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusttxt NEW_VALUE fcltcusttxt NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusttxt FROM DUAL;
WHENEVER SQLERROR CONTINUE;
---------------------------------------
PROMPT &fcltcusttxt
---------------------------------------
SET DEFINE OFF
------ payload begin ------
--------------------- MAREON BESTELLINGEN --------------------- MAREON BESTELLINGEN --------------------- MAREON BESTELLINGEN ---------------------
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN -- BESTELLINGEN ----
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------- 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, 'BES');
END;
/
-- 3c Import tbv AX-bestellingen
CREATE OR REPLACE PROCEDURE mar_import_gen_bes_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:
gln_supplier VARCHAR2 (256);
gln_buyer VARCHAR2 (256);
bes_afleveradres_code VARCHAR2 (256);
bes_afleveradres_naam 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;
v_ongeldig := 0;
FOR rec1 IN c1
LOOP
BEGIN
v_newline := rec1.fac_imp_file_line;
v_aanduiding := '';
v_errorhint := 'Fout bij opvragen te importeren rij';
-- 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_naam
v_aanduiding := 'Probleem bij bes_afleveradres_naam: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
4,
bes_afleveradres_naam);
-- 05 - bes_afleveradres_straat_huisnr
v_aanduiding := 'Probleem bij bes_afleveradres_straat_huisnr: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
5,
bes_afleveradres_straat_huisnr);
-- 06 - bes_afleveradres_postcode
v_aanduiding := 'Probleem bij bes_afleveradres_postcode: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
6,
bes_afleveradres_postcode);
-- 07 - bes_afleveradres_plaats
v_aanduiding := 'Probleem bij bes_afleveradres_plaats: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
7,
bes_afleveradres_plaats);
-- 08 - bes_bestelling_memo
v_aanduiding := 'Probleem bij bes_bestelling_memo: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
8,
bes_bestelling_memo);
-- 09 - bes_ordernr
v_aanduiding := 'Probleem bij bes_ordernr: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
9,
bes_ordernr);
-- 10 - bes_aflever_datum
v_aanduiding := 'Probleem bij bes_aflever_datum: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
10,
bes_aflever_datum);
-- 11 - bes_orderline_nr
v_aanduiding := 'Probleem bij bes_orderline_nr: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
11,
bes_orderline_nr);
-- 12 - bes_orderline_gtin
v_aanduiding := 'Probleem bij bes_orderline_gtin: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
12,
bes_orderline_gtin);
-- 13 - bes_orderline_art_code
v_aanduiding := 'Probleem bij bes_orderline_art_code: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
13,
bes_orderline_art_code);
-- 14 - bes_orderline_art_descr
v_aanduiding := 'Probleem bij bes_orderline_art_descr: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
14,
bes_orderline_art_descr);
-- 15 - bes_orderline_art_eenheid
v_aanduiding := 'Probleem bij bes_orderline_art_eenheid: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
15,
bes_orderline_art_eenheid);
-- 16 - bes_orderline_art_aantal
v_aanduiding := 'Probleem bij bes_orderline_art_aantal: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
16,
bes_orderline_art_aantal);
-- 17 - bes_orderline_art_prijs
v_aanduiding := 'Probleem bij bes_orderline_art_prijs: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
17,
bes_orderline_art_prijs);
-- 18 - bes_orderline_art_btw
v_aanduiding := 'Probleem bij bes_orderline_art_btw: ';
fac.imp_getfield_nr (v_newline,
c_fielddelimitor,
18,
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,
'E',
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_naam';
bes_afleveradres_naam := TRIM (bes_afleveradres_naam);
IF (bes_afleveradres_naam IS NOT NULL)
THEN
IF LENGTH (bes_afleveradres_naam) > 50
THEN
bes_afleveradres_naam := SUBSTR (bes_afleveradres_naam, 1, 50);
fac.imp_writelog (p_import_key,
'W',
v_aanduiding || 'bes_afleveradres_naam te lang',
'Afgebroken tot [' || bes_afleveradres_naam || ']');
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,
'E',
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) > 15
THEN
bes_orderline_art_aantal := SUBSTR (bes_orderline_art_aantal, 1, 15);
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,
'E',
v_aanduiding,
v_errorhint || ' - Aantal is leeg of 0. Opdracht 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_naam,
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_naam,
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 v_ongeldig = 1
-- Het kan zijn dat de i-de bestelregel een fout heeft, dan moeten alle bestelregels ervoor, die wel goed zijn gegaan, alsnog worden verwijderd.
THEN DELETE FROM mar_imp_ax_bestelling WHERE fac_import_key = p_import_key;
END IF;
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_gen_bes_opdrachten;
/
CREATE OR REPLACE PROCEDURE mar_update_gen_bes_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_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);
v_bes_bestelling_key NUMBER (10);
v_bes_bestelopdr_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_prs_woco_key NUMBER (10);
v_ax_company_id prs_bedrijf.prs_overeenkomst_nr%TYPE;
c_kenmerk_key_bestel_ionr NUMBER (10);
--
c_kenmerk_key_aflevercode NUMBER (10);
c_kenmerk_key_aflevernaam 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);
c_kenmerk_key_artikelomschr NUMBER (10);
c_kenmerk_key_eenheid NUMBER (10);
v_overrule_success NUMBER (10);
CURSOR c_ax_bestelling
IS
SELECT gln_supplier,
bes_ordernr,
bes_aflever_datum,
bes_afleveradres_code,
bes_afleveradres_naam,
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_naam,
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_aflevercode := 1;
c_kenmerk_key_aflevernaam := 10;
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;
c_kenmerk_key_artikelomschr := 11;
c_kenmerk_key_eenheid := 12;
v_overrule_success := 0; -- Neutraal (geen overrule).
--------------------------
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 prs_bedrijf_key, COALESCE (prs_overeenkomst_nr, '1')
INTO v_prs_woco_key, 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
-- Maar doen nog 1 poging, en we kijken of prs_bedrijf_bedrijf kan worden gevonden
SELECT prs_bedrijf_key2
INTO v_prs_bedrijf_key
FROM prs_bedrijf_bedrijf
WHERE prs_bedrijf_key1 = v_prs_woco_key
AND prs_bedrijf_externid2 = rec_ax.gln_supplier;
IF (v_prs_bedrijf_key IS NULL)
THEN
-- Nog steeds is leverancier niet gevonden, nu gaan we de bestelling skippen
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || 'Leverancier is niet gevonden',
'Bestelling wordt overgeslagen');
v_ongeldig := 1;
END IF;
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 v_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 (v_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).
v_errorhint := 'bes_bestelling van import ' || p_import_key || ' kan niet worden aangemaakt';
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 v_bes_bestelling_key;
-- Nu nog wat kenmerken bij de bestelling
--
-- IONR uit AX
v_errorhint := 'externe bestel-opdrachtnummer van import ' || p_import_key || ' kan niet worden aangemaakt';
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
VALUES (v_bes_bestelling_key, c_kenmerk_key_bestel_ionr, rec_ax.bes_ordernr);
v_errorhint := 'adres van import ' || p_import_key || ' kan niet worden aangemaakt';
-- Afleveradres-gegevens
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
VALUES (v_bes_bestelling_key, c_kenmerk_key_aflevercode, rec_ax.bes_afleveradres_code);
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
VALUES (v_bes_bestelling_key, c_kenmerk_key_aflevernaam, rec_ax.bes_afleveradres_naam);
INSERT INTO bes_kenmerkbestell (bes_bestelling_key, bes_kenmerk_key, bes_kenmerkbestell_waarde)
VALUES (v_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 (v_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 (v_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...
v_errorhint := 'Soort deel ' || rec2_ax.bes_orderline_art_descr || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
-- Meer soort van dummy srtdeel, zodat we een referentie hebben (die is nodig).
bes.upsert_srtdeel (v_bes_discipline_key,
v_bes_srtgroep_omschrijving,
'-',
0,
21,
'PCE',
COALESCE (rec2_ax.bes_orderline_gtin, '00000000000000'),
v_prs_bedrijf_key,
NULL,
NULL,
1,
NULL,
NULL,
v_bes_srtdeel_key);
v_errorhint := 'bes_bestelling_item met bes_srtdeel_key ' || v_bes_srtdeel_key || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
-- 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 (v_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).
v_errorhint := 'Bestelregelnummer ' || rec2_ax.bes_orderline_nr || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
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).
v_errorhint := 'Artikelnummer ' || rec2_ax.bes_orderline_art_code || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
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);
-- De artikelomschrijving uit stoppen we in een flexprop, omdat in srtdeel stoppen niet goed gaat als we gebruik maken van GTIN als bes_srtdeel_nr indien GTIN onbekend is (00000000000000)
v_errorhint := 'Artikelomschrijving ' || rec2_ax.bes_orderline_art_descr || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
INSERT INTO bes_kenmerkbesteli (bes_bestelling_item_key, bes_kenmerk_key, bes_kenmerkbesteli_waarde)
VALUES (bes_bestelling_item_key, c_kenmerk_key_artikelomschr, rec2_ax.bes_orderline_art_descr);
-- De artikeleenheid stoppen we in een flexprop, omdat in srtdeel stoppen niet goed gaat als we gebruik maken van GTIN als bes_srtdeel_nr indien GTIN onbekend is (00000000000000)
v_errorhint := 'Artikeleenheid ' || rec2_ax.bes_orderline_art_eenheid || ' bij import ' || p_import_key || ' kan niet worden aangemaakt';
INSERT INTO bes_kenmerkbesteli (bes_bestelling_item_key, bes_kenmerk_key, bes_kenmerkbesteli_waarde)
VALUES (bes_bestelling_item_key, c_kenmerk_key_eenheid, rec2_ax.bes_orderline_art_eenheid);
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;
-- En nu: de bestelopdracht aanmaken (bes_bestelopdr en bes_bestelopdr_item), die doen we via standaard functie...
v_errorhint := 'Bes.makeorders van bestelling ' || v_bes_bestelling_key || ' bij import ' || p_import_key || ' kan niet worden uitgevoerd';
bes.makeorders (v_prs_perslid_key, v_bes_bestelling_key);
-- MARX#66923: AX365 Bestelopdracht met response bericht succes/failure
-- Nog iets rubuuster, indien geen bestelopdracht aangemaakt kan worden, dan geen bes_opdr_key en wordt geen node teruggestuurd
IF v_bes_bestelling_key IS NOT NULL AND rec_ax.bes_ordernr IS NOT NULL
THEN
v_errorhint := 'Het bepalen van bestelopdrachtkey van ' || v_bes_bestelling_key || ' bij import ' || p_import_key || ' gaat fout';
SELECT DISTINCT bo.bes_bestelopdr_key
INTO v_bes_bestelopdr_key
FROM bes_bestelopdr bo, bes_bestelopdr_item boi, bes_bestelling_item bi
WHERE bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
AND bi.bes_bestelling_key = v_bes_bestelling_key;
v_errorhint := 'Het toevoegen van fac_result/bes_opdr_externnr bij import ' || p_import_key || ' gaat fout';
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES ('IMPORT_' || TO_CHAR (p_import_key), 'bes_opdr_externnr', rec_ax.bes_ordernr);
v_errorhint := 'Het toevoegen van fac_result/bes_opdr_key bij import ' || p_import_key || ' gaat fout';
INSERT INTO fac_result (fac_result_sessionid, fac_result_naam, fac_result_waarde)
VALUES ('IMPORT_' || TO_CHAR (p_import_key), 'bes_opdr_key', TO_CHAR (v_bes_bestelopdr_key));
ELSE
v_overrule_success := -1; -- Hier is bij aanmaak opdracht echt wat fout gegaan, overrule van keiharde failure (-1).
END IF;
END IF; -- v_ongeldig = 0
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),
'');
IF v_count_error > 0
THEN
fac.imp_writelog (p_import_key,
'S',
'Bestelopdrachten: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_error),
'');
END IF;
fac.imp_writelog (
p_import_key,
'S',
'Bestel regels: verwerkte regels zonder foutmelding: ' || TO_CHAR (v_count_materiaal_tot - v_count_mat_error),
'');
IF v_count_mat_error > 0
THEN
fac.imp_writelog (p_import_key,
'S',
'Bestel regels: verwerkte regels met foutmelding: ' || TO_CHAR (v_count_mat_error),
'');
END IF;
-- MARX#66923: AX365 Bestelopdracht met response bericht succes/failure: XML met result retour
mar_response_API_Import (p_import_key, v_overrule_success);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
fac.imp_writelog (p_import_key,
'E',
v_aanduiding || v_errormsg,
v_errorhint);
mar_response_API_Import (p_import_key, -1);
COMMIT;
END mar_update_gen_bes_opdrachten;
/
-- Import tbv Tobias-bestellingen
CREATE OR REPLACE PROCEDURE mar_import_ax_bestelling (p_import_key IN NUMBER)
AS
BEGIN
mar_import_gen_bes_opdrachten (p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE mar_update_ax_bestelling (p_import_key IN NUMBER)
AS
BEGIN
mar_update_gen_bes_opdrachten (p_import_key);
END;
/
-- Import tbv Facilitor-bestellingen
CREATE OR REPLACE PROCEDURE mar_import_fclt_bestelling (p_import_key IN NUMBER)
AS
BEGIN
mar_import_gen_bes_opdrachten (p_import_key);
END;
/
CREATE OR REPLACE PROCEDURE mar_update_fclt_bestelling (p_import_key IN NUMBER)
AS
BEGIN
mar_update_gen_bes_opdrachten (p_import_key);
END;
/
------ payload end ------
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/
COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile