from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file
import bottle
import controller
from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna
import datetime as dt

@bottle.get('/')
def root():
    redirect('/domov')

@bottle.get('/domov')
def index():
    parcele = dobi_parcele_za_prikaz(dt.date.today())
    return template("domov", parcele=parcele, hide_header_back=True)

@bottle.get("/parcela/<id_parcele>")
def parcela(id_parcele):
    'Preverimo stanje parcele'
    rez, gostje = dobi_info_parcele(id_parcele, dt.date.today())
    if rez is not None:
        stanje = "Parcela je trenutno zasedena"
    else:
        stanje = "Parcela je trenutno na voljo"
    return template('parcela', id_parcela=id_parcele, rezervacija=rez, stanje=stanje, gostje=gostje)


@bottle.get("/naredi-rezervacijo/<id_parcele>")
def nova_rezervacija(id_parcele=None):
    print(id_parcele)
    today = dt.date.today()
    tomorrow = today + dt.timedelta(days=1)
    return template('nova_rezervacija', id_parcele=id_parcele, today=today, tomorrow=tomorrow)

@bottle.post("/naredi-rezervacijo")
def naredi_novo_rezervacijo():
    " V modelu naredi novo rezervacijo in ji doda prvega gosta"

    # Preberemo lastnosti iz forme
    ime = request.forms.ime#get("")
    priimek = request.forms.priimek#get("")
    emso = request.forms.emso#get("")
    drzava = request.forms.drzava#get("")
    id_parcele = request.forms.id_parcele#get("")
    od = request.forms.zacetek#get("")
    do = request.forms.konec#get("")

    print(ime, priimek)

    try:
        datum_od = dt.datetime.fromisoformat(od).date()
        datum_do = dt.datetime.fromisoformat(do).date()
    except Exception as e:
        print(e)
        print("Napaka pri pretvorbi datumov")
        return redirect("/naredi-rezervacijo")
    
    rezervacija = naredi_rezervacijo(id_parcele)
    dodaj_gosta_na_rezervacijo(rezervacija.id_rezervacije, {
        "EMSO":emso,
        "ime":ime,
        "priimek":priimek,
        "drzava":drzava,
    }, datum_od, datum_do)
    return redirect(f"/parcela/{id_parcele}")

@bottle.get("/dodaj-gosta/<id_rezervacije>")
def get_dodaj_gosta_na_rezervacijo(id_rezervacije):
    today = dt.date.today()
    tomorrow = today + dt.timedelta(days=1)
    
    rezervacija = dobi_rezervacijo_po_id(id_rezervacije)
    if not rezervacija:
        return template("error", sporocilo="Rezervacija ne obstaja!", naslov="Napaka")
    
    return template("dodajanje_gosta", id_rezervacije=id_rezervacije, today=today, tomorrow=tomorrow)

@bottle.post("/dodaj-gosta-na-rezervacijo")
def post_dodaj_gosta_na_rezervacijo():
    " V modelu rezervaciji doda gosta"

    # Preberemo lastnosti iz forme

    ime = request.forms.ime
    priimek = request.forms.priimek
    emso = request.forms.emso#get("")
    drzava = request.forms.drzava#get("")
    id_rezervacije = request.forms.rez#get("")
    od = request.forms.zacetek#get("")
    do = request.forms.konec#get("")
    try:
        datum_od = dt.datetime.fromisoformat(od).date()
        datum_do = dt.datetime.fromisoformat(do).date()
    except Exception as e:
        print(e)
        print("Napaka pri pretvorbi datumov")
        return redirect("/dodaj-gosta")


    rezervacija = dobi_rezervacijo_po_id(id_rezervacije)
    if not rezervacija:
        return template("error", sporocilo="Rezervacija ne obstaja!", naslov="Napaka")
    dodaj_gosta_na_rezervacijo(rezervacija.id_rezervacije, {
        "EMSO":emso,
        "ime":ime,
        "priimek":priimek,
        "drzava":drzava,
    },datum_od,datum_do)
    print(id_rezervacije)
    return redirect(f"/parcela/{rezervacija.id_parcele}")

