def add_data(): if request.method == 'GET': #utente usr = User() usr.nome = "Luca" usr.cognome = "Puggioninu" usr.uuid = str(uuid.uuid4()) usr.password = hashlib.sha1("ciaone").hexdigest() usr.email = "*****@*****.**" usr.targa = "GF6543" usr.tariffa = "Tariffa 1" usr.is_valid = True usr.put() #admin usr = User() usr.nome = "Claudio" usr.cognome = "Marche" usr.uuid = str(uuid.uuid4()) usr.password = hashlib.sha1("ciaone").hexdigest() usr.email = "*****@*****.**" usr.tariffa = "Tariffa 1" usr.targa = "GF6543" usr.is_valid = True usr.has_superuser = True usr.put() #tariffa tar = Tariffa() tar.tariffa = 'Tariffa 1' tar.description = "La piu' bella gazz" tar.prezzo = 5.00 tar.order = 1 tar.visibilita = True tar.put() tar = Tariffa() tar.tariffa = 'Tariffa 2' tar.description = "La meno bella gazz" tar.order = 2 tar.prezzo = 5.00 tar.visibilita = False tar.put() #parcheggi state = ['Libero', 'Prenotato', 'Occupato', 'Fuori Servizio'] for piano in ['A', 'B', 'C', 'D']: for i in range(1, 41): parking = Parking() parking.piano = piano parking.number = i parking.stato = state[randint(0, 3)] parking.put() flash("Dati Aggiunti") return redirect(url_for('auth.login'))
def delete_user_from_uuid(uuid): try: # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get()) User().query(User.uuid == uuid).fetch(1)[0].key.delete() return True except: return False
def delete_user(name, surname): try: # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get()) User().query(User.nome == name and User.cognome == surname).fetch(1)[0].key.delete() return 'Utente rimosso!' except: return "Errore nell'eliminazione dell'utente!"
def insert_user(form): try: check_user = User.query(User.email == form.email.data).fetch(1) if check_user > 0: u = User() u.uuid = str(uuid.uuid4()) u.nome = form.nome.data u.cognome = form.cognome.data u.password = hashlib.sha1(form.password.data).hexdigest() u.email = form.email.data # insert tariffa tariffe = Tariffa.query(Tariffa.visibilita == True).order( Tariffa.order).fetch() for i, tar in enumerate(tariffe): if (i + 1) == int(form.tariffa.data): u.tariffa = tar.tariffa u.targa = form.targa.data u.put() return True return False except: return False
def profilo(): if request.method == 'GET': form = AddPlate() user = User().query(User.uuid == session['user']['user_id']).fetch(1)[0] try: tar = Tariffa.query(Tariffa.tariffa == user.tariffa).fetch(1)[0] tariffa = tar.tariffa descrizione = tar.description prezzo = tar.prezzo except: tariffa = None descrizione = None prezzo = None targhe = user.targa.split(",") return render_template('user/profilo.html', username=get_username(session), is_admin=session['user']['superuser'], form=form, tariffa=tariffa, descr_tariffa=descrizione, prezzo_tariffa=prezzo, targhe=targhe) # cancella o aggiungi targa nel profilo elif request.method == 'POST': command = request.form['command'].split('_') if command[0] == "delete": targa = command[1] user = User().query(User.email == session['user']['email']).fetch(1)[0] targhe = user.targa.split(',') targhe.remove(targa) user.targa = ','.join(targhe) user.put() elif command[0] == "add": targa = request.form['targa'] user = User().query(User.email == session['user']['email']).fetch(1)[0] # check if exist targhe = user.targa.split(",") if targa == "": flash("Targa non valida!") else: if targa not in targhe: user.targa = user.targa + ',' + targa targhe = user.targa.split(",") user.put() else: flash("Targa precedentemente inserita!") return redirect(url_for('main.profilo'))
def auth_user(name, surname): try: # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get()) usr = User().query(User.nome == name and User.cognome == surname).fetch(1)[0] usr.is_valid = True usr.put() return 'Utente abilitato!' except: return "Errore nell'abilitazione dell'utente!"
def change_targa(uuid, targa): try: # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get()) usr = User().query(User.uuid == uuid).fetch(1)[0] usr.targa = targa usr.put() return True except: return False
def admin_user(name, surname): try: # ndb.delete_multi(Models.Categorie.query(Models.Categorie.categoriaID == id).fetch(keys_only=True).get()) usr = User().query(User.nome == name and User.cognome == surname).fetch(1)[0] usr.has_superuser = True usr.put() return 'Utente admin!' except: return "Errore nell'admin dell'utente!"
def profilo(): if request.method == 'GET': form = AddPlate() user = User().query( User.uuid == session['user']['user_id']).fetch(1)[0] targhe = user.targa.split(",") return render_template('admin/profilo.html', username=get_username(session), form=form, targhe=targhe) # gestione aggiungi o cancella targa elif request.method == 'POST': command = request.form['command'].split('_') if command[0] == "delete": targa = command[1] user = User().query( User.email == session['user']['email']).fetch(1)[0] targhe = user.targa.split(',') targhe.remove(targa) user.targa = ','.join(targhe) user.put() elif command[0] == "add": targa = request.form['targa'] user = User().query( User.email == session['user']['email']).fetch(1)[0] # check if exist targhe = user.targa.split(",") if targa == "": flash("Targa non valida!") else: if targa not in targhe: user.targa = user.targa + ',' + targa targhe = user.targa.split(",") user.put() else: flash("Targa precedentemente inserita!") # attesa per salvataggio in database time.sleep(1) return redirect(url_for('admin.profilo'))
def send_email(object, text): administrators = User().query(User.has_superuser==True).fetch() if len(administrators) > 0: try: for admin in administrators: mail.send_mail(sender="*****@*****.**", to=admin.email, subject=object, body=text) return True except: return False else: return False
def parking(): if request.method == 'GET': piano = request.args.get('level') parks = Parking().query(Parking.piano == piano).fetch() # classi dipendenti dallo stato del parcheggio, utili per la modifica dello stile dei bottoni try: list_for_view = [(str(park.number), "btn btn-danger" if park.stato == 'Occupato' else "btn btn-success" if park.stato == 'Libero' else "btn btn-warning" if park.stato == 'Prenotato' else "btn btn-dark" if park.stato == 'Fuori Servizio' else "btn btn-primary") for park in parks] return render_template('user/prenota.html', level=piano, parking=list_for_view) except: flash('Errore nel caricamento dei parcheggi') redirect(url_for('main.index')) elif request.method == 'POST': # gestione pagina relativa al singolo parcheggio parking = request.form['parking'] piano = parking[0] numero = int(parking[1:]) park = Parking().query(Parking.piano == piano, Parking.number == numero).fetch(1) # se esiste il parcheggio if len(park) > 0: stato = park[0].stato user = User().query(User.email == session['user']['email']).fetch(1)[0] # targhe form = Prenota() targhe = user.targa.split(',') my_choices = [] for i, tar in enumerate(targhe): my_choices.append((str(i + 1), tar)) form.targa.choices = my_choices return render_template('user/parking.html', parking=parking, stato=stato, form=form, livello=piano) else: flash("Errore caricamento parcheggio") return redirect(url_for('main.index'))
def paga(): if request.method == 'GET': uuid = session['user']['user_id'] prenotazione = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1) if len(prenotazione) > 0: if prenotazione[0].start is None: return render_template('user/prenotazione_in_corso.html', username=get_username(session), parking=prenotazione[0].parking) else: data_inizio = prenotazione[0].start.date().strftime("%d-%m-%Y") ora_inizio = prenotazione[0].start.time().strftime("%H:%M:%S") fmt = '%Y-%m-%d %H:%M:%S' dat_now = datetime.now() datetime_str = dat_now.strftime(fmt) prenotazione[0].stop = datetime.strptime(datetime_str, fmt) data_fine = dat_now.strftime('%d-%m-%Y') ora_fine = dat_now.strftime('%H:%M:%S') usr = User().query(User.uuid == uuid).fetch(1)[0] tar = Tariffa().query(Tariffa.tariffa == usr.tariffa).fetch(1)[0] costo_tariffa = tar.prezzo # calcolo del costo di permanenza del veicolo costo = round((prenotazione[0].stop - prenotazione[0].start).total_seconds()/3600 * costo_tariffa, 2) prenotazione[0].costo = costo prenotazione[0].put() return render_template('user/paga.html', data_inizio=data_inizio, ora_inizio=ora_inizio, data_fine=data_fine, ora_fine=ora_fine, costo=costo) else: return render_template('user/no_pagamenti.html', username=get_username(session)) if request.method == 'POST': uuid = session['user']['user_id'] try: # cerca prenotazione book = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1)[0] # crea storico prenotazione hist = Historic() hist.uuid = uuid hist.name = book.name hist.surname = book.surname hist.targa = book.targa hist.start = book.start hist.stop = book.stop hist.parking = book.parking hist.costo = book.costo hist.put() # cancella prenotazione book.key.delete() # pagamento fittizio flash('Pagamento effettuato correttamente') except: flash('Errore nel pagamento. Riprova') return redirect(url_for('main.index'))
def prenota(): if request.method == 'GET': # gestione violazione violazione = request.args.get('violazione') parcheggio = request.args.get('parcheggio') if violazione == "option1": text = "Parcheggio gia' occupato" elif violazione == "option2": text = "Il parcheggio non identifica la mia auto" if violazione == "option3": return redirect(url_for('main.violazione', parcheggio=parcheggio)) else: object = "[VIOLAZIONE COMUNE]" text = "L'utente " + get_username(session) + ", nel parcheggio " + parcheggio + \ ", ha riscontrato una violazione del tipo: " + \ text + "." + "\nRispondi all'email: " + session['user']['email'] if send_email(object, text): flash('Violazione segnalata correttamente') else: flash("Errore nella segnalazione. Ti preghiamo di riprovare piu' tardi") return redirect(url_for('main.index')) # prenotazione elif request.method == 'POST': # check if exist a booking uuid = session['user']['user_id'] prenotazione = Booking.query(Booking.uuid == uuid).order(-Booking.start).fetch(1) if len(prenotazione) > 0: if prenotazione[0].start is None: return render_template('user/prenotazione_in_corso.html', username=get_username(session), parking=prenotazione[0].parking) else: return redirect(url_for('main.paga')) parking = request.form['parcheggio'] piano = parking[0] numero = int(parking[1:]) park = Parking().query(Parking.piano == piano, Parking.number == numero).fetch(1) # se esiste il parcheggio if len(park) > 0: park[0].stato = "Prenotato" park[0].put() idx_targa = int(request.form['targa']) user = User().query(User.email == session['user']['email']).fetch(1)[0] targhe = user.targa.split(',') targa = targhe[idx_targa - 1] # send signal to arduino (p = prenotazione) if not publishMQTT(parking, "p"): flash("Errore nella prenotazione. Riprova") return redirect(url_for('main.index')) # creo prenotazione book = Booking() book.uuid = session['user']['user_id'] book.name = session['user']['nome'] book.surname = session['user']['cognome'] book.targa = targa book.parking = parking book.put() flash("Prenotazione effettuata correttamente") return redirect(url_for('main.index')) else: flash("Errore nella prenotazione. Riprova.") return redirect(url_for('main.index'))
def get_user_from_mail(mail): return User().query(User.email == mail).fetch()
def get_user(user_id): return User().query(User.uuid == user_id).fetch()
def get_users(is_valid=None): if is_valid == None: return User().query().fetch() else: return User().query(User.is_valid == is_valid).fetch()