-- Script containing customer specific configuration sql statements for aarw: Rijkswaterstaat for Arcadis Aqumen Facility Management
-- (c) 2010 SG|facilitor
-- $Revision$
-- $Id$
--
-- Support: +31 53 4800700

@aaxx.sql;

SPOOL xaarw.lst
SET ECHO ON

-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE aarw_select_daily_task (p_applname   IN   VARCHAR2, p_applrun    IN   VARCHAR2)
AS
BEGIN
   aaxx_daily_task (p_applname, p_applrun);
END;
/

-- budgettracker overrules
CREATE OR REPLACE VIEW aarw_v_export_budget_tracker   (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_budget_tracker;


-- export overrules
-- exact
CREATE OR REPLACE VIEW aarw_v_export_exact            (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_xml;
CREATE OR REPLACE PROCEDURE aarw_select_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_xml(p_applname, p_applrun);
END;
/

CREATE OR REPLACE PROCEDURE aarw_export_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact(p_applname, p_applrun, p_filedir, p_filename);
END;
/

-- verwerk exact

CREATE OR REPLACE VIEW aarw_v_export_verwerk_exact    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_verwerk_exact;
CREATE OR REPLACE PROCEDURE aarw_export_verwerk_exact (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
   aaxx_export_verwerk_exact(p_applname, p_applrun, p_filedir, p_filename);
END;
/

-- exact verkoop
CREATE OR REPLACE VIEW aarw_v_export_exact_verkoop    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aarw_select_exact_verkoop (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_verkoop(p_applname, p_applrun, to_char(sysdate, 'yyyy'));
END;
/
CREATE OR REPLACE PROCEDURE aarw_export_exact_verkoop (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact_verkoop(p_applname, p_applrun, p_filedir, p_filename, to_char(sysdate, 'yyyy'));
END;
/

-- exact verkoop over het vorige jaar
CREATE OR REPLACE VIEW aarw_v_export_exact_verkoop_vj    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aarw_select_exact_verkoop_vj (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_verkoop(p_applname, p_applrun, to_char(to_number(to_char(sysdate, 'yyyy'))-1));
END;
/
CREATE OR REPLACE PROCEDURE aarw_export_exact_verkoop_vj (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_exact_verkoop(p_applname, p_applrun, p_filedir, p_filename, to_char(to_number(to_char(sysdate, 'yyyy'))-1));
END;
/


CREATE OR REPLACE PROCEDURE aarw_export_bundel_catering (
   p_import_key IN NUMBER
)
AS
   CURSOR c
   IS
      SELECT alg_locatie_key, alg_gebouw_key, g.alg_gebouw_code, SUM(inkoopprijs) inkoopprijs
        FROM (
      SELECT alg_gebouw_code, decode (res_rsv_artikel_verwijder, NULL, 1, (annulering_pct/100) ) * c.res_rsv_artikel_inkoopprijs inkoopprijs
        FROM aarw_imp_catering c, res_artikel ra
       WHERE export_datum IS NULL
         AND c.res_artikel_nr = ra.res_artikel_nr) res,
         alg_v_aanweziggebouw g
       WHERE res.alg_gebouw_code = g.alg_gebouw_code
       GROUP BY alg_locatie_key, alg_gebouw_key, g.alg_gebouw_code;

   c_catmld_uitvoertijd          mld_stdmelding.mld_stdmelding_t_uitvoertijd%TYPE := MLD_T_UITVOERTIJD(2, 'D');
   v_errormsg                    VARCHAR (200);
   oracle_err_num                NUMBER;
   oracle_err_mes                VARCHAR2 (200);
   v_laatste_export              DATE;
   v_mld_melding_key             NUMBER;
   v_mld_opdr_key                NUMBER;
   v_prs_bedrijf_key             NUMBER;
   v_alg_locatie_key             NUMBER;
   v_alg_gebouw_key              NUMBER;
   v_prs_dienst_key              NUMBER;
   v_prs_kostenplaats_key        NUMBER;
   v_mld_opdr_bedrijfopdr_volgnr NUMBER;
   v_aanvrager                   NUMBER;
   v_mld_workorder_key           NUMBER;
   v_mld_stdmelding_key          NUMBER;
   v_date                        DATE;
   v_cur_date                    DATE;
   v_date_check                  DATE;
   v_count                       NUMBER;
   v_count_geb                   NUMBER;
   v_total                       NUMBER(10,2);
BEGIN
  -- Facilitor
  v_aanvrager := 4;
  -- DOW: Arcadis Aqumen kostenplaats key
  v_prs_kostenplaats_key := 21;
  -- stdmelding key voor recharge
  v_mld_stdmelding_key := 581;
  -- key van opdrachttype workorder
  v_mld_workorder_key := 1;
  -- key van Albron
  v_prs_bedrijf_key := 743;

  v_cur_date := SYSDATE;

  -- kijken of er gebouwen in de import staan die niet in FACILITOR gevonden
  -- kunnen worden
  SELECT COUNT ( * )
    INTO v_count_geb
    FROM aarw_imp_catering c
   WHERE c.export_datum IS NULL
         AND NOT EXISTS (SELECT   alg_gebouw_key
                           FROM   alg_v_aanweziggebouw g
                          WHERE   g.alg_gebouw_code = c.alg_gebouw_code);

  v_errormsg := 'Bepaal einddatum';

  -- wat is de eerste dag van de huidige maand
  v_date := to_date(to_char(sysdate, 'yyyymm')||'01','yyyymmdd');


  SELECT count(mld_opdr_key)
    INTO v_count
    FROM mld_opdr
   WHERE mld_opdr_omschrijving = 'Catering factuur tot: ' || to_char(v_date, 'dd-mm-yyyy');

  IF v_count_geb > 0 THEN
    fac.imp_writelog (p_import_key, 'E', 'Er zijn ' || v_count_geb || ' gebouwen geimporteerd die niet in FACILITOR bestaan',
                      'Toelichting: ... ');
  END IF;

  IF v_count > 0 THEN
    fac.imp_writelog (p_import_key, 'E', 'Catering export is al eerder uitgevoerd.',
                      'Controleer opdrachten met datum: ' || to_char(v_date, 'dd-mm-yyyy'));

  ELSE
     FOR rec IN c LOOP
        BEGIN
           -- maak een melding aan voor deze maand

          	v_errormsg := 'Aanmaken catering melding';

       	   INSERT INTO mld_melding
       	   (  mld_melding_omschrijving,
  	          prs_perslid_key,
  	          prs_kostenplaats_key,
  	          mld_stdmelding_key,
  	          mld_alg_locatie_key,
  	          mld_alg_onroerendgoed_keys,
  	          mld_melding_einddatum,
  	          mld_melding_datum,
  	          mld_melding_t_uitvoertijd,
  	          mld_meldbron_key,
  	          mld_melding_module,
  	          mld_melding_spoed
  	       )
      	   VALUES
      	   ( 'Catering factuur boekingen tot ' || to_char(v_date, 'dd-mm-yyyy'),
  		       v_aanvrager,
  		       v_prs_kostenplaats_key,
  		       v_mld_stdmelding_key,
  		       rec.alg_locatie_key,
  		       rec.alg_gebouw_key,
  		       v_date-1,
  		       add_months(v_date, -1),
  		       c_catmld_uitvoertijd,
  		       5,
  		       'MLD',
  		       3
  		     ) RETURNING mld_melding_key INTO v_mld_melding_key;

  		     BEGIN mld.setmeldingstatus(v_mld_melding_key, 2, v_aanvrager); END;
  		     BEGIN mld.setmeldingstatus(v_mld_melding_key, 4, v_aanvrager); END;
  		     UPDATE mld_melding SET mld_melding_behandelaar_key= v_aanvrager WHERE mld_melding_key = v_mld_melding_key;

           -- aanmaken opdracht
           v_mld_opdr_bedrijfopdr_volgnr := mld.BepaalOpdrMeldingVolgnr (v_mld_melding_key);

	         v_errormsg := 'Maak opdracht aan om factuur van cateraar te matchen';
	         -- maak opdracht aan om cateringfactuur van leverancier te matchen
	         INSERT INTO mld_opdr
	         (  mld_melding_key,
	            prs_kostenplaats_key,
	            mld_statusopdr_key,
	            mld_typeopdr_key,
	            prs_perslid_key,
	            mld_uitvoerende_keys,
	            mld_opdr_datumbegin,
	            mld_opdr_einddatum,
	            mld_opdr_module,
	            mld_opdr_omschrijving,
	            mld_opdr_materiaal,
	            mld_opdr_kosten,
	            mld_opdr_bedrijfopdr_volgnr
	         )
	         VALUES
	         (  v_mld_melding_key,
	            v_prs_kostenplaats_key,
	            5,                             -- uitgegeven
	            v_mld_workorder_key,
	            v_aanvrager,
	            v_prs_bedrijf_key,
	            v_date-1,
	            FAC.DatumTijdPlusUitvoerTijd(sysdate, 1, 'DAGEN'),
	            'MLD',
	            'Catering factuur tot: ' || to_char(v_date, 'dd-mm-yyyy'),
	            rec.inkoopprijs,
	            rec.inkoopprijs,
	            v_mld_opdr_bedrijfopdr_volgnr)
	         RETURNING mld_opdr_key INTO v_mld_opdr_key;

	         UPDATE aarw_imp_catering
	            SET export_datum = v_cur_date,
	                mld_opdr_key = v_mld_opdr_key
	          WHERE export_datum IS NULL
	            AND alg_gebouw_code = rec.alg_gebouw_code;

           MLD.setopdrachtstatus (v_mld_opdr_key, 8, v_aanvrager);       -- eerst accepteren
           MLD.setopdrachtstatus (v_mld_opdr_key, 6, v_aanvrager);       -- dan afmelden
           v_errormsg := 'Update melding status';
           MLD.updatemeldingstatus (v_mld_melding_key, 1, v_aanvrager);       -- Facilitor
           MLD.setopdrachtstatus (v_mld_opdr_key, 9, v_aanvrager);       -- dan op afgerond zetten.

           -- Let op: nu gaan we de datum van de tracking een dat terugzetten omdat in de rapportages voor
           -- inkoop en verkoopfacturen alles op datum afgerond gefilterd wordt. De catering van de afgelopen
           -- maand moet dus ook in de afgelopen maand vallen.
           UPDATE fac_tracking t
              SET fac_tracking_datum = fac_tracking_datum - 1,
                  fac_tracking_oms = 'Opdracht is door bundel export geforceerd op andere datum gezet om in de rapportages nog in de vorige maand te vallen'
            WHERE t.fac_srtnotificatie_key IN
                  (SELECT fac_srtnotificatie_key
                     FROM fac_srtnotificatie sn
                    WHERE sn.fac_srtnotificatie_code = 'ORDAFR')
              AND fac_tracking_refkey = v_mld_opdr_key;

        END;
     END LOOP;
  END IF;
  COMMIT;

EXCEPTION WHEN OTHERS THEN
   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, '');
   COMMIT;
END;
/

-- exact projecturen (XML)
CREATE OR REPLACE VIEW aarw_v_export_exact_uren (result, result_order)
AS SELECT result, result_order FROM aaxx_v_export_exact_uren_xml;
CREATE OR REPLACE PROCEDURE aarw_select_exact_uren (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
BEGIN
  aaxx_select_exact_uren_xml(p_applname, p_applrun, '');
END;
/

-- verwerk exact projecturen (XML)
CREATE OR REPLACE PROCEDURE aarw_export_verwerk_exact_uren (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
BEGIN
  aaxx_export_verwerk_exact_uren(p_applname, p_applrun, p_filedir, p_filename, '');
END;
/

--------------------------------
-- import contractorders
--------------------------------
CREATE OR REPLACE PROCEDURE aarw_import_contract (
   p_import_key IN NUMBER
) IS
BEGIN
    aaxx_import_contract (p_import_key);
END aarw_import_contract;
/

CREATE OR REPLACE PROCEDURE aarw_update_contract (p_import_key IN NUMBER)
AS
BEGIN
    aaxx_update_contract (p_import_key);
END aarw_update_contract;
/

CREATE OR REPLACE PROCEDURE aarw_import_ruimte (p_import_key IN NUMBER)
AS
BEGIN
  aaxx_import_ruimte(p_import_key);
END;
/

CREATE OR REPLACE PROCEDURE aarw_update_ruimte (p_import_key IN NUMBER)
AS
BEGIN
  aaxx_update_ruimte(p_import_key);
END;
/


CREATE OR REPLACE PROCEDURE aarw_import_catering (p_import_key IN NUMBER)
AS
   c_fielddelimitor                VARCHAR2 (1) := ';';

   v_newline                       VARCHAR2 (4000);              -- Input line
   v_read                          VARCHAR2 (4000);
   v_lastchar                      VARCHAR2 (1);
   v_firstchar                     VARCHAR2 (1);
   v_errormsg                      VARCHAR (1000);
   v_hint                          VARCHAR (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   v_count                         NUMBER;
   v_ongeldig                      NUMBER (1);
   v_mode                          NUMBER (1);
   v_aanduiding                    VARCHAR (200);
   v_header_is_valid               NUMBER (1);

   -- De importvelden:
   v_prs_perslid_naam_full         VARCHAR2 (150);
   v_prs_afdeling_naam             VARCHAR2 (12);
   v_prs_afdeling_omschrijving     VARCHAR2 (62);
   v_prs_kostenplaats_nr           VARCHAR2 (32);
   v_prs_kostenplaats_omschr       VARCHAR2 (62);
   v_res_reservering_key           NUMBER (12);
   v_res_rsv_ruimte_volgnr         NUMBER (7);
   v_res_rsv_artikel_key           NUMBER (12);
   v_res_artikel_nr                VARCHAR2 (12);
   v_res_artikel_omschrijving      VARCHAR2 (42);
   v_ins_discipline_omschrijving   VARCHAR2 (32);
   v_res_rsv_artikel_aantal        NUMBER (5);
   v_res_rsv_artikel_prijs         NUMBER (9, 2);
   v_res_rsv_artikel_inkoopprijs   NUMBER (7, 2);
   v_res_rsv_artikel_levering      DATE;
   v_res_artikel_prijs             NUMBER (7, 2);
   v_res_artikel_inkoopprijs       NUMBER (7, 2);
   v_alg_locatie_code              VARCHAR2 (12);
   v_alg_locatie_omschrijving      VARCHAR2 (60);
   v_alg_gebouw_code               VARCHAR2 (14);
   v_alg_gebouw_omschrijving       VARCHAR2 (62);
   v_alg_verdieping_code           VARCHAR2 (12);
   v_alg_verdieping_omschrijving   VARCHAR2 (32);
   v_alg_ruimte_nr                 VARCHAR2 (12);
   v_alg_ruimte_omschrijving       VARCHAR2 (32);
   v_res_rsv_artikel_verwijder     DATE;
   v_res_status_bo_key             NUMBER (2);
   v_import_datum                  DATE;
   v_annulering_pct                NUMBER (3);
   v_dummy                         VARCHAR2 (1000);

   CURSOR c
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   FUNCTION calc_annulering_pct (p_artikel_omschrijving    IN VARCHAR2,
                                 p_rsv_artikel_verwijder   IN DATE,
                                 p_rsv_artikel_levering    IN DATE)
      RETURN NUMBER
   AS
      v_interval   NUMBER (7, 2);
   BEGIN
      -- als de verwijderdatum niet gezet is wordt er altijd volledig doorbelast.
      IF p_rsv_artikel_verwijder is null THEN
         RETURN 100;
      END IF;

      SELECT p_rsv_artikel_levering - p_rsv_artikel_verwijder
        INTO v_interval
        FROM DUAL;

      IF v_interval > 14
      THEN
         RETURN 0;
      END IF;

      IF v_interval > 7
     AND UPPER (p_artikel_omschrijving) NOT LIKE '%KOFFIE%'
      THEN
         RETURN 50;
      END IF;

      IF UPPER (p_artikel_omschrijving) NOT LIKE '%KOFFIE%'
      THEN
         RETURN 100;
      END IF;

      IF v_interval < 1
     AND UPPER (p_artikel_omschrijving) LIKE '%KOFFIE%'
      THEN
         RETURN 100;
      END IF;

      RETURN 0;
   END;
BEGIN
   v_header_is_valid := 0;

   DELETE aarw_imp_catering
    WHERE import_datum IS NULL AND import_key <> p_import_key;

   v_import_datum := SYSDATE;

   FOR rec IN c
   LOOP
      BEGIN
         v_read := rec.fac_imp_file_line;
         v_newline := v_read;

         v_lastchar := SUBSTR (v_read, LENGTH (v_read), 1);
         v_firstchar := SUBSTR (v_read, 1, 1);

         v_errormsg := 'Fout opvragen te importeren rij';
         v_aanduiding := '';
         v_ongeldig := 0;

         IF v_newline LIKE
               '"prs_perslid_naam_full";"prs_afdeling_naam";"prs_afdeling_omschrijving";"prs_kostenplaats_nr";"prs_kostenplaats_omschrijving";"res_reservering_key";"res_rsv_ruimte_volgnr";"res_rsv_artikel_key";"res_artikel_nr";"res_artikel_omschrijving";"ins_discipline_omschrijving";"res_rsv_artikel_aantal";"res_rsv_artikel_prijs";"res_rsv_artikel_inkoopprijs";"res_rsv_artikel_levering";"res_artikel_prijs";"res_artikel_inkoopprijs";"alg_locatie_code";"alg_locatie_omschrijving";"alg_gebouw_code";"alg_gebouw_omschrijving";"alg_verdieping_code";"alg_verdieping_omschrijving";"alg_ruimte_nr";"alg_ruimte_omschrijving";"res_rsv_artikel_verwijder";"res_status_bo_key"%'
         THEN
            v_header_is_valid := 1;
         ELSE
            -- Lees alle veldwaarden
            v_aanduiding := rec.fac_imp_file_index;
            v_errormsg :=
               'Fout opvragen te importeren rij (prs_perslid_naam_full)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_prs_perslid_naam_full);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (prs_afdeling_naam)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_prs_afdeling_naam);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (prs_afdeling_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_prs_afdeling_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (prs_kostenplaats_nr)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_prs_kostenplaats_nr);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (prs_kostenplaats_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_prs_kostenplaats_omschr);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_reservering_key)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_reservering_key);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_ruimte_volgnr)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_rsv_ruimte_volgnr);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_key)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_rsv_artikel_key);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_artikel_nr)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_res_artikel_nr);
            -- pas de artikelnummers aan van de losse artikelen. Deze worden binnen
            -- RWS nog niet op de juiste catalogus geboekt.
            IF v_res_artikel_nr = 'Los-Fris'   THEN v_res_artikel_nr := 'LOSPROD4'; END IF;
            IF v_res_artikel_nr = 'Los-Gebak'  THEN v_res_artikel_nr := 'LOSPROD6'; END IF;
            IF v_res_artikel_nr = 'Los-Koffie' THEN v_res_artikel_nr := 'LOSPROD1'; END IF;
            IF v_res_artikel_nr = 'Los-Saucys' THEN v_res_artikel_nr := 'LOSPROD7'; END IF;
            IF v_res_artikel_nr = 'Los-Water'  THEN v_res_artikel_nr := 'LOSPROD3'; END IF;
            IF v_res_artikel_nr = 'Los-Waterk' THEN v_res_artikel_nr := 'LOSPROD2'; END IF;

            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_artikel_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_artikel_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (ins_discipline_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_ins_discipline_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_aantal)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_rsv_artikel_aantal);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_prijs)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            BEGIN
               SELECT v_res_rsv_artikel_aantal * res_artikel_prijs
                 INTO v_res_rsv_artikel_prijs
                 FROM res_artikel ra
               WHERE ra.res_artikel_nr = v_res_artikel_nr
                 AND res_artikel_verwijder IS NULL;
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_res_rsv_artikel_prijs := NULL;
            END;
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_inkoopprijs)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            BEGIN
               SELECT v_res_rsv_artikel_aantal * res_artikel_inkoopprijs
                 INTO v_res_rsv_artikel_inkoopprijs
                 FROM res_artikel ra
               WHERE ra.res_artikel_nr = v_res_artikel_nr
                 AND res_artikel_verwijder IS NULL;
            EXCEPTION WHEN NO_DATA_FOUND
            THEN
               v_res_rsv_artikel_inkoopprijs := NULL;
            END;
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_levering)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            v_res_rsv_artikel_levering :=
               TO_DATE (v_dummy, 'yyyymmdd hh24miss');
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_artikel_prijs)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            v_res_artikel_prijs := TO_NUMBER (REPLACE (v_dummy, ',', '.'));
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_artikel_inkoopprijs)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            v_res_artikel_inkoopprijs :=
               TO_NUMBER (REPLACE (v_dummy, ',', '.'));
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_locatie_code)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_locatie_code);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_locatie_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_locatie_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_gebouw_code)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_gebouw_code);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_gebouw_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_gebouw_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_verdieping_code)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_verdieping_code);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_verdieping_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_verdieping_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_ruimte_nr)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_alg_ruimte_nr);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (alg_ruimte_omschrijving)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_alg_ruimte_omschrijving);
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_rsv_artikel_verwijder)'
               || v_aanduiding;
            fac.imp_getfield (v_newline, c_fielddelimitor, v_dummy);
            v_res_rsv_artikel_verwijder :=
               TO_DATE (v_dummy, 'yyyymmdd hh24miss');
            --
            v_errormsg :=
               'Fout opvragen te importeren rij (res_status_bo_key)'
               || v_aanduiding;
            fac.imp_getfield (v_newline,
                              c_fielddelimitor,
                              v_res_status_bo_key);

            v_errormsg :=
               'Fout bij bepalen annuleringspercentage' || v_aanduiding;
            v_annulering_pct :=
               calc_annulering_pct (v_res_artikel_omschrijving,
                                    v_res_rsv_artikel_verwijder,
                                    v_res_rsv_artikel_levering);

            -- Insert geformatteerde import record
            IF v_header_is_valid = 1
            THEN
               v_errormsg :=
                     'Fout bij toevoegen te importeren catering ['
                  || SUBSTR (v_read, 1, 50)
                  || ']';

               INSERT INTO aarw_imp_catering (prs_perslid_naam_full,
                                              prs_afdeling_naam,
                                              prs_afdeling_omschrijving,
                                              prs_kostenplaats_nr,
                                              prs_kostenplaats_omschrijving,
                                              res_reservering_key,
                                              res_rsv_ruimte_volgnr,
                                              res_rsv_artikel_key,
                                              res_artikel_nr,
                                              res_artikel_omschrijving,
                                              ins_discipline_omschrijving,
                                              res_rsv_artikel_aantal,
                                              res_rsv_artikel_prijs,
                                              res_rsv_artikel_inkoopprijs,
                                              res_rsv_artikel_levering,
                                              res_artikel_prijs,
                                              res_artikel_inkoopprijs,
                                              alg_locatie_code,
                                              alg_locatie_omschrijving,
                                              alg_gebouw_code,
                                              alg_gebouw_omschrijving,
                                              alg_verdieping_code,
                                              alg_verdieping_omschrijving,
                                              alg_ruimte_nr,
                                              alg_ruimte_omschrijving,
                                              res_rsv_artikel_verwijder,
                                              annulering_pct,
                                              res_status_bo_key,
                                              import_datum,
                                              import_key)
                   VALUES (v_prs_perslid_naam_full,
                           v_prs_afdeling_naam,
                           v_prs_afdeling_omschrijving,
                           v_prs_kostenplaats_nr,
                           v_prs_kostenplaats_omschr,
                           v_res_reservering_key,
                           v_res_rsv_ruimte_volgnr,
                           v_res_rsv_artikel_key,
                           v_res_artikel_nr,
                           v_res_artikel_omschrijving,
                           v_ins_discipline_omschrijving,
                           v_res_rsv_artikel_aantal,
                           v_res_rsv_artikel_prijs,
                           v_res_rsv_artikel_inkoopprijs,
                           v_res_rsv_artikel_levering,
                           v_res_artikel_prijs,
                           v_res_artikel_inkoopprijs,
                           v_alg_locatie_code,
                           v_alg_locatie_omschrijving,
                           v_alg_gebouw_code,
                           v_alg_gebouw_omschrijving,
                           v_alg_verdieping_code,
                           v_alg_verdieping_omschrijving,
                           v_alg_ruimte_nr,
                           v_alg_ruimte_omschrijving,
                           v_res_rsv_artikel_verwijder,
                           v_annulering_pct,
                           v_res_status_bo_key,
                           v_import_datum,
                           p_import_key);
            END IF;
         END IF;
      END;
   END LOOP;

   SELECT COUNT ( * )
     INTO v_count
     FROM aarw_imp_catering c
    WHERE NOT EXISTS (SELECT alg_gebouw_key
                        FROM alg_v_aanweziggebouw g
                       WHERE g.alg_gebouw_code = c.alg_gebouw_code);

   IF v_count > 0
   THEN
      fac.imp_writelog (
         p_import_key,
         'E',
            'Er zijn '
         || v_count
         || ' gebouwen geimporteerd die niet in FACILITOR bestaan',
         'Toelichting: ... ');
   END IF;

   IF v_header_is_valid = 0
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || 'Ongeldig importbestand',
                        'Toelichting: ... ');
   END IF;


   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      v_hint := v_errormsg;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_hint);
