--
-- $Id$
--
-- Script containing customer specific db-configuration for Medux (MDUX)

DEFINE thisfile = 'MDUX.SQL'
DEFINE dbuser   = '^MDUX'
DEFINE custid   = 'MDUX'

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

--
-- Personen import
--

CREATE OR REPLACE PROCEDURE mdux_post_import_perslid (p_import_key IN NUMBER)
AS
BEGIN

   UPDATE fac_imp_perslid
   SET prs_afdeling_naam = prs_afdeling_naam || prs_kenmerk1
   WHERE fac_import_key = p_import_key
   AND LENGTH(prs_afdeling_naam || prs_kenmerk1) <= 10;
   -- lengte-conditie omdat afdelingsnaam max. 10 lang mag zijn. Ongeldige perslid-records worden zo op voorhand uitgesloten, en niet geupdate.

END;
/


CREATE OR REPLACE PROCEDURE mdux_import_perslid (p_import_key IN NUMBER)
AS
   oracle_err_num            NUMBER;
   oracle_err_mes            VARCHAR2 (200);
   v_errormsg                VARCHAR2 (400);
   v_errorhint               VARCHAR2 (400);
BEGIN


  v_errorhint := 'Generieke update';
  -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc

  -- Let op: afdelingcode (kolomnaam Afdnr.) is nog NIET het afdelingscode, maar het 1e gedeelte ervan.
  --         De kolom erna (Kostendrager) moet erachter worden geplakt, in AFAS zijn dat bij MDUX 2 velden, die tezamen het afdelingscode vormen.
  --         Dat gebeurt in de post_import functie, die de afdelingscode (afdnr + kostendrager) alsnog korrekt vult.
  --         Daarom gaat kostendrager (kolom 7) in kenmerkenveld 1 (positie 27).
  -- 				 Dus hier wordt afdelingscode (plaats nummer 7 in de string '0;0;0;0;0;0;6;4;3;1;' voor een deel gevuld (het moet gevuld zijn, records zonde afd.nr komen anders niet in de import tabel terecht.

  prs.import_perslid (p_import_key,
                       '0;0;0;0;0;0;6;4;3;1;' ||
                       '2;0;0;0;0;11;10;9;0;5;' ||
                       '8;12;0;0;0;0;7;0;0;0;'||
                       '0;0;0;0;0;0;0;0;0;0;'||
                       '0;0;0;0;0;0',
                       'Roepnaam;Voorletters;Voorvoegsel;Achternaam;Persnr.;Afdnr.;Kostendrager;Functie;Email;Mobile;Telefoon;Loginnaam%'
                       );
	COMMIT;

	-- Korrektie van de afdelingscode gebeurt nu...
	mdux_post_import_perslid(p_import_key);


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




CREATE OR REPLACE PROCEDURE mdux_update_perslid (
   p_import_key IN NUMBER
) IS
	-- Alle personen verwijderen die niet meer in import bestand voorkomen.
	CURSOR c_del
	IS
	    SELECT p.prs_perslid_key, p.prs_perslid_nr, pf.prs_perslid_naam_full
	      FROM fac_imp_perslid i, prs_perslid p, prs_v_perslid_fullnames_all pf
	     WHERE p.prs_perslid_nr = i.prs_perslid_nr(+)
	       AND pf.prs_perslid_key = p.prs_perslid_key
	       AND p.prs_perslid_nr IS NOT NULL
	       AND i.prs_perslid_nr IS NULL
	       AND p.prs_perslid_verwijder IS NULL
	    ORDER BY 2;

	v_count           NUMBER;

BEGIN
    -- generic update

    SELECT count(*)
      INTO v_count
      FROM fac_imp_perslid;

    IF v_count < 300
    THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Het aantal te importeren personen is te klein ('
                        || TO_CHAR (v_count) || ')',
                        'Zie Specificatie'
      );
      RETURN;
    END IF;

  -- 'NR' betekent dat op basis van personeelsNummeR wordt gematched.
  -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
  prs.update_perslid (p_import_key, 'NR', NULL);

  -- Verwijder personen die niet meer in de import voorkomen.
  FOR rec IN c_del
  LOOP
     BEGIN
       prs.delete_perslid (p_import_key, rec.prs_perslid_key);
     END;
  END LOOP;


END mdux_update_perslid;
/


------
------ BUDGET UPDATE / IMPORT prs_kostenplaasten.
------


CREATE OR REPLACE PROCEDURE mdux_import_budget (p_import_key IN NUMBER)
AS

   v_newline                       VARCHAR2 (1000);             -- Input line
   v_aanduiding                    VARCHAR2 (200);
   v_errorhint                     VARCHAR2 (1000);
   v_errormsg                      VARCHAR2 (1000);
   oracle_err_num                  NUMBER;
   oracle_err_mes                  VARCHAR2 (200);
   header_is_valid                 NUMBER := 0;
   v_ongeldig                      NUMBER (1);
   v_count_tot                     NUMBER (10);
   v_count_import                  NUMBER (10);
   v_count                         NUMBER;



   c_fielddelimitor                VARCHAR2 (1)    := ';';
   -- De importvelden:
   v_prs_kostenplaats_nr           VARCHAR2 (256);
   v_prs_kostenplaats_limiet       VARCHAR2 (256);

   v_prs_kostenplaats_bh 					 VARCHAR2 (256);
   v_prs_kostenplaatsgrp_oms       VARCHAR2 (256);


   CURSOR c1
   IS
      SELECT   *
          FROM fac_imp_file
         WHERE fac_import_key = p_import_key
      ORDER BY fac_imp_file_index;
BEGIN
	 DELETE FROM mdux_imp_kostenplaatsen;

   COMMIT;

   v_count_tot := 0;
   v_count_import := 0;

   FOR rec1 IN c1
   LOOP
      BEGIN
         v_newline := rec1.fac_imp_file_line;
         v_aanduiding := '';
         v_errorhint := 'Fout bij opvragen te importeren rij';
         v_ongeldig := 0;
         -- Lees alle veldwaarden

         -- 01, 02, 03, 04
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaats_nr);
         fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaats_limiet);
				 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaats_bh);
				 fac.imp_getfield (v_newline, c_fielddelimitor, v_prs_kostenplaatsgrp_oms);

         v_aanduiding :=
               '['
            || v_prs_kostenplaats_nr
            || '|'
            || v_prs_kostenplaats_limiet
            || '|'
            || v_prs_kostenplaats_bh
            || '|'
            || v_prs_kostenplaatsgrp_oms
            || '] ';

         -- Ik controleer of ik een geldige header heb, dat is: in de juiste kolommen
         -- de juiste kolomkop. Ik controleer daarbij ALLE kolommen!
         -- Ik negeer alles totdat ik een geldige header ben gepasseerd.
         IF (header_is_valid = 0)
         THEN
            IF  UPPER (v_prs_kostenplaats_nr) = 'KOSTENPLAATS'
                AND UPPER (v_prs_kostenplaats_limiet) = 'BUDGET'
                AND UPPER (v_prs_kostenplaats_bh) = 'BUDGETHOUDER'
                AND UPPER (v_prs_kostenplaatsgrp_oms) = 'KOSTENPLAATSGROEP'
            THEN
               header_is_valid := 1;
            END IF;
         ELSE
            v_count_tot := v_count_tot + 1;
            -- Controleer alle veldwaarden

            --
            v_errorhint := 'Ongeldige kostenplaats';
            v_prs_kostenplaats_nr := TRIM (v_prs_kostenplaats_nr);

            IF LENGTH (v_prs_kostenplaats_nr) > 30
            THEN
               v_prs_kostenplaats_nr := SUBSTR (v_prs_kostenplaats_nr, 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Kostenplaats te lang',
                                    'Kostenplaats wordt afgebroken tot ['
                                 || v_prs_kostenplaats_nr
                                 || ']'
                                );
            ELSE
               IF (v_prs_kostenplaats_nr IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                              (p_import_key,
                               'E',
                               v_aanduiding || 'Kostenplaats onbekend',
                               'Kostenplaats is verplicht; regel wordt overgeslagen!'
                              );
               END IF;
            END IF;

            IF LENGTH (v_prs_kostenplaats_limiet) > 8
            THEN
               v_prs_kostenplaats_limiet := SUBSTR (v_prs_kostenplaats_limiet, 1, 8);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Budget te lang',
                                    'Budget wordt afgebroken tot ['
                                 || v_prs_kostenplaats_limiet
                                 || ']'
                                );
            ELSE
               IF (v_prs_kostenplaats_limiet IS NULL)
               THEN
                  v_ongeldig := 1;
                  fac.imp_writelog
                              (p_import_key,
                               'E',
                               v_aanduiding || 'Budget onbekend',
                               'Budget is verplicht; regel wordt overgeslagen!'
                              );
               END IF;
            END IF;
            COMMIT;

            --
            v_errorhint := 'Ongeldige loginnaam budgethouder';
            v_prs_kostenplaats_bh := TRIM (v_prs_kostenplaats_bh);

            IF LENGTH (v_prs_kostenplaats_bh) > 30
            THEN
               v_prs_kostenplaats_bh := SUBSTR (v_prs_kostenplaats_bh, 1, 30);
               fac.imp_writelog (p_import_key,
                                 'W',
                                 v_aanduiding || 'Loginnaam van budgethouder te lang',
                                    'Loginnaam wordt afgebroken tot ['
                                 || v_prs_kostenplaats_bh
                                 || ']'
                                );
            END IF;

            --
            v_errorhint := 'Ongeldige kostenplaatsgroep';
            v_prs_kostenplaatsgrp_oms := TRIM (v_prs_kostenplaatsgrp_oms);

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


						-- Insert geformatteerde import record
            IF v_ongeldig = 0
            THEN
               BEGIN
                  v_errorhint :=
                      'Fout bij toevoegen regel aan importtabel mdux_imp_kostenplaatsen';

                   INSERT INTO mdux_imp_kostenplaatsen
                          (prs_kostenplaats_nr, prs_kostenplaats_limiet, prs_kostenplaats_bh, prs_kostenplaatsgrp_oms)
                   VALUES (v_prs_kostenplaats_nr, v_prs_kostenplaats_limiet, v_prs_kostenplaats_bh,v_prs_kostenplaatsgrp_oms);
                  COMMIT;
                  v_count_import := v_count_import + 1;
               EXCEPTION
                  WHEN OTHERS
                  THEN
                     oracle_err_num := SQLCODE;
                     oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                     v_errormsg :=
                           v_errorhint
                        || ' ORACLE (error '
                        || oracle_err_num
                        || '/'
                        || oracle_err_mes
                        || ')';
                     fac.imp_writelog
                             (p_import_key,
                              'E',
                              v_aanduiding || v_errormsg,
                              'Ingelezen regel kan niet worden weggeschreven!'
                             );
                     COMMIT;
               END;
            END IF;
         END IF;
      END;
   END LOOP;

   IF (header_is_valid = 0)
   THEN
      fac.imp_writelog (p_import_key,
                        'E',
                        'Ongeldig importbestand',
                        'Geen header of header niet volgens specificatie!'
                       );
   ELSE
      fac.imp_writelog (p_import_key,
                        'S',
                           'Budgetten: aantal ingelezen regels: '
                        || TO_CHAR (v_count_tot),
                        ''
                       );
      fac.imp_writelog (p_import_key,
                        'S',
                           'Budgetten: aantal ongeldige importregels: '
                        || TO_CHAR (v_count_tot - v_count_import),
                        ''
                       );
   END IF;
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg :=
           'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        v_errorhint
                       );
      COMMIT;
END mdux_import_budget;
/

CREATE OR REPLACE PROCEDURE mdux_update_budget (
   p_import_key IN NUMBER
)
IS

    v_aanduiding             VARCHAR2 (200);
    v_errorhint              VARCHAR2 (1000);
    v_errormsg               VARCHAR2 (1000);
    oracle_err_num           NUMBER;
    oracle_err_mes           VARCHAR2 (200);
    v_count_tot              NUMBER (10);
    v_count_error            NUMBER (10);
    v_count                  NUMBER (10);


    v_prs_kostenplaats_key   	NUMBER (10);
    v_prs_perslid_key				 	NUMBER(10);
    v_prs_kostenplaatsgrp_key NUMBER(10);

    -- Alle budgetten: dit zijn de regels waarvan de objectnaam voldoet aan de volgende codering: XX-XXTTXX, met op de X precies 1 karakter.
    CURSOR c_kpn
    IS
        SELECT *
        FROM mdux_imp_kostenplaatsen;

    BEGIN
    v_count_tot := 0;
    v_count_error := 0;


    v_aanduiding := '';


    -- Alle bugetten verwerken...
    FOR rc IN c_kpn
    LOOP
        BEGIN
            v_count_tot := v_count_tot + 1;

            v_errorhint := 'Fout bij bepalen kostenplaats [' || rc.prs_kostenplaats_nr || ']';

            SELECT prs_kostenplaats_key
              INTO v_prs_kostenplaats_key
              FROM prs_kostenplaats
             WHERE prs_kostenplaats_upper =  UPPER(rc.prs_kostenplaats_nr)
             AND prs_kostenplaats_verwijder IS NULL;


        		v_errorhint := 'Fout bij bepalen budgethouder [' || rc.prs_kostenplaats_bh || ']';
            v_prs_perslid_key := NULL;
            IF rc.prs_kostenplaats_bh IS NOT NULL
            THEN
	            SELECT prs_perslid_key
	              INTO v_prs_perslid_key
	              FROM prs_perslid
	             WHERE prs_perslid_oslogin =  UPPER(rc.prs_kostenplaats_bh)
	             AND prs_perslid_verwijder IS NULL;
        		END IF;

            v_errorhint := 'Fout bij bepalen kostenplaatsgroep [' || rc.prs_kostenplaatsgrp_oms || ']';
            v_prs_kostenplaatsgrp_key := NULL;
            IF rc.prs_kostenplaatsgrp_oms IS NOT NULL
            THEN
	              SELECT prs_kostenplaatsgrp_key
	              INTO v_prs_kostenplaatsgrp_key
	              FROM prs_kostenplaatsgrp
	              WHERE UPPER(prs_kostenplaatsgrp_oms) =  UPPER(rc.prs_kostenplaatsgrp_oms);
        		END IF;


        		v_errorhint := 'Fout bij update budget bij kostenplaats [' || rc.prs_kostenplaats_nr || ']';

            UPDATE prs_kostenplaats
            SET prs_kostenplaats_limiet = rc.prs_kostenplaats_limiet,
            prs_perslid_key = v_prs_perslid_key,
            prs_kostenplaatsgrp_key = v_prs_kostenplaatsgrp_key
            WHERE prs_kostenplaats_key = v_prs_kostenplaats_key;

            COMMIT;

        EXCEPTION
        WHEN OTHERS
            THEN
               v_count_error := v_count_error + 1;
               oracle_err_num := SQLCODE;
               oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
               v_errormsg :=
                     'OTHERS (error '
                  || oracle_err_num
                  || '/'
                  || oracle_err_mes
                  || ')';
               fac.imp_writelog (p_import_key,
                                 'E',
                                 v_aanduiding || v_errormsg,
                                 v_errorhint
                                );
               COMMIT;
        END;
    END LOOP;




    fac.imp_writelog (p_import_key,
                    'S',
                       'Budget: verwerkte regels zonder foutmelding: '
                    || TO_CHAR (v_count_tot - v_count_error),
                    ''
                   );
    fac.imp_writelog (p_import_key,
                    'S',
                       'Budget: verwerkte regels met foutmelding: '
                    || TO_CHAR (v_count_error),
                    ''
                   );
    COMMIT;


END mdux_update_budget;
/



------
------ FACTUURIMPORT / KOPPELING NAVISION (roundtrip, dit is deel I: de import van facturen uit Navision)
------


CREATE OR REPLACE PROCEDURE mdux_post_fin_factuur_navision (p_import_key IN NUMBER)
AS
BEGIN
		UPDATE fac_imp_factuur
		SET ordernr = SUBSTR(ordernr,4)
		WHERE UPPER(ordernr) LIKE 'FCC%'
		AND fac_import_key = p_import_key;


END;
/



CREATE OR REPLACE PROCEDURE mdux_import_fin_factuur_nav (p_import_key IN NUMBER)
AS
    v_seq_of_columns VARCHAR(50);
BEGIN

--In de XSL: leveranciernr(1);factuurnr(2);factuurdatum(3);opdrachtnr(4);omschrijving(5);bedrag(6);btwperc(7);document(8);navision_nr(9)
-- Leveranciernummer doen we nog ff niet.

