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

DEFINE thisfile = 'AADS.SQL'
DEFINE dbuser   = '^AADS'

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



-- verwerk exact
-- Procedure ter voorbereiding van de export van facturen.
-- Deze procedure corrigeert de kostenplaats bij de opdracht indien de kostensoort begint met 'ST ONDH'
-- In dat geval wordt de kostenplaats overgenomen van de gebouweigenaar (kenmerkkey 1063 bij gebouw).

-- exact verkoop
CREATE OR REPLACE VIEW aads_v_export_exact_verkoop    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aads_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 aads_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 aads_v_export_exact_verkoop_vj    (RESULT, result_order) AS SELECT RESULT, result_order FROM aaxx_v_export_exact_verkoop;
CREATE OR REPLACE PROCEDURE aads_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 aads_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 aads_v_export_exact_uren (result, result_order)
AS SELECT result, result_order FROM aaxx_v_export_exact_uren_xml;
CREATE OR REPLACE PROCEDURE aads_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 aads_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 overrulles

CREATE OR REPLACE VIEW aads_v_bundel_catering
(
   prs_kostenplaats_key,
   prs_bedrijf_key,
   alg_gebouw_key,
   alg_locatie_key,
   res_rsv_artikel_prijs,
   res_rsv_artikel_key,
   res_rsv_artikel_levering,
   res_status_bo_key,
   mld_stdmelding_key
)
AS
   SELECT rrr.prs_kostenplaats_key,
          prs_bedrijf_key,
          g.alg_gebouw_key,
          g.alg_locatie_key,
          res_rsv_artikel_prijs,
          rra.res_rsv_artikel_key,
          rra.res_rsv_artikel_levering,
          rra.res_status_bo_key,
          (SELECT FAC.safe_to_number(alg_onrgoedkenmerk_waarde)
             FROM alg_onrgoedkenmerk
            WHERE alg_kenmerk_key = 5 -- kenmerk voor catering stdmelding key
              AND alg_onrgoed_key = g.alg_locatie_key) mld_stdmelding_key
     FROM res_rsv_artikel rra,
          res_rsv_ruimte rrr,
          res_artikel ra,
          (SELECT res_ins_discipline_key,
                      prs_bedrijf_key
             FROM res_disc_params WHERE prs_bedrijf_key IS NOT NULL) rdp,
          alg_ruimte r,
          alg_verdieping v,
          alg_gebouw g
    WHERE rra.res_artikel_key = ra.res_artikel_key
      AND ra.res_discipline_key = rdp.res_ins_discipline_key
      AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
      AND rra.res_rsv_artikel_verwijder IS NULL
      AND rrr.alg_ruimte_key = r.alg_ruimte_key
      AND r.alg_verdieping_key = v.alg_verdieping_key
      AND v.alg_gebouw_key = g.alg_gebouw_key
      AND res_rsv_artikel_prijs > 0;

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

  CURSOR c(lev_date DATE) IS
  SELECT prs_kostenplaats_key,
         prs_bedrijf_key,
         alg_locatie_key,
         alg_gebouw_key,
         SUM (res_rsv_artikel_prijs) prijs,
         mld_stdmelding_key
    FROM aads_v_bundel_catering
   WHERE res_rsv_artikel_levering < lev_date
     AND res_status_bo_key = 5
GROUP BY prs_bedrijf_key, prs_kostenplaats_key, alg_locatie_key, alg_gebouw_key, mld_stdmelding_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_alg_locatie_key             NUMBER;
   v_prs_dienst_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_count                       NUMBER;
