 --
-- $Id$
--
-- Script containing customer specific db-configuration for LOGC.
DEFINE thisfile = 'LOGC.SQL'
DEFINE dbuser   = '^LOGC'

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 ------
CREATE OR REPLACE PACKAGE LOGC
AS
  PROCEDURE tsk_emailrapport (p_applname   IN VARCHAR2);
END;
/


CREATE OR REPLACE PACKAGE BODY LOGC
AS
  PROCEDURE tsk_emailrapport (p_applname   IN VARCHAR2)
  AS
      v_errorhint          VARCHAR2 (1000);
      v_errormsg           VARCHAR2 (1000);
      oracle_err_num       NUMBER;
      oracle_err_mes       VARCHAR2 (200);
      v_today              VARCHAR2 (10);
      v_bijlage            VARCHAR2(4000);
      v_lastRun            VARCHAR2 (20);
      v_notiKey            NUMBER;
  BEGIN
    SELECT TO_CHAR(SYSDATE,'DD') INTO v_today FROM DUAL;
    IF v_today = '01' --op de eerste dag vd maand
    THEN
      SELECT TO_CHAR(fac_export_app_datum,'DD-MM-YYYY') INTO v_lastRun FROM fac_export_app WHERE fac_export_app_code='OPEN_MLD';
      SELECT fac_srtnotificatie_key INTO v_notiKey FROM fac_srtnotificatie WHERE fac_srtnotificatie_code='CUST02';
      IF v_LastRun = TO_CHAR(SYSDATE,'DD-MM-YYYY')   -- export heeft gedraaid
      THEN
          v_bijlage := '/../../Fplace5i/CUST/LOGC/export/mld_export/MLD_LogC_'||to_char(SYSDATE, 'yyyymmdd')||'.csv';
          --v_bijlage := '../../Branch20202/CUST/LOGC/export/mld_export/MLD_LogC_'||to_char(SYSDATE, 'yyyymmdd')||'.csv';

          INSERT INTO fac_notificatie (fac_srtnotificatie_key,
                                      prs_perslid_key_sender,
                                      fac_notificatie_status,
                                      fac_notificatie_receiver_email,
                                      fac_notificatie_oms,
                                      fac_notificatie_refkey,
                                      fac_notificatie_prioriteit,
                                      fac_notificatie_attachments)
                             VALUES (
                                 v_notiKey,
                                 3,
                                 2,
                                 'gerard.mensink@aareon.nl',
                                 'LogCentre meldingen per  '|| TO_CHAR(SYSDATE,'DD-MM-YYYY'),
                                 2,
                                 2,
                                 v_bijlage);
          COMMIT;
      END IF;

    END IF;
  EXCEPTION
     WHEN OTHERS
     THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
        v_errormsg := v_errormsg || ' ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
        fac.writelog (p_applname,
                      'E',
                      'Email rapport task afgebroken!: ' || v_errormsg,
                      v_errorhint);
        COMMIT;

  END;

END;
/

CREATE OR REPLACE PROCEDURE logc_monthly
AS
    v_errorhint          VARCHAR2 (1000);
    v_errormsg           VARCHAR2 (1000);
    oracle_err_num       NUMBER;
    oracle_err_mes       VARCHAR2 (200);
BEGIN
    logc.tsk_emailrapport('LOGC_MONTHLY');

END;
/



CREATE OR REPLACE VIEW logc_v_my_activity
AS
    SELECT to_date('1900-01-01', 'YYYY-MM-DD') - mld_melding_note_aanmaak HIDE_F_SORT,
           n.prs_perslid_key,
           n.mld_melding_note_aanmaak,
           mld_melding_onderwerp,
           n.mld_melding_note_omschrijving,
           n.mld_melding_key
      FROM mld_melding_note n, mld_melding m
     WHERE n.mld_melding_key = m.mld_melding_key
    UNION ALL
    SELECT to_date('1900-01-01', 'YYYY-MM-DD') - fac_tracking_datum HIDE_F_SORT,
           tr.prs_perslid_key,
           tr.fac_tracking_datum,
           mld_melding_onderwerp,
           COALESCE (tr.fac_tracking_oms, LCL.L ('lcl_mld_is_' || LOWER (fac_srtnotificatie_code), 1)),
           fac_tracking_refkey mld_melding_key
      FROM fac_tracking tr, fac_srtnotificatie str, mld_melding m
     WHERE     tr.fac_tracking_refkey = m.mld_melding_key
           AND tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
           AND str.fac_srtnotificatie_code <> 'MLDNOT'                                                          -- beetje dubbelop
           AND str.fac_srtnotificatie_xmlnode IN ('melding')
    ORDER BY mld_melding_note_aanmaak DESC;

CREATE OR REPLACE VIEW logc_v_rap_releasenotes
AS
   SELECT m.mld_melding_key,
          TRIM(NVL (
                  SUBSTR (mld_melding_opmerking,
                          0,
                          INSTR (mld_melding_opmerking, '*') - 1),
                  mld_melding_opmerking)
               || ' ('
               || m.mld_melding_key
               || ')')
             onderwerp,
          NVL (
             SUBSTR (mld_melding_opmerking,
                     INSTR (mld_melding_opmerking, '*') + 2),
             mld_melding_opmerking)
             omchrijving,
          st.mld_statuses_omschrijving status,
          mld_kenmerkmelding_waarde fixversie,
          CASE WHEN mld_melding_opmerking LIKE '--%' THEN 'Ja' ELSE 'Nee' END
             intern
     FROM mld_melding m, mld_kenmerkmelding mk, mld_statuses st
    WHERE     m.mld_melding_key = mk.mld_melding_key
          AND mld_kenmerk_key = 25
          AND m.mld_melding_status = st.mld_statuses_key;


--- IMPORT VAN URENBESTEDING FSN#51729
-- Requires
-- een flexkenmerk (op vakgroeptypeniveau) voor registratie van de bestede uren. De key is constante l_bestedingsflexkey
-- type iets van 8,2 en geen relevante min/max. Alleen lezen is goed genoeg

CREATE OR REPLACE PROCEDURE logc_import_besteding (p_import_key IN NUMBER)
IS
    c_delim             VARCHAR2 (1) := ';';
    v_newline           fac_imp_file.fac_imp_file_line%TYPE;                                               -- Input line
    v_errormsg          VARCHAR2 (1000);
    oracle_err_num      NUMBER;
    oracle_err_mes      VARCHAR2 (200);
    v_aanduiding        VARCHAR2 (200) := '';
    header_is_valid     NUMBER := 0;
    v_count_tot         NUMBER (10) := 0;
    v_count_import      NUMBER (10) := 0;
    v_ongeldig          NUMBER (1);
    -- De importvelden:
    v_transactietekst   VARCHAR2 (100);
    v_projectnummer     VARCHAR2 (100);
    v_uren              VARCHAR2 (25);

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

    COMMIT;

    FOR rec1 IN c1
    LOOP
        BEGIN
            v_newline := rec1.fac_imp_file_line;
            v_errormsg := 'Fout bij opvragen importregel';
            v_aanduiding := '';
            v_ongeldig := 0;

            -- Lees alle veldwaarden
            fac.imp_getfield (v_newline, c_delim, v_transactietekst);
            fac.imp_getfield (v_newline, c_delim, v_projectnummer);
            fac.imp_getfield (v_newline, c_delim, v_uren);
            v_aanduiding := '[' || v_transactietekst || '] ';

            -- 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.
            -- Transactietekst;MaxString(Project);Sum(Uren)
            IF (header_is_valid = 0)
            THEN
                IF     UPPER (v_transactietekst) = 'TRANSACTIETEKST'
                   AND UPPER (v_projectnummer) = 'MAXSTRING(PROJECT)'
                   AND UPPER (v_uren) = 'SUM(UREN)'
                THEN
                    header_is_valid := 1;
                END IF;
            ELSE
                v_count_tot := v_count_tot + 1;

                -- Controleer alle veldwaarden
                v_errormsg := 'Transactietekst (logcentrenummer) ongeldig/ongedefinieerd of te lang';
                v_transactietekst := TRIM (v_transactietekst);

                IF v_transactietekst IS NULL OR LENGTH (v_transactietekst) > 20 OR INSTR (v_transactietekst, '#') = 0
                THEN
                    v_ongeldig := 1;
                    fac.imp_writelog (p_import_key,
                                      'W',
                                      v_aanduiding || v_errormsg,
                                      'Regel wordt overgeslagen!');
                END IF;

                --
                v_errormsg := 'Projectnummer ongeldig/ongedefinieerd of te lang';
                v_projectnummer := TRIM (v_projectnummer);

                IF v_projectnummer IS NULL OR LENGTH (v_projectnummer) > 100
                THEN
                    v_ongeldig := 1;
                    fac.imp_writelog (p_import_key,
                                      'W',
                                      v_aanduiding || v_errormsg,
                                      'Regel wordt overgeslagen!');
                END IF;

                --
                v_errormsg := 'Uren ongeldig';
                v_uren := TRIM (v_uren);

                IF (v_uren IS NOT NULL AND fac.safe_to_number (replace(v_uren,',','.')) IS NULL)
                THEN
                    v_ongeldig := 1;
                    fac.imp_writelog (p_import_key,
                                      'W',
                                      v_aanduiding || v_errormsg,
                                      'Regel wordt overgeslagen!');
                END IF;

                -- Insert geformatteerde import record
                IF v_ongeldig = 0
                THEN
                    BEGIN
                        v_errormsg := 'Fout bij wegschrijven importregel';

                        INSERT INTO logc_imp_besteding (transactietekst, projectnummer, uren)
                            VALUES (v_transactietekst, v_projectnummer, fac.safe_to_number (replace(v_uren,',','.')));

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

                    COMMIT;
                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',
                          'Besteding: #ingelezen importregels = ' || TO_CHAR (v_count_tot),
                          '');
        fac.imp_writelog (p_import_key,
                          'S',
                          'Besteding: #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, 200);
        v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_aanduiding || v_errormsg,
                          'Inleesproces besteding afgebroken!');
END logc_import_besteding;
/

CREATE OR REPLACE PROCEDURE logc_update_besteding (p_import_key IN NUMBER)
AS
    CURSOR c1
    IS
        SELECT * FROM logc_imp_besteding;

    v_errormsg              VARCHAR2 (1000) := '';
    oracle_err_num          NUMBER;
    oracle_err_mes          VARCHAR2 (200);
    v_count                 NUMBER (10);
    v_count_tot             NUMBER (10);
    v_count_upd             NUMBER (10);
    l_meldingnr             NUMBER (10);
    l_bestedingsflexkey     NUMBER (10) := 141;                                                             -- constante
BEGIN
    v_count_tot := 0;
    v_count_upd := 0;

    FOR rec IN c1
    LOOP
        BEGIN
            v_count_tot := v_count_tot + 1;
            v_errormsg := 'Fout bij bepalen bestaan transactietekst [' || rec.transactietekst || '] ';

            l_meldingnr := SUBSTR (rec.transactietekst, INSTR (rec.transactietekst, '#') + 1);

            SELECT COUNT ( * )
              INTO v_count
              FROM mld_melding
             WHERE mld_melding_key = l_meldingnr;

            IF (v_count = 1)
            THEN
                v_errormsg := 'Fout bij bijwerken besteding [' || rec.transactietekst || ' (' || l_meldingnr || ')] ';
                mld.upsertmeldingkenmerk (l_bestedingsflexkey, l_meldingnr, rec.uren);
                -- jammer dat de upsert geen tracking doet
            END IF;

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

    fac.imp_writelog (p_import_key,
                      'S',
                      'Besteding: #ingelezen = ' || TO_CHAR (v_count_tot),
                      '');
    fac.imp_writelog (p_import_key,
                      'S',
                      'Besteding: #toegevoegd/bijgewerkt = ' || TO_CHAR (v_count_upd),
                      '');
    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
        v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_errormsg,
                          'Importproces Besteding afgebroken!');
END logc_update_besteding;
/