--hulp voor pos      :  '1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;8;9;0;1;2'
    v_seq_of_columns := '1;2;3;4;0;0;5;0;6;0;7;8;0;0;0;9;0;0;0;0;0;0';

      -- Variabelelijst
    -- v_leveranciernr: 1
    -- v_factuurnr: 2            (VERPLICHT, anders zet Facilitor '-' in factuurnr, en is status van factuur "Incompleet")
    -- v_factuurdatum: 3
    -- v_ordernr: 4              (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_locatie: 5
    -- v_afleverdatum: 6
    -- v_omschrijving: 7
    -- v_aantal: 8
    -- v_kostprijs: 9            (VERPLICHT, anders is status van factuur "Incompleet")
    -- v_btw_bedrag: 10          (VERPLICHT, of anders veld 11, anders is status van factuur "Incompleet")
    -- v_btw: 11                 (VERPLICHT, of anders veld 10, anders is status van factuur "Incompleet")
    -- v_docid: 12
    -- v_debiteur_nr: 13
    -- v_opmerking: 14
    -- v_btw_verlegd: 15         (VERPLICHT, Ja/Nee/<leeg> waarbij leeg gelijk is aan Nee. Andere waarden leidt tot "Incompleet")
    -- v_kenmerk1: 16            (AX opdrachtnummer: IONRxxxx)
    -- v_kenmerk2: 17            (GLN Leverancier(snummer)
    -- v_kenmerk3: 18						 (IBAN)
    -- v_kenmerk4: 19            (G-IBAN - geblokkeerde rekening)
    -- v_kenmerk5: 20						 (G-Amount - bedrag geblokeerde rekening)
    -- v_boekmaand: 21
    -- v_kenmerk6: 22						 (Factuuronderwerp)
    -- v_kenmerk7: 23
    -- v_kenmerk8: 24
    -- v_kenmerk9: 25
    -- v_kenmerk10: 26
		-- v_kenmerk11: 27
		-- v_kenmerk12: 28

    fac_import_factuur_body(p_import_key, v_seq_of_columns);
    mdux_post_fin_factuur_navision (p_import_key);
END;
/

CREATE OR REPLACE PROCEDURE mdux_post_update_factuur_nav (p_import_key IN NUMBER)
AS

    CURSOR cfactuur_kenmerk_navision_nr
    IS
        SELECT DISTINCT fin_factuur_key, kenmerk1, factuurnr, fac_imp_file_index
        FROM fac_imp_factuur
        WHERE fin_factuur_key IS NOT NULL
        AND fac_import_key = p_import_key
        AND kenmerk1 IS NOT NULL;

    -- Key van het kenmerk 'navision nummer ' bij de factuur
    c_kenmerk_key_navision_nr NUMBER(10) := 2;



BEGIN

   -- Het externe opdrachtnr (AX) wordt in kenmerk 1 van fac_imp_factuur gezet, dus alle fac_imp_factuur langsgaan en verwerken

   FOR rc IN cfactuur_kenmerk_navision_nr
   LOOP
        BEGIN
            INSERT INTO fin_kenmerkfactuur (fin_factuur_key, fin_kenmerk_key, fin_kenmerkfactuur_waarde)
            VALUES (rc.fin_factuur_key, c_kenmerk_key_navision_nr, rc.kenmerk1);
        EXCEPTION
            WHEN OTHERS
                THEN
                fac.imp_writelog (p_import_key,
                                'W',
                                'Van factuur met key ' || rc.fin_factuur_key || ' is de externe factuurnr (Navision)niet bewaard (regel ' || rc.fac_imp_file_index || ')',
                                'Factuurnr:' || rc.factuurnr  || ' / Navision: ' || rc.kenmerk1
                                );
        END;
   END LOOP;
END;
/


CREATE OR REPLACE PROCEDURE mdux_update_fin_factuur_nav (p_import_key IN NUMBER)
AS
BEGIN
   -- Standaard FCLT verwerk import facturen
	fac_update_factuur (p_import_key);
	mdux_post_update_factuur_nav(p_import_key);
END;
/




------
------ FACTUUREXPORT / KOPPELING NAVISION
------

--------------------------------------------------
-- NAVISION: Factuurexport


-- View waarin bij de factuur met fin_factuur_key het bijbehorende externe factuurnr uit Navision.
CREATE OR REPLACE VIEW mdux_v_factuur_navision_nr (fin_factuur_key, fin_factuur_navision_nr)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 2;

-- View waarin bij de factuur met fin_factuur_key het bijbehorende kenmerk 'afgewezen' wordt bepaald.
CREATE OR REPLACE VIEW mdux_v_factuur_afgewezen (fin_factuur_key, fin_factuur_afgewezen)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 3;

-- View waarin bij de factuur met fin_factuur_key het bijbehorende kenmerk 'incompleet wordt bepaald.
CREATE OR REPLACE VIEW mdux_v_factuur_incompleet (fin_factuur_key, fin_factuur_incompleet)
AS
SELECT kf.fin_factuur_key, kf.fin_kenmerkfactuur_waarde
FROM fin_kenmerkfactuur kf
WHERE kf.fin_kenmerkfactuur_verwijder IS NULL
AND fin_kenmerk_key = 100;

-- view tbv export naar financieel systeem Navision
CREATE OR REPLACE VIEW mdux_v_factuur_mldcnt_gegevens (
   fin_factuur_key,
   opdracht_id,
   fin_factuur_datum,
   fin_factuur_boekmaand,
   fin_factuur_nr,
   fin_factuur_navision_nr,
   fin_factuur_totaal,
   fin_factuur_totaal_btw,
   fin_factuur_totaal_inclbtw,
   prs_bedrijf_key,
   prs_leverancier_nr,
   fin_factuurregel_totaal,
   fin_factuurregel_btw,
   fin_factuurregel_totaal_incbtw,
   fin_factuurregel_btw_perc,
   fin_btwtabelwaarde_btwcode,
   fin_factuurregel_nr,
   fin_factuurregel_omschrijving,
   fin_factuur_debiteur_nr,
   project_nummer,
   prs_kostensoort_oms,
   prs_kostensoort_doorbelasten,
   prs_kostenplaats_nr,
   bes_opdr_key,
   mld_opdr_key,
   cnt_contract_key,
   fin_factuur_statuses_key
   )
AS
   SELECT DISTINCT f.fin_factuur_key,
          COALESCE (TO_CHAR (cnt_contract_nummer),
                    (SELECT    sd.ins_srtdiscipline_prefix
                            || m.mld_melding_key
                            || '/'
                            || o.mld_opdr_bedrijfopdr_volgnr
                     FROM mld_melding m,
                          mld_stdmelding std,
                          ins_tab_discipline d,
                          ins_srtdiscipline sd
                     WHERE m.mld_melding_key = o.mld_melding_key
                           AND m.mld_stdmelding_key = std.mld_stdmelding_key
                           AND std.mld_ins_discipline_key = d.ins_discipline_key
                           AND d.ins_srtdiscipline_key =
                                 sd.ins_srtdiscipline_key)
          )
             opdracht_id,
          f.fin_factuur_datum,
          f.fin_factuur_boekmaand,
          f.fin_factuur_nr,
          nav.fin_factuur_navision_nr,
          f.fin_factuur_totaal,
          f.fin_factuur_totaal_btw,
           CASE
            	WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0
            	THEN LPAD(TO_CHAR(100 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2)), 10, '0') || '-'
            	ELSE LPAD(TO_CHAR(100 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),2)), 10, '0') || '+'
          END fin_factuur_totaal_inclbtw,
          COALESCE (b_c.prs_bedrijf_key, b_o.prs_bedrijf_key) prs_bedrijf_key,
          COALESCE (b_c.prs_leverancier_nr, b_o.prs_leverancier_nr) prs_leverancier_nr,
          fr.fin_factuurregel_totaal,
          fr.fin_factuurregel_btw,
          CASE
            	WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0
            	THEN LPAD(TO_CHAR(100 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2)), 10, '0') || LPAD('0',10,'0')
            	ELSE LPAD('0',10,'0') || LPAD(TO_CHAR(100 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),2)), 10, '0')
          END fin_factuurregel_totaal_incbtw,
          btw.fin_btwtabelwaarde_perc,
          btw.fin_btwtabelwaarde_code,
          fr.fin_factuurregel_nr,
          fr.fin_factuurregel_omschrijving,
          f.fin_factuur_debiteur_nr,
          NULL projectnummer,
          COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
          DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
          COALESCE (kp_c.prs_kostenplaats_nr, kp_o.prs_kostenplaats_nr) prs_kostenplaats_nr,
          NULL bes_opdr_key,
          o.mld_opdr_key,
          c.cnt_contract_key,
          f.fin_factuur_statuses_key
   FROM fin_factuur f,
   			mdux_v_factuur_navision_nr nav,
        fin_factuurregel fr,
        fin_btwtabelwaarde btw,
        mld_opdr o,
        mld_typeopdr ot,
        cnt_contract c,
        prs_bedrijf b_o,
        prs_bedrijf b_c,
        prs_kostensoort ks,
        prs_kostensoort ks_regel,
        prs_kostenplaats kp_c,
        prs_kostenplaats kp_o
   WHERE f.fin_factuur_key = fr.fin_factuur_key
   AND f.fin_factuur_verwijder is null
   AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
   AND f.bes_bestelopdr_key is null
   AND f.mld_opdr_key = o.mld_opdr_key(+)
   AND o.prs_kostenplaats_key = kp_o.prs_kostenplaats_key (+)
   AND o.mld_typeopdr_key = ot.mld_typeopdr_key(+)
   AND f.cnt_contract_key = c.cnt_contract_key(+)
   AND o.mld_uitvoerende_keys = b_o.prs_bedrijf_key(+)
   AND c.cnt_prs_bedrijf_key = b_c.prs_bedrijf_key(+)
   AND c.prs_kostenplaats_key = kp_c.prs_kostenplaats_key (+)
   AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
   AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
   AND f.fin_factuur_key = nav.fin_factuur_key(+);


CREATE OR REPLACE VIEW MDUX_V_FACTUUR_BES_GEGEVENS (
   fin_factuur_key,
   opdracht_id,
   fin_factuur_datum,
   fin_factuur_boekmaand,
   fin_factuur_nr,
   fin_factuur_navision_nr,
   fin_factuur_totaal,
   fin_factuur_totaal_btw,
   fin_factuur_totaal_inclbtw,
   prs_bedrijf_key,
   prs_leverancier_nr,
   fin_factuurregel_totaal,
   fin_factuurregel_btw,
   fin_factuurregel_totaal_incbtw,
   fin_factuurregel_btw_perc,
   fin_btwtabelwaarde_btwcode,
   fin_factuurregel_nr,
   fin_factuurregel_omschrijving,
   fin_factuur_debiteur_nr,
   project_nummer,
   prs_kostensoort_oms,
   prs_kostensoort_doorbelasten,
   prs_kostenplaats_nr,
   bes_opdr_key,
   mld_opdr_key,
   cnt_contract_key,
   fin_factuur_statuses_key
   )
AS
   SELECT DISTINCT f.fin_factuur_key,
          TO_CHAR (bo.bes_bestelopdr_id) opdracht_id,
          f.fin_factuur_datum,
          f.fin_factuur_boekmaand,
          f.fin_factuur_nr,
          nav.fin_factuur_navision_nr,
          f.fin_factuur_totaal,
          f.fin_factuur_totaal_btw,
          CASE
            	WHEN ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2) > 0
            	THEN LPAD(TO_CHAR(100 * ROUND(f.fin_factuur_totaal + f.fin_factuur_totaal_btw,2)), 10, '0') || '-'
            	ELSE LPAD(TO_CHAR(100 * ROUND(ABS(f.fin_factuur_totaal + f.fin_factuur_totaal_btw),2)), 10, '0') || '+'
          END fin_factuur_totaal_inclbtw,
          b.prs_bedrijf_key,
          b.prs_leverancier_nr,
          fr.fin_factuurregel_totaal,
          fr.fin_factuurregel_btw,
          CASE
            	WHEN ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2) > 0
            	THEN LPAD(TO_CHAR(100 * ROUND(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw,2)), 10, '0') || LPAD('0',10,'0')
            	ELSE LPAD('0',10,'0') || LPAD(TO_CHAR(100 * ROUND(ABS(fr.fin_factuurregel_totaal + fr.fin_factuurregel_btw),2)), 10, '0')
          END fin_factuurregel_totaal_incbtw,
          btw.fin_btwtabelwaarde_perc,
          btw.fin_btwtabelwaarde_code,
          fr.fin_factuurregel_nr,
          fr.fin_factuurregel_omschrijving,
          f.fin_factuur_debiteur_nr,
          NULL projectnummer,
          COALESCE(ks_regel.prs_kostensoort_oms,ks.prs_kostensoort_oms),
          DECODE(ks_regel.prs_kostensoort_oms, NULL, ks.prs_kostensoort_doorbelasten, ks_regel.prs_kostensoort_doorbelasten),
          kp.prs_kostenplaats_nr,
          bo.bes_bestelopdr_key bes_opdr_key,
          NULL mld_opdr_key,
          NULL cnt_contract_key,
          f.fin_factuur_statuses_key
		 FROM  bes_bestelopdr bo,
           prs_bedrijf b,
           bes_bestelling bes,
           bes_bestelopdr_item boi,
           bes_bestelling_item bi,
           fin_factuur f,
           mdux_v_factuur_navision_nr nav,
           fin_factuurregel fr,
           fin_btwtabelwaarde btw,
           prs_kostensoort ks,
           prs_kostensoort ks_regel,
           prs_kostenplaats kp
      WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
        AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
        AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
        AND bes.bes_bestelling_key = bi.bes_bestelling_key
        AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key
        AND f.prs_kostensoort_key = ks.prs_kostensoort_key(+)
        AND fr.prs_kostensoort_key = ks_regel.prs_kostensoort_key(+)
        AND f.bes_bestelopdr_key = bo.bes_bestelopdr_key
        AND f.fin_factuur_verwijder is null
        AND f.fin_factuur_key = fr.fin_factuur_key
        AND fr.fin_btwtabelwaarde_key = btw.fin_btwtabelwaarde_key
        AND f.fin_factuur_key = nav.fin_factuur_key(+);


CREATE OR REPLACE VIEW mdux_v_factuur_geg
AS
SELECT * from mdux_v_factuur_mldcnt_gegevens
UNION
SELECT * from mdux_v_factuur_bes_gegevens;


-- Alle facturen die of akkoord of afgewezen zijn, gaan terug naar Navision.
-- MDUX#55136: ook facturen met de status incompleet gaan terug naar Navision
CREATE OR REPLACE VIEW mdux_v_factuur_geg_2_navision
AS
SELECT * from mdux_v_factuur_mldcnt_gegevens
WHERE fin_factuur_statuses_key IN (1,6,3)
UNION
SELECT * from mdux_v_factuur_bes_gegevens
WHERE fin_factuur_statuses_key IN (1,6,3);



CREATE OR REPLACE VIEW mdux_v_exp_navision_body
(result, result_order)
AS
SELECT  '<factuur><navision_nr>' || fin_factuur_navision_nr || '</navision_nr><akkoord>' ||
			  	DECODE(fin_factuur_statuses_key, 1, '0','1') || '</akkoord></factuur>'
   			, fin_factuur_key
FROM mdux_v_factuur_geg_2_navision;


CREATE OR REPLACE VIEW mdux_v_export_navision (
   result,
   result_order
   )
AS
SELECT '<xml>',0 FROM DUAL
UNION
SELECT result, result_order FROM mdux_v_exp_navision_body
UNION
SELECT '</xml>',99999999999999999999 FROM DUAL;

CREATE OR REPLACE PROCEDURE mdux_export_navision (p_applname   IN VARCHAR2,
                                                  p_applrun    IN VARCHAR2,
                                                  p_filedir    IN VARCHAR2,
                                                  p_filename   IN VARCHAR2)
AS
   -- In cursor cfactuur alle facturen die worden geexporteerd...
   CURSOR cfactuur
   IS
        SELECT fin_factuur_key, fin_factuur_statuses_key
          FROM mdux_v_factuur_geg_2_navision
      GROUP BY fin_factuur_key, fin_factuur_statuses_key;

   c_kenmerk_key_afgewezen    NUMBER (10) := 3;
   c_kenmerk_key_incompleet   NUMBER (10) := 100;
   v_count                    NUMBER (10);
