-- Customer specific once-script MDUX.
--
-- (c) 2011 SG|facilitor bv 
--
-- Support: +31 53 4800700

SET ECHO ON
SPOOL MDUX02.lst
SET DEFINE OFF


INSERT INTO fac_import_app
            (fac_import_app_code, fac_import_app_oms,
             fac_functie_key, fac_import_app_prefix,
             fac_import_app_folder, fac_import_app_files)
   SELECT 'BEDRIJF', 'RBT - Import Relatie Beheer Tool',
          fac_functie_key, 'MDUX', 
          'd:\Apps\Facilitor\ftp_sites\LocalUser\MDUXftp\RBT', '*.csv'
     FROM fac_functie
    WHERE fac_functie_code = 'WEB_PRSSYS';


--- Tijdelijke/eenmalige procedures, die gaan per 2015.1 regulier via Facilitor CORE (fac_pacf.src), om nu alvast van te profiteren hier dan maar.



-- p_seq_of_columns geeft aan op welke plek in de CVS het bedrijfsnaam staat, leveranciersnummer etc etc.
-- p_checkheader is 0 of 1, bij 0 bestaat er geen header, bij 1 wordt de header niet gecheckt, bij 2 wordt de header wel gecheckt.
CREATE OR REPLACE PROCEDURE mdux_import_bedrijf_body (
   p_import_key IN NUMBER,
   p_seq_of_columns IN VARCHAR2,
   p_checkheader IN NUMBER
)
IS