-- import nieuwe versie die ook dag en medewerker registreert (SAP versie)
CREATE OR REPLACE PROCEDURE logc_import_uren_besteding (p_import_key IN NUMBER)
IS
    c_delim             VARCHAR2 (1) := ';';
    v_newline           fac_imp_file.fac_imp_file_line%TYPE;                                               -- Input line
    v_errormsg          VARCHAR2 (1000);
    oracle_err_num      NUMBER;
    oracle_err_mes      VARCHAR2 (200);
    v_aanduiding        VARCHAR2 (200) := '';
    header_is_valid     NUMBER := 0;
    v_count_tot         NUMBER (10) := 0;
    v_count_import      NUMBER (10) := 0;
    v_ongeldig          NUMBER (1);
    v_field             VARCHAR2(100);
    v_index             NUMBER (2);
    v_maxdate           DATE;
    v_mindate           DATE;
    -- De importvelden:
    v_transactietekst   VARCHAR2 (1000);
    v_project           VARCHAR2 (100);
    v_project_oms       VARCHAR2 (100);
    v_uren              VARCHAR2 (25);
    v_datum_txt         VARCHAR2 (20);
    v_categorie         VARCHAR2 (100);
    v_werknemer         NUMBER (10);

    i_transactietekst   NUMBER(2);
    i_project           NUMBER(2);
    i_project_oms       NUMBER(2);
    i_uren              NUMBER(2);
    i_datum_txt         NUMBER(2);
    i_categorie         NUMBER(2);
    i_werknemer         NUMBER(2);

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

    COMMIT;

    FOR rec1 IN c1
    LOOP
        BEGIN
            v_newline := rec1.fac_imp_file_line;
            v_errormsg := 'Fout bij opvragen importregel';
            v_aanduiding := '';
            v_ongeldig := 0;

            IF rec1.fac_imp_file_index = 1
            THEN
               v_index := 0;
               v_field := 'QueQeLeQue';
               WHILE v_field IS NOT NULL AND  v_index < 30
               LOOP
                  fac.imp_getfield (v_newline, c_delim, v_field);
                  v_index := v_index + 1;
                  CASE UPPER(v_field)
                  WHEN 'DATUM'                THEN i_datum_txt := v_index;
                  WHEN 'ALGEMENE ONTVANGER'   THEN i_project := v_index;
                  WHEN 'RUBRICERINGSOMS.' THEN i_project_oms := v_index;
                  WHEN 'PRESTATIESOORT'       THEN i_categorie := v_index;
                  WHEN 'PERSONEELSNUMMER'    THEN i_werknemer := v_index;
                  WHEN 'AANTAL (MAATEENHEID)'       THEN i_uren := v_index;
                  WHEN 'K. TEKST'          THEN i_transactietekst := v_index;
                  ELSE
                     NULL;
                  END CASE;

               END LOOP;
               IF     i_datum_txt > 0
                  AND i_project > 0
                  AND i_project_oms > 0
                  AND i_categorie > 0
                  AND i_werknemer > 0
                  AND i_uren > 0
                  AND i_transactietekst > 0
               THEN
                  header_is_valid := 1;
               END IF;
            ELSIF v_newline LIKE ';;;;;;%'
            THEN
               NULL; -- Lege regels slaan we over
            ELSE
               -- Lees alle veldwaarden
               fac.imp_getfield_nr (v_newline, c_delim, i_transactietekst, v_transactietekst);
               fac.imp_getfield_nr (v_newline, c_delim, i_project, v_project);
               fac.imp_getfield_nr (v_newline, c_delim, i_project_oms, v_project_oms);
               fac.imp_getfield_nr (v_newline, c_delim, i_uren, v_uren);
               fac.imp_getfield_nr (v_newline, c_delim, i_datum_txt, v_datum_txt);
               fac.imp_getfield_nr (v_newline, c_delim, i_categorie, v_categorie);
               fac.imp_getfield_nr (v_newline, c_delim, i_werknemer, v_werknemer);

               IF (header_is_valid = 1)
               THEN
                  v_count_tot := v_count_tot + 1;
                  v_aanduiding := SUBSTR(v_transactietekst || ' ' || v_datum_txt || ' ' || v_categorie, 1, 200);

                  -- Controleer alle veldwaarden
                  --
                  v_errormsg := 'Categorie ongeldig';
                  v_categorie := TRIM (v_categorie);

                  IF (v_categorie IS NOT NULL AND LENGTH(v_categorie) > 10)
                  THEN
                     v_ongeldig := 1;
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                  END IF;

                  v_errormsg := 'Transactietekst (logcentrenummer) ongeldig/ongedefinieerd of te lang';
                  v_transactietekst := TRIM (v_transactietekst);

                  v_transactietekst := REPLACE (v_transactietekst, '# ', '#');

                  IF v_transactietekst IS NOT NULL AND INSTR(v_transactietekst, '#') > 0
                  THEN
                     v_transactietekst := REGEXP_SUBSTR (v_transactietekst , '[[:alpha:]]{0,}#[[:digit:]]{5,}', 1, 1, 'i');
                     IF v_transactietekst IS NULL
                     THEN
                        --v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'W',
                                          v_aanduiding || v_errormsg,
                                          '');
                     END IF;
                  ELSE
                     v_transactietekst := NULL;
                  END IF;

                  --
                  v_errormsg := 'Project ongeldig/ongedefinieerd of te lang';
                  v_project := TRIM (v_project);

                  IF v_project IS NULL OR LENGTH (v_project) > 100
                  THEN
                     v_ongeldig := 1;
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                  END IF;

                  --
                  v_errormsg := 'Uren ongeldig';
                  v_uren := TRIM (v_uren);

                  IF (v_uren IS NOT NULL AND fac.safe_to_number (replace(v_uren,',','.')) IS NULL)
                  THEN
                     v_ongeldig := 1;
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                  END IF;

                  --
                  v_errormsg := 'Datum ongeldig';
                  v_datum_txt := TRIM (v_datum_txt);

                  IF (v_datum_txt IS NOT NULL AND fac.safe_to_date (v_datum_txt,'dd-mm-yyyy') IS NULL)
                  THEN
                     v_ongeldig := 1;
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                  END IF;


                  --
                  v_errormsg := 'Werknemer ongeldig';
                  v_werknemer := TRIM (v_werknemer);

                  IF (v_werknemer IS NOT NULL AND fac.safe_to_number (v_werknemer) IS NULL)
                  THEN
                     v_ongeldig := 1;
                     fac.imp_writelog (p_import_key,
                                       'E',
                                       v_aanduiding || v_errormsg,
                                       'Regel wordt overgeslagen!');
                  END IF;

                  -- Insert geformatteerde import record
                  IF v_ongeldig = 0
                  THEN
                     BEGIN
                        v_errormsg := 'Fout bij wegschrijven importregel';

                        INSERT INTO logc_imp_uren_besteding (transactietekst, project, project_oms, uren, datum_txt, categorie, werknemer)
                            VALUES (v_transactietekst, v_project, v_project_oms, fac.safe_to_number (replace(v_uren,',','.')), v_datum_txt, v_categorie, v_werknemer);

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

                     COMMIT;
                  END IF;
               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!' || '(' ||
                               i_datum_txt || '-' ||
                               i_project || '-' ||
                               i_project_oms || '-' ||
                               i_categorie  || '-' ||
                               i_werknemer  || '-' ||
                               i_uren  || '-' ||
                               i_transactietekst || ')');
    ELSE
        fac.imp_writelog (p_import_key,
                          'S',
                          'Besteding: #ingelezen importregels = ' || TO_CHAR (v_count_tot),
                          '');
        fac.imp_writelog (p_import_key,
                          'S',
                          'Besteding: #ongeldige importregels = ' || TO_CHAR (v_count_tot - v_count_import),
                          '');
    END IF;

    SELECT MAX (TO_DATE (datum_txt, 'dd-mm-yyyy')) maxdate,
           MIN (TO_DATE (datum_txt, 'dd-mm-yyyy')) mindate,
           COUNT(*)
      INTO v_maxdate, v_mindate, v_count_import
      FROM logc_imp_uren_besteding
     WHERE datum IS NULL;

    SELECT count(*)
      INTO v_count_tot
      FROM logc_imp_uren_besteding
     WHERE datum IS NOT NULL
       AND datum >= v_mindate
       AND datum <= v_maxdate;

    fac.imp_writelog (p_import_key,
                      'S',
                      'Besteding: #ingelezen importregels = ' || TO_CHAR (v_count_import) || ' vervangt #regels uit import = ' || TO_CHAR (v_count_tot),
                      '');

    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
        v_errormsg := v_errormsg || oracle_err_num || '/' || oracle_err_mes || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_aanduiding || v_errormsg,
                          'Inleesproces besteding afgebroken!');
END logc_import_uren_besteding;
/


CREATE OR REPLACE PROCEDURE logc_update_uren_besteding (p_import_key IN NUMBER)
AS

    v_errormsg              VARCHAR2 (1000) := '';
    oracle_err_num          NUMBER;
    oracle_err_mes          VARCHAR2 (200);
    v_count                 NUMBER (10);
    v_count_tot             NUMBER (10);
    v_count_upd             NUMBER (10);
    l_meldingnr             NUMBER (10);
    l_bestedingsflexkey     NUMBER (10) := 141;                  -- constante
    v_maxdate               DATE;
    v_mindate               DATE;
BEGIN
    v_count_tot := 0;
    v_count_upd := 0;

    SELECT MAX (TO_DATE (datum_txt, 'dd-mm-yyyy')) maxdate,
           MIN (TO_DATE (datum_txt, 'dd-mm-yyyy')) mindate
      INTO v_maxdate, v_mindate
      FROM logc_imp_uren_besteding
     WHERE datum IS NULL;

    -- We verwijderen de data die we nu (opnieuw) ontvangen hebben. Misschien zit er een correctieregel bij.
    DELETE logc_imp_uren_besteding
     WHERE datum IS NOT NULL
       AND datum >= v_mindate
       AND datum <= v_maxdate;

    -- Voeg de keys van de meldingen toe.
    UPDATE logc_imp_uren_besteding i
       SET mld_melding_key = (SELECT mld_melding_key
                                FROM mld_melding m
                               WHERE m.mld_melding_key = fac.safe_to_number(SUBSTR(i.transactietekst, instr(transactietekst, '#')+1,100)))
     WHERE datum IS NULL;

    -- En set de datum om naar een echt datumveld. Dat maakt de rapportages makkelijker.
    UPDATE logc_imp_uren_besteding i
       SET datum = TO_DATE (datum_txt, 'dd-mm-yyyy')
     WHERE datum IS NULL;



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


CREATE OR REPLACE VIEW logc_v_uren_bron
AS
    SELECT u.project,
           categorie,
           uren,
           m.mld_melding_key,
           datum,
           prs_perslid_naam,
           project_oms,
           COALESCE (
               (SELECT fac.safe_to_number (prs_kenmerklink_waarde)
                  FROM prs_kenmerklink kl
                 WHERE     kl.prs_kenmerk_key = 1280
                       AND kl.prs_link_key = p.prs_perslid_key),
               40)                                      upw,
           ud.fac_usrdata_omschr                          afdeling,
           COALESCE (
               SUBSTR (su.fac_usrdata_omschr,
                       1,
                       INSTR (su.fac_usrdata_omschr, ' -- ') - 1),
               'Onbekend')                              srturen,
           DECODE (project_oms, 'Compensatie', 1, 0)    compensatie,
           p.prs_perslid_key,
           a.prs_afdeling_naam,
           COALESCE(a1.prs_afdeling_naam, a.prs_afdeling_naam) prs_afdeling_parent_naam,
           COALESCE(a1.prs_afdeling_key, a.prs_afdeling_key) fclt_3d_afdeling_key
      FROM logc_imp_uren_besteding  u,
           prs_perslid              p,
           prs_kenmerklink          kl,
           fac_usrdata              ud,
           prs_afdeling             a,
           prs_afdeling             a1,
           mld_melding              m,
           (SELECT distinct u2.project, ud.fac_usrdata_omschr
              FROM fac_usrdata ud, logc_imp_uren_besteding u2
             WHERE fac_usrtab_key = 281
               AND u2.project LIKE ud.fac_usrdata_code) su
     WHERE     u.werknemer = p.prs_perslid_nr
           AND u.project = su.project(+)
           AND kl.prs_link_key = p.prs_perslid_key
           AND kl.prs_kenmerk_key = 1300 -- Afdeling
           AND FAC.safe_to_number(kl.prs_kenmerklink_waarde) = ud.fac_usrdata_key
           AND u.mld_melding_key = m.mld_melding_key(+)
           AND m.prs_afdeling_key = a.prs_afdeling_key(+)
           and a.prs_afdeling_parentkey = a1.prs_afdeling_key(+)
           AND datum > TO_DATE ('20200101', 'yyyymmdd');

