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)
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)
async def month_statistics(message: types.Message): """Отправляет статистику трат текущего месяца""" answer_message = expenses.get_month_statistics() await message.answer(answer_message)
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)
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
async def month_statistics(message: types.Message): answer_message = expenses.get_month_statistics() await message.answer(answer_message)
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)
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)