BEGIN
  -- Facilitor
  v_aanvrager := 4;
  -- stdmelding key voor recharge
  v_mld_stdmelding_key := 941;
  -- key van opdrachttype workorder
  v_mld_workorder_key := 1;


  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 > 0 THEN
    fac.writelog (p_applname, 'E', 'Catering export is al eerder uitgevoerd.',
                                   'Controleer opdrachten met datum: ' || to_char(v_date, 'dd-mm-yyyy'));
  ELSE
    v_errormsg := 'Aanpassen kostenplaatsen';
    -- vul de kostenplaats van reserveringen die per abuis geen kostenplaats hebben.
    UPDATE res_rsv_ruimte rrr
       SET prs_kostenplaats_key =
             (SELECT prs_kostenplaats_key
                FROM prs_perslid p, prs_afdeling a
               WHERE rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                     AND p.prs_afdeling_key = a.prs_afdeling_key)
     WHERE rrr.prs_kostenplaats_key IS NULL;

    FOR rec IN c(v_date) LOOP
    -- 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,
   	  rec.prs_kostenplaats_key,
   	  COALESCE(rec.mld_stdmelding_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;

       v_errormsg := 'Maak opdracht aan om factuur van cateraar te matchen';

      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
             , rec.prs_bedrijf_key
             , v_date -1
             , FAC.DatumTijdPlusUitvoerTijd(sysdate, 1, 'DAGEN')
             , 'MLD'
             , 'Catering factuur tot: ' || to_char(v_date, 'dd-mm-yyyy')
             , round(rec.prijs,2)
             , round(rec.prijs,2)
             , v_mld_opdr_bedrijfopdr_volgnr) RETURNING mld_opdr_key INTO v_mld_opdr_key;

      MLD.setopdrachtstatus(v_mld_opdr_key, 6, v_aanvrager);             -- afgemeld, facilitor

       v_errormsg := 'Update melding/opdracht status';

       MLD.updatemeldingstatus (v_mld_melding_key, 0, v_aanvrager);       -- facilitor
       MLD.setmeldingstatus(v_mld_melding_key, 5, v_aanvrager);           -- afgemeld, facilitor
       MLD.mld_nextworkflowstep (v_mld_melding_key, 1);

      v_errormsg := 'Voeg regels toe aan mapping tabel';

      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 aads_v_bundel_catering c
             WHERE res_rsv_artikel_levering < v_date
               AND c.prs_bedrijf_key = rec.prs_bedrijf_key
               AND c.prs_kostenplaats_key = rec.prs_kostenplaats_key
               AND c.alg_locatie_key = rec.alg_locatie_key
               AND c.alg_gebouw_key = rec.alg_gebouw_key
               AND COALESCE(c.mld_stdmelding_key, -1) = COALESCE(rec.mld_stdmelding_key, -1)
               AND c.res_status_bo_key = 5;

      v_errormsg := 'Pas de status van de artikelen aan ' || v_mld_opdr_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);

    END LOOP;

    COMMIT;

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

CREATE OR REPLACE VIEW AADS_V_RAP_CATERING_INKOOP
(
   FCLT_F_EXPORTJOB,
   FCLT_F_BEDRIJF,
   AFLEVERADRES,
   FCLT_F_AFLEVERDATUM,
   TIJDSTIP,
   BESTELNUMMER,
   FCLT_F_ARTIKELNUMMER,
   ARTIKELOMSCHRIJVING,
   INTERNE_ARTIKELPRIJS,
   AANTAL,
   FCLT_F_BESTELLER,
   COSTCENTER,
   AFDELING
)
AS
   SELECT TO_CHAR (res_rsv_artikel_verwerkt, 'dd-mm-yyyy'),
          prs_bedrijf_naam,
             alg_locatie_code
          || '-'
          || alg_gebouw_code
          || '-'
          || alg_verdieping_code
          || '-'
          || alg_ruimte_nr
          || ' ('
          || alg_ruimte_omschrijving
          || ')'
             afleveradres,
          TO_CHAR (rra.res_rsv_artikel_levering, 'dd-mm-yyyy') datum,
          TO_CHAR (rra.res_rsv_artikel_levering, 'hh24:mi') tijd,
          res_reservering_key || '/' || res_rsv_ruimte_volgnr bestelnummer,
          res_artikel_nr artikelnummer,
          res_artikel_omschrijving artikelomschrijving,
          ROUND (
             (rra.res_rsv_artikel_prijs / rra.res_rsv_artikel_aantal),
             5)
             interneprijs,
          rra.res_rsv_artikel_aantal aantal,
          pf.prs_perslid_naam_full besteller,
          (SELECT MAX (res_kenmerkreservering_waarde)
             FROM res_kenmerkwaarde kw, res_kenmerk rk
            WHERE     kw.res_kenmerk_key = rk.res_kenmerk_key
                  AND kw.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                  AND rk.res_srtkenmerk_key = 1)
             costcenter,
          k.prs_kostenplaats_nr || '-' || k.prs_kostenplaats_omschrijving
     FROM res_rsv_ruimte rrr,
          aads_v_bundel_catering bu,
          prs_bedrijf b,
          res_rsv_artikel rra,
          alg_ruimte r,
          alg_verdieping v,
          alg_gebouw g,
          alg_locatie l,
          prs_perslid p,
          prs_v_perslid_fullnames_all pf,
          prs_kostenplaats k,
          res_artikel ra,
          (  SELECT COALESCE (MAX (ir2a.alg_ruimte_key), irrr.alg_ruimte_key)
                       alg_ruimte_key,
                    irrr.res_rsv_ruimte_key
               FROM res_rsv_ruimte irrr, res_v_rsv_ruimte_2_alg_ruimte ir2a
              WHERE irrr.res_rsv_ruimte_key = ir2a.res_rsv_ruimte_key(+)
           GROUP BY irrr.res_rsv_ruimte_key, irrr.alg_ruimte_key) r2a
    WHERE     rrr.res_rsv_ruimte_key = rra.res_rsv_ruimte_key
          AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND r2a.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
          AND r2a.alg_ruimte_key = r.alg_ruimte_key
          AND r.alg_verdieping_key = v.alg_verdieping_key
          AND v.alg_gebouw_key = g.alg_gebouw_key
          AND g.alg_locatie_key = l.alg_locatie_key
          AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
          AND p.prs_perslid_key = pf.prs_perslid_key
          AND rra.res_rsv_artikel_verwijder IS NULL
          AND rra.res_status_bo_key = 6
          AND rra.res_artikel_key = ra.res_artikel_key
          AND rra.res_rsv_artikel_levering > TO_DATE ('20110901', 'yyyymmdd')
          AND rra.res_rsv_artikel_key = bu.res_rsv_artikel_key(+)
          AND bu.prs_bedrijf_key = b.prs_bedrijf_key(+);