BEGIN
   -- DE EXPORT IS OP BASIS VAN EEN VIEW GEREALISEERD, WAARNA NU ALS LAATSTE STAP NOG WAT ADMINISTRATIE VOLGT...
   FOR cfact IN cfactuur
   LOOP
      -- Zowel de factuur in tracking zetten als de status op verwerkt (=7) zetten
      IF cfact.fin_factuur_statuses_key = 6
      THEN
         -- Status akkoord kan op reguliere wijze naar verwerkt...
         fin.setfactuurstatus (cfact.fin_factuur_key, 7, NULL);
      ELSE
         IF cfact.fin_factuur_statuses_key = 1
         THEN
            -- Status afgewezen kan NIET op reguliere wijze naar verwerkt... (zie call MDUX#31142)
            SELECT COUNT ( * )
              INTO v_count
              FROM mdux_v_factuur_afgewezen
             WHERE fin_factuur_key = cfact.fin_factuur_key;

            IF v_count = 1
            THEN
               UPDATE fin_kenmerkfactuur
                  SET fin_kenmerkfactuur_waarde = '1'
                WHERE fin_factuur_key = cfact.fin_factuur_key
                      AND fin_kenmerk_key = c_kenmerk_key_afgewezen;
            ELSE
               INSERT INTO fin_kenmerkfactuur (fin_factuur_key,
                                               fin_kenmerk_key,
                                               fin_kenmerkfactuur_waarde)
                   VALUES (cfact.fin_factuur_key,
                           c_kenmerk_key_afgewezen,
                           '1');
            END IF;

            fac.trackaction ('FINVER',
                             cfact.fin_factuur_key,
                             NULL,
                             NULL,
                             'Factuur van afgewezen naar verwerkt');

            UPDATE fin_factuur
               SET fin_factuur_statuses_key = 7
             WHERE fin_factuur_key = cfact.fin_factuur_key;
             
         ELSE
            IF cfact.fin_factuur_statuses_key = 3
            THEN
               -- Status incompleet kan NIET op reguliere wijze naar verwerkt... (zie call MDUX#55136)
               SELECT COUNT ( * )
                 INTO v_count
                 FROM mdux_v_factuur_incompleet
                WHERE fin_factuur_key = cfact.fin_factuur_key;

               IF v_count = 1
               THEN
                  UPDATE fin_kenmerkfactuur
                     SET fin_kenmerkfactuur_waarde = '1'
                   WHERE fin_factuur_key = cfact.fin_factuur_key
                         AND fin_kenmerk_key = c_kenmerk_key_incompleet;
               ELSE
                  INSERT INTO fin_kenmerkfactuur (fin_factuur_key,
                                                  fin_kenmerk_key,
                                                  fin_kenmerkfactuur_waarde)
                      VALUES (cfact.fin_factuur_key,
                              c_kenmerk_key_incompleet,
                              '1');
               END IF;

               fac.trackaction ('FINVER',
                                cfact.fin_factuur_key,
                                NULL,
                                NULL,
                                'Factuur van incompleet naar verwerkt');

               UPDATE fin_factuur
                  SET fin_factuur_statuses_key = 7
                WHERE fin_factuur_key = cfact.fin_factuur_key;
            END IF;
         END IF;
      END IF;
   END LOOP;
END;
/


CREATE OR REPLACE VIEW mdux_v_export_undo_navision (
   result,
   result_order
   )
AS
SELECT REPLACE(REPLACE(f.fin_factuur_key
       || ';'
       || opdracht_id
       || ';'
       || fin_factuur_datum
       || ';'
       || fin_factuur_nr
       || ';'
       || prs_bedrijf_key
       || ';'
       || fin_factuurregel_totaal
       || ';'
       || fin_factuurregel_btw
       || ';'
       || fin_factuurregel_nr
       || ';'
       || fin_factuur_debiteur_nr
       || ';'
       || project_nummer
       || ';'
       || prs_kostensoort_oms
       || ';'
       || bes_opdr_key
       || ';'
       || mld_opdr_key
       || ';'
       || cnt_contract_key
      ,CHR (13), ''), CHR (10), '<ret>'), f.fin_factuur_key
 FROM mdux_v_factuur_geg f, fac_tracking t, fac_srtnotificatie sn
 WHERE sn.fac_srtnotificatie_code ='FINVER'
 AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
 AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
                              FROM fac_tracking t1
                              WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
 AND f.fin_factuur_key = t.fac_tracking_refkey
 AND f.fin_factuur_statuses_key = 7;



CREATE OR REPLACE PROCEDURE mdux_select_undo_navision (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2
)
AS
  v_errormsg       VARCHAR (200);
BEGIN
  v_errormsg := 'Geen akties';

END;
/

-- Procedure om alle geexporteerde facturen naar status akkoord terug te zetten.
CREATE OR REPLACE PROCEDURE mdux_export_undo_navision (
   p_applname   IN   VARCHAR2,
   p_applrun    IN   VARCHAR2,
   p_filedir    IN   VARCHAR2,
   p_filename   IN   VARCHAR2
)
AS
   CURSOR cfactuur
    IS
      SELECT DISTINCT f.fin_factuur_key, t.fac_tracking_datum
      FROM fac_tracking t, fac_srtnotificatie sn, fin_factuur f
      WHERE sn.fac_srtnotificatie_code ='FINVER'
      AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
      AND t.fac_tracking_datum >= (SELECT MAX(t1.fac_tracking_datum) - (1 / (24*60))
                                   FROM fac_tracking t1
                                   WHERE t1.fac_srtnotificatie_key = t.fac_srtnotificatie_key)
      AND f.fin_factuur_key = t.fac_tracking_refkey
      AND fin_factuur_statuses_key = 7;

   v_fac_tracking_datum_akkoord DATE;
   v_fac_tracking_datum_afgewezen DATE;
   v_errormsg       VARCHAR (200);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);

   c_kenmerk_key_afgewezen NUMBER(10) := 3;

BEGIN
  v_errormsg := 'Geen akties';

  FOR cfact IN cfactuur
  LOOP

      SELECT MAX(t.fac_tracking_datum)
   	  INTO v_fac_tracking_datum_akkoord
      FROM fac_tracking t, fin_factuur f, fac_srtnotificatie sn
      WHERE  f.fin_factuur_key = t.fac_tracking_refkey
      AND f.fin_factuur_key = cfact.fin_factuur_key
      AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
      AND  sn.fac_srtnotificatie_code = 'FINFOK';

      SELECT MAX(t.fac_tracking_datum)
      INTO v_fac_tracking_datum_afgewezen
      FROM fac_tracking t, fin_factuur f, fac_srtnotificatie sn
      WHERE  f.fin_factuur_key = t.fac_tracking_refkey
      AND f.fin_factuur_key = cfact.fin_factuur_key
      AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
      AND  sn.fac_srtnotificatie_code = 'FINFNO';

      IF v_fac_tracking_datum_afgewezen IS NULL
      THEN IF v_fac_tracking_datum_akkoord IS NOT NULL
      		 THEN
	      		 	-- Factuur was oorspronkelijk akkoord, DUS weer terug op akkoord zetten.

	      			-- Eerst de factuur in tracking zetten...
	      			-- Omdat van 7 naar 6 niet mag/geoorloofd is, lukt het niet via
	      			-- de reguliere functie fin.setfactuurstatus (cfact.fin_factuur_key, 6, NULL);

				      -- Dan maar zelf en custom-made:
				      fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
				      UPDATE fin_factuur
				      SET fin_factuur_statuses_key = 6
				      WHERE fin_factuur_key = cfact.fin_factuur_key;
					END IF;
					-- Als beiden null zijn, dan GEEN actie (deze situatie zou niet voor mogen komen)
			ELSE
					 IF v_fac_tracking_datum_akkoord IS NOT NULL
      		 THEN
	      		 	-- Factuur had kennelijk beide statussen, dus akkoord en afgewezen.
	      		 	-- Het gaat er nu om wat de laatste status van die 2 was, dus ff vergelijken...
	      		 	IF v_fac_tracking_datum_akkoord > v_fac_tracking_datum_afgewezen
	      		 	THEN
	      		 			-- Factuur was oorspronkelijk akkoord, DUS weer terug op akkoord zetten.
	      		 			fac.trackaction ('FINFOK', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
						      UPDATE fin_factuur
						      SET fin_factuur_statuses_key = 6
						      WHERE fin_factuur_key = cfact.fin_factuur_key;
						  ELSE
						  	  -- Factuur was oorspronkelijk afgewezen, DUS weer terug op afgewezen zetten.
	      		 			fac.trackaction ('FINFNO', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
						      UPDATE fin_factuur
						      SET fin_factuur_statuses_key = 1
						      WHERE fin_factuur_key = cfact.fin_factuur_key;

						      DELETE FROM fin_kenmerkfactuur
						      WHERE fin_factuur_key = cfact.fin_factuur_key
	      					AND fin_kenmerk_key = c_kenmerk_key_afgewezen;

	      		 	END IF;
	      	ELSE
	      				-- Factuur was oorspronkelijk afgewezen, DUS weer terug op afgewezen zetten.
	      		 	  fac.trackaction ('FINFNO', cfact.fin_factuur_key, NULL, NULL, 'Factuur uit archief teruggezet');
						    UPDATE fin_factuur
						    SET fin_factuur_statuses_key = 1
						    WHERE fin_factuur_key = cfact.fin_factuur_key;

						    DELETE FROM fin_kenmerkfactuur
					      WHERE fin_factuur_key = cfact.fin_factuur_key
      					AND fin_kenmerk_key = c_kenmerk_key_afgewezen;

					END IF;
			END IF;
  END LOOP;
END;
/




-- Mdux stuurt geen LUC mee, afgesproken dat wanneer een externe bedrijf een url (p_bedrijfadres_url) heeft,
-- dan het bedrijf een L (Leverancier) is waar in Facilitor (bij vrije bestelaanvragen) uit gekozen kan worden....
-- Daarom in deze post-import alle bedrijven in de import met p_import_key een L markeren die een technisch adres hebben...
CREATE OR REPLACE PROCEDURE mdux_post_import_bedrijf (p_import_key IN NUMBER)
AS
BEGIN

		UPDATE fac_imp_ext_bedrijf
		SET prs_bedrijf_leverancier = 1
   		WHERE prs_bedrijf_order_adres IS NOT NULL
    		AND prs_leverancier_nr NOT IN (10846,58977) --MDUX#52455: Uitzondering voor Staples en Zalsman BV
		;

    -- MDUX#32101: Alle leveranciers als "uitvoerende" markeren, deze gelijkgetrokken aan "Leverancier" (had ook in 1 query gekund).
    UPDATE fac_imp_ext_bedrijf
		SET prs_bedrijf_uitvoerende = 1
    WHERE prs_bedrijf_order_adres IS NOT NULL;

    -- MDUX#37363: Alle leveranciers als potentieel "contractant" markeren
    UPDATE fac_imp_ext_bedrijf
		SET prs_bedrijf_contract = 1;

END;
/


CREATE OR REPLACE PROCEDURE mdux_import_bedrijf (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000);
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
   v_seq_of_columns VARCHAR(255);
BEGIN
		-- hulpje            1;2;3;4;5;6;7;8;9;0;1;2;3;4;5;6;7;18;9;0;1;2;3;4;5;6;27;8;9;0;1;2;3;4
	 	v_seq_of_columns := '2;1;3;4;5;6;0;0;0;0;7;8;11;0;0;0;0;9;0;0;0;0;0;0;0;0;10;0;0;0;0;0;0;0';
	 	fac_import_bedrijf_body (p_import_key, v_seq_of_columns, 1);
	 	-- Mdux stuurt geen LUC mee, afgesproken dat wanneer een externe bedrijf een url (p_bedrijfadres_url) heeft,
	 	-- dan het bedrijf een L (Leverancier) is waar in Facilitor (bij vrije bestelaanvragen) uit gekozen kan worden....
	 	mdux_post_import_bedrijf (p_import_key);

EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        'Inleesproces relaties afgebroken!');
END mdux_import_bedrijf;
/



-- Werkt de technische adres(sen) van bedrijf 'p_bedrijf_key' bij.
-- Parameters:
-- 	p_bedrijf_key (id van prs_bedrijf)
-- 	p_bedrijfadres_url (technisch adres, b.v. mailadres. URL, FTP, ..)
--	p_bedrijf_broc (1 of NULL, indien 1 dan is bedrijf als zodanig geregistreerd als p_kanaal (volgende param).
-- 			-- Dus b.v. 1 en p_kanaal = 'B', dan is bedrijf een leverancier in Facilitor
--			-- En b.v. NULL en p_kanaal = 'O', dan is bedrijf geen uitvoerende in Facilitor.
-- 	p_kanaal is "B" (bestelopdracht), "O" (meldingpdracht) of "C" (contract)

CREATE OR REPLACE PROCEDURE mdux_delupsert_bedrijfadres (p_bedrijf_key IN NUMBER, p_bedrijfadres_url IN VARCHAR2, p_bedrijfadres_xsl IN VARCHAR2, p_bedrijf_broc IN NUMBER, p_kanaal IN VARCHAR)
AS
v_count  NUMBER (10);
v_bedrijfadres_url prs_bedrijfadres.prs_bedrijfadres_url%TYPE;
BEGIN
 	-- In beide gevallen (insert of update) moet het Technisch adres worden bijgewerkt.
 	-- Als kolom p_bedrijfadres_url gevuld is (met een technisch adres), dan zal deze ook geinsert of bijgewerkt moeten worden als kanaal "p_kanaal",
 	-- en wordt deze relatie een "L" (Leverancier).
 	-- Indien de kolom p_bedrijfadres_url niet (meer) gevuld is, en het technisich adres met "broc"-kanaal bestaat, dan wordt deze verwijderd.
 	-- en wordt deze relatie niet langer een "L" (Leverancier).

 	SELECT COUNT (*)
	INTO v_count
	FROM prs_bedrijfadres
	WHERE prs_bedrijf_key = p_bedrijf_key
	AND prs_bedrijfadres_type = p_kanaal;

	v_bedrijfadres_url := TRIM(p_bedrijfadres_url);
	IF v_bedrijfadres_url IS NOT NULL
 	THEN
 			-- We doen een soort can correctieslagje, door ff de prefix mailto: ervoor zetten als die dat nog niet heeft er er een @ in dit veld aanwezig is
 			-- NB:  @ betekent hier maar eens dat het een mailadres betreft en geen URL. O ja? Ja, laten we daar maar 'ns van uitgaan....

 			IF SUBSTR(v_bedrijfadres_url, 1, 7) <> 'mailto:' AND INSTR(v_bedrijfadres_url,'@') > 0
			THEN
				v_bedrijfadres_url := 'mailto:' || v_bedrijfadres_url;
			END IF;

 			-- Dit externe bedrijf heeft een technisch adres in het BRONsysteem!
 			IF v_count = 0
  		THEN
  			-- Bedrijf heeft nog geen technisch adres in Facilitor, alleen aanmaken indien 'p_bedrijf_broc' = 1 (zodat bij juiste kanaal wordt aangemaakt).
  			IF p_bedrijf_broc = 1
  			THEN
  				INSERT INTO prs_bedrijfadres( prs_bedrijf_key, prs_bedrijfadres_type, prs_bedrijfadres_url , prs_bedrijfadres_xsl)
       		VALUES (p_bedrijf_key, p_kanaal, v_bedrijfadres_url, p_bedrijfadres_xsl);
       	END IF;
 		  ELSE
 		  	-- Bedrijf heeft al een technisch adres voor dit kanaal p_kanaal, dus updaten als 'p_bedrijf_broc' = 1 (zodat bij juiste kanaal wordt ge-update), en anders verwijderen.
 		  	IF p_bedrijf_broc = 1
 		  	THEN
 		  		-- Bijwerken van technische adres van dit bedrijf, NIET! de stylesheet, die wordt namelijk in Facilitor beheerd!!!
	 		  	UPDATE prs_bedrijfadres
	 		  	SET prs_bedrijfadres_url = v_bedrijfadres_url
	 		  	WHERE prs_bedrijf_key = p_bedrijf_key
    			AND prs_bedrijfadres_type = p_kanaal;
    		ELSE
    			-- Verwijderen van technische adres van dit bedrijf bij het kanaal p_kanaal, omdat het geen leverancier/uitvoerende/contractant meer is!
    			DELETE prs_bedrijfadres
    			WHERE prs_bedrijf_key = p_bedrijf_key
    			AND prs_bedrijfadres_type = p_kanaal;
				END IF;
  		END IF;
 	ELSE
 			-- Dit externe bedrijf heeft geen technisch adres (bij kanaal bestelopdrachten) in RBT geregistreerd
 			-- Als die in Facilitor er 1 heeft, dan wordt deze geleegd (ongeacht p_kanaal), dus gewoon altijd verwijderen (want die heeft dus GEEN technisch adres).
 			IF v_count > 0
 			THEN
 					DELETE prs_bedrijfadres
 		  		WHERE prs_bedrijf_key = p_bedrijf_key
  				AND prs_bedrijfadres_type = p_kanaal;
	 		END IF;
 	END IF; -- v_bedrijfadres_url IS NOT NULL
 	COMMIT;
END;
/

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


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


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


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

            v_errorhint := 'Fout bepalen bedrijf';

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

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

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

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

                  v_errorhint := 'Fout bijwerken bedrijf';

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

                  v_count_upd := v_count_upd + 1;
              END IF; -- v_count = 0


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

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

   -- SUBPROC
   PROCEDURE del_bedrijf (p_import_key IN NUMBER)
   AS
      CURSOR c1
      IS
         SELECT *
           FROM prs_v_aanwezigbedrijf b
          WHERE b.prs_bedrijf_intern IS NULL
                AND b.prs_leverancier_nr IS NOT NULL
                AND prs_leverancier_nr NOT IN (10846,58977) --MDUX#52455: Uitzondering voor Staples en Zalsman BV
                AND NOT EXISTS
                      (SELECT 1
                         FROM fac_imp_ext_bedrijf
                        WHERE prs_leverancier_nr = b.prs_leverancier_nr);

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

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

            v_errorhint := 'Fout verwijderen bedrijf';

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

            v_count_del := v_count_del + 1;

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

      fac.imp_writelog (p_import_key,
                        'S',
                        'Bedrijf: #verwijderd: ' || TO_CHAR (v_count_del),
                        '');
      COMMIT;
   END;



   PROCEDURE diensten_bedrijf (p_import_key IN NUMBER)
   AS

    	CURSOR c_dienst
		  IS
		      SELECT DISTINCT prs_dienst_omschrijving
		      FROM fac_imp_ext_bedrijf
		      WHERE prs_dienst_omschrijving IS NOT NULL;

   		CURSOR c_dienstlocgebouw
   		IS
      SELECT prs_dienst_omschrijving, alg_locatie_code, alg_gebouw_code, prs_bedrijf_naam
      FROM fac_imp_ext_bedrijf
      WHERE prs_dienst_omschrijving IS NOT NULL;

     	v_alg_locatie_key   NUMBER (10);
   		v_alg_gebouw_key    NUMBER (10);
   		v_prs_dienst_key    NUMBER (10);
   		v_prs_bedrijf_key   NUMBER (10);

   BEGIN
      v_count_tot      := 0;
   		v_count_upd   := 0;

	   FOR rec2 IN c_dienst
	   LOOP
	      BEGIN
	         v_count_tot      := v_count_tot + 1;

	         v_errormsg       :=
	               'Kan dienst niet bepalen ['
	            || rec2.prs_dienst_omschrijving
	            || '] ';

	         BEGIN
	            SELECT prs_dienst_key
	            INTO v_prs_dienst_key
	            FROM prs_dienst
	            WHERE UPPER(prs_dienst_omschrijving) = UPPER(rec2.prs_dienst_omschrijving);
	         EXCEPTION
	            WHEN NO_DATA_FOUND
	            THEN
	               v_errormsg       :=
	                     'Kan dienst niet wegschrijven ['
	                  || rec2.prs_dienst_omschrijving
	                  || '] ';

	               INSERT INTO prs_dienst (prs_dienst_omschrijving)
	               VALUES (rec2.prs_dienst_omschrijving);
	         END;

	         v_count_upd   := v_count_upd + 1;

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



	   fac.imp_writelog (p_import_key,
	                     'S',
	                     'Diensten: aantal ingelezen: ' || TO_CHAR (v_count_tot),
	                     ''
	   );
	   fac.imp_writelog (p_import_key,
	                     'S',
	                     'Diensten: aantal toegevoegd: '
	                     || TO_CHAR (v_count_upd),
	                     ''
	   );

	   v_count_tot      := 0;
	   v_count_upd   := 0;

	   FOR rec3 IN c_dienstlocgebouw
	   LOOP
	      BEGIN
	         v_count_tot      := v_count_tot + 1;

	         v_errormsg       :=
	               'Kan dienst niet bepalen ['
	            || rec3.prs_dienst_omschrijving
	            || '] ';
	         SELECT prs_dienst_key
	         INTO v_prs_dienst_key
	         FROM prs_dienst
	         WHERE prs_dienst_omschrijving = rec3.prs_dienst_omschrijving;

	         v_errormsg       :=
	            'Kan locatie niet bepalen [' || rec3.alg_locatie_code || '] ';
	         IF rec3.alg_locatie_code IS NOT NULL
	         THEN
	            SELECT alg_locatie_key
	            INTO v_alg_locatie_key
	            FROM alg_v_aanweziglocatie
	            WHERE alg_locatie_code = rec3.alg_locatie_code;
	         ELSE
	            v_alg_locatie_key   := NULL;
	         END IF;

	         v_errormsg       :=
	            'Kan gebouw niet bepalen [' || rec3.alg_gebouw_code || '] ';
	         IF rec3.alg_gebouw_code IS NOT NULL
	         THEN
	            SELECT alg_gebouw_key
	            INTO v_alg_gebouw_key
	            FROM alg_v_aanweziggebouw
	            WHERE alg_gebouw_code = rec3.alg_gebouw_code
	              AND alg_locatie_key = v_alg_locatie_key;
	         ELSE
	            v_alg_gebouw_key   := NULL;
	         END IF;

	         v_errormsg       :=
	            'Kan bedrijf niet bepalen [' || rec3.prs_bedrijf_naam || '] ';
	         SELECT prs_bedrijf_key
	         INTO v_prs_bedrijf_key
	         FROM prs_v_aanwezigbedrijf
	         WHERE prs_bedrijf_naam = rec3.prs_bedrijf_naam;

	         v_errormsg       :=
	               'Kan bedrijf/dienst/loc/gebouw niet wegschrijven ['
	            || rec3.prs_bedrijf_naam
	            || '/'
	            || rec3.prs_dienst_omschrijving
	            || '/'
	            || rec3.alg_locatie_code
	            || '/'
	            || rec3.alg_gebouw_code
	            || '] ';


	         INSERT INTO prs_bedrijfdienstlocatie
	        (
	            prs_dienst_key, prs_bedrijf_key, alg_locatie_key, alg_gebouw_key
	        )
	         VALUES (v_prs_dienst_key, v_prs_bedrijf_key, decode (v_alg_gebouw_key, null, v_alg_locatie_key, null), v_alg_gebouw_key);

	         v_count_upd   := v_count_upd + 1;

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

   	fac.imp_writelog (p_import_key,
                     'S',
                     'Bedrijf/dienst/locatie: aantal ingelezen: '
                     || TO_CHAR (v_count_tot),
                     ''
   	);
   	fac.imp_writelog (p_import_key,
                     'S',
                     'Bedrijf/dienst/locatie: aantal toegevoegd: '
                     || TO_CHAR (v_count_upd),
                     ''
   	);
	END;




-- MAIN
BEGIN

  IF p_sync = 1
  THEN
  	 -- Bij aanvullen nooit verwijderen, alleen bij sync-en
     del_bedrijf (p_import_key);
  END IF;

  add_bedrijf (p_import_key);

  IF p_sync = 0
  THEN
  	-- Bij aanvullen bedrijven de diensten-locatie-gebouw uitvoeren, bij sync-en (nog) niet
  	diensten_bedrijf(p_import_key);
	END IF;

EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg :=
         'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
      fac.imp_writelog (p_import_key,
                        'E',
                        v_aanduiding || v_errormsg,
                        'Importproces relaties afgebroken!');
END;
/

CREATE OR REPLACE PROCEDURE mdux_post_update_bedrijf (p_import_key IN NUMBER)
   AS
     CURSOR c1
     IS
        SELECT * FROM fac_imp_ext_bedrijf ib;

     v_errormsg       VARCHAR2 (1000) := '-';
	   v_errorhint      VARCHAR2 (1000) := '-';
	   oracle_err_num   NUMBER;
	   oracle_err_mes   VARCHAR2 (200);

	   v_aanduiding     VARCHAR2 (200) := '-';

      v_bedrijf_key   NUMBER (10);
      v_aantal_bedrijfadres_url  NUMBER (10);
BEGIN


		SELECT count(*)
   	INTO v_aantal_bedrijfadres_url
   	FROM fac_imp_ext_bedrijf
   	WHERE prs_bedrijf_order_adres IS NOT NULL;

		-- Worden de technische adressen elders beheerd, dan bijwerken, en anders met rust laten (dan beheer in Facilitor, zal de defeault zijn)

		-- Wij gaan conclusie beheer in Facilitor of bron hier als volgt bepalen:
   	-- indien er GEEN bedrijfsadres_url's in de bron staan, dan beheer in Facilitor.
   	-- indien er minimaal 1 bedrijfsadres_url's in de bron staat, dan beheer in bronsysteem

		IF v_aantal_bedrijfadres_url > 0
		THEN
			  -- Beheer van technische adressen in bronsysteem, dus we gaan hier de technische adressen bijweken op basis van leveranciernummer (add/upd/del).

		    FOR rec IN c1
		    LOOP
		       BEGIN

		          v_aanduiding :=
		                '['
		             || rec.prs_bedrijf_naam
		             || '|'
		             || rec.prs_leverancier_nr
		             || '] ';

		          v_errorhint := 'Fout bepalen bedrijf';

		          IF rec.prs_leverancier_nr IS NOT NULL
		          THEN

		           	SELECT prs_bedrijf_key
		            INTO v_bedrijf_key
		            FROM prs_v_aanwezigbedrijf
		           	WHERE UPPER (prs_leverancier_nr) =  UPPER (rec.prs_leverancier_nr);

		           	mdux_delupsert_bedrijfadres(v_bedrijf_key, rec.prs_bedrijf_order_adres, rec.prs_bedrijf_xsl, rec.prs_bedrijf_leverancier, 'B');
		           	-- MDUX#32101: Voor mldopdrachten (en contracten ook maar) geen technisch adres instellen, MDUX wil dat vooralsnog handmatig versturen.
	           		-- mdux_delupsert_bedrijfadres(v_bedrijf_key, rec.prs_bedrijf_order_adres, rec.prs_bedrijf_xsl, rec.prs_bedrijf_uitvoerende, 'O');
	           		-- mdux_delupsert_bedrijfadres(v_bedrijf_key, rec.prs_bedrijf_order_adres, rec.prs_bedrijf_xsl, rec.prs_bedrijf_contract, 'C');


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


CREATE OR REPLACE PROCEDURE mdux_update_bedrijf (p_import_key IN NUMBER)
AS
BEGIN
        mdux_update_bedrijf_body(p_import_key, 1);
    mdux_post_update_bedrijf (p_import_key);
END ;
/


CREATE OR REPLACE VIEW MDUX_V_PERSLID_WARM
(PRS_PERSLID_KEY, PRS_PERSLID_INFO, PRS_PERSLID_VERWIJDER)
AS
SELECT  prs_perslid_key,
          prs_perslid_naam
          || DECODE (p.prs_perslid_voorletters,
                     NULL, '',
                     ', ' || p.prs_perslid_voorletters)
          || DECODE (p.prs_perslid_tussenvoegsel,
                     NULL, '',
                     ' ' || p.prs_perslid_tussenvoegsel)
          || DECODE (p.prs_perslid_voornaam,
                     NULL, '',
                     ' (' || p.prs_perslid_voornaam || ')')
          || '(pers.nr: '
          || prs_perslid_nr
          || ')',
          prs_perslid_verwijder
FROM prs_perslid p
WHERE prs_perslid_nr IS NOT NULL;





CREATE OR REPLACE VIEW mdux_v_budget_basic
AS
SELECT 	 prs_kostenplaats_key,
         kostenplaats,
         prs_kostensoort_oms,
         prs_kostensoort_opmerking,
         SUM (bedrag) bedrag,
         SUM (geraamd) geraamd,
         prs_kostenplaats_limiet,
         prs_kostenplaatsgrp_key,
         kpgroep,
         kp_prs_perslid_key,
         kpg_prs_perslid_key,
         limietperiode,
         to_char(besteldatum,'YYYY') jaar,
         to_char(besteldatum,'MM') maand
    FROM (SELECT k.prs_kostenplaats_key,
                 NVL2 (
                    k.prs_kostenplaats_nr,
                    prs_kostenplaats_nr || ' '
                    || lcl.x ('prs_kostenplaats_omschrijving',
                              k.prs_kostenplaats_key,
                              k.prs_kostenplaats_omschrijving),
                    '')
                    kostenplaats,
                    ks.prs_kostensoort_oms,
                    ks.prs_kostensoort_opmerking,
                 CASE
                    WHEN    (module = 'BES' AND (status = 6 OR status = 7))
                         OR (module = 'MLD' AND (status = 7 OR status = 9))
                         OR (module = 'RES' AND (status = 5 OR status = 6))
                    THEN
                       COALESCE (bedrag, 0)
                    ELSE
                       0
                 END
                    bedrag,
                 CASE
                    WHEN    (module = 'BES' AND (status = 6 OR status = 7))
                         OR (module = 'MLD' AND (status = 7 OR status = 9))
                         OR (module = 'RES' AND (status = 5 OR status = 6))
                    THEN
                       0
                    ELSE
                       COALESCE (bedrag, 0)
                 END
                    geraamd,
                 k.prs_kostenplaats_limiet,
                 k.prs_kostenplaatsgrp_key,
                 kpg.prs_kostenplaatsgrp_oms kpgroep,
                 k.prs_perslid_key kp_prs_perslid_key,
                 kpg.prs_perslid_key kpg_prs_perslid_key,
                 status,
                 module,
                 COALESCE (kpg.prs_kostenplaatsgrp_limperiode,
                           k.prs_kostenplaats_limietperiode)
                    limietperiode,
                    besteldatum
            FROM (SELECT o.prs_kostenplaats_key,
                         o.mld_opdr_datumbegin datum,
                         m.prs_perslid_key prs_perslid_key,
                         mdis.ins_discipline_omschrijving categorie,
                            sd.ins_srtdiscipline_prefix
                         || m.mld_melding_key
                         || '/'
                         || o.mld_opdr_bedrijfopdr_volgnr
                            categorienummer,
                         COALESCE (o.mld_opdr_kosten, 0) bedrag,
                         o.mld_statusopdr_key status,
                         'MLD' module,
                         COALESCE (s.prs_kostensoort_key,
                                   mdis.prs_kostensoort_key)
                            prs_kostensoort_key,
                         o.mld_opdr_ordernr ordernr,
                         o.mld_opdr_key kostenplaats_item_key,
                         -1 kostenplaats_item_child_key,
                         m.mld_alg_locatie_key locatie_key,
                         o.mld_opdr_datumbegin besteldatum
                    FROM mld_opdr o,
                         mld_typeopdr ot,
                         mld_melding m,
                         mld_stdmelding s,
                         mld_discipline mdis,
                         ins_srtdiscipline sd
                   WHERE     o.mld_opdr_kosten <> 0
                         AND o.mld_typeopdr_key = ot.mld_typeopdr_key
                         AND ot.mld_typeopdr_kosten = 1
                         AND o.mld_melding_key = m.mld_melding_key
                         AND m.mld_stdmelding_key = s.mld_stdmelding_key
                         AND mdis.ins_discipline_key = s.mld_ins_discipline_key
                         AND mdis.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
                         AND o.mld_statusopdr_key NOT IN (1, 2, 3, 4, 10)
--                         AND o.mld_opdr_datumbegin BETWEEN TO_DATE (
--                                                              '20-12-2014 00:00',
--                                                              'DD-MM-YYYY HH24:MI')
--                                                       AND  TO_DATE (
--                                                               '20-12-2014 23:59',
--                                                               'DD-MM-YYYY HH24:MI')
                  UNION ALL
                  SELECT b.prs_kostenplaats_key,
                         bo.bes_bestelopdr_datum datum,
                         b.prs_perslid_key prs_perslid_key,
                         'Bestelling' categorie,
                         TO_CHAR (b.bes_bestelling_key) categorienummer,
                         (boi.bes_bestelopdr_item_aantal
                          * boi.bes_bestelopdr_item_prijs)
                            bedrag,
                         COALESCE (bo.bes_bestelopdr_status, 0) status,
                         'BES' module,
                         bdis.prs_kostensoort_key,
                         b.bes_bestelling_ordernr ordernr,
                         b.bes_bestelling_key kostenplaats_item_key,
                         -1 kostenplaats_item_child_key,
                         (SELECT alg_locatie_key
                            FROM mld_adres ma
                           WHERE ma.mld_adres_key = b.mld_adres_key_lev)
                            locatie_key,
                            bo.bes_bestelopdr_datum besteldatum
                    FROM bes_bestelling b,
                         bes_bestelling_item bi,
                         bes_bestelopdr bo,
                         bes_bestelopdr_item boi,
                         bes_srtdeel isd,
                         bes_srtgroep isg,
                         bes_discipline bdis
                   WHERE b.bes_bestelling_key = bi.bes_bestelling_key
                         AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
                         AND bi.bes_bestelopdr_item_key =
                               boi.bes_bestelopdr_item_key
                         AND bi.bes_srtdeel_key = isd.bes_srtdeel_key
                         AND isd.bes_srtgroep_key = isg.bes_srtgroep_key
                         AND isg.ins_discipline_key = bdis.ins_discipline_key
                         AND bo.bes_bestelopdr_status IN (4, 6, 7)
--                         AND bo.bes_bestelopdr_datum BETWEEN TO_DATE (
--                                                                '20-12-2014 00:00',
--                                                                'DD-MM-YYYY HH24:MI')
--                                                         AND  TO_DATE (
--                                                                 '20-12-2014 23:59',
--                                                                 'DD-MM-YYYY HH24:MI')
                 )  tab,
                 prs_kostenplaats k,
                 prs_kostenplaatsgrp kpg,
                 prs_kostensoort ks,
                 prs_kostensoortgrp ksg,
                 prs_perslid p,
                 prs_v_afdeling d,
                 alg_locatie l
           WHERE     tab.prs_kostenplaats_key(+) = k.prs_kostenplaats_key
                 AND tab.prs_kostensoort_key = ks.prs_kostensoort_key(+)
                 AND k.prs_kostenplaatsgrp_key = kpg.prs_kostenplaatsgrp_key(+)
                 AND ks.prs_kostensoortgrp_key = ksg.prs_kostensoortgrp_key(+)
                 AND tab.prs_perslid_key = p.prs_perslid_key(+)
                 AND p.prs_afdeling_key = d.prs_afdeling_key(+)
                 AND tab.locatie_key = l.alg_locatie_key(+)
--                 AND k.prs_kostenplaats_key IN (2, 3, 67, 110, 111, 135)
--                 AND (k.prs_perslid_key = 329 OR kpg.prs_perslid_key = 329)
        )
GROUP BY prs_kostenplaats_key,
         kostenplaats,
         prs_kostensoort_oms,
         prs_kostensoort_opmerking,
         prs_kostenplaats_limiet,
         prs_kostenplaatsgrp_key,
         kpgroep,
         kp_prs_perslid_key,
         kpg_prs_perslid_key,
         limietperiode,
         to_char(besteldatum,'YYYY'),
         to_char(besteldatum,'MM');

-- MDUX#35025 herinnering tbv binnenboeken(leveren) van bestellingen
CREATE OR REPLACE VIEW MDUX_V_RAP_BES_OPEN_LEV
(
   BES_BESTELOPDR_KEY,
   EXTRA_KEY,
   ORDERNUMMER,
   BESTELLER,
   BESTELDATUM,
   LEVERDATUM,
   LEVERANCIER,
   TOTAAL
)
AS
     SELECT   bo.bes_bestelopdr_key,
              p1.prs_perslid_key,
              'FCC' || bo.bes_bestelopdr_id Ordernummer,
              p3.prs_perslid_naam_friendly Besteller,
              TO_CHAR (bes.bes_bestelling_datum, 'DD-MM-YYYY') Besteldatum,
              TO_CHAR (bes_bestelling_leverdatum, 'DD-MM-YYYY') Leverdatum,
              bdr.prs_bedrijf_naam Leverancier,
              SUM (boi.totaal) Totaal
       FROM   bes_bestelopdr bo,
              bes_bestelling bes,
              (SELECT   bes_bestelopdr_key,
                        bes_bestelopdr_item_key,
                        bes_bestelopdr_item_aantal,
                        bes_bestelopdr_item_prijs,
                        bes_bestelopdr_item_aantal * bes_bestelopdr_item_prijs
                           totaal
                 FROM   bes_bestelopdr_item) boi,
              bes_bestelling_item bi,
              prs_perslid p1,
              prs_perslid p2,
              prs_v_perslid_fullnames p3,
              mld_adres ma,
              fac_gebruikersgroep fg,
              prs_bedrijf bdr,
              (SELECT   p.prs_perslid_key, g.alg_locatie_key
                 FROM   prs_perslidwerkplek ppw,
                        prs_werkplek w,
                        prs_perslid p,
                        alg_ruimte r,
                        alg_verdieping v,
                        alg_gebouw g
                WHERE       w.prs_werkplek_key = ppw.prs_werkplek_key
                        AND p.prs_perslid_key = ppw.prs_perslid_key
                        AND p.prs_perslid_verwijder IS NULL
                        AND w.prs_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) pw
      WHERE       bes_bestelopdr_status IN (4, 5)
              AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
              AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
              AND bes.bes_bestelling_key = bi.bes_bestelling_key
              AND p1.prs_perslid_key = pw.prs_perslid_key
              AND pw.alg_locatie_key = ma.alg_locatie_key
              AND bes.mld_adres_key_lev = ma.mld_adres_key
              AND fg.prs_perslid_key = p1.prs_perslid_key
              AND fg.fac_groep_key = 22
              AND p1.prs_perslid_verwijder IS NULL
              AND SUBSTR (p1.prs_perslid_oslogin, 0, 1) != '_'
              AND ( (bes_bestelling_leverdatum < SYSDATE - 5
                     AND bes_bestelling_leverdatum > bes_bestelopdr_datum)
                   OR (bes_bestelopdr_datum < SYSDATE - 5
                       AND bes_bestelling_leverdatum <= bes_bestelopdr_datum))
              AND bes.prs_perslid_key_voor = p2.prs_perslid_key
              AND p2.prs_afdeling_key = p1.prs_afdeling_key
              AND p3.prs_perslid_key = bes.prs_perslid_key_voor
              AND bo.prs_bedrijf_key = bdr.prs_bedrijf_key
   GROUP BY   bo.bes_bestelopdr_key,
              bo.bes_bestelopdr_id,
              p3.prs_perslid_naam_friendly,
              bes.bes_bestelling_datum,
              bes_bestelling_leverdatum,
              bdr.prs_bedrijf_naam,
              p1.prs_perslid_key
   ORDER BY   2;

CREATE OR REPLACE VIEW MDUX_V_NOTI_BES_LEV_REMINDER
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
     SELECT   'CUST01',
              NULL,
              extra_key,
                 'Herinnering: er zijn '
              || COUNT (bes_bestelopdr_key)
              || ' openstaande bestelodprachten die op uw levering wachten',
              (SELECT   fac_usrrap_key
                 FROM   fac_usrrap
                WHERE   fac_usrrap_view_name = 'MDUX_V_RAP_BES_OPEN_LEV'),
              extra_key
       FROM   MDUX_V_RAP_BES_OPEN_LEV
   GROUP BY   extra_key;

-- MDUX#35089 rapport tbv bestellers inzage in bestelde artikelen
CREATE OR REPLACE VIEW MDUX_V_RAP_BES_ARTIKEL_VOOR
(
   Aanvraagnr,
   Bestel_datum,
   Status,
   Besteller,
   Besteld_voor,
   Catalogus,
   Groep,
   Artikel_nummer,
   Artikel,
   Aantal,
   Artikel_prijs,
   Totaalbedrag,
   besteller_key,
   FCLT_3D_AFDELING_KEY,
   FCLT_3D_LOCATIE_KEY
)
AS
     SELECT   b.bes_bestelling_key,
              b.bes_bestelling_datum,
              stat.bes_bestellingstatuses_omschr,
              pf.prs_perslid_naam_full,
              kd.prs_perslid_info,
              dis.ins_discipline_omschrijving ins_discipline_omschrijving,
              grp.bes_srtgroep_omschrijving bes_srtgroep_omschrijving,
              srt.bes_srtdeel_nr bes_srtdeel_nr,
              srt.bes_srtdeel_omschrijving bes_srtdeel_omschrijving,
              bi.bes_bestelling_item_aantal aantalart,
              COALESCE (bi.bes_bestelling_item_prijs, 0) artikelprijs,
              bi.bes_bestelling_item_aantal
              * COALESCE (bi.bes_bestelling_item_prijs, 0)
                 totaalbedrag,
              p.prs_perslid_key,
              boom.prs_afdeling_key1,
              l.alg_locatie_key
       FROM   bes_bestelling_item bi,
              bes_srtdeel srt,
              bes_bestelling b,
              bes_bestellingstatuses stat,
              prs_perslid p,
              prs_v_perslid_fullnames_all pf,
              prs_v_afdeling d,
              prs_v_afdeling_boom boom,
              bes_srtgroep grp,
              ins_tab_discipline dis,
              mld_adres adr,
              alg_locatie l,
              alg_district di,
              (SELECT   bes_bestelling_key, prs_perslid_info
                 FROM   bes_kenmerkbestell bkb,
                        bes_kenmerk bk,
                        MDUX_V_PERSLID_WARM p
                WHERE       bes_kenmerkbestell_verwijder IS NULL
                        AND bk.bes_kenmerk_key = bkb.bes_kenmerk_key
                        AND bk.bes_srtkenmerk_key = 21
                        AND TO_CHAR (p.prs_perslid_key(+)) =
                              bes_kenmerkbestell_waarde) kd
      WHERE       bi.bes_srtdeel_key = srt.bes_srtdeel_key
              AND srt.bes_srtgroep_key = grp.bes_srtgroep_key
              AND grp.ins_discipline_key = dis.ins_discipline_key
              AND bi.bes_bestelling_key = b.bes_bestelling_key
              AND b.bes_bestelling_status = stat.bes_bestellingstatuses_key
              AND p.prs_perslid_key = b.prs_perslid_key
              AND p.prs_perslid_key = pf.prs_perslid_key
              AND p.prs_afdeling_key = d.prs_afdeling_key
              AND d.prs_afdeling_key = boom.prs_afdeling_key
              AND b.mld_adres_key_lev = adr.mld_adres_key
              AND adr.alg_locatie_key = l.alg_locatie_key(+)
              AND l.alg_district_key = dI.alg_district_key(+)
              AND kd.bes_bestelling_key = b.bes_bestelling_key
              AND NOT EXISTS
                    (SELECT   b1.bes_bestelling_key
                       FROM   bes_bestelling b1
                      WHERE   bes_bestelling_parentkey = b.bes_bestelling_key)
              AND b.bes_bestelling_status NOT IN (8)
   ORDER BY   bes_bestelling_key;


-- MDUX#37895: Factuurmatching in financieel pakket laten plaatsvinden -> hiervoor stellen we via API onderstaande view beschikbaar...
CREATE OR REPLACE VIEW mdux_bes_4_ax
AS
SELECT
          'FCC' || TO_CHAR (bo.bes_bestelopdr_id) opdracht_id,
          b.prs_bedrijf_key,
          b.prs_leverancier_nr,
          kp.prs_kostenplaats_nr,
          bo.bes_bestelopdr_key bes_opdr_key,
          NULL mld_opdr_key,
          NULL cnt_contract_key,
          BO.BES_BESTELOPDR_LEVKOSTEN,
          BO.BES_BESTELOPDR_KORTING,
          BO.BES_BESTELOPDR_STATUS,
          fac.gettrackingdate('BESOTV', bo.BES_BESTELOPDR_KEY) bes_besotv_datum,
          BOI.BES_BESTELOPDR_ITEM_POSNR,
          BOI.BES_BESTELOPDR_ITEM_OMSCHRIJV,
          BOI.BES_BESTELOPDR_ITEM_AANTAL,
          BOI.BES_BESTELOPDR_ITEM_AANTALONTV,
          BOI.BES_BESTELOPDR_ITEM_PRIJS,
          BOI.BES_BESTELOPDR_ITEM_BRUTOPRIJS,
          BOI.BES_BESTELOPDR_ITEM_STATUS
         FROM  bes_bestelopdr bo,
           prs_bedrijf b,
           bes_bestelling bes,
           bes_bestelopdr_item boi,
           bes_bestelling_item bi,
           prs_kostenplaats kp
      WHERE b.prs_bedrijf_key = bo.prs_bedrijf_key
        AND bo.bes_bestelopdr_key = boi.bes_bestelopdr_key
        AND bi.bes_bestelopdr_item_key = boi.bes_bestelopdr_item_key
        AND bes.bes_bestelling_key = bi.bes_bestelling_key
        AND kp.prs_kostenplaats_key = bes.prs_kostenplaats_key;

-- De noti-job gaat niet op prs_perslid, maar op een vast mailadres van MDUX.
-- Hiervoor 'xemail' kolom gebruiken, die gaat voor (=ipv) de receiver indien  we als flags in de noti-job de waarde 1 meegeven. Zie mdux08.sql

CREATE OR REPLACE VIEW mdux_v_noti_cntreminder
(code, sender, receiver, text, key, par1, par2, xkey, xemail, xmobile)
AS
    SELECT '', '', c.prs_perslid_key_beh,
             'Rappèl: Contract '
          || c.cnt_contract_nummer_intern||DECODE(cnt_contract_versie, NULL, '', '.'||cnt_contract_versie)
          || ' ('
          || c.cnt_contract_omschrijving
          || ' '
          || b.prs_bedrijf_naam
          || ')'
          || ' moet uiterlijk per '
          || TO_CHAR (cnt.cnt_getopzegdatum (c.cnt_contract_key), 'DD-MM-YYYY')
          || ' worden verlengd of opgezegd.',
          c.cnt_contract_key, c.cnt_contract_nummer_intern, cnt.cnt_getopzegdatum (c.cnt_contract_key), NULL, 'facilitair@medux.nl', NULL
     FROM cnt_v_aanwezigcontract c, prs_bedrijf b
    WHERE b.prs_bedrijf_key = c.cnt_prs_bedrijf_key
      AND cnt_contract_verwijder IS NULL
      AND cnt_contract_status = 0 /* actief */
      AND (SYSDATE BETWEEN cnt.cnt_getrappeldatum (c.cnt_contract_key) AND cnt.cnt_getopzegdatum (c.cnt_contract_key));


CREATE OR REPLACE VIEW mdux_huurcontracten_tmp
(cnt_contract_key,
prs_bedrijf_key,
prs_perslid_key_eig,
cnt_contract_nummer_intern,
cnt_contract_versie,
cnt_contract_omschrijving,
cnt_contract_looptijd_van,
cnt_contract_looptijd_tot,
cnt_looptijd_mnd,
perc_looptijd,
aantal_weken_tegaan,
cnt_contract_rappeldatum,
cnt_contract_opzegdatum,
cnt_contract_opzegtermijn,
cnt_contract_rappeltermijn,
cnt_contract_status,
contract_fase_actief,
cnt_contract_status_txt,
cnt_contract_kosten,
cnt_contract_termijnkosten,
cnt_contract_termijnkosten_mnd,
cnt_contract_termijn_type,
cnt_contract_termijn_aantal,
cnt_contract_termijn_omschr,
contract_disc_key,
prs_afdeling_key_eig,
cnt_eigenaar_afdeling_naam,
prs_bedrijf_naam,
prs_perslid_naam_full,
prs_perslid_naam_friendly,
cnt_alg_plaats_key,
cnt_alg_plaats_code,
cnt_contract_plaats_gewicht)
AS
	SELECT  c1.cnt_contract_key,
          b.prs_bedrijf_key,
          c1.prs_perslid_key_eig,
          c1.cnt_contract_nummer_intern,
          c1.cnt_contract_versie,
          c1.cnt_contract_omschrijving,
          c1.cnt_contract_looptijd_van,
          c1.cnt_contract_looptijd_tot,
          12
          * (  TO_CHAR (c1.cnt_contract_looptijd_tot, 'YYYY')
             - TO_CHAR (c1.cnt_contract_looptijd_van, 'YYYY')
             - 1)
          + (12 - TO_CHAR (c1.cnt_contract_looptijd_van, 'MM'))
          + (TO_CHAR (c1.cnt_contract_looptijd_tot, 'MM')) cnt_looptijd_mnd,
          ROUND(100
                * LEAST (
                     1,
                     (SYSDATE - LEAST (c1.cnt_contract_looptijd_van, SYSDATE))
                     / (GREATEST (
                           c1.cnt_contract_looptijd_tot
                           - c1.cnt_contract_looptijd_van,
                           1
                        ))
                  )) perc_looptijd,
          ROUND( (c1.cnt_contract_looptijd_tot
                  - GREATEST (c1.cnt_contract_looptijd_van,
                              LEAST (SYSDATE, c1.cnt_contract_looptijd_tot)))
                / 7) aantal_weken_tegaan,
          cnt.cnt_getrappeldatum (c1.cnt_contract_key) cnt_contract_rappeldatum,
          cnt.cnt_getopzegdatum (c1.cnt_contract_key) cnt_contract_opzegdatum,
          (SELECT lcl.x ('cnt_termijn_omschrijving',
                         cnt_termijn_key,
                         cnt_termijn_omschrijving)
             FROM cnt_termijn
            WHERE cnt_termijn_key = c1.cnt_contract_opzegtermijn) cnt_contract_opzegtermijn,
          (SELECT lcl.x ('cnt_termijn_omschrijving',
                         cnt_termijn_key,
                         cnt_termijn_omschrijving)
             FROM cnt_termijn
            WHERE cnt_termijn_key = c1.cnt_contract_rappeltermijn)	cnt_contract_rappeltermijn,
          c1.cnt_contract_status,
          DECODE (
             cnt.cnt_contract_status (
                c1.cnt_contract_looptijd_van,
                cnt.cnt_getrappeldatum (c1.cnt_contract_key),
                cnt.cnt_getopzegdatum (c1.cnt_contract_key),
                c1.cnt_contract_looptijd_tot
             ),
             0,
             lcl.l ('lcl_cnt_future'),
             1,
             lcl.l ('lcl_cnt_topical'),
             2,
             lcl.l ('lcl_cnt_warn'),
             3,
             lcl.l ('lcl_cnt_cancel'),
             4,
             lcl.l ('lcl_cnt_past'))  contract_fase_actief,
          DECODE (
             c1.cnt_contract_status,
             0,
             DECODE (fac.getsetting ('cnt_contract_approval'),
                     1, lcl.l ('lcl_cnt_active_approval'),
                     lcl.l ('lcl_cnt_active')),
             1,
             lcl.l ('lcl_cnt_inactive'),
             2,
             lcl.l ('lcl_cnt_new'),
             3,
             lcl.l ('lcl_cnt_forapproval') ) cnt_contract_status_txt,
          c1.cnt_contract_kosten,
          c1.cnt_contract_termijnkosten,
          c1.cnt_contract_termijnkosten * DECODE(ct.cnt_termijn_type, 'M', 1 / ct.cnt_termijn_aantal, 'Y', 1 / (ct.cnt_termijn_aantal * 12), 'D', 365 / (ct.cnt_termijn_aantal * 12), 1) cnt_contract_termijnkosten_mnd,
          ct.cnt_termijn_type,
					ct.cnt_termijn_aantal,
					ct.cnt_termijn_omschrijving,
          COALESCE (c1.ins_discipline_key, -1) contract_disc_key,
          c1.prs_afdeling_key_eig,
          (SELECT prs_afdeling_naam
             FROM prs_v_afdeling
            WHERE prs_afdeling_key = c1.prs_afdeling_key_eig) cnt_eigenaar_afdeling_naam,
          b.prs_bedrijf_naam,
          p1.prs_perslid_naam_full,
          p1.prs_perslid_naam_friendly,
          cp1.cnt_alg_plaats_key,
          cp1.cnt_alg_plaats_code,
          cp1.cnt_contract_plaats_gewicht
     FROM cnt_v_aanwezigcontract c1,
          cnt_termijn ct,
          prs_v_perslid_fullnames_all p1,
          prs_bedrijf b,
          cnt_contract_plaats cp1
    WHERE b.prs_bedrijf_key = c1.cnt_prs_bedrijf_key
      AND c1.ins_discipline_key = 301
      AND c1.cnt_contract_termijntermijn = ct.cnt_termijn_key(+)
      AND c1.cnt_contract_key = cp1.cnt_contract_key (+)
      AND c1.prs_perslid_key_eig = p1.prs_perslid_key(+)
      AND COALESCE (c1.cnt_contract_versie, '0') =
             (SELECT COALESCE (MAX (cnt_contract_versie), '0')
                FROM cnt_v_aanwezigcontract c2
               WHERE c2.cnt_contract_nummer_intern =
                        c1.cnt_contract_nummer_intern);

CREATE OR REPLACE VIEW mdux_huurcontracten_gebouw
(cnt_contract_key,
prs_bedrijf_key,
alg_gebouw_key,
prs_perslid_key_eig,
cnt_contract_nummer_intern,
cnt_contract_versie,
cnt_contract_omschrijving,
cnt_contract_looptijd_van,
cnt_contract_looptijd_tot,
cnt_looptijd_mnd,
perc_looptijd,
aantal_weken_tegaan,
cnt_contract_rappeldatum,
cnt_contract_opzegdatum,
cnt_contract_opzegtermijn,
cnt_contract_rappeltermijn,
cnt_contract_status,
contract_fase_actief,
cnt_contract_status_txt,
cnt_contract_kosten,
cnt_contract_termijnkosten,
cnt_contract_termijnkosten_mnd,
cnt_contract_termijn_type,
cnt_contract_termijn_aantal,
cnt_contract_termijn_omschr,
contract_disc_key,
prs_afdeling_key_eig,
cnt_eigenaar_afdeling_naam,
prs_bedrijf_naam,
prs_perslid_naam_full,
prs_perslid_naam_friendly,
cnt_alg_plaats_key,
cnt_alg_plaats_code,
alg_gebouw_code,
alg_gebouw_naam,
alg_gebouw_omschrijving)
AS
	SELECT  cnt_contract_key,
					prs_bedrijf_key,
					alg_gebouw_key,
					prs_perslid_key_eig,
					cnt_contract_nummer_intern,
					cnt_contract_versie,
					cnt_contract_omschrijving,
					cnt_contract_looptijd_van,
					cnt_contract_looptijd_tot,
					cnt_looptijd_mnd,
					perc_looptijd,
					aantal_weken_tegaan,
					cnt_contract_rappeldatum,
					cnt_contract_opzegdatum,
					cnt_contract_opzegtermijn,
					cnt_contract_rappeltermijn,
					cnt_contract_status,
					contract_fase_actief,
					cnt_contract_status_txt,
					cnt_contract_kosten,
					cnt_contract_termijnkosten,
					cnt_contract_termijnkosten_mnd,
					cnt_contract_termijn_type,
					cnt_contract_termijn_aantal,
					cnt_contract_termijn_omschr,
					contract_disc_key,
					prs_afdeling_key_eig,
					cnt_eigenaar_afdeling_naam,
					prs_bedrijf_naam,
					prs_perslid_naam_full,
					prs_perslid_naam_friendly,
					cnt_alg_plaats_key,
					cnt_alg_plaats_code,
					alg_gebouw_code,
					alg_gebouw_naam,
					alg_gebouw_omschrijving
		FROM mdux_huurcontracten_tmp,  alg_gebouw g
    WHERE g.alg_gebouw_key(+) = cnt_alg_plaats_key
    AND COALESCE(cnt_alg_plaats_code,'G') = 'G';

CREATE OR REPLACE VIEW mdux_huurcontracten_locatie
(cnt_contract_key,
prs_bedrijf_key,
alg_gebouw_key,
prs_perslid_key_eig,
cnt_contract_nummer_intern,
cnt_contract_versie,
cnt_contract_omschrijving,
cnt_contract_looptijd_van,
cnt_contract_looptijd_tot,
cnt_looptijd_mnd,
perc_looptijd,
aantal_weken_tegaan,
cnt_contract_rappeldatum,
cnt_contract_opzegdatum,
cnt_contract_opzegtermijn,
cnt_contract_rappeltermijn,
cnt_contract_status,
contract_fase_actief,
cnt_contract_status_txt,
cnt_contract_kosten,
cnt_contract_termijnkosten,
cnt_contract_termijnkosten_mnd,
cnt_contract_termijn_type,
cnt_contract_termijn_aantal,
cnt_contract_termijn_omschr,
contract_disc_key,
prs_afdeling_key_eig,
cnt_eigenaar_afdeling_naam,
prs_bedrijf_naam,
prs_perslid_naam_full,
prs_perslid_naam_friendly,
cnt_alg_plaats_key,
cnt_alg_plaats_code,
alg_gebouw_code,
alg_gebouw_naam,
alg_gebouw_omschrijving)
AS
	SELECT  cnt_contract_key,
					prs_bedrijf_key,
					alg_gebouw_key,
					prs_perslid_key_eig,
					cnt_contract_nummer_intern,
					cnt_contract_versie,
					cnt_contract_omschrijving,
					cnt_contract_looptijd_van,
					cnt_contract_looptijd_tot,
					cnt_looptijd_mnd,
					perc_looptijd,
					aantal_weken_tegaan,
					cnt_contract_rappeldatum,
					cnt_contract_opzegdatum,
					cnt_contract_opzegtermijn,
					cnt_contract_rappeltermijn,
					cnt_contract_status,
					contract_fase_actief,
					cnt_contract_status_txt,
					cnt_contract_kosten,
					cnt_contract_termijnkosten,
					cnt_contract_termijnkosten_mnd,
					cnt_contract_termijn_type,
					cnt_contract_termijn_aantal,
					cnt_contract_termijn_omschr,
					contract_disc_key,
					prs_afdeling_key_eig,
					cnt_eigenaar_afdeling_naam,
					prs_bedrijf_naam,
					prs_perslid_naam_full,
					prs_perslid_naam_friendly,
					cnt_alg_plaats_key,
					cnt_alg_plaats_code,
					alg_gebouw_code,
					alg_gebouw_naam,
					alg_gebouw_omschrijving
		FROM mdux_huurcontracten_tmp,  alg_gebouw g, alg_locatie l
    WHERE l.alg_locatie_key (+) =  cnt_alg_plaats_key
    AND COALESCE(cnt_alg_plaats_code,'L') = 'L'
    AND g.alg_gebouw_key(+) = l.alg_locatie_key;

--MDUX#52712 Rapportage huurcontracten, uitbreiding ruimten
CREATE OR REPLACE FORCE VIEW MDUX_HUURCONTRACTEN_RUIMTEN
(
   CNT_CONTRACT_KEY,
   PRS_BEDRIJF_KEY,
   ALG_GEBOUW_KEY,
   PRS_PERSLID_KEY_EIG,
   CNT_CONTRACT_NUMMER_INTERN,
   CNT_CONTRACT_VERSIE,
   CNT_CONTRACT_OMSCHRIJVING,
   CNT_CONTRACT_LOOPTIJD_VAN,
   CNT_CONTRACT_LOOPTIJD_TOT,
   CNT_LOOPTIJD_MND,
   PERC_LOOPTIJD,
   AANTAL_WEKEN_TEGAAN,
   CNT_CONTRACT_RAPPELDATUM,
   CNT_CONTRACT_OPZEGDATUM,
   CNT_CONTRACT_OPZEGTERMIJN,
   CNT_CONTRACT_RAPPELTERMIJN,
   CNT_CONTRACT_STATUS,
   CONTRACT_FASE_ACTIEF,
   CNT_CONTRACT_STATUS_TXT,
   CNT_CONTRACT_KOSTEN,
   CNT_CONTRACT_TERMIJNKOSTEN,
   CNT_CONTRACT_TERMIJNKOSTEN_MND,
   CNT_CONTRACT_TERMIJN_TYPE,
   CNT_CONTRACT_TERMIJN_AANTAL,
   CNT_CONTRACT_TERMIJN_OMSCHR,
   CONTRACT_DISC_KEY,
   PRS_AFDELING_KEY_EIG,
   CNT_EIGENAAR_AFDELING_NAAM,
   PRS_BEDRIJF_NAAM,
   PRS_PERSLID_NAAM_FULL,
   PRS_PERSLID_NAAM_FRIENDLY,
   CNT_ALG_PLAATS_KEY,
   CNT_ALG_PLAATS_CODE,
   ALG_GEBOUW_CODE,
   ALG_GEBOUW_NAAM,
   ALG_GEBOUW_OMSCHRIJVING
)
AS
   SELECT cnt_contract_key,
          prs_bedrijf_key,
          g.alg_gebouw_key,
          prs_perslid_key_eig,
          cnt_contract_nummer_intern,
          cnt_contract_versie,
          cnt_contract_omschrijving,
          cnt_contract_looptijd_van,
          cnt_contract_looptijd_tot,
          cnt_looptijd_mnd,
          perc_looptijd,
          aantal_weken_tegaan,
          cnt_contract_rappeldatum,
          cnt_contract_opzegdatum,
          cnt_contract_opzegtermijn,
          cnt_contract_rappeltermijn,
          cnt_contract_status,
          contract_fase_actief,
          cnt_contract_status_txt,
          cnt_contract_kosten,
          cnt_contract_termijnkosten,
          cnt_contract_termijnkosten_mnd,
          cnt_contract_termijn_type,
          cnt_contract_termijn_aantal,
          cnt_contract_termijn_omschr,
          contract_disc_key,
          prs_afdeling_key_eig,
          cnt_eigenaar_afdeling_naam,
          prs_bedrijf_naam,
          prs_perslid_naam_full,
          prs_perslid_naam_friendly,
          cnt_alg_plaats_key,
          cnt_alg_plaats_code,
          alg_gebouw_code,
          alg_gebouw_naam,
          alg_gebouw_omschrijving
     FROM mdux_huurcontracten_tmp,
          alg_gebouw g,
          alg_verdieping v,
          alg_ruimte r
    WHERE     r.alg_ruimte_key(+) = cnt_alg_plaats_key
          AND v.alg_gebouw_key = g.alg_gebouw_key
          AND r.alg_verdieping_key = v.alg_verdieping_key
          AND COALESCE (cnt_alg_plaats_code, 'R') = 'R';


CREATE OR REPLACE VIEW mdux_huurcontracten_gebouwen
AS
SELECT * FROM mdux_huurcontracten_gebouw
UNION
SELECT * FROM mdux_huurcontracten_locatie
UNION
SELECT * FROM mdux_huurcontracten_ruimten;

CREATE OR REPLACE VIEW mdux_rap_huurcontracten
(
   cnt_contract_key,
   prs_bedrijf_key,
   alg_gebouw_key,
   prs_perslid_key_eig,
   cnt_contract_nummer_intern,
   cnt_contract_versie,
   cnt_contract_omschrijving,
   cnt_contract_looptijd_van,
   cnt_contract_looptijd_tot,
   cnt_looptijd_mnd,
   perc_looptijd,
   aantal_weken_tegaan,
   cnt_contract_rappeldatum,
   cnt_contract_opzegdatum,
   cnt_contract_opzegtermijn,
   cnt_contract_rappeltermijn,
   cnt_contract_status,
   contract_fase_actief,
   cnt_contract_status_txt,
   cnt_contract_kosten,
   cnt_contract_termijnkosten,
   cnt_contract_termijnkosten_mnd,
   cnt_contract_termijn_type,
   cnt_contract_termijn_aantal,
   cnt_contract_termijn_omschr,
   contract_disc_key,
   prs_afdeling_key_eig,
   cnt_eigenaar_afdeling_naam,
   prs_bedrijf_naam,
   prs_perslid_naam_full,
   prs_perslid_naam_friendly,
   cnt_alg_plaats_key,
   cnt_alg_plaats_code,
   alg_gebouw_code,
   alg_gebouw_naam,
   alg_gebouw_omschrijving,
   alg_verdieping_key,
   alg_verdieping_omschrijving,
   alg_verdieping_volgnr,
   alg_verdieping_code,
   alg_ruimte_key,
   alg_ruimte_nr,
   alg_ruimte_omschrijving,
   alg_ruimte_bruto_vloeropp,
   alg_ruimte_opp_alt1,
   alg_ruimte_opp_alt2,
   alg_ruimte_omtrek,
   alg_ruimte_inhoud,
   alg_ruimte_opmerking,
   prs_ruimteafdeling_bezetting,
   prs_afdeling_key,
   prs_afdeling_naam,
   prs_afdeling_omschrijving,
   prs_kostenplaats_key,
   prs_kostenplaats_nr,
   prs_kostenplaats_omschrijving,
   mdux_kostenplaats,
   mdux_kostendrager,
   cnt_interne_doorbelasting,
   cnt_interne_doorbelasting_mnd,
   cnt_contractsoort,
   indexatie_volgens,
   waarborgsom,
   bankgarantie,
   servicekosten_permaand,
   status_huurcontract,
   huurkosten_permaand,
   maand_van_index,
   crediteur,
   crediteurnummer
)
AS
   SELECT cnt_contract_key,
          hc.prs_bedrijf_key,
          hc.alg_gebouw_key,
          prs_perslid_key_eig,
          cnt_contract_nummer_intern,
          cnt_contract_versie,
          cnt_contract_omschrijving,
          cnt_contract_looptijd_van,
          cnt_contract_looptijd_tot,
          cnt_looptijd_mnd,
          perc_looptijd,
          aantal_weken_tegaan,
          cnt_contract_rappeldatum,
          cnt_contract_opzegdatum,
          cnt_contract_opzegtermijn,
          cnt_contract_rappeltermijn,
          cnt_contract_status,
          contract_fase_actief,
          cnt_contract_status_txt,
          cnt_contract_kosten,
          cnt_contract_termijnkosten,
          cnt_contract_termijnkosten_mnd,
          cnt_contract_termijn_type,
          cnt_contract_termijn_aantal,
          cnt_contract_termijn_omschr,
          contract_disc_key,
          prs_afdeling_key_eig,
          cnt_eigenaar_afdeling_naam,
          prs_bedrijf_naam,
          prs_perslid_naam_full,
          prs_perslid_naam_friendly,
          cnt_alg_plaats_key,
          cnt_alg_plaats_code,
          alg_gebouw_code,
          alg_gebouw_naam,
          alg_gebouw_omschrijving,
          v.alg_verdieping_key,
          v.alg_verdieping_omschrijving,
          v.alg_verdieping_volgnr,
          v.alg_verdieping_code,
          r.alg_ruimte_key,
          r.alg_ruimte_nr,
          r.alg_ruimte_omschrijving,
          r.alg_ruimte_bruto_vloeropp,
          r.alg_ruimte_opp_alt1,
          r.alg_ruimte_opp_alt2,
          r.alg_ruimte_omtrek,
          r.alg_ruimte_inhoud,
          r.alg_ruimte_opmerking,
          ra.prs_ruimteafdeling_bezetting,
          a.prs_afdeling_key,
          a.prs_afdeling_naam,
          a.prs_afdeling_omschrijving,
          k.prs_kostenplaats_key,
          k.prs_kostenplaats_nr,
          k.prs_kostenplaats_omschrijving,
          SUBSTR (k.prs_kostenplaats_nr,
                  1,
                  INSTR (k.prs_kostenplaats_nr, '.') - 1)
             mdux_kostenplaats,
          SUBSTR (k.prs_kostenplaats_nr,
                  1 + INSTR (k.prs_kostenplaats_nr, '.'))
             mdux_kostendrager,
          ROUND (
             cnt_contract_termijnkosten
             * ( (SELECT SUM (prs_ruimteafdeling_bezetting)
                    FROM prs_ruimteafdeling ra2,
                         alg_verdieping v2,
                         alg_ruimte r2,
                         mdux_huurcontracten_gebouwen hc2
                   WHERE     hc2.cnt_contract_key = hc.cnt_contract_key
                         AND v2.alg_gebouw_key = hc2.alg_gebouw_key
                         AND v2.alg_verdieping_verwijder IS NULL
                         AND r2.alg_verdieping_key = v2.alg_verdieping_key
                         AND r2.alg_ruimte_verwijder IS NULL
                         AND ra2.alg_ruimte_key = r2.alg_ruimte_key
                         AND ra2.prs_afdeling_key = a.prs_afdeling_key
                         AND ra2.prs_ruimteafdeling_verwijder IS NULL)
                / (SELECT COALESCE (SUM (prs_ruimteafdeling_bezetting), 100)
                     FROM prs_ruimteafdeling ra2,
                          alg_verdieping v2,
                          alg_ruimte r2,
                          mdux_huurcontracten_gebouwen hc2
                    WHERE     hc2.cnt_contract_key = hc.cnt_contract_key
                          AND v2.alg_gebouw_key = hc2.alg_gebouw_key
                          AND v2.alg_verdieping_verwijder IS NULL
                          AND r2.alg_verdieping_key = v2.alg_verdieping_key
                          AND r2.alg_ruimte_verwijder IS NULL
                          AND ra2.alg_ruimte_key = r2.alg_ruimte_key
                          AND ra2.prs_ruimteafdeling_verwijder IS NULL)),
             2)
             mdux_interne_doorbelasting,
          ROUND (
             cnt_contract_termijnkosten_mnd
             * ( (SELECT SUM (prs_ruimteafdeling_bezetting)
                    FROM prs_ruimteafdeling ra2,
                         alg_verdieping v2,
                         alg_ruimte r2,
                         mdux_huurcontracten_gebouwen hc2
                   WHERE     hc2.cnt_contract_key = hc.cnt_contract_key
                         AND v2.alg_gebouw_key = hc2.alg_gebouw_key
                         AND v2.alg_verdieping_verwijder IS NULL
                         AND r2.alg_verdieping_key = v2.alg_verdieping_key
                         AND r2.alg_ruimte_verwijder IS NULL
                         AND ra2.alg_ruimte_key = r2.alg_ruimte_key
                         AND ra2.prs_afdeling_key = a.prs_afdeling_key
                         AND ra2.prs_ruimteafdeling_verwijder IS NULL)
                / (SELECT COALESCE (SUM (prs_ruimteafdeling_bezetting), 100)
                     FROM prs_ruimteafdeling ra2,
                          alg_verdieping v2,
                          alg_ruimte r2,
                          mdux_huurcontracten_gebouwen hc2
                    WHERE     hc2.cnt_contract_key = hc.cnt_contract_key
                          AND v2.alg_gebouw_key = hc2.alg_gebouw_key
                          AND v2.alg_verdieping_verwijder IS NULL
                          AND r2.alg_verdieping_key = v2.alg_verdieping_key
                          AND r2.alg_ruimte_verwijder IS NULL
                          AND ra2.alg_ruimte_key = r2.alg_ruimte_key
                          AND ra2.prs_ruimteafdeling_verwijder IS NULL)),
             2)
             mdux_interne_doorbelasting_mnd,
          (SELECT ins_discipline_omschrijving
             FROM cnt_discipline cd, cnt_contract c
            WHERE c.ins_discipline_key = cd.ins_discipline_key
                  AND c.cnt_contract_key = hc.cnt_contract_key)
             contractsoort,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 8
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             indexatie_volgens,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 13
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             waarborgsom,
          (SELECT cnt_kenmerkcontract_waarde
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 1
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             bankgarantie,
          (SELECT fac.safe_to_number(cnt_kenmerkcontract_waarde)
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 11
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             servicekosten_permaand,
          (SELECT fac_usrdata_omschr
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck, fac_usrdata fu
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 61
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key
                  AND fu.fac_usrtab_key = 181
                  AND TO_CHAR (fac_usrdata_key) = cnt_kenmerkcontract_waarde)
             status_huurcontract,
          (SELECT fac.safe_to_number(cnt_kenmerkcontract_waarde)
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 6
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             huurkosten_permaand,
          (SELECT fac_usrdata_omschr
             FROM cnt_kenmerkcontract ckc, cnt_kenmerk ck, fac_usrdata fu
            WHERE     ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_srtkenmerk_key = 9
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ckc.cnt_contract_key = hc.cnt_contract_key
                  AND fu.fac_usrtab_key = 43
                  AND TO_CHAR (fac_usrdata_key) = cnt_kenmerkcontract_waarde)
             maand_van_index,
          (SELECT prs_bedrijf_naam
             FROM prs_bedrijf b, cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     TO_CHAR (prs_bedrijf_key) = cnt_kenmerkcontract_waarde
                  AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ck.cnt_srtkenmerk_key = 5
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             crediteur,
          (SELECT prs_leverancier_nr
             FROM prs_bedrijf b, cnt_kenmerkcontract ckc, cnt_kenmerk ck
            WHERE     TO_CHAR (prs_bedrijf_key) = cnt_kenmerkcontract_waarde
                  AND ckc.cnt_kenmerk_key = ck.cnt_kenmerk_key
                  AND ck.cnt_kenmerk_verwijder IS NULL
                  AND ck.cnt_srtkenmerk_key = 5
                  AND ckc.cnt_contract_key = hc.cnt_contract_key)
             crediteurnummer
     FROM mdux_huurcontracten_gebouwen hc,
          alg_verdieping v,
          alg_ruimte r,
          prs_ruimteafdeling ra,
          prs_afdeling a,
          prs_kostenplaats k
    WHERE     hc.alg_gebouw_key = v.alg_gebouw_key(+)
          AND v.alg_verdieping_verwijder IS NULL
          AND v.alg_verdieping_key = r.alg_verdieping_key(+)
          AND r.alg_ruimte_verwijder IS NULL
          AND r.alg_ruimte_key = ra.alg_ruimte_key(+)
          AND ra.prs_ruimteafdeling_verwijder IS NULL
          AND ra.prs_afdeling_key = a.prs_afdeling_key(+)
          AND a.prs_afdeling_verwijder IS NULL
          AND a.prs_kostenplaats_key = k.prs_kostenplaats_key(+);

CREATE OR REPLACE VIEW MDUX_V_INS_QRC
(
   FCLT_3D_DISCIPLINE_KEY,
   FCLT_3D_LOCATIE_KEY,
   FCLT_F_LOCATIE,
   FCLT_F_GEBOUW,
   PLAATS,
   SOORTRUIMTE,
   AFDELING_KEY,
   AFDELING,
   AFDELING_OMSCHRIJVING,
   INS_SRTDEEL_CODE,
   INS_SRTDEEL_OMSCHRIJVING,
   INS_DEEL_OMSCHRIJVING,
   INS_DEEL_KEY,
   INS_SRTDEEL_KEY,
   FCLT_F_OBJECTSOORT,
   INS_ALG_RUIMTE_TYPE,
   ALG_DISTRICT_KEY,
   INS_DEEL_UPPER,
   ALG_RUIMTE_KEY,
   FCLT_F_FAC_BOOKMARK_NAAM,
   HIDE_F_BOOKMARK_ID
)
AS
   SELECT i.ins_discipline_key,
          l.alg_locatie_key,
          l.alg_locatie_omschrijving,
          o.alg_gebouw_omschrijving,
          o.alg_plaatsaanduiding plaats,
          (SELECT r.alg_ruimte_omschrijving
             FROM alg_ruimte r
            WHERE r.alg_ruimte_key = i.ins_alg_ruimte_key)
             soortruimte,
          NULL,
          NULL,
          NULL,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving,
          i.ins_deel_omschrijving,
          i.ins_deel_key,
          s.ins_srtdeel_key,
          s.ins_srtdeel_upper,
          i.ins_alg_ruimte_type,
          l.alg_district_key,
          ins_deel_upper,
          i.ins_alg_ruimte_key,
          b.fac_bookmark_naam,
          b.fac_bookmark_id
     FROM ins_deel i,
          ins_v_alg_overzicht o,
          ins_srtdeel s,
          alg_locatie l,
          alg_district di,
          fac_bookmark b
    WHERE     b.fac_bookmark_naam LIKE '%QRC%'
          AND ins_deel_verwijder IS NULL
          AND i.ins_deel_module = 'INS'
          AND i.ins_deel_parent_key IS NULL
          AND o.alg_onroerendgoed_keys = i.ins_alg_ruimte_key
          AND o.alg_onroerendgoed_type = i.ins_alg_ruimte_type
          AND i.ins_alg_ruimte_type IN ('T', 'R', 'W')
          AND o.alg_locatie_key = i.ins_alg_locatie_key
          AND i.ins_alg_locatie_key = l.alg_locatie_key
          AND l.alg_district_key = di.alg_district_key
          AND s.ins_srtdeel_key = i.ins_srtdeel_key
   UNION ALL
   SELECT i.ins_discipline_key,
          NULL,
          NULL,
          NULL,
          NULL,
          NULL,
          a.prs_afdeling_key,
          a.prs_afdeling_upper,
          a.prs_afdeling_omschrijving,
          s.ins_srtdeel_code,
          s.ins_srtdeel_omschrijving,
          i.ins_deel_omschrijving,
          i.ins_deel_key,
          s.ins_srtdeel_key,
          s.ins_srtdeel_upper,
          i.ins_alg_ruimte_type,
          NULL,
          ins_deel_upper,
          i.ins_alg_ruimte_key,
          b.fac_bookmark_naam,
          b.fac_bookmark_id
     FROM ins_deel i,
          prs_afdeling a,
          ins_srtdeel s,
          fac_bookmark b
    WHERE     b.fac_bookmark_naam LIKE '%QRC%'
          AND ins_deel_verwijder IS NULL
          AND i.ins_deel_module = 'INS'
          AND i.ins_deel_parent_key IS NULL
          AND i.ins_alg_ruimte_key = a.prs_afdeling_key
          AND s.ins_srtdeel_key = i.ins_srtdeel_key
          AND ins_alg_ruimte_type = 'A';

 CREATE OR REPLACE VIEW mdux_v_rap_keyvsfe
(
   soort_gebruiker,
   Naam,
   Loginnaam,
   laatste_login
)
AS
   SELECT   DECODE (key_user, 1, 'KEY', 'FE'),
            pf.prs_perslid_naam_full,
            oslogin,
            prs_perslid_login
     FROM   (SELECT   *
               FROM         (SELECT   p.prs_perslid_key prs_key,
                                      COALESCE (p.prs_perslid_oslogin,
                                                p.prs_perslid_oslogin2)
                                         oslogin,
                                      1 login,
                                      -- 1=user heeft login + groep + rechten
                                      DECODE (
                                         SIGN(TRUNC(COALESCE (
                                                       p.prs_perslid_login
                                                       + 92,
                                                       SYSDATE - 1
                                                    ))
                                              - TRUNC (SYSDATE)),
                                         -1,
                                         0,
                                         1
                                      ) -- 1=user heeft laatste 92 dagen ingelogd
                                         recent_login
                               FROM   prs_v_aanwezigperslid p
                              WHERE   EXISTS
                                         -- op basis van login + groep + rechten
                                      (SELECT   1
                                         FROM   fac_v_rap_groeprechten
                                        WHERE   fclt_f_login =
                                                   COALESCE (
                                                      p.prs_perslid_oslogin,
                                                      p.prs_perslid_oslogin2
                                                   ))
                             UNION ALL
                             -- FSN#24029: Soms ook personen zonder login meetellen!
                             SELECT   p.prs_perslid_key,
                                      NULL oslogin,
                                      1 login,
                                      -- 1=user telt mee, want allow_for_others!
                                      0 recent_login
                               -- geen login, dus nooit recent ingelogd
                               FROM   prs_v_aanwezigperslid p
                              WHERE   COALESCE (p.prs_perslid_oslogin,
                                                p.prs_perslid_oslogin2) IS NULL
                                      AND (fac.getSetting (
                                              'mld_allow_for_others'
                                           ) = 1
                                           OR EXISTS
                                                (SELECT   1
                                                   FROM   bes_disc_params dp
                                                  WHERE   dp.bes_disc_params_for_others =
                                                             1))
                             UNION ALL
                             -- FSN#27315: En ook eventuele "sensorusers" meetellen!
                             SELECT   NULL prs_perslid_key,
                                      NULL oslogin,
                                      COUNT ( * ) login,
                                      -- elke sensoruser telt mee als FE!
                                      1 recent_login
                               -- recent actief dus tellen als recent
                               FROM   ins_v_aanwezigdeel d
                              WHERE   ins_deel_statedate >
                                         TRUNC (SYSDATE - 30)) x
                         LEFT JOIN
                            -- 1=user heeft rechten op key-codes=notFE-codes
                            (SELECT   DISTINCT fclt_f_login, 1 key_user
                               FROM   fac_v_rap_groeprechten gr,
                                      fac_functie f
                              WHERE   gr.fclt_f_funcode = f.fac_functie_code
                                      AND f.fac_functie_groep IN (1, 2)) a
                         ON x.oslogin = a.fclt_f_login
                      LEFT JOIN -- FSN#30404: 1=user is cross-domain (xd) user
                         (SELECT   p.prs_perslid_key, 1 xd_user
                            FROM   prs_v_aanwezigperslid p,
                                   prs_v_afdeling_boom ab
                           WHERE   p.prs_afdeling_key = ab.prs_afdeling_key
                                   AND p.prs_perslid_apikey IS NOT NULL
                                   AND ab.prs_bedrijf_key =
                                         fac.safe_to_number(fac.getSetting('xd_primary_bedrijfkey')))
                         b
                      ON x.prs_key = b.prs_perslid_key) st,
            prs_perslid p,
            prs_v_perslid_fullnames pf
    WHERE       login = 1
            AND UPPER (oslogin) != '_FACILITOR'
            AND p.prs_perslid_key = st.prs_key
            AND pf.prs_perslid_key = p.prs_perslid_key;

--MDUX#52557 - Rapportage Mutaties objectenbeheer (22-03-2018)
CREATE OR REPLACE FORCE VIEW MDUX_V_INS_MUTATIES
(
   DISCIPLINE,
   GROEP,
   DEEL_KEY,
   DEEL_OMSCHRIJVING,
   DEEL_OPMERKING,
   SRTDEEL,
   SRTDEEL_OMSCHRIJVING,
   TRACKING_KEY,
   TRACKING_DATUM,
   TRACKING_MAAND,
   TRACKING_OMSCHRIJVING,
   NIEUW,
   WIJZIGING,
   INACTIEF,
   VERVALLEN,
   VERVALDATUM
)
AS
     SELECT disc.ins_discipline_omschrijving AS Discipline,
            sg.ins_srtgroep_omschrijving AS Groep,
            d.ins_deel_key AS Deel_key,
            d.ins_deel_omschrijving AS Deel_omschrijving,
            d.ins_deel_opmerking AS Deel_opmerking,
            sd.ins_srtdeel_code AS Srtdeel,
            sd.ins_srtdeel_omschrijving Srtdeel_omschrijving,
            t.fac_tracking_key AS Tracking_key,
            t.fac_tracking_datum AS Tracking_datum,
            TO_CHAR (t.fac_tracking_datum, 'yyyy-mm') AS Tracking_maand,
            CASE
               WHEN t.fac_tracking_oms IS NULL
               THEN
                  CASE
                     WHEN n.fac_srtnotificatie_oms = 'lcl_noti_INSNEW'
                     THEN
                        'Object geregistreerd'
                     ELSE
                        'Object gewijzigd'
                  END
               ELSE
                  t.fac_tracking_oms
            END
               AS Tracking_omschrijving,
            CASE
               WHEN CASE
                       WHEN t.fac_tracking_oms IS NULL
                       THEN
                          CASE
                             WHEN n.fac_srtnotificatie_oms = 'lcl_noti_INSNEW'
                             THEN
                                'Object geregistreerd'
                             ELSE
                                'Object gewijzigd'
                          END
                       ELSE
                          t.fac_tracking_oms
                    END = 'Object geregistreerd'
               THEN
                  1
               ELSE
                  0
            END
               AS Nieuw,
            CASE                 --Hiermee wordt geteld het aantal wijzigingen
               WHEN    n.fac_srtnotificatie_oms = 'lcl_noti_INSNEW'
                    OR t.fac_tracking_oms LIKE '%%Actief: 1 --> 0%'
                    OR t.fac_tracking_oms LIKE '%Vervaldatum: (leeg) -->%'
               THEN
                  0
               ELSE
                  CASE
                     WHEN t.fac_tracking_oms LIKE '%Object gewijzigd%'
                          AND (T.FAC_TRACKING_OMS LIKE '%Status: %'
                               OR T.FAC_TRACKING_OMS LIKE '%Notitieveld: %'
                               OR T.FAC_TRACKING_OMS LIKE
                                    '%Nadere gegevens van plaats/eigenaar: %')
                     THEN
                        1
                     ELSE
                        0
                  END
            END
               AS Wijziging,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Actief: 1 --> 0%' --Hiermee wordt geteld het aantal wijzigingen dat objecten inactief zijn gemaakt
                                                               THEN 1
               ELSE 0
            END
               AS Inactief,
            CASE
               WHEN t.fac_tracking_oms LIKE '%Vervaldatum: (leeg) -->%' --Hiermee wordt geteld het aantal wijzigingen dat objecten vervallen zijn gemaakt
                                                                       THEN 1
               ELSE 0
            END
               AS Vervallen,
            d.ins_deel_vervaldatum AS Vervaldatum
       FROM ins_tab_discipline disc,
            ins_deel d,
            ins_srtdeel sd,
            ins_srtgroep sg,
            fac_tracking t,
            fac_srtnotificatie n
      WHERE     t.fac_tracking_refkey = d.ins_deel_key
            AND n.fac_srtnotificatie_xmlnode = 'deel'
            --AND t.fac_tracking_oms IS NOT NULL
            AND t.fac_srtnotificatie_key = n.fac_srtnotificatie_key
            AND disc.ins_discipline_key = d.ins_discipline_key
            AND sd.ins_srtdeel_key = d.ins_srtdeel_key
            AND disc.ins_discipline_key = sg.ins_discipline_key
            AND sd.ins_srtdeel_verwijder IS NULL                          -- MDUX#53847 Objectsoorten die verwijderd zijn, niet meer tonen in de rapportage
      ORDER BY t.fac_tracking_datum DESC;


--MDUX#52700 - Rapportage Aantallen meldingen Metrics, aangepast (22-03-2018)
CREATE OR REPLACE FORCE VIEW MDUX_V_MELDINGEN
(
   MELDING_KEY,
   MELDINGNUMMER,
   MELDING_REGIO,
   MELDING_DISTRICT,
   MELDING_LOCATIECODE,
   MELDING_LOCATIE,
   MELDING_LOCATIEPLAATS,
   FCLT_3D_LOCATIE_KEY,
   MELDING_GEBOUWCODE,
   MELDING_GEBOUW,
   MELDING_VERDIEPING,
   MELDING_RUIMTENR,
   MELDING_RUIMTE,
   MELDING_ORDERNR,
   KOSTENSOORTGROEP,
   KOSTENSOORT,
   KOSTENPLAATS,
   KOSTENPLAATS_OMS,
   MELDER,
   MELDER_KEY,
   AFDELING,
   AFDELING_OMSCHRIJVING,
   FCLT_3D_AFDELING_KEY,
   BEDRIJF_KEY,
   INVOERDER,
   MELDBRON,
   SOORTMELDING,
   FCLT_3D_DISCIPLINE_KEY,
   PRODUCTGROEP,
   SUBPRODUCTGROEP,
   BEHANDELGROEP,
   BEHANDELAAR,
   BEHANDELAAR_KEY,
   SUBPRODUCTGROEPGROEP,
   MELDING_STATUS,
   SLA_NVT,
   SLA_WERKDGN,
   SLA_WERKUREN,
   SLA_RESPIJTDGN,
   SLA_RESPIJTUREN,
   SLA_ACCPTDGN,
   SLA_ACCPTUREN,
   PLAN_UITVOERTIJD_SLA,
   MELDING_DATUM,
   MELDING_EINDDATUM,
   MELDING_ACCEPTDATUM,
   MELDING_AFGEMELD,
   MELDING_ACCEPTED,
   DOORLOOPTIJD_WERKDGN,
   DOORLOOPTIJD_WERKUREN,
   ONDERWERP,
   VOMSCHRIJVING,
   MELDING_OPMERKING,
   PRIORITEIT,
   PRIORITEITTXT,
   RATING,
   RATING_OPMERKING,
   BOLLETJE,
   ACCEPT_SLA_DAGEN,
   ACCEPT_SLA_UREN,
   UITVOERING_SLA_DAGEN,
   UITVOERING_SLA_UREN,
   AFSPRAAK_SLA_DAGEN,
   AFSPRAAK_SLA_UREN,
   ACCEPT_SLA_OPTIJD,
   UITVOERING_SLA_OPTIJD,
   AFSPRAAK_SLA_OPTIJD,
   SELFSERVICE
)
AS
   SELECT mld_melding_key,
          meldingnummer,
          alg_regio_omschrijving,
          alg_district_omschrijving,
          locatie,
          locatie_omschrijving,
          locatie_plaats,
          alg_locatie_key,
          gebouw,
          gebouw_naam,
          verdieping,
          ruimte,
          ruimte_omschrijving,
          melding_ordernr,
          kostensoortgroep,
          kostensoort,
          kostenplaats,
          kostenplaats_oms,
          melder,
          prs_perslid_key,
          afdeling,
          afdeling_omschrijving,
          afdeling_key,
          prs_bedrijf_key,
          invoerder,
          meldbron,
          soortmelding,
          ins_discipline_key,
          productgroep,
          subproductgroep,
          behandelgroep,
          behandelaar,
          behandelaar_key,
          subproductgroepgroep,
          status,
          sla_nvt,
          sla_werkdgn,
          sla_werkuren,
          sla_respijtdgn,
          sla_respijturen,
          sla_accptdgn,
          sla_accpturen,
          plan_uitvoertijd_sla,
          datum,
          einddatum,
          acceptdatum,
          afgemeld,
          accepted,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkdgn,
          DECODE (x.t_doorlooptijd.eenheid,
                  'U', x.t_doorlooptijd.tijdsduur,
                  NULL)
             doorlooptijd_werkuren,
          onderwerp,
          omschrijving,
          opmerking,
          mld_melding_spoed prioriteit,
          DECODE (mld_melding_spoed,
                  3, lcl.l ('lcl_mld_urg_normaal'),
                  1, lcl.l ('lcl_mld_urg_kritiek'),
                  2, lcl.l ('lcl_mld_urg_hoog'),
                  4, lcl.l ('lcl_mld_urg_laag')),
          mld_melding_satisfaction,
          mld_melding_satisfaction_op,
          mld_melding_flag,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', acceptdatum - COALESCE (accepted, afgemeld),
                  NULL)
             accept_sla_dagen,
          DECODE (x.t_doorlooptijd.eenheid,
                  'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                  NULL)
             accept_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D',
               mld.geteinddatum (mld_melding_key)
             - COALESCE (afgemeld, SYSDATE)
             + COALESCE (sla_respijtdgn, 0),
             NULL)
             uitvoering_sla_dagen,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'U',
             ( (mld.geteinddatum (mld_melding_key)
                - COALESCE (afgemeld, SYSDATE))
              * 24)
             + COALESCE (sla_respijturen, 0),
             NULL)
             uitvoering_sla_uren,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'D',
               einddatum
             - COALESCE (afgemeld, SYSDATE)
             + COALESCE (sla_respijtdgn, 0),
             NULL)
             afspraak_sla_dagen,
          DECODE (
             x.t_doorlooptijd.eenheid,
             'U',
             ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24)
             + COALESCE (sla_respijtdgn, 0),
             NULL)
             afspraak_sla_uren,
          CASE
             WHEN acceptdatum IS NULL
                  OR -- Dan is er geen acceptatietijd gedefinieerd en dus altijd op tijd.
                    DECODE (x.t_doorlooptijd.eenheid,
                            'D',
                            acceptdatum - COALESCE (accepted, afgemeld),
                            0)
                    + DECODE (
                         x.t_doorlooptijd.eenheid,
                         'U',
                         (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                         0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             accept_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D',
                       mld.geteinddatum (mld_melding_key)
                     - COALESCE (afgemeld, SYSDATE)
                     + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U',
                       ( (mld.geteinddatum (mld_melding_key)
                          - COALESCE (afgemeld, SYSDATE))
                        * 24)
                       + COALESCE (sla_respijturen, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             uitvoering_sla_optijd,
          CASE
             WHEN DECODE (
                     x.t_doorlooptijd.eenheid,
                     'D',
                       einddatum
                     - COALESCE (afgemeld, SYSDATE)
                     + COALESCE (sla_respijtdgn, 0),
                     0)
                  + DECODE (
                       x.t_doorlooptijd.eenheid,
                       'U',
                       ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24)
                       + COALESCE (sla_respijtdgn, 0),
                       0) >= 0
             THEN
                lcl.l ('lcl_yes')
             ELSE
                lcl.l ('lcl_no')
          END
             afspraak_sla_optijd,
          DECODE (invoerder, melder, lcl.l ('lcl_yes'), lcl.l ('lcl_no'))
             selfservice
     FROM (SELECT m.mld_melding_key,
                  m.prs_perslid_key,
                  sd.ins_srtdiscipline_prefix || m.mld_melding_key
                     meldingnummer,
                  alg_regio_omschrijving,
                  alg_district_omschrijving,
                  alg_locatie_code locatie,
                  alg_locatie_omschrijving locatie_omschrijving,
                  alg_locatie_plaats locatie_plaats,
                  l.alg_locatie_key,
                  og.alg_gebouw_code gebouw,
                  og.alg_gebouw_naam gebouw_naam,
                  og.alg_verdieping_code verdieping,
                  og.alg_ruimte_nr ruimte,
                  og.alg_ruimte_omschrijving ruimte_omschrijving,
                  m.mld_melding_ordernr melding_ordernr,
                  (SELECT ksg.prs_kostensoortgrp_oms
                     FROM prs_kostensoortgrp ksg, prs_kostensoort ks
                    WHERE ksg.prs_kostensoortgrp_key =
                             ks.prs_kostensoortgrp_key
                          AND ks.prs_kostensoort_key =
                                (SELECT COALESCE (sm.prs_kostensoort_key,
                                                  disc.prs_kostensoort_key)
                                   FROM mld_stdmelding sm,
                                        mld_discipline disc
                                  WHERE sm.mld_ins_discipline_key =
                                           disc.ins_discipline_key
                                        AND sm.mld_stdmelding_key =
                                              s.mld_stdmelding_key))
                     kostensoortgroep,
                  (SELECT ks.prs_kostensoort_oms
                     FROM prs_kostensoort ks
                    WHERE ks.prs_kostensoort_key =
                             (SELECT COALESCE (sm.prs_kostensoort_key,
                                               disc.prs_kostensoort_key)
                                FROM mld_stdmelding sm, mld_discipline disc
                               WHERE sm.mld_ins_discipline_key =
                                        disc.ins_discipline_key
                                     AND sm.mld_stdmelding_key =
                                           s.mld_stdmelding_key))
                     kostensoort,
                  (SELECT k.prs_kostenplaats_nr
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats,
                  (SELECT k.prs_kostenplaats_omschrijving
                     FROM prs_kostenplaats k
                    WHERE k.prs_kostenplaats_key = m.prs_kostenplaats_key)
                     kostenplaats_oms,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.prs_perslid_key)
                     melder,
                  (SELECT prs_afdeling_naam
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling,
                  (SELECT prs_afdeling_omschrijving
                     FROM prs_afdeling afd, prs_perslid pp
                    WHERE afd.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_omschrijving,
                  (SELECT prs_afdeling_key
                     FROM prs_perslid pp
                    WHERE pp.prs_perslid_key = m.prs_perslid_key)
                     afdeling_key,
                  (SELECT prs_bedrijf_key
                     FROM prs_v_afdeling pva, prs_perslid pp
                    WHERE pva.prs_afdeling_key = pp.prs_afdeling_key
                          AND pp.prs_perslid_key = m.prs_perslid_key)
                     prs_bedrijf_key,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key =
                             mld.getmeldinguser (m.mld_melding_key))
                     invoerder,
                  (SELECT mb.mld_meldbron_omschrijving
                     FROM mld_meldbron mb
                    WHERE mb.mld_meldbron_key = m.mld_meldbron_key)
                     meldbron,
                  m.mld_meldbron_key,
                  sd.ins_srtdiscipline_key ins_srtdiscipline_key,
                  sd.ins_srtdiscipline_omschrijving soortmelding,
                  md.ins_discipline_key ins_discipline_key,
                  CASE md.ins_discipline_key --MDUX#52700: Vakgroep "Aanvraag" en "Aanvraag Retail" samengevoegd, zelfde voor "Storing" en "Storing Retail"
                     WHEN 424 THEN 'Aanvraag'
                     WHEN 422 THEN 'Storing'
                     ELSE md.ins_discipline_omschrijving
                  END
                     productgroep,
                  s.mld_stdmelding_omschrijving subproductgroep,
                  smg.mld_stdmeldinggroep_naam subproductgroepgroep,
                  mbg.mld_behandelgroep_naam behandelgroep,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.mld_melding_behandelaar_key)
                     behandelaar,
                  m.mld_melding_behandelaar_key behandelaar_key,
                  (SELECT mld_statuses_omschrijving
                     FROM mld_statuses sta
                    WHERE sta.mld_statuses_key = m.mld_melding_status)
                     status,
                  CASE
                     WHEN m.mld_melding_einddatum >
                             COALESCE (
                                fac.gettrackingdate ('MLDAFM',
                                                     m.mld_melding_key),
                                fac.gettrackingdate ('MLDREJ',
                                                     m.mld_melding_key),
                                SYSDATE)
                     THEN
                        1
                     ELSE
                        0
                  END
                     plan_uitvoertijd_sla,
                  CASE
                     WHEN m.mld_melding_indult = 1
                          OR s.mld_stdmelding_slabewaken = 0
                     THEN
                        1
                     ELSE
                        0
                  END
                     sla_nvt,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'D', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkdgn,
                  DECODE (m.mld_melding_t_uitvoertijd.eenheid,
                          'U', m.mld_melding_t_uitvoertijd.tijdsduur,
                          NULL)
                     sla_werkuren,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'D', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijtdgn,
                  DECODE (m.mld_melding_t_respijt.eenheid,
                          'U', m.mld_melding_t_respijt.tijdsduur,
                          NULL)
                     sla_respijturen,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'D', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accptdgn,
                  DECODE (m.mld_melding_t_accepttijd.eenheid,
                          'U', m.mld_melding_t_accepttijd.tijdsduur,
                          NULL)
                     sla_accpturen,
                  m.mld_melding_datum datum,
                  CASE
                     WHEN s.mld_stdmelding_planbaar = 2 THEN TO_DATE (NULL)
                     ELSE m.mld_melding_einddatum
                  END
                     einddatum,
                  mld.getacceptdatum (m.mld_melding_datum,
                                      m.mld_stdmelding_key,
                                      og.alg_onroerendgoed_keys)
                     acceptdatum,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 5),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     afgemeld,
                  COALESCE (mld.getmeldingstatusdate (m.mld_melding_key, 4),
                            mld.getmeldingstatusdate (m.mld_melding_key, 1))
                     accepted,
                  mld.getactualuitvoer (m.mld_melding_key) t_doorlooptijd,
                  m.mld_melding_onderwerp onderwerp,
                  m.mld_melding_omschrijving omschrijving,
                  m.mld_melding_opmerking opmerking,
                  m.mld_melding_spoed,
                  m.mld_melding_satisfaction,
                  m.mld_melding_satisfaction_op,
                  m.mld_melding_flag
             FROM mld_melding m,
                  mld_stdmelding s,
                  alg_locatie l,
                  alg_district d,
                  alg_regio r,
                  alg_v_allonrgoed_gegevens og,
                  mld_discipline md,
                  mld_disc_params mdp,
                  mld_behandelgroep mbg,
                  ins_srtdiscipline sd,
                  mld_stdmeldinggroep smg
            WHERE     s.mld_stdmelding_key = m.mld_stdmelding_key
                  AND m.mld_alg_locatie_key = l.alg_locatie_key(+)
                  AND sd.ins_srtdiscipline_key = md.ins_srtdiscipline_key
                  AND md.ins_discipline_key = s.mld_ins_discipline_key
                  AND md.ins_discipline_key = mdp.mld_ins_discipline_key
                  AND s.mld_stdmeldinggroep_key =
                        smg.mld_stdmeldinggroep_key(+)
                  AND mdp.mld_behandelgroep_key =
                        mbg.mld_behandelgroep_key(+)
                  AND l.alg_district_key = d.alg_district_key(+)
                  AND d.alg_regio_key = r.alg_regio_key(+)
                  AND m.mld_alg_onroerendgoed_keys =
                        og.alg_onroerendgoed_keys(+)
                  AND m.fac_activiteit_key IS NULL
                  AND m.mld_melding_datum >=
                        TO_DATE ('01-01-2010', 'DD-MM-YYYY')) x;


--MDUX#52640 - Notificatie Keuring elektrisch handgereedschap, leverancier
CREATE OR REPLACE FORCE VIEW MDUX_V_NOTI_KEURING_EXTERN
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY,
   XEMAIL,
   XMOBILE
)
AS
   SELECT n.fac_srtnotificatie_code,
          NULL,
          b.prs_perslid_key,
          ('(Her)keuring' || ' - ' || a.prs_afdeling_omschrijving),
          d.ins_deel_key,
          NULL,
          l.prs_bedrijf_email,
          NULL
     FROM ins_deel d,
          ins_srtcontrole sc,
          prs_afdeling a,
          prs_perslid b,
          prs_bedrijf l,
          ins_kenmerkdeel kmd,
          ins_kenmerk km,
          ins_deelsrtcontrole dsc,
          fac_srtnotificatie n
    WHERE     sc.ins_srtcontrole_key = 270 --Jaarlijkse keuring Objectsoort Elektrisch handgereedschap
          AND d.ins_srtdeel_key = 401
	  AND d.ins_deel_key = kmd.ins_deel_key
          AND n.fac_srtnotificatie_code = 'CUST02'
          AND a.prs_afdeling_key = d.ins_alg_ruimte_key
          AND l.prs_bedrijf_key = fac.safe_to_number(kmd.ins_kenmerkdeel_waarde)
          AND km.ins_kenmerk_key = kmd.ins_kenmerk_key
          AND km.ins_srtkenmerk_key = 202                --Kenmerk Leverancier
          AND d.ins_deel_key = dsc.ins_deel_key(+)
          AND d.prs_perslid_key_beh = b.prs_perslid_key(+)
          AND d.ins_deel_verwijder IS NULL
          AND COALESCE (
                TRUNC (dsc.ins_deelsrtcontrole_plandatum),
                TRUNC(COALESCE (
                         (SELECT MAX(dsc.ins_deelsrtcontrole_plandatum)
                            FROM ins_deelsrtcontrole dsc
                           WHERE dsc.ins_deel_key = d.ins_deel_key
                                 AND sc.ins_srtcontrole_key = dsc.ins_srtcontrole_key
                                 AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                          TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key,
                                                 sc.ins_srtcontrole_key,
                                                 1))))) = TRUNC (SYSDATE + 14);


--MDUX#52640 - Notificatie Keuring elektrisch handgereedschap, interne organisatie
CREATE OR REPLACE FORCE VIEW MDUX_V_NOTI_KEURING_INTERN
(
   CODE,
   SENDER,
   RECEIVER,
   TEXT,
   KEY,
   XKEY
)
AS
   SELECT n.fac_srtnotificatie_code,
          NULL,
          b.prs_perslid_key,
          ('(Her)keuring' || ' - ' || a.prs_afdeling_omschrijving),
          d.ins_deel_key,
          NULL
     FROM ins_deel d,
          ins_srtcontrole sc,
          prs_afdeling a,
          prs_perslid b,
          ins_deelsrtcontrole dsc,
          fac_srtnotificatie n
    WHERE     sc.ins_srtcontrole_key = 270 --Jaarlijkse keuring Objectsoort Elektrisch handgereedschap
          AND d.ins_srtdeel_key = 401
          AND n.fac_srtnotificatie_code = 'CUST03'
          AND a.prs_afdeling_key = d.ins_alg_ruimte_key
          AND d.prs_perslid_key_beh = b.prs_perslid_key
          AND d.ins_deel_key = dsc.ins_deel_key(+)
          AND d.ins_deel_verwijder IS NULL
          AND COALESCE (
                TRUNC (dsc.ins_deelsrtcontrole_plandatum),
                TRUNC(COALESCE (
                         (SELECT MAX(dsc.ins_deelsrtcontrole_plandatum)
                            FROM ins_deelsrtcontrole dsc
                           WHERE dsc.ins_deel_key = d.ins_deel_key
                                 AND sc.ins_srtcontrole_key = dsc.ins_srtcontrole_key
                                 AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                          TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key,
                                                 sc.ins_srtcontrole_key,
                                                 1))))) = TRUNC (SYSDATE + 14);

CREATE OR REPLACE VIEW mdux_v_rap_taken
(
   objbehkey,
   objbehoms,
   lockey,
   locoms,
   levkey,
   levoms,
   sdkey,
   sdoms,
   sckey,
   scoms,
   dkey,
   doms,
   cpland,
   extra_key,
   xemail
)
AS
   SELECT (SELECT (kmd.ins_kenmerkdeel_waarde)
             FROM ins_kenmerk km, ins_kenmerkdeel kmd
            WHERE     km.ins_srtkenmerk_key = 305 -- Kenmerksoort "Vestigingsmanager"
                  AND km.ins_kenmerk_key = kmd.ins_kenmerk_key
                  AND d.ins_deel_key = kmd.ins_deel_key)
             AS objbehkey,
          (SELECT prs_perslid_naam_full
             FROM prs_v_perslid_fullnames_all p
            WHERE p.prs_perslid_key =
                     (SELECT MAX(fac.safe_to_number (
                                    kmd.ins_kenmerkdeel_waarde))
                        FROM ins_kenmerk km, ins_kenmerkdeel kmd
                       WHERE     km.ins_srtkenmerk_key = 305 -- Kenmerksoort "Vestigingsmanager"
                             AND km.ins_kenmerk_key = kmd.ins_kenmerk_key
                             AND d.ins_deel_key = kmd.ins_deel_key))
             AS objbehoms,
          (CASE
              WHEN d.ins_alg_ruimte_type = 'R' THEN l.alg_locatie_key
              WHEN d.ins_alg_ruimte_type = 'A' THEN a.prs_afdeling_key
              ELSE NULL
           END)
             locatie,
          (CASE
              WHEN d.ins_alg_ruimte_type = 'R'
              THEN
                 l.alg_locatie_omschrijving
              WHEN d.ins_alg_ruimte_type = 'A'
              THEN
                 a.prs_afdeling_omschrijving
              ELSE
                 NULL
           END)
             locatie_omschrijving,
          (SELECT prs_bedrijf_key
             FROM prs_bedrijf lev
            WHERE lev.prs_bedrijf_key =
                     (SELECT MAX(fac.safe_to_number (
                                    levk.ins_kenmerk_default))
                        FROM ins_kenmerk levk
                       WHERE levk.ins_kenmerk_verwijder IS NULL
                             AND levk.ins_srtkenmerk_key = 202 -- Kenmerksoort "Leverancier object"
                             AND levk.ins_srtinstallatie_key =
                                   sc.ins_srtcontrole_key))
             AS levkey,
          (SELECT prs_bedrijf_naam
             FROM prs_bedrijf lev
            WHERE lev.prs_bedrijf_key =
                     (SELECT MAX(fac.safe_to_number (
                                    levk.ins_kenmerk_default))
                        FROM ins_kenmerk levk
                       WHERE levk.ins_kenmerk_verwijder IS NULL
                             AND levk.ins_srtkenmerk_key = 202 -- Kenmerksoort "Leverancier object"
                             AND levk.ins_srtinstallatie_key =
                                   sc.ins_srtcontrole_key))
             AS levoms,
          sd.ins_srtdeel_key,
          sd.ins_srtdeel_omschrijving,
          sc.ins_srtcontrole_key,
          sc.ins_srtcontrole_omschrijving,
          d.ins_deel_key,
          d.ins_deel_omschrijving,
          COALESCE (
             TRUNC (dsc.ins_deelsrtcontrole_plandatum),
             TRUNC(COALESCE (
                      (SELECT MAX (dsc.ins_deelsrtcontrole_plandatum)
                         FROM ins_deelsrtcontrole dsc
                        WHERE dsc.ins_deel_key = d.ins_deel_key
                              AND sc.ins_srtcontrole_key =
                                    dsc.ins_srtcontrole_key
                              AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                      TRUNC(fac.nextcyclusdatedeel (d.ins_deel_key,
                                                    sc.ins_srtcontrole_key,
                                                    1)))))
             AS cpland,
          (CASE
              WHEN d.ins_alg_ruimte_type = 'R' THEN l.alg_locatie_key
              WHEN d.ins_alg_ruimte_type = 'A' THEN a.prs_afdeling_key
              ELSE NULL
           END)
             AS extra_key,
          (SELECT    prs_bedrijf_email
                  || ';'
                  || (SELECT prs_perslid_email
                        FROM prs_perslid
                       WHERE prs_perslid_key = 114914) -- Persoon '_Controle notificaties taken', hier gaan de notificatie emails (extern) dan ook naar toe.
             FROM (SELECT prs_bedrijf_email
                     FROM prs_bedrijf lev
                    WHERE lev.prs_bedrijf_key =
                             (SELECT MAX(fac.safe_to_number (
                                            levk.ins_kenmerk_default))
                                FROM ins_kenmerk levk
                               WHERE levk.ins_kenmerk_verwijder IS NULL
                                     AND levk.ins_srtkenmerk_key = 202 -- Kenmerksoort "Leverancier object"
                                     AND levk.ins_srtinstallatie_key =
                                           sc.ins_srtcontrole_key))
            WHERE (SELECT prs_bedrijf_email
                     FROM prs_bedrijf lev
                    WHERE lev.prs_bedrijf_key =
                             (SELECT MAX(fac.safe_to_number (
                                            levk.ins_kenmerk_default))
                                FROM ins_kenmerk levk
                               WHERE levk.ins_kenmerk_verwijder IS NULL
                                     AND levk.ins_srtkenmerk_key = 202 -- Kenmerksoort "Leverancier object"
                                     AND levk.ins_srtinstallatie_key =
                                           sc.ins_srtcontrole_key)) IS NOT NULL)
             AS xemail
     FROM ins_deel d,
          ins_srtdeel sd,
          ins_srtcontrole sc,
          alg_locatie l,
          ins_deelsrtcontrole dsc,
          ins_kenmerk km,
          ins_kenmerkdeel kmd,
          ins_srtkenmerk sk,
          prs_afdeling a
    WHERE     d.ins_srtdeel_key = sd.ins_srtdeel_key
          AND dsc.ins_srtcontrole_key = sc.ins_srtcontrole_key
          AND d.ins_deel_key = dsc.ins_deel_key(+)
          AND d.ins_deel_verwijder IS NULL
          AND dsc.ins_deel_key = d.ins_deel_key
          AND l.alg_locatie_key(+) = d.ins_alg_locatie_key
          AND a.prs_afdeling_key(+) = d.ins_alg_ruimte_key
          AND dsc.ins_deelsrtcontrole_datum IS NULL
          AND kmd.ins_kenmerk_key = km.ins_kenmerk_key
          AND km.ins_srtkenmerk_key = sk.ins_srtkenmerk_key
          AND kmd.ins_kenmerkdeel_waarde = '67' -- Waarde "ja" bij kenmerk 'Automatische notificatie'
          AND sk.ins_srtkenmerk_key = 281          -- Automatische notificatie
          AND km.ins_kenmerk_verwijder IS NULL
          AND km.ins_srtinstallatie_key = sd.ins_srtdeel_key;
		  
CREATE OR REPLACE VIEW mdux_v_noti_taken_intern
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey
)
AS
     SELECT 'CUST04',
            NULL,
            rap.objbehkey,
            ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            (SELECT MAX (fac_usrrap_key)
               FROM fac_usrrap
              WHERE fac_usrrap_view_name = 'MDUX_V_RAP_TAKEN')
               rapportnr,
            rap.extra_key
       FROM mdux_v_rap_taken rap
      WHERE COALESCE (
               TRUNC (rap.cpland),
               TRUNC(COALESCE (
                        (SELECT MAX (dsc.ins_deelsrtcontrole_plandatum)
                           FROM ins_deelsrtcontrole dsc
                          WHERE     dsc.ins_deel_key = rap.dkey
                                AND rap.sckey = dsc.ins_srtcontrole_key
                                AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                        TRUNC (fac.nextcyclusdatedeel (rap.dkey, rap.sckey, 1))))) =
               TRUNC (SYSDATE + 28)
            AND rap.objbehkey IS NOT NULL
   GROUP BY ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            rap.objbehkey,
            rap.extra_key
   UNION ALL -- Om ook de persoon '_Controle notificaties taken' een notificatie email te sturen
     SELECT 'CUST04',
            NULL,
            (SELECT prs_perslid_email
               FROM prs_perslid
              WHERE prs_perslid_key = 114914), -- Persoon '_Controle notificaties taken', hier gaan de notificatie emails (intern) dan ook naar toe.
            ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            (SELECT MAX (fac_usrrap_key)
               FROM fac_usrrap
              WHERE fac_usrrap_view_name = 'MDUX_V_RAP_TAKEN')
               rapportnr,
            rap.extra_key
       FROM mdux_v_rap_taken rap
      WHERE COALESCE (
               TRUNC (rap.cpland),
               TRUNC(COALESCE (
                        (SELECT MAX (dsc.ins_deelsrtcontrole_plandatum)
                           FROM ins_deelsrtcontrole dsc
                          WHERE     dsc.ins_deel_key = rap.dkey
                                AND rap.sckey = dsc.ins_srtcontrole_key
                                AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                        TRUNC (fac.nextcyclusdatedeel (rap.dkey, rap.sckey, 1))))) =
               TRUNC (SYSDATE + 28)
            AND rap.objbehkey IS NOT NULL
   GROUP BY ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            rap.objbehkey,
            rap.extra_key;

CREATE OR REPLACE VIEW mdux_v_noti_taken_extern
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
     SELECT 'CUST05',
            NULL,
            rap.objbehkey,
            ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            (SELECT MAX (fac_usrrap_key)
               FROM fac_usrrap
              WHERE fac_usrrap_view_name = 'MDUX_V_RAP_TAKEN')
               rapportnr,
            rap.extra_key,
            rap.xemail,
            NULL
       FROM mdux_v_rap_taken rap
      WHERE COALESCE (
               TRUNC (rap.cpland),
               TRUNC(COALESCE (
                        (SELECT MAX (dsc.ins_deelsrtcontrole_plandatum)
                           FROM ins_deelsrtcontrole dsc
                          WHERE     dsc.ins_deel_key = rap.dkey
                                AND rap.sckey = dsc.ins_srtcontrole_key
                                AND dsc.ins_deelsrtcontrole_status IN (5, 6)),
                        TRUNC (fac.nextcyclusdatedeel (rap.dkey, rap.sckey, 1))))) =
               TRUNC (SYSDATE + 28)
            AND rap.objbehkey IS NOT NULL
   GROUP BY ('Geplande taak - ' || rap.sdoms || ' - ' || rap.locoms),
            rap.objbehkey,
            rap.extra_key,
            rap.xemail;

--MDUX#56138 - Rapportage van simkaarten en elektronica met kenmerken
CREATE OR REPLACE VIEW mdux_v_rap_objecten
(
   deel_key,
   identificatie,
   beschrijving,
   organisatie,
   persoon,
   objectgroep,
   objectsoort,
   merk,
   type,
   serienummer,
   datum_in_gebruik,
   status,
   mobiel_nummer,
   abonnementstype,
   accountcode,
   eigen_risico,
   eigen_bijdrage,
   activatiedatum,
   geactiveerd,
   ten_behoeve_van,
   notities
)
AS
   SELECT ins.ins_deel_key,
          ins.ins_deel_omschrijving AS identificatie,
          ins.ins_deel_opmerking AS beschrijving,
          ins.prs_afdeling_omschrijving,
          ins.prs_perslid_volnaam,
          ins.ins_srtgroep_omschrijving AS objectgroep,
          ins.ins_srtdeel_omschrijving AS objectsoort,
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 23),                      --Merk
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 28),                      --Type
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 26),               --Serienummer
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 22),          --Datum in gebruik
          (SELECT DISTINCT kmd.fac_usrdata_omschr
             FROM ins_kenmerkdeel kd,
                  ins_v_srtdeel_kenmerk sk,
                  fac_v_aanwezigusrdata kmd
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND kd.ins_kenmerkdeel_waarde = kmd.fac_usrdata_key
                  AND sk.ins_srtkenmerk_key = 27),          --Status (lijstje)
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 54),             --Mobiel nummer
          (SELECT DISTINCT kmd.fac_usrdata_omschr
             FROM ins_kenmerkdeel kd,
                  ins_v_srtdeel_kenmerk sk,
                  fac_v_aanwezigusrdata kmd
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND kd.ins_kenmerkdeel_waarde = kmd.fac_usrdata_key
                  AND sk.ins_srtkenmerk_key = 82), --Abonnementstype  (lijstje)
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 21),               --Accountcode
          (SELECT DISTINCT kmd.fac_usrdata_omschr
             FROM ins_kenmerkdeel kd,
                  ins_v_srtdeel_kenmerk sk,
                  fac_v_aanwezigusrdata kmd
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND kd.ins_kenmerkdeel_waarde = kmd.fac_usrdata_key
                  AND sk.ins_srtkenmerk_key = 241),  --Eigen risico  (lijstje)
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 261),           --Eigen bijdrage
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 52),            --Activatiedatum
          (SELECT DISTINCT kmd.fac_usrdata_omschr
             FROM ins_kenmerkdeel kd,
                  ins_v_srtdeel_kenmerk sk,
                  fac_v_aanwezigusrdata kmd
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND kd.ins_kenmerkdeel_waarde = kmd.fac_usrdata_key
                  AND sk.ins_srtkenmerk_key = 53),    --Geactiveerd  (lijstje)
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 55),           --Ten behoeve van
          (SELECT DISTINCT kd.ins_kenmerkdeel_waarde
             FROM ins_kenmerkdeel kd, ins_v_srtdeel_kenmerk sk
            WHERE     kd.ins_deel_key = ins.ins_deel_key
                  AND sk.ins_kenmerk_key = kd.ins_kenmerk_key
                  AND sk.ins_srtkenmerk_key = 24)                   --Notities
     FROM ins_v_deel_gegevens ins
    WHERE ins_srtgroep_key IN (1, 2);