END;
/

CREATE OR REPLACE PROCEDURE aarw_update_catering (p_import_key IN NUMBER)
AS

BEGIN
   UPDATE aarw_imp_catering
      SET import_datum = SYSDATE
    WHERE import_datum IS NULL;

   IF TO_CHAR(SYSDATE, 'DD') = '01'
   THEN
      aarw_export_bundel_catering (p_import_key);
   END IF;
END;
/


CREATE OR REPLACE VIEW aarw_v_rap_inkoopfactuur
(
   fclt_x_bedrijfnaam,
   fclt_x_periode,
   leveranciernr,
   factuurnr,
   factuurdatum,
   ordernr,
   locatie,
   afleverdatum,
   omschrijving,
   aantal,
   kostprijs,
   btwbedrag,
   btw,
   docid,
   debiteurnummer,
   opmerking,
   lastinvoice,
   btwverlegd,
   gebouw,
   orderomschrijving
)
AS
   SELECT prs_bedrijf_naam bedrijfsnaam,
          to_char(t.fac_tracking_datum, 'yyyy-mm'),
          prs_leverancier_nr leveranciernr,
          NULL factuurnr,
          NULL factuurdatum,
          (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 o.mld_melding_key = m.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)
             ordernr,
          (SELECT alg_locatie_code || ' - ' || alg_locatie_omschrijving
             FROM alg_locatie l
            WHERE l.alg_locatie_key = m.mld_alg_locatie_key)
             locatie,
          TO_CHAR (mld_opdr_datumbegin, 'yyyy-mm-dd') afleverdatum,
          NULL omschrijving,
          1 aantal,
          o.mld_opdr_kosten kostprijs,
          NULL btwbedrag,
          NULL btw,
          NULL docid,
          NULL debiteurnummer,
          NULL opmerking,
          NULL lastinvoice,
          NULL btwverlegd,
          (SELECT og.alg_gebouw_code || ' - ' || og.alg_gebouw_naam
             FROM alg_v_allonrgoed_gegevens og
            WHERE m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys)
             gebouw,
          REPLACE (REPLACE (o.mld_opdr_omschrijving, CHR (13), ''),
                   CHR (10),
                   '<ret>')
             orderomschrijving
     FROM prs_bedrijf b,
          mld_opdr o,
          mld_melding m,
          mld_typeopdr ot,
          fac_tracking t
    WHERE o.mld_uitvoerende_keys = b.prs_bedrijf_key
      AND o.mld_melding_key = m.mld_melding_key