CREATE OR REPLACE VIEW aads_v_rap_catering_verkoop
(
   fclt_f_bedrijf,
   reservering,
   afleveradres,
   fclt_f_FDC,
   FDC_omschrijving,
   costcenter,
   boekingsdatum,
   fclt_f_periode,
   aanvrager,
   btw,
   totaal
)
AS
     SELECT   bedrijf,
              reservering,
              afleveradres,
              kostenplaats_nr,
              kostenplaats,
              costcenter,
              boekingsdatum,
              periode,
              aanvrager,
              btw,
              SUM (totaalprijs)
       FROM   (SELECT   b.prs_bedrijf_naam bedrijf,
                           rrr.res_reservering_key
                        || '/'
                        || rrr.res_rsv_ruimte_volgnr
                           reservering,
                        (SELECT   alg_gebouw_code
                           FROM   alg_gebouw g, alg_verdieping v, alg_ruimte r
                          WHERE   r.alg_ruimte_key =
                                     COALESCE (rrr.alg_ruimte_key,
                                               r2a.alg_ruimte_key)
                                  AND r.alg_verdieping_key =
                                        v.alg_verdieping_key
                                  AND v.alg_gebouw_key = g.alg_gebouw_key)
                           afleveradres,
                        k.prs_kostenplaats_nr kostenplaats_nr,
                        k.prs_kostenplaats_omschrijving kostenplaats,
                        (SELECT   MAX (res_kenmerkreservering_waarde)
                           FROM   res_kenmerkwaarde kw, res_kenmerk rk
                          WHERE   kw.res_kenmerk_key = rk.res_kenmerk_key
                                  AND kw.res_rsv_ruimte_key =
                                        rrr.res_rsv_ruimte_key
                                  AND kw.res_kenmerkwaarde_verwijder IS NULL
                                  AND rk.res_srtkenmerk_key = 1)
                           costcenter,
                        TO_CHAR (rra.res_rsv_artikel_levering, 'dd-mm-yyyy')
                           boekingsdatum,
                        TO_CHAR (ADD_MONTHS (rra.res_rsv_artikel_verwerkt, -1),
                                 'yyyy-mm')
                           periode,
                        pf.prs_perslid_naam_full aanvrager,
                        rra.res_rsv_artikel_btw btw,
                        rra.res_rsv_artikel_prijs totaalprijs
                 FROM   res_rsv_artikel rra,
                        res_rsv_ruimte rrr,
                        prs_kostenplaats k,
                        prs_perslid p,
                        prs_afdeling a,
                        prs_bedrijf b,
                        aads_v_bundel_catering bu,
                        prs_v_perslid_fullnames_all pf,
                        (  SELECT   res_rsv_ruimte_key,
                                    MAX (alg_ruimte_key) alg_ruimte_key
                             FROM   res_v_rsv_ruimte_2_alg_ruimte
                         GROUP BY   res_rsv_ruimte_key) r2a,
                        res_artikel ra
                WHERE       rra.res_status_bo_key = 6
                        AND rra.res_rsv_ruimte_key = rrr.res_rsv_ruimte_key
                        AND rrr.prs_kostenplaats_key = k.prs_kostenplaats_key
                        AND rrr.res_rsv_ruimte_host_key = p.prs_perslid_key
                        AND rrr.res_rsv_ruimte_key = r2a.res_rsv_ruimte_key(+)
                        AND p.prs_afdeling_key = a.prs_afdeling_key
                        AND p.prs_perslid_key = pf.prs_perslid_key
                        AND rra.res_artikel_key = ra.res_artikel_key
                        AND rra.res_rsv_artikel_key = bu.res_rsv_artikel_key(+)
                        AND bu.prs_bedrijf_key = b.prs_bedrijf_key(+)
                        AND rra.res_rsv_artikel_levering >
                              TO_DATE ('20110901', 'yyyymmdd'))
   GROUP BY   bedrijf,
              reservering,
              afleveradres,
              kostenplaats_nr,
              kostenplaats,
              costcenter,
              boekingsdatum,
              periode,
              aanvrager,
              btw;