CREATE OR REPLACE VIEW mdux_v_rap_noti_opdr
(
   opdracht_nummer,
   opdracht_type,
   opdracht_district,
   opdracht_locatie,
   vakgroeptype,
   vakgroep,
   melding,
   omschrijving,
   opdracht_datum,
   melding_status,
   opdracht_status,
   opdracht_opmerking,
   extra_key,
   aanvrager,
   opdracht_behandelaar,
   type_uitvoerende,
   opdracht_uitvoerende_key,
   opdracht_uitvoerende,
   uitvoerende_email,
   notificeren
)
AS
   SELECT o.opdracht_nummer,
          o.opdracht_type,
          o.opdracht_district,
          o.opdracht_locatie,
          soortmelding AS vakgroeptype,
          productgroep AS vakgroep,
          subproductgroep AS melding,
          vomschrijving AS omschrijving,
          TRUNC (opdracht_datum) AS opdracht_datum,
          o.melding_status,
          o.opdracht_status,
          o.opdracht_opmerking,
          (SELECT mo.mld_uitvoerende_keys
             FROM mld_opdr mo, mld_v_uitvoerende u
            WHERE o.opdracht_key = mo.mld_opdr_key
                  AND mo.mld_uitvoerende_keys = u.mld_uitvoerende_key)
             AS extra_key,
          o.melder AS aanvrager,
          o.opdracht_behandelaar,
          (SELECT u.TYPE
             FROM mld_opdr mo, mld_v_uitvoerende u
            WHERE o.opdracht_key = mo.mld_opdr_key
                  AND mo.mld_uitvoerende_keys = u.mld_uitvoerende_key)
             AS type_uitvoerende,
          (SELECT u.mld_uitvoerende_key
             FROM mld_opdr mo, mld_v_uitvoerende u
            WHERE o.opdracht_key = mo.mld_opdr_key
                  AND mo.mld_uitvoerende_keys = u.mld_uitvoerende_key),
          o.opdracht_uitvoerende,
          CASE -- Emailadres opzoeken, bij leveranciers eerst uit relatie-tabel, vervolgens uit de technische adressen (eerst opdracht, dan bestelling, dan contract)
             WHEN (SELECT u.TYPE
                     FROM mld_opdr mo, mld_v_uitvoerende u
                    WHERE o.opdracht_key = mo.mld_opdr_key
                          AND mo.mld_uitvoerende_keys = u.mld_uitvoerende_key) =
                     'B'
             THEN
                COALESCE (
                   (SELECT b.prs_bedrijf_email
                      FROM mld_opdr mo, mld_v_uitvoerende u, prs_bedrijf b
                     WHERE o.opdracht_key = mo.mld_opdr_key
                           AND b.prs_bedrijf_key = mo.mld_uitvoerende_keys
                           AND mo.mld_uitvoerende_keys =
                                 u.mld_uitvoerende_key),
                   (SELECT ba.prs_bedrijfadres_url
                      FROM mld_opdr mo,
                           mld_v_uitvoerende u,
                           prs_bedrijf b,
                           prs_bedrijfadres ba
                     WHERE     o.opdracht_key = mo.mld_opdr_key
                           AND b.prs_bedrijf_key = mo.mld_uitvoerende_keys
                           AND ba.prs_bedrijf_key = b.prs_bedrijf_key
                           AND ba.prs_bedrijfadres_type = 'O'
                           AND mo.mld_uitvoerende_keys =
                                 u.mld_uitvoerende_key),
                   (SELECT ba.prs_bedrijfadres_url
                      FROM mld_opdr mo,
                           mld_v_uitvoerende u,
                           prs_bedrijf b,
                           prs_bedrijfadres ba
                     WHERE     o.opdracht_key = mo.mld_opdr_key
                           AND b.prs_bedrijf_key = mo.mld_uitvoerende_keys
                           AND ba.prs_bedrijf_key = b.prs_bedrijf_key
                           AND ba.prs_bedrijfadres_type = 'B'
                           AND mo.mld_uitvoerende_keys =
                                 u.mld_uitvoerende_key),
                   (SELECT ba.prs_bedrijfadres_url
                      FROM mld_opdr mo,
                           mld_v_uitvoerende u,
                           prs_bedrijf b,
                           prs_bedrijfadres ba
                     WHERE     o.opdracht_key = mo.mld_opdr_key
                           AND b.prs_bedrijf_key = mo.mld_uitvoerende_keys
                           AND ba.prs_bedrijf_key = b.prs_bedrijf_key
                           AND ba.prs_bedrijfadres_type = 'C'
                           AND mo.mld_uitvoerende_keys =
                                 u.mld_uitvoerende_key))
             ELSE
                (SELECT p.prs_perslid_email
                   FROM mld_opdr mo, mld_v_uitvoerende u, prs_perslid p
                  WHERE     o.opdracht_key = mo.mld_opdr_key
                        AND p.prs_perslid_key = mo.mld_uitvoerende_keys
                        AND mo.mld_uitvoerende_keys = u.mld_uitvoerende_key)
          END
             AS email,
          CASE
             WHEN (SELECT fac.safe_to_number (pkm.prs_kenmerklink_waarde)
                     FROM prs_kenmerklink pkm, prs_bedrijf lev, mld_opdr opdr
                    WHERE     pkm.prs_kenmerk_key = 1120		-- Kenmerk 'Notificeren' bij bedrijven (in Accept is dit nu 1121)
                          AND lev.prs_bedrijf_key = pkm.prs_link_key
                          AND opdr.mld_opdr_key = o.opdracht_key
                          AND opdr.mld_uitvoerende_keys = pkm.prs_link_key) =
                     67
             THEN
                'Ja'
          END
             AS notificeren
     FROM mld_v_udr_meldingopdracht o
    WHERE     o.opdracht_afgemeld IS NULL
          AND o.melding_afgemeld IS NULL
          AND o.opdracht_nummer IS NOT NULL;

CREATE OR REPLACE VIEW mdux_v_noti_opdr
(
   code,
   sender,
   receiver,
   text,
   key,
   xkey,
   xemail,
   xmobile
)
AS
     SELECT 'CUST06',
            NULL,
            NULL,
            'Verzoek statusinformatie opdrachten',
            (SELECT MAX (fac_usrrap_key)
               FROM fac_usrrap
              WHERE UPPER (fac_usrrap_view_name) = 'MDUX_V_RAP_NOTI_OPDR')
               rapportnr,
            rap.extra_key,
            rap.uitvoerende_email,
            NULL
       FROM mdux_v_rap_noti_opdr rap
      WHERE rap.notificeren = 'Ja'
   GROUP BY rap.extra_key, rap.uitvoerende_email;
												 
------ 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