--      AND t.fac_tracking_datum BETWEEN TO_DATE (
--                                          TO_CHAR (ADD_MONTHS (SYSDATE, -1),
--                                                   'yyyymm')
--                                          || '01',
--                                          'yyyymmdd')
--                                   AND  TO_DATE (
--                                           TO_CHAR (ADD_MONTHS (SYSDATE, 0), 'yyyymm')
--                                           || '01',
--                                           'yyyymmdd')
      AND t.fac_srtnotificatie_key = 121                             -- ORDAFR
      AND o.mld_opdr_key = t.fac_tracking_refkey
      AND o.mld_typeopdr_key = ot.mld_typeopdr_key
      AND ot.mld_typeopdr_omschrijving = 'Workorder';


CREATE OR REPLACE VIEW aarw_v_rap_verkoopfactuur
(
   fclt_f_periode,
   bedrijfnaam,
   aafm_ordernr,
   rws_ordernr,
   orderdatum,
   gebouw,
   locatie,
   district,
   melder,
   kostensoort,
   orderomschrijving,
   commitment,
   verkoopprijs,
   fee_marge
--   ,
--   uplift_pct,
--   mld_stdmelding_omschrijving
)
AS
   SELECT to_char(fac_tracking_datum, 'yyyy-mm'),
          prs_bedrijf_naam bedrijfsnaam,
          (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 o.mld_melding_key = m.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)
             ordernr,
          m.mld_melding_externnr,
          TO_CHAR (o.mld_opdr_datumbegin, 'dd-mm-yyyy'),
          (SELECT og.alg_gebouw_code || ' - ' || og.alg_gebouw_naam
             FROM alg_v_allonrgoed_gegevens og
            WHERE m.mld_alg_onroerendgoed_keys = og.alg_onroerendgoed_keys)
             gebouw,
          (SELECT alg_locatie_code || ' - ' || alg_locatie_omschrijving
             FROM alg_locatie l
            WHERE l.alg_locatie_key = m.mld_alg_locatie_key)
             locatie,
          (SELECT alg_district_omschrijving
             FROM alg_locatie l, alg_district d
            WHERE l.alg_locatie_key = m.mld_alg_locatie_key
              AND l.alg_district_key = d.alg_district_key)
             district,
          SUBSTR (
             mld_melding_omschrijving,
             INSTR (mld_melding_omschrijving, 'Melder:') + 8,
             INSTR (mld_melding_omschrijving, 'Email:')
             - (INSTR (mld_melding_omschrijving, 'Melder:') + 8))
             melder,
          COALESCE (std_ks.prs_kostensoort_upper, d_ks.prs_kostensoort_upper)
             kostensoort,
          o.mld_opdr_omschrijving orderomschrijving,
          mld_opdr_kosten commitment,
          mld_opdr_kosten
          + ROUND (
             o.mld_opdr_kosten
             * COALESCE (
                  COALESCE (
                     (SELECT uplift
                        FROM aarw_imp_uplift u
                       WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
                         AND m.mld_stdmelding_key = u.mld_stdmelding_key
                         AND o.mld_uitvoerende_keys = u.prs_bedrijf_key),
                     (SELECT uplift
                        FROM aarw_imp_uplift u
                       WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
                         AND m.mld_stdmelding_key = u.mld_stdmelding_key
                         AND u.prs_bedrijf_key IS NULL)),
                  NULL)
             / 100,
             2)
             verkoopprijs,
          ROUND (
             o.mld_opdr_kosten
             * COALESCE (
                  COALESCE (
                     (SELECT uplift
                        FROM aarw_imp_uplift u
                       WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
                         AND m.mld_stdmelding_key = u.mld_stdmelding_key
                         AND o.mld_uitvoerende_keys = u.prs_bedrijf_key),
                     (SELECT uplift
                        FROM aarw_imp_uplift u
                       WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
                         AND m.mld_stdmelding_key = u.mld_stdmelding_key
                         AND u.prs_bedrijf_key IS NULL)),
                  NULL)
             / 100,
             2)
             fee_marge