-- AADS#22801 rapport geautoriseerde bestellers
-- Keys: DSM Demand manager (=187), DSM Budgethouder (=182), DSM Geautoriseerd besteller (=181) en DSM Gedelegeerd Budgethouder (=12)
CREATE OR REPLACE VIEW AADS_V_RAP_AUTH_BESTELLERS
(
   FCLT_F_NAAM,
   FCLT_F_KOSTENPLAATS,
   FCLT_F_MANDAAT,
   FCLT_F_PROFIEL,
   FCLT_F_AFDELING,
   TELEFOONNUMMER,
   EMAILADRES
)
AS
   SELECT   prs_perslid_naam_full Naam,
            prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
               Kostenplaats,
            'Afdeling',
            g.fac_groep_omschrijving Profiel,
            prs_afdeling_omschrijving Afdeling,
            coalesce(prs_perslid_telefoonnr, prs_perslid_mobiel) Telefoon,
            prs_perslid_email Mail
     FROM   prs_v_perslid_fullnames pf,
            fac_gebruikersgroep fg,
            fac_groep g,
            prs_perslid p,
            prs_afdeling a,
            prs_kostenplaats k
    WHERE       pf.prs_perslid_key = fg.prs_perslid_key
            AND pf.prs_perslid_key = p.prs_perslid_key
            AND a.prs_afdeling_key = p.prs_afdeling_key
            AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND g.fac_groep_key = fg.fac_groep_key
            AND fg.fac_groep_key IN (182, 187, 181, 12)
            AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
   UNION ALL
   SELECT   prs_perslid_naam_full Naam,
            prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
               Kostenplaats,
            'Gemandateerd',
            g.fac_groep_omschrijving Profiel,
            prs_afdeling_omschrijving Afdeling,
            coalesce(prs_perslid_telefoonnr, prs_perslid_mobiel) Telefoon,
            prs_perslid_email Mail
     FROM   prs_v_perslid_fullnames pf,
            fac_gebruikersgroep fg,
            fac_groep g,
            prs_perslid p,
            prs_afdeling a,
            prs_kostenplaats k,
            (SELECT   p.prs_perslid_key, k.prs_kostenplaats_key
               FROM   prs_perslidkostenplaats pk,
                      prs_perslid p,
                      prs_kostenplaats k
              WHERE       p.prs_perslid_key = pk.prs_perslid_key
                      AND k.prs_kostenplaats_key = pk.prs_kostenplaats_key
                      AND k.prs_kostenplaats_verwijder IS NULL
                      AND p.prs_perslid_verwijder IS NULL) m
    WHERE       pf.prs_perslid_key = fg.prs_perslid_key
            AND pf.prs_perslid_key = p.prs_perslid_key
            AND m.prs_perslid_key = p.prs_perslid_key
            AND a.prs_afdeling_key = p.prs_afdeling_key
            AND m.prs_kostenplaats_key = k.prs_kostenplaats_key
            AND g.fac_groep_key = fg.fac_groep_key
            AND fg.fac_groep_key IN (182, 187, 181, 12)
            AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
   ORDER BY   1,
              3,
              4,
              2;