@bottle.get("/predracun/<id_rezervacije>")
def predracun(id_rezervacije):
    rezervacija = dobi_rezervacijo_po_id(id_rezervacije)
    if not rezervacija:
        return template("error", sporocilo="Rezervacija ne obstaja!", naslov="Napaka")
    today = dt.date.today()
    gostje = rezervacija.gostje
    sestevek, postavke = dobi_postavke_racuna(rezervacija)
    slovar_cen = {}
    slovar_kolicin = {}
    for gost in gostje:
        slovar_kolicin[gost] = len(gost.nocitve)
        slovar_cen[gost] = format(gost.cena_nocitve() * slovar_kolicin.get(gost), '.2f')
    return template("racun", id_rezervacije=id_rezervacije, sestevek=format(sestevek, '.2f'), gostje=gostje, today=today.strftime("%d/%m/%Y"), slovar_cen=slovar_cen, slovar_kolicin=slovar_kolicin)

@bottle.get("/zakljuci/<id_rezervacije>")
def racun(id_rezervacije):
    rezervacija = dobi_rezervacijo_po_id(id_rezervacije)
    if not rezervacija:
        return template("error", sporocilo="Rezervacija ne obstaja!", naslov="Napaka")
    today = dt.date.today()
    gostje = rezervacija.gostje
    sestevek, postavke = zakljuci_na_datum_in_placaj(rezervacija, dt.date.today())
    slovar_cen = {}
    slovar_kolicin = {}
    for gost in gostje:
        slovar_kolicin[gost] = len(gost.nocitve)
        slovar_cen[gost] = format(gost.cena_nocitve() * slovar_kolicin.get(gost), '.2f')
    return template("racun", id_rezervacije=id_rezervacije, sestevek=format(sestevek, '.2f'), gostje=gostje, today=today.strftime("%d/%m/%Y"), slovar_cen=slovar_cen, slovar_kolicin=slovar_kolicin)

@bottle.error(404)
def napaka404(a):
    return template("error", sporocilo="Stran ne obstaja!", naslov="404")

@bottle.error(500)
def napaka500(a):
    return template("error", sporocilo="Napaka streznika!", naslov="500")

bottle.run(reloader=True, debug=True)