CREATE OR REPLACE PROCEDURE logc_import_projecten (p_import_key IN NUMBER)
IS
    c_delim                  VARCHAR2 (1) := ';';
    v_newline                fac_imp_file.fac_imp_file_line%TYPE; -- Input line
    v_errormsg               VARCHAR2 (1000);
    oracle_err_num           NUMBER;
    oracle_err_mes           VARCHAR2 (200);
    v_aanduiding             VARCHAR2 (200) := '';
    header_is_valid          NUMBER := 0;
    v_count_tot              NUMBER (10) := 0;
    v_count_import           NUMBER (10) := 0;
    v_ongeldig               NUMBER (1);
    v_field                  VARCHAR2 (100);
    v_index                  NUMBER (2);
    v_maxdate                DATE;
    v_mindate                DATE;
    -- De importvelden:
    v_KlantOmschrijving      VARCHAR2 (100);
    v_WBSelement             VARCHAR2 (100);
    v_Projectsoort           VARCHAR2 (100);
    v_Omschrijving           VARCHAR2 (100);
    v_Status                 VARCHAR2 (100);
    v_Debiteur               VARCHAR2 (100);
    v_PlanWorktime           VARCHAR2 (100);
    v_ActualWorktime         VARCHAR2 (100);
    v_ActualWorkCosts        VARCHAR2 (100);
    v_PlanWorkCosts          VARCHAR2 (100);
    v_InvoiceReceived        VARCHAR2 (100);
    v_InvoicePosted          VARCHAR2 (100);
    v_ProjektManagerLogin    VARCHAR2 (100);
    v_SalesPersonNr          VARCHAR2 (100);
    v_NameSalesPerson        VARCHAR2 (100);
    v_EndPlanTxt             VARCHAR2 (100);
    v_prs_kostenplaats_key   NUMBER (10);

    v_budgethouder_key       NUMBER (10);
    v_kostenplaats_key       NUMBER (10);
    v_kostenplaatsgrp_key    NUMBER (10);

    CURSOR c1 IS
          SELECT *
            FROM fac_imp_file
           WHERE fac_import_key = p_import_key
        ORDER BY fac_imp_file_index;
BEGIN
    FOR rec1 IN c1
    LOOP
        BEGIN
            v_newline := rec1.fac_imp_file_line;
            v_errormsg := 'Fout bij opvragen importregel';
            v_aanduiding := '';
            v_ongeldig := 0;

            IF v_newline LIKE ';;;;;;%'
            THEN
                NULL;                             -- Lege regels slaan we over
            ELSE
                -- Lees alle veldwaarden
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     2,
                                     v_KlantOmschrijving);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     3,
                                     v_WBSelement);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     4,
                                     v_Projectsoort);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     5,
                                     v_Omschrijving);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     6,
                                     v_Status);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     7,
                                     v_Debiteur);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     10,
                                     v_PlanWorktime);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     11,
                                     v_ActualWorktime);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     12,
                                     v_ActualWorkCosts);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     13,
                                     v_PlanWorkCosts);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     14,
                                     v_InvoiceReceived);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     15,
                                     v_InvoicePosted);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     16,
                                     v_ProjektManagerLogin);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     17,
                                     v_SalesPersonNr);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     18,
                                     v_NameSalesPerson);
                fac.imp_getfield_nr (v_newline,
                                     c_delim,
                                     19,
                                     v_EndPlanTxt);

                IF (header_is_valid = 0)
                THEN
                    IF     UPPER (v_KlantOmschrijving) = 'OMSCHRIJVING'
                       AND UPPER (v_WBSelement) = 'WBS-ELEMENT'
                       AND UPPER (v_Projectsoort) = 'PROJECTSOORT'
                       AND UPPER (v_Omschrijving) = 'OMSCHRIJVING'
                       AND UPPER (v_Status) = 'STATUS'
                       AND UPPER (v_Debiteur) = 'KLANT'
                       AND UPPER (v_PlanWorktime) = 'PLAN WORKTIME'
                       AND UPPER (v_ActualWorktime) = 'ACTUAL WORKTIME'
                       AND UPPER (v_ActualWorkCosts) = 'ACTUAL WORK COSTS'
                       AND UPPER (v_PlanWorkCosts) = 'PLAN WORK COSTS'
                       AND UPPER (v_InvoiceReceived) = 'INVOICE RECEIVED'
                       AND UPPER (v_InvoicePosted) = 'INVOICE POSTED'
                       AND UPPER (v_ProjektManagerLogin) = 'PROJEKTLEITER'
                       AND UPPER (v_SalesPersonNr) = 'SALES PERSON'
                       AND UPPER (v_NameSalesPerson) = 'NAME SALES REPRESEN'
                    THEN
                        header_is_valid := 1;
                    END IF;
                ELSE
                    v_count_tot := v_count_tot + 1;
                    v_aanduiding := v_WBSelement || ' - ';

                    -- We gaan duizendtal tekens verwijderen en vervolgens de komma als scheidingsteken vervangen
                    -- door een punt
                       v_PlanWorktime := REPLACE(REPLACE(v_PlanWorktime, '.'), ',', '.');
                       v_ActualWorktime := REPLACE(REPLACE(v_ActualWorktime, '.'), ',', '.');
                       v_ActualWorkCosts := REPLACE(REPLACE(v_ActualWorkCosts, '.'), ',', '.');
                       v_PlanWorkCosts := REPLACE(REPLACE(v_PlanWorkCosts, '.'), ',', '.');
                       v_InvoiceReceived := REPLACE(REPLACE(v_InvoiceReceived, '.'), ',', '.');
                       v_InvoicePosted := REPLACE(REPLACE(v_InvoicePosted, '.'), ',', '.');

                    -- Controleer alle veldwaarden
                    --
                    v_errormsg := 'Projectsoort ongeldig ' || v_Projectsoort;

                    IF v_Projectsoort NOT IN ('WF', 'DA')
                    THEN
                       fac.imp_writelog (p_import_key,
                                         'E',
                                         v_aanduiding || v_errormsg,
                                         'Regel wordt overgeslagen!');
                    ELSIF v_Projectsoort IS NULL
                    THEN
                       v_ongeldig := 1;
                    ELSE
                        BEGIN
                            SELECT prs_kostenplaatsgrp_key
                              INTO v_kostenplaatsgrp_key
                              FROM prs_kostenplaatsgrp
                             WHERE prs_kostenplaatsgrp_nr =
                                   DECODE (v_Projectsoort,
                                           'WF', 'F',
                                           'DA', 'N');
                        EXCEPTION
                            WHEN NO_DATA_FOUND
                            THEN
                                v_ongeldig := 1;
                                fac.imp_writelog (
                                    p_import_key,
                                    'E',
                                    v_aanduiding || v_errormsg,
                                    'Regel wordt overgeslagen!');
                        END;
                    END IF;

                    IF v_Status <> 'R'
                    THEN
                        v_ongeldig := 1;
                    END IF;

                    v_errormsg :=
                        'v_PlanWorktime ongeldig ' || v_PlanWorktime;

                    IF FAC.safe_to_number (v_PlanWorktime) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                        'v_ActualWorktime ongeldig ' || v_ActualWorktime;

                    IF FAC.safe_to_number (v_ActualWorktime) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                        'v_ActualWorkCosts ongeldig ' || v_ActualWorkCosts;

                    IF FAC.safe_to_number (v_ActualWorkCosts) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                        'v_PlanWorkCosts ongeldig ' || v_PlanWorkCosts;

                    IF FAC.safe_to_number (v_PlanWorkCosts) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                        'v_InvoiceReceived ongeldig ' || v_InvoiceReceived;

                    IF FAC.safe_to_number (v_InvoiceReceived) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                        'v_InvoicePosted ongeldig ' || v_InvoicePosted;

                    IF FAC.safe_to_number (v_InvoicePosted) IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    v_errormsg :=
                           'v_ProjektManagerLogin ongeldig '
                        || v_ProjektManagerLogin;

                    BEGIN
                        SELECT prs_perslid_key
                          INTO v_budgethouder_key
                          FROM prs_perslid
                         WHERE prs_perslid_oslogin = v_ProjektManagerLogin;
                    EXCEPTION
                        WHEN NO_DATA_FOUND
                        THEN
                            v_ongeldig := 1;
                    END;

                    v_errormsg :=
                        'v_PlanEndTxt ongeldig ' || v_EndPlanTxt;

                    IF v_EndPlanTxt IS NOT NULL AND FAC.safe_to_date (v_EndPlanTxt,'dd-mm-yyyy') IS NULL
                    THEN
                        v_ongeldig := 1;
                        fac.imp_writelog (p_import_key,
                                          'E',
                                          v_aanduiding || v_errormsg,
                                          'Regel wordt overgeslagen!');
                    END IF;

                    -- We gaan eerst de kostenplaats aanpassen
                    IF v_ongeldig = 0
                    THEN
                        BEGIN
                            v_errormsg :=
                                'Kijken of de kostenplaats al bestaat';

                            BEGIN
                                SELECT prs_kostenplaats_key
                                  INTO v_kostenplaats_key
                                  FROM prs_kostenplaats
                                 WHERE prs_kostenplaats_nr = v_WBSelement;
                            EXCEPTION
                                WHEN NO_DATA_FOUND
                                THEN
                                    INSERT INTO prs_kostenplaats (
                                                    prs_kostenplaats_nr,
                                                    prs_kostenplaats_omschrijving,
                                                    prs_kostenplaatsgrp_key,
                                                    prs_kostenplaats_module)
                                         VALUES (
                                             SUBSTR (v_WBSelement, 1, 30),
                                             SUBSTR (v_Omschrijving, 1, 60),
                                             v_kostenplaatsgrp_key,
                                             'PRS')
                                      RETURNING prs_kostenplaats_key
                                           INTO v_kostenplaats_key;

                            END;

                            BEGIN
                               SELECT prs_kostenplaats_key
                                 INTO v_kostenplaats_key
                                 FROM logc_imp_projecten
                                WHERE prs_kostenplaats_key = v_kostenplaats_key;
                            EXCEPTION WHEN NO_DATA_FOUND
                            THEN
                               INSERT INTO logc_imp_projecten (
                                           prs_kostenplaats_key)
                                   VALUES (v_kostenplaats_key);
                            END;

                            UPDATE prs_kostenplaats
                               SET prs_kostenplaats_omschrijving =
                                       SUBSTR (v_Omschrijving, 1, 60),
                                   prs_kostenplaatsgrp_key =
                                       v_kostenplaatsgrp_key,
                                   prs_kostenplaats_module = 'PRS',
                                   prs_kostenplaats_eind = NULL,
                                   prs_perslid_key = v_budgethouder_key
                             WHERE prs_kostenplaats_key = v_kostenplaats_key;

                            UPDATE logc_imp_projecten
                               SET KlantOmschrijving =
                                       SUBSTR (v_KlantOmschrijving, 1, 100),
                                   WBSelement = SUBSTR (v_WBSelement, 1, 30),
                                   Projectsoort =
                                       SUBSTR (v_Projectsoort, 1, 2),
                                   Omschrijving =
                                       SUBSTR (v_Omschrijving, 1, 100),
                                   Status = SUBSTR (v_Status, 1, 1),
                                   Debiteur = SUBSTR (v_Debiteur, 1, 10),
                                   PlanWorktime =
                                       FAC.safe_to_number (v_PlanWorktime),
                                   ActualWorktime =
                                       FAC.safe_to_number (v_ActualWorktime),
                                   ActualWorkCosts =
                                       FAC.safe_to_number (v_ActualWorkCosts),
                                   PlanWorkCosts =
                                       FAC.safe_to_number (v_PlanWorkCosts),
                                   InvoiceReceived =
                                       FAC.safe_to_number (v_InvoiceReceived),
                                   InvoicePosted =
                                       FAC.safe_to_number (v_InvoicePosted),
                                   ProjektManagerLogin =
                                       SUBSTR (v_ProjektManagerLogin, 1, 10),
                                   SalesPersonNr =
                                       SUBSTR (v_SalesPersonNr, 1, 10),
                                   NameSalesPerson =
                                       SUBSTR (v_NameSalesPerson, 1, 40),
                                   End_plan = to_date (v_EndPlanTxt,'dd-mm-yyyy'),
                                   fac_import_key = p_import_key
                             WHERE prs_kostenplaats_key = v_kostenplaats_key;


                            COMMIT;
                        END;
                    END IF;
                END IF;
            END IF;
        END;
    END LOOP;

    UPDATE prs_kostenplaats
       SET prs_kostenplaats_eind = SYSDATE
     WHERE     prs_kostenplaats_key NOT IN (SELECT prs_kostenplaats_key
                                              FROM logc_imp_projecten
                                             WHERE fac_import_key = p_import_key)
           AND prs_kostenplaatsgrp_key IN (22, 23)    -- Nacalculatie, Fixed budget
           AND prs_kostenplaats_eind IS NULL;

    IF header_is_valid = 0
    THEN
        fac.imp_writelog (
            p_import_key,
            'E',
            'Ongeldig importbestand',
               'Geen header of header niet volgens specificatie!'
            || '('
            || v_KlantOmschrijving
            || '-'
            || v_WBSelement
            || '-'
            || v_Projectsoort
            || '-'
            || v_Omschrijving
            || '-'
            || v_Status
            || '-'
            || v_Debiteur
            || '-'
            || v_ActualWorktime
            || '-'
            || v_ActualWorkCosts
            || '-'
            || v_PlanWorkCosts
            || '-'
            || v_InvoiceReceived
            || '-'
            || v_InvoicePosted
            || '-'
            || v_ProjektManagerLogin
            || '-'
            || v_SalesPersonNr
            || '-'
            || v_NameSalesPerson
            || ')');
    END IF;


    COMMIT;
