Skip to content

Commit f6ebecd

Browse files
committed
Spremembe s predzadnjih predavanj
1 parent 5df63cb commit f6ebecd

16 files changed

+314
-16
lines changed

predavanja/primeri/banka/banka.py

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,15 @@ def komitenti_racuni(uporabnik, emso):
372372
return dict(oseba=oseba, racuni=oseba.racuni())
373373

374374

375+
@bottle.get('/komitenti/transakcije/<emso>/')
376+
@bottle.view('komitenti.transakcije.html')
377+
@prijavljen
378+
def komitenti_transakcije(uporabnik, emso):
379+
preveri_lastnika(uporabnik, emso)
380+
oseba = Oseba.z_id(emso)
381+
return dict(oseba=oseba)
382+
383+
375384
@bottle.get('/racuni/')
376385
@bottle.view('racuni.html')
377386
@admin
@@ -402,10 +411,24 @@ def racuni_izbrisi_post(uporabnik, stevilka):
402411
@prijavljen
403412
def racuni_dodaj_post(uporabnik, emso):
404413
preveri_lastnika(uporabnik, emso)
405-
# TODO
414+
try:
415+
racun = Racun(lastnik=emso)
416+
racun.vstavi()
417+
nastavi_sporocilo(f'Uspešno dodan račun s številko {racun.stevilka}.')
418+
except (ValueError, TypeError):
419+
nastavi_sporocilo(f'Dodajanje računa za uporabnika z EMŠOm {emso} ni uspelo!')
406420
bottle.redirect(bottle.url('komitenti_racuni', emso=emso))
407421

408422

423+
@bottle.get('/racuni/transakcije/<stevilka:int>/')
424+
@bottle.view('racuni.transakcije.html')
425+
@prijavljen
426+
def racuni_transakcije(uporabnik, stevilka):
427+
racun = Racun.z_id(stevilka)
428+
preveri_lastnika(uporabnik, racun['lastnik'])
429+
return dict(racun=racun)
430+
431+
409432
@bottle.get('/transakcije/')
410433
@bottle.view('transakcije.html')
411434
@admin
@@ -424,6 +447,60 @@ def transakcije_izbrisi_post(uporabnik, id):
424447
bottle.redirect(bottle.url('transakcije'))
425448

426449

450+
@bottle.get('/transakcije/dodaj/<stevilka:int>/')
451+
@bottle.view('transakcije.dodaj.html')
452+
@prijavljen
453+
def transakcije_dodaj(uporabnik, stevilka):
454+
racun = Racun.z_id(stevilka)
455+
preveri_lastnika(uporabnik, racun['lastnik'])
456+
return dict(racun=racun)
457+
458+
459+
@bottle.post('/transakcije/dodaj/<stevilka:int>/')
460+
@prijavljen
461+
def transakcije_dodaj_post(uporabnik, stevilka):
462+
racun = Racun.z_id(stevilka)
463+
preveri_lastnika(uporabnik, racun['lastnik'])
464+
znesek = bottle.request.forms.getunicode('znesek')
465+
cas = bottle.request.forms.getunicode('cas')
466+
opis = bottle.request.forms.getunicode('opis')
467+
transakcija = Transakcija(racun=racun, znesek=znesek, cas=cas, opis=opis)
468+
try:
469+
transakcija.vstavi()
470+
nastavi_sporocilo(f'Uspešno dodana transakcija z ID-jem {transakcija.id}.')
471+
bottle.redirect(bottle.url('racuni_transakcije', stevilka=stevilka))
472+
except (ValueError, TypeError):
473+
nastavi_sporocilo(f'Dodajanje transakcije na računu s številko {stevilka} ni uspelo!')
474+
nastavi_obrazec(f'racuni_dodaj_{stevilka}', transakcija)
475+
bottle.redirect(bottle.url('racuni_transakcije', stevilka=stevilka))
476+
477+
478+
@bottle.get('/transakcije/uredi/<id:int>/')
479+
@bottle.view('transakcije.uredi.html')
480+
@admin
481+
def transakcije_uredi(uporabnik, id):
482+
transakcija = Transakcija.z_id(id)
483+
transakcija.racun = Racun.z_id(transakcija['racun'])
484+
return dict(transakcija=transakcija)
485+
486+
487+
@bottle.post('/transakcije/uredi/<id:int>/')
488+
@admin
489+
def transakcije_uredi_post(uporabnik, id):
490+
transakcija = Transakcija.z_id(id)
491+
transakcija.znesek = bottle.request.forms.getunicode('znesek')
492+
transakcija.cas = bottle.request.forms.getunicode('cas')
493+
transakcija.opis = bottle.request.forms.getunicode('opis')
494+
try:
495+
transakcija.posodobi()
496+
nastavi_sporocilo(f'Uspešno posodobljena transakcija z ID-jem {id}.')
497+
bottle.redirect(bottle.url('transakcije'))
498+
except (ValueError, TypeError):
499+
nastavi_sporocilo(f'Urejanje transakcije z ID-jem {id} ni uspelo!')
500+
nastavi_obrazec(f'transakcije_uredi_{id}', transakcija)
501+
bottle.redirect(bottle.url('transakcije_uredi', id=id))
502+
503+
427504
@bottle.get('/prijava/')
428505
@bottle.view('prijava.html')
429506
@odjavljen