-- AADS#39742 rapport geautoriseerde bestellers
-- Keys 1000, 1001 en 1002 zijn checkboxen Budgethouder, Geautoriseerd besteller en Gedelegeerd budgethouder
 CREATE OR REPLACE VIEW aads_v_rap_auth_bestellers2
(
   fclt_f_naam,
   fclt_f_kostenplaats,
   fclt_f_mandaat,
   fclt_f_profiel,
   fclt_f_afdeling,
   telefoonnummer,
   emailadres
)
AS
   SELECT prs_perslid_naam_full naam,
          prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
             kostenplaats,
          'Afdeling',
          aut.prs_kenmerk_omschrijving,
          prs_afdeling_omschrijving afdeling,
          COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel) telefoon,
          prs_perslid_email mail
     FROM prs_v_perslid_fullnames pf,
          prs_perslid p,
          prs_afdeling a,
          prs_kostenplaats k,
          (SELECT prs_link_key, prs_kenmerk_omschrijving
             FROM prs_kenmerklink pkl, prs_kenmerk pk
            WHERE pk.prs_kenmerk_key IN (1000, 1001, 1002)
                  AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key) aut
    WHERE     pf.prs_perslid_key = p.prs_perslid_key
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND a.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
          AND p.prs_perslid_key = aut.prs_link_key
   UNION ALL
   SELECT prs_perslid_naam_full naam,
          prs_kostenplaats_nr || ' ' || prs_kostenplaats_omschrijving
             kostenplaats,
          'Gemandateerd',
          aut.prs_kenmerk_omschrijving profiel,
          prs_afdeling_omschrijving afdeling,
          COALESCE (prs_perslid_telefoonnr, prs_perslid_mobiel) telefoon,
          prs_perslid_email mail
     FROM prs_v_perslid_fullnames pf,
          prs_perslid p,
          prs_afdeling a,
          prs_kostenplaats k,
          (SELECT p.prs_perslid_key, k.prs_kostenplaats_key
             FROM prs_perslidkostenplaats pk,
                  prs_perslid p,
                  prs_kostenplaats k
            WHERE     p.prs_perslid_key = pk.prs_perslid_key
                  AND k.prs_kostenplaats_key = pk.prs_kostenplaats_key
                  AND k.prs_kostenplaats_verwijder IS NULL
                  AND p.prs_perslid_verwijder IS NULL) m,
          (SELECT prs_link_key, prs_kenmerk_omschrijving
             FROM prs_kenmerklink pkl, prs_kenmerk pk
            WHERE pk.prs_kenmerk_key IN (1000, 1001, 1002)
                  AND pkl.prs_kenmerk_key = pk.prs_kenmerk_key) aut
    WHERE     pf.prs_perslid_key = p.prs_perslid_key
          AND m.prs_perslid_key = p.prs_perslid_key
          AND a.prs_afdeling_key = p.prs_afdeling_key
          AND m.prs_kostenplaats_key = k.prs_kostenplaats_key
          AND p.prs_perslid_upper NOT LIKE 'ARCHIVE%'
          AND aut.prs_link_key = p.prs_perslid_key
   ORDER BY 1,
            3,
            4,
            2;

