--
-- $Id$
--
-- ARAI#75066 deel 6: Taken aanmaken
--
DEFINE thisfile = 'ARAI#75066-6.SQL'
DEFINE dbuser   = 'ARAI'

SET ECHO ON
SET DEFINE ON
COLUMN fcltlogfile NEW_VALUE fcltlogfile NOPRINT;
COLUMN fcltcusterr NEW_VALUE fcltcusterr NOPRINT;
WHENEVER SQLERROR CONTINUE;
SELECT adm.getscriptspoolfile('&thisfile') AS fcltlogfile FROM DUAL;
SPOOL &fcltlogfile
WHENEVER SQLERROR EXIT;
SELECT adm.checkscriptcust('&dbuser') AS fcltcusterr FROM DUAL;
WHENEVER SQLERROR CONTINUE;
PROMPT &fcltcusterr
SET DEFINE OFF

------ payload begin ------

-- Maak de taken aan

DECLARE
    CURSOR c IS
        SELECT TRIM (fac_imp_csv_col13 || fac_imp_csv_col01) ins_deel_omschrijving,
               TRIM (fac_imp_csv_col08)     ins_srtdeel_code,
               TRIM (fac_imp_csv_col46)     ins_srtcontrole_omschrijving, -- taak
               fac_imp_csv_col53            ins_srtcontroledl_xcp_materia, -- prijs/stuk
               fac_imp_csv_col55            ins_srtcontrole_periode, -- cyclus
               FAC.safe_to_date(fac_imp_csv_col54 || '0101', 'yyyymmdd')            ins_srtcontroledl_xcp_startdat, -- startjaar
               fac_imp_csv_col49            ins_srtcontroledl_xcp_aantal, -- taak aantal
               TRIM (fac_imp_csv_col51)     ins_srtcontroledl_xcp_aanteh, -- taak_eenheid
               TRIM (fac_imp_csv_col61)     ins_srtcontroledl_xcp_groep, -- fasering
               TRIM (fac_imp_csv_col61)     prs_kostenplaats_nr -- fasering
          FROM fac_imp_csv
         WHERE COALESCE(fac_imp_csv_col53, '0') <> '0';

    oracle_err_num             NUMBER;
    oracle_err_mes             VARCHAR2 (200);
    v_errormsg                 VARCHAR2 (200);
    v_errorhint                VARCHAR2 (200);
    v_aanduiding               VARCHAR2 (100);

    v_deel_key                 NUMBER;
    v_srtdeel_key              NUMBER;
    v_srtcontrole_key          NUMBER;
    v_srtcontroledl_xcp_key    NUMBER;
    v_taakcat_key              NUMBER;
    v_srtcontrole_periode      INS_SRTCONTROLE.INS_SRTCONTROLE_PERIODE%TYPE;
    v_srtcontrole_materiaal    INS_SRTCONTROLE.INS_SRTCONTROLE_MATERIAAL%TYPE;
    v_srtcontrole_percentage   INS_SRTCONTROLE.INS_SRTCONTROLE_PERCENTAGE%TYPE;
    v_srtcontrole_level        INS_SRTCONTROLE.INS_SRTCONTROLE_LEVEL%TYPE;
    v_percentage               NUMBER;
    v_materiaal                INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_MATERIA%TYPE;
    v_kostenplaats_key         PRS_KOSTENPLAATS.PRS_KOSTENPLAATS_KEY%TYPE;
    v_aantal                   INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_AANTAL%TYPE;
    v_stopdat                  INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_EIND%TYPE;
    v_periode                  INS_SRTCONTROLEDL_XCP.INS_SRTCONTROLEDL_XCP_PERIODE%TYPE;
BEGIN

