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

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

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

CREATE OR REPLACE VIEW pcin_v_rap_import_log
(
   fclt_f_applicatie,
   datum,
   fclt_f_status,
   omschrijving,
   hint
)
AS
   SELECT COALESCE (fac_import_app_code, imp_log_applicatie),
          TO_CHAR (imp_log_datum, 'dd-mm-yyyy hh24:mi'),
          imp_log_status,
          imp_log_omschrijving,
          imp_log_hint
     FROM imp_log il1, fac_import fi1, fac_import_app fia1
    WHERE il1.fac_import_key = fi1.fac_import_key(+)
          AND fi1.fac_import_app_key = fia1.fac_import_app_key(+)
          AND NOT EXISTS
                (SELECT 1
                   FROM imp_log il2, fac_import fi2
                  WHERE     il2.fac_import_key = fi2.fac_import_key
                        AND fi2.fac_import_app_key = fi1.fac_import_app_key
                        AND il2.fac_import_key > il1.fac_import_key);

CREATE OR REPLACE PROCEDURE pcin_import_prs (p_import_key IN NUMBER)
AS
   v_errormsg       VARCHAR2 (1000) := '-';
   v_errorhint      VARCHAR2 (1000) := '-';
   oracle_err_num   NUMBER;
   oracle_err_mes   VARCHAR2 (200);
BEGIN
   v_errorhint := 'Generieke import';

   --Naam;Voornaam;tussenvoegsel;Achternaam;Login;Plaats;Mobiel;Email;Personeelsnummer;Afdelingscode;Functie
   -- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;10;4;3;2;'
      || '0;0;0;0;0;0;7;8;0;9;'
      || '11;5;0;0;0;0;6;0;0;0;'
      || '0;0;0;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      'Naam;Voornaam;tussenvoegsel;Achternaam;Login;Plaats;Mobiel;Email;Personeelsnummer;Afdelingscode;Functie%');
   COMMIT;

   -- Klantspecifieke aanpassingen.
   -- Locatie/Gebouw/Verdieping/Ruimte bepalen via Plaats-kolom -> Bezoekplaats van Locatie
   -- en daaronder Ruimte '_000' op Verdieping 0!
   -- Als persoon al een WP heeft op import-locatie, dan is dat de juiste en blijft deze
   -- (handmatig gecorrigeerde WP) ongewijzigd. In alle andere gevallen verhuist persoon
   -- naar Ruimte '_000' op Verdieping 0 op import-locatie!
   -- Eventuele WPs onder andere locaties dan de import-locatie blijven ook ongewijzigd!
   UPDATE fac_imp_perslid i
      SET i.alg_locatie_code =
             (SELECT il.alg_locatie_code
                FROM alg_v_aanweziglocatie il
               WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziglocatie
                             WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_gebouw_code =
             (SELECT MIN (ig.alg_gebouw_code)
                FROM alg_v_aanweziglocatie il, alg_v_aanweziggebouw ig
               WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
                     AND il.alg_locatie_key = ig.alg_locatie_key
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziglocatie
                             WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)),
          i.alg_verdieping_volgnr = 0,
          i.alg_ruimte_nr = '_000'
    WHERE NOT EXISTS                      -- Nog geen werkplek binnen Locatie!
             (SELECT 1
                FROM alg_v_aanweziglocatie il,
                     prs_v_aanwezigperslid p,
                     prs_perslidwerkplek pw,
                     prs_werkplek cw,
                     alg_v_aanwezigruimte cr,
                     alg_verdieping cv,
                     alg_gebouw cg,
                     alg_locatie cl
               WHERE il.alg_locatie_upper = UPPER (i.prs_kenmerk1) -- Of UPPER (il.alg_locatie_bezoek_plaats) = UPPER (i.prs_kenmerk1)?
                     AND NOT EXISTS
                           (SELECT 1
                              FROM alg_v_aanweziglocatie
                             WHERE alg_locatie_upper = UPPER (i.prs_kenmerk1)
                                   AND alg_locatie_key < il.alg_locatie_key)
                     AND p.prs_perslid_nr = i.prs_perslid_nr
                     AND p.prs_perslid_key = pw.prs_perslid_key
                     AND pw.prs_werkplek_key = cw.prs_werkplek_key
                     AND cw.prs_alg_ruimte_key = cr.alg_ruimte_key
                     AND cr.alg_verdieping_key = cv.alg_verdieping_key
                     AND cv.alg_gebouw_key = cg.alg_gebouw_key
                     AND cg.alg_locatie_key = il.alg_locatie_key);
   COMMIT;

   -- Strippen 'PCI\' uit loginnaam!
   UPDATE fac_imp_perslid i
      SET i.prs_perslid_oslogin = SUBSTR (i.prs_perslid_oslogin, 5)
    WHERE UPPER (i.prs_perslid_oslogin) LIKE 'PCI\\%' ESCAPE '\';     -- ' tbv. opmaak
   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
      v_errormsg := 'ORACLE (error ' || oracle_err_num || '/' || oracle_err_mes || ') ';
      fac.imp_writelog (p_import_key, 'E', v_errormsg || v_errorhint, 'Inleesproces personen afgebroken!');
END pcin_import_prs;
/

CREATE OR REPLACE PROCEDURE pcin_update_prs (p_import_key IN NUMBER)
IS
   -- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid!
   -- Dubbele perslid_nr? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
   CURSOR c_del
   IS
        --SELECT p.prs_perslid_key, p.prs_perslid_nr
        --  FROM prs_v_aanwezigperslid p, fac_imp_perslid i
        -- WHERE p.prs_perslid_nr IS NOT NULL
        --       AND p.prs_perslid_nr = i.prs_perslid_nr(+)
        --       AND i.prs_perslid_nr IS NULL
        SELECT p.prs_perslid_key, p.prs_perslid_nr
          FROM prs_v_aanwezigperslid p
         WHERE p.prs_perslid_nr IS NOT NULL
               AND NOT EXISTS
                     (SELECT 1
                        FROM fac_imp_perslid i
                       WHERE UPPER (i.prs_perslid_nr) = UPPER (p.prs_perslid_nr))
      ORDER BY 2;
BEGIN
   -- Generieke update.
   prs.update_perslid (p_import_key, 'NR', 'A');

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

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