#ifdef CTR /* * $Revision$ * $Id$ */ CREATE_VIEW(ctr_discipline, 0) AS SELECT * FROM ins_tab_discipline WHERE ins_discipline_module = 'CTR'; DEFINIEER_VIEW_AANWEZIG(ctr_discipline, ins_discipline_verwijder, ctr_v_aanwezigdiscipline, 0); CREATE_VIEW(ctr_v_monthly_recurring_tasks, 0) AS -- Inspecties die dit jaar en volgend jaar nog uitgevoerd moeten worden. SELECT ig.discipline, ig.soort, ig.groep, ig.soortcode, ig.omschrijving object, ig.opmerking, ig.locatie_omschrijving locatie, ig.gebouw, ig.ruimtenr, ig.perslid persoon, ig.aantal, ig.srtcontrole_omschrijving taak, ig.ins_srtcontrole_eenheid eenheid, ig.ins_srtcontrole_periode periode, ig.taaksoort, ig.ins_deelsrtcontrole_datum inspectiedatum, ig.controlemode_omschrijving taakafhandeling, ig.ins_deelsrtcontrole_opmerking inspectie_opmerking, ins_deelsrtcontrole_status inspectie_code, ig.deelsrtcontrole_status inspectie_status, ins_controlemode_success succesvol, TO_CHAR(ig.volgendedatum, 'MM') maand, TO_CHAR(ig.volgendedatum, 'YYYY') jaar, TO_CHAR(ig.volgendedatum, 'YYYY-MM') jaarmaand, ig.ins_deelsrtcontrole_datum_org orgdatum, ig.ins_deelsrtcontrole_plandatum plandatum, ig.volgendedatum, ig.vervaldatum, ig.ins_deel_key deel_key, ig.ins_srtcontrole_key, ig.ins_deelsrtcontrole_key FROM (WITH comps(ins_deel_key, ins_srtcontrole_key, ins_deelsrtcontrole_datum, ins_srtcontrole_eenheid, ins_srtcontrole_periode, volgendedatum, discipline, soort, groep, soortcode, omschrijving, opmerking, locatie_omschrijving, gebouw, ruimtenr, aantal, srtcontrole_omschrijving, taaksoort, ins_deelsrtcontrole_datum_org, controlemode_omschrijving, ins_deelsrtcontrole_opmerking, perslid, ins_deelsrtcontrole_plandatum, ins_deelsrtcontrole_status, ins_controlemode_success, deelsrtcontrole_status, vervaldatum, ins_deelsrtcontrole_key) AS ( -- 1a) Eerste deel bepaald de laatste inspectie (geplande(0), gestarte(2), afgemeld(5) of verwerkt(6)). SELECT di.deel_key ins_deel_key, xcp.ins_srtcontrole_key, di.ins_deelsrtcontrole_datum, xcp.ins_srtcontrole_eenheid, xcp.ins_srtcontrole_periode, COALESCE(di.ins_deelsrtcontrole_plandatum, CASE WHEN di.ins_deelsrtcontrole_status = 2 AND di.ins_deelsrtcontrole_datum_org IS NULL THEN -- Periodieke taken: -- De startdatum is MAX(startdatum, aanmaakdatum/registratiedatum) en heeft altijd een waarde (ins_deel_aanmaak is altijd gevuld). -- Er is nog geen inspectie geweest en de startdatum is ingevuld of de registratiedatum ligt in de toekomst. -- Er geldt dan het volgende: -- Voor Controle(1): Eerste inspectie tonen op MAX(startdatum, registratiedatum) van het object. -- Voor Vervanging(2) of Certificering(3): -- a) Als de startdatum het verst ligt: Eerste inspectie tonen op de startdatum. -- b) Als registratiedatum het verst in de toekomst ligt: Eerste inspectie tonen op 1 periode verder dan de registratiedatum. -- De aanmaakdatum/Registratiedatum is altijd ingevuld en als er al een inspectie is geweest, -- zijn de startdatum en registratiedatum niet meer van belang. CASE -- Er geldt dat (ctr_ismjob = 0), dus de eerste when is toch niet geldig. --WHEN di.ctr_ismjob = 1 --THEN -- ins_deelsrtcontrole_freezedate WHEN xcp.ctr_controle_type = 1 THEN -- Controle(1). CASE WHEN xcp.ins_srtcontroledl_xcp_startdat IS NOT NULL AND xcp.ins_srtcontroledl_xcp_startdat >= xcp.ins_deel_aanmaak THEN xcp.ins_srtcontroledl_xcp_startdat ELSE xcp.ins_deel_aanmaak END ELSE -- Vervanging(2), Certificering(3). CASE WHEN xcp.ins_srtcontroledl_xcp_startdat IS NOT NULL AND xcp.ins_srtcontroledl_xcp_startdat >= xcp.ins_deel_aanmaak THEN xcp.ins_srtcontroledl_xcp_startdat ELSE fac.nextcyclusdate( COALESCE( (SELECT CASE xcp.ins_srtcontrole_mode WHEN 0 THEN di.ins_deelsrtcontrole_datum_org ELSE idsc.ins_deelsrtcontrole_datum END ins_deelsrtcontrole_datum FROM ins_deelsrtcontrole idsc WHERE idsc.ins_srtcontrole_key = di.ins_srtcontrole_key AND di.ins_deelsrtcontrole_status IN (5, 6) AND idsc.ins_deel_key = di.deel_key AND idsc.ins_deelsrtcontrole_key = (SELECT MAX(idsc2.ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole idsc2 WHERE idsc2.ins_deel_key = di.deel_key AND idsc2.ins_srtcontrole_key = di.ins_srtcontrole_key AND idsc2.ins_deelsrtcontrole_status IN (5, 6) AND idsc2.ins_scenario_key = 1)), GREATEST( COALESCE(xcp.ins_srtcontroledl_xcp_startdat, xcp.ins_deel_aanmaak), COALESCE(xcp.ins_deel_aanmaak, xcp.ins_srtcontroledl_xcp_startdat))), xcp.ins_srtcontrole_mode, xcp.ins_srtcontrole_eenheid, xcp.ins_srtcontrole_periode, xcp.ins_srtcontrole_bits, CASE WHEN xcp.ins_srtcontrole_mode = 1 THEN 1 WHEN xcp.ins_srtcontrole_eenheid = 0 AND TRUNC( COALESCE( (SELECT CASE xcp.ins_srtcontrole_mode WHEN 0 THEN di.ins_deelsrtcontrole_datum_org ELSE idsc.ins_deelsrtcontrole_datum END ins_deelsrtcontrole_datum FROM ins_deelsrtcontrole idsc WHERE idsc.ins_srtcontrole_key = di.ins_srtcontrole_key AND di.ins_deelsrtcontrole_status IN (5, 6) AND idsc.ins_deel_key = di.deel_key AND idsc.ins_deelsrtcontrole_key = (SELECT MAX( idsc2.ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole idsc2 WHERE idsc2.ins_deel_key = di.deel_key AND idsc2.ins_srtcontrole_key = di.ins_srtcontrole_key AND idsc2.ins_deelsrtcontrole_status IN (5, 6) AND idsc2.ins_scenario_key = 1)), xcp.ins_deel_aanmaak), 'HH24') >= TRUNC(SYSDATE, 'HH24') THEN 1 WHEN xcp.ins_srtcontrole_eenheid > 0 AND TRUNC( COALESCE( (SELECT CASE xcp.ins_srtcontrole_mode WHEN 0 THEN di.ins_deelsrtcontrole_datum_org ELSE idsc.ins_deelsrtcontrole_datum END ins_deelsrtcontrole_datum FROM ins_deelsrtcontrole idsc WHERE idsc.ins_srtcontrole_key = di.ins_srtcontrole_key AND di.ins_deelsrtcontrole_status IN (5, 6) AND idsc.ins_deel_key = di.deel_key AND idsc.ins_deelsrtcontrole_key = (SELECT MAX( idsc2.ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole idsc2 WHERE idsc2.ins_deel_key = di.deel_key AND idsc2.ins_srtcontrole_key = di.ins_srtcontrole_key AND idsc2.ins_deelsrtcontrole_status IN (5, 6) AND idsc2.ins_scenario_key = 1)), xcp.ins_deel_aanmaak), 'DDD') >= TRUNC(SYSDATE, 'DDD') THEN 1 WHEN (SELECT CASE xcp.ins_srtcontrole_mode WHEN 0 THEN di.ins_deelsrtcontrole_datum_org ELSE idsc.ins_deelsrtcontrole_datum END ins_deelsrtcontrole_datum FROM ins_deelsrtcontrole idsc WHERE idsc.ins_srtcontrole_key = di.ins_srtcontrole_key AND di.ins_deelsrtcontrole_status IN (5, 6) AND idsc.ins_deel_key = di.deel_key AND idsc.ins_deelsrtcontrole_key = (SELECT MAX( idsc2.ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole idsc2 WHERE idsc2.ins_deel_key = di.deel_key AND idsc2.ins_srtcontrole_key = di.ins_srtcontrole_key AND idsc2.ins_deelsrtcontrole_status IN (5, 6) AND idsc2.ins_scenario_key = 1)) IS NULL THEN 1 ELSE 0 END, 0) --Er geldt dat (ctr_ismjob = 0), dus de eerste when is toch niet geldig. END END ELSE di.ins_deelsrtcontrole_datum_org END) volgendedatum, discipline, soort, groep, soortcode, omschrijving, opmerking, locatie_omschrijving, gebouw, ruimtenr, aantal, srtcontrole_omschrijving, ctr_discipline_omschrijving taaksoort, ins_deelsrtcontrole_datum_org, controlemode_omschrijving, ins_deelsrtcontrole_opmerking, perslid, ins_deelsrtcontrole_plandatum, di.ins_deelsrtcontrole_status, COALESCE( (SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT di2.ins_controlemode_key FROM ins_deelsrtcontrole di2 WHERE di2.ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)), -1) ins_controlemode_success, CASE di.ins_deelsrtcontrole_status WHEN 0 THEN lcl.L('lcl_ins_controle_pending') WHEN 2 THEN lcl.L('lcl_ins_controle_gestart') WHEN 5 THEN CASE WHEN ((SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT di2.ins_controlemode_key FROM ins_deelsrtcontrole di2 WHERE di2.ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)) = 1) THEN lcl.L('lcl_ins_controlemode_approved') ELSE lcl.L('lcl_ins_controlemode_deprecated') END WHEN 6 THEN CASE WHEN ((SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT ins_controlemode_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)) = 1) THEN lcl.L('lcl_ins_controlemode_approved') ELSE lcl.L('lcl_ins_controlemode_deprecated') END END deelsrtcontrole_status, xcp.ins_srtcontrole_eind vervaldatum, di.ins_deelsrtcontrole_key FROM ins_v_udr_deelinspect di, ins_v_defined_inspect_xcp xcp, ctr_disc_params dp WHERE di.ins_srtcontrole_key = xcp.ins_srtcontrole_key AND di.deel_key = xcp.ins_deel_key AND xcp.ctr_discipline_key = dp.ctr_ins_discipline_key AND dp.ctr_disc_params_ismjob = 0 AND xcp.ins_srtcontrole_eenheid > 2 AND xcp.ins_scenario_key = 1 AND xcp.ins_srtcontrole_periode > 0 AND di.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole id2 WHERE id2.ins_deel_key = di.deel_key AND id2.ins_srtcontrole_key = di.ins_srtcontrole_key AND id2.ins_scenario_key = 1) AND COALESCE(di.ins_deelsrtcontrole_datum, di.ins_deelsrtcontrole_plandatum, di.ins_deelsrtcontrole_datum_org) IS NOT NULL UNION ALL -- 1b) Tweede deel bepaalt/berekent de toekomstige inspecties van dit jaar en volgend jaar. SELECT m.ins_deel_key, m.ins_srtcontrole_key, NULL ins_deelsrtcontrole_datum, m.ins_srtcontrole_eenheid, m.ins_srtcontrole_periode, ADD_MONTHS(m.volgendedatum, CASE WHEN m.ins_srtcontrole_eenheid = 3 THEN m.ins_srtcontrole_periode ELSE m.ins_srtcontrole_periode * 12 END), m.discipline, m.soort, m.groep, m.soortcode, m.omschrijving, m.opmerking, m.locatie_omschrijving, m.gebouw, m.ruimtenr, m.aantal, m.srtcontrole_omschrijving, m.taaksoort, NULL ins_deelsrtcontrole_datum_org, NULL controlemode_omschrijving, NULL ins_deelsrtcontrole_opmerking, NULL perslid, NULL ins_deelsrtcontrole_plandatum, -1 ins_deelsrtcontrole_status, -1 ins_controlemode_success, lcl.L('lcl_ins_controlemode_notplaned') deelsrtcontrole_status, m.vervaldatum, NULL ins_deelsrtcontrole_key FROM comps m WHERE ADD_MONTHS(m.volgendedatum, CASE WHEN m.ins_srtcontrole_eenheid = 3 THEN m.ins_srtcontrole_periode ELSE m.ins_srtcontrole_periode * 12 END) <= TRUNC(ADD_MONTHS(SYSDATE, 24), 'YYYY') ) SELECT * FROM comps) ig WHERE (ig.vervaldatum IS NULL OR ig.vervaldatum > ig.volgendedatum) AND ig.volgendedatum BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -12), 'YYYY') AND TRUNC(ADD_MONTHS(SYSDATE, 24), 'YYYY') UNION ALL -- 2) Inspecties die vorig jaar en dit jaar zijn uitgevoerd, uitgezonderd de laatste. SELECT di.discipline, di.soort, di.groep, di.soortcode, di.omschrijving object, di.opmerking, di.locatie_omschrijving locatie, di.gebouw, di.ruimtenr, di.perslid persoon, di.aantal, di.srtcontrole_omschrijving taak, sc.ins_srtcontrole_eenheid eenheid, sc.ins_srtcontrole_periode periode, di.ctr_discipline_omschrijving taaksoort, di.ins_deelsrtcontrole_datum inspectiedatum, di.controlemode_omschrijving taakafhandeling, di.ins_deelsrtcontrole_opmerking inspectie_opmerking, (SELECT ins_deelsrtcontrole_status FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key) inspectie_code, CASE (SELECT di2.ins_deelsrtcontrole_status FROM ins_deelsrtcontrole di2 WHERE di2.ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key) WHEN 0 THEN lcl.L('lcl_ins_controle_pending') WHEN 2 THEN lcl.L('lcl_ins_controle_gestart') WHEN 5 THEN CASE WHEN ((SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT ins_controlemode_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)) = 1) THEN lcl.L('lcl_ins_controlemode_approved') ELSE lcl.L('lcl_ins_controlemode_deprecated') END WHEN 6 THEN CASE WHEN ((SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT ins_controlemode_key FROM ins_deelsrtcontrole WHERE ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)) = 1) THEN lcl.L('lcl_ins_controlemode_approved') ELSE lcl.L('lcl_ins_controlemode_deprecated') END END inspectie_status, COALESCE((SELECT icm.ins_controlemode_success FROM ins_controlemode icm WHERE icm.ins_controlemode_key = (SELECT di2.ins_controlemode_key FROM ins_deelsrtcontrole di2 WHERE di2.ins_deelsrtcontrole_key = di.ins_deelsrtcontrole_key)), -1) ins_controlemode_success, TO_CHAR(di.ins_deelsrtcontrole_datum, 'MM') maand, TO_CHAR(di.ins_deelsrtcontrole_datum, 'YYYY') jaar, TO_CHAR(di.ins_deelsrtcontrole_datum, 'YYYY-MM') jaarmaand, di.ins_deelsrtcontrole_datum_org orgdatum, di.ins_deelsrtcontrole_plandatum plandatum, di.ins_deelsrtcontrole_datum volgendedatum, di.vervaldatum, di.deel_key, sc.ins_srtcontrole_key, di.ins_deelsrtcontrole_key FROM ins_v_udr_deelinspect di, ins_srtcontrole sc, ctr_disc_params dp WHERE di.ins_srtcontrole_key = sc.ins_srtcontrole_key AND sc.ctr_discipline_key = dp.ctr_ins_discipline_key AND dp.ctr_disc_params_ismjob = 0 AND sc.ins_srtcontrole_eenheid > 2 AND di.ins_deelsrtcontrole_datum BETWEEN TRUNC(ADD_MONTHS(SYSDATE, -12), 'YYYY') AND TRUNC(ADD_MONTHS(SYSDATE, 24), 'YYYY') AND di.ins_deelsrtcontrole_key NOT IN (SELECT MAX(ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole id2 WHERE id2.ins_deel_key = di.deel_key AND id2.ins_srtcontrole_key = di.ins_srtcontrole_key AND id2.ins_scenario_key = 1); CREATE_VIEW(ctr_v_monthly_recurring_tasksy, 0) // alleen huidige jaar AS SELECT * FROM ctr_v_monthly_recurring_tasks WHERE jaar = TO_CHAR (SYSDATE, 'YYYY'); REGISTERRUN('$Id$') #endif // CTR