predavanja/primeri/banka/model.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,18 @@ def racuni(self):
5757
yield from (Racun(stevilka, self, stanje)
5858
for stevilka, stanje in cur)
5959

60+
def transakcije(self):
61+
"""
62+
Vrni transakcije osebe.
63+
"""
64+
with conn.cursor() as cur:
65+
cur.execute("""
66+
SELECT id, racun, znesek, cas, opis
67+
FROM racun JOIN transakcija ON stevilka = racun
68+
WHERE lastnik = %s
69+
""", [self.emso])
70+
yield from (Transakcija(*vrstica) for vrstica in cur)
71+
6072
@classmethod
6173
def _stolpci(cls):
6274
"""
@@ -155,6 +167,19 @@ class Racun(Entiteta):
155167
lastnik: Oseba = stolpec(obvezen=True)
156168
stanje: int = field(default=0)
157169

170+
def transakcije(self):
171+
"""
172+
Vrni transakcije osebe.
173+
"""
174+
with conn.cursor() as cur:
175+
cur.execute("""
176+
SELECT id, znesek, cas, opis
177+
FROM transakcija
178+
WHERE racun = %s
179+
""", [self.stevilka])
180+
yield from (Transakcija(id, self, znesek, cas, opis)
181+
for id, znesek, cas, opis in cur)
182+
158183
@classmethod
159184
def _stolpci(cls):
160185
"""

predavanja/primeri/banka/orm.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,12 +252,14 @@ def _s_kljucem(cls, kljuc, id):
252252
with conn.cursor() as cur:
253253
cur.execute(sql.SQL("""
254254
SELECT {stolpci} FROM {tabela}
255-
WHERE {kljuc} = {id};
255+
WHERE {kljuc} = {id}
256+
{zdruzevanje};
256257
""").format(
257258
stolpci=VEJICA.join(cls._stolpci()),
258259
tabela=cls._tabela(),
259260
kljuc=sql.Identifier(kljuc),
260-
id=sql.Literal(id)
261+
id=sql.Literal(id),
262+
zdruzevanje=cls._zdruzevanje()
261263
))
262264
vrstica = cur.fetchone()
263265
if not vrstica:

predavanja/primeri/banka/views/komitenti.dodaj.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ <h1 class="title">
1515
<a class="button is-link is-light" href="{{url('komitenti')}}">Prekliči</a>
1616
</div>
1717
</div>
18-
</form>
18+
</form>