--             ,
--          COALESCE (
--             (SELECT uplift
--                FROM aarw_imp_uplift u
--               WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
--                 AND m.mld_stdmelding_key = u.mld_stdmelding_key
--                 AND o.mld_uitvoerende_keys = u.prs_bedrijf_key),
--             (SELECT uplift
--                FROM aarw_imp_uplift u
--               WHERE mld_opdr_datumbegin BETWEEN u.van AND u.tot
--                 AND m.mld_stdmelding_key = u.mld_stdmelding_key
--                 AND u.prs_bedrijf_key IS NULL))
--             uplift,
--          mld_stdmelding_omschrijving
     FROM prs_bedrijf b,
          mld_opdr o,
          mld_melding m,
          mld_typeopdr ot,
          fac_tracking t,
          mld_stdmelding std,
          ins_tab_discipline d,
          prs_kostensoort std_ks,
          prs_kostensoort d_ks
    WHERE m.mld_stdmelding_key <> 581                              -- recharge op catering komt in een losse rapportage
      AND m.mld_stdmelding_key = std.mld_stdmelding_key
      AND std.mld_ins_discipline_key = d.ins_discipline_key
      AND std.prs_kostensoort_key = std_ks.prs_kostensoort_key(+)
      AND d.prs_kostensoort_key = d_ks.prs_kostensoort_key(+)
      AND o.mld_uitvoerende_keys = b.prs_bedrijf_key
      AND o.mld_melding_key = m.mld_melding_key
