VEBE#35792: wagenparkbeheer

svn path=/Customer/trunk/; revision=28688
This commit is contained in:
Marcel Bourseau
2016-03-30 14:59:54 +00:00
parent 720133f113
commit 15c6bae303

View File

@@ -196,6 +196,855 @@ BEGIN
END vebe_update_perslid;
/
-- View met 1 record voor de combinatie de leasecontractgegevens (ins_discipline_key = 21), de gebruiksovereenkomstgegevens (ins_discipline_key = 22) en de auto-gegevens.
CREATE OR REPLACE VIEW vebe_cnt_lease_en_gebruiks_ovk
AS
SELECT c1.cnt_contract_key extra_key,
c1.cnt_contract_key cnt_lease_key,
b.prs_bedrijf_key,
c2.cnt_contract_key cnt_gebruik_key,
p2.prs_perslid_key prs_berijder_key,
d.ins_deel_key,
c1.prs_perslid_key_eig prs_lease_perslid_key_eig,
c1.cnt_contract_nummer_intern cnt_lease_nummer_intern,
c1.cnt_contract_versie cnt_lease_versie,
c1.cnt_contract_omschrijving cnt_lease_omschr,
c1.cnt_contract_looptijd_van cnt_lease_looptijd_van,
c1.cnt_contract_looptijd_tot cnt_lease_looptijd_tot,
12*(to_char(c1.cnt_contract_looptijd_tot,'YYYY') - to_char(c1.cnt_contract_looptijd_van,'YYYY') - 1) + (12 - to_char(c1.cnt_contract_looptijd_van,'MM')) + (to_char(c1.cnt_contract_looptijd_tot,'MM')) cnt_lease_looptijd_mnd,
ROUND(100 * LEAST(1,(SYSDATE - LEAST(c1.cnt_contract_looptijd_van, SYSDATE)) / (GREATEST(c1.cnt_contract_looptijd_tot - c1.cnt_contract_looptijd_van, 1)))) perc_lease_duur,
ROUND((c1.cnt_contract_looptijd_tot - GREATEST(c1.cnt_contract_looptijd_van, LEAST(SYSDATE, c1.cnt_contract_looptijd_tot)))/7) lease_weken_tegaan,
cnt.cnt_getrappeldatum (c1.cnt_contract_key) cnt_lease_rappeldatum,
cnt.cnt_getopzegdatum (c1.cnt_contract_key) cnt_lease_opzegdatum,
(SELECT lcl.x ('cnt_termijn_omschrijving', cnt_termijn_key, cnt_termijn_omschrijving)
FROM cnt_termijn
WHERE cnt_termijn_key = c1.cnt_contract_opzegtermijn)
cnt_lease_opzegtermijn,
(SELECT lcl.x ('cnt_termijn_omschrijving', cnt_termijn_key, cnt_termijn_omschrijving)
FROM cnt_termijn
WHERE cnt_termijn_key = c1.cnt_contract_rappeltermijn)
cnt_lease_rappeltermijn,
c1.cnt_contract_status cnt_lease_status,
DECODE (cnt.cnt_contract_status (c1.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c1.cnt_contract_key),
cnt.cnt_getopzegdatum (c1.cnt_contract_key),
c1.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
lease_fase_actief,
DECODE (
c1.cnt_contract_status,
0,
DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1,
lcl.l ('lcl_cnt_inactive'),
2,
lcl.l ('lcl_cnt_new'),
3,
lcl.l ('lcl_cnt_forapproval'))
cnt_lease_status_txt,
c1.cnt_contract_kosten cnt_lease_kosten,
c1.cnt_contract_termijnkosten cnt_lease_termijnkosten,
COALESCE (c1.ins_discipline_key, -1) lease_disc_key,
c1.prs_afdeling_key_eig lease_eigenaar_key,
(SELECT prs_afdeling_naam FROM prs_v_afdeling WHERE prs_afdeling_key = c1.prs_afdeling_key_eig) lease_eigenaar_afdeling_naam,
b.prs_bedrijf_naam,
c2.prs_perslid_key_eig prs_gebr_perslid_key_eig,
c2.cnt_contract_nummer_intern cnt_gebruik_nummer_intern,
c2.cnt_contract_versie cnt_gebruik_versie,
c2.cnt_contract_omschrijving cnt_gebruik_omschr,
c2.cnt_contract_looptijd_van cnt_gebruik_looptijd_van,
c2.cnt_contract_looptijd_tot cnt_gebruik_looptijd_tot,
ROUND(100 * LEAST(1,(SYSDATE - LEAST(c2.cnt_contract_looptijd_van, SYSDATE)) / (GREATEST(c2.cnt_contract_looptijd_tot - c2.cnt_contract_looptijd_van, 1)))) perc_gebruik_duur,
ROUND((c2.cnt_contract_looptijd_tot - GREATEST(c2.cnt_contract_looptijd_van, LEAST(SYSDATE, c2.cnt_contract_looptijd_tot)))/7) gebruik_weken_tegaan,
cnt.cnt_getrappeldatum (c2.cnt_contract_key) cnt_gebruik_rappeldatum,
cnt.cnt_getopzegdatum (c2.cnt_contract_key) cnt_gebruik_opzegdatum,
(SELECT lcl.x ('cnt_termijn_omschrijving', cnt_termijn_key, cnt_termijn_omschrijving)
FROM cnt_termijn
WHERE cnt_termijn_key = c2.cnt_contract_opzegtermijn)
cnt_gebruik_opzegtermijn,
(SELECT lcl.x ('cnt_termijn_omschrijving', cnt_termijn_key, cnt_termijn_omschrijving)
FROM cnt_termijn
WHERE cnt_termijn_key = c2.cnt_contract_rappeltermijn)
cnt_gebruik_rappeltermijn,
c2.cnt_contract_status cnt_gebruik_status,
DECODE (cnt.cnt_contract_status (c2.cnt_contract_looptijd_van,
cnt.cnt_getrappeldatum (c2.cnt_contract_key),
cnt.cnt_getopzegdatum (c2.cnt_contract_key),
c2.cnt_contract_looptijd_tot),
0, lcl.l ('lcl_cnt_future'),
1, lcl.l ('lcl_cnt_topical'),
2, lcl.l ('lcl_cnt_warn'),
3, lcl.l ('lcl_cnt_cancel'),
4, lcl.l ('lcl_cnt_past'))
gebruik_fase_actief,
DECODE (
c2.cnt_contract_status,
0,
DECODE (fac.getsetting ('cnt_contract_approval'),
1, lcl.l ('lcl_cnt_active_approval'),
lcl.l ('lcl_cnt_active')),
1,
lcl.l ('lcl_cnt_inactive'),
2,
lcl.l ('lcl_cnt_new'),
3,
lcl.l ('lcl_cnt_forapproval'))
cnt_gebruik_status_txt,
COALESCE (c2.ins_discipline_key, -1) gebruik_disc_key,
c2.prs_afdeling_key_eig gebruik_eigenaar_key,
(SELECT prs_afdeling_naam FROM prs_v_afdeling WHERE prs_afdeling_key = c2.prs_afdeling_key_eig) gebruik_eigenaar_afdeling_naam,
p1.prs_perslid_naam_full prs_eigenaar_naam_full,
p1.prs_perslid_naam_friendly prs_eigenaar_naam_friendly,
p2.prs_perslid_naam_full prs_berijder_naam_full,
p2.prs_perslid_naam_friendly prs_berijder_naam_friendly,
d.ins_deel_omschrijving,
d.ins_deel_opmerking
FROM cnt_v_aanwezigcontract c1, prs_v_perslid_fullnames_all p1, prs_bedrijf b, cnt_contract_object co1,
cnt_v_aanwezigcontract c2, prs_v_perslid_fullnames_all p2, cnt_contract_object co2 ,ins_deel d
WHERE b.prs_bedrijf_key = c1.cnt_prs_bedrijf_key
AND c1.ins_discipline_key = 21
AND co1.cnt_contract_key = c1.cnt_contract_key
AND co1.cnt_ins_deel_key = co2.cnt_ins_deel_key
AND co2.cnt_contract_key = c2.cnt_contract_key
AND c2.ins_discipline_key = 22
AND COALESCE(c2.cnt_contract_versie, '0') = (select COALESCE(max (cnt_contract_versie),'0') from cnt_contract c3 where c3.cnt_contract_nummer_intern = c2.cnt_contract_nummer_intern)
AND c1.prs_perslid_key_eig = p1.prs_perslid_key (+)
AND c2.cnt_prs_perslid_key = p2.prs_perslid_key (+)
AND d.ins_deel_key = co1.cnt_ins_deel_key;
-- Basis UDR rapport...
CREATE OR REPLACE VIEW vebe_rap_wagenpark
(EXTRA_KEY,
CNT_LEASE_KEY,
PRS_BEDRIJF_KEY,
CNT_GEBRUIK_KEY,
PRS_BERIJDER_KEY,
INS_DEEL_KEY,
PRS_LEASE_PERSLID_KEY_EIG,
CNT_LEASE_NUMMER_INTERN,
CNT_LEASE_VERSIE,
CNT_LEASE_OMSCHR,
CNT_LEASE_LOOPTIJD_VAN,
CNT_LEASE_LOOPTIJD_TOT,
CNT_LEASE_LOOPTIJD_MND,
PERC_LEASE_DUUR,
LEASE_WEKEN_TEGAAN,
CNT_LEASE_RAPPELDATUM,
CNT_LEASE_OPZEGDATUM,
CNT_LEASE_OPZEGTERMIJN,
CNT_LEASE_RAPPELTERMIJN,
CNT_LEASE_STATUS,
LEASE_FASE_ACTIEF,
CNT_LEASE_STATUS_TXT,
CNT_LEASE_KOSTEN,
CNT_LEASE_TERMIJNKOSTEN,
LEASE_DISC_KEY,
LEASE_EIGENAAR_KEY,
LEASE_EIGENAAR_AFDELING_NAAM,
PRS_BEDRIJF_NAAM,
PRS_GEBR_PERSLID_KEY_EIG,
CNT_GEBRUIK_NUMMER_INTERN,
CNT_GEBRUIK_VERSIE,
CNT_GEBRUIK_OMSCHR,
CNT_GEBRUIK_LOOPTIJD_VAN,
CNT_GEBRUIK_LOOPTIJD_TOT,
PERC_GEBRUIK_DUUR,
GEBRUIK_WEKEN_TEGAAN,
CNT_GEBRUIK_RAPPELDATUM,
CNT_GEBRUIK_OPZEGDATUM,
CNT_GEBRUIK_OPZEGTERMIJN,
CNT_GEBRUIK_RAPPELTERMIJN,
CNT_GEBRUIK_STATUS,
GEBRUIK_FASE_ACTIEF,
CNT_GEBRUIK_STATUS_TXT,
GEBRUIK_DISC_KEY,
GEBRUIK_EIGENAAR_KEY,
GEBRUIK_EIGENAAR_AFDELING_NAAM,
PRS_EIGENAAR_NAAM_FULL,
PRS_EIGENAAR_NAAM_FRIENDLY,
PRS_BERIJDER_NAAM_FULL,
PRS_BERIJDER_NAAM_FRIENDLY,
INS_DEEL_OMSCHRIJVING,
INS_DEEL_OPMERKING,
INS_DEEL_BELETTERING,
INS_DEEL_BRANDSTOF,
INS_DEEL_LEASECATEGORIE,
INS_DEEL_PERC_BIJTELLING,
INS_DEEL_MERK,
INS_DEEL_TYPE,
INS_DEEL_FISCALE_WAARDE,
INS_DEEL_KLEUR,
CNT_LEASE_JAARKILOMETRAGE,
CNT_GEBRUIK_VERKLARING,
PRS_BERIJDER_INDIRECT)
AS
SELECT
EXTRA_KEY,
CNT_LEASE_KEY,
PRS_BEDRIJF_KEY,
CNT_GEBRUIK_KEY,
PRS_BERIJDER_KEY,
INS_DEEL_KEY,
PRS_LEASE_PERSLID_KEY_EIG,
CNT_LEASE_NUMMER_INTERN,
CNT_LEASE_VERSIE,
CNT_LEASE_OMSCHR,
CNT_LEASE_LOOPTIJD_VAN,
CNT_LEASE_LOOPTIJD_TOT,
CNT_LEASE_LOOPTIJD_MND,
PERC_LEASE_DUUR,
LEASE_WEKEN_TEGAAN,
CNT_LEASE_RAPPELDATUM,
CNT_LEASE_OPZEGDATUM,
CNT_LEASE_OPZEGTERMIJN,
CNT_LEASE_RAPPELTERMIJN,
CNT_LEASE_STATUS,
LEASE_FASE_ACTIEF,
CNT_LEASE_STATUS_TXT,
CNT_LEASE_KOSTEN,
CNT_LEASE_TERMIJNKOSTEN,
LEASE_DISC_KEY,
LEASE_EIGENAAR_KEY,
LEASE_EIGENAAR_AFDELING_NAAM,
PRS_BEDRIJF_NAAM,
PRS_GEBR_PERSLID_KEY_EIG,
CNT_GEBRUIK_NUMMER_INTERN,
CNT_GEBRUIK_VERSIE,
CNT_GEBRUIK_OMSCHR,
CNT_GEBRUIK_LOOPTIJD_VAN,
CNT_GEBRUIK_LOOPTIJD_TOT,
PERC_GEBRUIK_DUUR,
GEBRUIK_WEKEN_TEGAAN,
CNT_GEBRUIK_RAPPELDATUM,
CNT_GEBRUIK_OPZEGDATUM,
CNT_GEBRUIK_OPZEGTERMIJN,
CNT_GEBRUIK_RAPPELTERMIJN,
CNT_GEBRUIK_STATUS,
GEBRUIK_FASE_ACTIEF,
CNT_GEBRUIK_STATUS_TXT,
GEBRUIK_DISC_KEY,
GEBRUIK_EIGENAAR_KEY,
GEBRUIK_EIGENAAR_AFDELING_NAAM,
PRS_EIGENAAR_NAAM_FULL,
PRS_EIGENAAR_NAAM_FRIENDLY,
PRS_BERIJDER_NAAM_FULL,
PRS_BERIJDER_NAAM_FRIENDLY,
INS_DEEL_OMSCHRIJVING,
INS_DEEL_OPMERKING,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 1 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 1) belettering,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 3 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 24) brandstof,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 6 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 21) leasecategorie,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 2 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 22) perc_bijtelling,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 7 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 23) merk,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 8 AND kd.ins_kenmerkdeel_verwijder IS NULL)
AND ud.fac_usrtab_key = 26) ins_deel_type,
(SELECT fac.safe_to_number(ins_kenmerkdeel_waarde) FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 4 AND kd.ins_kenmerkdeel_verwijder IS NULL) fiscale_waarde,
(SELECT ins_kenmerkdeel_waarde FROM ins_kenmerkdeel kd
WHERE kd.ins_deel_key = lg.ins_deel_key AND kd.ins_kenmerk_key = 5 AND kd.ins_kenmerkdeel_verwijder IS NULL) kleur,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(cnt_kenmerkcontract_waarde) FROM cnt_kenmerkcontract kc
WHERE kc.cnt_contract_key = lg.cnt_lease_key AND kc.cnt_kenmerk_key = 21 AND kc.cnt_kenmerkcontract_verwijder IS NULL)
AND ud.fac_usrtab_key = 25) jaarkilometrage,
(SELECT ud.fac_usrdata_code FROM fac_usrdata ud
WHERE ud.fac_usrdata_key = (SELECT fac.safe_to_number(cnt_kenmerkcontract_waarde) FROM cnt_kenmerkcontract kc
WHERE kc.cnt_contract_key = lg.cnt_gebruik_key AND kc.cnt_kenmerk_key = 41 AND kc.cnt_kenmerkcontract_verwijder IS NULL)
AND ud.fac_usrtab_key = 1) verklaring,
(SELECT DECODE(fac.safe_to_number(prs_kenmerklink_waarde),0,'Direct','Indirect')
FROM prs_kenmerklink kl
WHERE kl.prs_link_key = lg.prs_berijder_key
AND kl.prs_kenmerk_key = 1000 AND kl.prs_kenmerklink_verwijder IS NULL AND kl.prs_kenmerklink_niveau = 'P') in_direct
FROM vebe_cnt_lease_en_gebruiks_ovk lg;
-- LEASECONTRACT NOTIFICATIES naar contractbeheerder, contracteigenaren, (nog) niet naar berijders.
-- Elke dag de bij aflopende leaseonctracten notificaties de deur 'uitgooien', die NIET met de standaard noti-jobs gaan (omdat de export nog iets extra's doet, insert of zo).
-- 1. LEASEcontracten (soortcontract met disckey 21) die in rappel staat, en waarvan nog niet eerder een noti naar contracteigenaar is uitgegaan
-- 2. Afgemelde GUNNINGSOpdracht (type opdracht met mld_typeopdr_key = 5) een noti met 2 links naar de melder (= AP/aanspreekpunt) van de bijbehorende melding zodat deze 2 acties kan uitvoeren:
-- a) LINK 1: naar opdracht zodat de bijlage bij de opdracht kan downloaden/openen, printen en laten ondertekenen
-- b) LINK 2: Nieuwe melding 'Stuur getekende leaseovk' zodat de getekende leaseovk kan worden geupload.
CREATE OR REPLACE PROCEDURE vebe_export_noti_wagenpark (
p_applname IN VARCHAR2,
p_applrun IN VARCHAR2,
p_filedir IN VARCHAR2,
p_filename IN VARCHAR2
)
IS
v_aanduiding VARCHAR2 (200);
v_errorhint VARCHAR2 (1000);
v_errorhint2 VARCHAR2 (1000);
v_errormsg VARCHAR2 (1000);
oracle_err_num NUMBER;
oracle_err_mes VARCHAR2 (200);
v_count_tot NUMBER (10);
v_count_error NUMBER (10);
v_count NUMBER (10);
v_tracking VARCHAR2 (1000);
v_fac_usrrap_key NUMBER(10);
-- Leasecontracten (met disckey 21) die in rappel staat, en waarvan nog niet eerder een noti naar contracteigenaar is uitgegaan
CURSOR c_noti_leasecontract_1st_time
IS
SELECT c.prs_lease_perslid_key_eig,
c.prs_eigenaar_naam_friendly,
'Rapp<EFBFBD>l: Leaseovereenkomst ' || c.cnt_lease_nummer_intern
|| DECODE (c.cnt_lease_versie,
NULL, '',
'.' || c.cnt_lease_versie)
|| ' ('
|| c.cnt_lease_omschr
|| ' '
|| c.prs_bedrijf_naam
|| ')'
|| ' loopt af op '
|| TO_CHAR (c.cnt_lease_looptijd_tot, 'DD-MM-YYYY')
|| '.' mail_subject,
c.cnt_lease_key,
c.cnt_lease_nummer_intern,
c.cnt_lease_versie
FROM vebe_cnt_lease_en_gebruiks_ovk c
WHERE cnt_lease_status = 0
AND (SYSDATE BETWEEN c.cnt_lease_rappeldatum
AND c.cnt_lease_opzegdatum)
AND c.cnt_lease_looptijd_tot >= to_date('01-10-2016','dd-mm-yyyy')
AND NOT EXISTS
(SELECT 'x'
FROM fac_tracking t, fac_srtnotificatie sn
WHERE c.cnt_lease_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST02');
CURSOR c_noti_krabbel_leaseovk
IS
SELECT m.prs_perslid_key prs_perslid_key_aanspreekpunt, p1.prs_perslid_naam_friendly prs_perslid_naam_aanspreekpunt, 'Verzoek ondertekenen van leaseovereenkomst voor ' || p2.prs_perslid_naam_friendly mail_subject, o.mld_opdr_key
FROM mld_opdr o, fac_tracking t, fac_srtnotificatie sn, mld_melding m, prs_v_perslid_fullnames_all p1, prs_v_perslid_fullnames_all p2
WHERE o.mld_typeopdr_key = 5
AND o.mld_opdr_key = t.fac_tracking_refkey
AND m.mld_melding_key = o.mld_melding_key
AND p1.prs_perslid_key = m.prs_perslid_key
AND p2.prs_perslid_key = m.prs_perslid_key_voor
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
AND o.mld_statusopdr_key = 6
AND sn.fac_srtnotificatie_key = (select fac_srtnotificatie_key from fac_srtnotificatie where fac_srtnotificatie_code = 'ORDAFM')
AND NOT EXISTS
(SELECT 'x'
FROM fac_tracking t, fac_srtnotificatie sn
WHERE o.mld_opdr_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST03');
BEGIN
-- Userrapportage key 81 waar de view vebe_cnt_lease_en_gebruiks_ovk met alle leasecontract info staat.
v_fac_usrrap_key := 81;
-- Alle leasecontracten in rappel die niet al eerder naar eigenaar zijn genotificeerd, dus alleen 1x, notificeren.
FOR rc IN c_noti_leasecontract_1st_time
LOOP
BEGIN
v_errorhint := rc.mail_subject;
v_errormsg := '';
-- Mailen van eenmalige notificatie naar de eigenaar/aanspreekpunt via CUST01 (rapport-node).
-- fac.putnotificationsrtprio ( NULL, rc.prs_lease_perslid_key_eig, 'CUST01', v_fac_usrrap_key, rc.mail_subject, NULL, NULL, NULL, rc.cnt_lease_key, 2, NULL);
fac.putnotificationsrtprio ( NULL, rc.prs_lease_perslid_key_eig, 'CUST01', v_fac_usrrap_key, rc.mail_subject, NULL, NULL, NULL, rc.cnt_lease_key, 2, NULL);
v_tracking := 'Rappel mail naar aanspreekpunt ' || rc.prs_eigenaar_naam_friendly || ': Leaseovereenkomst ' || rc.cnt_lease_nummer_intern || ' loopt af';
-- En we tracken via CUST02 (contract-node)
fac.trackaction ('CUST02', rc.cnt_lease_key, NULL, NULL, v_tracking);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END;
END LOOP;
FOR rc IN c_noti_krabbel_leaseovk
LOOP
BEGIN
v_errorhint := rc.mail_subject;
v_errormsg := '';
-- Mailen van eenmalige notificatie naar de aanspreekpunt via CUST03 (opdracht-node).
fac.putnotificationsrtprio ( NULL, rc.prs_perslid_key_aanspreekpunt, 'CUST03', rc.mld_opdr_key, rc.mail_subject, NULL, NULL, NULL, NULL, 2, NULL);
-- En we tracken via CUST03 (opdracht-node)
v_tracking := 'Mail naar aanspreekpunt ' || rc.prs_perslid_naam_aanspreekpunt || ': ' || rc.mail_subject;
fac.trackaction ('#CUST03', rc.mld_opdr_key, NULL, NULL, v_tracking);
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
v_count_error := v_count_error + 1;
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 200);
v_errormsg := 'OTHERS (error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END;
END LOOP;
COMMIT;
EXCEPTION
WHEN OTHERS
THEN
oracle_err_num := SQLCODE;
oracle_err_mes := SUBSTR (SQLERRM, 1, 100);
v_errormsg :=
'OTHERS (vebe_noti_wagenpark error ' || oracle_err_num || '/' || oracle_err_mes || ')';
COMMIT;
END vebe_export_noti_wagenpark;
/
CREATE OR REPLACE VIEW vebe_v_export_noti_wagenpark (
result,
result_order
)
AS
SELECT 'notificatie;key contract;contractnr;key aanspreekpunt;aanspreekpunt;mailsubject;contractomschrijving;leasemaatschappij;einddatum', 0
FROM DUAL
UNION ALL
SELECT REPLACE(REPLACE('CUST01'
|| ';'
|| c.cnt_lease_key
|| ';'
|| cnt_lease_nummer_intern
|| ';'
|| c.prs_lease_perslid_key_eig
|| ';'
|| c.prs_eigenaar_naam_friendly
|| ';'
|| 'Rapp<EFBFBD>l: Leaseovereenkomst ' || c.cnt_lease_nummer_intern || ' loopt af'
|| DECODE (c.cnt_lease_versie, NULL, '', '.' || c.cnt_lease_versie)
|| ';'
|| c.cnt_lease_omschr
|| ';'
|| c.prs_bedrijf_naam
|| ';'
|| TO_CHAR (c.cnt_lease_looptijd_tot, 'DD-MM-YYYY')
,CHR (13), ''), CHR (10), '<ret>'), cnt_lease_key
FROM vebe_cnt_lease_en_gebruiks_ovk c
WHERE cnt_lease_status = 0
AND (SYSDATE BETWEEN c.cnt_lease_rappeldatum
AND c.cnt_lease_opzegdatum)
AND c.cnt_lease_looptijd_tot >= to_date('01-10-2016','dd-mm-yyyy')
AND NOT EXISTS
(SELECT 'x'
FROM fac_tracking t, fac_srtnotificatie sn
WHERE c.cnt_lease_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST02')
UNION ALL
SELECT 'notificatie; key opdracht;opdrachtnr;key aanspreekpunt;aanspreekpunt;mailsubject;opdrachtomschrijving;;', 10000
FROM DUAL
UNION ALL
SELECT REPLACE(REPLACE( 'CUST03'
|| ';'
|| o.mld_opdr_key
|| ';'
|| m.mld_melding_key || '/' || o.mld_opdr_bedrijfopdr_volgnr
|| ';'
|| m.prs_perslid_key
|| ';'
|| p1.prs_perslid_naam_friendly
|| ';'
|| 'Verzoek ondertekenen van leaseovereenkomst voor ' || p2.prs_perslid_naam_friendly
|| ';'
|| ''
|| ';'
|| ''
,CHR (13), ''), CHR (10), '<ret>'), 10000 + m.mld_melding_key
FROM mld_opdr o, fac_tracking t, fac_srtnotificatie sn, mld_melding m, prs_v_perslid_fullnames_all p1, prs_v_perslid_fullnames_all p2
WHERE o.mld_typeopdr_key = 5
AND o.mld_opdr_key = t.fac_tracking_refkey
AND m.mld_melding_key = o.mld_melding_key
AND p1.prs_perslid_key = m.prs_perslid_key
AND p2.prs_perslid_key = m.prs_perslid_key_voor
AND sn.fac_srtnotificatie_key = t.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_xmlnode = 'opdracht'
AND o.mld_statusopdr_key = 6
AND sn.fac_srtnotificatie_key = (select fac_srtnotificatie_key from fac_srtnotificatie where fac_srtnotificatie_code = 'ORDAFM')
AND NOT EXISTS
(SELECT 'x'
FROM fac_tracking t, fac_srtnotificatie sn
WHERE o.mld_opdr_key = t.fac_tracking_refkey
AND t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key
AND sn.fac_srtnotificatie_code = 'CUST03');
CREATE OR REPLACE PROCEDURE vebe_processemail
(pfrom IN VARCHAR2,
pto IN VARCHAR2,
psubject IN VARCHAR2,
pbody IN VARCHAR2,
psessionid IN VARCHAR2,
puserkey IN NUMBER DEFAULT NULL)
AS
sender prs_perslid.prs_perslid_key%TYPE;
kostenplaats prs_afdeling.prs_kostenplaats_key%TYPE;
v_mldkey mld_melding.mld_melding_key%TYPE;
defaultstdmelding fac_setting.fac_setting_default%TYPE;
kkey mld_kenmerk.mld_kenmerk_key%TYPE;
errormsg fac_result.fac_result_waarde%TYPE;
v_mailadres_kenmerk_key mld_kenmerk.mld_kenmerk_key%TYPE;
v_flexprop_mail VARCHAR2(1000);
v_from VARCHAR2 (1000);
subject_regexp fac_setting.fac_setting_default%TYPE;
v_behandelaar_key mld_melding.mld_melding_behandelaar_key%TYPE;
v_mldnum VARCHAR2 (4000);
v_srtdisc VARCHAR2 (4000);
v_flag_on_fenote NUMBER (10);
v_flag_on_bonote NUMBER (10);
v_mld_meldbron_key NUMBER (10);
v_prs_perslid_sysuser_key NUMBER (10);
v_mailadres_to_wagenpark VARCHAR2(100);
BEGIN
v_prs_perslid_sysuser_key := 81;
v_mailadres_to_wagenpark := 'XrTeMOZ@vebe.facilitor.nl';
-- We beschouwen dit als een nieuwe melding
IF (UPPER(pto) = UPPER(v_mailadres_to_wagenpark))
THEN
-- Mailmelding (onder vakgroep 'Mailmelding') met mld_stdmelding_key 161, deze staat in de setting defaultmelding.
defaultstdmelding := fac.getsetting ('defaultstdmelding');
v_mld_meldbron_key := 4;
END IF;
-- Selecteer de kostenplaats van prs_perslid_key = v_prs_perslid_sysuser_key (Dit is de system-user 'SYSTEM API Mail2Melding')
SELECT prs_perslid_key, d.prs_kostenplaats_key
INTO sender, kostenplaats
FROM prs_perslid p, prs_afdeling d
WHERE p.prs_afdeling_key = d.prs_afdeling_key
AND prs_perslid_key = v_prs_perslid_sysuser_key;
-- Bepaal kenmerk-key van kenmerksoort 'mailadres' (key 61) op vakgroeptype niveau van vakgroeptype-key 1 die niet verwijderd is
SELECT MAX(mld_kenmerk_key)
INTO v_mailadres_kenmerk_key
FROM mld_kenmerk
WHERE mld_srtkenmerk_key = 27
AND mld_kenmerk_verwijder IS NULL
AND mld_kenmerk_niveau = 'T'
AND mld_stdmelding_key = 1;
-- Check of de afzender pfrom een reply op een bestaande melding doet, in dat geval wordt dat in notities genoteerd.
-- Eerst uit het onderwerp het meldingnummer proberen te onderscheppen, uitgangspunt dat in het onderwerp 'MLD123' kan worden opgevist, waarbij het deel achter MLD minimaal uit 1 cijfer bestaat.
subject_regexp := '[[:alpha:]]*MLD[[:digit:]]{1,}';
v_mldnum :=
REGEXP_SUBSTR (psubject,
subject_regexp,
1,
1,
'i'); -- M123, of M12345, of M12, of M1
v_srtdisc :=
REGEXP_SUBSTR (v_mldnum,
'[[:alpha:]]*',
1,
1,
'i'); -- M
v_mldkey := fac.safe_to_number (SUBSTR (v_mldnum, LENGTH (v_srtdisc) + 1)); -- 123, of 12345, of 12, of 1
-- Uit onderwerp is de vermoedelijke juiste v_mldkey geparsed.
-- Final check: is de afzender van de mail dezelfde als die van v_mldkey, deze afzender (mailadres) staat in flexprop (zie verderop hieronder in gedeelte bij insert melding).
SELECT MAX(SUBSTR(TRIM(km.mld_kenmerkmelding_waarde),1,50))
INTO v_flexprop_mail
FROM mld_kenmerkmelding km
WHERE mld_melding_key = v_mldkey
AND mld_kenmerk_key = v_mailadres_kenmerk_key
AND mld_kenmerkmelding_verwijder IS NULL;
v_from := SUBSTR(TRIM(pfrom),1,50);
IF v_flexprop_mail = v_from
THEN
-- Gotcha: van deze afzender is een eerdere melding geregistreerd, die we plakken de subject en body nu als notitie toe (als perslid system-user 'SYSTEM API Mail2Melding').
INSERT INTO mld_melding_note (mld_melding_key,
mld_melding_note_omschrijving,
prs_perslid_key,
mld_melding_note_flag)
VALUES (v_mldkey,
SUBSTR (
psubject || CHR (13) || CHR (10)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
sender,
0); -- 0 is NIET zichtbaar FE (want is system-user, zinloos).
-- Default tracking is even goed genoeg
fac.trackaction ('MLDNOT',
v_mldkey,
sender,
NULL,
'#Notitie toegevoegd vanuit e-mail'); -- # voorkomt notificatie
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Als notitie toegevoegd aan melding ' || v_mldkey);
-- We gaan GEEN Vlaggetjes zetten zoals mld_edit_note.asp dat doet, VEBE werkt hier niet mee.
--BEGIN
-- v_flag_on_fenote := fac.getsetting('mld_flag_on_fenote');
-- v_flag_on_bonote := fac.getsetting('mld_flag_on_bonote');
--
-- IF v_flag_on_bonote <> 0 AND v_flag_on_bonote IS NOT NULL
-- THEN
-- UPDATE mld_melding
-- SET mld_melding_flag = v_flag_on_bonote
-- WHERE mld_melding_key = v_mldkey
-- AND ( (mld_melding_flag = v_flag_on_fenote)
-- OR (mld_melding_flag = 0 OR mld_melding_flag IS NULL));
--
-- END IF;
--EXCEPTION
-- WHEN OTHERS
-- THEN
-- DBMS_OUTPUT.put_line( 'Niet gelukt om flag '
-- || v_flag_on_bonote
-- || ' te zetten.');
--END;
-- Bepalen van de behandelaar van deze melding
--BEGIN
-- SELECT mld_melding_behandelaar_key
-- INTO v_behandelaar_key
-- FROM mld_melding m, prs_perslid p
-- WHERE mld_melding_key = v_mldkey
-- AND mld_melding_behandelaar_key = p.prs_perslid_key
-- AND p.prs_perslid_email IS NOT NULL
-- AND p.prs_perslid_verwijder IS NULL;
--EXCEPTION
-- WHEN OTHERS
-- THEN
-- v_behandelaar_key := NULL;
--END;
--
--IF v_behandelaar_key IS NOT NULL
--THEN
-- -- Bestaande melding en behandelaar is bekend.
--
-- -- Notificatie naar behandelaar
-- fac.putnotificationsrtprio (
-- NULL,
-- v_behandelaar_key,
-- 'MLDNOB',
-- v_mldkey,
-- 'Melding ' || v_mldkey || ' is door de klant aangepast.',
-- 2,
-- NULL,
-- NULL,
-- NULL,
-- 2,
-- NULL);
--END IF;
ELSE
-- suggested extensions:
-- check for MLDUSE-write autorisations
-- parse the subject to find an appropriate stdmelding, if uniquely possible
-- append (as a note?) to an existing melding if #key is found in the subject
BEGIN
INSERT INTO mld_melding (mld_melding_module,
mld_meldbron_key,
mld_melding_datum,
mld_alg_locatie_key,
mld_melding_omschrijving,
mld_melding_status,
mld_stdmelding_key,
prs_perslid_key,
prs_perslid_key_voor,
prs_kostenplaats_key,
mld_melding_spoed)
VALUES ('MLD',
v_mld_meldbron_key, -- email (4)
SYSDATE,
NULL, -- Geen locatie bekend
SUBSTR (
psubject || CHR (13)
|| REPLACE (
SUBSTR (pbody,
1,
4000 - (LENGTH (psubject) + 2)),
CHR (13) || CHR (10) || CHR (13) || CHR (10),
CHR (13) || CHR (10)),
1,
4000), -- verwijder onnodige witregels
NULL,
defaultstdmelding,
sender,
sender,
kostenplaats,
3)
RETURNING mld_melding_key
INTO v_mldkey;
-- Vullen van kenmerkwaarde "e-mail adres"
IF v_from IS NOT NULL AND v_mailadres_kenmerk_key IS NOT NULL
THEN
-- v_from is gevuld, en kenmerk mailadres bestaat, zet v_from met maximaal 50 tekens als kenmerk bij de zojuist aangemaakte melding.
INSERT INTO mld_kenmerkmelding (mld_melding_key, mld_kenmerk_key, mld_kenmerkmelding_waarde)
VALUES (v_mldkey, v_mailadres_kenmerk_key, v_from);
END IF;
mld.setmeldingstatus (v_mldkey, 2, sender);
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'maillog', 'Geregistreerd onder melding ' || v_mldkey);
END;
END IF;
-- find the lowest volgnummer of the flexfield of type folder.
SELECT MIN (mld_kenmerk_key)
INTO kkey
FROM mld_kenmerk k,
mld_srtkenmerk sk,
mld_stdmelding std,
ins_tab_discipline d
WHERE mld_srtkenmerk_kenmerktype = 'M'
AND sk.mld_srtkenmerk_key = k.mld_srtkenmerk_key
AND std.mld_stdmelding_key = defaultstdmelding
AND std.mld_ins_discipline_key = d.ins_discipline_key
AND ( (k.mld_stdmelding_key = std.mld_stdmelding_key
AND k.mld_kenmerk_niveau = 'S')
OR (k.mld_stdmelding_key = d.ins_discipline_key
AND k.mld_kenmerk_niveau = 'D')
OR (k.mld_stdmelding_key = d.ins_srtdiscipline_key
AND k.mld_kenmerk_niveau = 'T'))
AND k.mld_kenmerk_verwijder IS NULL
AND NOT EXISTS
(SELECT mld_kenmerk_volgnummer
FROM mld_kenmerk k1,
mld_srtkenmerk sk1,
mld_stdmelding std1,
ins_tab_discipline d1
WHERE sk1.mld_srtkenmerk_kenmerktype = 'M'
AND sk1.mld_srtkenmerk_key =
k1.mld_srtkenmerk_key
AND std1.mld_stdmelding_key =
defaultstdmelding
AND std1.mld_ins_discipline_key =
d1.ins_discipline_key
AND ( (k1.mld_stdmelding_key =
std1.mld_stdmelding_key
AND k1.mld_kenmerk_niveau = 'S')
OR (k1.mld_stdmelding_key =
d1.ins_discipline_key
AND k1.mld_kenmerk_niveau = 'D')
OR (k1.mld_stdmelding_key =
d1.ins_srtdiscipline_key
AND k1.mld_kenmerk_niveau = 'T'))
AND k1.mld_kenmerk_verwijder IS NULL
AND k1.mld_kenmerk_volgnummer <
k.mld_kenmerk_volgnummer);
IF kkey IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'kenmerkpath',
'MLD\M' || to_char( TRUNC(v_mldkey/1000), 'FM0000') || '___\M' || v_mldkey || '\' || kkey || '\');
END IF;
IF errormsg IS NOT NULL
THEN
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid, 'errormsg', errormsg);
END IF;
EXCEPTION
WHEN OTHERS
THEN
fac.writelog (
'PROCESSEMAIL',
'W',
'Mail kon niet verwerkt worden afzender: '
|| pfrom
|| '['
|| errormsg
|| ']',
'OTHERS (error '
|| SQLCODE
|| '/'
|| SUBSTR (SQLERRM, 1, 100)
|| ')');
INSERT INTO fac_result (fac_result_sessionid,
fac_result_naam,
fac_result_waarde)
VALUES (psessionid,
'errormsg',
'Database fout - Neem contact op met uw systeembeheerder');
END;
/
BEGIN fac.registercustversion('vebe', 1); END;