Example #1
0
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}')  # перенапровление
Example #2
0
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)
Example #3
0
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('/')  # возврат на главное меню
Example #4
0
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)
Example #5
0
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='Журнал')
Example #6
0
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('/')  # возврат на главное меню
Example #7
0
def logout():
    activity(f'Sign Out')
    logout_user()
    return redirect("/")
Example #8
0
def developers():
    activity(f'To developers')
    return render_template('to_developers.html', title='To developers')
Example #9
0
def about_the_project():
    activity(f'About the project')
    return render_template('about_the_project.html', title='О проекте')
Example #10
0
def what_is_the_calculator():
    activity(f'What is the calculator')
    return render_template('what_is_the_calculator.html',
                           title='Калькулятор для чего нужен')
Example #11
0
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)
Example #12
0
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)