--      AND t.fac_tracking_datum BETWEEN TO_DATE (
--                                          TO_CHAR (ADD_MONTHS (SYSDATE, -1),
--                                                   'yyyymm')
--                                          || '01',
--                                          'yyyymmdd')
--                                   AND  TO_DATE (
--                                           TO_CHAR (ADD_MONTHS (SYSDATE, 0),
--                                                    'yyyymm')
--                                           || '01',
--                                           'yyyymmdd')
      AND t.fac_srtnotificatie_key = 121                             -- ORDAFR
      AND o.mld_opdr_key = t.fac_tracking_refkey
      AND o.mld_typeopdr_key = ot.mld_typeopdr_key
      AND ot.mld_typeopdr_omschrijving = 'Workorder';


CREATE OR REPLACE VIEW aarw_v_rap_verkoopfac_catering
(
   reservering,
   catalogus,
   artikel,
   nummer_aafm,
   boekingsdatum,
   afmelddatum,
   fclt_f_periode,
   aanvrager,
   btw,
   totaal_inkoopprijs,
   totaal_verkoopprijs,
   annulering_pct,
   gebouw,
   locatie,
   district
)
AS
   SELECT res_reservering_key || '/' || res_rsv_ruimte_volgnr reservering,
          d.ins_discipline_omschrijving,
          res_rsv_artikel_aantal || ' * ' || c.res_artikel_omschrijving
             artikel,
          (SELECT sd.ins_srtdiscipline_prefix || m.mld_melding_key || '/' ||
                     mld_opdr_bedrijfopdr_volgnr
             FROM mld_opdr o,
                  mld_melding m,
                  mld_stdmelding std,
                  ins_tab_discipline d,
                  ins_srtdiscipline sd
            WHERE c.mld_opdr_key = o.mld_opdr_key
              AND o.mld_melding_key = m.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)
             nummer_aafm,
          res_rsv_artikel_levering boekingsdatum,
          res_rsv_artikel_verwijder afmelddatum,
          TO_CHAR (ADD_MONTHS (import_datum, -1), 'yyyy-mm') periode,
          prs_perslid_naam_full aanvrager,
          ra.res_artikel_btw btw,
            c.res_rsv_artikel_aantal
          * ra.res_artikel_inkoopprijs
          * decode (res_rsv_artikel_verwijder, NULL, 1, (annulering_pct/100) )
             totaal_inkoopprijs,
          res_rsv_artikel_prijs * decode (res_rsv_artikel_verwijder, NULL, 1, (annulering_pct/100) ) totaal_verkoopprijs,
          DECODE (res_rsv_artikel_verwijder, NULL, NULL, annulering_pct)
             annulering_pct,
          alg_gebouw_omschrijving gebouw,
          alg_locatie_omschrijving locatie,
          COALESCE (
             (SELECT alg_district_omschrijving
                FROM alg_district d, alg_locatie l
               WHERE l.alg_locatie_code = c.alg_locatie_code
                 AND l.alg_district_key = d.alg_district_key
                 AND l.alg_locatie_verwijder IS NULL),
             'Onbekend!')
             district
     FROM aarw_imp_catering c, res_artikel ra, res_discipline d
    WHERE c.res_artikel_nr = ra.res_artikel_nr
      AND ra.res_discipline_key = d.ins_discipline_key;