EXCEPTION
    WHEN OTHERS
    THEN
        oracle_err_num := SQLCODE;
        oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
        v_errormsg :=
            v_errormsg || oracle_err_num || '/' || oracle_err_mes || ')';
        fac.imp_writelog (p_import_key,
                          'E',
                          v_aanduiding || v_errormsg,
                          'Inleesproces projecten afgebroken!');
END logc_import_projecten;
/

CREATE OR REPLACE VIEW logc_v_rap_projecten
AS
    SELECT d.prs_afdeling_key
               fclt_3d_afdeling_key,
           k.prs_kostenplaats_nr,
           k.prs_kostenplaats_omschrijving,
           k.prs_kostenplaats_begin,
           k.prs_kostenplaats_eind,
           kg.prs_kostenplaatsgrp_oms,
           p.klantomschrijving,
           p.debiteur,
           p.planworktime,
           p.actualworktime,
           DECODE (p.planworktime,
                   1, TO_NUMBER (NULL),
                   0, TO_NUMBER (NULL),
                   p.planworktime - p.actualworktime)
               remainingworktime,
           p.planworkcosts,
           p.actualworkcosts,
           DECODE (p.planworkcosts,
                   1, TO_NUMBER (NULL),
                   0, TO_NUMBER (NULL),
                   p.planworkcosts - p.actualworkcosts)
               remainingworkcosts,
           p.invoiceposted,
           p.invoicereceived,
           pf.prs_perslid_naam_full
               projectmanager,
           p.namesalesperson
               salesconctact,
           p.end_plan,
           i.fac_import_datum_gelezen
               syncdate,
           1 dummy
      FROM prs_kostenplaats             k,
           prs_kostenplaatsgrp          kg,
           logc_imp_projecten           p,
           fac_import                   i,
           (SELECT prs_link_key               prs_afdeling_key,
                   prs_kenmerklink_waarde     debiteur
              FROM prs_kenmerklink
             WHERE     prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1320) d,            -- debiteurnummer
           prs_v_perslid_fullnames_all  pf
     WHERE     k.prs_kostenplaats_key = p.prs_kostenplaats_key
           AND k.prs_kostenplaatsgrp_key = kg.prs_kostenplaatsgrp_key
           AND p.fac_import_key = i.fac_import_key(+)
           AND k.prs_perslid_key = pf.prs_perslid_key(+)
           AND p.debiteur = d.debiteur(+);


-- View voor standaard kwartaalrapportage aan klanten (zie ticket 57657)
CREATE OR REPLACE VIEW logc_v_rap_klantoverzicht_mld
(
   koptekst,
   bedrijf,
   hoofdklant,
   extra_key,
   [REDACTED],
   klantcode_melding,
   aanvrager,
   prs_perslid_key,
   aanvrager_afdeling,
   aanvrager_kp,
   melding_datum,
   melding_datum_tekst,
   melding_key,
   melding_nr,
   onderwerp,
   omschrijving,
   samenvatting,
   soort_melding,
   vakgroep,
   vakgroep_type,
   huidige_status,
   actie_status,
   aanspreekpunt_facilitor,
   behandelteam_actief,
   streefdatum_gereed,
   datum_afgemeld,
   laatste_actiedatum,
   laatste_notitie,
   doorlooptijd_werkdagen,
   klantreferentie,
   planning,
   raming,
   gekoppeld_aan
)
AS
   SELECT (CASE
              WHEN m.mld_melding_datum >= TRUNC (SYSDATE, 'Q') -- Alle meldingen dit kwartaal
              THEN
                 '0'                          -- 'Alle meldingen dit kwartaal'
              WHEN m.mld_melding_datum >=
                      ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
                   AND m.mld_melding_datum <= TRUNC (SYSDATE, 'Q') - 1
              THEN
                 '1'                     -- Alle meldingen afgelopen kwartaal'
              WHEN m.mld_melding_datum <
                      ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
                   AND m.mld_melding_status IN (0, 2, 3, 4, 7, 99)
              THEN
                 '3' -- Alle LOPENDE meldingen die ouder zijn dan afgelopen kwartaal'
              ELSE
                 '1' -- 'Alle meldingen die OUDER zijn dan afgelopen kwartaal, maar die wel afgelopen kwartaal zijn behandeld en afgemeld'
           END)
             koptekst,
          b.prs_bedrijf_naam bedrijf,
          (SELECT prs_afdeling_naam
             FROM prs_afdeling
            WHERE prs_afdeling_key =
                     COALESCE (am.prs_afdeling_parentkey,
                               am.prs_afdeling_key))
             hoofdklant,
          COALESCE (am.prs_afdeling_parentkey, am.prs_afdeling_key)
             hoofdklant_key,
          COALESCE (am.prs_afdeling_parentkey, am.prs_afdeling_key)
             fclt_3d_afdeling_key,
          am.prs_afdeling_naam klantcode_melding,
          melder.naam,
          melder.prs_perslid_key,
          melder.afdeling,
          melder.prs_kostenplaats_upper,
          m.mld_melding_datum,
          TO_CHAR (m.mld_melding_datum, 'DD-MM-YYYY'),
          m.mld_melding_key,
          sd.ins_srtdiscipline_prefix || m.mld_melding_key meldingsnr,
          m.mld_melding_onderwerp,
          m.mld_melding_omschrijving,
          m.mld_melding_opmerking,
          s.mld_stdmelding_omschrijving,
          md.ins_discipline_omschrijving,
          sd.ins_srtdiscipline_omschrijving,
          (SELECT sta.mld_statuses_omschrijving
             FROM mld_statuses sta
            WHERE m.mld_melding_status = sta.mld_statuses_key)
             status,
          CASE
             WHEN m.mld_melding_actiecode = 1 AND m.mld_melding_flag = 0
             THEN
                ''
             WHEN m.mld_melding_actiecode = 1 AND m.mld_melding_flag > 0
             THEN
                lcl.l ('lcl_mld_flag' || m.mld_melding_flag)
             WHEN m.mld_melding_actiecode = 2 AND m.mld_melding_flag = 0
             THEN
                'Uw actie gevraagd'
             WHEN m.mld_melding_actiecode = 2 AND m.mld_melding_flag > 0
             THEN
                'Uw actie gevraagd - '
                || lcl.l ('lcl_mld_flag' || m.mld_melding_flag)
             WHEN m.mld_melding_actiecode = 129 AND m.mld_melding_flag = 0
             THEN
                ''
             WHEN m.mld_melding_actiecode = 129 AND m.mld_melding_flag > 0
             THEN
                lcl.l ('lcl_mld_flag' || m.mld_melding_flag)
             ELSE
                ''
          END
             actiecode,
          (SELECT p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ')'
             FROM prs_perslid p
            WHERE m.mld_melding_behandelaar_key = p.prs_perslid_key)
             aanspreekpunt_facilitor,
          (SELECT d.ins_discipline_omschrijving
             FROM ins_tab_discipline d
            WHERE d.ins_discipline_key = m.mld_ins_discipline_key)
             actiefbehandelteam,
          TO_CHAR (m.mld_melding_einddatum, 'DD-MM-YYYY') streefdatumgereed,
          (SELECT TO_CHAR (MAX (ft.fac_tracking_datum), 'DD-MM-YYYY')
             FROM fac_tracking ft, fac_srtnotificatie srt
            WHERE     ft.fac_tracking_refkey = m.mld_melding_key
                  AND ft.fac_srtnotificatie_key = srt.fac_srtnotificatie_key
                  AND srt.fac_srtnotificatie_xmlnode = 'melding'
                  AND ft.fac_srtnotificatie_key = 39                 -- MLDAFM
                                                    )
             datum_afgemeld,
          (SELECT TO_CHAR (MAX (ft.fac_tracking_datum), 'DD-MM-YYYY')
             FROM fac_tracking ft, fac_srtnotificatie srt
            WHERE     ft.fac_tracking_refkey = mld_melding_key
                  AND ft.fac_srtnotificatie_key = srt.fac_srtnotificatie_key
                  AND srt.fac_srtnotificatie_xmlnode = 'melding')
             laatsteactiedatum,
          (SELECT CASE
                     WHEN MAX (mn.mld_melding_note_omschrijving) IS NOT NULL
                          AND LENGTH (MAX (mn.mld_melding_note_omschrijving)) <
                                400
                     THEN
                        MAX (mn.mld_melding_note_omschrijving)
                     WHEN MAX (mn.mld_melding_note_omschrijving) IS NULL
                     THEN
                        '<nog geen notities>'
                     ELSE
                        SUBSTR (MAX (mn.mld_melding_note_omschrijving),
                                1,
                                400)
                        || ' ...... (zie Facilitor)'
                  END
                     omschrijving
             FROM mld_melding_note mn
            WHERE mn.mld_melding_key = m.mld_melding_key
                  AND mld_melding_note_flag = 1)
             laatstenotitie,
          (CASE
              WHEN m.mld_melding_status IN (0, 2, 3, 4, 7, 99) -- Lopend, is ook uitgegeven en 99 niet opgelost...
              THEN
                 fac.count_work_days (m.mld_melding_datum, SYSDATE)
              WHEN m.mld_melding_status IN (5, 6)                  -- Verwerkt
              THEN
                 fac.count_work_days (
                    m.mld_melding_datum,
                    (SELECT MAX (ft.fac_tracking_datum)
                       FROM fac_tracking ft
                      WHERE ft.fac_tracking_refkey = m.mld_melding_key
                            AND ft.fac_srtnotificatie_key = 39))     -- MLDAFM
              ELSE                                                -- Vervallen
                 0
           END)
             doorlooptijd,
          (SELECT km.mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m.mld_melding_key
                  AND km.mld_kenmerk_key = 61)
             klantreferentie,
          (SELECT km.mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m.mld_melding_key
                  AND km.mld_kenmerk_key = 25)
             planning_releaseuitgifte,
          (SELECT km.mld_kenmerkmelding_waarde
             FROM mld_kenmerkmelding km
            WHERE km.mld_melding_key = m.mld_melding_key
                  AND km.mld_kenmerk_key = 26)
             raming_uren,
          (CASE
              WHEN mld_melding_parentkey IS NOT NULL
              THEN
                 'Wordt behandeld in ' || TO_CHAR (mld_melding_parentkey)
              ELSE
                 ''
           END)
             gekoppeldaan
     FROM mld_melding m,
          mld_stdmelding s,
          mld_discipline md,
          ins_srtdiscipline sd,
          prs_kostenplaats pk,
          prs_perslid p,
          prs_v_aanwezigafdeling a,
          prs_afdeling am,
          prs_bedrijf b,
          (SELECT p.prs_perslid_key,
                  p.prs_perslid_naam || ' (' || p.prs_perslid_voornaam || ')'
                     naam,
                  prs_afdeling_naam afdeling,
                  kp.prs_kostenplaats_key,
                  kp.prs_kostenplaats_upper
             FROM prs_perslid p, prs_afdeling a, prs_kostenplaats kp
            WHERE p.prs_afdeling_key = a.prs_afdeling_key
                  AND a.prs_kostenplaats_key = kp.prs_kostenplaats_key)
          melder
    WHERE     m.prs_perslid_key = melder.prs_perslid_key
          AND m.mld_stdmelding_key = s.mld_stdmelding_key
          AND s.mld_ins_discipline_key = md.ins_discipline_key
          AND md.ins_srtdiscipline_key = sd.ins_srtdiscipline_key
          AND am.prs_afdeling_key = m.prs_afdeling_key
          AND p.prs_perslid_key = m.prs_perslid_key
          AND p.prs_afdeling_key = a.prs_afdeling_key
          AND b.prs_bedrijf_key = a.prs_bedrijf_key
          AND pk.prs_kostenplaats_key = m.prs_kostenplaats_key
          AND (                                 -- Alle meldingen dit kwartaal
                (m.mld_melding_datum >= TRUNC (SYSDATE, 'Q'))
               OR                         -- Alle meldingen afgelopen kwartaal
                  (m.mld_melding_datum >=
                      ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
                   AND m.mld_melding_datum <= TRUNC (SYSDATE, 'Q') - 1)
               OR -- Alle LOPENDE meldingen die ouder zijn dan afgelopen kwartaal
                  (m.mld_melding_datum <
                      ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
                   AND m.mld_melding_status IN (0, 2, 3, 4, 7, 99))
               OR -- Alle meldingen die OUDER zijn dan afgelopen kwartaal, maar die wel afgelopen kwartaal zijn behandeld en afgemeld)
                  (m.mld_melding_key IN
                         (SELECT mm.mld_melding_key
                            FROM mld_melding mm,
                                 fac_tracking ft,
                                 fac_srtnotificatie srt
                           WHERE mm.mld_melding_datum <
                                    ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3)
                                 AND mm.mld_melding_key =
                                       ft.fac_tracking_refkey
                                 AND ft.fac_srtnotificatie_key =
                                       srt.fac_srtnotificatie_key
                                 AND srt.fac_srtnotificatie_xmlnode =
                                       'melding'
                                 AND ft.fac_srtnotificatie_key = 39  -- MLDAFM
                                 AND ft.fac_tracking_datum >=
                                       ADD_MONTHS (TRUNC (SYSDATE, 'Q'), -3))));