-- AADS#34572 rapportage tbv huuradministratie
-- AADS#56061 toevoeging huurbaas gedelegeerd
CREATE OR REPLACE VIEW AADS_V_RAP_ALG_HUURADMIN
(
    FCLT_F_LOCATIE_CODE,
    FCLT_F_GEBOUW_CODE,
    BOUWDEEL,
    VERDIEPING,
    RUIMTENUMMER,
    RUIMTEOMSCHRIJVING,
    FCLT_F_RUIMTEFUNCTIE,
    M2,
    TEKEN_M2,
    FCLT_F_HUURDER_NUMMER,
    AFDELINGSOMSCHRIJVING,
    FCLT_F_FDC,
    BEZETTING,
    TARIEF_KALE_HUUR,
    TARIEF_SERVICEKOSTEN,
    TARIEF_FMKOSTEN,
    WERKPLEK_TARIEF,
    AANTAL_WERPLEKKEN,
    HUISBAAS,
    HUISBAAS_GEDELEGEERD,
    TOTAAL_KALE_HUUR,
    TOTAAL_SERVICEKOSTEN,
    TOTAAL_FMKOSTEN,
    TOTAAL_WERKPLEK,
    TOTAAL
)
AS
    SELECT alg_locatie_code
               locatie_code,
           alg_gebouw_code
               gebouw_code,
           bd.bouwdeel,
           alg_verdieping_volgnr
               verdieping,
           alg_ruimte_nr
               ruimtenummer,
           alg_ruimte_omschrijving
               ruimteomschrijving,
           alg_srtruimte_omschrijving
               ruimtefunctie,
           alg_ruimte_bruto_vloeropp
               m2,
           alg_ruimte_getekend
               teken_m2,
           pa.prs_afdeling_naam
               huurder_nummer,
           pa.prs_afdeling_omschrijving
               afdelingsomschrijving,
           pk.prs_kostenplaats_nr
               fdc,
           ROUND (
                 (  pra.prs_ruimteafdeling_bezetting
                  * alg_ruimte_bruto_vloeropp)
               / 100,
               2)
               bezetting,
           kh.tariefkh
               tarief_kale_huur,
           sk.tariefsk
               tarief_servicekosten,
           fmk.tarieffmk
               tarief_fmkosten,
           wk.tariefwk
               werkplek_tarief,
           aw.aantwp
               aantal_werplekken,
           hb.huisbaas
               huisbaas,
           ghb.gedelegeerdehuisbaas
                Gedelegeerde_Huisbaas,
           ROUND (
                 kh.tariefkh
               * (  pra.prs_ruimteafdeling_bezetting
                  * alg_ruimte_bruto_vloeropp)
               / 100,
               2)
               totaal_kale_huur,
           ROUND (
                 sk.tariefsk
               * (  pra.prs_ruimteafdeling_bezetting
                  * alg_ruimte_bruto_vloeropp)
               / 100,
               2)
               totaal_servicekosten,
           ROUND (
                 fmk.tarieffmk
               * (  pra.prs_ruimteafdeling_bezetting
                  * alg_ruimte_bruto_vloeropp)
               / 100,
               2)
               totaal_fmkosten,
           ROUND (aw.aantwp * wk.tariefwk, 2)
               totaal_werkplek,
             COALESCE (
                 ROUND (
                       kh.tariefkh
                     * (  pra.prs_ruimteafdeling_bezetting
                        * alg_ruimte_bruto_vloeropp)
                     / 100,
                     2),
                 0)
           + COALESCE (
                 ROUND (
                       sk.tariefsk
                     * (  pra.prs_ruimteafdeling_bezetting
                        * alg_ruimte_bruto_vloeropp)
                     / 100,
                     2),
                 0)
           + COALESCE (
                 ROUND (
                       fmk.tarieffmk
                     * (  pra.prs_ruimteafdeling_bezetting
                        * alg_ruimte_bruto_vloeropp)
                     / 100,
                     2),
                 0)
           + COALESCE (ROUND (aw.aantwp * wk.tariefwk, 2), 0)
               totaal
      FROM alg_locatie                   l,
           alg_gebouw                    g,
           alg_verdieping                v,
           alg_ruimte                    r,
           alg_srtruimte                 sr,
           prs_v_aanwezigruimteafdeling  pra,
           prs_afdeling                  pa,
           prs_kostenplaats              pk,
           (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde huisbaas
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1200) hb,
           (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde gedelegeerdehuisbaas
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1240) ghb,
           (SELECT alg_onrgoed_key,
                   fac.safe_to_number (alg_onrgoedkenmerk_waarde) aantwp
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1040) aw,
           (SELECT alg_onrgoed_key,
                   fac.safe_to_number (alg_onrgoedkenmerk_waarde) tariefkh
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1041) kh,
           (SELECT alg_onrgoed_key,
                   fac.safe_to_number (alg_onrgoedkenmerk_waarde) tariefsk
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1042) sk,
           (SELECT alg_onrgoed_key,
                   fac.safe_to_number (alg_onrgoedkenmerk_waarde) tarieffmk
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1043) fmk,
           (SELECT alg_onrgoed_key,
                   fac.safe_to_number (alg_onrgoedkenmerk_waarde) tariefwk
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1044) wk,
           (SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde bouwdeel
              FROM alg_onrgoedkenmerk
             WHERE alg_kenmerk_key = 1060) bd
     WHERE     g.alg_locatie_key = l.alg_locatie_key
           AND g.alg_gebouw_key = v.alg_gebouw_key
           AND r.alg_verdieping_key = v.alg_verdieping_key
           AND sr.alg_srtruimte_key(+) = r.alg_srtruimte_key
           AND alg_ruimte_verwijder IS NULL
           AND pra.alg_ruimte_key(+) = r.alg_ruimte_key
           AND pa.prs_afdeling_key(+) = pra.prs_afdeling_key
           AND pk.prs_kostenplaats_key(+) = pa.prs_kostenplaats_key
           AND hb.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND aw.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND kh.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND sk.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND fmk.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND wk.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND bd.alg_onrgoed_key(+) = r.alg_ruimte_key
           AND ghb.alg_onrgoed_key(+) = r.alg_ruimte_key
           ;

