def add_timetable(): if not current_user.is_authenticated: return redirect('/') # возврат на главное меню session = db_session.create_session() activity('main timetable') date = datetime.datetime.now() date = f'{date.year}-{str(date.month).rjust(2, "0")}-{date.day}' ch_ch_date = get_ch_ch_date(date) color = set_color(0) status = set_status(0) timetable = Timetable(date=date, ch_ch_date=ch_ch_date, percent=0, vitamin=0, is_varfarin=False, master=current_user.id, color=color, status=status, summ=0, breakfast=[], dinner=[], supper=[], all_products='Не выбрано', all_products_varfarin='', mno='0', varfarin='0') session.add(timetable) session.commit() return redirect(f'/timetable/{timetable.id}') # перенапровление
def register(): form = RegisterForm() # форма if form.validate_on_submit(): # проверка на верные данные if form.password.data != form.password_again.data: return render_template('register.html', title='Регистрация', form=form, message="Пароли не совпадают") session = db_session.create_session() if session.query(User).filter(User.email == form.email.data).first(): return render_template('register.html', title='Регистрация', form=form, message="Такой пользователь уже есть") user = User(surname=form.surname.data, name=form.name.data, age=int(form.age.data), email=form.email.data, is_varfarin=form.is_varfarin.data) user.set_password(form.password.data) session.add(user) session.commit() # сразу войти в систему user.is_active = True login_user(user, remember=False) current_user.is_active = True activity( f'new register email"{form.email.data}" name="{form.name.data} {form.surname.data}"' ) return redirect('/') # возврат на главное меню return render_template('register.html', title='Регистрация', form=form)
def timetable_delete(id): session = db_session.create_session() timetable = session.query(Timetable).filter( Timetable.id == id, (Timetable.master == current_user.id)).first() if timetable: session.delete(timetable) session.commit() activity(f'delete timetable, id - {timetable.id}') else: abort(404) return redirect('/') # возврат на главное меню
def login(): form = LoginForm() # форма if form.validate_on_submit(): session = db_session.create_session() user = session.query(User).filter( User.email == form.email.data).first() if user and user.check_password(form.password.data): user.is_active = True login_user(user, remember=form.remember_me.data) current_user.is_active = True activity(f'logging in with email="{form.email.data}"') return redirect("/") return render_template('login.html', message="Неправильный логин или пароль", form=form) return render_template('login.html', title='Авторизация', form=form)
def index(): # главная страница session = db_session.create_session() if current_user.is_authenticated: timetable = session.query(Timetable).filter( Timetable.master == current_user.id).all() # записываем все # рассписания зарегистрированого пользователя else: timetable = [] timetable.sort(key=lambda x: get_num_of_day(x.date), reverse=True) if len(timetable) > 7: timetable = timetable[:7] activity('main menu') # создаёт новую запись в активности return render_template("index.html", timetable=timetable, current_user=current_user, title='Журнал')
def duplicate_timetable(id): if not current_user.is_authenticated: return redirect('/') # возврат на главное меню session = db_session.create_session() timetable_old = session.query(Timetable).filter( Timetable.id == id, (Timetable.master == current_user.id)).first() if not timetable_old: abort(404) date = datetime.datetime.now() date = f'{date.year}-{str(date.month).rjust(2, "0")}-{date.day}' # запись даты в опр. формате ch_ch_date = get_ch_ch_date(date) # запись даты в человеко читаемом формате timetable_new = Timetable( date=date, ch_ch_date=ch_ch_date, percent=timetable_old.percent, vitamin=timetable_old.vitamin, is_varfarin=timetable_old.is_varfarin, master=timetable_old.master, color=timetable_old.color, summ=timetable_old.summ, breakfast=timetable_old.breakfast, dinner=timetable_old.dinner, supper=timetable_old.supper, status=timetable_old.status, all_products=timetable_old.all_products, all_products_varfarin=timetable_old.all_products_varfarin) session.add(timetable_new) session.commit() activity( f'duplicate timetable with id={timetable_old.id} to id={timetable_new.id}' ) return redirect('/') # возврат на главное меню
def logout(): activity(f'Sign Out') logout_user() return redirect("/")
def developers(): activity(f'To developers') return render_template('to_developers.html', title='To developers')
def about_the_project(): activity(f'About the project') return render_template('about_the_project.html', title='О проекте')
def what_is_the_calculator(): activity(f'What is the calculator') return render_template('what_is_the_calculator.html', title='Калькулятор для чего нужен')
def timetable_without_regist(): # расчёт без регистрации session = db_session.create_session() result = False if request.method == "GET": # всё аналогично activity('calculation used without registration') result_breakfast = [] result_dinner = [] result_supper = [] result_breakfast_varfarin = [] result_dinner_varfarin = [] result_supper_varfarin = [] for result in result_breakfast: if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_breakfast_varfarin.append(True) else: result_breakfast_varfarin.append(False) for result in result_dinner: if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_dinner_varfarin.append(True) else: result_dinner_varfarin.append(False) for result in result_supper: if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_supper_varfarin.append(True) else: result_supper_varfarin.append(False) values = [ result_breakfast, result_dinner, result_supper, result_breakfast_varfarin, result_dinner_varfarin, result_supper_varfarin ] products = list( map( lambda x: (f'{x.name} ({x.vitamin}мк.гр/100гр)', x.name in list_of_products_with_varfarin), list_of_products)) products.sort() return render_template("timetable_without_regist.html", values=values, products=products, title='Подсчёт витамина К', result=result) else: result_breakfast = [] result_dinner = [] result_supper = [] result_breakfast_varfarin = [] result_dinner_varfarin = [] result_supper_varfarin = [] is_varfarin = False list_of_prod_varf = [] summ = 0 for i in range(1, 101): try: data = (request.form[f'product_1_{i}'], request.form[f'count_1_{i}']) except: break if ' ('.join(data[0].split(' (') [:-1]) in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(' ('.join(data[0].split(' (')[:-1])) result_breakfast_varfarin.append(True) else: result_breakfast_varfarin.append(False) result_breakfast.append(data) summ += int(data[1]) for i in range(1, 101): try: data = (request.form[f'product_2_{i}'], request.form[f'count_2_{i}']) except: break if ' ('.join(data[0].split(' (') [:-1]) in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(' ('.join(data[0].split(' (')[:-1])) result_dinner_varfarin.append(True) else: result_dinner_varfarin.append(False) result_dinner.append(data) summ += int(data[1]) for i in range(1, 101): try: data = (request.form[f'product_3_{i}'], request.form[f'count_3_{i}']) except: break if ' ('.join(data[0].split(' (') [:-1]) in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(' ('.join(data[0].split(' (')[:-1])) result_supper_varfarin.append(True) else: result_supper_varfarin.append(False) result_supper.append(data) summ += int(data[1]) vitamin = sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_breakfast)) vitamin += sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_dinner)) vitamin += sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_supper)) vitamin = int(vitamin * 1000) / 1000 percent = int((vitamin / NORM * 10000) + 0.5) / 100 color = set_color(percent) status = set_status(percent) result = (True, color, percent, vitamin, status, is_varfarin, list_of_prod_varf, summ) if 'add_button_1' in request.form: result_breakfast.append(('Выбрать ()', 0)) if 'add_button_2' in request.form: result_dinner.append(('Выбрать ()', 0)) if 'add_button_3' in request.form: result_supper.append(('Выбрать ()', 0)) values = [ result_breakfast, result_dinner, result_supper, result_breakfast_varfarin, result_dinner_varfarin, result_supper_varfarin ] products = list( map( lambda x: (f'{x.name} ({x.vitamin}мк.гр/100гр)', x.name in list_of_products_with_varfarin), list_of_products)) products.sort() return render_template("timetable_without_regist.html", values=values, title='Подсчёт витамина К', products=products, result=result)
def edit_timetable(id): if not current_user.is_authenticated: return redirect('/') # возврат на главное меню session = db_session.create_session() timetable = session.query(Timetable).filter( Timetable.id == id, (Timetable.master == current_user.id)).first() if request.method == "GET": result_breakfast = timetable.breakfast # результат сохраннный в БД result_dinner = timetable.dinner result_supper = timetable.supper result_breakfast_varfarin = [] # для помечания опасных продуктов result_dinner_varfarin = [] # цветом result_supper_varfarin = [] list_of_prod_varf = [] # для перечня опасных продуктов for result in result_breakfast: # парсинг данных if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_breakfast_varfarin.append(True) list_of_prod_varf.append(' ('.join(result[0].split(' (')[:-1])) else: result_breakfast_varfarin.append(False) for result in result_dinner: if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_dinner_varfarin.append(True) list_of_prod_varf.append(' ('.join(result[0].split(' (')[:-1])) else: result_dinner_varfarin.append(False) for result in result_supper: if ' ('.join(result[0].split(' (') [:-1]) in list_of_products_with_varfarin: result_supper_varfarin.append(True) list_of_prod_varf.append(' ('.join(result[0].split(' (')[:-1])) else: result_supper_varfarin.append(False) date = timetable.date values = [ result_breakfast, result_dinner, result_supper, result_breakfast_varfarin, result_dinner_varfarin, result_supper_varfarin ] products = list( map( lambda x: (f'{x.name} ({x.vitamin}мк.гр/100гр)', x.name in list_of_products_with_varfarin), list_of_products)) products.sort() result = (True, timetable.color, timetable.percent, timetable.vitamin, timetable.status, timetable.is_varfarin, list_of_prod_varf, timetable.summ) return render_template("timetable.html", values=values, products=products, title='Внесение продуктов', date=date, result=result) else: result_breakfast = [] result_dinner = [] result_supper = [] result_breakfast_varfarin = [] result_dinner_varfarin = [] result_supper_varfarin = [] is_varfarin = False all_products = [] list_of_prod_varf = [] summ = 0 for i in range(1, 101): try: # так как неизвестно сколько элементов, будем проверять на # существование data = (request.form[f'product_1_{i}'], request.form[f'count_1_{i}']) except: # если следующего элемента нет то break break name = ' ('.join(data[0].split(' (')[:-1]) vitamin = float( str( session.query(Products).filter( Products.name == name).first().vitamin).replace( ',', '.')) if name in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(name) result_breakfast_varfarin.append(True) else: result_breakfast_varfarin.append(False) result_breakfast.append(data) all_products.append( f"{name}({data[1]}гр - {round(vitamin*int(data[1])/100, 1)}мк.г)" ) summ += int(data[1]) for i in range(1, 101): # тоже самое, что и с первым try: data = (request.form[f'product_2_{i}'], request.form[f'count_2_{i}']) except: break name = ' ('.join(data[0].split(' (')[:-1]) vitamin = float( str( session.query(Products).filter( Products.name == name).first().vitamin).replace( ',', '.')) if name in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(name) result_dinner_varfarin.append(True) else: result_dinner_varfarin.append(False) result_dinner.append(data) all_products.append( f"{name}({data[1]}гр - {round(vitamin*int(data[1])/100, 1)}мк.г)" ) summ += int(data[1]) for i in range(1, 101): # тоже самое, что и с первым try: data = (request.form[f'product_3_{i}'], request.form[f'count_3_{i}']) except: break name = ' ('.join(data[0].split(' (')[:-1]) vitamin = float( str( session.query(Products).filter( Products.name == name).first().vitamin).replace( ',', '.')) if name in list_of_products_with_varfarin: is_varfarin = True list_of_prod_varf.append(name) result_supper_varfarin.append(True) else: result_supper_varfarin.append(False) result_supper.append(data) all_products.append( f"{name}({data[1]}гр - {round(vitamin*int(data[1])/100, 1)}мк.г)" ) summ += int(data[1]) vitamin = sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_breakfast)) vitamin += sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_dinner)) vitamin += sum( map( lambda x: float( str( session.query(Products).filter( Products.name == ' ('.join(x[0].split(' (')[:-1])). first().vitamin).replace(',', '.')) / 100 * int(x[1]), result_supper)) vitamin = round(vitamin, 3) percent = round(vitamin / NORM * 100, 2) color = set_color(percent) # отдаёт цвет по процентам status = set_status(percent) # отдаёт статус по процентам mno = request.form['mno'] varfarin = request.form['varf'] date = request.form['date'] if date == '': # на случай если дата не указана date = datetime.datetime.now() date = f'{date.year}-{str(date.month).rjust(2, "0")}-{str(date.day).rjust(2, "0")}' ch_ch_date = get_ch_ch_date(date) timetable.date = date # сохроняем все данные timetable.ch_ch_date = ch_ch_date timetable.percent = percent timetable.vitamin = vitamin timetable.is_varfarin = is_varfarin timetable.color = color timetable.status = status timetable.summ = summ timetable.breakfast = result_breakfast timetable.dinner = result_dinner timetable.supper = result_supper timetable.all_products = ', '.join(all_products) timetable.all_products_varfarin = ', '.join(list_of_prod_varf) timetable.mno = mno timetable.varfarin = varfarin session.commit() if 'complete' in request.form: activity(f'chang timetable id - {timetable.id}') return redirect('/') # возврат на главное меню if 'add_button_1' in request.form: result_breakfast.append(('Выбрать ()', 0)) if 'add_button_2' in request.form: result_dinner.append(('Выбрать ()', 0)) if 'add_button_3' in request.form: result_supper.append(('Выбрать ()', 0)) values = [ result_breakfast, result_dinner, result_supper, result_breakfast_varfarin, result_dinner_varfarin, result_supper_varfarin ] products = list( map( lambda x: (f'{x.name} ({x.vitamin}мк.гр/100гр)', x.name in list_of_products_with_varfarin), list_of_products)) products.sort() result = (True, color, percent, vitamin, status, is_varfarin, list_of_prod_varf, summ) return render_template("timetable.html", values=values, title='Внесение продуктов', date=date, products=products, result=result)