-- View voor rapportage om verschil tussen de RWS vastgoedstructuur en de AARW structuur weer te geven.
CREATE OR REPLACE VIEW aarw_v_rap_onrgoed_sync
(
   hide_x_volgnr,
   resultaat,
   district,
   locatie_code,
   locatie_omschrijving,
   gebouw_code,
   gebouw_omschrijving
)
AS
   SELECT DISTINCT 10,
                   'Locatiecode niet gevonden',
                   alg_district_omschrijving,
                   alg_locatie_code,
                   alg_locatie_omschrijving,
                   NULL alg_gebouw_code,
                   NULL alg_gebouw_omschrijving
     FROM aarw_imp_rws_onrgoed i
    WHERE NOT EXISTS
             (SELECT alg_locatie_key
                FROM alg_locatie l
               WHERE alg_locatie_verwijder IS NULL
                 AND l.alg_locatie_code = i.alg_locatie_code)
   UNION ALL
   SELECT DISTINCT 11,
                   'Locatieomschrijving komt niet overeen',
                   i.alg_district_omschrijving,
                   i.alg_locatie_code,
                   i.alg_locatie_omschrijving,
                   NULL alg_gebouw_code,
                   NULL alg_gebouw_omschrijving
     FROM aarw_imp_rws_onrgoed i, alg_locatie l
    WHERE alg_locatie_verwijder IS NULL
      AND l.alg_locatie_code = i.alg_locatie_code
      AND l.alg_locatie_omschrijving <> i.alg_locatie_omschrijving
   UNION ALL
   SELECT 20,
          'Gebouwcode niet gevonden',
          alg_district_omschrijving,
          alg_locatie_code,
          alg_locatie_omschrijving,
          alg_gebouw_code,
          alg_gebouw_omschrijving
     FROM aarw_imp_rws_onrgoed i
    WHERE NOT EXISTS
             (SELECT alg_gebouw_key
                FROM alg_gebouw g
               WHERE alg_gebouw_verwijder IS NULL
                 AND g.alg_gebouw_code = i.alg_gebouw_code)
   UNION ALL
   SELECT DISTINCT 21,
                   'Gebouwomschrijving komt niet overeen',
                   i.alg_district_omschrijving,
                   i.alg_locatie_code,
                   i.alg_locatie_omschrijving,
                   i.alg_gebouw_code,
                   i.alg_gebouw_omschrijving
     FROM aarw_imp_rws_onrgoed i, alg_gebouw g
    WHERE alg_gebouw_verwijder IS NULL
      AND g.alg_gebouw_code = i.alg_gebouw_code
      AND g.alg_gebouw_omschrijving <> i.alg_gebouw_omschrijving
   UNION ALL
   SELECT DISTINCT 31,
                   'Gebouw hangt onder andere locatie',
                   i.alg_district_omschrijving,
                   i.alg_locatie_code,
                   i.alg_locatie_omschrijving,
                   i.alg_gebouw_code,
                   i.alg_gebouw_omschrijving
     FROM aarw_imp_rws_onrgoed i, alg_gebouw g, alg_locatie l
    WHERE alg_gebouw_verwijder IS NULL
      AND g.alg_gebouw_code = i.alg_gebouw_code
      AND g.alg_locatie_key = l.alg_locatie_key
      AND l.alg_locatie_code <> i.alg_locatie_code;

