-- -- $Id$ -- -- Stichting Parkhuis Main SQL DEFINE thisfile = 'STPH.SQL' DEFINE dbuser = '^STPH' DEFINE custid = 'STPH' 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 ------ -- -- BES-CATALOGUS IMPORT -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Copy van fac_import_catalogus en fac_update_catalogus van 2015.2 (d.d. 26/10/15 uit fac_pacf.src gekopieerd) -- rename fac_ -> stph_, met volgende resultaat: 1) stph_import_catalogus 2) stph_update_catalogus en 3) stph_imp_catalogus -- -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE stph_import_catalogus ( p_import_key IN NUMBER ) IS p_discipline_key NUMBER(10); p_bedrijf_key NUMBER(10); c_delim VARCHAR2 (1) := ';'; v_newline VARCHAR2 (4000); -- Input line v_errormsg VARCHAR2 (1000); v_errorhint VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); header_is_valid NUMBER := 0; v_count_tot NUMBER (10) := 0; v_count_import NUMBER (10) := 0; v_ongeldig NUMBER (1) := 0; -- De importvelden v_discipline_omschrijving VARCHAR2 (255); v_bedrijf_naam VARCHAR2 (255); v_catalogus_datum VARCHAR2 (255); v_srtdeel_nr VARCHAR2 (255); v_srtgroep_omschrijving VARCHAR2 (255); v_srtdeel_omschrijving VARCHAR2 (255); v_srtdeel_prijs VARCHAR2 (255); v_srtdeel_eenheid VARCHAR2 (255); v_srtdeel_image VARCHAR2 (255); v_srtdeel_veelvoud VARCHAR2 (255); v_srtdeel_btw VARCHAR2 (255); v_srtdeel_vervaldatum VARCHAR2 (255); v_srtdeel_inkprijs VARCHAR2 (255); v_srtdeel_minimum VARCHAR2 (255); v_bes_staffeltabel_naam VARCHAR2 (255); v_srtdeel_wijzigdagen VARCHAR2 (255); v_srtdeel_annuleerdagen VARCHAR2 (255); v_srtdeel_opmerking VARCHAR2 (4000); -- straks afgekapt op 2000 v_bes_srtdeel_voorraadmin VARCHAR2 (255); v_bes_srtdeel_voorraadmax VARCHAR2 (255); v_bes_srtdeel_voorraadfactor VARCHAR2 (255); v_bes_srtdeel_maxbestel VARCHAR2 (255); v_bes_inclexcl_btw VARCHAR2 (255); -- Overige velden: v_discipline_key NUMBER (10); v_bedrijf_key NUMBER (10); v_bes_staffeltabel_key NUMBER (10); CURSOR c1 IS SELECT fac_imp_file_line, LENGTH (TRIM (REPLACE (fac_imp_file_line, c_delim, ''))) regellengte FROM FAC_IMP_FILE WHERE fac_import_key = p_import_key ORDER BY fac_imp_file_index; BEGIN SELECT ins_discipline_key, prs_bedrijf_key INTO p_discipline_key, p_bedrijf_key FROM fac_import fi, fac_import_app fia WHERE fi.fac_import_key = p_import_key AND fi.fac_import_app_key = fia.fac_import_app_key; -- Eerst opruiming -- LET OP: we ondersteunen geen multi-variant meer DELETE FROM stph_imp_catalogus; FOR rec IN c1 LOOP BEGIN v_aanduiding := ''; v_errorhint := 'Fout inlezen importregel'; v_newline := rec.fac_imp_file_line; v_ongeldig := 0; -- Lees alle veldwaarden fac.imp_getfield (v_newline, c_delim, v_discipline_omschrijving); fac.imp_getfield (v_newline, c_delim, v_bedrijf_naam); fac.imp_getfield (v_newline, c_delim, v_catalogus_datum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_nr); fac.imp_getfield (v_newline, c_delim, v_srtgroep_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_omschrijving); fac.imp_getfield (v_newline, c_delim, v_srtdeel_prijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_eenheid); fac.imp_getfield (v_newline, c_delim, v_srtdeel_image); fac.imp_getfield (v_newline, c_delim, v_srtdeel_veelvoud); fac.imp_getfield (v_newline, c_delim, v_srtdeel_btw); fac.imp_getfield (v_newline, c_delim, v_srtdeel_vervaldatum); fac.imp_getfield (v_newline, c_delim, v_srtdeel_inkprijs); fac.imp_getfield (v_newline, c_delim, v_srtdeel_minimum); fac.imp_getfield (v_newline, c_delim, v_bes_staffeltabel_naam); fac.imp_getfield (v_newline, c_delim, v_srtdeel_wijzigdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_annuleerdagen); fac.imp_getfield (v_newline, c_delim, v_srtdeel_opmerking); -- Voorraad kolommen fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadmin); fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadmax); fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_maxbestel); fac.imp_getfield (v_newline, c_delim, v_bes_srtdeel_voorraadfactor); fac.imp_getfield (v_newline, c_delim, v_bes_inclexcl_btw); -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen -- de juiste kolomkop. Ik controleer daarbij - sinds UWVA#21562 - bijna alle -- kolommen (spaties in kolomheaders zijn onhandig bij "round-trip syncen"). -- Ik negeer alles totdat ik een geldige header ben gepasseerd. IF (header_is_valid = 0) THEN IF UPPER (TRIM (v_discipline_omschrijving)) LIKE 'CATALOGUS%' AND UPPER (TRIM (v_bedrijf_naam)) = 'LEVERANCIER' --AND UPPER (TRIM (v_catalogus_datum)) = 'CAT DATUM' -- Laat maar! AND UPPER (TRIM (v_srtdeel_nr)) = 'ARTIKELNR' AND UPPER (TRIM (v_srtgroep_omschrijving)) = 'GROEP' AND UPPER (TRIM (v_srtdeel_omschrijving)) = 'OMSCHRIJVING' AND UPPER (TRIM (v_srtdeel_prijs)) = 'PRIJS' AND UPPER (TRIM (v_srtdeel_eenheid)) = 'EENHEID' AND UPPER (TRIM (v_srtdeel_image)) = 'PICTURE' AND UPPER (TRIM (v_srtdeel_veelvoud)) = 'ORDERAANTAL' AND UPPER (TRIM (v_srtdeel_btw)) = 'TAX' AND UPPER (TRIM (v_srtdeel_vervaldatum)) = 'DUEDATE' AND UPPER (TRIM (v_srtdeel_inkprijs)) = 'INKOOPPRIJS' AND UPPER (TRIM (v_srtdeel_minimum)) = 'MINIMUM' AND UPPER (TRIM (v_bes_staffeltabel_naam)) = 'STAFFELTABEL' --AND UPPER (TRIM (v_srtdeel_wijzigdagen)) = 'WIJZIGDAGEN' -- Laat maar! --AND UPPER (TRIM (v_srtdeel_annuleerdagen)) = 'ANNULEERDAGEN' -- Laat maar! AND UPPER (TRIM (v_srtdeel_opmerking)) = 'OPMERKING' THEN header_is_valid := 1; -- Hier checken of we de voorraad-kolommen hebben... -- MinVoorraad;Maxvoorraad;Maxbestel;VoorraadFactor;VoorraadOmrekenPrijs IF UPPER (TRIM (v_bes_srtdeel_voorraadmin)) = 'MINVOORRAAD' AND UPPER (TRIM (v_bes_srtdeel_voorraadmax)) = 'MAXVOORRAAD' AND UPPER (TRIM (v_bes_srtdeel_maxbestel)) = 'MAXBESTEL' AND UPPER (TRIM (v_bes_srtdeel_voorraadfactor)) = 'VOORRAADFACTOR' AND UPPER (TRIM (v_bes_inclexcl_btw)) = 'VOORRAADOMREKENPRIJS' THEN -- Met deze waarde '2' doen we wat met de voorraadkolommen. header_is_valid := 2; fac.imp_writelog ( p_import_key, 'I', 'Voorraad kolommen zijn aanwezig', 'Voorraad kolommen worden ingelezen' ); END IF; END IF; ELSIF rec.regellengte > 1 -- Lege regels overslaan! THEN v_count_tot := v_count_tot + 1; v_aanduiding := '[' || TRIM (v_discipline_omschrijving) || '|' || TRIM (v_bedrijf_naam) || '|' || TRIM (v_srtdeel_nr) || '] '; v_discipline_omschrijving := TRIM (v_discipline_omschrijving); v_errorhint := 'Catalogus onbekend/ongeldig; regel wordt niet ingelezen'; SELECT ins_discipline_key INTO v_discipline_key FROM INS_TAB_DISCIPLINE WHERE UPPER (ins_discipline_omschrijving) = UPPER (v_discipline_omschrijving) AND COALESCE (p_discipline_key, ins_discipline_key) = ins_discipline_key -- CONN#20934/Import bedoelt voor catalogus? AND ins_discipline_module = 'BES' AND ins_discipline_verwijder IS NULL; v_bedrijf_naam := TRIM (v_bedrijf_naam); v_errorhint := 'Bedrijf onbekend/ongeldig; regel wordt niet ingelezen'; SELECT prs_bedrijf_key INTO v_bedrijf_key FROM PRS_BEDRIJF WHERE UPPER (prs_bedrijf_naam) = UPPER (v_bedrijf_naam) AND COALESCE (p_bedrijf_key, prs_bedrijf_key) = prs_bedrijf_key -- Import bedoelt voor bedrijf? AND prs_bedrijf_verwijder IS NULL; v_errorhint := 'Fout bij controleren importregel'; -- Indien leeg, dan catalogusdatum=SYSDATE gebruiken! v_catalogus_datum := COALESCE (TRIM (v_catalogus_datum), TO_CHAR (SYSDATE, 'yyyymmdd')); IF fac.safe_to_date (v_catalogus_datum, 'yyyymmdd') IS NULL THEN fac.imp_writelog (p_import_key, 'W', v_aanduiding || 'Ongeldige catalogusdatum', 'Regel wordt niet ingelezen'); v_ongeldig := 1; END IF; v_srtdeel_nr := TRIM (v_srtdeel_nr); IF LENGTH (v_srtdeel_nr) > 32 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Artikelnummer te lang', 'Nummer wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtgroep_omschrijving := TRIM (v_srtgroep_omschrijving); IF LENGTH (v_srtgroep_omschrijving) > 60 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Groepomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtdeel_omschrijving := TRIM (v_srtdeel_omschrijving); IF LENGTH (v_srtdeel_omschrijving) > 100 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Artikelomschrijving te lang', 'Omschrijving wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; -- Indien leeg, dan blijft/wordt prijs=ongedefinieerd=NULL! v_srtdeel_prijs := TRIM (v_srtdeel_prijs); IF v_srtdeel_prijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_prijs) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige prijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_srtdeel_eenheid := TRIM (v_srtdeel_eenheid); IF LENGTH (v_srtdeel_eenheid) > 30 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Eenheid te lang', 'Eenheid wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; v_srtdeel_image := TRIM (v_srtdeel_image); IF LENGTH (v_srtdeel_image) > 255 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Imagenaam te lang', 'Naam wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; -- Veelvoud mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan veelvoud=1! v_srtdeel_veelvoud := COALESCE (TRIM (v_srtdeel_veelvoud), '1'); IF fac.safe_to_number (v_srtdeel_veelvoud) IS NULL OR fac.safe_to_number (v_srtdeel_veelvoud) < 0 OR fac.safe_to_number (v_srtdeel_veelvoud) > 999999 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig veelvoud', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt BTW-tarief=ongedefinieerd=NULL! v_srtdeel_btw := TRIM (v_srtdeel_btw); IF v_srtdeel_btw IS NOT NULL AND fac.safe_to_number (v_srtdeel_btw) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig BTW-tarief', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt vervaldatum=ongedefinieerd=NULL! v_srtdeel_vervaldatum := TRIM (v_srtdeel_vervaldatum); IF v_srtdeel_vervaldatum IS NOT NULL AND fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd') IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige vervaldatum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Indien leeg, dan blijft/wordt inkoopprijs=ongedefinieerd=NULL! v_srtdeel_inkprijs := TRIM (v_srtdeel_inkprijs); IF v_srtdeel_inkprijs IS NOT NULL AND fac.safe_to_number (v_srtdeel_inkprijs) IS NULL THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige inkoopprijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Minimum mag niet negatief of meer zijn dan 6 posities lang. -- Indien leeg, dan blijft/wordt minimum=ongedefinieerd=NULL! v_srtdeel_minimum := TRIM (v_srtdeel_minimum); IF v_srtdeel_minimum IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_minimum) IS NULL OR fac.safe_to_number (v_srtdeel_minimum) < 0 OR fac.safe_to_number (v_srtdeel_minimum) > 999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig minimum', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_staffeltabel_naam := TRIM (v_bes_staffeltabel_naam); v_errorhint := 'Fout bij bepalen staffeltabel; regel wordt niet ingelezen'; IF v_bes_staffeltabel_naam IS NOT NULL THEN SELECT bes_staffeltabel_key INTO v_bes_staffeltabel_key FROM bes_staffeltabel WHERE UPPER (bes_staffeltabel_naam) = UPPER (v_bes_staffeltabel_naam); END IF; -- Wijzigdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt wijzigdagen=ongedefinieerd=NULL! v_srtdeel_wijzigdagen := TRIM (v_srtdeel_wijzigdagen); IF v_srtdeel_wijzigdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_wijzigdagen) IS NULL OR fac.safe_to_number (v_srtdeel_wijzigdagen) < 0 OR fac.safe_to_number (v_srtdeel_wijzigdagen) > 999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig aantal wijzigdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; -- Annuleerdagen mag niet negatief of meer zijn dan 3 posities lang. -- Indien leeg, dan blijft/wordt annuleerdagen=ongedefinieerd=NULL! v_srtdeel_annuleerdagen := TRIM (v_srtdeel_annuleerdagen); IF v_srtdeel_annuleerdagen IS NOT NULL AND ( fac.safe_to_number (v_srtdeel_annuleerdagen) IS NULL OR fac.safe_to_number (v_srtdeel_annuleerdagen) < 0 OR fac.safe_to_number (v_srtdeel_annuleerdagen) > 999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig aantal annuleerdagen', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_srtdeel_opmerking := TRIM (v_srtdeel_opmerking); IF LENGTH (v_srtdeel_opmerking) > 2000 THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Opmerking te lang', 'Opmerking wordt afgebroken (Nr:' || v_srtdeel_nr || ')' ); END IF; IF (header_is_valid = 2) THEN -- We hebben van doen met de BES interne catalogus (voorraad) kolommen. v_bes_srtdeel_voorraadmin := TRIM (v_bes_srtdeel_voorraadmin); IF v_bes_srtdeel_voorraadmin IS NOT NULL AND ( fac.safe_to_number (v_bes_srtdeel_voorraadmin) IS NULL OR fac.safe_to_number (v_bes_srtdeel_voorraadmin) < 0 OR fac.safe_to_number (v_bes_srtdeel_voorraadmin) > 999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig minimum voorraad', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_srtdeel_voorraadmax := TRIM (v_bes_srtdeel_voorraadmax); IF v_bes_srtdeel_voorraadmax IS NOT NULL AND ( fac.safe_to_number (v_bes_srtdeel_voorraadmax) IS NULL OR fac.safe_to_number (v_bes_srtdeel_voorraadmax) < 0 OR fac.safe_to_number (v_bes_srtdeel_voorraadmax) > 999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig maximum voorraad', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_srtdeel_maxbestel := TRIM (v_bes_srtdeel_maxbestel); IF v_bes_srtdeel_maxbestel IS NOT NULL AND ( fac.safe_to_number (v_bes_srtdeel_maxbestel) IS NULL OR fac.safe_to_number (v_bes_srtdeel_maxbestel) < 0 OR fac.safe_to_number (v_bes_srtdeel_maxbestel) > 1) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige MaxBestel', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_srtdeel_voorraadfactor := TRIM (v_bes_srtdeel_voorraadfactor); IF v_bes_srtdeel_voorraadfactor IS NOT NULL AND ( fac.safe_to_number (v_bes_srtdeel_voorraadfactor) IS NULL OR fac.safe_to_number (v_bes_srtdeel_voorraadfactor) < 0 OR fac.safe_to_number (v_bes_srtdeel_voorraadfactor) > 999999) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldig voorraadfactor', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; v_bes_inclexcl_btw := TRIM (v_bes_inclexcl_btw); IF v_bes_inclexcl_btw IS NOT NULL AND ( fac.safe_to_number (v_bes_inclexcl_btw) IS NULL OR fac.safe_to_number (v_bes_inclexcl_btw) < 0 OR fac.safe_to_number (v_bes_inclexcl_btw) > 3) THEN fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Ongeldige Voorraad OmrekenPrijs', 'Regel wordt niet ingelezen (Nr:' || v_srtdeel_nr || ')' ); v_ongeldig := 1; END IF; END IF; IF v_ongeldig = 0 THEN v_errorhint := 'Fout toevoegen importregel'; INSERT INTO STPH_IMP_CATALOGUS ( fac_import_key, ins_discipline_key, prs_bedrijf_key, fac_imp_catalogus_datum, ins_srtdeel_nr, ins_srtgroep_omschrijving, ins_srtdeel_omschrijving, ins_srtdeel_prijs, ins_srtdeel_inkprijs, ins_srtdeel_eenheid, ins_srtdeel_image, ins_srtdeel_veelvoud, ins_srtdeel_btw, ins_srtdeel_vervaldatum, ins_srtdeel_minimum, bes_staffeltabel_key, ins_srtdeel_wijzigdagen, ins_srtdeel_annuleerdagen, ins_srtdeel_opmerking ) VALUES ( p_import_key, v_discipline_key, v_bedrijf_key, fac.safe_to_date (v_catalogus_datum, 'yyyymmdd'), SUBSTR (v_srtdeel_nr, 1, 32), SUBSTR (v_srtgroep_omschrijving, 1, 60), SUBSTR (v_srtdeel_omschrijving, 1, 100), fac.safe_to_number (v_srtdeel_prijs), fac.safe_to_number (v_srtdeel_inkprijs), SUBSTR (v_srtdeel_eenheid, 1, 30), SUBSTR (v_srtdeel_image, 1, 255), fac.safe_to_number (v_srtdeel_veelvoud), fac.safe_to_number (v_srtdeel_btw), fac.safe_to_date (v_srtdeel_vervaldatum, 'yyyymmdd'), fac.safe_to_number (v_srtdeel_minimum), v_bes_staffeltabel_key, fac.safe_to_number (v_srtdeel_wijzigdagen), fac.safe_to_number (v_srtdeel_annuleerdagen), SUBSTR (v_srtdeel_opmerking, 1, 2000) ); IF (header_is_valid = 2) THEN -- Met voorraad gegevens erbij UPDATE STPH_IMP_CATALOGUS SET bes_srtdeel_voorraadmin = v_bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax = v_bes_srtdeel_voorraadmax, bes_srtdeel_maxbestel = v_bes_srtdeel_maxbestel, bes_srtdeel_voorraadfactor = v_bes_srtdeel_voorraadfactor, bes_inclexcl_btw = v_bes_inclexcl_btw WHERE fac_import_key = p_import_key AND ins_discipline_key = v_discipline_key AND prs_bedrijf_key = v_bedrijf_key AND ins_srtdeel_nr = SUBSTR (v_srtdeel_nr, 1, 32) AND ins_srtdeel_eenheid = SUBSTR (v_srtdeel_eenheid, 1, 30); END IF; v_count_import := v_count_import + 1; END IF; 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, 'W', v_aanduiding || v_errormsg, v_errorhint); 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', 'Inleesproces: aantal ingelezen importregels: ' || TO_CHAR (v_count_tot), '' ); fac.imp_writelog ( p_import_key, 'S', 'Inleesproces: aantal ongeldige niet ingelezen 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, 200); v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Inlezen catalogus afgebroken!'); END stph_import_catalogus; / /* Formatted on 19-7-2011 17:34:34 (QP5 v5.115.810.9015) */ CREATE OR REPLACE PROCEDURE stph_update_catalogus ( p_import_key IN NUMBER ) AS v_errormsg VARCHAR2 (1000); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_aanduiding VARCHAR2 (200); v_disc_oms VARCHAR2 (100); v_bedr_naam VARCHAR2 (100); -- Voor één catalogus PROCEDURE l_update_catalogus (pdisc_key IN NUMBER, pbedr_key IN NUMBER) AS CURSOR c_delsrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT sd.bes_srtdeel_key, sd.bes_srtdeel_nr, sd.bes_srtdeel_omschrijving FROM bes_srtdeel sd, bes_srtgroep sg WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sg.ins_discipline_key = cdisc_key AND sd.prs_bedrijf_key = cbedr_key AND sd.bes_srtdeel_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. cat/bedrijf! (SELECT 1 FROM stph_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND UPPER (f.ins_srtdeel_nr) = UPPER (sd.bes_srtdeel_nr)); CURSOR c_delsrtgroep ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT sg.bes_srtgroep_key, sg.bes_srtgroep_omschrijving FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND sg.bes_srtgroep_verwijder IS NULL AND NOT EXISTS -- Niet meer in importbestand irt. alleen cat! (SELECT 1 FROM stph_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND UPPER (f.ins_srtgroep_omschrijving) = UPPER (sg.bes_srtgroep_omschrijving)) AND NOT EXISTS -- Waaronder geen artikelen van ander bedrijf! (SELECT 1 FROM bes_srtdeel sd WHERE sd.bes_srtgroep_key = sg.bes_srtgroep_key AND sd.prs_bedrijf_key <> cbedr_key); CURSOR c_inssrtgroep ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT DISTINCT f.ins_srtgroep_omschrijving FROM stph_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_srtgroep_omschrijving IS NOT NULL AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep sg WHERE sg.ins_discipline_key = cdisc_key AND UPPER (sg.bes_srtgroep_omschrijving) = UPPER (f.ins_srtgroep_omschrijving) AND sg.bes_srtgroep_verwijder IS NULL); CURSOR c_updsrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT s.bes_srtdeel_key, f.* FROM stph_imp_catalogus f, bes_srtgroep g, bes_srtdeel s WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL; CURSOR c_inssrtdeel ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT f.* FROM stph_imp_catalogus f WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND NOT EXISTS (SELECT 1 FROM bes_srtgroep g, bes_srtdeel s WHERE g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL); ccount NUMBER (10); l_srtgroep_key NUMBER (10); l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE; l_omschrijving bes_srtdeel.bes_srtdeel_omschrijving%TYPE; l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE; l_inkprijs bes_srtdeel_prijs.bes_srtdeel_prijs_inkprijs%TYPE; l_veelvoud bes_srtdeel.bes_srtdeel_veelvoud%TYPE; l_minimum bes_srtdeel.bes_srtdeel_minimum%TYPE; l_wijzigdagen bes_srtdeel.bes_srtdeel_wijzigdagen%TYPE; l_annuleerdagen bes_srtdeel.bes_srtdeel_annuleerdagen%TYPE; l_opmerking bes_srtdeel.bes_srtdeel_opmerking%TYPE; BEGIN -- DELETE SRTDEEL ccount := 0; FOR rec IN c_delsrtdeel (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen artikel ' || rec.bes_srtdeel_nr; UPDATE bes_srtdeel SET bes_srtdeel_verwijder = SYSDATE WHERE bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij verwijderen artikelkenmerken ' || rec.bes_srtdeel_nr; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'S' AND bes_srtinstallatie_key = rec.bes_srtdeel_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.bes_srtdeel_nr || '/' || rec.bes_srtdeel_omschrijving || ' is verwijderd', '' ); ccount := ccount + 1; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen verwijderd', '' ); COMMIT; -- DELETE SRTGROEP ccount := 0; FOR rec IN c_delsrtgroep (pdisc_key, pbedr_key) LOOP v_errormsg := 'Fout bij verwijderen groep ' || rec.bes_srtgroep_omschrijving; UPDATE bes_srtgroep SET bes_srtgroep_verwijder = SYSDATE WHERE bes_srtgroep_key = rec.bes_srtgroep_key; v_errormsg := 'Fout bij verwijderen groepskenmerken ' || rec.bes_srtgroep_omschrijving; UPDATE bes_kenmerk SET bes_kenmerk_verwijder = SYSDATE WHERE bes_kenmerk_niveau = 'G' AND bes_srtinstallatie_key = rec.bes_srtgroep_key; fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.bes_srtgroep_omschrijving || ' is verwijderd', '' ); ccount := ccount + 1; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen verwijderd', '' ); COMMIT; -- INSERT SRTGROEP ccount := 0; FOR rec IN c_inssrtgroep (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij toevoegen groep ' || rec.ins_srtgroep_omschrijving; INSERT INTO bes_srtgroep ( ins_discipline_key, bes_srtgroep_omschrijving ) VALUES (pdisc_key, rec.ins_srtgroep_omschrijving); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Groep ' || rec.ins_srtgroep_omschrijving || ' is toegevoegd', '' ); ccount := ccount + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' groepen toegevoegd', '' ); COMMIT; -- UPDATE SRTDEEL ccount := 0; FOR rec IN c_updsrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij bepalen huidige artikel-velden ' || rec.ins_srtdeel_nr; -- Tbv. logging de oude waarden opzoeken. SELECT bes_srtdeel_omschrijving, bes.getsrtdeelprijs (rec.bes_srtdeel_key, NULL), bes.getsrtdeelinkprijs (rec.bes_srtdeel_key, NULL), bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking INTO l_omschrijving, l_prijs, l_inkprijs, l_veelvoud, l_minimum, l_wijzigdagen, l_annuleerdagen, l_opmerking FROM bes_srtdeel WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; v_errormsg := 'Fout bij bijwerken artikel ' || rec.ins_srtdeel_nr; -- Codetechnisch zou hier bes.upsert_srtdeel() passen, maar die doet bv nog geen inkprijs. -- Later nog eens TODO UPDATE bes_srtdeel SET bes_srtgroep_key = l_srtgroep_key, bes_srtdeel_omschrijving = rec.ins_srtdeel_omschrijving, bes_srtdeel_image = rec.ins_srtdeel_image, bes_srtdeel_btw = rec.ins_srtdeel_btw, bes_srtdeel_eenheid = rec.ins_srtdeel_eenheid, bes_srtdeel_vervaldatum = rec.ins_srtdeel_vervaldatum, bes_srtdeel_veelvoud = rec.ins_srtdeel_veelvoud, bes_srtdeel_minimum = rec.ins_srtdeel_minimum, bes_staffeltabel_key = rec.bes_staffeltabel_key, bes_srtdeel_wijzigdagen = rec.ins_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen = rec.ins_srtdeel_annuleerdagen, bes_srtdeel_opmerking = rec.ins_srtdeel_opmerking WHERE bes_srtdeel_verwijder IS NULL AND bes_srtdeel_key = rec.bes_srtdeel_key; IF l_omschrijving <> rec.ins_srtdeel_omschrijving THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Omschrijving ' || l_omschrijving || ' -> ' || rec.ins_srtdeel_omschrijving ); END IF; bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); IF l_prijs <> rec.ins_srtdeel_prijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Prijs ' || l_prijs || ' -> ' || rec.ins_srtdeel_prijs ); END IF; IF l_inkprijs <> rec.ins_srtdeel_inkprijs THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Inkoopprijs ' || l_inkprijs || ' -> ' || rec.ins_srtdeel_inkprijs ); END IF; IF l_veelvoud <> rec.ins_srtdeel_veelvoud THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelveelvoud ' || l_veelvoud || ' -> ' || rec.ins_srtdeel_veelvoud ); END IF; IF l_minimum <> rec.ins_srtdeel_minimum THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Bestelminimum ' || l_minimum || ' -> ' || rec.ins_srtdeel_minimum ); END IF; IF l_wijzigdagen <> rec.ins_srtdeel_wijzigdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Wijzigdagen ' || l_wijzigdagen || ' -> ' || rec.ins_srtdeel_wijzigdagen ); END IF; IF l_annuleerdagen <> rec.ins_srtdeel_annuleerdagen THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is gewijzigd', 'Annuleerdagen ' || l_annuleerdagen || ' -> ' || rec.ins_srtdeel_annuleerdagen ); END IF; IF l_opmerking <> rec.ins_srtdeel_opmerking THEN fac.imp_writelog ( p_import_key, 'I', 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_opmerking || ' is gewijzigd', 'Opmerking ' || l_opmerking || ' -> ' || rec.ins_srtdeel_opmerking ); END IF; ccount := ccount + 1; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen bijgewerkt', '' ); COMMIT; -- INSERT SRTDEEL ccount := 0; FOR rec IN c_inssrtdeel (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen groep ' || rec.ins_srtgroep_omschrijving; SELECT bes_srtgroep_key INTO l_srtgroep_key FROM bes_srtgroep WHERE bes_srtgroep_verwijder IS NULL AND ins_discipline_key = pdisc_key AND UPPER (bes_srtgroep_omschrijving) = UPPER (rec.ins_srtgroep_omschrijving); v_errormsg := 'Fout bij toevoegen artikel ' || rec.ins_srtdeel_nr; INSERT INTO bes_srtdeel (bes_srtgroep_key, bes_srtdeel_nr, bes_srtdeel_omschrijving, bes_srtdeel_image, bes_srtdeel_btw, bes_srtdeel_eenheid, bes_srtdeel_dimensie, prs_bedrijf_key, bes_srtdeel_vervaldatum, bes_srtdeel_veelvoud, bes_srtdeel_minimum, bes_staffeltabel_key, bes_srtdeel_wijzigdagen, bes_srtdeel_annuleerdagen, bes_srtdeel_opmerking) VALUES (l_srtgroep_key, rec.ins_srtdeel_nr, rec.ins_srtdeel_omschrijving, rec.ins_srtdeel_image, rec.ins_srtdeel_btw, rec.ins_srtdeel_eenheid, 0, pbedr_key, rec.ins_srtdeel_vervaldatum, rec.ins_srtdeel_veelvoud, rec.ins_srtdeel_minimum, rec.bes_staffeltabel_key, rec.ins_srtdeel_wijzigdagen, rec.ins_srtdeel_annuleerdagen, rec.ins_srtdeel_opmerking) RETURNING bes_srtdeel_key INTO l_bes_srtdeel_key; bes.upsert_srtdeel_prijs (l_bes_srtdeel_key, rec.ins_srtdeel_prijs, rec.ins_srtdeel_inkprijs); fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Artikel ' || rec.ins_srtdeel_nr || '/' || rec.ins_srtdeel_omschrijving || ' is toegevoegd', '' ); ccount := ccount + 1; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN v_errormsg := 'Artikelnummer dubbel in importbestand'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); END; END LOOP; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen toegevoegd', '' ); COMMIT; END; PROCEDURE l_update_voorraad (pdisc_key IN NUMBER, pbedr_key IN NUMBER) AS -- Cursor van alle artikelen (die dus op dit punt zijn gesynct met de importtabel), waarvan we de voorraad-info van het bijbehorende inkoopartikel willen gaan zoeken... CURSOR c_updsrtdeel_voorraad ( cdisc_key IN NUMBER, cbedr_key IN NUMBER ) IS SELECT s.bes_srtdeel_key, f.* FROM stph_imp_catalogus f, bes_srtgroep g, bes_srtdeel s WHERE fac_import_key = p_import_key AND f.ins_discipline_key = cdisc_key AND f.prs_bedrijf_key = cbedr_key AND g.ins_discipline_key = cdisc_key AND g.bes_srtgroep_key = s.bes_srtgroep_key AND UPPER (s.bes_srtdeel_nr) = UPPER (f.ins_srtdeel_nr) AND s.prs_bedrijf_key = cbedr_key AND s.bes_srtdeel_verwijder IS NULL; ccount NUMBER (10); l_bes_discipline_key_inkoop bes_disc_params.bes_ins_discipline_key_inkoop%TYPE; l_bes_srtdeel_key bes_srtdeel.bes_srtdeel_key%TYPE; l_prijs bes_srtdeel_prijs.bes_srtdeel_prijs_prijs%TYPE; BEGIN ccount := 0; SELECT dp.bes_ins_discipline_key_inkoop INTO l_bes_discipline_key_inkoop FROM bes_disc_params dp WHERE dp.bes_ins_discipline_key = pdisc_key; IF l_bes_discipline_key_inkoop IS NOT NULL THEN -- We hebben van doen met een magazijn catalogus die is gkoppeld aan inkoopcatalogus met discipline-key 'l_bes_discipline_key_inkoop' -- De voorraad gegevens moeten in de overeenkomstige artikel van die inkoopcatalogus worden bijgewerkt. fac.imp_writelog ( p_import_key, 'I', v_aanduiding || 'Inkoop catalogus is gevonden: key = ' || l_bes_discipline_key_inkoop, '' ); FOR rec IN c_updsrtdeel_voorraad (pdisc_key, pbedr_key) LOOP BEGIN v_errormsg := 'Fout bij bepalen artikel in de inkoopcatalogus ' || rec.ins_srtdeel_nr; -- Op zoek naar het overeenkomstige artikel in de inkoopcatalogus, op basis van artikelnummer (bes_srtdeel_nr) welke niet verwijderd is van de catalogus met key 'l_bes_discipline_key_inkoop' -- Daarbij JUIST geen check op eenheid, die is namelijk vooral anders (b.v. inkoopcatalogus heeft '1 pak van 4 stuks' en de magazijncatalogus heeft 'per stuk') SELECT s.bes_srtdeel_key INTO l_bes_srtdeel_key FROM bes_srtdeel s, bes_srtgroep g WHERE UPPER (s.bes_srtdeel_nr) = UPPER (rec.ins_srtdeel_nr) AND s.bes_srtgroep_key = g.bes_srtgroep_key AND s.bes_srtdeel_verwijder IS NULL AND g.ins_discipline_key = l_bes_discipline_key_inkoop; UPDATE bes_srtdeel SET bes_srtdeel_voorraadmin = rec.bes_srtdeel_voorraadmin, bes_srtdeel_voorraadmax = rec.bes_srtdeel_voorraadmax, bes_srtdeel_voorraadfactor = rec.bes_srtdeel_voorraadfactor, bes_srtdeel_maxbestel = COALESCE(rec.bes_srtdeel_maxbestel,0) WHERE bes_srtdeel_key = l_bes_srtdeel_key; l_prijs := NULL; CASE rec.bes_inclexcl_btw WHEN '1' THEN -- 1. Prijs van artikel van inerne (magazijn)catalogus omrekenen obv factor, zonder btw omrekening (100 euro met factor 50 -> 100/50 = 2 euro) l_prijs := rec.ins_srtdeel_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1); WHEN '2' THEN -- 2. is omrekenen obv de voorraadfactor excl btw (prijzen staan incl btw, en je wilt naar excl btw intern) (100 euro met factor 50 en 21% btw -> 100 - 21% BTW /50 = 82,64 / 50 = 1,65) IF fac.safe_to_number(rec.ins_srtdeel_btw) IS NOT NULL THEN l_prijs := (rec.ins_srtdeel_prijs * 100) / (100 + fac.safe_to_number(rec.ins_srtdeel_btw)); l_prijs := l_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1); ELSE fac.imp_writelog ( p_import_key, 'W', 'BTW bij artkel ' || rec.ins_srtdeel_nr || ' is NIET gevonden', 'Prijs wordt niet omgerekend' ); END IF; WHEN '3' THEN -- 3. is omrekenen obv de voorraadfactor incl btw (prijzen staan excl btw, en je wilt naar incl btw intern) (100 euro met factor 50 en 21% btw -> 100 + 21% BTW = 121,00 / 50 = 2,42) IF fac.safe_to_number(rec.ins_srtdeel_btw) IS NOT NULL THEN l_prijs := rec.ins_srtdeel_prijs * ((100 + fac.safe_to_number(rec.ins_srtdeel_btw))/100); l_prijs := l_prijs / COALESCE(rec.bes_srtdeel_voorraadfactor,1); ELSE fac.imp_writelog ( p_import_key, 'W', 'BTW bij artkel ' || rec.ins_srtdeel_nr || ' is NIET gevonden', 'Prijs wordt niet omgerekend' ); END IF; ELSE NULL; END CASE; IF l_prijs IS NOT NULL THEN l_prijs := ROUND (l_prijs,2); -- Inkoopprijs NULL, magazijn catalogus is dit niet relevant, is uitgangspunt bes.upsert_srtdeel_prijs (rec.bes_srtdeel_key, l_prijs, NULL); END IF; ccount := ccount + 1; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN v_errormsg := 'Artikelnummer dubbel in inkoopcatalogus'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'W', v_aanduiding || v_errormsg, ''); END; END LOOP; ELSE fac.imp_writelog ( p_import_key, 'W', v_aanduiding || 'Inkoop catalogus is NIET gevonden', '' ); END IF; fac.imp_writelog ( p_import_key, 'S', v_aanduiding || 'Er zijn ' || TO_CHAR (ccount) || ' artikelen met waarvan de voorraadgegevens zijn bijgewerkt', '' ); END; BEGIN -- Doorloop alle catalogi/ bedrijven. Er kunnen er in theorie meerdere tegelijk zijn FOR rec IN (SELECT DISTINCT ins_discipline_key, prs_bedrijf_key FROM stph_imp_catalogus WHERE fac_import_key = p_import_key) LOOP BEGIN -- Puur voor logging toch even catalogus- en bedrijfsnaam bepalen! v_aanduiding := '[' || TO_CHAR (rec.ins_discipline_key) || '] '; v_errormsg := 'Fout bepalen catalogus'; SELECT ins_discipline_omschrijving INTO v_disc_oms FROM ins_tab_discipline WHERE ins_discipline_key = rec.ins_discipline_key; v_aanduiding := '[' || TO_CHAR (rec.prs_bedrijf_key) || '] '; v_errormsg := 'Fout bepalen bedrijf'; SELECT prs_bedrijf_naam INTO v_bedr_naam FROM prs_v_aanwezigbedrijf WHERE prs_bedrijf_key = rec.prs_bedrijf_key; fac.imp_writelog ( p_import_key, 'I', 'Import van catalogus ' || v_disc_oms || '/' || v_bedr_naam, 'discipline: ' || rec.ins_discipline_key || ', bedrijf: ' || rec.prs_bedrijf_key ); COMMIT; v_aanduiding := '[' || v_disc_oms || '|' || v_bedr_naam || '] '; l_update_catalogus (rec.ins_discipline_key, rec.prs_bedrijf_key); l_update_voorraad (rec.ins_discipline_key, rec.prs_bedrijf_key); EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, ''); COMMIT; END; END LOOP; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 200); v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')'; fac.imp_writelog (p_import_key, 'E', v_aanduiding || v_errormsg, 'Verwerken catalogus afgebroken!'); END stph_update_catalogus; / -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -- Einde Copy van fac_import_catalogus en fac_update_catalogus van 2015.2 (d.d. 26/10/15 uit fac_pacf.src gekopieerd) -- -- -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ ------ FACTUUREXPORT / KOPPELING DBS ------ -------------------------------------------------- -- DBS1: Factuurexport -- view tbv export naar financieel systeem DBS CREATE OR REPLACE VIEW stph_v_factuur_mldcnt_gegevens ( fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_totaal, fin_factuur_totaal_btw, fin_factuur_totaal_dbs, prs_bedrijf_key, prs_leverancier_nr, fin_factuurregel_totaal, fin_factuurregel_btw, fin_factuurregel_totaal_dbs, fin_factuurregel_btw_perc, fin_btwtabelwaarde_btwcode, fin_factuurregel_nr, fin_factuurregel_omschrijving, fin_factuur_debiteur_nr, project_nummer, prs_kostensoort_oms, prs_kostensoort_doorbelasten, prs_kostenplaats_nr, bes_opdr_key, mld_opdr_key, cnt_contract_key, fin_factuur_statuses_key ) AS SELECT DISTINCT f.fin_factuur_key, COALESCE (TO_CHAR (cnt_contract_nummer), (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, f.fin_factuur_datum, f.fin_factuur_boekmaand, f.fin_factuur_nr, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, CASE WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0 THEN LPAD(TO_CHAR(10000 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,4)), 12, '0') || '-' ELSE LPAD(TO_CHAR(10000 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),4)), 12, '0') || '+' END fin_factuur_totaal_dbs, COALESCE (b_c.prs_bedrijf_key, b_o.prs_bedrijf_key) prs_bedrijf_key, COALESCE (b_c.prs_leverancier_nr, b_o.prs_leverancier_nr) prs_leverancier_nr, fr.fin_factuurregel_totaal, fr.fin_factuurregel_btw, CASE WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0 THEN LPAD(TO_CHAR(10000 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,4)), 12, '0') || LPAD('0',12,'0') ELSE LPAD('0',12,'0') || LPAD(TO_CHAR(10000 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),4)), 12, '0') END fin_factuurregel_totaal_dbs, btw.fin_btwtabelwaarde_perc, btw.fin_btwtabelwaarde_code, fr.fin_factuurregel_nr, fr.fin_factuurregel_omschrijving, f.fin_factuur_debiteur_nr, NULL projectnummer, COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms), DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten), COALESCE (kp_c.prs_kostenplaats_nr, kp_o.prs_kostenplaats_nr) prs_kostenplaats_nr, NULL bes_opdr_key, o.mld_opdr_key, c.cnt_contract_key, f.fin_factuur_statuses_key FROM fin_factuur f, fin_factuurregel fr, fin_btwtabelwaarde btw, mld_opdr o, mld_typeopdr ot, cnt_contract c, prs_bedrijf b_o, prs_bedrijf b_c, prs_kostensoort ks, prs_kostensoort ks_regel, prs_kostenplaats kp_c, prs_kostenplaats kp_o WHERE f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key AND f.bes_bestelopdr_key is null AND f.mld_opdr_key = o.mld_opdr_key(+) AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key (+) AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+) AND f.cnt_contract_key = c.cnt_contract_key(+) AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+) 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(+); CREATE OR REPLACE VIEW stph_v_factuur_bes_gegevens ( fin_factuur_key, opdracht_id, fin_factuur_datum, fin_factuur_boekmaand, fin_factuur_nr, fin_factuur_totaal, fin_factuur_totaal_btw, fin_factuur_totaal_dbs, prs_bedrijf_key, prs_leverancier_nr, fin_factuurregel_totaal, fin_factuurregel_btw, fin_factuurregel_totaal_dbs, fin_factuurregel_btw_perc, fin_btwtabelwaarde_btwcode, fin_factuurregel_nr, fin_factuurregel_omschrijving, fin_factuur_debiteur_nr, project_nummer, prs_kostensoort_oms, prs_kostensoort_doorbelasten, prs_kostenplaats_nr, bes_opdr_key, mld_opdr_key, cnt_contract_key, fin_factuur_statuses_key ) AS SELECT DISTINCT f.fin_factuur_key, TO_CHAR (bo.bes_bestelopdr_id) opdracht_id, f.fin_factuur_datum, f.fin_factuur_boekmaand, f.fin_factuur_nr, f.fin_factuur_totaal, f.fin_factuur_totaal_btw, CASE WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0 THEN LPAD(TO_CHAR(10000 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,4)), 12, '0') || '-' ELSE LPAD(TO_CHAR(10000 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),4)), 12, '0') || '+' END fin_factuur_totaal_dbs, b.prs_bedrijf_key, b.prs_leverancier_nr, fr.fin_factuurregel_totaal, fr.fin_factuurregel_btw, CASE WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0 THEN LPAD(TO_CHAR(10000 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,4)), 12, '0') || LPAD('0',12,'0') ELSE LPAD('0',12,'0') || LPAD(TO_CHAR(10000 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),4)), 12, '0') END fin_factuurregel_totaal_dbs, btw.fin_btwtabelwaarde_perc, btw.fin_btwtabelwaarde_code, fr.fin_factuurregel_nr, fr.fin_factuurregel_omschrijving, f.fin_factuur_debiteur_nr, NULL projectnummer, COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms), DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten), kp.prs_kostenplaats_nr, bo.bes_bestelopdr_key bes_opdr_key, NULL mld_opdr_key, NULL cnt_contract_key, f.fin_factuur_statuses_key FROM bes_bestelopdr bo, prs_bedrijf b, bes_bestelling bes, bes_bestelopdr_item boi, bes_bestelling_item bi, fin_factuur f, fin_factuurregel fr, fin_btwtabelwaarde btw, prs_kostensoort ks, prs_kostensoort ks_regel, prs_kostenplaats kp WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND bes.bes_bestelling_key = bi.bes_bestelling_key AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+) AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+) AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key AND f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key; CREATE OR REPLACE VIEW stph_v_factuur_geg AS SELECT * from stph_v_factuur_mldcnt_gegevens UNION SELECT * from stph_v_factuur_bes_gegevens; CREATE OR REPLACE VIEW stph_v_factuur_geg_akkoord AS SELECT * from stph_v_factuur_mldcnt_gegevens WHERE fin_factuur_statuses_key = 6 UNION SELECT * from stph_v_factuur_bes_gegevens WHERE fin_factuur_statuses_key = 6; -- Exportbestand die voor DBS wordt gegenereerd, bestaande uit kopregel (factuur-nivo) en bijbehorende sub-regels (factuurregels) -- -- Velden kopregel: -- 1: uniek boekstuknummer van 10 posities (fin_factuur_key), posities 1-9 -- 2: factuurnummer van 16 posities, posities 10-25 -- 3: factuurdatum van 8 posities in formaat ddmmjjjjj, posities 26-33 -- 4: verdeelperiode van 6 posities in formaat jjjjmm, posities 34-39 -- 5: leveranciernummer van 4 posities, posities 40-43 -- 6: factuurregelnummer, in kopregel 00000 (5 posities, in subregel het opeenvolgend regelnr van de factuurregel), posities 44-48 -- 7: factuurregelomschrijving, in kopregel leeg (30 spaties), in subregel de omschrijving van de factuurregel), posities 49-78 -- 8: kostensoort, in kopregel 00000 (5 posities) in subregel de kostensoort), posities 79-83 -- 9: kostenplaats, in kopregel 0000 (4 posities), in subregel de kostenplaats, posities 84-87 -- 10: Debet/Credit: totaal factuurbedrag incl BTW (11 posities), bedrag in centen met achteraan een min-teken '-' (debet-post) of plus-teken (credit-post) (dus 123.95 euro -> 0000012395-), posities 88-98, -- 11: Debet: totaal factuurregelbedrag, in kopregel leeg (10 nullen), posities 99-108 -- 12: Credit: totaal factuurregelbedrag indien NEGATIEF, in kopregel leeg (10 nullen), posities 109-118 -- Velden subregel: -- 1: uniek boekstuknummer van 10 posities (fin_factuur_key), posities 1-9 -- 2: factuurnummer van 20 posities, posities 10-25 -- 3: factuurdatum van 8 posities in formaat ddmmjjjjj, posities 26-33 -- 4: verdeelperiode van 6 posities in formaat jjjjmm, posities 34-39 -- 5: leveranciernummer van 4 posities, posities 40-43 -- 6: factuurregelnummer, in kopregel 00000 (5 posities, in subregel het opeenvolgend regelnr van de factuurregel), posities 44-48 -- 7: factuurregelomschrijving, in kopregel leeg (30 spaties), in subregel de omschrijving van de factuurregel), posities 49-78 -- 8: kostensoort, in kopregel 00000 (6 posities) in subregel de kostensoort), posities 79-84 -- 9: kostenplaats, in kopregel 0000 (4 posities), in subregel de kostenplaats, posities 85-88 -- 10: Debet/Credit: totaal factuurbedrag incl BTW (11 posities), in subregel leeg (10 nullen) met een extra 0 vanwege de het min of plusteken in kopregel, posities 89-99, -- 11: Debet: totaal factuurregelbedrag, (10 posities), bedrag in centen (dus 123.95 euro -> 0000012395), posities 110-119 (NB: hier geen min-teken! alleen in kopregel) -- 12: Credit: totaal factuurregelbedrag indien NEGATIEF, (10 posities), bedrag in centen (dus 123.95 euro -> 0000012395), posities 120-129 CREATE OR REPLACE VIEW stph_v_export_dbs (result, result_order) AS SELECT SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(MAX(fin_factuur_key), 5, '0') || LPAD(MAX(fin_factuur_nr), 16, '0') || TO_CHAR (MAX(fin_factuur_datum), 'ddmmyyyy') || SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(SUBSTR(MAX(fin_factuur_boekmaand),6,2) , 2, '0') || LPAD(COALESCE(MAX(prs_leverancier_nr),'0'), 4, '0') || LPAD('0',5,'0') || LPAD(' ',30,' ') || LPAD('0',6,'0') || LPAD('0',4,'0') || MAX(fin_factuur_totaal_dbs) || LPAD('0',12,'0') || LPAD('0',12,'0') , SUBSTR(MAX(fin_factuur_boekmaand),1,4) || LPAD(MAX(fin_factuur_key), 5, '0') || LPAD('0',5,'0') FROM stph_v_factuur_geg_akkoord fg GROUP by fin_factuur_key UNION ALL SELECT SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(fin_factuur_key, 5, '0') || LPAD(fin_factuur_nr, 16, '0') || TO_CHAR (fin_factuur_datum, 'ddmmyyyy') || SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(SUBSTR(fin_factuur_boekmaand,6,2) , 2, '0') || LPAD(COALESCE(prs_leverancier_nr,'0'), 4, '0') || LPAD(fin_factuurregel_nr,5,'0') || LPAD(COALESCE(fin_factuurregel_omschrijving, ' '),30,' ') || LPAD(prs_kostensoort_oms,6,'0') || LPAD(prs_kostenplaats_nr,4,'0') || LPAD('0',12,'0') || '0' || fin_factuurregel_totaal_dbs , SUBSTR(fin_factuur_boekmaand,1,4) || LPAD(fin_factuur_key, 5, '0') || LPAD(fin_factuurregel_nr,5,'0') FROM stph_v_factuur_geg_akkoord fg; CREATE OR REPLACE PROCEDURE stph_export_dbs ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS -- In cursor cfactuur alle facturen die worden geexporteerd... CURSOR cfactuur IS SELECT fin_factuur_key FROM stph_v_factuur_geg_akkoord GROUP BY fin_factuur_key; BEGIN -- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT... FOR cfact IN cfactuur LOOP -- Zowel de factuur in tracking zetten als de status op verwerkt (=7) zetten fin.setfactuurstatus (cfact.fin_factuur_key, 7, NULL); END LOOP; END; / CREATE OR REPLACE VIEW stph_v_export_undo_dbs ( result, result_order ) AS SELECT REPLACE(REPLACE(f.fin_factuur_key || ';' || opdracht_id || ';' || fin_factuur_datum || ';' || fin_factuur_nr || ';' || prs_bedrijf_key || ';' || fin_factuurregel_totaal || ';' || fin_factuurregel_btw || ';' || fin_factuurregel_nr || ';' || fin_factuur_debiteur_nr || ';' || project_nummer || ';' || prs_kostensoort_oms || ';' || bes_opdr_key || ';' || mld_opdr_key || ';' || cnt_contract_key ,CHR (13), ''), CHR (10), ''), f.fin_factuur_key FROM stph_v_factuur_geg f, fac_tracking t, fac_srtnotificatie sn WHERE sn.fac_srtnotificatie_code ='FINVER' AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60)) FROM fac_tracking t1 WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key) AND f.fin_factuur_key = t.fac_tracking_refkey AND f.fin_factuur_statuses_key = 7; CREATE OR REPLACE PROCEDURE stph_select_undo_dbs ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2 ) AS v_errormsg VARCHAR (200); BEGIN v_errormsg := 'Geen akties'; END; / -- Procedure om alle geexporteerde facturen naar status akkoord terug te zetten. CREATE OR REPLACE PROCEDURE stph_export_undo_dbs ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS CURSOR cfactuur IS SELECT DISTINCT f.fin_factuur_key FROM fac_tracking t, fac_srtnotificatie sn, fin_factuur f WHERE sn.fac_srtnotificatie_code ='FINVER' AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60)) FROM fac_tracking t1 WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key) AND f.fin_factuur_key = t.fac_tracking_refkey AND fin_factuur_statuses_key = 7; v_errormsg VARCHAR (200); oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); BEGIN v_errormsg := 'Geen akties'; FOR cfact IN cfactuur LOOP -- Eerst de factuur in tracking zetten... -- Omdat van 7 naar 6 niet mag/geoorloofd is, lukt het niet via -- de reguliere functie fin.setfactuurstatus (cfact.fin_factuur_key, 6, NULL); -- Dan maar zelf en custom-made: fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet'); UPDATE fin_factuur SET fin_factuur_statuses_key = 6 WHERE fin_factuur_key = cfact.fin_factuur_key; END LOOP; END; / -------------------------------------------------- -- DBS2: Catering export -- Velden catering-regels voor intern doorbelasten (DBS) van de vorige maand, die niet dirty zijn. CREATE OR REPLACE VIEW stph_v_res_catering_2_dbs AS SELECT rr.res_reservering_key, rr.res_rsv_ruimte_volgnr, rr.res_rsv_ruimte_key, r.res_ruimte_key, r.res_ruimte_nr, l.alg_locatie_code, l.alg_locatie_omschrijving, g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_volgnr, v.alg_verdieping_omschrijving, ar.alg_ruimte_nr, ar.alg_ruimte_omschrijving, op.res_opstelling_key, op.res_opstelling_omschrijving, rr.res_rsv_ruimte_van, rr.res_rsv_ruimte_omschrijving, rr.res_rsv_ruimte_opmerking, rr.res_rsv_ruimte_bezoekers, rr.res_status_fo_key, rr.res_status_bo_key, ra.res_rsv_artikel_levering, TO_CHAR(ra.res_rsv_artikel_levering, 'DD-MM-YYYY') datum, TO_CHAR(ra.res_rsv_artikel_levering, 'HH24:MI') tijd, ra.res_rsv_artikel_aantal aantal, a.res_artikel_key, a.res_artikel_nr artikelnr, a.res_artikel_omschrijving artikeloms, d.ins_discipline_key, d.ins_discipline_omschrijving catalogus, ra.res_rsv_artikel_prijs, a.res_artikel_prijs, a.res_artikel_prijs eenheidsprijs, res.getartikelprijs(ra.res_rsv_artikel_key) totaalprijs, c.prs_perslid_naam contact_naam, c.prs_perslid_tussenvoegsel contact_tussenvoegsel, c.prs_perslid_voorletters contact_voorletters, c.prs_perslid_voornaam contact_voornaam, DECODE(c.prs_perslid_geslacht,0,'V',1,'M', '') contact_geslacht, c.prs_perslid_email contact_email, c.prs_perslid_telefoonnr contact_telefoonnr, c.prs_perslid_mobiel contact_mobiel, h.prs_perslid_naam host_naam, h.prs_perslid_tussenvoegsel host_tussenvoegsel, h.prs_perslid_voorletters host_voorletters, h.prs_perslid_voornaam host_voornaam, DECODE(h.prs_perslid_geslacht,0,'V',1,'M', '') host_geslacht, h.prs_perslid_email host_email, h.prs_perslid_telefoonnr host_telefoonnr, h.prs_perslid_mobiel host_mobiel, k.prs_kostenplaats_nr, ks.prs_kostensoort_oms FROM res_rsv_artikel ra, res_artikel a, res_discipline d, res_rsv_ruimte rr, res_ruimte_opstelling ro, res_opstelling op, res_ruimte r, alg_ruimte ar, alg_verdieping v, alg_gebouw g, alg_locatie l, prs_perslid c, prs_kostenplaats k, prs_kostensoort ks, prs_perslid h WHERE rr.res_rsv_ruimte_verwijder IS NULL AND rr.res_rsv_ruimte_van >= to_date('01-' || to_char(sysdate - to_char(sysdate, 'DD') - 1, 'MM-YYYY'), 'DD-MM-YYYY') AND rr.res_rsv_ruimte_van < to_date('01-' || to_char(sysdate, 'MM-YYYY'), 'DD-MM-YYYY') AND a.res_artikel_key = ra.res_artikel_key AND d.ins_discipline_key = a.res_discipline_key AND d.ins_discipline_min_level = 2 AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+) AND ro.res_ruimte_key = r.res_ruimte_key (+) AND ro.res_opstelling_key = op.res_opstelling_key (+) AND rr.alg_ruimte_key = ar.alg_ruimte_key (+) AND ar.alg_verdieping_key = v.alg_verdieping_key (+) AND v.alg_gebouw_key = g.alg_gebouw_key (+) AND g.alg_locatie_key = l.alg_locatie_key (+) AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key AND k.prs_kostenplaats_key = rr.prs_kostenplaats_key AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+) AND rr.res_rsv_ruimte_host_key = h.prs_perslid_key AND rr.res_rsv_ruimte_dirtlevel = 0; -- Velden catering-regels voor intern doorbelasten (DBS) van de vorige maand, die definitief zijn (gemaakt). -- 1e regel bij catering -- 1: kostensoort bij de catalogus, posities 1-6 -- 2: kostenplaats bij de reservering van 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0 -- 2e bijbehorende regel bij catering -- 1: kostensoort 83211, posities 1-6 -- 2: kostenplaats 2020, 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30 -- Aanvulling: zie call STPH#36545 -- Tegenboeking (2e bijbehorende regel) 'Catering'Catalogus "Dienstverlening logistiek" (key= 581) -> kostenplaats 2061 en kostensoort 41900 -- Tegenboeking (2e bijbehorende regel) 'Catering'Catalogus "Dienstverlening receptie" (key= 582) -> kostenplaats 2005 en kostensoort 41900 CREATE OR REPLACE VIEW stph_v_export_catering_dbs (result, result_order) AS SELECT LPAD(prs_kostensoort_oms,6,'0') || LPAD(prs_kostenplaats_nr,4,'0') || LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0') || '0000000000' , LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '1' FROM stph_v_res_catering_2_dbs WHERE res_status_fo_key = 2 AND totaalprijs <> 0 UNION ALL SELECT '832110' || '2020' || '0000000000' || LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0') , LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2' FROM stph_v_res_catering_2_dbs WHERE res_status_fo_key = 2 AND totaalprijs <> 0 AND ins_discipline_key NOT IN (581, 582) UNION ALL SELECT '419000' || '2061' || '0000000000' || LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0') , LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2' FROM stph_v_res_catering_2_dbs WHERE res_status_fo_key = 2 AND totaalprijs <> 0 AND ins_discipline_key = 581 UNION ALL SELECT '419000' || '2005' || '0000000000' || LPAD(TO_CHAR(ROUND(100 * totaalprijs,2)), 10, '0') , LPAD(res_reservering_key, 10, '0') || LPAD(res_rsv_ruimte_volgnr,5,'0') || '2' FROM stph_v_res_catering_2_dbs WHERE res_status_fo_key = 2 AND totaalprijs <> 0 AND ins_discipline_key = 582; -------------------------------------------------- -- DBS3: Interne bestellingen export -- Een interne bestelopdracht gaat naar "interne" relatiebeheer "Centraal Magazijn", dit is prs_bedrijf_key = 422 -- Een interne bestelopdracht "dagvers" gaat naar "interne" relatiebeheer "Centrale Keuken", dit is prs_bedrijf_key = 1401 CREATE OR REPLACE VIEW stph_v_bes_intern_2_dbs ( prs_bedrijf_key, bes_bestelopdr_key, bes_bestelopdr_item_posnr, prs_kostensoort_oms, prs_kostensoort_tegenboeking, prs_kostenplaats_nr, bes_bestelopdr_item_aantalontv, bes_bestelopdr_item_brutoprijs, bes_srtdeel_btw ) AS SELECT b.prs_bedrijf_key, boi.bes_bestelopdr_key, boi.bes_bestelopdr_item_posnr, COALESCE(ks_groep.prs_kostensoort_oms, ks.prs_kostensoort_oms), COALESCE(ks_groep.prs_kostensoort_refcode,ks.prs_kostensoort_refcode), kp.prs_kostenplaats_nr, boi.bes_bestelopdr_item_aantalontv, boi.bes_bestelopdr_item_brutoprijs, sd.bes_srtdeel_btw FROM bes_bestelopdr bo, prs_bedrijf b, bes_bestelling bes, bes_bestelopdr_item boi, bes_bestelling_item bi, prs_kostenplaats kp, bes_srtdeel sd, bes_srtgroep sg, bes_discipline d, prs_kostensoort ks, prs_kostensoort ks_groep WHERE b.prs_bedrijf_key IN (422, 1401) AND b.prs_bedrijf_key = bo.prs_bedrijf_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND bes.bes_bestelling_key = bi.bes_bestelling_key AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key AND sd.bes_srtdeel_key = bi.bes_srtdeel_key AND sg.BES_SRTGROEP_KEY = sd. BES_SRTGROEP_KEY AND d.ins_discipline_key = sg.ins_discipline_key AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+) AND sg.prs_kostensoort_key = ks_groep.prs_kostensoort_key (+) AND bo.bes_bestelopdr_status = 6; -- Velden interne bestelopdracht-regels voor intern doorbelasten (DBS), die geleverd zijn geadministreerd. -- 1e regel bij interne bestelregel. -- 1: eerst kostensoort bes_groep, indien leeg dan kostensoort bij de catalogus, posities 1-6 -- 2: kostenplaats bij de bestelling van 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0 -- 2e bijbehorende regel bij bestelregel -- 1: kostensoort_tegenboeking die hoort bij kostensoort uit 1e regel, (dus eerst KS groep, indien leeg dan KS catalogus) posities 1-6 -- 2: kostenplaats 0000, 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30 CREATE OR REPLACE VIEW stph_v_export_intern_magazijn (result, result_order) AS SELECT LPAD(prs_kostensoort_oms,6,'0') || LPAD(prs_kostenplaats_nr,4,'0') || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') || '0000000000' , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1' FROM stph_v_bes_intern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0 AND prs_bedrijf_key = 422 UNION ALL SELECT LPAD(prs_kostensoort_tegenboeking,6,'0') || '0000' || '0000000000' || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2' FROM stph_v_bes_intern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0 AND prs_bedrijf_key = 422; -- Velden interne bestelopdracht-regels voor intern doorbelasten (DBS), die geleverd zijn geadministreerd. -- 1e regel bij interne bestelregel. -- 1: eerst kostensoort bes_groep, indien leeg dan kostensoort bij de catalogus, posities 1-6 -- 2: kostenplaats bij de bestelling van 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30, allemaal 0 -- 2e bijbehorende regel bij bestelregel -- 1: kostensoort_tegenboeking die hoort bij kostensoort uit 1e regel, (dus eerst KS groep, indien leeg dan KS catalogus) posities 1-6 -- 2: kostenplaats 0000, 4 posities, posities 7-10 -- 3: debet: bedrag in centen, in 10 posities, posities 11-20, allemaal 0 -- 4: credit: bedrag in centen, in 10 posities, posities 21-30 CREATE OR REPLACE VIEW stph_v_export_intern_keuken (result, result_order) AS SELECT LPAD(prs_kostensoort_oms,6,'0') || LPAD(prs_kostenplaats_nr,4,'0') || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') || '0000000000' , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1' FROM stph_v_bes_intern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0 AND prs_bedrijf_key = 1401 UNION ALL SELECT LPAD(prs_kostensoort_oms,6,'0') || '2010' || '0000000000' || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2' FROM stph_v_bes_intern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0 AND prs_bedrijf_key = 1401; -- Op de balans ook de externe catalogus die gekoppeld is aan een (of meer) van die interne catalogi. -- Dus als tegenhanger van de interne "magazijn voorraad" catalogi die via VIEW stph_v_bes_intern_2_dbs verlopen.... -- Te bepalen via de kolom bes_ins_discipline_key_inkoop -- CREATE OR REPLACE VIEW stph_v_bes_extern_2_dbs ( prs_bedrijf_key, bes_bestelopdr_key, bes_bestelopdr_item_posnr, prs_kostensoort_oms, prs_kostensoort_tegenboeking, prs_kostenplaats_nr, bes_bestelopdr_item_aantalontv, bes_bestelopdr_item_brutoprijs, bes_srtdeel_btw ) AS SELECT b.prs_bedrijf_key, boi.bes_bestelopdr_key, boi.bes_bestelopdr_item_posnr, COALESCE(ks_groep.prs_kostensoort_oms, ks.prs_kostensoort_oms), COALESCE(ks_groep.prs_kostensoort_refcode,ks.prs_kostensoort_refcode), kp.prs_kostenplaats_nr, boi.bes_bestelopdr_item_aantalontv, boi.bes_bestelopdr_item_brutoprijs, sd.bes_srtdeel_btw FROM bes_bestelopdr bo, prs_bedrijf b, bes_bestelling bes, bes_bestelopdr_item boi, bes_bestelling_item bi, prs_kostenplaats kp, bes_srtdeel sd, bes_srtgroep sg, bes_discipline d, bes_disc_params dp, prs_kostensoort ks, prs_kostensoort ks_groep WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key AND bes.bes_bestelling_key = bi.bes_bestelling_key AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key AND sd.bes_srtdeel_key = bi.bes_srtdeel_key AND sg.BES_SRTGROEP_KEY = sd. BES_SRTGROEP_KEY AND d.ins_discipline_key = sg.ins_discipline_key AND d.ins_discipline_key = dp.bes_ins_discipline_key AND EXISTS (select 'x' FROM bes_disc_params dp2 WHERE dp2.bes_ins_discipline_key_inkoop = dp.bes_ins_discipline_key) AND d.prs_kostensoort_key = ks.prs_kostensoort_key (+) AND sg.prs_kostensoort_key = ks_groep.prs_kostensoort_key (+) AND bo.bes_bestelopdr_status = 6; -- Dit zou ook een DB4 bestand kunnen zijn, maar er is gekozen om deze regels tesamen met het bestaande DB3 bestand weg te schrijven... -- Zie VIEW stph_v_export_intern_bes_dbs en Export-PROCEDURE stph_v_export_intern_bes_dbs -- Daarin is deze nieuw view ook verwerkt.... -- Let op: de prijzen van de externe catalogi zijn excl BTW, doorbelasting is incl BTW, daarom wordt het BTW percentage erbij opgeteld. CREATE OR REPLACE VIEW stph_v_export_externe_voorraad (result, result_order) AS SELECT LPAD(prs_kostensoort_tegenboeking,6,'0') || '0000' || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * (1 + 0.01 * COALESCE(bes_srtdeel_btw,0)) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') || '0000000000' , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '1' FROM stph_v_bes_extern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0 UNION ALL SELECT '320100' || '0000' || '0000000000' || LPAD(TO_CHAR(100 * ROUND(COALESCE(bes_bestelopdr_item_aantalontv,0) * (1 + 0.01 * COALESCE(bes_srtdeel_btw,0)) * bes_bestelopdr_item_brutoprijs,2)), 10, '0') , LPAD(bes_bestelopdr_key, 10, '0') || LPAD(bes_bestelopdr_item_posnr,5,'0') || '2' FROM stph_v_bes_extern_2_dbs WHERE bes_bestelopdr_item_brutoprijs <> 0; CREATE OR REPLACE VIEW stph_v_export_intern_bes_dbs (result, result_order) AS SELECT * FROM stph_v_export_intern_magazijn UNION ALL SELECT * FROM stph_v_export_intern_keuken UNION ALL SELECT * FROM stph_v_export_externe_voorraad; CREATE OR REPLACE PROCEDURE stph_export_intern_bes_dbs ( p_applname IN VARCHAR2, p_applrun IN VARCHAR2, p_filedir IN VARCHAR2, p_filename IN VARCHAR2 ) AS -- In cursor cbesopdr alle bestelopdrachten die worden geexporteerd... CURSOR cbesopdracht IS SELECT DISTINCT bes_bestelopdr_key FROM stph_v_bes_intern_2_dbs UNION SELECT DISTINCT bes_bestelopdr_key FROM stph_v_bes_extern_2_dbs; BEGIN -- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT... FOR cbesopdr IN cbesopdracht LOOP -- De bestelopdracht op verwerkt zetten bes.setbestelopdrstatus (cbesopdr.bes_bestelopdr_key, 7, NULL); END LOOP; END; / -- STPH#34969 voorraad weergeven en evt max voorraad kunnen gebruiken CREATE OR REPLACE VIEW stph_v_rap_voorraad ( hide_f_srtgroep_omschrijving, artikel_nr, voorraad ) AS SELECT bes_srtgroep_omschrijving, bes_srtdeel_nr, COALESCE (aantal_geleverd * intern_voorraadfactor, 0) - COALESCE (aantal_intern_uit, 0) voorraad FROM ( SELECT a.bes_srtdeel_key, a.bes_srtdeel_nr, SUM (a.aantal_intern_uit) aantal_intern_uit, SUM (a.aantal_geleverd) aantal_geleverd, b.intern_voorraadfactor, a.bes_srtgroep_omschrijving FROM ( SELECT COALESCE (bo.bes_srtdeel_key_inkoop, bo.bes_srtdeel_key) bes_srtdeel_key, bo.bes_srtdeel_nr, bo.bes_ins_discipline_key, bo.inkoop_disc, SUM (bo.aantal_intern) aantal_intern_uit, SUM (bo.aantal_extern_geleverd) aantal_geleverd, bes_srtgroep_omschrijving FROM ( SELECT sd.bes_srtdeel_nr, sd.bes_srtdeel_key, bes_srtgroep_omschrijving, (SELECT isd2.bes_srtdeel_key FROM bes_srtdeel isd2, bes_srtgroep isg2, bes_discipline bd2 WHERE isd2.bes_srtgroep_key = isg2.bes_srtgroep_key AND bd2.ins_discipline_key = isg2.ins_discipline_key AND isd2.bes_srtdeel_nr LIKE sd.bes_srtdeel_nr AND bes_srtdeel_verwijder IS NULL AND bd2.ins_discipline_key = dp.bes_ins_discipline_key_inkoop) bes_srtdeel_key_inkoop, dp.bes_ins_discipline_key, dp.bes_ins_discipline_key_inkoop inkoop_disc, SUM (bi.bes_bestelling_item_aantal) aantal_intern, TO_NUMBER (NULL) aantal_open_order, TO_NUMBER (NULL) aantal_extern_geleverd FROM bes_discipline bd, bes_v_aanwezigsrtgroep g, bes_v_aanwezigsrtdeel sd, bes_bestelling b, bes_bestelling_item bi, bes_disc_params dp WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND b.bes_bestelling_key = bi.bes_bestelling_key AND g.ins_discipline_key = bd.ins_discipline_key AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND sd.bes_srtdeel_verwijder IS NULL AND dp.bes_ins_discipline_key_inkoop IS NOT NULL AND dp.bes_ins_discipline_key_inkoop = 221 AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE) GROUP BY sd.bes_srtdeel_nr, sd.bes_srtdeel_key, dp.bes_ins_discipline_key, dp.bes_ins_discipline_key_inkoop, bes_srtgroep_omschrijving UNION ALL SELECT sd.bes_srtdeel_nr, sd.bes_srtdeel_key, bes_srtgroep_omschrijving, NULL bes_srtdeel_key_inkoop, dp.bes_ins_discipline_key, bd.ins_discipline_key inkoop_disc, TO_NUMBER (NULL) aantal_intern, SUM (bi.bes_bestelling_item_aantal) - SUM(COALESCE ( bi.bes_bestelling_item_aantalontv, 0 )) aantal_open_order, TO_NUMBER (NULL) aantal_extern_geleverd FROM bes_discipline bd, bes_v_aanwezigsrtgroep g, bes_v_aanwezigsrtdeel sd, bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item bo, bes_disc_params dp WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_bestelopdr_item_key = bo.bes_bestelopdr_item_key AND g.ins_discipline_key = bd.ins_discipline_key AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND sd.bes_srtdeel_verwijder IS NULL AND b.bes_bestelling_status IN (2, 3, 4, 5) AND dp.bes_ins_discipline_key_inkoop IS NULL AND dp.bes_ins_discipline_key IN (SELECT dp1.bes_ins_discipline_key_inkoop FROM bes_disc_params dp1 WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL) AND bd.ins_discipline_key = 221 AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE) GROUP BY bes_srtdeel_nr, sd.bes_srtdeel_key, dp.bes_ins_discipline_key, bd.ins_discipline_key, bes_srtgroep_omschrijving UNION ALL SELECT sd.bes_srtdeel_nr, sd.bes_srtdeel_key, bes_srtgroep_omschrijving, NULL bes_srtdeel_key_inkoop, dp.bes_ins_discipline_key, bd.ins_discipline_key inkoop_disc, TO_NUMBER (NULL) aantal_intern, TO_NUMBER (NULL) aantal_open_order, SUM(COALESCE ( bi.bes_bestelling_item_aantalontv, 0 )) aantal_extern_geleverd FROM bes_discipline bd, bes_v_aanwezigsrtgroep g, bes_v_aanwezigsrtdeel sd, bes_bestelling b, bes_bestelling_item bi, bes_bestelopdr_item bo, bes_disc_params dp WHERE sd.bes_srtgroep_key = g.bes_srtgroep_key AND bi.bes_srtdeel_key = sd.bes_srtdeel_key AND b.bes_bestelling_key = bi.bes_bestelling_key AND bi.bes_bestelopdr_item_key = bo.bes_bestelopdr_item_key AND g.ins_discipline_key = bd.ins_discipline_key AND bd.ins_discipline_key = dp.bes_ins_discipline_key AND sd.bes_srtdeel_verwijder IS NULL AND (b.bes_bestelling_status IN (6, 7) OR (bo.bes_bestelopdr_item_ontvangen IS NOT NULL AND b.bes_bestelling_status IN (5))) AND dp.bes_ins_discipline_key_inkoop IS NULL AND dp.bes_ins_discipline_key IN (SELECT dp1.bes_ins_discipline_key_inkoop FROM bes_disc_params dp1 WHERE dp1.bes_ins_discipline_key_inkoop IS NOT NULL) AND bd.ins_discipline_key = 221 AND (sd.bes_srtdeel_vervaldatum IS NULL OR sd.bes_srtdeel_vervaldatum > SYSDATE) GROUP BY bes_srtdeel_nr, sd.bes_srtdeel_key, dp.bes_ins_discipline_key, bd.ins_discipline_key, bes_srtgroep_omschrijving, bes_srtgroep_omschrijving) bo GROUP BY bo.bes_srtdeel_key, bo.bes_srtdeel_key_inkoop, bo.bes_srtdeel_nr, bo.bes_ins_discipline_key, bo.inkoop_disc, bes_srtgroep_omschrijving) a, (SELECT sd2.bes_srtdeel_nr, sd2.bes_srtdeel_voorraadfactor intern_voorraadfactor, sg2.ins_discipline_key, sd2.bes_srtdeel_omschrijving bes_srtdeel_omschrijving FROM bes_srtdeel sd2, bes_srtgroep sg2 WHERE sd2.bes_srtgroep_key = sg2.bes_srtgroep_key AND sd2.bes_srtdeel_verwijder IS NULL) b WHERE a.bes_srtdeel_nr = b.bes_srtdeel_nr AND a.inkoop_disc = b.ins_discipline_key GROUP BY a.bes_srtdeel_key, a.bes_srtdeel_nr, a.inkoop_disc, a.bes_srtgroep_omschrijving, b.intern_voorraadfactor, b.bes_srtdeel_omschrijving) l; CREATE OR REPLACE VIEW stph_v_noti_cntreminder ( code, sender, receiver, text, key, par1, par2, xkey ) AS SELECT 'CNTUPD', '', COALESCE (c.prs_perslid_key_eig, c.prs_perslid_key_beh), 'Rappèl: Contract ' || c.cnt_contract_nummer_intern || DECODE (cnt_contract_versie, NULL, '', '.' || cnt_contract_versie) || ' (' || c.cnt_contract_omschrijving || ' ' || b.prs_bedrijf_naam || ')' || ' moet uiterlijk per ' || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY') || ' worden verlengd of opgezegd.', c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL FROM cnt_v_aanwezigcontract c, prs_bedrijf b WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key AND cnt_contract_verwijder IS NULL AND cnt_contract_status = 0 AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key)); -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------ INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM INVOICESHARING.COM ------ -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CREATE OR REPLACE PROCEDURE stph_import_invoicesharing (p_import_key IN NUMBER) AS v_seq_of_columns VARCHAR(50); BEGIN --In de XSL: factuurnr(1);factuurdatum(2);opdrachtnr(3);omschrijving(4);bedrag(5);btwperc(6);btwbedrag(7);btw_verlegd(8);document(9);kostensoort(10); --hulp voor pos : '1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;16;7;8;9;0' v_seq_of_columns := '0;1;2;3;0;0;4;0;5;7;6;9;0;0;0;10;0;0;0;0'; -- 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 -- v_afleverdatum: 6 -- 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/ waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet") -- v_kenmerk1: 16 -- v_kenmerk1: 17 -- v_kenmerk1: 18 -- v_kenmerk1: 19 -- v_kenmerk1: 20 -- v_boekmaand: 21 fac_import_factuur_body(p_import_key, v_seq_of_columns); END; / CREATE OR REPLACE PROCEDURE stph_postupdate_invoicesharing (p_import_key IN NUMBER) AS v_prs_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE; v_fin_kostensoort_key prs_kostensoort.prs_kostensoort_key%TYPE; CURSOR cfactuurregel_kostensoort IS SELECT DISTINCT fin_factuur_key, factuurnr, fin_factuurregel_key, kenmerk1, fac_imp_file_index FROM fac_imp_factuur WHERE fac_import_key = p_import_key; BEGIN FOR rc IN cfactuurregel_kostensoort LOOP BEGIN -- Dan gaan we op zoek of de kostensoort aangeleverd door InvoiceSharing, wel bestaat in Facilitor, zo nee, dan laten we die onbekende kostensoort op regelnivo LEEG SELECT MAX(prs_kostensoort_key) INTO v_prs_kostensoort_key FROM prs_kostensoort WHERE prs_kostensoort_upper = UPPER(rc.kenmerk1); IF v_prs_kostensoort_key IS NOT NULL THEN -- We hebben een geldige kostensoort van InvoiceSharing ontvangen, die gaan we zetten. -- Wel nog ff checken of deze kostensoort al bij factuur staat, want dan hoeven we dit op factuurregel niet te zetten (dan neemt die de kostensoort van factuur 'over') SELECT COALESCE(f.prs_kostensoort_key,-1) INTO v_fin_kostensoort_key FROM fin_factuur f, fin_factuurregel fr WHERE f.fin_factuur_key = fr.fin_factuur_key AND fr.fin_factuurregel_key = rc.fin_factuurregel_key; IF v_fin_kostensoort_key <> v_prs_kostensoort_key THEN -- De kostensoort is NIET dezelfde als bij factuur, dus we gaan hem op factuurregel nivo zetten. UPDATE fin_factuurregel SET prs_kostensoort_key = v_prs_kostensoort_key WHERE fin_factuurregel_key = rc.fin_factuurregel_key; END IF; ELSE -- STPH#38624: als er GEEN of een FOUTE/ONBEKENDE kostensoort bij de import wordt meegegeven, dat dan de status op "Ingevoerd" terug wordt gezet. UPDATE fin_factuur SET fin_factuur_statuses_key = 2 WHERE fin_factuur_key = (SELECT fin_factuur_key FROM fin_factuurregel fr WHERE fr.fin_factuurregel_key = rc.fin_factuurregel_key); END IF; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Van factuur met key ' || rc.fin_factuur_key || ' is de kostensoort niet verwerkt (regel ' || rc.fac_imp_file_index || ')', 'Factuurnr:' || rc.factuurnr || ' / Kostensoort: ' || rc.kenmerk1 ); END; END LOOP; END; / CREATE OR REPLACE PROCEDURE stph_update_invoicesharing (p_import_key IN NUMBER) AS BEGIN -- Standaard FCLT verwerk import facturen fac_update_factuur (p_import_key); stph_postupdate_invoicesharing(p_import_key); END; / CREATE OR REPLACE PROCEDURE stph_import_afasonline (p_import_key IN NUMBER) AS oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); v_errormsg VARCHAR2 (400); v_errorhint VARCHAR2 (400); BEGIN v_errorhint := 'Generieke update'; -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc prs.import_perslid (p_import_key, '0;0;0;0;0;0;6;4;3;1;' || '2;0;0;0;0;10;0;8;0;5;' || '7;11;0;0;0;0;12;0;0;0;'|| '0;0;0;0;0;0;0;0;0;0;'|| '0;0;0;0;0;0', '"Roepnaam";"Voorletters";"Tussenvoegsel";"Achternaam";"Persnr.";"Afdnr.";"Functie";"Email";"Mobile";"Telefoon";"Loginnaam";"Kostenplaats"' ); COMMIT; EXCEPTION WHEN OTHERS THEN oracle_err_num := SQLCODE; oracle_err_mes := SUBSTR (SQLERRM, 1, 100); v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes; fac.imp_writelog (p_import_key, 'E', v_errormsg, v_errorhint); END stph_import_afasonline; / CREATE OR REPLACE PROCEDURE stph_update_afasonline ( p_import_key IN NUMBER ) IS -- Alle personen verwijderen die niet meer in import bestand voorkomen. CURSOR c_del IS SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf WHERE p.prs_perslid_nr = i.prs_perslid_nr(+) AND pf.prs_perslid_key = p.prs_perslid_key AND p.prs_perslid_nr IS NOT NULL AND i.prs_perslid_nr IS NULL AND p.prs_perslid_verwijder IS NULL ORDER BY 2; v_count NUMBER; BEGIN -- generic update SELECT count(*) INTO v_count FROM fac_imp_perslid; IF v_count < 300 THEN fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie Specificatie' ); RETURN; END IF; -- 'NR' betekent dat op basis van personeelsNummeR wordt gematched. -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen prs.update_perslid (p_import_key, 'NR', NULL); -- Verwijder personen die niet meer in de import voorkomen. FOR rec IN c_del LOOP BEGIN prs.delete_perslid (p_import_key, rec.prs_perslid_key); END; END LOOP; STPH_post_update_afasonline (p_import_key); END stph_update_afasonline; / CREATE OR REPLACE PROCEDURE stph_post_update_afasonline (p_import_key IN NUMBER) AS v_kostenplaats_key_perslid NUMBER(10); v_kostenplaats_key_afdeling NUMBER(10); v_prs_afdeling_key NUMBER(10); CURSOR c_perslid_kpn_kenmerk IS SELECT prs_perslid_nr, prs_kenmerk1, prs_perslid_naam, prs_afdeling_naam FROM fac_imp_perslid; BEGIN FOR rc IN c_perslid_kpn_kenmerk LOOP BEGIN -- Kostenplaats die als kenmerk is meegegeven bij de persoon SELECT MAX(prs_kostenplaats_key) INTO v_kostenplaats_key_perslid FROM prs_kostenplaats WHERE prs_kostenplaats_upper = UPPER(rc.prs_kenmerk1) AND prs_kostenplaats_verwijder IS NULL; IF v_kostenplaats_key_perslid IS NULL THEN -- Kostenplaats bij de persoon (vanuit AFAS) staat niet in Facilitor, persoon blijft aan de afdeling gekoppeld volgens AFAS (dus niet naar evt. 'fictieve' afdeling). fac.imp_writelog (p_import_key, 'W', 'Kostenplaats van persoon' || rc.prs_perslid_nr || ' is NIET gevonden)', 'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam ); ELSE -- Kostenplaats record bij de persoon is gevonden, -- Nu eerst de kostenplaats van de afdeling bepalen SELECT MAX(a.prs_kostenplaats_key) INTO v_kostenplaats_key_afdeling FROM prs_afdeling a, prs_perslid p WHERE p.prs_perslid_nr = rc.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL AND a.prs_afdeling_key = p.prs_afdeling_key AND a.prs_afdeling_verwijder IS NULL; -- Als deze afwijkt van de kostenplaats van de afdeling waar persoon onder valt, dan persoon verhuizen naar die fictieve afdeling IF v_kostenplaats_key_afdeling IS NOT NULL THEN -- Afdeling heeft kostenplaats, nu vergelijken met die van persoon -- Indien ongelijk, dan zoek de fictieve afdeling, want daar persoon aan koppelen. IF v_kostenplaats_key_perslid <> v_kostenplaats_key_afdeling THEN -- Zoek de eerste afdeling (MAX) die kostenplaats van persoon heeft, daar gaat persoon onder vallen. SELECT MAX(a.prs_afdeling_key) INTO v_prs_afdeling_key FROM prs_afdeling a WHERE a.prs_kostenplaats_key = v_kostenplaats_key_perslid AND a.prs_afdeling_verwijder IS NULL; IF v_prs_afdeling_key IS NOT NULL THEN UPDATE prs_perslid p SET p.prs_afdeling_key = v_prs_afdeling_key WHERE p.prs_perslid_nr = rc.prs_perslid_nr AND p.prs_perslid_verwijder IS NULL; END IF; END IF; END IF; END IF; EXCEPTION WHEN OTHERS THEN fac.imp_writelog (p_import_key, 'W', 'Post update bij persoon' || rc.prs_perslid_nr || ' is NIET volledig uitgevoerd )', 'Naam:' || rc.prs_perslid_naam || ' / Afdeling: ' || rc.prs_afdeling_naam ); END; END LOOP; END; / CREATE OR REPLACE VIEW STPH_V_RAP_CATERING ( RES_RESERVERING_KEY, RES_RSV_RUIMTE_VOLGNR, RES_RESERVERING, RES_RSV_RUIMTE_KEY, RES_RUIMTE_KEY, RES_RUIMTE_NR, ALG_LOCATIE_CODE, ALG_LOCATIE_OMSCHRIJVING, ALG_GEBOUW_CODE, ALG_GEBOUW_NAAM, ALG_VERDIEPING_VOLGNR, ALG_VERDIEPING_OMSCHRIJVING, ALG_RUIMTE_NR, ALG_RUIMTE_OMSCHRIJVING, RES_OPSTELLING_KEY, RES_OPSTELLING_OMSCHRIJVING, RES_RSV_RUIMTE_VAN, RES_RSV_RUIMTE_OMSCHRIJVING, RES_RSV_RUIMTE_OPMERKING, RES_RSV_RUIMTE_BEZOEKERS, RES_STATUS_FO_KEY, RES_STATUS_BO_KEY, RES_RSV_ARTIKEL_LEVERING, DATUM, TIJD, AANTAL, RES_ARTIKEL_KEY, ARTIKELNR, ARTIKELOMS, INS_DISCIPLINE_KEY, CATALOGUS, RES_RSV_ARTIKEL_PRIJS, RES_ARTIKEL_PRIJS, EENHEIDSPRIJS, TOTAALPRIJS, CONTACT_NAAM, CONTACT_TUSSENVOEGSEL, CONTACT_VOORLETTERS, CONTACT_VOORNAAM, CONTACT_GESLACHT, CONTACT_EMAIL, CONTACT_TELEFOONNR, CONTACT_MOBIEL, HOST_NAAM, HOST_TUSSENVOEGSEL, HOST_VOORLETTERS, HOST_VOORNAAM, HOST_GESLACHT, HOST_EMAIL, HOST_TELEFOONNR, HOST_MOBIEL, PRS_KOSTENPLAATS_NR, PRS_KOSTENSOORT_OMS, DATUM_GEREGISTREERD, LAST_MINUTE, RUIMTE_OMSCHRIJVING, AANVRAGER, DAG, SORT ) AS SELECT rr.res_reservering_key, rr.res_rsv_ruimte_volgnr, rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr, rr.res_rsv_ruimte_key, r.res_ruimte_key, r.res_ruimte_nr, l.alg_locatie_code, l.alg_locatie_omschrijving, g.alg_gebouw_code, g.alg_gebouw_naam, v.alg_verdieping_volgnr, v.alg_verdieping_omschrijving, ar.alg_ruimte_nr, ar.alg_ruimte_omschrijving, op.res_opstelling_key, op.res_opstelling_omschrijving, rr.res_rsv_ruimte_van, rr.res_rsv_ruimte_omschrijving, rr.res_rsv_ruimte_opmerking, rr.res_rsv_ruimte_bezoekers, rr.res_status_fo_key, rr.res_status_bo_key, ra.res_rsv_artikel_levering, TO_CHAR (ra.res_rsv_artikel_levering, 'DD-MM-YYYY') datum, TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI') tijd, ra.res_rsv_artikel_aantal aantal, a.res_artikel_key, a.res_artikel_nr artikelnr, a.res_artikel_omschrijving artikeloms, d.ins_discipline_key, d.ins_discipline_omschrijving catalogus, ra.res_rsv_artikel_prijs, a.res_artikel_prijs, a.res_artikel_prijs eenheidsprijs, res.getartikelprijs (ra.res_rsv_artikel_key) totaalprijs, c.prs_perslid_naam contact_naam, c.prs_perslid_tussenvoegsel contact_tussenvoegsel, c.prs_perslid_voorletters contact_voorletters, c.prs_perslid_voornaam contact_voornaam, DECODE (c.prs_perslid_geslacht, 0, 'V', 1, 'M', '') contact_geslacht, c.prs_perslid_email contact_email, c.prs_perslid_telefoonnr contact_telefoonnr, c.prs_perslid_mobiel contact_mobiel, h.prs_perslid_naam host_naam, h.prs_perslid_tussenvoegsel host_tussenvoegsel, h.prs_perslid_voorletters host_voorletters, h.prs_perslid_voornaam host_voornaam, DECODE (h.prs_perslid_geslacht, 0, 'V', 1, 'M', '') host_geslacht, h.prs_perslid_email host_email, h.prs_perslid_telefoonnr host_telefoonnr, h.prs_perslid_mobiel host_mobiel, k.prs_kostenplaats_nr, ks.prs_kostensoort_oms, rr.res_rsv_ruimte_aanmaak, DECODE (TRUNC (ra.res_rsv_artikel_levering), TRUNC (rr.res_rsv_ruimte_aanmaak), 'Last Minute!', ''), COALESCE (r.res_ruimte_nr, ar.alg_ruimte_omschrijving), cn.prs_perslid_naam_friendly, DECODE (TRUNC (ra.res_rsv_artikel_levering), TRUNC (SYSDATE), 'Vandaag', TRUNC (SYSDATE) + 1, 'Morgen', 'Onbekend'), ( rr.res_reservering_key || '/' || rr.res_rsv_ruimte_volgnr || '_' || TO_CHAR (ra.res_rsv_artikel_levering, 'DD-MM-YYYY') || '_' || TO_CHAR (ra.res_rsv_artikel_levering, 'HH24:MI')) FROM res_rsv_artikel ra, res_artikel a, res_discipline d, res_rsv_ruimte rr, res_ruimte_opstelling ro, res_opstelling op, res_ruimte r, alg_ruimte ar, alg_verdieping v, alg_gebouw g, alg_locatie l, prs_perslid c, prs_v_perslid_fullnames cn, prs_kostenplaats k, prs_kostensoort ks, prs_perslid h WHERE rr.res_rsv_ruimte_verwijder IS NULL AND a.res_artikel_key = ra.res_artikel_key AND d.ins_discipline_key = a.res_discipline_key AND d.ins_discipline_key IN (36, 841, 881) -- Catering catalogi: Catering, Koffie&Thee, Lunch AND rr.res_rsv_ruimte_key = ra.res_rsv_ruimte_key AND rr.res_ruimte_opstel_key = ro.res_ruimte_opstel_key(+) AND ro.res_ruimte_key = r.res_ruimte_key(+) AND ro.res_opstelling_key = op.res_opstelling_key(+) AND rr.alg_ruimte_key = ar.alg_ruimte_key(+) AND ar.alg_verdieping_key = v.alg_verdieping_key(+) AND v.alg_gebouw_key = g.alg_gebouw_key(+) AND g.alg_locatie_key = l.alg_locatie_key(+) AND rr.res_rsv_ruimte_contact_key = c.prs_perslid_key AND c.prs_perslid_key = cn.prs_perslid_key AND rr.prs_kostenplaats_key = k.prs_kostenplaats_key(+) AND d.prs_kostensoort_key = ks.prs_kostensoort_key(+) AND rr.res_rsv_ruimte_host_key = h.prs_perslid_key AND rr.res_rsv_ruimte_dirtlevel = 0; ------ 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