#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_allsrtinstallatie, 0) ( niveau, ctr_srtinstallatie_key, discipline_oms, srtcontrole_oms, ins_discipline_key, ins_srtcontrole_key ) AS SELECT 'E', cd.ins_discipline_key, cd.ins_discipline_omschrijving, NULL ins_srtcontrole_omschrijving, cd.ins_discipline_key, NULL ins_srtcontrole_key FROM ctr_discipline cd UNION SELECT 'C', isc.ins_srtcontrole_key, cd.ins_discipline_omschrijving, isc.ins_srtcontrole_omschrijving, cd.ins_discipline_key, isc.ins_srtcontrole_key FROM ctr_discipline cd, ins_srtcontrole isc WHERE cd.ins_discipline_key = isc.ctr_discipline_key UNION SELECT 'T' niveau, NULL ctr_srtinstallatie_key, NULL discipline_oms, NULL srtcontrole_oms, NULL ins_discipline_key, NULL ins_srtcontrole_key FROM DUAL; 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_mode, ins_srtcontrole_eenheid, ins_srtcontrole_periode, ins_srtcontrole_bits, 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 (SELECT * FROM ( -- 1a) Dit deel bepaald de laatste inspectie (geplande(0), gestarte(2), afgemeld(5) of verwerkt(6)), -- inclusief de allereerste inspectie die nog niet gereed gemeld is. SELECT di.deel_key ins_deel_key, xcp.ins_srtcontrole_key, di.ins_deelsrtcontrole_datum, xcp.ins_srtcontrole_mode, xcp.ins_srtcontrole_eenheid, xcp.ins_srtcontrole_periode, xcp.ins_srtcontrole_bits, COALESCE(di.ins_deelsrtcontrole_plandatum, CASE WHEN di.ins_deelsrtcontrole_status IN (2, 3) AND di.ins_deelsrtcontrole_datum_org IS NULL THEN -- Gestart(2) en de allereerste inspectie (ins_deelsrtcontrole_datum_org is NULL). -- 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( -- er is nog geen inspectie geweest, dus de laatste inspectie is null COALESCE( NULL, 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, 1, -- steps. De eerste inspectie is nog niet geweest dus 1 periode verder dan startdatum/aanmaakdatum. 0) -- Er geldt dat (ctr_ismjob = 0) END END WHEN di.ins_deelsrtcontrole_status IN (2, 3) AND di.ins_deelsrtcontrole_datum_org IS NOT NULL THEN -- Gestart(2) en niet de allereerste inspectie. di.ins_deelsrtcontrole_datum_org ELSE -- Status is Gereed gemeld(5) of Voltooid(6). CASE xcp.ins_srtcontrole_mode WHEN 0 THEN -- Moment mode: ga uit van de originele berekende inspectiedatum. di.ins_deelsrtcontrole_datum_org ELSE -- Interval mode: ga uit van de werkelijke inspectiedatum. di.ins_deelsrtcontrole_datum END 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 3 THEN lcl.L('lcl_ins_controle_ter_uitvoer') 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) UNION ALL -- 1b) Dit deel bepaald de allereerste inspectie van een taak die nog niet ingepland of gestart is. Er is dus nog geen ins_deelsrtcontrole record van SELECT d.deel_key ins_deel_key, xcp.ins_srtcontrole_key, NULL, xcp.ins_srtcontrole_mode, xcp.ins_srtcontrole_eenheid, xcp.ins_srtcontrole_periode, xcp.ins_srtcontrole_bits, -- Gestart(2) en de allereerste inspectie (ins_deelsrtcontrole_datum_org is NULL). -- 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 xcp.ctr_ismjob = 1 --THEN -- xcp.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( -- er is nog geen inspectie geweest, dus de laatste inspectie is null COALESCE( NULL, 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, 1, -- steps. De eerste inspectie is nog niet geweest dus 1 periode verder dan startdatum/aanmaakdatum. 0) -- Er geldt dat (ctr_ismjob = 0) END END volgendedatum, d.discipline, d.soort, d.groep, d.soortcode, d.omschrijving, d.opmerking, d.locatie_omschrijving, d.gebouw, d.ruimtenr, d.aantal, (SELECT isc.ins_srtcontrole_omschrijving FROM ins_srtcontrole isc WHERE isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key) srtcontrole_omschrijving, (SELECT cd.ins_discipline_omschrijving FROM ctr_discipline cd, ins_srtcontrole isc WHERE isc.ins_srtcontrole_key = xcp.ins_srtcontrole_key AND isc.ctr_discipline_key = cd.ins_discipline_key) taaksoort, ins_deelsrtcontrole_datum_org, NULL controlemode_omschrijving, ins_deelsrtcontrole_opmerking, NULL perslid, ins_deelsrtcontrole_plandatum, -1 ins_deelsrtcontrole_status, -1 ins_controlemode_success, lcl.L('lcl_ins_controlemode_notplaned') deelsrtcontrole_status, xcp.ins_srtcontrole_eind vervaldatum, NULL ins_deelsrtcontrole_key FROM ins_v_udr_deel d, ins_deelsrtcontrole idsc, ins_v_defined_inspect_xcp xcp, ctr_disc_params dp WHERE xcp.ins_srtcontrole_key = idsc.ins_srtcontrole_key(+) AND xcp.ins_deel_key = idsc.ins_deel_key(+) AND xcp.ins_scenario_key = idsc.ins_scenario_key(+) AND xcp.ins_deel_key = d.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 idsc.ins_deel_key IS NULL AND idsc.ins_srtcontrole_key IS NULL AND xcp.ins_srtcontrole_periode > 0 AND (idsc.ins_deelsrtcontrole_key IS NULL OR idsc.ins_deelsrtcontrole_key = (SELECT MAX(ins_deelsrtcontrole_key) FROM ins_deelsrtcontrole id2 WHERE id2.ins_deel_key = d.deel_key AND id2.ins_srtcontrole_key = xcp.ins_srtcontrole_key AND id2.ins_scenario_key = 1))) UNION ALL -- 1c) Dit 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_mode, m.ins_srtcontrole_eenheid, m.ins_srtcontrole_periode, m.ins_srtcontrole_bits, fac.nextcyclusdate(m.volgendedatum, m.ins_srtcontrole_mode, m.ins_srtcontrole_eenheid, m.ins_srtcontrole_periode, m.ins_srtcontrole_bits, 1, 0), 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 TRUNC(fac.nextcyclusdate(m.volgendedatum, m.ins_srtcontrole_mode, m.ins_srtcontrole_eenheid, m.ins_srtcontrole_periode, m.ins_srtcontrole_bits, 1, 0), 'YYYY') <= 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') AND TRUNC(ig.volgendedatum, 'YYYY') < TRUNC(ADD_MONTHS(SYSDATE, 24), 'YYYY') -- 1 januari in het jaar dat 2 jaar verder ligt niet meetellen. 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 3 THEN lcl.L('lcl_ins_controle_ter_uitvoer') 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