CREATE OR REPLACE PROCEDURE aarw_import_rws_onrgoed (p_import_key IN NUMBER)
IS
   c_fielddelimitor          VARCHAR2 (1) := ';';

   v_newline                 VARCHAR2 (4000);                    -- Input line
   v_errormsg                VARCHAR (1000);
   v_hint                    VARCHAR (1000);
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_header_is_valid         NUMBER (1);

   -- De importvelden:
   v_regio_omschrijving      VARCHAR2 (255);
   v_district_omschrijving   VARCHAR2 (255);
   v_locatie_code            VARCHAR2 (255);
   v_locatie_omschrijving    VARCHAR2 (255);
   v_gebouw_code             VARCHAR2 (255);
   v_gebouw_omschrijving     VARCHAR2 (255);
   v_srtgebouw               VARCHAR2 (255);
   v_dummy                   VARCHAR2 (100);

   CURSOR c
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   rec                       c%ROWTYPE;
BEGIN
   -- Eerst opruiming

   DELETE FROM aarw_imp_rws_onrgoed;

   v_header_is_valid := 0;

   FOR rec IN c
   LOOP
      BEGIN
         v_newline := rec.fac_imp_file_line;

         IF UPPER (v_newline) LIKE
               'REGIO_OMSCHRIJVING;DISTRICT_OMSCHRIJVING;LOCATIE_CODE;LOCATIE_OMSCHRIJVING;GEBOUW_CODE;GEBOUW_OMSCHRIJVING;GEBOUW_FUNCTIE%'
         THEN
            v_header_is_valid := 1;
         ELSE
            -- Lees alle veldwaarden
            fac.imp_getfield (v_newline, c_fielddelimitor, v_regio_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_district_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_code);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_locatie_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_code);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_gebouw_omschrijving);
            fac.imp_getfield (v_newline, c_fielddelimitor, v_srtgebouw);

            INSERT INTO aarw_imp_rws_onrgoed (alg_regio_omschrijving,
                                              alg_district_omschrijving,
                                              alg_locatie_code,
                                              alg_locatie_omschrijving,
                                              alg_gebouw_code,
                                              alg_gebouw_omschrijving,
                                              alg_srtgebouw_oms)
                VALUES (v_regio_omschrijving,
                        v_district_omschrijving,
                        v_locatie_code,
                        v_locatie_omschrijving,
                        v_gebouw_code,
                        v_gebouw_omschrijving,
                        v_srtgebouw);
         END IF;
      END;
   END LOOP;


   IF v_header_is_valid = 0
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Toelichting: ... ');
   END IF;


   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      v_hint := v_errormsg;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_hint);
END aarw_import_rws_onrgoed;
/


CREATE OR REPLACE VIEW aarw_v_rap_uplift
(
   vakgroeptype,
   vakgroep,
   melding,
   prs_bedrijf_naam,
   prs_leverancier_nr,
   van,
   tot,
   uplift
)
AS
   SELECT vakgroeptype,
          vakgroep,
          melding,
          prs_bedrijf_naam,
          prs_leverancier_nr,
          TO_CHAR (van, 'yyyymmdd'),
          TO_CHAR (tot, 'yyyymmdd'),
          uplift
     FROM aarw_imp_uplift;

CREATE OR REPLACE PROCEDURE aarw_import_uplift (p_import_key IN NUMBER)
AS
   CURSOR c_cursor
   IS
        SELECT *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;

   v_newline              VARCHAR2 (1000);
   v_aanduiding           VARCHAR2 (1000);                      -- Import line
   v_field                VARCHAR2 (100);                      -- Import field
   v_fielddelimitor       VARCHAR2 (1);                     -- Field seperator
   v_errormsg             VARCHAR (200);
   v_errorhint            VARCHAR (200);
   v_count                NUMBER;
   oracle_err_num         NUMBER;
   oracle_err_mes         VARCHAR2 (200);
   v_skipfield            VARCHAR2 (100);
   -- De importvelden
   v_vakgroeptype         VARCHAR2 (100);
   v_vakgroep             VARCHAR2 (100);
   v_melding              VARCHAR2 (100);
   v_mld_stdmelding_key   NUMBER (10);
   v_prs_bedrijf_key      NUMBER (10);
   v_c_van                VARCHAR2 (100);
   v_c_tot                VARCHAR2 (100);
   v_van                  DATE;
   v_tot                  DATE;
   v_prs_bedrijf_naam     VARCHAR2 (100);
   v_prs_leverancier_nr   VARCHAR2 (100);
   v_uplift               VARCHAR2 (100);
   v_import_datum         DATE;
   header_found           BOOLEAN;