-- HV FREEZE
CREATE OR REPLACE PROCEDURE aads_export_hv_freeze (p_applname   IN VARCHAR2,
                                                   p_applrun    IN VARCHAR2,
                                                   p_filedir    IN VARCHAR2,
                                                   p_filename   IN VARCHAR2)
AS
   v_kwartaal    VARCHAR2 (10);
   v_aantal      NUMBER;
   v_maand       NUMBER;
   v_maand2      NUMBER;
   v_opmerking   VARCHAR2 (100);
BEGIN
   BEGIN
      -- freeze wordt altijd weggeschreven onder het volgende kwartaal
      v_kwartaal :=
         TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'yyyy')
         || TRUNC( (TO_NUMBER (TO_CHAR (ADD_MONTHS (SYSDATE, 1), 'mm'))
                    + 2)
                  / 3);

      -- kijk of er al een freeze bestaat
      SELECT COUNT ( * )
        INTO v_aantal
        FROM aads_hv_freeze
       WHERE kwartaal = v_kwartaal;

      -- freeze mag alleen in maart, juni, september en december gemaakt worden.
      v_maand := TO_NUMBER (TO_CHAR (SYSDATE, 'mm'));
      -- speciaal verzoek om de eerste week in het volgende kwartaal ook nog te mogen freezen.
      v_maand2 := TO_NUMBER (TO_CHAR (SYSDATE - 7, 'mm'));

      IF MOD (v_maand, 3) <> 0 AND MOD (v_maand2, 3) <> 0
      THEN
         fac.writelog (
            p_applname,
            'E',
            'Foutmelding!: Freeze mag alleen in de maanden maart, juni, september en december gemaakt worden!',
            'Neem contact op met uw consultant.');
      ELSE
         -- verwijder eerder gemaakte freeze resultaten.
         IF v_aantal > 0
         THEN
            DELETE aads_hv_freeze
             WHERE kwartaal = v_kwartaal;

            v_opmerking := ' Vorige freeze is verwijderd.';
         END IF;

         INSERT INTO aads_hv_freeze (freeze_datum,
                                     kwartaal,
                                     locatie_code,
                                     gebouw_code,
                                     bouwdeel,
                                     verdieping,
                                     ruimtenummer,
                                     ruimteomschrijving,
                                     ruimtefunctie,
                                     m2,
                                     huurder_nummer,
                                     afdelingsomschrijving,
                                     fdc,
                                     bezetting,
                                     tarief_kale_huur,
                                     tarief_servicekosten,
                                     tarief_fmkosten,
                                     werkplek_tarief,
                                     aantal_werplekken,
                                     huisbaas,
                                     totaal_kale_huur,
                                     totaal_servicekosten,
                                     totaal_fmkosten,
                                     totaal_werkplek,
                                     totaal)
            SELECT SYSDATE,
                   v_kwartaal,
                   fclt_f_locatie_code,
                   fclt_f_gebouw_code,
                   bouwdeel,
                   verdieping,
                   ruimtenummer,
                   ruimteomschrijving,
                   fclt_f_ruimtefunctie,
                   m2,
                   fclt_f_huurder_nummer,
                   afdelingsomschrijving,
                   fclt_f_fdc,
                   bezetting,
                   tarief_kale_huur,
                   tarief_servicekosten,
                   tarief_fmkosten,
                   werkplek_tarief,
                   aantal_werplekken,
                   huisbaas,
                   totaal_kale_huur,
                   totaal_servicekosten,
                   totaal_fmkosten,
                   totaal_werkplek,
                   totaal
              FROM aads_v_rap_alg_huuradmin;

         fac.writelog (
            p_applname,
            'E',
               'Freeze voor kwartaal:'
            || v_kwartaal
            || ' op '
            || TO_CHAR (SYSDATE, 'dd-mm-yyyy')
            || ' is succesvol aangemaakt.'
            || v_opmerking,
            '');
      END IF;
   EXCEPTION
      WHEN OTHERS
      THEN
         fac.writelog (
            p_applname,
            'E',
            'Foutmelding!:' || SQLCODE || '/' || SUBSTR (SQLERRM, 1, 100),
            'Neem contact op met uw consultant.');
   END;
