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"]
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)
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)
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)
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)