-- VIEW voor Notificatiejob Kwartaaloverzicht openstaande tickets opsturen naar klanten die hebben aangegeven dat ze dat willen
CREATE OR REPLACE VIEW LOGC_V_NOTI_KLANTOVERZICHT
(
    SENDER,
    RECEIVER,
    TEXT,
    CODE,
    FAC_SRTNOTIFICATIE_KEY,
    KEY,
    XKEY
)
AS
    SELECT NULL
               sender,
           v.prs_perslid_key
               receiver,
           'Overzicht meldingen ' || v.hoofdklant
               text,
           'CUST01'
               code,
           (SELECT fac_srtnotificatie_key
              FROM fac_srtnotificatie
             WHERE fac_srtnotificatie_code = 'CUST01')
               fac_srtnotificatie_key,
               741 key,
           v.extra_key                        -- Hoofdklant_key = afdeling_key
               xkey
      FROM (SELECT a.PRS_AFDELING_UPPER AS HOOFDKLANT,
                   a.prs_afdeling_key   AS extra_key,        -- HOOFDKLANT_KEY
                   p.prs_perslid_key,
                   p.prs_perslid_email  AS EMAIL
              FROM prs_perslid p, prs_kenmerklink km, prs_afdeling a
             WHERE     p.prs_perslid_key = km.prs_link_key
                   AND km.prs_kenmerk_key = 1020
                   AND km.prs_kenmerklink_waarde = 1
                   AND p.prs_afdeling_key = a.prs_afdeling_key
                   AND p.prs_perslid_email IS NOT NULL
                   AND p.prs_perslid_verwijder IS NULL
                   AND a.prs_afdeling_verwijder IS NULL -- and p.prs_perslid_login is not null
                                                       ) v,
           (SELECT ADD_MONTHS (TRUNC (SYSDATE - 1, 'Q'), +3) AS NextRun -- Begin_VolgendeKwartaal
              FROM DUAL) d
     WHERE d.NextRun = TRUNC (SYSDATE) -- Om de job altijd de 1e van elk kwartaal te laten lopen.
;


CREATE OR REPLACE VIEW logc_v_kostenplaats_klant
AS
   SELECT prs_kostenplaats_key,
          prs_kostenplaats_nr || ' - ' || prs_kostenplaats_omschrijving
             prs_kostenplaats_omschrijving,
          COALESCE (prs_kostenplaats_verwijder, prs_kostenplaats_eind)
             prs_kostenplaats_eind
     FROM prs_kostenplaats;

CREATE OR REPLACE VIEW logc_v_rap_urenbesteding
AS
    SELECT d.prs_afdeling_key                                     fclt_3d_afdeling_key,
           a1.prs_afdeling_naam                                   parent_afdeling,
           COALESCE(a2.prs_afdeling_naam, a1.prs_afdeling_naam)   afdeling,
           i.project,
           pr.omschrijving,
           i.categorie,
           i.werknemer,
           i.uren,
           (SELECT FAC.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km, mld_kenmerk mk
             WHERE     km.mld_kenmerk_key = mk.mld_kenmerk_key
                   AND mk.mld_srtkenmerk_key = 261
                   AND km.mld_melding_key = m.mld_melding_key)    raming,
           (SELECT SUM (i2.uren)
              FROM logc_imp_uren_besteding i2
             WHERE i.transactietekst = i2.transactietekst)        urencum,
           i.transactietekst,
           pf.prs_perslid_naam_full,
           i.datum,
           m.mld_melding_onderwerp,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km, mld_kenmerk mk
             WHERE     km.mld_kenmerk_key = mk.mld_kenmerk_key
                   AND mk.mld_srtkenmerk_key = 25
                   AND km.mld_melding_key = m.mld_melding_key)    custref,
           m.mld_melding_externnr,
           m.mld_melding_key
      FROM logc_imp_uren_besteding      i,
           logc_imp_projecten           pr,
           mld_melding                  m,
           prs_v_afdeling_boom          ab,
           prs_afdeling                 a1,
           prs_afdeling                 a2,
           prs_perslid                  p,
           prs_v_perslid_fullnames_all  pf,
           (SELECT prs_link_key               prs_afdeling_key,
                   prs_kenmerklink_waarde     debiteur
              FROM prs_kenmerklink
             WHERE     prs_kenmerklink_verwijder IS NULL
                   AND prs_kenmerk_key = 1320) d             -- debiteurnummer
     WHERE     i.mld_melding_key = m.mld_melding_key(+)
           AND m.prs_afdeling_key = ab.prs_afdeling_key(+)
           AND ab.prs_afdeling_key1 = a1.prs_afdeling_key(+)
           AND ab.prs_afdeling_key2 = a2.prs_afdeling_key(+)
           AND i.werknemer = p.prs_perslid_nr(+)
           AND p.prs_perslid_key = pf.prs_perslid_key(+)
           AND i.project = pr.wbselement(+)
           AND pr.debiteur = d.debiteur(+);

CREATE OR REPLACE VIEW logc_v_rap_mld_sleeping
AS
  SELECT MAX (actiedatum) laatste_actie,
         TRUNC (SYSDATE) - TRUNC (MAX (actiedatum)) dagen_stil,
         p.prs_perslid_naam_full melder,
         m.mld_melding_key,
         a.prs_afdeling_naam || '#' || m.mld_melding_key meldingnr,
         m.mld_melding_datum geregistreerd,
         md.ins_discipline_omschrijving behandelgroep,
         mld_stdmelding_omschrijving melding,
         mld_melding_onderwerp,
         pb.prs_perslid_naam_full behandelaar,
         bhg.ins_discipline_omschrijving behandelteam,
         abh.prs_perslid_naam_full actieve_behandelaar,
         m.mld_melding_behandelaar2_key actieve_behandelaar_key,
         a.prs_afdeling_omschrijving klant,
         DECODE (BITAND (m.mld_melding_actiecode, 1), 1, 'Behandelaar', 'Klant') actie_bij,
         CASE
            WHEN mld_melding_flag > 0
            THEN
               lcl.l ('lcl_mld_flag' || mld_melding_flag)
         END
            status
    FROM mld_melding m,
         mld_stdmelding ms,
         mld_discipline md,
         prs_v_perslid_fullnames pb,
         prs_v_perslid_fullnames p,
         mld_discipline bhg,
         prs_v_perslid_fullnames abh,
         prs_afdeling a,
         (SELECT n.mld_melding_key, n.mld_melding_note_aanmaak actiedatum
            FROM mld_melding_note n
          UNION ALL
          SELECT fac_tracking_refkey, tr.fac_tracking_datum
            FROM fac_tracking tr, fac_srtnotificatie str
           WHERE tr.fac_srtnotificatie_key = str.fac_srtnotificatie_key
                 AND str.fac_srtnotificatie_xmlnode IN ('melding')) d
   WHERE     m.mld_melding_key = d.mld_melding_key
         AND ms.mld_stdmelding_key = m.mld_stdmelding_key
         AND md.ins_discipline_key = ms.mld_ins_discipline_key
         AND mld_melding_behandelaar_key = pb.prs_perslid_key(+)
         AND m.prs_perslid_key = p.prs_perslid_key
         AND mld_melding_status NOT IN (1, 5, 6)
         AND fac_activiteit_key IS NULL
         AND m.mld_ins_discipline_key = bhg.ins_discipline_key(+)
         AND m.mld_melding_behandelaar2_key = abh.prs_perslid_key(+)
         AND m.prs_afdeling_key = a.prs_afdeling_key(+)
GROUP BY m.mld_melding_key,
         m.prs_kostenplaats_key,
         p.prs_perslid_naam_full,
         m.prs_perslid_key,
         mld_melding_datum,
         md.ins_discipline_omschrijving,
         bhg.ins_discipline_omschrijving,
         mld_stdmelding_omschrijving,
         mld_melding_onderwerp,
         pb.prs_perslid_naam_full,
         abh.prs_perslid_naam_full,
         m.mld_melding_behandelaar2_key,
         mld_melding_flag,
         m.mld_melding_actiecode,
         a.prs_afdeling_naam,
         a.prs_afdeling_omschrijving
ORDER BY MAX (actiedatum);

CREATE OR REPLACE VIEW logc_v_rap_mldsaldo
(
    week,
    opened,
    closed,
    netto,
    backlog
)
AS WITH
    ticket
    AS
        (SELECT *
           FROM mld_melding mm, mld_stdmelding ms, mld_discipline md
          WHERE     mld_melding_status <> 1
                AND mm.mld_stdmelding_key = ms.mld_stdmelding_key
                AND ms.mld_ins_discipline_key = md.ins_discipline_key
                AND ins_srtdiscipline_key = 1),
    uniqueafmelding
    AS
        (  SELECT fac_tracking_refkey, MAX (fac_tracking_datum) fac_tracking_datum
             FROM fac_tracking
            WHERE fac_srtnotificatie_key = 39 /* MLDAFM */
         GROUP BY fac_tracking_refkey),
    afmelding
    AS
        (  SELECT TRUNC (fac_tracking_datum, 'IW') week, COUNT (DISTINCT mld_melding_key) afgemeld
             FROM uniqueafmelding, ticket mm
            WHERE fac_tracking_refkey = mm.mld_melding_key
         GROUP BY TRUNC (fac_tracking_datum, 'IW')),
    nieuw
    AS
        (  SELECT TRUNC (mld_melding_datum, 'IW') week, COUNT (*) nieuw
             FROM ticket mm
         GROUP BY TRUNC (mld_melding_datum, 'IW'))
SELECT week,
       nieuw,
       afgemeld,
       nieuw - afgemeld                            netto,
       SUM (nieuw - afgemeld) OVER (ORDER BY week) backlog
  FROM (SELECT nieuw.week, nieuw, afgemeld
          FROM nieuw, afmelding
         WHERE nieuw.week = afmelding.week);