-- Eerst de eenmalige vervangingstaken die geen cyclus hebben op 100 jaar zetten, anders wordt de taak niet aangemaakt
UPDATE fac_imp_csv
SET fac_imp_csv_col55 = 100
WHERE fac_imp_csv_col55 IS NULL;

    FOR rec IN c
    LOOP
        BEGIN
            v_aanduiding := rec.ins_deel_omschrijving;
            -- zoek het object
            v_errorhint := 'Zoek het object';

            SELECT ins_deel_key, ins_srtdeel_key
              INTO v_deel_key, v_srtdeel_key
              FROM ins_deel
             WHERE ins_deel_omschrijving = rec.ins_deel_omschrijving;

            -- zoek de taakcategorie
            v_errorhint := 'Zoek de taakcategorie';
            
            CASE
            WHEN UPPER (rec.ins_srtcontroledl_xcp_groep) = '5'
            THEN
            v_taakcat_key := 3382;  -- Energie besparende maatregelen
            WHEN UPPER (rec.ins_srtcontroledl_xcp_groep) = '10'
            THEN
            v_taakcat_key := 3381;  -- Preventief onderhoud
            WHEN UPPER (rec.ins_srtcontroledl_xcp_groep) = '20'
            THEN
            v_taakcat_key := 1342;  -- Vervanging
            WHEN UPPER (rec.ins_srtcontroledl_xcp_groep) = '30'
            THEN
            v_taakcat_key := 1341;  -- Correctief onderhoud
            ELSE
            v_taakcat_key := 1341;  -- Correctief onderhoud
            END CASE;

            --            SELECT ins_discipline_key
            --              INTO v_taakcat_key
            --              FROM ctr_discipline
            --             WHERE UPPER (ins_discipline_omschrijving) =
            --                   UPPER (rec.ins_kenmerkwaarde3);

                v_errorhint := 'Bepaal materiaalkosten';
                v_materiaal :=
                    FAC.safe_to_number (
                        REPLACE (rec.ins_srtcontroledl_xcp_materia, ',', '.'));

                v_aantal :=
                    FAC.safe_to_number (
                        REPLACE (rec.ins_srtcontroledl_xcp_aantal, ',', '.'));

            BEGIN
                v_errorhint := 'Bepaal percentage';
                v_percentage := NULL;

                --                IF     rec.ins_kenmerkwaarde7 <> 1
                --                   AND rec.ins_kenmerkwaarde7 IS NOT NULL
                --                THEN
                --                    v_percentage := rec.ins_kenmerkwaarde7 * 100;
                --                END IF;
                v_percentage := 100;


                -- zoek de taak
                v_errorhint := 'Zoek de taak';

                SELECT ins_srtcontrole_key,
                       ins_srtcontrole_periode,
                       ins_srtcontrole_materiaal,
                       ins_srtcontrole_percentage
                  INTO v_srtcontrole_key,
                       v_srtcontrole_periode,
                       v_srtcontrole_materiaal,
                       v_srtcontrole_percentage
                  FROM ins_srtcontrole
                 WHERE     ins_srtinstallatie_key = v_srtdeel_key
                       AND ins_srtcontrole_omschrijving = SUBSTR(rec.ins_srtdeel_code || ' - ' || rec.ins_srtcontrole_omschrijving,1,60)
                       AND ins_srtcontrole_niveau = 'S'
                       AND ctr_discipline_key = v_taakcat_key;
            EXCEPTION
                WHEN NO_DATA_FOUND
                THEN
                    v_errorhint := 'Bepalen level';
                    v_srtcontrole_level := 10;


            v_errorhint := 'Aanmaken srtcontrole';

            -- We vullen de controle altijd met een bedrag van 0 euro. De overrule heeft dan het juiste
            -- bedrag. Hiermee voorkomen we een controle met een bepaald bedrag waarbij er voor een bepaald object
            -- die taak niet voorkomt.
            INSERT INTO ins_srtcontrole (ins_srtinstallatie_key,
                                         ins_srtcontrole_niveau,
                                         ins_srtcontrole_omschrijving,
                                         ctr_discipline_key,
                                         ins_srtcontrole_periode,
                                         ins_srtcontrole_eenheid,
                                         ins_srtcontrole_level,
                                         ins_srtcontrole_materiaal)
                 VALUES (
                     v_srtdeel_key,
                     'S',
                      SUBSTR(  rec.ins_srtdeel_code || ' - '
                     || rec.ins_srtcontrole_omschrijving,1,60),
                     v_taakcat_key,
                     0,
                     4,
                     v_srtcontrole_level,
                     0)
              RETURNING ins_srtcontrole_key
                   INTO v_srtcontrole_key;

            END;

            BEGIN
               SELECT prs_kostenplaats_key
                 INTO v_kostenplaats_key
                 FROM prs_kostenplaats
                WHERE prs_kostenplaats_nr = rec.prs_kostenplaats_nr;
            EXCEPTION WHEN OTHERS THEN
               v_kostenplaats_key := NULL;
            END;

            -- dan moeten we een dl_xcp record aanmaken
            v_errorhint := 'Aanmaken xcp ' || rec.ins_deel_omschrijving || ' bedrag: ' || v_materiaal || '#' ||  v_srtcontrole_key ||'-' || v_deel_key;

            v_stopdat := NULL;
            v_periode := rec.ins_srtcontrole_periode;

            IF v_periode = 0
            THEN
               v_stopdat := add_months(rec.ins_srtcontroledl_xcp_startdat, 12);
               v_periode := 1;
            END IF;

            INSERT INTO ins_srtcontroledl_xcp (
                            ins_srtcontrole_key,
                            ins_srtcontroledl_xcp_periode,
                            ins_srtcontroledl_xcp_materia,
                            ins_srtcontroledl_xcp_startdat,
                            ins_srtcontroledl_xcp_eind,
                            ins_srtcontroledl_xcp_aantal,
                            ins_srtcontroledl_xcp_aanteh,
                            ins_srtcontroledl_xcp_groep,
                        --    prs_kostenplaats_key,
                            ins_deel_key)
                 VALUES (v_srtcontrole_key,
                         v_periode,
                         v_materiaal,
                         rec.ins_srtcontroledl_xcp_startdat,
                         v_stopdat,
                         v_aantal,
                         rec.ins_srtcontroledl_xcp_aanteh,
                         rec.ins_srtcontroledl_xcp_groep,
                        -- v_kostenplaats_key,
                         v_deel_key)
              RETURNING ins_srtcontroledl_xcp_key
                   INTO v_srtcontroledl_xcp_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
                    || ')';
                fac.writelog ('ARAI.import MJOB',
                              'E',
                              v_aanduiding || ': ' || v_errormsg,
                              v_errorhint);
        END;
    END LOOP;
END;
/

------ payload end   ------

SET DEFINE OFF
BEGIN adm.systrackscriptId ('$Id$', 1); END;
/

COMMIT;
SET ECHO OFF
SPOOL OFF
SET DEFINE ON
PROMPT Logfile of this upgrade is: &fcltlogfile