END;
/

-- Freeze rapportage over voorgaande freezes
CREATE OR REPLACE VIEW aads_v_rap_hv_freeze
(
   fclt_f_kwartaal,
   fclt_f_locatie_code,
   fclt_f_gebouw_code,
   bouwdeel,
   verdieping,
   ruimtenummer,
   ruimteomschrijving,
   fclt_f_ruimtefunctie,
   m2,
   fclt_f_huurder_nummer,
   fclt_f_afdelingsomschrijving,
   fclt_f_fdc,
   bezetting,
   tarief_kale_huur,
   tarief_servicekosten,
   tarief_fmkosten,
   werkplek_tarief,
   aantal_werplekken,
   huisbaas,
   totaal_kale_huur,
   totaal_servicekosten,
   totaal_fmkosten,
   totaal_werkplek,
   totaal
)
AS
SELECT kwartaal,
       locatie_code,
       gebouw_code,
       bouwdeel,
       verdieping,
       ruimtenummer,
       ruimteomschrijving,
       ruimtefunctie,
       m2,
       huurder_nummer,
       afdelingsomschrijving,
       fdc,
       bezetting,
       TO_CHAR (tarief_kale_huur, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (tarief_servicekosten, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (tarief_fmkosten, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (werkplek_tarief, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       aantal_werplekken,
       huisbaas,
       TO_CHAR (totaal_kale_huur, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (totaal_servicekosten, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (totaal_fmkosten, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (totaal_werkplek, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.'''),
       TO_CHAR (totaal, '999990D99999', 'NLS_NUMERIC_CHARACTERS = '',.''')
  FROM aads_hv_freeze;


-- Freeze rapportage over voorgaande freezes naar DWH
CREATE OR REPLACE VIEW aads_v_dwh_hv_freeze
(
   kwartaal,
   locatie_code,
   gebouw_code,
   bouwdeel,
   verdieping,
   ruimtenummer,
   ruimteomschrijving,
   ruimtefunctie,
   m2,
   huurder_nummer,
   afdelingsomschrijving,
   fdc,
   bezetting,
   tarief_kale_huur,
   tarief_servicekosten,
   tarief_fmkosten,
   werkplek_tarief,
   aantal_werplekken,
   huisbaas,
   totaal_kale_huur,
   totaal_servicekosten,
   totaal_fmkosten,
   totaal_werkplek,
   totaal
)
AS
SELECT kwartaal,
       locatie_code,
       gebouw_code,
       bouwdeel,
       verdieping,
       ruimtenummer,
       ruimteomschrijving,
       ruimtefunctie,
       m2,
       huurder_nummer,
       afdelingsomschrijving,
       fdc,
       bezetting,
       tarief_kale_huur,
       tarief_servicekosten,
       tarief_fmkosten,
       werkplek_tarief,
       aantal_werplekken,
       huisbaas,
       totaal_kale_huur,
       totaal_servicekosten,
       totaal_fmkosten,
       totaal_werkplek,
       totaal
  FROM aads_hv_freeze;

-- en maak deze view beschikbaar voor het DWH
GRANT SELECT ON aads_v_dwh_hv_freeze TO aafm;

-- Thema's voor huisbaas en gedelegeerde huisbaas.
CREATE OR REPLACE VIEW aads_v_thema_huisbaas
(
    alg_ruimte_key,
    waarde
)
AS
    SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
      FROM alg_onrgoedkenmerk ogk
     WHERE alg_kenmerk_key = 1200
       AND alg_onrgoedkenmerk_verwijder IS NULL;

CREATE OR REPLACE VIEW aads_v_thema_ged_huisbaas
(
    alg_ruimte_key,
    waarde
)
AS
    SELECT alg_onrgoed_key, alg_onrgoedkenmerk_waarde
      FROM alg_onrgoedkenmerk ogk
     WHERE alg_kenmerk_key = 1240
       AND alg_onrgoedkenmerk_verwijder IS NULL;

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