CREATE OR REPLACE VIEW logc_v_rap_melding_note
AS
   SELECT SYSDATE - mld_melding_note_aanmaak hide_f_sort,
          m.mld_melding_key,
          CASE
             WHEN mld_melding_note_aanmaak > SYSDATE - 4 / 24 / 60
             THEN
                'updated'
             WHEN mld_melding_note_aanmaak > SYSDATE - 1 / 24
             THEN
                'updated10'
             ELSE
                ''
          END
             hide_f_rowclass,
          mld_melding_note_aanmaak datum,
          TO_CHAR (mld_melding_note_aanmaak, 'HH24:MI') tijd,
          p.prs_perslid_naam_friendly door,
             COALESCE (a.prs_afdeling_naam, prs_kostenplaats_nr)
          || '#'
          || m.mld_melding_key
             nummer,
          std.mld_stdmelding_omschrijving melding,
          d.ins_discipline_key fclt_3d_discipline_key,
          d.ins_discipline_omschrijving vakgroep,
          sd.ins_srtdiscipline_omschrijving vakgroeptype,
          p4.prs_perslid_naam_friendly melder,
          p2.prs_perslid_naam_friendly behandelaar,
          d2.ins_discipline_omschrijving team,
          p3.prs_perslid_naam_friendly actieve_behandelaar,
          mld_melding_note_omschrijving notitie,
          m.mld_melding_onderwerp,
          m.mld_melding_omschrijving,
          COALESCE (a.prs_afdeling_naam, prs_kostenplaats_nr) klantcode,
          COALESCE (a.prs_afdeling_omschrijving,
                    prs_kostenplaats_omschrijving)
             klant,
          COALESCE (a.prs_afdeling_naam, prs_kostenplaats_nr) || ' ('
          || COALESCE (a.prs_afdeling_omschrijving,
                       prs_kostenplaats_omschrijving)
          || ')'
             klantcode2,
          DECODE (m.prs_kostenplaats_key,
                  4, 'Intern',
                  127, 'Intern',
                  'Klant')
             melding_klant,
          DECODE (mn.mld_melding_note_flag, 1, 'Ja', 2, 'Nvt', 'Nee')
             zichtbaar_fe,
          (SELECT pf.prs_perslid_naam_full pf
             FROM prs_kenmerklink pk, prs_v_perslid_fullnames_all pf
            WHERE     pk.prs_kenmerklink_niveau = 'B'
                  AND pk.prs_kenmerk_key = 1060              -- accountmanager
                  AND prs_kenmerklink_verwijder IS NULL
                  AND pf.prs_perslid_key =
                        fac.safe_to_number (pk.prs_kenmerklink_waarde)
                  AND a.prs_bedrijf_key = pk.prs_link_key)
             accnt_mgr
     FROM (SELECT mld_melding_note_key,
                  mld_melding_key,
                  mld_melding_note_aanmaak,
                  prs_perslid_key,
                  mld_melding_note_omschrijving,
                  mld_melding_note_flag
             FROM mld_melding_note
           UNION ALL
           SELECT mld_melding_key,
                  mld_melding_key,
                  ft.fac_tracking_datum,                 -- mld_melding_datum,
                  ft.prs_perslid_key,
                     'Nieuw: '
                  || mld_melding_onderwerp
                  || CHR (13)
                  || SUBSTR (mld_melding_omschrijving, 1, 4000 - 80 - 10),
                  2
             FROM mld_melding, fac_tracking ft
            WHERE ft.fac_tracking_refkey = mld_melding_key
                  AND ft.fac_srtnotificatie_key =
                        (SELECT fac_srtnotificatie_key
                           FROM fac_srtnotificatie
                          WHERE fac_srtnotificatie_code = 'MLDNEW')) mn,
          mld_melding m,
          prs_v_perslid_fullnames_all p,
          prs_kostenplaats k,
          mld_stdmelding std,
          mld_discipline d,
          ins_srtdiscipline sd,
          mld_discipline d2,
          prs_v_perslid_fullnames_all p2,
          prs_v_perslid_fullnames_all p3,
          prs_v_perslid_fullnames_all p4,
          prs_afdeling a
    WHERE     mld_melding_note_aanmaak > SYSDATE - 548
          AND m.mld_melding_key = mn.mld_melding_key
          AND mn.prs_perslid_key = p.prs_perslid_key
          AND m.prs_perslid_key = p4.prs_perslid_key
          AND m.prs_kostenplaats_key = k.prs_kostenplaats_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
          AND m.fac_activiteit_key IS NULL
          AND m.mld_ins_discipline_key = d2.ins_discipline_key(+)
          AND m.mld_melding_behandelaar_key = p2.prs_perslid_key(+)
          AND m.mld_melding_behandelaar2_key = p3.prs_perslid_key(+)
          AND m.prs_afdeling_key = a.prs_afdeling_key(+);

CREATE OR REPLACE VIEW logc_v_rap_releasenotes2
(
    mld_melding_key,
    notenummer,
    onderwerp,
    omschrijving,
    melding,
    vakgroep,
    status_key,
    status,
    module,
    planning,
    releasenote,
    note,
    tech_note,
    screenshot
)
AS
    SELECT m.mld_melding_key,
           TO_CHAR (m.mld_melding_key),
           mld_melding_onderwerp,
           mld_melding_omschrijving,
           std.mld_stdmelding_omschrijving,
           md.ins_discipline_omschrijving,
           m.mld_melding_status,
           st.mld_statuses_omschrijving,
           (SELECT fac_usrdata_omschr
              FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata fu
             WHERE     mld_srtkenmerk_key = 22
                   AND fu.fac_usrtab_key = 1
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND mld_kenmerkmelding_waarde = TO_CHAR (fac_usrdata_key)
                   AND km.mld_melding_key = m.mld_melding_key)
               module,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km, mld_kenmerk k
             WHERE     mld_srtkenmerk_key = 1
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = m.mld_melding_key)
               planning,
           (SELECT fac_usrdata_omschr
              FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata fu
             WHERE     mld_srtkenmerk_key = 321
                   AND fu.fac_usrtab_key = 122
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND mld_kenmerkmelding_waarde = TO_CHAR (fac_usrdata_key)
                   AND km.mld_melding_key = m.mld_melding_key)
               releasenote,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km, mld_kenmerk k
             WHERE     mld_srtkenmerk_key = 281
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = m.mld_melding_key)
               note,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km, mld_kenmerk k
             WHERE     mld_srtkenmerk_key = 341
                   AND km.mld_kenmerk_key = k.mld_kenmerk_key
                   AND km.mld_melding_key = m.mld_melding_key)
               tech_note,
           (SELECT mld_kenmerk_key
              FROM mld_kenmerk k
             WHERE     mld_srtkenmerk_key = 701                 --- screenshot
                   AND k.mld_stdmelding_key = std.mld_stdmelding_key)
               scrs_key
      FROM mld_melding         m,
           mld_kenmerkmelding  kmr,
           mld_kenmerk         mr,
           mld_stdmelding      std,
           mld_discipline      md,
           mld_statuses        st
     WHERE     kmr.mld_melding_key = m.mld_melding_key
           AND kmr.mld_kenmerk_key = mr.mld_kenmerk_key
           AND mr.mld_srtkenmerk_key = 1                         ---- planning
           AND kmr.mld_kenmerkmelding_waarde LIKE '20%'
           AND m.mld_stdmelding_key = std.mld_stdmelding_key
           AND std.mld_ins_discipline_key = md.ins_discipline_key
           AND m.mld_melding_status = st.mld_statuses_key
           AND m.mld_melding_status != 1                         --- vervallen
           AND fac_activiteit_key IS NULL;

-- De menselijke versie van de urenbesteding, tevens basis voor de SAP-exportview
CREATE OR REPLACE VIEW logc_v_urenoverzicht
AS
    SELECT TO_CHAR (mou.mld_opdr_uren_datum, 'IYYY-IW')    weeknr,
           p_aareon.prs_perslid_nr                         personeelsnr,
           k.prs_kostenplaats_nr                           projectnr,
           mou.mld_opdr_uren_datum                         datum,
           mou.mld_opdr_uren_besteed                       uren,
           d.prs_afdeling_naam || '#' || o.mld_melding_key logcentrenr,
           pf.prs_perslid_naam_friendly                    medewerker,
           d.prs_afdeling_naam                             account,
           m.mld_melding_onderwerp                         betreft,
           b.prs_bedrijf_naam                              klant,
           o.mld_melding_key                               melding_key
      FROM mld_opdr_uren                mou,
           mld_opdr                     o,
           prs_perslid                  p_aareon,
           prs_kostenplaats             k,
           mld_melding                  m,
           prs_v_perslid_fullnames_all  pf,
           prs_afdeling                 d,
           prs_bedrijf                  b,
           prs_perslid                  p_klant
     WHERE     mou.mld_opdr_key = o.mld_opdr_key
           AND m.mld_melding_key = o.mld_melding_key
           AND COALESCE (m.prs_afdeling_key, p_klant.prs_afdeling_key) = d.prs_afdeling_key
           AND p_klant.prs_perslid_key = m.prs_perslid_key
           AND d.prs_bedrijf_key = b.prs_bedrijf_key
           AND mou.prs_perslid_key = p_aareon.prs_perslid_key
           AND k.prs_kostenplaats_key = o.prs_kostenplaats_key
           AND pf.prs_perslid_key = p_aareon.prs_perslid_key;

-- Voor de Export van de urenbesteding naar SAP/CATS ==concept==
CREATE OR REPLACE VIEW logc_v_urenexport2cats
AS
    SELECT weeknr,
           personeelsnr
               employeenumber,
           TO_CHAR (datum, 'fmDD-MMfm-YYYY')
               workdate,
           projectnr
               wbs_element,
           ROUND (uren, 2)
               catshours,
           'H'
               unit,
           'CONS01'
               acttype,
           NULL
               statkeyfig01,
           NULL
               statkeyfig02,
              logcentrenr
           || ' '
           || (CASE
                   WHEN LENGTH (betreft) + 11 > 40 THEN SUBSTR (betreft, 1, 38 - 11) || '..'
                   ELSE betreft
               END)
               shorttext
      FROM logc_v_urenoverzicht;