----- STANDAARD Variabelelijst met hun volgnummer
-- 1 BEDRIJFSNAAM';
-- 2 LEVERANCIERNUMMER';
-- 3 BEZOEK_ADRES';
-- 4 BEZOEK_POSTCODE';
-- 5 BEZOEK_PLAATS';
-- 6 BEZOEK_LAND';
-- 7 POST_ADRES';
-- 8 POST_POSTCODE';
-- 9 POST_PLAATS';
-- 10 POST_LAND';
-- 11 BEDRIJF_TELEFOON';
-- 12 BEDRIJF_FAX';
-- 13 BEDRIJF_EMAIL';
-- 14 CONTACTPERSOON';
-- 15 CONTACT_TELEFOON';
-- 16 CONTACT_FAX';
-- 17 BEDRIJF_XSL';
-- 18 BEDRIJF_MLD_ORDER_ADRES';
-- 19 LEVERANCIER';
-- 20 UITVOERENDE';
-- 21 CONTRACTANT';
-- 22 HUURDER';
-- 23 TOONINGIDS';
-- 24 UURLOON';
-- 25 OVEREENKOMSTNUMMER';
-- 26 OVEREENKOMSTDATUM';
-- 27 OPMERKING';
-- 28 DIENST';
-- 29 LOCATIECODE';
-- 30 GEBOUWCODE';
-- 31 OVERIG1';
-- 32 OVERIG2';
-- 33 OVERIG3';


   c_delim                          VARCHAR2 (1)    := ';';
   v_newline                        VARCHAR2 (1000);            -- Input line
   v_errormsg                       VARCHAR2 (1000);
   v_errorhint                      VARCHAR2 (1000);
   oracle_err_num                   NUMBER;
   oracle_err_mes                   VARCHAR2 (200);
   header_is_valid                  NUMBER;
   v_count_tot                      NUMBER (10);
   v_count_import                   NUMBER (10);
   v_ongeldig                       NUMBER (1);
   v_aanduiding                     VARCHAR (200);
   -- De importvelden:
   v_prs_bedrijf_naam               VARCHAR2 (256);                    -- C60
   v_prs_leverancier_nr             VARCHAR2 (256);                    -- C50
   v_prs_bedrijf_bezoek_adres       VARCHAR2 (256);                    -- C35
   v_prs_bedrijf_bezoek_postcode    VARCHAR2 (256);                    -- C12
   v_prs_bedrijf_bezoek_plaats      VARCHAR2 (256);                    -- C30
   v_prs_bedrijf_bezoek_land        VARCHAR2 (256);                    -- C30
   v_prs_bedrijf_telefoon           VARCHAR2 (256);                    -- C20
   v_prs_bedrijf_fax                VARCHAR2 (256);                    -- C20
   v_prs_bedrijf_post_adres         VARCHAR2 (256);                    -- C35
   v_prs_bedrijf_post_postcode      VARCHAR2 (256);                    -- C12
   v_prs_bedrijf_post_plaats        VARCHAR2 (256);                    -- C30
   v_prs_bedrijf_post_land          VARCHAR2 (256);                    -- C30
   v_prs_bedrijf_contact_persoon    VARCHAR2 (256);                    -- C30
   v_prs_bedrijf_contact_telefoon   VARCHAR2 (256);                    -- C20
   v_prs_bedrijf_contact_fax        VARCHAR2 (256);                    -- C20
   v_prs_bedrijf_leverancier        VARCHAR2 (256);                     -- N1
   v_prs_bedrijf_uitvoerende        VARCHAR2 (256);                     -- N1
   v_prs_bedrijf_contract           VARCHAR2 (256);                     -- N1
   v_prs_bedrijf_huurder            VARCHAR2 (256);                     -- N1
   v_prs_bedrijf_ingids             VARCHAR2 (256);                     -- N1
   v_prs_bedrijf_uurloon            VARCHAR2 (256);                   -- N6,2
   v_prs_bedrijf_xsl                VARCHAR2 (256);                    --C256
   v_prs_bedrijf_mldorder_adres     VARCHAR2 (256);                    --C256
   v_prs_overeenkomst_nr            VARCHAR2 (256);                    -- C20
   v_prs_overeenkomst_datum         VARCHAR2 (256);                   -- DATE
   v_prs_bedrijf_email              VARCHAR2 (256);                   -- C100
   v_prs_bedrijf_opmerking          VARCHAR2 (512);                   -- C320
   v_prs_dienst_omschrijving        VARCHAR2 (256);                    -- C60
   v_alg_locatie_code               VARCHAR2 (256);                    -- C10
   v_alg_gebouw_code                VARCHAR2 (256);                    -- C12
   v_prs_bedrijf_overig1            VARCHAR2 (256);                   -- C256
   v_prs_bedrijf_overig2            VARCHAR2 (256);                   -- C256
   v_prs_bedrijf_overig3            VARCHAR2 (256);                   -- C256

   -- Overig:
   v_prs_bedrijf_leverancier_n      NUMBER (1);                         -- N1
   v_prs_bedrijf_uitvoerende_n      NUMBER (1);                         -- N1
   v_prs_bedrijf_contract_n         NUMBER (1);                         -- N1
   v_prs_bedrijf_huurder_n          NUMBER (1);                         -- N1
   v_prs_bedrijf_ingids_n           NUMBER (1);                         -- N1
   v_prs_bedrijf_uurloon_n          NUMBER (6, 2);                    -- N6,2
   v_prs_overeenkomst_date          DATE;                             -- DATE


	 -- De kolommen
	  v_seq_of_columns VARCHAR2(255);
    v_colnr1 NUMBER;
    v_colnr2 NUMBER;
    v_colnr3 NUMBER;
    v_colnr4 NUMBER;
    v_colnr5 NUMBER;
    v_colnr6 NUMBER;
    v_colnr7 NUMBER;
    v_colnr8 NUMBER;
    v_colnr9 NUMBER;
    v_colnr10 NUMBER;
    v_colnr11 NUMBER;
    v_colnr12 NUMBER;
    v_colnr13 NUMBER;
    v_colnr14 NUMBER;
    v_colnr15 NUMBER;
    v_colnr16 NUMBER;
    v_colnr17 NUMBER;
    v_colnr18 NUMBER;
    v_colnr19 NUMBER;
    v_colnr20 NUMBER;
    v_colnr21 NUMBER;
    v_colnr22 NUMBER;
    v_colnr23 NUMBER;
    v_colnr24 NUMBER;
    v_colnr25 NUMBER;
    v_colnr26 NUMBER;
    v_colnr27 NUMBER;
    v_colnr28 NUMBER;
    v_colnr29 NUMBER;
    v_colnr30 NUMBER;
    v_colnr31 NUMBER;
    v_colnr32 NUMBER;
    v_colnr33 NUMBER;
    

   CURSOR c1
   IS
      SELECT   *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
   	-- Eerst opruiming
   	DELETE FROM fac_imp_ext_bedrijf;
		
		v_count_tot := 0;
		v_count_import := 0;
		header_is_valid := 0;
		
		IF p_checkheader = 0
		THEN -- Er is geen header, dus header is valid (en direct de waarden lezen)
			header_is_valid := 1;
		END IF;
		
		
		COMMIT;
		
		v_seq_of_columns := p_seq_of_columns;
		v_errorhint := 'Bepalen volgorde kolommen';
		
		-- De volgorde de te importeren kolommen in de CSV uitlezen uit v_seq_of_columns
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr1);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr2);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr3);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr4);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr5);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr6);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr7);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr8);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr9);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr10);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr11);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr12);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr13);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr14);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr15);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr16);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr17);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr18);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr19);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr20);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr21);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr22);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr23);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr24);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr25);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr26);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr27);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr28);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr29);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr30);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr31);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr32);
		fac.imp_getfield (v_seq_of_columns, c_delim, v_colnr33);
    

   	FOR rec1 IN c1
   	LOOP
      BEGIN
        v_newline := rec1.fac_imp_file_line;
        v_errormsg := 'Fout opvragen te importeren rij';
        v_aanduiding := '';
				v_ongeldig := 0;
         
		     
         
         
         -- Lees alle veldwaarden
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJFSNAAM';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr1), v_prs_bedrijf_naam);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIERNUMMER';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr2), v_prs_leverancier_nr);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_ADRES';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr3), v_prs_bedrijf_bezoek_adres);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_POSTCODE';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr4), v_prs_bedrijf_bezoek_postcode);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_PLAATS';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr5), v_prs_bedrijf_bezoek_plaats);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEZOEK_LAND';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr6), v_prs_bedrijf_bezoek_land);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_ADRES';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr7), v_prs_bedrijf_post_adres);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_POSTCODE';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr8), v_prs_bedrijf_post_postcode);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_PLAATS';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr9), v_prs_bedrijf_post_plaats);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: POST_LAND';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr10), v_prs_bedrijf_post_land);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_TELEFOON';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr11), v_prs_bedrijf_telefoon);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_FAX';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr12), v_prs_bedrijf_fax);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_EMAIL';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr13), v_prs_bedrijf_email);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACTPERSOON';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr14), v_prs_bedrijf_contact_persoon);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT_TELEFOON';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr15), v_prs_bedrijf_contact_telefoon);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTACT_FAX';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr16), v_prs_bedrijf_contact_fax);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_XSL';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr17), v_prs_bedrijf_xsl);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: BEDRIJF_MLD_ORDER_ADRES';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr18), v_prs_bedrijf_mldorder_adres);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LEVERANCIER';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr19), v_prs_bedrijf_leverancier);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UITVOERENDE';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr20), v_prs_bedrijf_uitvoerende);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: CONTRACTANT';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr21), v_prs_bedrijf_contract);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: HUURDER';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr22), v_prs_bedrijf_huurder);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: TOONINGIDS';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr23), v_prs_bedrijf_ingids);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: UURLOON';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr24), v_prs_bedrijf_uurloon);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTNUMMER';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr25), v_prs_overeenkomst_nr);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVEREENKOMSTDATUM';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr26), v_prs_overeenkomst_datum);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OPMERKING';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr27), v_prs_bedrijf_opmerking);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: DIENST';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr28), v_prs_dienst_omschrijving);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: LOCATIECODE';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr29), v_alg_locatie_code);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: GEBOUWCODE';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr30), v_alg_gebouw_code);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG1';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr31), v_prs_bedrijf_overig1);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG2';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr32), v_prs_bedrijf_overig2);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] veld: OVERIG3';
         fac.imp_getfield_nr (v_newline, c_delim, fac.safe_to_number(v_colnr33), v_prs_bedrijf_overig3);
         v_aanduiding := '[' || v_prs_bedrijf_naam || '] ';

         -- 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 (p_checkheader = 1)
       			THEN
       				-- De controle op header is niet nodig.
               header_is_valid := 1;
            END IF;
         		IF (p_checkheader = 2)
         		THEN
	            IF     UPPER (v_prs_bedrijf_naam) = 'BEDRIJFSNAAM'
	               AND UPPER (v_prs_leverancier_nr) = 'LEVERANCIERNUMMER'
	               AND UPPER (v_prs_bedrijf_bezoek_adres) = 'BEZOEK_ADRES'
	               AND UPPER (v_prs_bedrijf_bezoek_postcode) = 'BEZOEK_POSTCODE'
	               AND UPPER (v_prs_bedrijf_bezoek_plaats) = 'BEZOEK_PLAATS'
	               AND UPPER (v_prs_bedrijf_bezoek_land) = 'BEZOEK_LAND'
	               AND UPPER (v_prs_bedrijf_post_adres) = 'POST_ADRES'
	               AND UPPER (v_prs_bedrijf_post_postcode) = 'POST_POSTCODE'
	               AND UPPER (v_prs_bedrijf_post_plaats) = 'POST_PLAATS'
	               AND UPPER (v_prs_bedrijf_post_land) = 'POST_LAND'
	               AND UPPER (v_prs_bedrijf_telefoon) = 'BEDRIJF_TELEFOON'
	               AND UPPER (v_prs_bedrijf_fax) = 'BEDRIJF_FAX'
	               AND UPPER (v_prs_bedrijf_email) = 'BEDRIJF_EMAIL'
	               AND UPPER (v_prs_bedrijf_contact_persoon) = 'CONTACTPERSOON'
	               AND UPPER (v_prs_bedrijf_contact_telefoon) = 'CONTACT_TELEFOON'
	               AND UPPER (v_prs_bedrijf_contact_fax) = 'CONTACT_FAX'
	               AND UPPER (v_prs_bedrijf_xsl) = 'BEDRIJF_XSL'
	               AND UPPER (v_prs_bedrijf_mldorder_adres) = 'BEDRIJF_ORDER_ADRES'
	               AND UPPER (v_prs_bedrijf_leverancier) = 'LEVERANCIER'
	               AND UPPER (v_prs_bedrijf_uitvoerende) = 'UITVOERENDE'
	               AND UPPER (v_prs_bedrijf_contract) = 'CONTRACTANT'
	               AND UPPER (v_prs_bedrijf_huurder) = 'HUURDER'
	               AND UPPER (v_prs_bedrijf_ingids) = 'TOONINGIDS'
	               AND UPPER (v_prs_bedrijf_uurloon) = 'UURLOON'
	               AND UPPER (v_prs_overeenkomst_nr) = 'OVEREENKOMSTNUMMER'
	               AND UPPER (v_prs_overeenkomst_datum) = 'OVEREENKOMSTDATUM'
	               AND UPPER (v_prs_bedrijf_opmerking) = 'OPMERKING'
	               AND UPPER (v_prs_dienst_omschrijving) = 'DIENST'
	               AND UPPER (v_alg_locatie_code) = 'LOCATIECODE'
	               AND UPPER (v_alg_gebouw_code) = 'GEBOUWCODE'
						  THEN
	               header_is_valid := 1;
	            END IF;
	       		END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            v_errorhint := 'Bedrijfsnaam te lang';
            v_prs_bedrijf_naam := TRIM (v_prs_bedrijf_naam);
            IF LENGTH (v_prs_bedrijf_naam) > 60
            THEN
               v_prs_bedrijf_naam :=
                                    SUBSTR (TRIM (v_prs_bedrijf_naam), 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bedrijfsnaam wordt afgebroken tot ['
                                 || v_prs_bedrijf_naam
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Leveranciernummer te lang';
            v_prs_leverancier_nr := TRIM (v_prs_leverancier_nr);
            IF LENGTH (v_prs_leverancier_nr) > 50
            THEN
               v_prs_leverancier_nr :=
                                  SUBSTR (TRIM (v_prs_leverancier_nr), 1, 50);
               fac.imp_writelog
                               (p_import_key,
                                'W',
                                v_aanduiding || v_errorhint,
                                   'Leveranciernummer wordt afgebroken tot ['
                                || v_prs_leverancier_nr
                                || ']'
                               );
            END IF;

            v_errorhint := 'Bezoek/adres te lang';
            v_prs_bedrijf_bezoek_adres := TRIM (v_prs_bedrijf_bezoek_adres);
            IF LENGTH (v_prs_bedrijf_bezoek_adres) > 35
            THEN
               v_prs_bedrijf_bezoek_adres :=
                            SUBSTR (TRIM (v_prs_bedrijf_bezoek_adres), 1, 35);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bezoek/adres wordt afgebroken tot ['
                                 || v_prs_bedrijf_bezoek_adres
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bezoek/postcode te lang';
            v_prs_bedrijf_bezoek_postcode :=
                                          TRIM (v_prs_bedrijf_bezoek_postcode);
            IF LENGTH (v_prs_bedrijf_bezoek_postcode) > 12
            THEN
               v_prs_bedrijf_bezoek_postcode :=
                         SUBSTR (TRIM (v_prs_bedrijf_bezoek_postcode), 1, 12);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bezoek/postcode wordt afgebroken tot ['
                                 || v_prs_bedrijf_bezoek_postcode
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bezoek/plaats te lang';
            v_prs_bedrijf_bezoek_plaats := TRIM (v_prs_bedrijf_bezoek_plaats);
            IF LENGTH (v_prs_bedrijf_bezoek_plaats) > 30
            THEN
               v_prs_bedrijf_bezoek_plaats :=
                           SUBSTR (TRIM (v_prs_bedrijf_bezoek_plaats), 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bezoek/plaats wordt afgebroken tot ['
                                 || v_prs_bedrijf_bezoek_plaats
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bezoek/land te lang';
            v_prs_bedrijf_bezoek_land := TRIM (v_prs_bedrijf_bezoek_land);
            IF LENGTH (v_prs_bedrijf_bezoek_land) > 30
            THEN
               v_prs_bedrijf_bezoek_land :=
                             SUBSTR (TRIM (v_prs_bedrijf_bezoek_land), 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bezoek/land wordt afgebroken tot ['
                                 || v_prs_bedrijf_bezoek_land
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Post/adres te lang';
            v_prs_bedrijf_post_adres := TRIM (v_prs_bedrijf_post_adres);
            IF LENGTH (v_prs_bedrijf_post_adres) > 35
            THEN
               v_prs_bedrijf_post_adres :=
                              SUBSTR (TRIM (v_prs_bedrijf_post_adres), 1, 35);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Post/adres wordt afgebroken tot ['
                                 || v_prs_bedrijf_post_adres
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Post/postcode te lang';
            v_prs_bedrijf_post_postcode := TRIM (v_prs_bedrijf_post_postcode);
            IF LENGTH (v_prs_bedrijf_post_postcode) > 12
            THEN
               v_prs_bedrijf_post_postcode :=
                           SUBSTR (TRIM (v_prs_bedrijf_post_postcode), 1, 12);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Post/postcode wordt afgebroken tot ['
                                 || v_prs_bedrijf_post_postcode
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Post/plaats te lang';
            v_prs_bedrijf_post_plaats := TRIM (v_prs_bedrijf_post_plaats);
            IF LENGTH (v_prs_bedrijf_post_plaats) > 30
            THEN
               v_prs_bedrijf_post_plaats :=
                             SUBSTR (TRIM (v_prs_bedrijf_post_plaats), 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Post/plaats wordt afgebroken tot ['
                                 || v_prs_bedrijf_post_plaats
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Post/land te lang';
            v_prs_bedrijf_post_land := TRIM (v_prs_bedrijf_post_land);
            IF LENGTH (v_prs_bedrijf_post_land) > 30
            THEN
               v_prs_bedrijf_post_land :=
                               SUBSTR (TRIM (v_prs_bedrijf_post_land), 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Post/land wordt afgebroken tot ['
                                 || v_prs_bedrijf_post_land
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bedrijf/telefoon te lang';
            v_prs_bedrijf_telefoon := TRIM (v_prs_bedrijf_telefoon);
            IF LENGTH (v_prs_bedrijf_telefoon) > 20
            THEN
               v_prs_bedrijf_telefoon :=
                                SUBSTR (TRIM (v_prs_bedrijf_telefoon), 1, 20);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bedrijf/telefoon wordt afgebroken tot ['
                                 || v_prs_bedrijf_telefoon
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bedrijf/fax te lang';
            v_prs_bedrijf_fax := TRIM (v_prs_bedrijf_fax);
            IF LENGTH (v_prs_bedrijf_fax) > 20
            THEN
               v_prs_bedrijf_fax := SUBSTR (TRIM (v_prs_bedrijf_fax), 1, 20);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bedrijf/fax wordt afgebroken tot ['
                                 || v_prs_bedrijf_fax
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Bedrijf/e-mail te lang';
            v_prs_bedrijf_email := TRIM (v_prs_bedrijf_email);
            IF LENGTH (v_prs_bedrijf_email) > 100
            THEN
               v_prs_bedrijf_email :=
                                  SUBSTR (TRIM (v_prs_bedrijf_email), 1, 100);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Bedrijf/e-mail wordt afgebroken tot ['
                                 || v_prs_bedrijf_email
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Contactpersoon te lang';
            v_prs_bedrijf_contact_persoon :=
                                          TRIM (v_prs_bedrijf_contact_persoon);
            IF LENGTH (v_prs_bedrijf_contact_persoon) > 30
            THEN
               v_prs_bedrijf_contact_persoon :=
                         SUBSTR (TRIM (v_prs_bedrijf_contact_persoon), 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Contactpersoon wordt afgebroken tot ['
                                 || v_prs_bedrijf_contact_persoon
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Contact/telefoon te lang';
            v_prs_bedrijf_contact_telefoon :=
                                         TRIM (v_prs_bedrijf_contact_telefoon);

            IF LENGTH (v_prs_bedrijf_contact_telefoon) > 20
            THEN
               v_prs_bedrijf_contact_telefoon :=
                        SUBSTR (TRIM (v_prs_bedrijf_contact_telefoon), 1, 20);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Contact/telefoon wordt afgebroken tot ['
                                 || v_prs_bedrijf_contact_telefoon
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Contact/fax te lang';
            v_prs_bedrijf_contact_fax := TRIM (v_prs_bedrijf_contact_fax);
            IF LENGTH (v_prs_bedrijf_contact_fax) > 20
            THEN
               v_prs_bedrijf_contact_fax :=
                             SUBSTR (TRIM (v_prs_bedrijf_contact_fax), 1, 20);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Contact/fax wordt afgebroken tot ['
                                 || v_prs_bedrijf_contact_fax
                                 || ']'
                                );
            END IF;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_leverancier)),
                                   1,
                                   1
                                  ),
                           'J', 1,
                           0
                          )
              INTO v_prs_bedrijf_leverancier_n
              FROM DUAL;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_uitvoerende)),
                                   1,
                                   1
                                  ),
                           'J', 1,
                           0
                          )
              INTO v_prs_bedrijf_uitvoerende_n
              FROM DUAL;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_contract)), 1,
                                   1),
                           'J', 1,
                           0
                          )
              INTO v_prs_bedrijf_contract_n
              FROM DUAL;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_huurder)), 1, 1),
                           'J', 1,
                           0
                          )
              INTO v_prs_bedrijf_huurder_n
              FROM DUAL;

            -- Verder geen foutdetectie; kan dus stricter?
            SELECT DECODE (SUBSTR (TRIM (UPPER (v_prs_bedrijf_ingids)), 1, 1),
                           'J', 1,
                           0
                          )
              INTO v_prs_bedrijf_ingids_n
              FROM DUAL;

            v_errorhint := 'Ongeldig uurloon; maximale grootte 9999.99';
            BEGIN
               v_prs_bedrijf_uurloon_n :=
                                   fac.safe_to_number (v_prs_bedrijf_uurloon);
            EXCEPTION
               WHEN OTHERS
               THEN
                  v_ongeldig := 1;
                  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,
                                    'Regel wordt overgeslagen!'
                                   );
            END;

            v_errorhint := 'Overeenkomstnummer te lang';
            v_prs_overeenkomst_nr := TRIM (v_prs_overeenkomst_nr);
            IF LENGTH (v_prs_overeenkomst_nr) > 20
            THEN
               v_prs_overeenkomst_nr :=
                                 SUBSTR (TRIM (v_prs_overeenkomst_nr), 1, 20);
               fac.imp_writelog
                              (p_import_key,
                               'W',
                               v_aanduiding || v_errorhint,
                                  'Overeenkomstnummer wordt afgebroken tot ['
                               || v_prs_overeenkomst_nr
                               || ']'
                              );
            END IF;

            v_errorhint := 'Ongeldige overeenkomstdatum';
            v_prs_overeenkomst_datum := TRIM (v_prs_overeenkomst_datum);
            IF v_prs_overeenkomst_datum IS NOT NULL
            THEN
               BEGIN
                  v_prs_overeenkomst_date :=
                             TO_DATE (v_prs_overeenkomst_datum, 'dd-mm-yyyy');
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     v_ongeldig := 1;
                     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,
                                       'Regel wordt overgeslagen!'
                                      );
                     COMMIT;
               END;
            ELSE
               v_prs_overeenkomst_date := NULL;
            END IF;

            v_errorhint := 'Opmerking te lang';
            v_prs_bedrijf_opmerking := TRIM (v_prs_bedrijf_opmerking);
            IF LENGTH (v_prs_bedrijf_opmerking) > 320
            THEN
               v_prs_bedrijf_opmerking :=
                              SUBSTR (TRIM (v_prs_bedrijf_opmerking), 1, 320);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Opmerking wordt afgebroken tot ['
                                 || v_prs_bedrijf_opmerking
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Dienst te lang';
            v_prs_dienst_omschrijving := TRIM (v_prs_dienst_omschrijving);
            IF LENGTH (v_prs_dienst_omschrijving) > 60
            THEN
               v_prs_dienst_omschrijving :=
                              SUBSTR (TRIM (v_prs_dienst_omschrijving), 1, 60);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || v_errorhint,
                                    'Dienst wordt afgebroken tot ['
                                 || v_prs_dienst_omschrijving
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Locatiecode te lang';
            v_alg_locatie_code := TRIM (v_alg_locatie_code);
            IF LENGTH (v_alg_locatie_code) > 10
            THEN
               v_alg_locatie_code := NULL;
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errorhint,
                                    'Locatiecode is te lang ['
                                 || v_alg_locatie_code
                                 || ']'
                                );
            END IF;

            v_errorhint := 'Gebouwcode te lang';
            v_alg_gebouw_code := TRIM (v_alg_gebouw_code);
            IF LENGTH (v_alg_gebouw_code) > 12
            THEN
               v_alg_gebouw_code := NULL;
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errorhint,
                                    'Gebouwcode is te lang ['
                                 || v_alg_gebouw_code
                                 || ']'
                                );
            END IF;

            -- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  INSERT INTO fac_imp_ext_bedrijf
                              (prs_bedrijf_naam, prs_leverancier_nr,
                               prs_bedrijf_bezoek_adres,
                               prs_bedrijf_bezoek_postcode,
                               prs_bedrijf_bezoek_plaats,
                               prs_bedrijf_bezoek_land,
                               prs_bedrijf_post_adres,
                               prs_bedrijf_post_postcode,
                               prs_bedrijf_post_plaats,
                               prs_bedrijf_post_land,
                               prs_bedrijf_telefoon, prs_bedrijf_fax,
                               prs_bedrijf_email,
                               prs_bedrijf_contact_persoon,
                               prs_bedrijf_contact_telefoon,
                               prs_bedrijf_contact_fax,
                               prs_bedrijf_xsl,
                               prs_bedrijf_order_adres,
                               prs_bedrijf_leverancier,
                               prs_bedrijf_uitvoerende,
                               prs_bedrijf_contract,
                               prs_bedrijf_huurder,
                               prs_bedrijf_ingids,
                               prs_bedrijf_uurloon,
                               prs_overeenkomst_nr,
                               prs_overeenkomst_datum,
                               prs_bedrijf_opmerking,
                               prs_dienst_omschrijving,
                               alg_locatie_code,
                               alg_gebouw_code,
                               prs_bedrijf_overig1,
                               prs_bedrijf_overig2,
                               prs_bedrijf_overig3
                              )
                       VALUES (v_prs_bedrijf_naam, v_prs_leverancier_nr,
                               v_prs_bedrijf_bezoek_adres,
                               v_prs_bedrijf_bezoek_postcode,
                               v_prs_bedrijf_bezoek_plaats,
                               v_prs_bedrijf_bezoek_land,
                               v_prs_bedrijf_post_adres,
                               v_prs_bedrijf_post_postcode,
                               v_prs_bedrijf_post_plaats,
                               v_prs_bedrijf_post_land,
                               v_prs_bedrijf_telefoon, v_prs_bedrijf_fax,
                               v_prs_bedrijf_email,
                               v_prs_bedrijf_contact_persoon,
                               v_prs_bedrijf_contact_telefoon,
                               v_prs_bedrijf_contact_fax,
                               v_prs_bedrijf_xsl,
                               v_prs_bedrijf_mldorder_adres,
                               v_prs_bedrijf_leverancier_n,
                               v_prs_bedrijf_uitvoerende_n,
                               v_prs_bedrijf_contract_n,
                               v_prs_bedrijf_huurder_n,
                               v_prs_bedrijf_ingids_n,
                               v_prs_bedrijf_uurloon_n,
                               v_prs_overeenkomst_nr,
                               v_prs_overeenkomst_date,
                               v_prs_bedrijf_opmerking,
                               v_prs_dienst_omschrijving,
                               v_alg_locatie_code,
                               v_alg_gebouw_code,
                               v_prs_bedrijf_overig1,
                               v_prs_bedrijf_overig2,
                               v_prs_bedrijf_overig3
                              );

                  v_count_import := v_count_import + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           'ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog
                        (p_import_key,
                         'E',
                         v_aanduiding || v_errormsg,
                         'Fout bij toevoegen regel aan importtabel FAC_IMP_EXT_BEDRIJF.'
                        );
               END;
            END IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!'
                       );
   ELSE
      fac.imp_writelog (p_import_key,
                        'S',
                           'Relaties: aantal ingelezen importregels: '
                        || TO_CHAR (v_count_tot),
                        ''
                       );
      fac.imp_writelog
               (p_import_key,
                'S',
                   'Relaties: 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, 100);
      v_errormsg :=
           'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        'Inleesproces relaties afgebroken! ' || v_aanduiding
                       );
END mdux_import_bedrijf_body;
/


-- 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

CREATE OR REPLACE PROCEDURE mdux_update_bedrijf_body (p_import_key IN NUMBER, p_sync IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   v_errorhint      VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_count          NUMBER (10);
   v_count_tot      NUMBER (10);
   v_count_new      NUMBER (10);
   v_count_upd      NUMBER (10);
   v_count_del      NUMBER (10);
   v_aanduiding     VARCHAR2 (200) := '-';

	 	 
   -- SUBPROC
   PROCEDURE add_bedrijf (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
         SELECT * FROM fac_imp_ext_bedrijf ib;
          

      v_bedrijf_key   NUMBER (10);
   BEGIN
      v_count_tot := 0;
      v_count_new := 0;
      v_count_upd := 0;

     	
      FOR rec IN c1
      LOOP
         BEGIN
            v_count_tot := v_count_tot + 1;
            v_aanduiding :=
                  '['
               || rec.prs_bedrijf_naam
               || '|'
               || rec.prs_leverancier_nr
               || '] ';

            v_errorhint := 'Fout bepalen bedrijf';

            IF rec.prs_leverancier_nr IS NULL AND p_sync = 1
            THEN
               fac.imp_writelog (
                  p_import_key,
                  'W',
                  v_aanduiding || 'Leveranciernummer ongedefinieerd!',
                  v_errorhint);
               COMMIT;
            ELSE
               SELECT COUNT ( * )
                 INTO v_count
                 FROM prs_v_aanwezigbedrijf
                WHERE UPPER (prs_leverancier_nr) =
                         UPPER (rec.prs_leverancier_nr);

              IF v_count = 0 OR p_sync = 0
              THEN
                 v_errorhint := 'Fout toevoegen bedrijf';

                 INSERT INTO prs_bedrijf (prs_bedrijf_naam,
                                           prs_leverancier_nr,
                                           prs_bedrijf_bezoek_adres,
                                           prs_bedrijf_bezoek_postcode,
                                           prs_bedrijf_bezoek_plaats,
                                           prs_bedrijf_bezoek_land,
                                           prs_bedrijf_post_adres,
                                           prs_bedrijf_post_postcode,
                                           prs_bedrijf_post_plaats,
                                           prs_bedrijf_post_land,
                                           prs_bedrijf_telefoon,
                                           prs_bedrijf_fax,
                                           prs_bedrijf_email,
                                           prs_bedrijf_contact_persoon,
                                           prs_bedrijf_contact_telefoon,
                                           prs_bedrijf_contact_fax,
                                           prs_bedrijf_leverancier,
                                           prs_bedrijf_uitvoerende,
                                           prs_bedrijf_contract,
                                           prs_bedrijf_huurder,
                                           prs_bedrijf_ingids,
                                           prs_bedrijf_uurloon,
                                           prs_overeenkomst_nr,
                                           prs_overeenkomst_datum,
                                           prs_bedrijf_opmerking)
                      VALUES (rec.prs_bedrijf_naam,
                              rec.prs_leverancier_nr,
                              rec.prs_bedrijf_bezoek_adres,
                              rec.prs_bedrijf_bezoek_postcode,
                              rec.prs_bedrijf_bezoek_plaats,
                              rec.prs_bedrijf_bezoek_land,
                              rec.prs_bedrijf_post_adres,
                              rec.prs_bedrijf_post_postcode,
                              rec.prs_bedrijf_post_plaats,
                              rec.prs_bedrijf_post_land,
                              rec.prs_bedrijf_telefoon,
                              rec.prs_bedrijf_fax,
                              rec.prs_bedrijf_email,
                              rec.prs_bedrijf_contact_persoon,
                              rec.prs_bedrijf_contact_telefoon,
                              rec.prs_bedrijf_contact_fax,
                              DECODE (rec.prs_bedrijf_leverancier,
                                      1, 1,
                                      NULL),
                              DECODE (rec.prs_bedrijf_uitvoerende,
                                      1, 1,
                                      NULL),
                              DECODE (rec.prs_bedrijf_contract, 1, 1, NULL),
                              DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL),
                              DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL),
                              rec.prs_bedrijf_uurloon,
                              rec.prs_overeenkomst_nr,
                              rec.prs_overeenkomst_datum,
                              rec.prs_bedrijf_opmerking) RETURNING prs_bedrijf_key INTO v_bedrijf_key;

                  v_count_new := v_count_new + 1;
             	ELSE                                             -- v_count > 0
                  SELECT prs_bedrijf_key
                    INTO v_bedrijf_key
                    FROM prs_v_aanwezigbedrijf
                   WHERE UPPER (prs_leverancier_nr) =
                            UPPER (rec.prs_leverancier_nr);

                  v_errorhint := 'Fout bijwerken bedrijf';

                  UPDATE prs_bedrijf
                     SET prs_bedrijf_naam =
                            COALESCE (rec.prs_bedrijf_naam, prs_bedrijf_naam),
                         prs_bedrijf_bezoek_adres =
                            COALESCE (rec.prs_bedrijf_bezoek_adres,
                                      prs_bedrijf_bezoek_adres),
                         prs_bedrijf_bezoek_postcode =
                            COALESCE (rec.prs_bedrijf_bezoek_postcode,
                                      prs_bedrijf_bezoek_postcode),
                         prs_bedrijf_bezoek_plaats =
                            COALESCE (rec.prs_bedrijf_bezoek_plaats,
                                      prs_bedrijf_bezoek_plaats),
                         prs_bedrijf_bezoek_land =
                            COALESCE (rec.prs_bedrijf_bezoek_land,
                                      prs_bedrijf_bezoek_land),
                         prs_bedrijf_post_adres =
                            COALESCE (rec.prs_bedrijf_post_adres,
                                      prs_bedrijf_post_adres),
                         prs_bedrijf_post_postcode =
                            COALESCE (rec.prs_bedrijf_post_postcode,
                                      prs_bedrijf_post_postcode),
                         prs_bedrijf_post_plaats =
                            COALESCE (rec.prs_bedrijf_post_plaats,
                                      prs_bedrijf_post_plaats),
                         prs_bedrijf_post_land =
                            COALESCE (rec.prs_bedrijf_post_land,
                                      prs_bedrijf_post_land),
                         prs_bedrijf_telefoon =
                            COALESCE (rec.prs_bedrijf_telefoon,
                                      prs_bedrijf_telefoon),
                         prs_bedrijf_fax =
                            COALESCE (rec.prs_bedrijf_fax, prs_bedrijf_fax),
                         prs_bedrijf_email =
                            COALESCE (rec.prs_bedrijf_email,
                                      prs_bedrijf_email),
                         prs_bedrijf_contact_persoon =
                            COALESCE (rec.prs_bedrijf_contact_persoon,
                                      prs_bedrijf_contact_persoon),
                         prs_bedrijf_contact_telefoon =
                            COALESCE (rec.prs_bedrijf_contact_telefoon,
                                      prs_bedrijf_contact_telefoon),
                         prs_bedrijf_contact_fax =
                            COALESCE (rec.prs_bedrijf_contact_fax,
                                      prs_bedrijf_contact_fax),
                         prs_bedrijf_leverancier =
                            DECODE (rec.prs_bedrijf_leverancier, 1, 1, NULL),
                         prs_bedrijf_uitvoerende =
                            DECODE (rec.prs_bedrijf_uitvoerende, 1, 1, NULL),
                         prs_bedrijf_contract =
                            DECODE (rec.prs_bedrijf_contract, 1, 1, NULL),
                         prs_bedrijf_huurder =
                            DECODE (rec.prs_bedrijf_huurder, 1, 1, NULL),
                         prs_bedrijf_ingids =
                            DECODE (rec.prs_bedrijf_ingids, 1, 1, NULL),
                         prs_bedrijf_uurloon =
                            COALESCE (rec.prs_bedrijf_uurloon,
                                      prs_bedrijf_uurloon),
                         prs_overeenkomst_nr =
                            COALESCE (rec.prs_overeenkomst_nr,
                                      prs_overeenkomst_nr),
                         prs_overeenkomst_datum =
                            COALESCE (rec.prs_overeenkomst_datum,
                                      prs_overeenkomst_datum),
                         prs_bedrijf_opmerking =
                            COALESCE (rec.prs_bedrijf_opmerking,
                                      prs_bedrijf_opmerking)
                   WHERE prs_bedrijf_key = v_bedrijf_key;

                  v_count_upd := v_count_upd + 1;
              END IF; -- v_count = 0
             	             	
          
         	  END IF; -- rec.prs_leverancier_nr IS NULL
         	  EXCEPTION
            WHEN OTHERS
            THEN
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'ORACLE (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint);
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: #ingelezen: ' || TO_CHAR (v_count_tot),
                        '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: #toegevoegd: ' || TO_CHAR (v_count_new),
                        '');
      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: #bijgewerkt: ' || TO_CHAR (v_count_upd),
                        '');
      COMMIT;
   END;

   -- SUBPROC
   PROCEDURE del_bedrijf (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
         SELECT *
           FROM prs_v_aanwezigbedrijf b
          WHERE b.prs_bedrijf_intern IS NULL
                AND b.prs_leverancier_nr IS NOT NULL
                AND NOT EXISTS
                      (SELECT 1
                         FROM fac_imp_ext_bedrijf
                        WHERE prs_leverancier_nr = b.prs_leverancier_nr);

      v_bedrijf_key   NUMBER (10);
   BEGIN
      v_count_del := 0;

      FOR rec IN c1
      LOOP
         BEGIN
            v_aanduiding := '[' || rec.prs_bedrijf_naam || '] ';

            v_errorhint := 'Fout verwijderen bedrijf';

            UPDATE prs_bedrijf
               SET prs_bedrijf_verwijder = SYSDATE
             WHERE prs_bedrijf_key = rec.prs_bedrijf_key;

            v_count_del := v_count_del + 1;

            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,
                                 v_errorhint);
               COMMIT;
         END;
      END LOOP;

      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: #verwijderd: ' || TO_CHAR (v_count_del),
                        '');
      COMMIT;
   END;
   
   
   
   PROCEDURE diensten_bedrijf (p_import_key IN NUMBER)
   AS
      
    	CURSOR c_dienst
		  IS
		      SELECT DISTINCT prs_dienst_omschrijving
		      FROM fac_imp_ext_bedrijf
		      WHERE prs_dienst_omschrijving IS NOT NULL;

   		CURSOR c_dienstlocgebouw
   		IS
      SELECT prs_dienst_omschrijving, alg_locatie_code, alg_gebouw_code, prs_bedrijf_naam
      FROM fac_imp_ext_bedrijf
      WHERE prs_dienst_omschrijving IS NOT NULL;      
      
     	v_alg_locatie_key   NUMBER (10);
   		v_alg_gebouw_key    NUMBER (10);
   		v_prs_dienst_key    NUMBER (10);
   		v_prs_bedrijf_key   NUMBER (10);
   		
   BEGIN
      v_count_tot      := 0;
   		v_count_upd   := 0;

	   FOR rec2 IN c_dienst
	   LOOP
	      BEGIN
	         v_count_tot      := v_count_tot + 1;
	
	         v_errormsg       :=
	               'Kan dienst niet bepalen ['
	            || rec2.prs_dienst_omschrijving
	            || '] ';
	
	         BEGIN
	            SELECT prs_dienst_key
	            INTO v_prs_dienst_key
	            FROM prs_dienst
	            WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec2.prs_dienst_omschrijving);
	         EXCEPTION
	            WHEN NO_DATA_FOUND
	            THEN
	               v_errormsg       :=
	                     'Kan dienst niet wegschrijven ['
	                  || rec2.prs_dienst_omschrijving
	                  || '] ';
	
	               INSERT INTO prs_dienst (prs_dienst_omschrijving)
	               VALUES (rec2.prs_dienst_omschrijving);
	         END;
	
	         v_count_upd   := v_count_upd + 1;
	
	         COMMIT;
	      EXCEPTION
	         WHEN OTHERS
	         THEN
	            v_errorhint     := v_errormsg;
	            oracle_err_num   := SQLCODE;
	            oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
	            v_errormsg       :=
	                  v_errormsg
	               || 'ORACLE (error '
	               || oracle_err_num
	               || '/'
	               || oracle_err_mes
	               || ')';
	            fac.imp_writelog (p_import_key,
	                              'E',
	                              v_errormsg,
	                              v_errorhint
	            );
	            COMMIT;                                             -- tbv logging
	      END;
	   END LOOP;
	
	
	
	   fac.imp_writelog (p_import_key,
	                     'S',
	                     'Diensten: aantal ingelezen: ' || TO_CHAR (v_count_tot),
	                     ''
	   );
	   fac.imp_writelog (p_import_key,
	                     'S',
	                     'Diensten: aantal toegevoegd: '
	                     || TO_CHAR (v_count_upd),
	                     ''
	   );
	
	   v_count_tot      := 0;
	   v_count_upd   := 0;
	
	   FOR rec3 IN c_dienstlocgebouw
	   LOOP
	      BEGIN
	         v_count_tot      := v_count_tot + 1;
	
	         v_errormsg       :=
	               'Kan dienst niet bepalen ['
	            || rec3.prs_dienst_omschrijving
	            || '] ';
	         SELECT prs_dienst_key
	         INTO v_prs_dienst_key
	         FROM prs_dienst
	         WHERE prs_dienst_omschrijving = rec3.prs_dienst_omschrijving;
	
	         v_errormsg       :=
	            'Kan locatie niet bepalen [' || rec3.alg_locatie_code || '] ';
	         IF rec3.alg_locatie_code IS NOT NULL
	         THEN
	            SELECT alg_locatie_key
	            INTO v_alg_locatie_key
	            FROM alg_v_aanweziglocatie
	            WHERE alg_locatie_code = rec3.alg_locatie_code;
	         ELSE
	            v_alg_locatie_key   := NULL;
	         END IF;
	
	         v_errormsg       :=
	            'Kan gebouw niet bepalen [' || rec3.alg_gebouw_code || '] ';
	         IF rec3.alg_gebouw_code IS NOT NULL
	         THEN
	            SELECT alg_gebouw_key
	            INTO v_alg_gebouw_key
	            FROM alg_v_aanweziggebouw
	            WHERE alg_gebouw_code = rec3.alg_gebouw_code
	              AND alg_locatie_key = v_alg_locatie_key;
	         ELSE
	            v_alg_gebouw_key   := NULL;
	         END IF;
	
	         v_errormsg       :=
	            'Kan bedrijf niet bepalen [' || rec3.prs_bedrijf_naam || '] ';
	         SELECT prs_bedrijf_key
	         INTO v_prs_bedrijf_key
	         FROM prs_v_aanwezigbedrijf
	         WHERE prs_bedrijf_naam = rec3.prs_bedrijf_naam;
	
	         v_errormsg       :=
	               'Kan bedrijf/dienst/loc/gebouw niet wegschrijven ['
	            || rec3.prs_bedrijf_naam
	            || '/'
	            || rec3.prs_dienst_omschrijving
	            || '/'
	            || rec3.alg_locatie_code
	            || '/'
	            || rec3.alg_gebouw_code
	            || '] ';
	
	
	         INSERT INTO prs_bedrijfdienstlocatie
	        (
	            prs_dienst_key, prs_bedrijf_key, alg_locatie_key, alg_gebouw_key
	        )
	         VALUES (v_prs_dienst_key, v_prs_bedrijf_key, decode (v_alg_gebouw_key, null, v_alg_locatie_key, null), v_alg_gebouw_key);
	
	         v_count_upd   := v_count_upd + 1;
	
	         COMMIT;
	      EXCEPTION
	         WHEN OTHERS
	         THEN
	            v_errorhint     := v_errormsg;
	            oracle_err_num   := SQLCODE;
	            oracle_err_mes   := SUBSTR (SQLERRM, 1, 100);
	            v_errormsg       :=
	                  v_errormsg
	               || 'ORACLE (error '
	               || oracle_err_num
	               || '/'
	               || oracle_err_mes
	               || ')';
	            fac.imp_writelog (p_import_key,
	                              'E',
	                              v_errormsg,
	                              v_errorhint
	            );
	            COMMIT;                                             -- tbv logging
	      END;
	   END LOOP;
	
   	fac.imp_writelog (p_import_key,
                     'S',
                     'Bedrijf/dienst/locatie: aantal ingelezen: '
                     || TO_CHAR (v_count_tot),
                     ''
   	);
   	fac.imp_writelog (p_import_key,
                     'S',
                     'Bedrijf/dienst/locatie: aantal toegevoegd: '
                     || TO_CHAR (v_count_upd),
                     ''
   	);
	END;
   
  
   
   
-- MAIN
BEGIN
	
  IF p_sync = 1
  THEN
  	 -- Bij aanvullen nooit verwijderen, alleen bij sync-en
     del_bedrijf (p_import_key);
  END IF;
  
  add_bedrijf (p_import_key);
  
  IF p_sync = 0
  THEN
  	-- Bij aanvullen bedrijven de diensten-locatie-gebouw uitvoeren, bij sync-en (nog) niet
  	diensten_bedrijf(p_import_key);
	END IF;
   
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Importproces relaties afgebroken!');
END;
/











BEGIN adm.systrackscript('$Workfile: mdux02.sql $', '$Revision$', 1); END;
/

COMMIT;


@mdux.sql


SPOOL OFF