BEGIN
   -- Eerst opruiming

   -- Init
   header_found := FALSE;
   v_import_datum := SYSDATE;
   v_fielddelimitor := ';';

   FOR rec1 IN c_cursor
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_aanduiding := v_newline;

         IF SUBSTR (v_newline, 1, 3) = '?'
         THEN
            -- EF BB BF aangetroffen
            fac.imp_writelog (p_import_key,
                              'W',
                              'Byte Order Mark aangetroffen',
                              'Bestand heeft onbehandeld UTF-8 formaat.');
            v_newline := SUBSTR (v_newline, 4);
         END IF;

         fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroeptype);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_vakgroep);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_melding);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_prs_bedrijf_naam);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_prs_leverancier_nr);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_c_van);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_c_tot);
         fac.imp_getfield (v_newline, v_fielddelimitor, v_uplift);

         -- Skip until a valid header is found
         IF UPPER (v_vakgroeptype) = 'VAKGROEPTYPE'
        AND UPPER (v_vakgroep) = 'VAKGROEP'
        AND UPPER (v_melding) = 'MELDING'
        AND UPPER (v_prs_bedrijf_naam) = 'PRS_BEDRIJF_NAAM'
        AND UPPER (v_prs_leverancier_nr) = 'PRS_LEVERANCIER_NR'
        AND UPPER (v_c_van) = 'VAN'
        AND UPPER (v_c_tot) = 'TOT'
        AND UPPER (v_uplift) = 'UPLIFT'
         THEN
            -- Sla de kopregel over.
            header_found := TRUE;
         ELSIF (header_found AND v_melding IS NOT NULL)
         THEN
            -- voeg nieuwe records toe
            -- en wijzig bestaande records


            -- zoek de stdmelding
            v_errorhint := 'Zoek de stdmelding';

            SELECT mld_stdmelding_key
              INTO v_mld_stdmelding_key
              FROM mld_stdmelding std,
                   ins_tab_discipline d,
                   ins_srtdiscipline sd
             WHERE std.mld_ins_discipline_key = d.ins_discipline_key
               AND d.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
               AND std.mld_stdmelding_verwijder IS NULL
               AND UPPER (mld_stdmelding_omschrijving) = UPPER (v_melding)
               AND UPPER (ins_discipline_omschrijving) = UPPER (v_vakgroep)
               AND UPPER (ins_srtdiscipline_omschrijving) =
                      UPPER (v_vakgroeptype);

            -- zoek bedrijf
            v_errorhint := 'Zoek bedrijf';

            IF v_prs_leverancier_nr IS NOT NULL
            THEN
               SELECT prs_bedrijf_key
                 INTO v_prs_bedrijf_key
                 FROM prs_bedrijf b
                WHERE prs_bedrijf_verwijder IS NULL
                  AND UPPER (b.prs_leverancier_nr) =
                         UPPER (v_prs_leverancier_nr);
            ELSIF v_prs_bedrijf_naam IS NOT NULL
            THEN
               SELECT prs_bedrijf_key
                 INTO v_prs_bedrijf_key
                 FROM prs_bedrijf b
                WHERE prs_bedrijf_verwijder IS NULL
                  AND UPPER (b.prs_bedrijf_naam) = UPPER (v_prs_bedrijf_naam);
            END IF;

            v_errorhint := 'Converteer de begindatum';
            v_van := TO_DATE (v_c_van, 'yyyymmdd');

            v_errorhint := 'Converteer de einddatum';
            v_tot := TO_DATE (v_c_tot, 'yyyymmdd');

            -- verwijder regels met dezelfde melding, bedrijf en begindatum
            DELETE aarw_imp_uplift u
             WHERE u.mld_stdmelding_key = v_mld_stdmelding_key
               AND u.van = v_van
               AND COALESCE (u.import_datum, SYSDATE - 100) <> v_import_datum;

            -- voeg nieuwe records toe
            INSERT INTO aarw_imp_uplift (mld_stdmelding_key,
                                         vakgroeptype,
                                         vakgroep,
                                         melding,
                                         prs_bedrijf_naam,
                                         prs_leverancier_nr,
                                         prs_bedrijf_key,
                                         van_text,
                                         van,
                                         tot_text,
                                         tot,
                                         uplift,
                                         import_datum)
                VALUES (v_mld_stdmelding_key,
                        v_vakgroeptype,
                        v_vakgroep,
                        v_melding,
                        v_prs_bedrijf_naam,
                        v_prs_leverancier_nr,
                        v_prs_bedrijf_key,
                        v_c_van,
                        v_van,
                        v_c_tot,
                        v_tot,
                        fac.safe_to_number (REPLACE (v_uplift, ',', '.')),
                        v_import_datum);
         END IF;
      EXCEPTION
         WHEN OTHERS
         THEN
            oracle_err_num := SQLCODE;
            oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
            v_errormsg :=
                  'OTHERS (error '
               || oracle_err_num
               || '/'
               || oracle_err_mes
               || ')';
            aaxx_imp_writelog (p_import_key,
                               'E',
                               SUBSTR (v_errormsg, 1, 1000),
                               v_errorhint || ' [' || v_aanduiding || ']');
      END;
   END LOOP;

   IF NOT header_found
   THEN
      aaxx_imp_writelog (p_import_key,
                         'E',
                         'Geen geldige header aangetroffen',
                         'Bestand is geen geldig ruimtesoort importbestand.');
   END IF;

   SELECT COUNT ( * )
     INTO v_count
     FROM imp_log
    WHERE fac_import_key = p_import_key AND imp_log_status = 'E';

   IF v_count > 0
   THEN
      ROLLBACK;
   ELSE
      COMMIT;
   END IF;

   SELECT COUNT ( * )
     INTO v_count
     FROM aarw_imp_uplift u
    WHERE u.import_datum = v_import_datum;

   aaxx_imp_writelog (p_import_key,
                      'S',
                      'Aantal toegevoegde regels: ' || v_count,
                      '');
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
         'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      aaxx_imp_writelog (p_import_key,
                         'E',
                         SUBSTR (v_errormsg, 1, 1000),
                         v_aanduiding);
      ROLLBACK;
END;
/

CREATE OR REPLACE PROCEDURE aarw_update_uplift (p_import_key IN NUMBER)
AS
BEGIN
   -- alles wordt in de import routine afgewerkt.
   NULL;
END;
/

BEGIN adm.systrackscriptId('$Id$', 0); END;
/

BEGIN fac.registercustversion('AARW', 7); END;
/

COMMIT;

SPOOL OFF