[((386, 401), 'bottle.get', 'bottle.get', (['"""/"""'], {}), "('/')\n", (396, 401), False, 'import bottle\n'), ((439, 459), 'bottle.get', 'bottle.get', (['"""/domov"""'], {}), "('/domov')\n", (449, 459), False, 'import bottle\n'), ((598, 633), 'bottle.get', 'bottle.get', (['"""/parcela/<id_parcele>"""'], {}), "('/parcela/<id_parcele>')\n", (608, 633), False, 'import bottle\n'), ((989, 1035), 'bottle.get', 'bottle.get', (['"""/naredi-rezervacijo/<id_parcele>"""'], {}), "('/naredi-rezervacijo/<id_parcele>')\n", (999, 1035), False, 'import bottle\n'), ((1266, 1300), 'bottle.post', 'bottle.post', (['"""/naredi-rezervacijo"""'], {}), "('/naredi-rezervacijo')\n", (1277, 1300), False, 'import bottle\n'), ((2284, 2327), 'bottle.get', 'bottle.get', (['"""/dodaj-gosta/<id_rezervacije>"""'], {}), "('/dodaj-gosta/<id_rezervacije>')\n", (2294, 2327), False, 'import bottle\n'), ((2734, 2776), 'bottle.post', 'bottle.post', (['"""/dodaj-gosta-na-rezervacijo"""'], {}), "('/dodaj-gosta-na-rezervacijo')\n", (2745, 2776), False, 'import bottle\n'), ((3844, 3885), 'bottle.get', 'bottle.get', (['"""/predracun/<id_rezervacije>"""'], {}), "('/predracun/<id_rezervacije>')\n", (3854, 3885), False, 'import bottle\n'), ((4609, 4649), 'bottle.get', 'bottle.get', (['"""/zakljuci/<id_rezervacije>"""'], {}), "('/zakljuci/<id_rezervacije>')\n", (4619, 4649), False, 'import bottle\n'), ((5393, 5410), 'bottle.error', 'bottle.error', (['(404)'], {}), '(404)\n', (5405, 5410), False, 'import bottle\n'), ((5505, 5522), 'bottle.error', 'bottle.error', (['(500)'], {}), '(500)\n', (5517, 5522), False, 'import bottle\n'), ((5616, 5653), 'bottle.run', 'bottle.run', ([], {'reloader': '(True)', 'debug': '(True)'}), '(reloader=True, debug=True)\n', (5626, 5653), False, 'import bottle\n'), ((418, 436), 'bottle.redirect', 'redirect', (['"""/domov"""'], {}), "('/domov')\n", (426, 436), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((538, 595), 'bottle.template', 'template', (['"""domov"""'], {'parcele': 'parcele', 'hide_header_back': '(True)'}), "('domov', parcele=parcele, hide_header_back=True)\n", (546, 595), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((896, 989), 'bottle.template', 'template', (['"""parcela"""'], {'id_parcela': 'id_parcele', 'rezervacija': 'rez', 'stanje': 'stanje', 'gostje': 'gostje'}), "('parcela', id_parcela=id_parcele, rezervacija=rez, stanje=stanje,\n    gostje=gostje)\n", (904, 989), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((1109, 1124), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (1122, 1124), True, 'import datetime as dt\n'), ((1180, 1268), 'bottle.template', 'template', (['"""nova_rezervacija"""'], {'id_parcele': 'id_parcele', 'today': 'today', 'tomorrow': 'tomorrow'}), "('nova_rezervacija', id_parcele=id_parcele, today=today, tomorrow=\n    tomorrow)\n", (1188, 1268), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((2025, 2055), 'controller.naredi_rezervacijo', 'naredi_rezervacijo', (['id_parcele'], {}), '(id_parcele)\n', (2043, 2055), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((2060, 2204), 'controller.dodaj_gosta_na_rezervacijo', 'dodaj_gosta_na_rezervacijo', (['rezervacija.id_rezervacije', "{'EMSO': emso, 'ime': ime, 'priimek': priimek, 'drzava': drzava}", 'datum_od', 'datum_do'], {}), "(rezervacija.id_rezervacije, {'EMSO': emso, 'ime':\n    ime, 'priimek': priimek, 'drzava': drzava}, datum_od, datum_do)\n", (2086, 2204), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((2247, 2281), 'bottle.redirect', 'redirect', (['f"""/parcela/{id_parcele}"""'], {}), "(f'/parcela/{id_parcele}')\n", (2255, 2281), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((2392, 2407), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (2405, 2407), True, 'import datetime as dt\n'), ((2475, 2513), 'controller.dobi_rezervacijo_po_id', 'dobi_rezervacijo_po_id', (['id_rezervacije'], {}), '(id_rezervacije)\n', (2497, 2513), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((2641, 2735), 'bottle.template', 'template', (['"""dodajanje_gosta"""'], {'id_rezervacije': 'id_rezervacije', 'today': 'today', 'tomorrow': 'tomorrow'}), "('dodajanje_gosta', id_rezervacije=id_rezervacije, today=today,\n    tomorrow=tomorrow)\n", (2649, 2735), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((3430, 3468), 'controller.dobi_rezervacijo_po_id', 'dobi_rezervacijo_po_id', (['id_rezervacije'], {}), '(id_rezervacije)\n', (3452, 3468), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((3584, 3728), 'controller.dodaj_gosta_na_rezervacijo', 'dodaj_gosta_na_rezervacijo', (['rezervacija.id_rezervacije', "{'EMSO': emso, 'ime': ime, 'priimek': priimek, 'drzava': drzava}", 'datum_od', 'datum_do'], {}), "(rezervacija.id_rezervacije, {'EMSO': emso, 'ime':\n    ime, 'priimek': priimek, 'drzava': drzava}, datum_od, datum_do)\n", (3610, 3728), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((3795, 3841), 'bottle.redirect', 'redirect', (['f"""/parcela/{rezervacija.id_parcele}"""'], {}), "(f'/parcela/{rezervacija.id_parcele}')\n", (3803, 3841), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((3935, 3973), 'controller.dobi_rezervacijo_po_id', 'dobi_rezervacijo_po_id', (['id_rezervacije'], {}), '(id_rezervacije)\n', (3957, 3973), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((4097, 4112), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (4110, 4112), True, 'import datetime as dt\n'), ((4170, 4203), 'controller.dobi_postavke_racuna', 'dobi_postavke_racuna', (['rezervacija'], {}), '(rezervacija)\n', (4190, 4203), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((4695, 4733), 'controller.dobi_rezervacijo_po_id', 'dobi_rezervacijo_po_id', (['id_rezervacije'], {}), '(id_rezervacije)\n', (4717, 4733), False, 'from controller import dobi_parcele_za_prikaz, dobi_info_parcele, dodaj_gosta_na_rezervacijo, naredi_rezervacijo, dobi_rezervacijo_po_id, zakljuci_na_datum_in_placaj, dobi_postavke_racuna\n'), ((4857, 4872), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (4870, 4872), True, 'import datetime as dt\n'), ((5440, 5502), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Stran ne obstaja!"""', 'naslov': '"""404"""'}), "('error', sporocilo='Stran ne obstaja!', naslov='404')\n", (5448, 5502), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((5552, 5614), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Napaka streznika!"""', 'naslov': '"""500"""'}), "('error', sporocilo='Napaka streznika!', naslov='500')\n", (5560, 5614), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((510, 525), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (523, 525), True, 'import datetime as dt\n'), ((738, 753), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (751, 753), True, 'import datetime as dt\n'), ((1148, 1168), 'datetime.timedelta', 'dt.timedelta', ([], {'days': '(1)'}), '(days=1)\n', (1160, 1168), True, 'import datetime as dt\n'), ((2431, 2451), 'datetime.timedelta', 'dt.timedelta', ([], {'days': '(1)'}), '(days=1)\n', (2443, 2451), True, 'import datetime as dt\n'), ((2553, 2624), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Rezervacija ne obstaja!"""', 'naslov': '"""Napaka"""'}), "('error', sporocilo='Rezervacija ne obstaja!', naslov='Napaka')\n", (2561, 2624), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((3508, 3579), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Rezervacija ne obstaja!"""', 'naslov': '"""Napaka"""'}), "('error', sporocilo='Rezervacija ne obstaja!', naslov='Napaka')\n", (3516, 3579), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((4013, 4084), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Rezervacija ne obstaja!"""', 'naslov': '"""Napaka"""'}), "('error', sporocilo='Rezervacija ne obstaja!', naslov='Napaka')\n", (4021, 4084), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((4773, 4844), 'bottle.template', 'template', (['"""error"""'], {'sporocilo': '"""Rezervacija ne obstaja!"""', 'naslov': '"""Napaka"""'}), "('error', sporocilo='Rezervacija ne obstaja!', naslov='Napaka')\n", (4781, 4844), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((4971, 4986), 'datetime.date.today', 'dt.date.today', ([], {}), '()\n', (4984, 4986), True, 'import datetime as dt\n'), ((1970, 2001), 'bottle.redirect', 'redirect', (['"""/naredi-rezervacijo"""'], {}), "('/naredi-rezervacijo')\n", (1978, 2001), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((3385, 3409), 'bottle.redirect', 'redirect', (['"""/dodaj-gosta"""'], {}), "('/dodaj-gosta')\n", (3393, 3409), False, 'from bottle import TEMPLATE_PATH, route, run, template, redirect, get, post, request, response, auth_basic, Bottle, abort, error, static_file\n'), ((1772, 1801), 'datetime.datetime.fromisoformat', 'dt.datetime.fromisoformat', (['od'], {}), '(od)\n', (1797, 1801), True, 'import datetime as dt\n'), ((1828, 1857), 'datetime.datetime.fromisoformat', 'dt.datetime.fromisoformat', (['do'], {}), '(do)\n', (1853, 1857), True, 'import datetime as dt\n'), ((3187, 3216), 'datetime.datetime.fromisoformat', 'dt.datetime.fromisoformat', (['od'], {}), '(od)\n', (3212, 3216), True, 'import datetime as dt\n'), ((3243, 3272), 'datetime.datetime.fromisoformat', 'dt.datetime.fromisoformat', (['do'], {}), '(do)\n', (3268, 3272), True, 'import datetime as dt\n')]