--
-- $Id$
--
-- Script containing customer specific sql statements for the AASA database
-- Bijwerken van vastgoedgegevens naar aanleiding van nieuwe importsheet.

DEFINE thisfile = 'AASA#54508.SQL'
DEFINE dbuser   = '^AASA'

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

BEGIN
FAC.INITSESSION('NL');
END;
/

DECLARE
    CURSOR c
    IS
        SELECT * FROM fac_imp_onrgoed2;

    CURSOR c_del
    IS
        SELECT * FROM alg_v_ruimte_gegevens
                 WHERE     alg_locatie_key = 101
                       AND alg_ruimte_nr NOT IN
                               (SELECT alg_ruimte_nr FROM fac_imp_onrgoed2);

    v_import_key               NUMBER;
    v_ruimte_key               NUMBER;
    v_ruimte_omschrijving      VARCHAR2 (100);
    v_srtruimte_key            NUMBER;
    v_srtruimte_omschrijving   VARCHAR2 (100);
    v_verdieping_key           NUMBER;
    v_verdieping_volgnr        NUMBER;
    v_gebouw_code              VARCHAR2 (100);
    v_gebouw_key               NUMBER;
    v_locatie_key              NUMBER;
    v_count                    NUMBER;
    v_aanduiding               VARCHAR2 (300);
    v_hint                     VARCHAR2 (100);
    v_errormsg                 VARCHAR (200);
    oracle_err_num             NUMBER;
    oracle_err_mes             VARCHAR2 (200);
