Files
Customer/HMOD/hmod.sql
2019-12-18 15:46:26 +00:00

468 lines
19 KiB
SQL

--
-- $Id$
--
-- Script containing customer specific db-configuration for SVRZ.
DEFINE thisfile = 'HMOD.SQL'
DEFINE dbuser = '^HMOD'
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 hmod_import_perslid (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';
-- De sequence array staat beschreven in PRS_PAC.SRC bij de import_perslid-PROCEDURE.
prs.import_perslid (
p_import_key,
'1;2;3;4;5;6;7;8;9;11;10;20;0;0;0;13;14;15;0;17;16;18;19;12;0;0;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40',
'Locatiecode;Gebouwcode;Bouwlaagvolgnummer;Ruimtenummer;Werkplekvolgnummer;Omschrijving;Afdelingscode;Achternaam;Tussenvoegsel;Voorletters;Roepnaam;Geslacht;Telefoonnummer;Mobiel;Email;Functie;Personeelsnummer;Loginnaam;Password;Meisjesnaam;Brief aanhef;Formatieplaats;Basiskoffer;Functieomschrijving;token;mob;hit;lap+sim;lapt;Toegangsniveau;Facilitor;ADP;Absentiemanager;Regas;Checks;Accountview;Elvy;HodNet;Proactive%');
COMMIT;
UPDATE fac_imp_perslid
SET prs_perslid_geslacht =
CASE
WHEN prs_perslid_titel = 'Man' THEN 1
WHEN prs_perslid_titel = 'Vrouw' THEN 0
ELSE NULL
END,
prs_perslid_partner_naam = -- Meisjesnaam via veld Partnernaam omdat er teveel kenmerkvelden zijn... Leeg maken als geen vrouw
CASE
WHEN prs_perslid_titel = 'Man' THEN ''
ELSE prs_perslid_partner_naam
END,
prs_kenmerk20 = -- Afwijkend = keuzelijst met waarde Ja(21) en Nee(22)
CASE
WHEN prs_kenmerk20 = 'j' OR prs_kenmerk20 = 'J' OR prs_kenmerk20 = 'ja' OR prs_kenmerk20 = 'Ja' THEN '21'
ELSE '22'
END
;
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 hmod_import_perslid;
/
CREATE OR REPLACE PROCEDURE hmod_update_perslid (p_import_key IN NUMBER)
IS
CURSOR c_flex
IS
-- Er zijn in de hmod-import 21 kenmerken terwijl we er in fac_imp_perslid 20 ter beschikking hebben. Het eerste kenmerk 'meisjesnaam' staat daarom op prs_perslid_partner_naam
SELECT p.prs_perslid_key, p.prs_perslid_nr, i.prs_perslid_partner_naam,i.prs_kenmerk1, i.prs_kenmerk2, i.prs_kenmerk3,i.prs_kenmerk4,i.prs_kenmerk5,i.prs_kenmerk6,i.prs_kenmerk7,i.prs_kenmerk8,i.prs_kenmerk9,i.prs_kenmerk10,i.prs_kenmerk11,i.prs_kenmerk12,i.prs_kenmerk13,i.prs_kenmerk14,i.prs_kenmerk15,i.prs_kenmerk16,i.prs_kenmerk17,i.prs_kenmerk18,i.prs_kenmerk19,i.prs_kenmerk20
FROM prs_v_aanwezigperslid p, fac_imp_perslid i
WHERE p.prs_perslid_nr = i.prs_perslid_nr
ORDER BY 2;
-- Let op! Personen die niet meer in dienst zijn -> niet in fac_imp_perslid!
-- Dubbele perslid_nr? Dan wordt iemand mogelijk niet verwijderd/INACTIEF!
-- Voor HMOD: <NOG VASTSTELLEN! HOE/WAT !!!>
---- Indien er clienten in Faciltior zitten, deze sowieso uitsluiten van verwijderactie
---- Handmatig aangemaakte persoon 'Beumer applicatiebeheer' en 'Claudia ten Cate' + ......?
---- Omdat er via HRM-workflow wordt gewerkt, beste om dit via kenmerkveld te laten lopen met CHECK ADP-import
CURSOR c_del
IS
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;
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000) := '';
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count NUMBER;
v_count_tot NUMBER;
v_count_new NUMBER;
BEGIN
-- Generieke update.
v_errorhint:='Fout in generieke update';
SELECT COUNT ( * ) INTO v_count FROM fac_imp_perslid;
IF v_count < 1
THEN
fac.imp_writelog (p_import_key, 'E', 'Het aantal te importeren personen is te klein (' || TO_CHAR (v_count) || ')', 'Zie specificatie');
RETURN;
END IF;
-- Generieke update.
prs.update_perslid (p_import_key, 'NR', 'NULL');
-- Update flexvelden.
FOR rec IN c_flex
LOOP
v_errorhint:='Fout bijwerken meisjes';
PRS.upsertkenmerk (1023, rec.prs_perslid_key, rec.prs_perslid_partner_naam); -- Meisjesnaam
v_errorhint:='Fout bijwerken briefaanhef';
PRS.upsertkenmerk (1024, rec.prs_perslid_key, rec.prs_kenmerk1); -- Brief aanhef
v_errorhint:='Fout bijwerken formatieplaats';
PRS.upsertkenmerk (1025, rec.prs_perslid_key, rec.prs_kenmerk2); -- Formatieplaats
v_errorhint:='Fout bijwerken Basiskoffer';
PRS.upsertkenmerk (1028, rec.prs_perslid_key, rec.prs_kenmerk3); -- Basiskoffer
v_errorhint:='Fout bijwerken Functieomschrijving';
PRS.upsertkenmerk (1040, rec.prs_perslid_key, rec.prs_kenmerk4); -- Functieomschrijving
v_errorhint:='Fout bijwerken Token';
PRS.upsertkenmerk (1068, rec.prs_perslid_key, rec.prs_kenmerk5); -- Token, 5 , 1068
v_errorhint:='Fout bijwerken Mobiel';
PRS.upsertkenmerk (1067, rec.prs_perslid_key, rec.prs_kenmerk6); -- Mobiel 6 , 1067
v_errorhint:='Fout bijwerken Hit';
PRS.upsertkenmerk (1069, rec.prs_perslid_key, rec.prs_kenmerk7); -- Hit 7 , 1069
v_errorhint:='Fout bijwerken Lap+Sim';
PRS.upsertkenmerk (1063, rec.prs_perslid_key, rec.prs_kenmerk8); -- Lap+Sim 8 , 1063
v_errorhint:='Fout bijwerken Lapt';
PRS.upsertkenmerk (1065, rec.prs_perslid_key, rec.prs_kenmerk9); -- Lapt 9, 1065
v_errorhint:='Fout bijwerken Toegangsniveau';
PRS.upsertkenmerk (1061, rec.prs_perslid_key, rec.prs_kenmerk10); -- Toegangsniveau 10, 1061
v_errorhint:='Fout bijwerken Facilitor';
PRS.upsertkenmerk (1072, rec.prs_perslid_key, rec.prs_kenmerk11); -- Facilitor 11 , 1072
v_errorhint:='Fout bijwerken ADP';
PRS.upsertkenmerk (1073, rec.prs_perslid_key, rec.prs_kenmerk12); -- ADP 12 , 1073
v_errorhint:='Fout bijwerken Absentiemanager';
PRS.upsertkenmerk (1074, rec.prs_perslid_key, rec.prs_kenmerk13); -- Absentiemanager 13, 1074
v_errorhint:='Fout bijwerken Regas';
PRS.upsertkenmerk (1075, rec.prs_perslid_key, rec.prs_kenmerk14); -- Regas 14, 1075
v_errorhint:='Fout bijwerken Checks';
PRS.upsertkenmerk (1076, rec.prs_perslid_key, rec.prs_kenmerk15); -- Checks 15, 1076
v_errorhint:='Fout bijwerken Accountview';
PRS.upsertkenmerk (1077, rec.prs_perslid_key, rec.prs_kenmerk16); -- Accountview 16, 1077
v_errorhint:='Fout bijwerken Elvy';
PRS.upsertkenmerk (1078, rec.prs_perslid_key, rec.prs_kenmerk17); -- Elvy 17, 1078
v_errorhint:='Fout bijwerken HodNet';
PRS.upsertkenmerk (1079, rec.prs_perslid_key, rec.prs_kenmerk18); -- HodNet 18, 1079
v_errorhint:='Fout bijwerken Proactive';
PRS.upsertkenmerk (1080, rec.prs_perslid_key, rec.prs_kenmerk19); -- Proactive 19, 1080
v_errorhint:='Fout bijwerken Afwijkend';
PRS.upsertkenmerk (1081, rec.prs_perslid_key, rec.prs_kenmerk20); -- Afwijkend 20, 1081
END LOOP;
-- Verwijder personen die niet meer in de import voorkomen.
FOR rec IN c_del
LOOP
-- prs.delete_perslid (p_import_key, rec.prs_perslid_key); -- Deze niet draaien voor HMOD ivm de workflow HRM die men in Facilitor uitvoert...?
-- wel vullen van een kenmerkveld ADP-import 1082
v_errorhint:='Fout bijwerken Check ADP-import';
PRS.upsertkenmerk (1082, rec.prs_perslid_key, 'Let op! Niet in ADP-import - ' || sysdate); -- Niet in import
END LOOP;
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, 'Importproces personen afgebroken!');
END hmod_update_perslid;
/
CREATE OR REPLACE PROCEDURE hmod_import_koffer (p_import_key IN NUMBER)
AS
c_fielddelimitor VARCHAR2 (1) := ';';
v_newline VARCHAR2 (1000); -- Input line
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
header_is_valid NUMBER;
v_count NUMBER;
v_ongeldig NUMBER (1);
v_mode NUMBER (1);
v_aanduiding VARCHAR2 (200);
-- v_all_null BOOLEAN;
v_count_error NUMBER (10);
v_count_tot NUMBER (10);
v_count_import NUMBER (10);
-- De importvelden:
v_versiedatum VARCHAR2 (15);
v_omschrijving VARCHAR2 (250);
v_code VARCHAR2 (30);
v_token VARCHAR2 (20);
v_mob VARCHAR2 (20);
v_hit VARCHAR2 (20);
v_lap_en_sim VARCHAR2 (20);
v_lapt VARCHAR2 (20);
v_tnc VARCHAR2 (20);
v_tnc_omschrijving VARCHAR2 (100);
v_facilitor VARCHAR2 (20);
v_adp VARCHAR2 (20);
v_absentiemanager VARCHAR2 (20);
v_regas VARCHAR2 (20);
v_checks VARCHAR2 (20);
v_accountview VARCHAR2 (20);
v_elvy VARCHAR2 (20);
v_hodnet VARCHAR2 (20);
v_proactive VARCHAR2 (20);
CURSOR c
IS
SELECT *
FROM fac_imp_file
WHERE fac_import_key = p_import_key
ORDER BY fac_imp_file_index;
BEGIN
-- Vorige inlees eerst verwijderen
---- Voor hmod_koffersysteem geldt dat je inlezen op dezelfde dag mag/kunt overschrijven. Voorgaande versiedatums blijven staan.
DELETE FROM hmod_imp_koffersysteem
WHERE versiedatum = TO_CHAR(TRUNC (SYSDATE),'DD-MM-YYYY');
COMMIT;
header_is_valid := 0;
v_ongeldig := 0;
v_count_error := 0;
header_is_valid := 0;
v_count_tot := 0;
v_count_import := 0;
FOR rec IN c
LOOP
BEGIN
v_newline := rec.fac_imp_file_line;
v_errormsg := 'Fout opvragen te importeren rij';
v_aanduiding := '';
-- Lees alle veldwaarden: versiedatum;omschrijving;code;token;mob;hit;lap_en_sim;lapt;tnc;tnc omschrijving;facilitor;adp;absentiemanager;regas;checks;accountview;elvy;hodnet;proactive
v_errormsg := 'Fout opvragen te importeren kolom/rij 1';
fac.imp_getfield (v_newline, c_fielddelimitor, v_versiedatum);
v_errormsg := 'Fout opvragen te importeren kolom/rij 2';
fac.imp_getfield (v_newline, c_fielddelimitor, v_omschrijving);
v_errormsg := 'Fout opvragen te importeren kolom/rij 3';
fac.imp_getfield (v_newline, c_fielddelimitor, v_code);
fac.imp_getfield (v_newline, c_fielddelimitor, v_token);
fac.imp_getfield (v_newline, c_fielddelimitor, v_mob);
fac.imp_getfield (v_newline, c_fielddelimitor, v_hit);
fac.imp_getfield (v_newline, c_fielddelimitor, v_lap_en_sim);
fac.imp_getfield (v_newline, c_fielddelimitor, v_lapt);
fac.imp_getfield (v_newline, c_fielddelimitor, v_tnc);
fac.imp_getfield (v_newline,
c_fielddelimitor,
v_tnc_omschrijving);
fac.imp_getfield (v_newline, c_fielddelimitor, v_facilitor);
fac.imp_getfield (v_newline, c_fielddelimitor, v_adp);
fac.imp_getfield (v_newline, c_fielddelimitor, v_absentiemanager);
fac.imp_getfield (v_newline, c_fielddelimitor, v_regas);
fac.imp_getfield (v_newline, c_fielddelimitor, v_checks);
fac.imp_getfield (v_newline, c_fielddelimitor, v_accountview);
fac.imp_getfield (v_newline, c_fielddelimitor, v_elvy);
fac.imp_getfield (v_newline, c_fielddelimitor, v_hodnet);
fac.imp_getfield (v_newline, c_fielddelimitor, v_proactive);
v_aanduiding :=
v_versiedatum || '|' || v_omschrijving || '|' || v_code;
v_count_tot := v_count_tot + 1;
-- Skip until the header is found
IF header_is_valid = 0
THEN
IF v_versiedatum = 'versiedatum'
AND v_omschrijving = 'omschrijving'
AND v_code = 'code'
AND v_token = 'token'
AND v_mob = 'mob'
AND v_hit = 'hit'
AND v_lap_en_sim = 'lap_en_sim'
AND v_lapt = 'lapt'
AND v_tnc = 'tnc'
AND v_tnc_omschrijving = 'tnc omschrijving'
AND v_facilitor = 'facilitor'
AND v_adp = 'adp'
AND v_absentiemanager = 'absentiemanager'
AND v_regas = 'regas'
AND v_checks = 'checks'
AND v_accountview = 'accountview'
AND v_elvy = 'elvy'
AND v_hodnet = 'hodnet'
AND v_proactive = 'proactive'
THEN
header_is_valid := 1;
END IF;
ELSE -- Header OK. Vanaf hier in de LOOP eventueel variabele vullen.
BEGIN
v_errormsg := 'Versiedatum wordt sysdatum ';
SELECT TO_CHAR (TRUNC (SYSDATE), 'DD-MM-YYYY')
INTO v_versiedatum
FROM DUAL;
END;
INSERT INTO hmod_imp_koffersysteem (versiedatum,
omschrijving,
code,
token,
mob,
hit,
lap_en_sim,
lapt,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive)
VALUES (v_versiedatum,
v_omschrijving,
v_code,
v_token,
v_mob,
v_hit,
v_lap_en_sim,
v_lapt,
v_tnc,
v_tnc_omschrijving,
v_facilitor,
v_adp,
v_absentiemanager,
v_regas,
v_checks,
v_accountview,
v_elvy,
v_hodnet,
v_proactive);
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
-- Afsluiting: Rollback/Delete tabel als er fouten in csv zitten. Initieel voor import koffersysteem nog zonder foutcheck opgezet, dus ook geen v_ongeldig aan het vullen...
IF v_ongeldig > 0
THEN
ROLLBACK;
-- Met rollback haalt hij ook al mijn errors en warnings weg!?? Daarom een DELETE
-- delete from hmod_imp_contractscope where <alleen de ingelzen versiedatum ;
COMMIT;
fac.imp_writelog (
p_import_key,
'E',
'Niet ingelezen. Staan aantal ongeldige regels in csv-bestand. Zie bovenstaande ERRORS. Pas deze eerst aan!',
'');
ELSE
COMMIT;
fac.imp_writelog (
p_import_key,
'S',
'Aantal ingelezen regels: ' || TO_CHAR (v_count_import),
'');
END IF;
END IF;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes;
fac.imp_writelog (p_import_key,
'E',
v_errormsg || ' - Check !!!! : ' || v_aanduiding,
'');
END hmod_import_koffer;
/
CREATE OR REPLACE PROCEDURE hmod_update_koffer (p_import_key IN NUMBER)
AS
v_errormsg VARCHAR (200);
v_errorhint VARCHAR (200);
oracle_err_mes VARCHAR2 (150);
currentversion fac_module.fac_module_version%TYPE;
v_aanduiding VARCHAR (100);
v_count NUMBER;
BEGIN
-- hmod_update_koffer (p_import_key);
NULL;
END hmod_update_koffer;
/
CREATE OR REPLACE VIEW hmod_v_koffersysteem
(
OMSCHRIJVING_TOTAAL,
VERSIEDATUM,
OMSCHRIJVING,
CODE,
TOKEN,
MOB,
HIT,
LAP_EN_SIM,
TNC,
TNC_OMSCHRIJVING,
FACILITOR,
ADP,
ABSENTIEMANAGER,
REGAS,
CHECKS,
ACCOUNTVIEW,
ELVY,
HODNET,
PROACTIVE
)
AS
SELECT OMSCHRIJVING || ' (' || code || ')' AS omschrijving_totaal,
versiedatum,
omschrijving,
code,
token,
mob,
hit,
lap_en_sim,
tnc,
tnc_omschrijving,
facilitor,
adp,
absentiemanager,
regas,
checks,
accountview,
elvy,
hodnet,
proactive
FROM hmod_imp_koffersysteem;
------ 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