CREATE OR REPLACE VIEW logc_v_rap_prj_jaareffect
AS
   SELECT m.mld_melding_key,
          std.mld_stdmelding_omschrijving soort,
          TO_CHAR (m.mld_melding_key) meldingnr,
          m.mld_melding_onderwerp onderwerp,
          mld_statuses_omschrijving status,
          PF.PRS_PERSLID_NAAM_FRIENDLY melder,
          fac.safe_to_number (km1.mld_kenmerkmelding_waarde) jaareffect,
          fac.safe_to_date (km2.mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             ingangsdatum,
          ( (fac.safe_to_number (km1.mld_kenmerkmelding_waarde / 12))
           * (13
              - (EXTRACT (
                    MONTH FROM fac.safe_to_date (
                                  km2.mld_kenmerkmelding_waarde,
                                  'DD-MM-YYYY')))))
             jaareffect_rest,
          COALESCE (
             a.afdoms,
             (SELECT lkp.PRS_KOSTENPLAATS_OMSCHRIJVING
                FROM mld_kenmerkmelding km3, LOGC_V_KOSTENPLAATS_KLANT lkp
               WHERE km3.mld_melding_key = m.mld_melding_key
                     AND km3.mld_kenmerk_key = 201
                     AND km3.mld_kenmerkmelding_waarde =
                           TO_CHAR (lkp.prs_kostenplaats_key)),
             (SELECT mld_kenmerkmelding_waarde
                FROM mld_kenmerkmelding km4
               WHERE km4.mld_melding_key = m.mld_melding_key
                     AND km4.mld_kenmerk_key = 165))
             Klant
     FROM mld_kenmerkmelding km1,
          mld_kenmerkmelding km2,
          mld_melding m,
          mld_statuses ms,
          (SELECT prs_afdeling_key,
                  prs_afdeling_naam || ' - ' || prs_afdeling_omschrijving
                     afdoms
             FROM prs_afdeling
            WHERE prs_afdeling_key != 104) a,           --- FCLT doet niet mee
          mld_stdmelding std,
          prs_v_perslid_fullnames_all pf
    WHERE     km1.mld_kenmerk_key = 171                         --- Jaareffect
          AND km2.mld_kenmerk_key = 167                       --- Ingangsdatum
          AND m.mld_melding_key = km1.mld_melding_key
          AND m.prs_afdeling_key = a.prs_afdeling_key(+)
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND km2.mld_melding_key = m.mld_melding_key
          AND m.mld_melding_status != 1                          --- afgewezen
          AND m.mld_melding_status = ms.mld_statuses_key
          AND pf.prs_perslid_key = m.prs_perslid_key;


 CREATE OR REPLACE VIEW logc_v_rap_crm_gespreksverslag
(
    mld_melding_key,
    melding_datum,
    melding_einddatum,
    melder,
    behandelaar,
    actieve_behandelaar,
    omschrijving,
    onderwerp,
    omgevingscode,
    actief,
    mld_statuses_key,
    mld_statuses_omschrijving,
    beslisdatum,
    maandbedrag,
    implementatie,
    training,
    kans
)
AS
         SELECT mld_melding_key,
          mld_melding_datum melding_datum,
          mld_melding_einddatum melding_einddatum,
          pf1.prs_perslid_naam_full melder,
          pf2.prs_perslid_naam_full behandelaar,
          pf3.prs_perslid_naam_full actieve_behandelaar,
          mld_melding_omschrijving,
          mld_melding_onderwerp,
          prs_afdeling_naam omgevingscode,
          DECODE (mld_statuses_key,
                  1, 'Gesloten',
                  6, 'Gesloten',
                  5, 'Gesloten',
                  'Open')
             actief,
          ms.mld_statuses_key,
          ms.mld_statuses_omschrijving,
               (SELECT TO_DATE(mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
             FROM mld_kenmerkmelding km
            WHERE mld_kenmerk_key = 642
                  AND km.mld_melding_key = m.mld_melding_key)
             beslisdatum,
              (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding km
            WHERE mld_kenmerk_key = 643
                  AND km.mld_melding_key = m.mld_melding_key)
             maandbedrag,
              (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding km
            WHERE mld_kenmerk_key = 644
                  AND km.mld_melding_key = m.mld_melding_key)
             implementatie,
              (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding km
            WHERE mld_kenmerk_key = 645
                  AND km.mld_melding_key = m.mld_melding_key)
             training,
              (SELECT fac.safe_to_number(mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding km
            WHERE mld_kenmerk_key = 646
                  AND km.mld_melding_key = m.mld_melding_key)
             kans
     FROM mld_melding m,
          prs_v_perslid_fullnames_all pf1,
          prs_v_perslid_fullnames_all pf2,
          prs_v_perslid_fullnames_all pf3,
          mld_statuses ms,
          prs_afdeling a
    WHERE     mld_stdmelding_key = 281                            -- gespreksverslag
          AND fac_activiteit_key IS NULL
          AND pf1.prs_perslid_key = m.prs_perslid_key
          AND pf2.prs_perslid_key(+) = m.mld_melding_behandelaar_key
          AND pf3.prs_perslid_key(+) = m.mld_melding_behandelaar2_key
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.prs_afdeling_key = a.prs_afdeling_key;


CREATE OR REPLACE VIEW logc_v_rap_crm_prospects
(
    mld_melding_key,
    melding_datum,
    melding_einddatum,
    behandelaar,
    omschrijving,
    onderwerp,
    actief,
    mld_statuses_key,
    mld_statuses_omschrijving,
    leadbron,
    bedrijfsnaam,
    contactpersoon,
    telefoon,
    email,
    contactpersoon_overig,
    actietrigger,
    documentatie,
    proeftuin,
    demo_gegeven,
    offerte_verstuurd,
    inschatting,
    beslisdatum,
    maandbedrag,
    implementatie,
    training,
    contractjaren,
    kans,
    contractwaarde,
    project_fase
)
AS
    SELECT mld_melding_key,
           mld_melding_datum
               melding_datum,
           mld_melding_einddatum
               melding_einddatum,
           pf.prs_perslid_naam_friendly
               behandelaar,
           mld_melding_omschrijving,
           mld_melding_onderwerp,
           DECODE (mld_statuses_key,
                   1, 'Gesloten',
                   6, 'Gesloten',
                   5, 'Gesloten',
                   'Open')
               actief,
           ms.mld_statuses_key,
           ms.mld_statuses_omschrijving,
           (SELECT fac_usrdata_omschr
              FROM mld_kenmerkmelding km, fac_usrdata ud
             WHERE     mld_kenmerk_key = 401
                   AND km.mld_melding_key = m.mld_melding_key
                   AND km.mld_kenmerkmelding_waarde = ud.fac_usrdata_key
                   AND fac_usrtab_key = 221)
               leadbron,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 463
                   AND km.mld_melding_key = m.mld_melding_key)
               bedrijfsnaam,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 470
                   AND km.mld_melding_key = m.mld_melding_key)
               contactpersoon,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 474
                   AND km.mld_melding_key = m.mld_melding_key)
               telefoon,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 469
                   AND km.mld_melding_key = m.mld_melding_key)
               email,
           (SELECT mld_kenmerkmelding_waarde
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 472
                   AND km.mld_melding_key = m.mld_melding_key)
               contactpersoon_overig,
           CASE
               WHEN TRUNC (mld_melding_einddatum) < TRUNC (SYSDATE)
               THEN
                      '!! '
                   || (SELECT mld_kenmerkmelding_waarde
                         FROM mld_kenmerkmelding km
                        WHERE     mld_kenmerk_key = 461
                              AND km.mld_melding_key = m.mld_melding_key)
               ELSE
                   (SELECT mld_kenmerkmelding_waarde
                      FROM mld_kenmerkmelding km
                     WHERE     mld_kenmerk_key = 461
                           AND km.mld_melding_key = m.mld_melding_key)
           END
               actietrigger,
           (SELECT DECODE (mld_kenmerkmelding_waarde, 1, 'Ja')
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 468
                   AND km.mld_melding_key = m.mld_melding_key)
               documentatie,
           (SELECT DECODE (mld_kenmerkmelding_waarde, 1, 'Ja')
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 473
                   AND km.mld_melding_key = m.mld_melding_key)
               proeftuin,
           (SELECT DECODE (mld_kenmerkmelding_waarde, 1, 'Ja')
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 467
                   AND km.mld_melding_key = m.mld_melding_key)
               demo_gegeven,
           (SELECT DECODE (mld_kenmerkmelding_waarde, 1, 'Ja')
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 471
                   AND km.mld_melding_key = m.mld_melding_key)
               offerte_verstuurd,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 542
                   AND km.mld_melding_key = m.mld_melding_key)
               inschatting,
           (SELECT TO_DATE (mld_kenmerkmelding_waarde, 'DD-MM-YYYY')
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 626
                   AND km.mld_melding_key = m.mld_melding_key)
               beslisdatum,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 623
                   AND km.mld_melding_key = m.mld_melding_key)
               maandbedrag,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 624
                   AND km.mld_melding_key = m.mld_melding_key)
               implementatie,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 625
                   AND km.mld_melding_key = m.mld_melding_key)
               training,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 628
                   AND km.mld_melding_key = m.mld_melding_key)
               contractjaren,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 542
                   AND km.mld_melding_key = m.mld_melding_key)
               kans,
           (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
              FROM mld_kenmerkmelding km
             WHERE     mld_kenmerk_key = 629
                   AND km.mld_melding_key = m.mld_melding_key)
               contractwaarde,
           (SELECT fu.fac_usrdata_omschr
              FROM mld_kenmerkmelding km, mld_kenmerk k, fac_usrdata fu
             WHERE     mld_srtkenmerk_key = 661
                   AND k.mld_kenmerk_key = km.mld_kenmerk_key
                   AND km.mld_melding_key = m.mld_melding_key
                   AND fac.safe_to_number (mld_kenmerkmelding_waarde) =
                       fu.fac_usrdata_key)
               project_fase
      FROM mld_melding m, prs_v_perslid_fullnames_all pf, mld_statuses ms
     WHERE     mld_stdmelding_key = 341                           -- Prospects
           AND fac_activiteit_key IS NULL
           AND pf.prs_perslid_key =
               COALESCE (m.mld_melding_behandelaar2_key,
                         m.mld_melding_behandelaar_key,
                         m.prs_perslid_key)
           AND m.mld_melding_status = ms.mld_statuses_key;



CREATE OR REPLACE VIEW logc_v_crm_contactxbedrijf
AS
   SELECT prs_contactpersoon_key,
          prs_contactpersoon_naam,
          prs_contactpersoon_tussenv,
          prs_contactpersoon_voornaam,
          cp.prs_contactpersoon_naam
          || NVL2 (cp.prs_contactpersoon_voorletters,
                   ', ' || cp.prs_contactpersoon_voorletters,
                   '')
          || NVL2 (cp.prs_contactpersoon_tussenv,
                   ' ' || cp.prs_contactpersoon_tussenv,
                   '')
          || NVL2 (cp.prs_contactpersoon_voornaam,
                   ' (' || cp.prs_contactpersoon_voornaam || ')',
                   '')
             naam_full,
          prs_contactpersoon_telefoon_1,
          prs_contactpersoon_telefoon_2,
          prs_contactpersoon_email,
          prs_bedrijf_naam,
          prs_bedrijf_post_adres,
          prs_bedrijf_post_postcode,
          prs_bedrijf_post_plaats,
          prs_bedrijf_post_land,
          prs_bedrijf_bezoek_adres,
          prs_bedrijf_bezoek_postcode,
          prs_bedrijf_bezoek_plaats,
          prs_bedrijf_bezoek_land,
          prs_leverancier_nr,
          prs_overeenkomst_nr,
          (SELECT DECODE (prs_kenmerklink_waarde, 1, 'Ja', 'Nee')
             FROM prs_kenmerklink pk
            WHERE     prs_kenmerklink_niveau = 'C'
                  AND prs_kenmerk_key = 1240
                  AND pk.prs_link_key = cp.prs_contactpersoon_key)
             Magazine,
          (SELECT DECODE (prs_kenmerklink_waarde, 1, 'Ja', 'Nee')
             FROM prs_kenmerklink pk
            WHERE     prs_kenmerklink_niveau = 'C'
                  AND prs_kenmerk_key = 1180
                  AND pk.prs_link_key = cp.prs_contactpersoon_key)
             Uitnodigen_FUN
     FROM prs_contactpersoon cp, prs_bedrijf b
    WHERE     cp.prs_bedrijf_key = b.prs_bedrijf_key(+)
          AND prs_bedrijf_verwijder IS NULL
          AND prs_contactpersoon_verwijder IS NULL;

