diff --git a/GVBA/gvba.sql b/GVBA/gvba.sql index 5c2888e5d..35d659703 100644 --- a/GVBA/gvba.sql +++ b/GVBA/gvba.sql @@ -112,7 +112,7 @@ CREATE OR REPLACE PACKAGE gvba AS PROCEDURE set_mandaat_vrijstelling; - PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER); + PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER, p_jaren NUMBER); END gvba; / @@ -856,6 +856,22 @@ CREATE OR REPLACE PACKAGE BODY gvba AS FROM mld_melding_object mo WHERE mo.mld_melding_key = m.mld_melding_key); + -- kenmerk 283 is gevuld als de melding afgehandeld is. + CURSOR c_del IS + SELECT m.*, + kenteken + FROM mld_melding m, + (SELECT mld_melding_key, mld_kenmerkmelding_waarde kenteken + FROM mld_kenmerkmelding + WHERE mld_kenmerk_key = 282) k + WHERE m.mld_melding_key = k.mld_melding_key(+) + AND m.mld_stdmelding_key = 801 -- Intrekken vrijstelling + AND m.mld_melding_status = 4 -- Geaccepteeerd + AND NOT EXISTS + (SELECT mld_kenmerkmelding_key + FROM mld_kenmerkmelding km + WHERE km.mld_melding_key = m.mld_melding_key + AND km.mld_kenmerk_key = 283); v_berijder_arr VARCHAR2 (1000); v_kenteken_arr VARCHAR2 (1000); @@ -866,6 +882,11 @@ CREATE OR REPLACE PACKAGE BODY gvba AS v_deel_key NUMBER; v_vrijstelling_nr NUMBER; v_einddatum DATE; + v_einddatum_max DATE; + + v_oud_verval_str VARCHAR2(20); + v_new_verval_str VARCHAR2(20); + v_deel_vervaldatum DATE; oracle_err_num NUMBER; oracle_err_mes VARCHAR2 (200); @@ -903,11 +924,18 @@ CREATE OR REPLACE PACKAGE BODY gvba AS WHERE prs_bedrijf_key = rec.bedrijf_key; v_hint := 'Instellen einddatum: ' || rec.einddatum; - IF rec.einddatum IS NULL + v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy'); + + IF TO_CHAR(SYSDATE, 'MM') IN (12,13) THEN - v_einddatum := TO_DATE (TO_CHAR (SYSDATE, 'yy') || '1231', 'yymmdd'); + v_einddatum_max := TO_DATE (TO_CHAR (SYSDATE, 'yy')+1 || '1231', 'yymmdd'); ELSE - v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy'); + v_einddatum_max := TO_DATE (TO_CHAR (SYSDATE, 'yy') || '1231', 'yymmdd'); + END IF; + + IF v_einddatum IS NULL OR v_einddatum > v_einddatum_max + THEN + v_einddatum := v_einddatum_max; END IF; WHILE v_berijder_arr IS NOT NULL AND v_loop < 20 @@ -933,9 +961,7 @@ CREATE OR REPLACE PACKAGE BODY gvba AS rec.prs_perslid_key_voor, 'P', 1, - 'MAN-' - || TO_CHAR (SYSDATE, 'yy') - || ' ' + 'MAN ' || v_bedrijf_naam || '-' || v_berijder, @@ -1012,23 +1038,26 @@ CREATE OR REPLACE PACKAGE BODY gvba AS v_loop := 1; v_hint := 'Instellen einddatum: ' || rec.einddatum; - IF rec.einddatum IS NULL + + v_hint := 'Instellen einddatum: ' || rec.einddatum; + v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy'); + + v_einddatum_max := add_months(SYSDATE, 5*12); + IF v_einddatum IS NULL OR v_einddatum > v_einddatum_max THEN - v_einddatum := TO_DATE (TO_CHAR (SYSDATE, 'yy') || '1231', 'yymmdd'); - ELSE - v_einddatum := TO_DATE (rec.einddatum, 'dd-mm-yyyy'); + v_einddatum := v_einddatum_max; END IF; WHILE v_kenteken_arr IS NOT NULL AND v_loop < 20 LOOP BEGIN SELECT FAC.safe_to_number ( - MAX (SUBSTR (ins_deel_omschrijving, 9))) + MAX (SUBSTR (ins_deel_omschrijving, 6))) INTO v_vrijstelling_nr FROM ins_deel WHERE ins_srtdeel_key = 161 AND ins_deel_omschrijving LIKE - 'VRIJ-' || TO_CHAR (SYSDATE, 'yy') || '%'; + 'VRIJ %'; IF v_vrijstelling_nr IS NULL THEN @@ -1055,9 +1084,7 @@ CREATE OR REPLACE PACKAGE BODY gvba AS rec.prs_perslid_key_voor, 'P', 1, - 'VRIJ-' - || TO_CHAR (SYSDATE, 'yy') - || ' ' + 'VRIJ ' || TO_CHAR (v_vrijstelling_nr, 'fm0000'), 641, NULL, @@ -1101,6 +1128,11 @@ CREATE OR REPLACE PACKAGE BODY gvba AS INSERT INTO mld_melding_object (mld_melding_key, ins_deel_key) VALUES (rec.mld_melding_key, v_deel_key); + + -- vul het kenmerk 283 met de huidige datum om aan te geven dat deze + -- melding is afgehandeld. + MLD.upsertmeldingkenmerk (283, rec.mld_melding_key, TO_CHAR(SYSDATE, 'DD-MM-YYYY')); + EXCEPTION WHEN OTHERS THEN @@ -1120,20 +1152,95 @@ CREATE OR REPLACE PACKAGE BODY gvba AS END LOOP; END LOOP; + -- intrekken vrijstellingen + FOR rec IN c_del + LOOP + v_kenteken_arr := REPLACE (rec.kenteken, CHR (13), '#'); + v_kenteken_arr := REPLACE (v_kenteken_arr, CHR (10), '#'); + v_kenteken_arr := REPLACE (v_kenteken_arr, '##', '#'); + v_loop := 1; + + WHILE v_kenteken_arr IS NOT NULL AND v_loop < 20 + LOOP + BEGIN + get_element (v_kenteken_arr, v_kenteken); + DBMS_OUTPUT.put_line (v_kenteken); + v_loop := v_loop + 1; + + SELECT MAX(d.ins_deel_key) + INTO v_deel_key + FROM ins_deel d, ins_kenmerkdeel kd + WHERE d.ins_deel_key = kd.ins_deel_key + AND kd.ins_kenmerk_key = 23 -- kenteken + AND TRIM(UPPER(REPLACE(v_kenteken,'-'))) = TRIM(UPPER(REPLACE(kd.ins_kenmerkdeel_waarde,'-'))) + AND kd.ins_kenmerkdeel_verwijder IS NULL + AND d.ins_deel_verwijder IS NULL + AND ins_deel_vervaldatum > SYSDATE; + + SELECT ins_deel_vervaldatum + INTO v_deel_vervaldatum + FROM ins_deel + WHERE ins_deel_key = v_deel_key; + + UPDATE ins_deel + SET ins_deel_vervaldatum = SYSDATE + WHERE ins_deel_key = v_deel_key; + + v_oud_verval_str := SUBSTR(TO_CHAR(v_deel_vervaldatum, 'Day'),1,2) || TO_CHAR(v_deel_vervaldatum, ' dd-mm-yyyy'); + v_new_verval_str := SUBSTR(TO_CHAR(SYSDATE, 'Day'),1,2) || TO_CHAR(SYSDATE, ' dd-mm-yyyy'); + + fac.trackaction('INSUPD', v_deel_key, rec.prs_perslid_key, NULL, 'Object gewijzigd' || CHR(10) + || 'Vervaldatum: ' || v_oud_verval_str || ' --> ' || v_new_verval_str); + + INSERT INTO mld_melding_object (mld_melding_key, + ins_deel_key) + VALUES (rec.mld_melding_key, v_deel_key); + + EXCEPTION WHEN NO_DATA_FOUND + THEN + -- LOG geen vrijstelling gevonden met dit kenteken. + fac.writelog ('Export vrijstellingen', + 'E', + 'Geen vrijstelling gevonden met dit kenteken: ' || v_kenteken, + ''); + END; + END LOOP; + END LOOP; + COMMIT; END; - PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER) + PROCEDURE verleng_mandaat_vrijstelling (p_deel_key NUMBER, p_user_key NUMBER, p_jaren NUMBER) AS + v_oud_verval INS_DEEL.INS_DEEL_VERVALDATUM%TYPE; + v_contact INS_DEEL.INS_ALG_RUIMTE_KEY%TYPE; + v_jaren NUMBER; + v_new_verval DATE; + v_new_verval_str VARCHAR2(20); + v_oud_verval_str VARCHAR2(20); BEGIN - UPDATE ins_deel - SET ins_deel_omschrijving = REPLACE (ins_deel_omschrijving, - '-' || to_char(SYSDATE, 'YY') || ' ', - '-' || to_char(SYSDATE+365, 'YY') || ' '), - ins_deel_vervaldatum = TO_DATE('3112' || TO_CHAR(SYSDATE+365, 'YY'), 'DDMMYY') + SELECT ins_deel_vervaldatum, ins_alg_ruimte_key + INTO v_oud_verval, v_contact + FROM ins_deel WHERE ins_deel_key = p_deel_key; - fac.trackaction ('INSUPD', p_deel_key, p_user_key, SYSDATE, '#Mandaat/Vrijstelling is verlengd'); + v_new_verval := TO_DATE('3112' || TO_CHAR(SYSDATE, 'YY') + p_jaren, 'DDMMYY'); + v_new_verval_str := SUBSTR(TO_CHAR(v_new_verval, 'Day'),1,2) || TO_CHAR(v_new_verval, ' dd-mm-yyyy'); + v_oud_verval_str := SUBSTR(TO_CHAR(v_oud_verval, 'Day'),1,2) || TO_CHAR(v_oud_verval, ' dd-mm-yyyy'); + + -- extra check. Alleen de contactpersoon mag verlengen. Verder is het onzinnig om verlopen + -- mandaten en vrijstellingen te verlengen. + IF v_contact = p_user_key AND v_oud_verval > SYSDATE + THEN + UPDATE ins_deel + SET ins_deel_vervaldatum = v_new_verval + WHERE ins_deel_key = p_deel_key; + + fac.trackaction('INSUPD', p_deel_key, p_user_key, NULL, 'Object gewijzigd' || CHR(10) + || 'Vervaldatum: ' || v_oud_verval_str || ' --> ' || v_new_verval_str); + + fac.trackaction ('CUST01', p_deel_key, p_user_key, NULL, '#Mandaat/Vrijstelling is verlengd'); + END IF; END; -- END gvba; @@ -3279,13 +3386,21 @@ SELECT d.ins_deel_key, afw_contact, m.mld_melding_key, s.mld_statuses_omschrijving, - DECODE(SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-')+1, INSTR(ins_deel_omschrijving, ' ') - INSTR(ins_deel_omschrijving, '-') - 1), TO_CHAR(SYSDATE, 'YY'), 'Verlengen', 'Verlengd') Verlengstatus - FROM ins_v_deel_gegevens d, mld_melding_object mo, mld_melding m, mld_statuses s - WHERE ins_discipline_key = 641 AND ins_deel_vervaldatum > SYSDATE + DECODE (TO_CHAR(ins_deel_vervaldatum, 'YYYYMMDD'), TO_CHAR(SYSDATE, 'YYYY') || '1231', 'Verlengen', 'Onbekend') verlengstatus, + TO_CHAR(SYSDATE, 'MM') verlengmaand, + dv.fac_tracking_datum verlengd_op + FROM ins_v_deel_gegevens d, mld_melding_object mo, mld_melding m, mld_statuses s, + ( SELECT fac_tracking_refkey, fac_tracking_datum + FROM fac_tracking t, fac_srtnotificatie sn + WHERE t.fac_srtnotificatie_key = sn.fac_srtnotificatie_key + AND sn.fac_srtnotificatie_code = 'CUST01' -- man/vrij is verlengd + AND TRUNC(t.fac_tracking_datum, 'YY') = TRUNC(SYSDATE, 'YY')) dv + WHERE ins_discipline_key = 641 + AND ins_deel_vervaldatum > SYSDATE AND d.ins_deel_key = mo.ins_deel_key(+) AND mo.mld_melding_key = m.mld_melding_key(+) AND m.mld_melding_status = s.mld_statuses_key(+) - AND SUBSTR(ins_deel_omschrijving, INSTR(ins_deel_omschrijving, '-')+1, INSTR(ins_deel_omschrijving, ' ') - INSTR(ins_deel_omschrijving, '-') - 1) = TO_CHAR(SYSDATE, 'YY'); + AND d.ins_deel_key = dv.fac_tracking_refkey(+); ------ payload end ------