--
-- $Id$
--
--  tijdelijke import scripts voor de splitsing van medewerkers binnen Akzo Nobel

DEFINE thisfile = '51186.SQL'
DEFINE dbuser   = '^AKZA'
DEFINE custid   = 'AKZA'

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 PROCEDURE akza_import_prs (p_import_key IN NUMBER)
AS
   oracle_err_num     NUMBER;
   oracle_err_mes     VARCHAR2 (200);
   v_errormsg         VARCHAR2 (400);
   v_errorhint        VARCHAR2 (400);
   v_aantal_in_FCLT   NUMBER;
BEGIN
   v_errorhint := 'Generieke update';
   -- de sequence array staat beschreven in PRS_PAC.SRC bij de prs.import_perslid proc
   prs.import_perslid (
      p_import_key,
         '0;0;0;0;0;0;7;2;0;3;'
      || '0;0;0;0;0;0;0;6;0;0;'
      || '1;1;0;0;0;0;4;0;0;0;'
      || '0;0;0;0;0;0;0;0;0;0;'
      || '0;0;0;0;0;0',
      'AD account;Achternaam;Voornaam;Naam + Voornaam;Pers. Nr;E-mail;Bedrijf%');


-- Eerst maar eens de oslogin aanpassen conform de huidge opmaak in Facilitor
UPDATE fac_imp_perslid
   SET prs_perslid_oslogin = SUBSTR (prs_perslid_oslogin, 5, 20)
 WHERE prs_perslid_oslogin LIKE 'D30\%';

-- Medewerkers die op basis van de login niet bekend en actief zijn in Facilitor kunnen verwijderd worden uit deze import
DELETE fac_imp_perslid i
 WHERE i.prs_perslid_oslogin NOT IN
             (SELECT p.prs_perslid_oslogin
                FROM prs_perslid p
               WHERE     i.prs_perslid_oslogin = p.prs_perslid_oslogin
                     AND p.prs_perslid_verwijder IS NULL
                     AND p.prs_perslid_einddatum IS NULL);

-- ter voorbereiding op het vullen van het prskenmerk company zetten we maar vast de juiste code in kenmerkveldje 20
UPDATE FAC_IMP_PERSLID I
   SET i.prs_kenmerk20 =
          DECODE (i.prs_afdeling_naam, 'C', '4348', 'PC', '4349');

-- Dan even kijken of we de functie kunnen achterhalen obv login_id
UPDATE fac_imp_perslid i
   SET i.prs_srtperslid_omschrijving =
          (SELECT DISTINCT f.prs_srtperslid_omschrijving
             FROM prs_perslid p, prs_srtperslid f
            WHERE i.prs_perslid_oslogin = p.prs_perslid_oslogin(+)
                  AND p.prs_srtperslid_key = f.prs_srtperslid_key(+));

-- Op basis van de login kunnen we ook de naam weer netjes zetten
UPDATE fac_imp_perslid i
   SET i.prs_perslid_naam =
          (SELECT p.prs_perslid_naam
             FROM prs_perslid P
            WHERE i.prs_perslid_oslogin = p.prs_perslid_oslogin),
       i.prs_perslid_tussenvoegsel =
          (SELECT p.prs_perslid_tussenvoegsel
             FROM prs_perslid p
            WHERE i.prs_perslid_oslogin = p.prs_perslid_oslogin),
       i.prs_perslid_voorletters =
          (SELECT p.prs_perslid_voorletters
             FROM prs_perslid p
            WHERE i.prs_perslid_oslogin = p.prs_perslid_oslogin),
       i.prs_perslid_voornaam =
          (SELECT p.prs_perslid_voornaam
             FROM prs_perslid p
            WHERE i.prs_perslid_oslogin = p.prs_perslid_oslogin);

-- eerst maar eens even opknippen
-- als de afdelingscode in fac_imp_perslid = C dan is het een chemicals mdw, de afdelingsomschrijving is aangevuld met een C
-- als de afdelingscode in fac-imp_perslid = PC dan is het een paints and coatings mdw, de afdelingsomschrijving is aangevuld met een P
UPDATE FAC_IMP_PERSLID i
   SET i.prs_afdeling_naam =
          DECODE (
             i.prs_afdeling_naam,
             'PC',
             (SELECT 'P' || SUBSTR (a.prs_afdeling_naam, 1, 14)
                FROM prs_perslid p, prs_afdeling a
               WHERE p.prs_perslid_oslogin = i.prs_perslid_oslogin
                     AND p.prs_afdeling_key = a.prs_afdeling_key),
             'C',
             (SELECT 'C' || SUBSTR (a.prs_afdeling_naam, 1, 14)
                FROM prs_perslid p, prs_afdeling a
               WHERE p.prs_perslid_oslogin = i.prs_perslid_oslogin
                     AND p.prs_afdeling_key = a.prs_afdeling_key));


   COMMIT;
EXCEPTION
   WHEN OTHERS
   THEN
      oracle_err_num := SQLCODE;
      oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
      v_errormsg := 'Error ' || oracle_err_num || '/' || oracle_err_mes;
      fac.imp_writelog (p_import_key,
                        'E',
                        v_errormsg,
                        v_errorhint);
END akza_import_prs;
/


CREATE OR REPLACE PROCEDURE akza_update_prs (p_import_key IN NUMBER)
IS
   v_count   NUMBER;

   CURSOR c_prs_kenmerk_company
   IS
      SELECT p.prs_perslid_key, i.prs_kenmerk20, i.prs_perslid_oslogin
        FROM fac_imp_perslid i, prs_perslid p
       WHERE     fac_import_key = p_import_key
             AND i.prs_perslid_oslogin = p.prs_perslid_oslogin
             AND i.prs_kenmerk20 IS NOT NULL;


   CURSOR c_prs_gebr
   IS
      SELECT p.prs_perslid_key, i.prs_perslid_oslogin
        FROM fac_imp_perslid i, prs_perslid p
       WHERE fac_import_key = p_import_key
             AND i.prs_perslid_oslogin = p.prs_perslid_oslogin;
BEGIN
   -- generic update
   -- 'LOGIN' betekent dat op basis van Login wordt gematched.
   -- 'NR' betekent dat op basis van Personeelsnummer wordt gematched.
   -- 'A' betekent altijd alle (andere/overige) werkplekken verwijderen
   prs.update_perslid (p_import_key, 'LOGIN', NULL);

   FOR rc IN c_prs_kenmerk_company
   LOOP
      BEGIN
         -- Company heeft kenmerkkey 1520
         prs.upsertkenmerk (1520, rc.prs_perslid_key, rc.prs_kenmerk20);
      EXCEPTION
         WHEN OTHERS
         THEN
            fac.imp_writelog (
               p_import_key,
               'W',
               'Company vullen bij persoon is NIET volledig uitgevoerd )',
               'OSLOGIN:' || rc.prs_perslid_oslogin);
      END;
   END LOOP;

   FOR rc IN c_prs_gebr
   LOOP
      BEGIN
         INSERT INTO FAC_GEBRUIKERSGROEP (fac_groep_key, prs_perslid_key)
             VALUES (2402, rc.prs_perslid_key);
      EXCEPTION
         WHEN OTHERS
         THEN
            fac.imp_writelog (p_import_key,
                              'W',
                              'Autorisatie is niet toegekend )',
                                'OSLOGIN:' || rc.prs_perslid_oslogin);
      END;
   END LOOP;
END akza_update_prs;
/
------ 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
