--
-- $Id$
--
-- Script containing customer specific configuration sql statements for aaar: Arcadis Aqumen Facility Management

@aaxx.sql;

DEFINE thisfile = 'aaar.sql'
DEFINE dbuser   = '^AAAR'
DEFINE custid   = 'AAAR'
DEFINE custvers = 7

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
WHENEVER SQLERROR EXIT;
SELECT adm.scriptspoolfile('&dbuser', '&thisfile') AS fcltlogfile FROM DUAL;
WHENEVER SQLERROR CONTINUE;
SPOOL &fcltlogfile
SET DEFINE OFF

------ payload begin ------

-- script om dagelijks terugkerende scripts aan te roepen.
CREATE OR REPLACE PROCEDURE aaar_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 aaar_v_export_budget_tracker   (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_budget_tracker;

-- export overrules
-- exact
-- Leverancier overrulles
CREATE OR REPLACE PROCEDURE aaar_import_opdrstat_strukton (
   p_import_key IN NUMBER
)
AS
BEGIN
   aaxx_import_opdrstat_strukton (p_import_key);
END aaar_import_opdrstat_strukton;
/

CREATE OR REPLACE PROCEDURE aaar_update_opdrstat_strukton (
   p_import_key IN NUMBER
)
AS
BEGIN
   aaxx_update_opdrstat_strukton (p_import_key);
END aaar_update_opdrstat_strukton;
/

CREATE OR REPLACE VIEW aaar_v_export_exact            (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_xml;
CREATE OR REPLACE PROCEDURE aaar_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 aaar_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;
/

CREATE OR REPLACE VIEW aaar_v_export_verwerk_exact    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_verwerk_exact;
CREATE OR REPLACE PROCEDURE aaar_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;
/

-- bundel catering
CREATE OR REPLACE VIEW aaar_v_catering_kpn_bld
(
   res_rsv_artikel_key,
   res_rsv_artikel_prijs,
   res_rsv_artikel_levering,
   prs_kostenplaats_key,
   alg_gebouw_key,
   alg_locatie_key
)
AS
   SELECT res_rsv_artikel_key,
          res_rsv_artikel_prijs,
          res_rsv_artikel_levering,
          rrr.prs_kostenplaats_key,
          alg_gebouw_key,
          alg_locatie_key
     FROM res_rsv_ruimte rrr,
          prs_kostenplaats k,
          res_rsv_artikel rra,
          alg_v_ruimte_gegevens rg,
          (SELECT COALESCE (rrr1.alg_ruimte_key, r2a1.alg_ruimte_key)
                     alg_ruimte_key,
                  rrr1.res_rsv_ruimte_key
             FROM res_v_rsv_ruimte_2_alg_ruimte r2a1, res_rsv_ruimte rrr1
            WHERE rrr1.res_rsv_ruimte_key = r2a1.res_rsv_ruimte_key(+)) r2a
    WHERE rrr.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
      AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key
      AND rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
      AND r2a.alg_ruimte_key = rg.alg_ruimte_key
      AND rrr.res_rsv_ruimte_verwijder IS NULL
      AND rra.res_rsv_artikel_verwijder IS NULL
      AND rra.res_status_bo_key = 5;

CREATE OR REPLACE VIEW aaar_v_export_bundel_catering
(
   result,
   result_order
)
AS
   SELECT res_rsv_artikel_key || ';' || res_rsv_artikel_prijs result,
          res_rsv_artikel_key result_order
     FROM aaar_v_catering_kpn_bld;


CREATE OR REPLACE PROCEDURE aaar_export_bundel_catering (
   p_applname   IN VARCHAR2,
   p_applrun    IN VARCHAR2,
   p_filedir    IN VARCHAR2,
   p_filename   IN VARCHAR2)
AS

   CURSOR c_kpn_bld (lev_date DATE)
   IS
        SELECT prs_kostenplaats_key, alg_gebouw_key, alg_locatie_key, sum(res_rsv_artikel_prijs) prijs
          FROM aaar_v_catering_kpn_bld
         WHERE res_rsv_artikel_levering < lev_date
      GROUP BY prs_kostenplaats_key, alg_gebouw_key, alg_locatie_key;

   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_mld_opdr_bedrijfopdr_volgnr   NUMBER;
   v_aanvrager                     NUMBER;
   v_mld_workorder_key             NUMBER;
   v_mld_stdmelding_key            NUMBER;
   v_prs_kostenplaats_key          NUMBER;
   v_date                          DATE;
   v_month                         VARCHAR2(30);
   v_count                         NUMBER;
BEGIN
   -- Facilitor
   v_aanvrager := 4;
   -- stdmelding key voor recharge
   v_mld_stdmelding_key := 901;
   -- key van opdrachttype workorder
   v_mld_workorder_key := 1;
   -- key van bedrijf Appèl
   v_prs_bedrijf_key := 193;
   -- dummy kostenplaats bij de melding
   v_prs_kostenplaats_key := 41;   -- AAFM

   v_errormsg := 'Bepaal einddatum';

   -- wat is de eerste dag van de huidige maand
   v_date := TO_DATE (TO_CHAR (SYSDATE, 'yyyymm') || '01', 'yyyymmdd');
   v_month := REPLACE(TO_CHAR (v_date-1, 'month-yyyy', 'NLS_DATE_LANGUAGE = ''dutch'''), ' ', '');

   SELECT COUNT (mld_opdr_key)
     INTO v_count
     FROM mld_opdr
    WHERE mld_opdr_omschrijving = 'Cateringreserveringen maand: ' || v_month;

   IF v_count > 0
   THEN
      fac.writelog (
         p_applname,
         'E',
         'Catering export is al eerder uitgevoerd.',
         'Controleer opdrachten met omschrijving: '
         || 'Cateringreserveringen maand: ' || v_month);
   ELSE
      FOR rec IN c_kpn_bld (v_date)
      LOOP
         BEGIN
            IF rec.prs_kostenplaats_key IS NOT NULL
            THEN
               -- controleer of ik een melding heb op dit gebouw
               BEGIN
                  v_errormsg := 'Opzoeken catering melding';

                  SELECT mld_melding_key
                    INTO v_mld_melding_key
                    FROM mld_melding
                   WHERE mld_alg_locatie_key = rec.alg_locatie_key
                     AND mld_alg_onroerendgoed_keys = rec.alg_gebouw_key
                     AND mld_stdmelding_key = v_mld_stdmelding_key
                     AND prs_perslid_key = v_aanvrager
                     AND v_date BETWEEN mld_melding_datum
                                    AND  mld_melding_einddatum + 1;
               EXCEPTION
                  WHEN NO_DATA_FOUND
                  THEN
                     -- geen melding voor deze locatie gevonden. Dan maken we er maar een aan.

                     v_errormsg := 'Aanmaken catering melding';

                     BEGIN
                        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',
                                    v_aanvrager,
                                    v_prs_kostenplaats_key,
                                    v_mld_stdmelding_key,
                                    rec.alg_locatie_key,
                                    rec.alg_gebouw_key,
                                    TO_DATE (TO_CHAR (v_date, 'YYYY') || '1231',
                                             'YYYYMMDD'),
                                    TO_DATE (TO_CHAR (v_date, 'YYYY') || '0101',
                                             'YYYYMMDD'),
                                    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;
                     END;
               END;

               -- nu gaan we de opdracht aanmaken
               BEGIN
                  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,
                           rec.prs_kostenplaats_key,
                           5,                                     -- uitgegeven
                           v_mld_workorder_key,
                           v_aanvrager,
                           v_prs_bedrijf_key,
                           v_date - 1,
                           fac.datumtijdplusuitvoertijd (SYSDATE, 1, 'DAGEN'),
                           'MLD',
                           'Cateringreserveringen maand: ' || v_month,
                           rec.prijs,
                           rec.prijs,
                           v_mld_opdr_bedrijfopdr_volgnr)
                  RETURNING mld_opdr_key INTO v_mld_opdr_key;

                  INSERT INTO aaxx_bundel_catering_ref (mld_opdr_key, res_rsv_artikel_key, res_rsv_artikel_prijs, res_rsv_artikel_verwerkt)
                        SELECT v_mld_opdr_key, res_rsv_artikel_key, res_rsv_artikel_prijs, v_date
                          FROM aaar_v_catering_kpn_bld
                         WHERE res_rsv_artikel_levering < v_date
                           AND prs_kostenplaats_key = rec.prs_kostenplaats_key
                           AND alg_gebouw_key = rec.alg_gebouw_key;

                  UPDATE res_rsv_artikel rra
                     SET res_rsv_artikel_verwerkt = SYSDATE,
                         res_status_bo_key = 6
                   WHERE EXISTS
                            (SELECT mld_opdr_key
                               FROM aaxx_bundel_catering_ref bc
                              WHERE bc.mld_opdr_key  = v_mld_opdr_key
                                AND bc.res_rsv_artikel_key = rra.res_rsv_artikel_key);

                  v_errormsg := 'Update melding status';
                  mld.updatemeldingstatus (v_mld_melding_key, 0, v_aanvrager); -- Facilitor
                  -- meld de opdracht af
                  MLD.setopdrachtstatus (v_mld_opdr_key, 6, v_aanvrager);
                  -- en zet de opdracht op afgerond zodat deze direct in het factuurvoorstel komt.
                  MLD.setopdrachtstatus (v_mld_opdr_key, 9, v_aanvrager);

               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.writelog (p_applname, 'E', v_errormsg, '');

               END;
            ELSE
               fac.writelog (p_applname, 'E', 'Een bedrag van: ' || rec.prijs || ' euro kan niet aan een kostenplaats gekoppeld worden!', '');
            END IF;
         END LOOP;
      END LOOP;
   END IF;

   COMMIT;
END;
/

-- exact verkoop
CREATE OR REPLACE VIEW aaar_v_export_exact_verkoop    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aaar_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 aaar_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 aaar_v_export_exact_verkoop_vj    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aaar_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 aaar_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;
/

-- exact projecturen (XML)
CREATE OR REPLACE VIEW aaar_v_export_exact_uren (result, result_order)
AS SELECT result, result_order FROM aaxx_v_export_exact_uren_xml;
CREATE OR REPLACE PROCEDURE aaar_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 aaar_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 aaar_import_contract (
   p_import_key IN NUMBER
) IS
BEGIN
    aaxx_import_contract (p_import_key);
END aaar_import_contract;
/

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

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

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


-- kenmerk key 1000: afspraak is prive (dus niet op infobord)
CREATE OR REPLACE VIEW aaar_v_rap_bezoekers
AS
SELECT * FROM aaxx_v_rap_infobord;


------ payload end   ------

SET DEFINE ON
BEGIN fac.registercustversion('&custid', '&custvers'); END;
/
SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 0); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile
