= Стартување на возење Само корисник со улога патник може да започне возење. Прво одбира билет со кој сака да се вози. Потоа бира постојка на која се качува и откога ќе одбере постојка му се листаат сите активни инстанци на линии кои се уште не ја поминале таа станица. [[Image(старт-возење.png)]] ==== Тригер во база: Пред да се внесе возењето во база се извршува тригер во база за да се провери валидноста на билетот: {{{#!div style="font-size: 80%" {{{#!sql create or replace function check_expiry_date() returns trigger as $$ begin if exists( select 1 from vozenje v where v.patnik_id = new.patnik_id and v.end_date is null ) then update vozenje set end_date = now(), status = 'FINISHED' where id in (select v.id from vozenje v where v.patnik_id = new.patnik_id and v.end_date is null); end if; if exists( select 1 from bilet where id = new.bilet_id and datum_aktivacija is null ) then update bilet set datum_aktivacija = now(), status = 'ACTIVE' where id = new.bilet_id; end if; if exists( select 1 from bilet b join tipbilet tb on b.tip_id = tb.id where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now()) ) then update bilet set status = 'EXPIRED' where id = new.bilet_id; end if; if exists( select 1 from bilet b join tipbilet tb on b.tip_id = tb.id where b.id = new.bilet_id and ((b.datum_aktivacija + (tb.trajnost || ' milliseconds')::interval) < now()) ) then RAISE exception 'Ticket is expired'; end if; return new; end; $$ language plpgsql; create or replace trigger check_validity_of_ticket before insert on vozenje for each row execute function check_expiry_date(); }}} }}} ==== Query за да се добијат потрбните инстанци на линии: {{{#!div style="font-size: 80%" {{{#!java @Query( value = """ select distinct inl.id from instanca_na_linija inl join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id where end_date is null and linija_id in ( select distinct(pnl.linija_id) from postojka_na_linija pnl where postojka_id = ?1 ) except select inl.id from postojka_na_linija pnl join instanca_na_linija inl on inl.linija_id = pnl.linija_id and inl.pravec_id = pnl.pravec_id join instanca_na_linija_postojka_na_linija inlpnl on inl.id = inlpnl.instanca_na_linija_id and pnl.id = inlpnl.postojka_na_linija_id where inl.end_date is null and postojka_id = ?1; """, nativeQuery = true, ) fun findIncomingRouteInstancesForStation(stationId: Int): List }}} }}}