示例#1
0
 def __init__(self, **kwargs):
     self.__dict__.update(kwargs)
     if 'kunde_id' in self.__dict__.keys():
         try:
             self.kunde = rest_get_id("kunden", self.kunde_id)["name"]
         except KeyError:
             self.kunde = 'None'
     if 'von' in self.__dict__.keys():
         self.von = parser.parse(self.von)
     if 'bis' in self.__dict__.keys():
         self.bis = parser.parse(self.bis)
     if 'car_id' in self.__dict__.keys():
         car = rest_get_id("cars", self.car_id)
         car = Car(**car)
         self.car = car.__repr__()
     if hasattr(self, 'station_return_id'):
         self.station_return = rest_get_id("stations", self.station_return_id)["name"]
     if hasattr(self, 'station_abhol_id'):
         self.station_abhol = rest_get_id("stations", self.station_abhol_id)["name"]
示例#2
0
def kunden_delete(kunde_id):
    """
    Löschen eines Kunden - aber nur wenn er keine offenen Leihen gibt.
    """
    kunde = Kunde(**rest_get_id("kunden", kunde_id))
    name = kunde.name
    leihen_not_beendet = len([leihe["returned"] for leihe in kunde.leihen if not leihe["returned"]])
    if leihen_not_beendet>0:
        flash(u'%s hat noch offene Leihen und kann nicht gelöscht werden.' % name, category='warning')
        return redirect(url_for('kunden_edit', kunde_id=kunde_id))
    try:
        rest_delete_id("kunden", kunde_id)
    except HTTPError, e:
        return errorpage(e)
示例#3
0
def leihen_edit(leihe_id=None):
    """
    Create und update for Leihen.
    Wertet auf die URL-Query Parameter kunde_id und station_id aus, die die entsprechenden Felder voreinstellen.
    """
    leihe = None
    try:
        if leihe_id:
            leihe = Leihe(**rest_get_id("leihen", leihe_id))
            form = LeiheForm(request.form, leihe)
        else:
            form = LeiheForm()
        form.kunde_id.choices = [(kunde["id"], kunde["name"]) for kunde in rest_get_all("kunden")]
        form.car_id.choices = [(car["id"], car["platenumber"]) for car in rest_get_all("cars")]
        form.station_abhol_id.choices = [(station["id"], station["name"]) for station in rest_get_all("stations")]
        form.station_return_id.choices = [(station["id"], station["name"]) for station in rest_get_all("stations")]
        if u'kunde_id' in request.args:
            form.kunde_id.data = int(request.args[u'kunde_id'])
        if u'station_id' in request.args:
            form.station_abhol_id.data = int(request.args[u'station_id'])
            form.station_return_id.data = int(request.args[u'station_id'])
        if form.validate_on_submit():
            kunde = Kunde(**rest_get_id("kunden", form.data["kunde_id"]))
            data = form.data
            data["von"] = form.data["von"].isoformat()
            data["bis"] = form.data["bis"].isoformat()
            if not leihe_id:
                del(data["id"])
                rest_post("leihen", data)
                flash(u"Leihe für %s wurde neu angelegt" % kunde.name, category="success")
            else:
                rest_put("leihen", leihe_id, data)
                flash(u"Leihe für %s wurde neu geändert" % kunde.name, category="success")
            return redirect(url_for('leihen_list'))
    except HTTPError, e:
        return errorpage(e)
示例#4
0
def kunden_edit(kunde_id=None):
    """
    Legt entweder einen neuen Kunden an oder editiert einen bestehenden. Wie immer gibt es das Problem, das create und
    update sehr ähnlich sind - hier habe ich beides auf einmale implementiert.

    Mgl kann mit Classbased Views strukturierter vorgegangen werden
    """
    leihen = []
    kunde = None

    if kunde_id:
        try:
            kunde_dict = rest_get_id("kunden", kunde_id)
            kunde = Kunde(**kunde_dict)
            leihen = rest_get_all("leihen")
            leihen = [Leihe(**d) for d in leihen if d["kunde_id"] == kunde_id]
            form = KundenForm(request.form, kunde)
        except HTTPError, e:
            return errorpage(e)
示例#5
0
def leihe_neu1(kunde_id):
    """
    Klickt man bei der Kunden-Detail View auf "Neue Leihe" werden in dieser View anhand der Adresse des Kunden
    die Distanzen zu unseren Verleihstationen berechnet und als Tabelle angezeigt.
    """
    try:
        kunde = Kunde(**rest_get_id("kunden", kunde_id))
        stationen = [Station(**d) for d in rest_get_all("stations")]
        cachehits = 0
        for station in stationen:
            try:
                station.distance, cachehit = get_distance(kunde.adresse, station.adresse)
            except DistanceServiceError:
                station.distance = {'distance' : { 'text' : 'Unavailable', 'value' : -1}, 'duration' : { 'text' : "bis ans Ende der Zeit", 'value' : -1}}
                cachehit = False
            if cachehit:
                cachehits += 1
        stationen.sort(key=lambda x: x.distance['duration']['value'])
        flash("Cachehits bei der Distanzberechnung: %d" % cachehits)
        return render_template("neue_leihe_kunde1.html", kunde=kunde, stationen=stationen)
    except HTTPError, e:
        return errorpage(e)