CREATE OR REPLACE VIEW logc_v_rap_releasemanagement
AS
   SELECT m.mld_melding_key,
          m.mld_melding_key melding,
          ms.mld_statuses_omschrijving status,
          mld_melding_datum datum,
          a.prs_afdeling_naam klantcode,
          prs_kostenplaats_nr kostenplaats,
          pfpb.prs_perslid_naam_full behandelaar,
          std.mld_stdmelding_omschrijving std_melding,
          d.ins_discipline_omschrijving vakgroep,
          mld_melding_onderwerp onderwerp,
          mld_melding_omschrijving omschrijving,
          pfm.prs_perslid_naam_full melder,
          pfab.prs_perslid_naam_full actieve_behandelaar,
          dbg.ins_discipline_omschrijving behandelgroep,
          CASE dbg.ins_discipline_key
             WHEN 41
             THEN
                CASE
                   WHEN pfab.prs_perslid_key IS NOT NULL
                   THEN
                      'Dev assigned'
                   ELSE
                      'Dev ToDo'
                END
             ELSE
                dbg.ins_discipline_omschrijving
          END
             behandelgroepx,
          km.mld_kenmerkmelding_waarde planning,
          (SELECT ud.fac_usrdata_volgnr || '. ' || ud.fac_usrdata_omschr
             FROM mld_kenmerkmelding mk, mld_kenmerk K, fac_usrdata ud
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 24
                  AND mk.mld_melding_key = m.mld_melding_key
                  AND fac.safe_to_number (mk.mld_kenmerkmelding_waarde) =
                        ud.fac_usrdata_key
                  AND ud.fac_usrtab_key = 22)
             moscow,
          (SELECT fac.safe_to_number (mld_kenmerkmelding_waarde)
             FROM mld_kenmerkmelding mk, mld_kenmerk K
            WHERE     mk.mld_kenmerk_key = k.mld_kenmerk_key
                  AND k.mld_srtkenmerk_key = 2
                  AND mk.mld_melding_key = m.mld_melding_key)
             raming
     FROM mld_melding M,
          mld_stdmelding std,
          mld_discipline d,
          mld_statuses ms,
          prs_afdeling a,
          prs_kostenplaats pk,
          prs_v_perslid_fullnames_all pfpb,
          prs_v_perslid_fullnames_all pfm,
          prs_v_perslid_fullnames_all pfab,
          mld_discipline dbg,
          mld_kenmerk k,
          mld_kenmerkmelding km
    WHERE     mld_melding_status NOT IN (1, 5, 6)
          AND m.mld_stdmelding_key = std.mld_stdmelding_key
          AND std.mld_ins_discipline_key = d.ins_discipline_key
          AND d.ins_srtdiscipline_key = 1
          AND m.mld_melding_status = ms.mld_statuses_key
          AND m.prs_afdeling_key = a.prs_afdeling_key
          AND m.prs_kostenplaats_key = pk.prs_kostenplaats_key(+)
          AND m.mld_melding_behandelaar_key = pfpb.prs_perslid_key(+)
          AND m.prs_perslid_key_voor = pfm.prs_perslid_key
          AND m.mld_melding_behandelaar2_key = pfab.prs_perslid_key(+)
          AND m.mld_ins_discipline_key = dbg.ins_discipline_key(+)
          AND m.mld_melding_key = km.mld_melding_key
          AND km.mld_kenmerk_key = k.mld_kenmerk_key
          AND k.mld_srtkenmerk_key = 1
          AND km.mld_kenmerkmelding_waarde LIKE '2%';

CREATE OR REPLACE VIEW logc_v_rap_emmen
(
  melding_key,
  module,
  kostenplaats_oms,
  subproductgroep,
  subproductgroepgroep,
  melding_status,
  melding_datum,
  melding_accepted,
  plan_uitvoertijd_sla,
  melding_afgemeld,
  sla_werkdgn,
  doorlooptijd_werkdgn,
  sla_werkuren,
  doorlooptijd_werkuren,
  uitvoering_sla_optijd,
  melder,
  productgroep,
  prioriteittxt,
  actieve_behandelgroep,
  actieve_behandelaar,
  onderwerp,
  melding_opmerking,
  afdeling_omschrijving,
  melding_einddatum_std
)
AS
  SELECT
  distinct melding_key,
  (SELECT ud.fac_usrdata_omschr
      FROM mld_srtkenmerk sk,
          mld_kenmerk k,
          mld_kenmerkmelding km,
          fac_usrtab ut,
          fac_usrdata ud
    WHERE sk.mld_srtkenmerk_upper = 'HEEFT BETREKKING OP'
          AND k.mld_srtkenmerk_key = sk.mld_srtkenmerk_key
          AND km.mld_kenmerk_key = k.mld_kenmerk_key
          AND km.mld_kenmerkmelding_verwijder IS NULL
          AND ud.fac_usrdata_key = km.mld_kenmerkmelding_waarde
          AND ut.fac_usrtab_key = ud.fac_usrtab_key
          AND ut.fac_usrtab_key = 1
          AND km.mld_melding_key = melding_key) module,
  kostenplaats_oms,
  subproductgroep,
  subproductgroepgroep,
  melding_status,
  melding_datum,
  melding_accepted,
  plan_uitvoertijd_sla,
  melding_afgemeld,
  sla_werkdgn,
  doorlooptijd_werkdgn,
  sla_werkuren,
  doorlooptijd_werkuren,
  uitvoering_sla_optijd,
  melder,
  productgroep,
  prioriteittxt,
  actieve_behandelgroep,
  actieve_behandelaar,
  onderwerp,
  melding_opmerking,
  afdeling_omschrijving,
  melding_einddatum_std
  FROM (
      SELECT  melding_key,
              kostenplaats_oms,
              subproductgroep,
              subproductgroepgroep,
              melding_status,
              melding_datum,
              melding_accepted,
              plan_uitvoertijd_sla,
              melding_afgemeld,
              sla_werkdgn,
              doorlooptijd_werkdgn,
              sla_werkuren,
              doorlooptijd_werkuren,
              uitvoering_sla_optijd,
              melder,
              productgroep,
              prioriteittxt,
              actieve_behandelgroep,
              actieve_behandelaar,
              onderwerp,
              melding_opmerking,
              afdeling_omschrijving,
              melding_einddatum_std
      FROM logc_v_mld_emmen mld
      WHERE mld.MELDING_DATUM< TO_DATE('01-01-'||to_char(SYSDATE-365,'YYYY'), 'DD-MM-YYYY')
          AND mld.MELDING_AFGEMELD > TO_DATE('01-01-'||to_char(SYSDATE-365,'YYYY'), 'DD-MM-YYYY')
    UNION
      SELECT  melding_key,
              kostenplaats_oms,
              subproductgroep,
              subproductgroepgroep,
              melding_status,
              melding_datum,
              melding_accepted,
              plan_uitvoertijd_sla,
              melding_afgemeld,
              sla_werkdgn,
              doorlooptijd_werkdgn,
              sla_werkuren,
              doorlooptijd_werkuren,
              uitvoering_sla_optijd,
              melder,
              productgroep,
              prioriteittxt,
              actieve_behandelgroep,
              actieve_behandelaar,
              onderwerp,
              melding_opmerking,
              afdeling_omschrijving,
              melding_einddatum_std
      FROM logc_v_mld_emmen mld
      WHERE mld.MELDING_DATUM> TO_DATE('01-01-'||TO_CHAR(SYSDATE-365,'YYYY'), 'DD-MM-YYYY')
      );

CREATE OR REPLACE VIEW logc_v_export_open_mld
(
 result, result_order
)
AS
--  SELECT 'Melding key;Kostenplaat oms;Subproductgroep;Subproductgroepgroep;Melding status;Melding datum;Melding accepted;Plan uitvoertijd sla;Melding afgemeld;Sla Werkdgn;Doorlooptijd werkdgn;Doorlooptijd_uren_gepland;Doorlooptijd_uren;uitvoering_sal_optijd;melder;productgroep;Prioriteittxt;Vertantw_behandelgroep;behandelaar;Onderwerp;Melding opmerking;Afdeling_omschrijving;melding_einddatum_stdring sla', FROM dual
--  UNION
  SELECT
   '"'||module||'";"'||
   melding_key||'";"'||
   kostenplaats_oms ||'";"'||
   melder ||'";"'||
   afdeling_omschrijving ||'";"'||
   productgroep ||'";"'||
   subproductgroep ||'";"'||
   subproductgroepgroep ||'";"'||
   melding_status||'";"'||
   sla_werkdgn||'";"'||
   plan_uitvoertijd_sla||'";"'||
   melding_datum||'";"'||
   melding_einddatum_std||'";"'||
   melding_accepted||'";"'||
   melding_afgemeld||'";"'||
   doorlooptijd_werkdgn||'";"'||
   sla_werkuren||'";"'||
   doorlooptijd_werkuren||'";"'||
   onderwerp||'";"'||
   melding_opmerking||'";"'||
   prioriteittxt||'";"'||
   actieve_behandelgroep||'";"'||
   actieve_behandelaar||'";"'||
   uitvoering_sla_optijd||'"',
   to_char (melding_datum, 'yyyymmdd')
  FROM logc_v_rap_emmen;


CREATE OR REPLACE VIEW logc_v_mld_emmen
(
   melding_key,
   meldingnummer,
   melding_start_key,
   externnummer,
   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,
   [REDACTED],
   bedrijf_key,
   invoerder,
   meldbron,
   soortmelding,
   fclt_3d_discipline_key,
   productgroep,
   subproductgroep,
   behandelgroep,
   behandelaar,
   behandelaar_key,
   subproductgroepgroep,
   [REDACTED],
   actieve_behandelgroep,
   actieve_behandelaar_key,
   actieve_behandelaar,
   melding_status,
   sla_nvt,
   sla_werkdgn,
   sla_werkuren,
   sla_respijtdgn,
   sla_respijturen,
   sla_accptdgn,
   sla_accpturen,
   plan_uitvoertijd_sla,
   melding_datum,
   melding_einddatum,
   melding_einddatum_std,
   melding_acceptdatum,
   melding_afgemeld,
   melding_accepted,
   doorlooptijd_werkdgn,
   doorlooptijd_werkuren,
   onderwerp,
   vomschrijving,
   melding_opmerking,
   prioriteit,
   prioriteittxt,
   rating,
   rating_opmerking,
   bolletje,
   actiecode,
   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,
          mld_melding_start_key,
          mld_melding_externnr,
          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,
          stdm_ins_discipline_key,
          productgroep,
          subproductgroep,
          behandelgroep,
          behandelaar,
          behandelaar_key,
          subproductgroepgroep,
          mld_ins_discipline_key,
          actieve_behandelgroep,
          actieve_behandelaar_key,
          actieve_behandelaar,
          status,
          sla_nvt,
          sla_werkdgn,
          sla_werkuren,
          sla_respijtdgn,
          sla_respijturen,
          sla_accptdgn,
          sla_accpturen,
          plan_uitvoertijd_sla,
          datum,
          einddatum,
          einddatum_std,
          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,
          mld_melding_actiecode,
          DECODE (x.t_doorlooptijd.eenheid, 'D', acceptdatum - COALESCE (accepted, afgemeld), NULL)
             accept_sla_dagen,
          CAST (
            DECODE (x.t_doorlooptijd.eenheid,
                    'U', (acceptdatum - COALESCE (accepted, afgemeld)) * 24,
                    NULL)
           AS NUMBER(7,2)
          )
             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,
          CAST (
            DECODE (
               x.t_doorlooptijd.eenheid,
               'U',
               ( (mld.geteinddatum (mld_melding_key) - COALESCE (afgemeld, SYSDATE)) * 24)
               + COALESCE (sla_respijturen, 0),
               NULL)
           AS NUMBER(7,2)
          )
             uitvoering_sla_uren,
          DECODE (x.t_doorlooptijd.eenheid,
                  'D', einddatum - COALESCE (afgemeld, SYSDATE) + COALESCE (sla_respijtdgn, 0),
                  NULL)
             afspraak_sla_dagen,
          CAST (
            DECODE (
               x.t_doorlooptijd.eenheid,
               'U',
               ( (einddatum - COALESCE (afgemeld, SYSDATE)) * 24) + COALESCE (sla_respijtdgn, 0),
               NULL)
           AS NUMBER(7,2)
          )
             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.mld_melding_start_key,
                  m.mld_melding_externnr,
                  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,
                   COALESCE (
                      (SELECT prs_afdeling_naam
                         FROM prs_afdeling afd
                        WHERE     afd.prs_afdeling_key = m.prs_afdeling_key),
                      (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,
                   COALESCE (
                      (SELECT prs_afdeling_omschrijving
                         FROM prs_afdeling afd
                        WHERE     afd.prs_afdeling_key = m.prs_afdeling_key),
                      (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,
                   COALESCE (
                      (m.prs_afdeling_key),
                      (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 stdm_ins_discipline_key,
                  md.ins_discipline_omschrijving 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,
                  m.mld_ins_discipline_key mld_ins_discipline_key,
                  (SELECT md2.ins_discipline_omschrijving
                     FROM mld_discipline md2
                    WHERE md2.ins_discipline_key = m.mld_ins_discipline_key) actieve_behandelgroep,
                  m.mld_melding_behandelaar2_key actieve_behandelaar_key,
                  (SELECT prs_perslid_naam_full
                     FROM prs_v_perslid_fullnames_all pf
                    WHERE pf.prs_perslid_key = m.[REDACTED])
                     actieve_behandelaar,
                  (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_melding_einddatum_std einddatum_std,
                  mld_melding_acceptdatum_std 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,
                  REPLACE(REPLACE(m.mld_melding_omschrijving,CHR(10),''),CHR(13),'') omschrijving,
                  m.mld_melding_opmerking opmerking,
                  m.mld_melding_spoed,
                  m.mld_melding_satisfaction,
                  m.mld_melding_satisfaction_op,
                  m.mld_melding_flag,
                  mld_melding_actiecode
             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;

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