predavanja/primeri/banka/views/komitenti.racuni.html

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ <h1 class="title">
2929
% for racun in racuni:
3030
<tr>
3131
% skupaj += racun.stanje
32-
<td>{{racun.stevilka}}</td>
32+
<td>
33+
<a href="{{url('racuni_transakcije', stevilka=racun.stevilka)}}">
34+
{{racun.stevilka}}
35+
</a>
36+
</td>
3337
<td>{{racun.stanje}}</td>
3438
<td>
3539
<form action="{{url('racuni_izbrisi_post', stevilka=racun.stevilka)}}" method="POST"
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
% rebase('osnova.html', stran=f'komitenti_transakcije-{oseba.emso}', naslov='Transakcije komitenta')
2+
<div class="container">
3+
<h1 class="title">
4+
Transakcije komitenta {{oseba.ime}} {{oseba.priimek}} ({{oseba.emso}})
5+
</h1>
6+
7+
<table class="table">
8+
<tr>
9+
<th>ID</th>
10+
<th>Račun</th>
11+
<th>Znesek</th>
12+
<th>Čas</th>
13+
<th>Opis</th>
14+
% if uporabnik.admin:
15+
<th></th>
16+
%end
17+
</tr>
18+
% for transakcija in oseba.transakcije():
19+
<tr>
20+
<td>{{transakcija.id}}</td>
21+
<td>
22+
<a href="{{url('racuni_transakcije', stevilka=transakcija.racun)}}">
23+
{{transakcija.racun}}
24+
</a>
25+
</td>
26+
<td>{{transakcija.znesek}}</td>
27+
<td>{{transakcija.cas}}</td>
28+
<td>{{transakcija.opis}}</td>
29+
% if uporabnik.admin:
30+
<td>
31+
<div class="buttons">
32+
<a class="button is-primary" href="{{url('transakcije_uredi', id=transakcija.id)}}">
33+
<span class="icon is-small">
34+
<i class="fas fa-pen"></i>
35+
</span>
36+
</a>
37+
<form action="{{url('transakcije_izbrisi_post', id=transakcija.id)}}" method="POST"
38+
onsubmit="return confirm('Ali res želiš izbrisati transakcijo z ID-jem {{transakcija.id}}?')">
39+
<button class="button is-danger">
40+
<span class="icon is-small">
41+
<i class="fas fa-trash"></i>
42+
</span>
43+
</button>
44+
</form>
45+
</div>
46+
</td>
47+
% end
48+
</tr>
49+
% end
50+
</table>
51+
</div>

predavanja/primeri/banka/views/komitenti.uredi.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ <h1 class="title">
1515
<a class="button is-link is-light" href="{{url('komitenti')}}">Prekliči</a>
1616
</div>
1717
</div>
18-
</form>
18+
</form>

predavanja/primeri/banka/views/kraji.dodaj.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ <h1 class="title">
1515
<a class="button is-link is-light" href="{{url('kraji')}}">Prekliči</a>
1616
</div>
1717
</div>
18-
</form>
18+
</form>

predavanja/primeri/banka/views/kraji.uredi.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ <h1 class="title">
1616
<a class="button is-link is-light" href="{{url('kraji')}}">Prekliči</a>
1717
</div>
1818
</div>
19-
</form>
19+
</form>

predavanja/primeri/banka/views/osnova.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@
7070
</a>
7171

7272
<div class="navbar-dropdown">
73-
<a class="navbar-item {{'is-selected' if stran == f'komitenti_transakcije-{uporabnik.emso}' else ''}}">
73+
<a class="navbar-item {{'is-selected' if stran == f'komitenti_transakcije-{uporabnik.emso}' else ''}}" href="{{url('komitenti_transakcije', emso=uporabnik.emso)}}">
7474
Moje transakcije
7575
</a>
7676
% if uporabnik.admin:

0 commit comments

Comments
 (0)