Пример #1
0
async def month_statistics(message: types.Message):
    usr_id = int(message.from_user.id)
    answer_message = expenses.get_month_statistics(usr_id)
    if not answer_message:
        await message.answer("За весь месяц мы не просадили ни рубля:)")
        return
    total = expenses.get_month_total(usr_id)

    month_expenses_rows = [
        f"{expense.amount} руб. на {expense.category_name}"
        for expense in answer_message
    ]
    answer_message = "За месяц мы потратили:  " + str(
        total) + " руб \n\n* " + "\n\n* ".join(month_expenses_rows)
    await message.answer(answer_message)
Пример #2
0
async def month_statistics_grph(message: types.Message):
    usr_id = int(message.from_user.id)
    answer_message = expenses.get_month_statistics(usr_id)
    if not answer_message:
        await message.answer("За весь месяц мы не просадили ни рубля:)")
        return
    total = expenses.get_month_total(usr_id)

    month_expenses_rows = [
        f"{expense.amount} руб. на {expense.category_name}"
        for expense in answer_message
    ]
    answer_message = "За месяц мы потратили:  " + str(total) + " руб \n\n"

    result = expenses.get_month_statistics_graph(usr_id)
    vals = [i[-1] for i in result]
    labels = [i[0] for i in result]
    plt = graphics.month_graph(vals, labels)

    result_by_day = expenses.get_month_statistics_graph_by_day(usr_id)
    vals = [i[-1] for i in result_by_day]
    dt = [
        int(i[0].replace('0', '')) if i[0].split('0')[0] == '' else int(i[0])
        for i in result_by_day
    ]
    min_dt = min(dt)
    max_dt = max(dt)
    dt_add = [i for i in range(1, min_dt)]
    vals_add = [0 for i in range(1, min_dt)]
    dt_add.extend(dt)
    vals_add.extend(vals)
    dt = dt_add
    vals = vals_add

    curr_day = datetime.datetime.now().day
    if max_dt < curr_day:
        dt_add_fut = [i for i in range(max_dt + 1, curr_day + 1)]
        val_add_fut = [0 for i in range(max_dt + 1, curr_day + 1)]
        dt.extend(dt_add_fut)
        vals.extend(val_add_fut)
    plt_by_day = graphics.month_graph_by_day(dt, vals)

    await message.answer(answer_message)
    with open(plt, 'rb') as photo:
        await message.reply_photo(photo)
    with open(plt_by_day, 'rb') as photo:
        await message.reply_photo(photo)
Пример #3
0
async def month_statistics(message: types.Message):
    """Отправляет статистику трат текущего месяца"""
    answer_message = expenses.get_month_statistics()
    await message.answer(answer_message)
Пример #4
0
async def month_statistics(message: types.Message):
    """Sends spending statistics for the current month"""
    answer_message = expenses.get_month_statistics()
    await message.answer(answer_message)
