Exemple #1
0
async def _call_debtors(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    group_id = admin.get_active_group(admin_id)
    state_store = managers.StateStorageManager(admin_id)
    admin_store = managers.AdminConfigManager(admin_id)
    fin_store = managers.FinancialConfigManager(admin_id)
    with orm.db_session:
        if chats.get_list_of_chats_by_group(group_id):
            category_id = fin_store.get_or_create().financial_category.id
            msgs = generate_debtors_call(category_id)
            state_store.update(state=state_store.get_id_of_state(
                "fin_confirm_debtors_call"), )
            chat_id = admin_store.get_active_chat().vk_id
            chat_title = await chat_utils.get_chat_name(api_context, chat_id)
            for msg in msgs:
                await ans.answer(msg)
            if len(msgs) > 1:
                text = "Сообщения будут отправлены в {0}"
            else:
                text = "Сообщение будет отправлено в {0}"
            await ans.answer(
                text.format(chat_title),
                keyboard=kbs.common.confirm_with_chat_update(),
            )
        else:
            await ans.answer(
                "У вашей группы нет зарегистрированных чатов. Возврат в главное меню",
                keyboard=kbs.finances.fin_category(),
            )
Exemple #2
0
async def _register_category(ans: bots.SimpleBotEvent):
    if re.match(r"^\w+ \d+$", ans.object.object.message.text):
        message = ans.object.object.message
        student_id = students.get_system_id_of_student(message.from_id)
        category = finances.get_or_create_finances_category(
            admin.get_active_group(student_id).id,
            *message.text.split(),
        )
        admin_store = managers.AdminConfigManager(student_id)
        fin_store = managers.FinancialConfigManager(student_id)
        fin_store.update(financial_category=category.id)
        state_storage = managers.StateStorageManager(student_id)
        state_storage.update(
            state=state_storage.get_id_of_state("fin_send_alert"), )
        with orm.db_session:
            chat_id = admin_store.get_active_chat().vk_id

        chat_title = await chat_utils.get_chat_name(api_context, chat_id)

        await ans.answer(
            "Категория {0} зарегистрирована. Вы можете отправить сообщение о начале сбора в чат {1}"
            .format(
                category.name,
                chat_title,
            ),
            keyboard=kbs.common.confirm_with_chat_update(),
        )
    else:
        await ans.answer("Неверный формат данных")
Exemple #3
0
async def _confirm_send_alarm(ans: bots.SimpleBotEvent):

    student_id = students.get_system_id_of_student(ans.from_id)
    admin_store = managers.AdminConfigManager(student_id)
    state_storage = managers.StateStorageManager(student_id)
    state_storage.update(state=state_storage.get_id_of_state("main"))

    fin_store = managers.FinancialConfigManager(student_id)

    with orm.db_session:
        chat_vk_id = admin_store.get_active_chat().vk_id
        category_name = fin_store.get_or_create().financial_category.name
        category_sum = fin_store.get_or_create().financial_category.summ

    await ans.api_ctx.messages.send(
        peer_id=chat_vk_id,
        random_id=0,
        message="Начат сбор средств на {0}. Сумма {1} руб.".format(
            category_name,
            category_sum,
        ),
    )

    await ans.answer(
        "Сообщение отправлено",
        keyboard=kbs.finances.fin_prefs(),
    )
Exemple #4
0
async def _open_prefs(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    fin_store = managers.FinancialConfigManager(admin_id)

    with orm.db_session:
        category_name = fin_store.get_or_create().financial_category.name

    await ans.answer(
        'Настройки категории "{0}"'.format(category_name),
        keyboard=kbs.finances.fin_prefs(),
    )
Exemple #5
0
async def _get_statistics(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    fin_store = managers.FinancialConfigManager(admin_id)
    with orm.db_session:
        category = fin_store.get_or_create().financial_category
        donates_summ = finances.calculate_incomes_in_category(category, )
        expenses_summ = finances.calculate_expenses_in_category(category, )
    await ans.answer(
        "Статистика\nСобрано: {0} руб.\nПотрачено: {1} руб.".format(
            donates_summ,
            expenses_summ,
        ), )
Exemple #6
0
async def _remove_cat(ans: bots.SimpleBotEvent):
    student_id = students.get_system_id_of_student(ans.from_id)
    state_storage = managers.StateStorageManager(student_id)
    fin_store = managers.FinancialConfigManager(student_id)
    state_storage.update(
        state=state_storage.get_id_of_state("fin_delete_cat"), )

    with orm.db_session:
        category_name = fin_store.get_or_create().financial_category.name

    await ans.answer(
        "Удалить категорию {0}?".format(category_name, ),
        keyboard=kbs.common.prompt().get_keyboard(),
    )
Exemple #7
0
async def _save_expense(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(
        ans.object.object.message.from_id)
    if re.match(r"^\d+$", ans.text):
        fin_store = managers.FinancialConfigManager(admin_id)
        finances.add_expense(
            fin_store.get_or_create().financial_category.id,
            int(ans.text),
        )
        state_store = managers.StateStorageManager(admin_id)
        state_store.update(state=state_store.get_id_of_state("main"))
        await ans.answer("Расход сохранен",
                         keyboard=kbs.finances.fin_category())
    else:
        await ans.answer("Введите только число")
Exemple #8
0
async def _confirm_call_debtors(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    admin_store = managers.AdminConfigManager(admin_id)
    state_store = managers.StateStorageManager(admin_id)
    fin_store = managers.FinancialConfigManager(admin_id)
    msgs = generate_debtors_call(
        fin_store.get_or_create().financial_category.id)

    with orm.db_session:
        chat = admin_store.get_active_chat().vk_id

    state_store.update(state=state_store.get_id_of_state("main"))
    for msg in msgs:
        await api_context.messages.send(peer_id=chat, message=msg, random_id=0)
    await ans.answer("Призыв отправлен", keyboard=kbs.finances.fin_category())
Exemple #9
0
async def _fin_category_menu(ans: bots.SimpleBotEvent):
    payload = ujson.loads(ans.object.object.message.payload)
    fin_storage = managers.FinancialConfigManager(
        students.get_system_id_of_student(ans.from_id), )
    category = payload.get("category")
    if category is not None:
        fin_storage.update(financial_category=category)

    with orm.db_session:
        category_name = fin_storage.get_or_create().financial_category.name

    await ans.answer(
        'Меню категории "{0}"'.format(category_name),
        keyboard=kbs.finances.fin_category(),
    )
Exemple #10
0
async def _confirm_remove_cat(ans: bots.SimpleBotEvent):

    student_id = students.get_system_id_of_student(ans.from_id)
    state_storage = managers.StateStorageManager(student_id)
    state_storage.update(state=state_storage.get_id_of_state("main"))

    fin_store = managers.FinancialConfigManager(student_id)

    with orm.db_session:
        category = fin_store.get_or_create().financial_category
        category.delete()

    await ans.answer(
        "Категория удалена",
        keyboard=kbs.finances.list_of_fin_categories(student_id),
    )
Exemple #11
0
async def _save_new_name_category(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    fin_store = managers.FinancialConfigManager(admin_id)

    with orm.db_session:
        category_id = fin_store.get_or_create().financial_category.id

        models.FinancialCategory[category_id].set(name=ans.text)

    state_store = managers.StateStorageManager(admin_id)
    state_store.update(state=state_store.get_id_of_state("main"))

    await ans.answer(
        "Категория сохранена",
        keyboard=kbs.finances.fin_prefs(),
    )
Exemple #12
0
async def _save_new_sum_category(ans: bots.SimpleBotEvent):
    admin_id = students.get_system_id_of_student(ans.from_id)
    fin_store = managers.FinancialConfigManager(admin_id)

    if re.match(r"^\d+$", ans.text):

        with orm.db_session:
            category_id = fin_store.get_or_create().financial_category.id
            models.FinancialCategory[category_id].set(summ=ans.text)

        state_store = managers.StateStorageManager(admin_id)
        state_store.update(state=state_store.get_id_of_state("main"))

        await ans.answer(
            "Категория сохранена",
            keyboard=kbs.finances.fin_prefs(),
        )
    else:
        await ans.answer("Неверный формат данных")
Exemple #13
0
    def menu(self) -> str:
        """
        Главное меню призыва (половины алфавита, сохранить, отменить, изменить).

        Returns:
            str: Клавиатура
        """
        kb = kbs.common.alphabet(self.admin_id)
        store = managers.FinancialConfigManager(self.admin_id).get_or_create()
        if len(kb.buttons[-1]):
            kb.add_row()
        kb.add_text_button(
            text="🚫 Отмена",
            payload={
                "button": "fin_category",
                "category": store.financial_category.id
            },
        )

        return kb.get_keyboard()
Exemple #14
0
async def _offer_alert(ans: bots.SimpleBotEvent):
    student_id = students.get_system_id_of_student(ans.from_id)
    admin_store = managers.AdminConfigManager(student_id)
    state_storage = managers.StateStorageManager(student_id)
    fin_store = managers.FinancialConfigManager(student_id)
    state_storage.update(
        state=state_storage.get_id_of_state("fin_send_alert"), )

    with orm.db_session:
        chat_id = admin_store.get_active_chat().vk_id
        category_name = fin_store.get_or_create().financial_category.name

    chat_title = await chat_utils.get_chat_name(api_context, chat_id)

    await ans.answer(
        "Сообщение о начале сбора на {0} будет отправлено в чат {1}".format(
            category_name,
            chat_title,
        ),
        keyboard=kbs.common.confirm_with_chat_update(),
    )
Exemple #15
0
async def _save_donate(ans: bots.SimpleBotEvent):
    if re.match(r"^\d+$", ans.text):
        student_id = students.get_system_id_of_student(ans.from_id)
        fin_store = managers.FinancialConfigManager(student_id, )
        mention_store = managers.MentionStorageManager(student_id, )
        state_store = managers.StateStorageManager(student_id, )
        state_store.update(state=state_store.get_id_of_state("main"))

        payer = await redis.hget(
            "add_income:{0}".format(ans.object.object.message.peer_id),
            "payer",
        )

        finances.add_or_edit_donate(
            fin_store.get_or_create().financial_category.id,
            payer,
            int(ans.text),
        )
        mention_store.clear()
        await ans.answer("Доход сохранен",
                         keyboard=kbs.finances.fin_category())
    else:
        await ans.answer("Введите только число")