| 62 | | RETURNS TRIGGER |
| 63 | | LANGUAGE plpgsql |
| 64 | | AS $$ |
| 65 | | BEGIN |
| 66 | | IF NOT EXISTS (SELECT 1 FROM Policaec WHERE EMBG_P = NEW.EMBG_P) THEN |
| 67 | | RAISE EXCEPTION 'Полицаецот со ЕМБГ % не постои во системот!', NEW.EMBG_P; |
| 68 | | END IF; |
| 69 | | |
| 70 | | IF NEW.datum_od IS NULL THEN |
| 71 | | RAISE EXCEPTION 'Почетокот на работниот однос (datum_od) мора да биде дефиниран!'; |
| 72 | | END IF; |
| 73 | | |
| 74 | | IF NEW.datum_do IS NULL THEN |
| 75 | | IF EXISTS ( |
| 76 | | SELECT 1 FROM Raboti_vo |
| 77 | | WHERE EMBG_P = NEW.EMBG_P AND datum_do IS NULL AND id_stanica <> NEW.id_stanica |
| 78 | | ) THEN |
| 79 | | RAISE EXCEPTION 'Полицаецот со ЕМБГ % веќе има активен работен ангажман во друга полициска станица!', NEW.EMBG_P; |
| 80 | | END IF; |
| 81 | | END IF; |
| 82 | | |
| 83 | | RETURN NEW; |
| | 62 | RETURNS TRIGGER |
| | 63 | LANGUAGE plpgsql |
| | 64 | AS $$ |
| | 65 | BEGIN |
| | 66 | IF NOT EXISTS (SELECT 1 FROM Policaec WHERE EMBG_P = NEW.EMBG_P) THEN |
| | 67 | RAISE EXCEPTION 'Policaecot so EMBG % ne postoi vo sistemot!', NEW.EMBG_P; |
| | 68 | END IF; |
| | 69 | |
| | 70 | IF NEW.datum_od IS NULL THEN |
| | 71 | RAISE EXCEPTION 'Pocetokot na rabotniot odnos (datum_od) mora da bide definiran!'; |
| | 72 | END IF; |
| | 73 | |
| | 74 | IF NEW.datum_do IS NULL THEN |
| | 75 | IF EXISTS ( |
| | 76 | SELECT 1 FROM Raboti_vo |
| | 77 | WHERE EMBG_P = NEW.EMBG_P AND datum_do IS NULL AND id_stanica <> NEW.id_stanica |
| | 78 | ) THEN |
| | 79 | RAISE EXCEPTION 'Policaecot so EMBG % vekje ima aktiven angazhman vo druga stanica!', NEW.EMBG_P; |
| | 80 | END IF; |
| | 81 | END IF; |
| | 82 | |
| | 83 | RETURN NEW; |
| 142 | | p_embg_prekrsuvac char(13), |
| 143 | | p_broj_sasija varchar(17), |
| 144 | | p_embg_policaec char(13), |
| 145 | | p_lokacija varchar(100), |
| 146 | | p_id_slucaj int, |
| 147 | | p_id_prekrsok int, |
| 148 | | p_vreme time DEFAULT CURRENT_TIME, |
| 149 | | p_datum date DEFAULT CURRENT_DATE, |
| 150 | | p_potpis boolean DEFAULT false |
| | 142 | p_embg_prekrsuvac char(13), |
| | 143 | p_broj_sasija varchar(17), |
| | 144 | p_embg_policaec char(13), |
| | 145 | p_lokacija varchar(100), |
| | 146 | p_id_slucaj int, |
| | 147 | p_id_prekrsok int, |
| | 148 | p_vreme time DEFAULT CURRENT_TIME, |
| | 149 | p_datum date DEFAULT CURRENT_DATE, |
| | 150 | p_potpis boolean DEFAULT false |
| 152 | | LANGUAGE plpgsql |
| 153 | | AS $$ |
| 154 | | DECLARE |
| 155 | | v_id_zapisnik int; |
| 156 | | BEGIN |
| 157 | | IF NOT EXISTS (SELECT 1 FROM Gragjanin WHERE EMBG = p_embg_prekrsuvac) THEN |
| 158 | | RAISE EXCEPTION 'Gragjaninot so EMBG % ne postoi!', p_embg_prekrsuvac; |
| 159 | | END IF; |
| 160 | | IF NOT EXISTS (SELECT 1 FROM Policaec WHERE EMBG_P = p_embg_policaec) THEN |
| 161 | | RAISE EXCEPTION 'Policaecot so EMBG % ne postoi!', p_embg_policaec; |
| 162 | | END IF; |
| 163 | | IF NOT EXISTS (SELECT 1 FROM Vozilo WHERE broj_na_sasija = p_broj_sasija) THEN |
| 164 | | RAISE EXCEPTION 'Voziloto so broj na sasija % ne postoi!', p_broj_sasija; |
| 165 | | END IF; |
| 166 | | IF NOT EXISTS (SELECT 1 FROM Prekrsok WHERE id_prekrsok = p_id_prekrsok) THEN |
| 167 | | RAISE EXCEPTION 'Prekrsokot so id % ne postoi!', p_id_prekrsok; |
| 168 | | END IF; |
| 169 | | IF NOT EXISTS (SELECT 1 FROM Slucaj WHERE id_slucaj = p_id_slucaj) THEN |
| 170 | | RAISE EXCEPTION 'Slucajot so id % ne postoi!', p_id_slucaj; |
| 171 | | END IF; |
| 172 | | |
| 173 | | INSERT INTO Zapisnik (vreme, datum, lokacija, Potpis, |
| 174 | | id_slucaj, EMBG_Prekrsuvach, Vozilo_Broj_Sasija, EMBG_Policaec) |
| 175 | | VALUES (p_vreme, p_datum, p_lokacija, p_potpis, |
| 176 | | p_id_slucaj, p_embg_prekrsuvac, p_broj_sasija, p_embg_policaec) |
| 177 | | RETURNING id_na_zapisnik INTO v_id_zapisnik; |
| 178 | | |
| 179 | | INSERT INTO Uplata (iznos, status, Uplatil_Gragjanin, id_zapisnik) |
| 180 | | VALUES (0, 'Neplateno', p_embg_prekrsuvac, v_id_zapisnik); |
| 181 | | |
| 182 | | INSERT INTO Stavka_Zapisnik (reden_broj, id_na_zapisnik, id_na_prekrsok) |
| 183 | | VALUES (1, v_id_zapisnik, p_id_prekrsok); |
| 184 | | |
| 185 | | RAISE NOTICE 'Kreiran zapisnik so id % so prv prekrsok %.', v_id_zapisnik, p_id_prekrsok; |
| 186 | | END; |
| | 152 | LANGUAGE plpgsql |
| | 153 | AS $$ |
| | 154 | DECLARE |
| | 155 | v_id_zapisnik int; |
| | 156 | BEGIN |
| | 157 | |
| | 158 | IF NOT EXISTS (SELECT 1 FROM Gragjanin WHERE EMBG = p_embg_prekrsuvac) THEN |
| | 159 | RAISE EXCEPTION 'Gragjaninot so EMBG % ne postoi!', p_embg_prekrsuvac; |
| | 160 | END IF; |
| | 161 | |
| | 162 | IF NOT EXISTS (SELECT 1 FROM Policaec WHERE EMBG_P = p_embg_policaec) THEN |
| | 163 | RAISE EXCEPTION 'Policaecot so EMBG % ne postoi!', p_embg_policaec; |
| | 164 | END IF; |
| | 165 | |
| | 166 | IF NOT EXISTS (SELECT 1 FROM Vozilo WHERE broj_na_sasija = p_broj_sasija) THEN |
| | 167 | RAISE EXCEPTION 'Voziloto so broj na sasija % ne postoi!', p_broj_sasija; |
| | 168 | END IF; |
| | 169 | |
| | 170 | IF NOT EXISTS (SELECT 1 FROM Prekrsok WHERE id_prekrsok = p_id_prekrsok) THEN |
| | 171 | RAISE EXCEPTION 'Prekrsokot so id % ne postoi!', p_id_prekrsok; |
| | 172 | END IF; |
| | 173 | |
| | 174 | IF NOT EXISTS (SELECT 1 FROM Slucaj WHERE id_slucaj = p_id_slucaj) THEN |
| | 175 | RAISE EXCEPTION 'Slucajot so id % ne postoi!', p_id_slucaj; |
| | 176 | END IF; |
| | 177 | |
| | 178 | |
| | 179 | INSERT INTO Zapisnik ( |
| | 180 | vreme, datum, lokacija, Potpis, |
| | 181 | id_slucaj, EMBG_Prekrsuvach, Vozilo_Broj_Sasija, EMBG_Policaec |
| | 182 | ) |
| | 183 | VALUES ( |
| | 184 | p_vreme, p_datum, p_lokacija, p_potpis, |
| | 185 | p_id_slucaj, p_embg_prekrsuvac, p_broj_sasija, p_embg_policaec |
| | 186 | ) |
| | 187 | RETURNING id_na_zapisnik INTO v_id_zapisnik; |
| | 188 | |
| | 189 | |
| | 190 | INSERT INTO Uplata (iznos, status, Uplatil_Gragjanin, id_zapisnik) |
| | 191 | VALUES (0, 'Neplateno', p_embg_prekrsuvac, v_id_zapisnik); |
| | 192 | |
| | 193 | |
| | 194 | INSERT INTO Stavka_Zapisnik (reden_broj, id_na_zapisnik, id_na_prekrsok) |
| | 195 | VALUES (1, v_id_zapisnik, p_id_prekrsok); |
| | 196 | |
| | 197 | RAISE NOTICE 'Kreiran zapisnik so id % so prv prekrsok %.', v_id_zapisnik, p_id_prekrsok; |
| | 198 | END; |
| | 199 | $$; |
| | 200 | |
| 250 | | LANGUAGE plpgsql |
| 251 | | AS $$ |
| 252 | | DECLARE |
| 253 | | v_status varchar(30); |
| 254 | | v_iznos numeric(10,2); |
| 255 | | BEGIN |
| 256 | | SELECT status, iznos INTO v_status, v_iznos |
| 257 | | FROM Uplata WHERE id_zapisnik = p_id_zapisnik; |
| 258 | | |
| 259 | | IF v_status IS NULL THEN |
| 260 | | RAISE EXCEPTION 'Ne postoi uplata za zapisnik %!', p_id_zapisnik; |
| 261 | | END IF; |
| 262 | | IF v_status = 'Plateno' THEN |
| 263 | | RAISE EXCEPTION 'Kaznata za zapisnik % e vekje platena!', p_id_zapisnik; |
| 264 | | END IF; |
| 265 | | IF v_iznos <= 0 THEN |
| 266 | | RAISE EXCEPTION 'Zapisnikot % nema stavki/kazni za naplata!', p_id_zapisnik; |
| 267 | | END IF; |
| 268 | | IF p_nacin_plakanje NOT IN ('E-bankarstvo', 'Platezna karticka', 'Gotovo/Uplatnica') THEN |
| 269 | | RAISE EXCEPTION 'Nepoznat nacin na plakanje: %.', p_nacin_plakanje; |
| 270 | | END IF; |
| 271 | | |
| 272 | | UPDATE Uplata |
| 273 | | SET status = 'Plateno', |
| 274 | | datum_uplata = CURRENT_DATE, |
| 275 | | nacin_plakanje = p_nacin_plakanje |
| 276 | | WHERE id_zapisnik = p_id_zapisnik; |
| 277 | | |
| 278 | | RAISE NOTICE 'Uspesno naplatena kazna od % za zapisnik % (%).', v_iznos, p_id_zapisnik, p_nacin_plakanje; |
| | 264 | LANGUAGE plpgsql |
| | 265 | AS $$ |
| | 266 | DECLARE |
| | 267 | v_status varchar(30); |
| | 268 | v_iznos numeric(10,2); |
| | 269 | BEGIN |
| | 270 | |
| | 271 | SELECT status, iznos INTO v_status, v_iznos |
| | 272 | FROM Uplata |
| | 273 | WHERE id_zapisnik = p_id_zapisnik; |
| | 274 | |
| | 275 | IF v_status IS NULL THEN |
| | 276 | RAISE EXCEPTION 'Ne postoi uplata za zapisnik %!', p_id_zapisnik; |
| | 277 | END IF; |
| | 278 | |
| | 279 | IF v_status = 'Plateno' THEN |
| | 280 | RAISE EXCEPTION 'Kaznata za zapisnik % e vekje platena!', p_id_zapisnik; |
| | 281 | END IF; |
| | 282 | |
| | 283 | IF v_iznos <= 0 THEN |
| | 284 | RAISE EXCEPTION 'Zapisnikot % nema stavki/kazni za naplata!', p_id_zapisnik; |
| | 285 | END IF; |
| | 286 | |
| | 287 | IF p_nacin_plakanje NOT IN ('E-bankarstvo', 'Platezna karticka', 'Gotovo/Uplatnica') THEN |
| | 288 | RAISE EXCEPTION 'Nepoznat nacin na plakanje: %. Dozvoleni: E-bankarstvo, Platezna karticka, Gotovo/Uplatnica.', p_nacin_plakanje; |
| | 289 | END IF; |
| | 290 | |
| | 291 | |
| | 292 | UPDATE Uplata |
| | 293 | SET status = 'Plateno', |
| | 294 | datum_uplata = CURRENT_DATE, |
| | 295 | nacin_plakanje = p_nacin_plakanje |
| | 296 | WHERE id_zapisnik = p_id_zapisnik; |
| | 297 | |
| | 298 | RAISE NOTICE 'Uspesno naplatena kazna od % za zapisnik % (%).', v_iznos, p_id_zapisnik, p_nacin_plakanje; |
| 297 | | LANGUAGE plpgsql |
| 298 | | AS $$ |
| 299 | | DECLARE |
| 300 | | v_datum_vaznost_do date; |
| 301 | | v_datum_izdavanje date; |
| 302 | | v_kod_kategorija varchar(3); |
| 303 | | BEGIN |
| 304 | | SELECT datum_vaznost_do, datum_izdavanje |
| 305 | | INTO v_datum_vaznost_do, v_datum_izdavanje |
| 306 | | FROM Vozacka_dozvola WHERE broj_dozvola = p_broj_dozvola; |
| 307 | | |
| 308 | | IF v_datum_vaznost_do IS NULL THEN |
| 309 | | RAISE EXCEPTION 'Vozackata dozvola so broj % ne postoi!', p_broj_dozvola; |
| 310 | | END IF; |
| 311 | | IF v_datum_vaznost_do < CURRENT_DATE THEN |
| 312 | | RAISE EXCEPTION 'Vozackata dozvola % e istechena (vaznost do %)!', p_broj_dozvola, v_datum_vaznost_do; |
| 313 | | END IF; |
| 314 | | |
| 315 | | SELECT kod INTO v_kod_kategorija |
| 316 | | FROM Kategorija WHERE id_kategorija = p_id_kategorija; |
| 317 | | |
| 318 | | IF v_kod_kategorija IS NULL THEN |
| 319 | | RAISE EXCEPTION 'Kategorijata so id % ne postoi!', p_id_kategorija; |
| 320 | | END IF; |
| 321 | | |
| 322 | | IF EXISTS ( |
| 323 | | SELECT 1 FROM Kategorija_Vozacka_dozvola |
| 324 | | WHERE broj_dozvola = p_broj_dozvola AND id_kategorija = p_id_kategorija |
| 325 | | ) THEN |
| 326 | | RAISE EXCEPTION 'Kategorijata % vekje e dodadena na vozackata %!', v_kod_kategorija, p_broj_dozvola; |
| 327 | | END IF; |
| 328 | | |
| 329 | | IF p_datum_polaganje > CURRENT_DATE THEN |
| 330 | | RAISE EXCEPTION 'Datumot na polaganje % ne moze da bide vo idnina!', p_datum_polaganje; |
| 331 | | END IF; |
| 332 | | IF p_datum_polaganje < v_datum_izdavanje THEN |
| 333 | | RAISE EXCEPTION 'Datumot na polaganje % ne moze da bide pred izdavanjeto na vozackata (%).', |
| 334 | | p_datum_polaganje, v_datum_izdavanje; |
| 335 | | END IF; |
| 336 | | |
| 337 | | INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje) |
| 338 | | VALUES (p_id_kategorija, p_broj_dozvola, p_datum_polaganje); |
| 339 | | |
| 340 | | RAISE NOTICE 'Uspesno dodadena kategorija % na vozackata %.', v_kod_kategorija, p_broj_dozvola; |
| | 317 | LANGUAGE plpgsql |
| | 318 | AS $$ |
| | 319 | DECLARE |
| | 320 | v_datum_vaznost_do date; |
| | 321 | v_datum_izdavanje date; |
| | 322 | v_kod_kategorija varchar(3); |
| | 323 | BEGIN |
| | 324 | |
| | 325 | SELECT datum_vaznost_do, datum_izdavanje |
| | 326 | INTO v_datum_vaznost_do, v_datum_izdavanje |
| | 327 | FROM Vozacka_dozvola |
| | 328 | WHERE broj_dozvola = p_broj_dozvola; |
| | 329 | |
| | 330 | IF v_datum_vaznost_do IS NULL THEN |
| | 331 | RAISE EXCEPTION 'Vozackata dozvola so broj % ne postoi!', p_broj_dozvola; |
| | 332 | END IF; |
| | 333 | |
| | 334 | |
| | 335 | IF v_datum_vaznost_do < CURRENT_DATE THEN |
| | 336 | RAISE EXCEPTION 'Vozackata dozvola % e istechena (vaznost do %)! Mora prvo da se obnovi.', |
| | 337 | p_broj_dozvola, v_datum_vaznost_do; |
| | 338 | END IF; |
| | 339 | |
| | 340 | |
| | 341 | SELECT kod INTO v_kod_kategorija |
| | 342 | FROM Kategorija |
| | 343 | WHERE id_kategorija = p_id_kategorija; |
| | 344 | |
| | 345 | IF v_kod_kategorija IS NULL THEN |
| | 346 | RAISE EXCEPTION 'Kategorijata so id % ne postoi!', p_id_kategorija; |
| | 347 | END IF; |
| | 348 | |
| | 349 | |
| | 350 | IF EXISTS ( |
| | 351 | SELECT 1 FROM Kategorija_Vozacka_dozvola |
| | 352 | WHERE broj_dozvola = p_broj_dozvola |
| | 353 | AND id_kategorija = p_id_kategorija |
| | 354 | ) THEN |
| | 355 | RAISE EXCEPTION 'Kategorijata % vekje e dodadena na vozackata %!', |
| | 356 | v_kod_kategorija, p_broj_dozvola; |
| | 357 | END IF; |
| | 358 | |
| | 359 | |
| | 360 | IF p_datum_polaganje > CURRENT_DATE THEN |
| | 361 | RAISE EXCEPTION 'Datumot na polaganje % ne moze da bide vo idnina!', p_datum_polaganje; |
| | 362 | END IF; |
| | 363 | |
| | 364 | IF p_datum_polaganje < v_datum_izdavanje THEN |
| | 365 | RAISE EXCEPTION 'Datumot na polaganje % ne moze da bide pred izdavanjeto na vozackata (%).', |
| | 366 | p_datum_polaganje, v_datum_izdavanje; |
| | 367 | END IF; |
| | 368 | |
| | 369 | |
| | 370 | INSERT INTO Kategorija_Vozacka_dozvola (id_kategorija, broj_dozvola, datum_polaganje) |
| | 371 | VALUES (p_id_kategorija, p_broj_dozvola, p_datum_polaganje); |
| | 372 | |
| | 373 | RAISE NOTICE 'Uspesno dodadena kategorija % na vozackata % (polagano na %).', |
| | 374 | v_kod_kategorija, p_broj_dozvola, p_datum_polaganje; |
| 358 | | LANGUAGE plpgsql |
| 359 | | AS $$ |
| 360 | | DECLARE |
| 361 | | v_status_uplata varchar(30); |
| 362 | | v_status_zapisnik varchar(20); |
| 363 | | BEGIN |
| 364 | | SELECT status_zapisnik INTO v_status_zapisnik |
| 365 | | FROM Zapisnik WHERE id_na_zapisnik = p_id_zapisnik; |
| 366 | | |
| 367 | | IF v_status_zapisnik IS NULL THEN |
| 368 | | RAISE EXCEPTION 'Zapisnikot so id % ne postoi!', p_id_zapisnik; |
| 369 | | END IF; |
| 370 | | IF v_status_zapisnik = 'Zatvoren' THEN |
| 371 | | RAISE EXCEPTION 'Zapisnikot % e vekje zatvoren!', p_id_zapisnik; |
| 372 | | END IF; |
| 373 | | |
| 374 | | SELECT status INTO v_status_uplata |
| 375 | | FROM Uplata WHERE id_zapisnik = p_id_zapisnik; |
| 376 | | |
| 377 | | IF v_status_uplata IS NULL THEN |
| 378 | | RAISE EXCEPTION 'Ne postoi uplata za zapisnik %!', p_id_zapisnik; |
| 379 | | END IF; |
| 380 | | IF v_status_uplata <> 'Plateno' THEN |
| 381 | | RAISE EXCEPTION 'Zapisnikot % ne moze da se zatvori bidejki uplatata e so status "%" (mora da bide Plateno)!', |
| 382 | | p_id_zapisnik, v_status_uplata; |
| 383 | | END IF; |
| 384 | | |
| 385 | | UPDATE Zapisnik |
| 386 | | SET status_zapisnik = 'Zatvoren' |
| 387 | | WHERE id_na_zapisnik = p_id_zapisnik; |
| 388 | | |
| 389 | | RAISE NOTICE 'Zapisnik % e zatvoren po izvrshena uplata.', p_id_zapisnik; |
| 390 | | END; |
| 391 | | $$; |
| | 392 | LANGUAGE plpgsql |
| | 393 | AS $$ |
| | 394 | DECLARE |
| | 395 | v_status_uplata varchar(30); |
| | 396 | v_status_zapisnik varchar(20); |
| | 397 | BEGIN |
| | 398 | |
| | 399 | SELECT status_zapisnik INTO v_status_zapisnik |
| | 400 | FROM Zapisnik |
| | 401 | WHERE id_na_zapisnik = p_id_zapisnik; |
| | 402 | |
| | 403 | IF v_status_zapisnik IS NULL THEN |
| | 404 | RAISE EXCEPTION 'Zapisnikot so id % ne postoi!', p_id_zapisnik; |
| | 405 | END IF; |
| | 406 | |
| | 407 | IF v_status_zapisnik = 'Zatvoren' THEN |
| | 408 | RAISE EXCEPTION 'Zapisnikot % e vekje zatvoren!', p_id_zapisnik; |
| | 409 | END IF; |
| | 410 | |
| | 411 | |
| | 412 | SELECT status INTO v_status_uplata |
| | 413 | FROM Uplata |
| | 414 | WHERE id_zapisnik = p_id_zapisnik; |
| | 415 | |
| | 416 | IF v_status_uplata IS NULL THEN |
| | 417 | RAISE EXCEPTION 'Ne postoi uplata za zapisnik %!', p_id_zapisnik; |
| | 418 | END IF; |
| | 419 | |
| | 420 | IF v_status_uplata <> 'Plateno' THEN |
| | 421 | RAISE EXCEPTION 'Zapisnikot % ne moze da se zatvori bidejki uplatata e so status "%" (mora da bide Plateno)!', |
| | 422 | p_id_zapisnik, v_status_uplata; |
| | 423 | END IF; |
| | 424 | |
| | 425 | |
| | 426 | UPDATE Zapisnik |
| | 427 | SET status_zapisnik = 'Zatvoren' |
| | 428 | WHERE id_na_zapisnik = p_id_zapisnik; |
| | 429 | |
| | 430 | RAISE NOTICE 'Zapisnik % e zatvoren po izvrshena uplata.', p_id_zapisnik; |
| | 431 | END; |
| | 432 | $$; |
| | 433 | |