Пример #5
0
def processing_command(command: str, user_id: int) -> str:
    """
    Функция определения полученной команды и получения соответствующего ей ответа
    Обрабатывает команды (через слэш):
    - старт, помощь - вывод справки
    - [число] [группа] (300 такси) - внос расхода
    - удалить [идентификатор_расхода] (удалить 1) - удаление расхода
    - категории - вывод списка всех категорий и соответствующих им алиасов (псевдонимов)
    - день - вывод статистики за день
    - месяц - вывод статистики за месяц
    - затраты - вывод последних 10 затрат
    - лимит - вывод ежедневного лимита
    - лимит [число] (лимит 2000) - изменение ежедневного лимита

    :param command: команда
    :param user_id: идентификатор пользователя в VK
    :return: ответ на команду
    """

    template_add_expense = r"^/(\d+[\.\d+|,\d+]*)р? (\w+)"
    template_delete_expense = r"/удалить (\d)"
    template_get_limit = r"^/лимит$"
    template_change_limit = r"^/лимит (\d+[\.\d+|,\d+]*)р?$"

    if command in ["/старт", "/помощь"]:
        return get_welcome_message()

    elif search(template_add_expense, command):
        expense = expenses.add_expense(message=command, user_id=user_id)

        answer_message = f"{expense.amount}р добавлено в категорию {expense.category_name}\n"
        return answer_message

    elif search(template_delete_expense, command):
        expense_id = findall(template_delete_expense, command)[0]
        expenses.delete_expense(expense_id=expense_id)

        answer_message = "Расход удалён"
        return answer_message

    elif command in ["/категории"]:
        answer_message = get_categories()
        return answer_message

    elif command in ["/день"]:
        answer_message = expenses.get_today_statistics(user_id=user_id)
        return answer_message

    elif command in ["/месяц"]:
        answer_message = expenses.get_month_statistics(user_id=user_id)
        return answer_message

    elif command in ["/затраты"]:
        last_expenses = expenses.last_expenses(user_id=user_id)
        answer_message = ""
        if not last_expenses:
            answer_message = "Расходы ещё не заведены"
        else:
            last_expenses_rows = [
                f"{expense.amount} руб. на {expense.category_name} — введите "
                f"\"/удалить {expense.id}\" для удаления"
                for expense in last_expenses
            ]

            answer_message = "Последние сохранённые траты:\n\n— " \
                             "\n\n— ".join(last_expenses_rows)

        return answer_message

    elif search(template_get_limit, command):
        daily_limit = expenses.get_daily_limit(user_id=user_id)

        answer_message = f"Ваш дневной лимит: {daily_limit}"
        return answer_message

    elif search(template_change_limit, command):
        new_daily_limit = findall(template_change_limit, command)[0]
        if expenses.change_daily_limit(new_daily_limit=new_daily_limit,
                                       user_id=user_id):
            answer_message = "Суточнный лимит изменён"
        else:
            answer_message = "Ошибка! Суточный лимит не изменён"

        return answer_message

    else:
        answer_message = "Ошибка! Неверная команда"
        return answer_message
Пример #6
0
async def month_statistics(message: types.Message):
    answer_message = expenses.get_month_statistics()
    await message.answer(answer_message)
Пример #7
0
async def add_expense(message: types.Message):
    raw_message = message.text.lower().strip()
    if raw_message == 'январь':
        answer_message = expenses.get_month_statistics('01')
    elif raw_message == 'февраль':
        answer_message = expenses.get_month_statistics('02')
    elif raw_message == 'март':
        answer_message = expenses.get_month_statistics('03')
    elif raw_message == 'апрель':
        answer_message = expenses.get_month_statistics('04')
    elif raw_message == 'май':
        answer_message = expenses.get_month_statistics('05')
    elif raw_message == 'июнь':
        answer_message = expenses.get_month_statistics('06')
    elif raw_message == 'июль':
        answer_message = expenses.get_month_statistics('07')
    elif raw_message == 'август':
        answer_message = expenses.get_month_statistics('08')
    elif raw_message == 'сентябрь':
        answer_message = expenses.get_month_statistics('09')
    elif raw_message == 'октябрь':
        answer_message = expenses.get_month_statistics('10')
    elif raw_message == 'ноябрь':
        answer_message = expenses.get_month_statistics('11')
    elif raw_message == 'декабрь':
        answer_message = expenses.get_month_statistics('12')
    else:
        try:
            expense = expenses.add_expense(raw_message)
        except exceptions.NotCorrectMessage as e:
            await message.answer(str(e))
            return
        answer_message = (
            f"Добавлены траты {expense.amount} руб на {expense.category_name}.\n\n"
            f"{expenses.get_today_statistics()}")
    await message.answer(answer_message)
Пример #8
0
async def month_statistics(message: types.Message):
    """Отправляет статистику расходов за текущий месяц в текущем году"""
    now = expenses._get_now_datetime()
    current_month = f"{now.month:02d}"
    answer_message = expenses.get_month_statistics(current_month)
    await message.answer(answer_message)