BEGIN
    SELECT MAX (fac_import_key)
      INTO v_import_key
      FROM fac_import
     WHERE fac_import_app_key = 3;                          -- import vastgoed

    DELETE imp_log
     WHERE fac_import_key = v_import_key;

    FOR rec IN c
    LOOP
        v_aanduiding :=
               '['
            || rec.alg_locatie_code
            || '-'
            || rec.alg_gebouw_code
            || '-'
            || rec.alg_verdieping_volgnr
            || '-'
            || rec.alg_ruimte_nr
            || ']';

        SELECT alg_locatie_key
          INTO v_locatie_key
          FROM alg_locatie
         WHERE alg_locatie_code = rec.alg_locatie_code;

        SELECT COUNT (alg_ruimte_key)
          INTO v_count
          FROM alg_v_ruimte_gegevens
         WHERE     alg_locatie_key = v_locatie_key
               AND alg_ruimte_nr = rec.alg_ruimte_nr;

        IF v_count = 0
        THEN
            aaxx_imp_writelog (
                v_import_key,
                'E',
                'Ruimte kan niet gevonden worden ' || v_aanduiding,
                '');
            CONTINUE;
        END IF;

        IF v_count > 1
        THEN
            aaxx_imp_writelog (
                v_import_key,
                'E',
                'Ruimte komt ' || v_count || ' keer voor ' || v_aanduiding,
                '');
            CONTINUE;
        END IF;

        BEGIN
            v_hint := 'Ophalen ruimtegegevens ';

            SELECT alg_ruimte_key,
                   alg_srtruimte_key,
                   alg_srtruimte_omschrijving,
                   alg_gebouw_upper,
                   alg_verdieping_volgnr,
                   alg_ruimte_omschrijving
              INTO v_ruimte_key,
                   v_srtruimte_key,
                   v_srtruimte_omschrijving,
                   v_gebouw_code,
                   v_verdieping_volgnr,
                   v_ruimte_omschrijving
              FROM alg_v_ruimte_gegevens
             WHERE     alg_locatie_key = v_locatie_key
                   AND alg_ruimte_nr = rec.alg_ruimte_nr;

            IF v_gebouw_code <> rec.alg_gebouw_code
            THEN
                aaxx_imp_writelog (
                    v_import_key,
                    'I',
                       'Gebouw moet aangepast worden van '
                    || v_gebouw_code
                    || v_aanduiding,
                    '');

                SELECT alg_verdieping_key
                  INTO v_verdieping_key
                  FROM alg_verdieping v, alg_gebouw g
                 WHERE     v.alg_gebouw_key = g.alg_gebouw_key
                       AND v.alg_verdieping_volgnr =
                           rec.alg_verdieping_volgnr
                       AND g.alg_gebouw_code = rec.alg_gebouw_code;

                UPDATE alg_ruimte
                   SET alg_verdieping_key = v_verdieping_key
                 WHERE alg_ruimte_key = v_ruimte_key;
            ELSIF v_verdieping_volgnr <> rec.alg_verdieping_volgnr
            THEN
                aaxx_imp_writelog (
                    v_import_key,
                    'I',
                       'Verdieping moet aangepast worden van '
                    || v_verdieping_volgnr
                    || v_aanduiding,
                    '');

                SELECT alg_verdieping_key
                  INTO v_verdieping_key
                  FROM alg_verdieping v, alg_gebouw g
                 WHERE     v.alg_gebouw_key = g.alg_gebouw_key
                       AND v.alg_verdieping_volgnr =
                           rec.alg_verdieping_volgnr
                       AND g.alg_gebouw_code = rec.alg_gebouw_code;

                UPDATE alg_ruimte
                   SET alg_verdieping_key = v_verdieping_key
                 WHERE alg_ruimte_key = v_ruimte_key;
            END IF;

            IF v_srtruimte_omschrijving <> rec.alg_srtruimte_omschrijving
            THEN
                aaxx_imp_writelog (
                    v_import_key,
                    'I',
                       'Ruimtefunctie moet aangepast worden van '
                    || v_srtruimte_omschrijving
                    || v_aanduiding
                    || rec.alg_srtruimte_omschrijving,
                    '');
                v_hint := 'Ophalen ruimtefunctie ';

                SELECT COUNT (*)
                  INTO v_count
                  FROM alg_srtruimte
                 WHERE alg_srtruimte_upper =
                       UPPER (rec.alg_srtruimte_omschrijving);

                IF v_count = 0
                THEN
                    aaxx_imp_writelog (
                        v_import_key,
                        'E',
                           'Ruimtefunctie kan niet gevonden worden ('
                        || rec.alg_srtruimte_omschrijving
                        || ')'
                        || v_aanduiding,
                        '');
                ELSE
                    SELECT alg_srtruimte_key
                      INTO v_srtruimte_key
                      FROM alg_srtruimte
                     WHERE alg_srtruimte_upper =
                           UPPER (rec.alg_srtruimte_omschrijving);

                    UPDATE alg_ruimte
                       SET alg_srtruimte_key = v_srtruimte_key
                     WHERE alg_ruimte_key = v_ruimte_key;
                END IF;
            END IF;

            IF v_ruimte_omschrijving <> rec.alg_ruimte_omschrijving
            THEN
                v_hint := 'Aanpassen ruimteomschrijving ';
                aaxx_imp_writelog (
                    v_import_key,
                    'I',
                       'Ruimteomschrijving moet aangepast worden van '
                    || v_ruimte_omschrijving
                    || v_aanduiding
                    || rec.alg_ruimte_omschrijving,
                    '');

                UPDATE alg_ruimte
                   SET alg_ruimte_omschrijving = rec.alg_ruimte_omschrijving
                 WHERE alg_ruimte_key = v_ruimte_key;
            END IF;
        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                v_errormsg :=
                       'OTHERS (error '
                    || oracle_err_num
                    || '/'
                    || oracle_err_mes
                    || ')';

                aaxx_imp_writelog (v_import_key,
                                   'E',
                                   v_errormsg,
                                   v_hint || ' - ' || v_aanduiding);
        END;
    END LOOP;

    -- Verwijder ruimten in Facilitor
    FOR rec IN c_del
    LOOP

        v_aanduiding :=
               '['
            || rec.alg_locatie_code
            || '-'
            || rec.alg_gebouw_upper
            || '-'
            || rec.alg_verdieping_volgnr
            || '-'
            || rec.alg_ruimte_nr
            || ']';
        BEGIN
            UPDATE alg_ruimte
               SET alg_ruimte_verwijder = SYSDATE
             WHERE alg_ruimte_key = rec.alg_ruimte_key;

        EXCEPTION
            WHEN OTHERS
            THEN
                oracle_err_num := SQLCODE;
                oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
                v_errormsg :=
                       'OTHERS (error '
                    || oracle_err_num
                    || '/'
                    || oracle_err_mes
                    || ')';

                aaxx_imp_writelog (v_import_key,
                                   'E',
                                   v_errormsg,
                                   v_hint || ' - ' || v_aanduiding);
        END;
    END LOOP;

    -- Verwijder ruimten die in Facilitor staan uit de import. Dan kunnen we daarna de import verder afmaken
    -- zodat de nog niet bestaande ruimten aangemaakt worden.
    DELETE fac_imp_onrgoed2
     WHERE alg_ruimte_nr IN (SELECT alg_ruimte_nr
                               FROM alg_v_ruimte_gegevens
                              WHERE alg_locatie_key = 101);



    COMMIT;

END;
/

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