--
-- $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 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
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_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_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 'PROJECTDATUM'    THEN i_datum_txt := v_index;
                  WHEN 'PROJECT'         THEN i_project := v_index;
                  WHEN 'CATEGORIE'       THEN i_categorie := v_index;
                  WHEN 'WERKNEMER'       THEN i_werknemer := v_index;
                  WHEN 'UREN'            THEN i_uren := v_index;
                  WHEN 'TRANSACTIETEKST' THEN i_transactietekst := v_index;
                  ELSE
                     NULL;
                  END CASE;

               END LOOP;
               IF     i_datum_txt > 0
                  AND i_project > 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_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);


                  IF v_transactietekst IS NOT NULL AND INSTR(v_transactietekst, '#') > 0
                  THEN
                     v_transactietekst := REGEXP_SUBSTR (v_transactietekst , '[[:alpha:]]{3,}#[[: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, uren, datum_txt, categorie, werknemer)
                            VALUES (v_transactietekst, v_project, 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_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_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 a1.prs_afdeling_naam
               parent_afdeling,
           prs_kostenplaats_nr,
           prs_kostenplaats_omschrijving,
           a1.prs_afdeling_key
               fclt_3d_afdeling_key,
           i.project,
           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
      FROM logc_imp_uren_besteding      i,
           mld_melding                  m,
           (SELECT DISTINCT
                   (DECODE (niveau,
                            2, prs_afdeling_parentkey,
                            1, prs_afdeling_key,
                            NULL))
                       prs_afdeling_key,
                   prs_kostenplaats_key
              FROM prs_v_afdeling
             WHERE prs_afdeling_verwijder IS NULL) ak,
           prs_v_aanwezigafdeling       a1,
           prs_perslid                  p,
           prs_kostenplaats             k,
           prs_v_perslid_fullnames_all  pf
     WHERE     i.mld_melding_key = m.mld_melding_key(+)
           AND m.prs_kostenplaats_key = ak.prs_kostenplaats_key(+)
           AND ak.prs_afdeling_key = a1.prs_afdeling_key(+)
           AND m.prs_kostenplaats_key = k.prs_kostenplaats_key(+)
           AND i.werknemer = p.prs_perslid_nr(+)
           AND p.prs_perslid_key = pf.prs_perslid_key(+);

CREATE OR REPLACE VIEW logc_v_rap_mld_sleeping
AS
      SELECT MAX (actiedatum)
                 laatste_actie,
             TRUNC (SYSDATE) - TRUNC (MAX (actiedatum))
                 dagen_stil,
             (SELECT prs_kostenplaats_nr
                FROM prs_kostenplaats k
               WHERE m.prs_kostenplaats_key = k.prs_kostenplaats_key)
                 cust,
             p.prs_perslid_naam_full
                 melder,
             m.mld_melding_key,
             m.mld_melding_datum
                 geregistreerd,
             ins_discipline_omschrijving
                 behandelgroep,
             mld_stdmelding_omschrijving
                 melding,
             mld_melding_onderwerp,
             pb.prs_perslid_naam_full
                 behandelaar,
             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,
             (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
    GROUP BY m.mld_melding_key,
             m.prs_kostenplaats_key,
             p.prs_perslid_naam_full,
             m.prs_perslid_key,
             mld_melding_datum,
             ins_discipline_omschrijving,
             mld_stdmelding_omschrijving,
             mld_melding_onderwerp,
             pb.prs_perslid_naam_full,
             mld_melding_flag
    ORDER BY MAX (actiedatum);

CREATE OR REPLACE VIEW LOGC_V_RAP_MLDSALDO
(
    WEEK,
    NIEUW,
    MLDAFM,
    NETTO,
    SALDO
)
AS
    SELECT week,
           nieuw,
           mldafm,
           nieuw - mldafm                            netto,
           SUM (nieuw - mldafm) OVER (ORDER BY week) saldo
      FROM (  SELECT TRUNC (fac_tracking_datum, 'IW')
                         week,
                     (SELECT COUNT (*)
                        FROM mld_melding
                       WHERE TRUNC (mld_melding_datum, 'IW') = TRUNC (fac_tracking_datum, 'IW'))
                         nieuw,
                     COUNT (*)
                         MLDAFM
                FROM fac_tracking
               WHERE fac_srtnotificatie_key = 39                                                                      /* MLDAFM */
            GROUP BY TRUNC (fac_tracking_datum, 'IW')
            ORDER BY TRUNC (fac_tracking_datum, 'IW'));

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,
          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,
          prs_kostenplaats_nr klantcode,
          prs_kostenplaats_omschrijving klant,
          prs_kostenplaats_nr || ' (' || 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
     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,
                  mld_melding_datum,
                  prs_perslid_key,
                  'Nieuw: ' || mld_melding_onderwerp,
                  2
             FROM mld_melding) 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
    WHERE     mld_melding_note_aanmaak > SYSDATE - 365
          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(+);

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