Exemple #1
0
async def add_another_comment_back(call:CallbackQuery, state:FSMContext):
    await call.answer()
    await call.message.delete()

    data_state = await state.get_data()

    request = data_state['chosen_request']

    text = get_data_chosen_request(request)

    await call.message.answer (
        text=text,
        reply_markup=create_kb_chosen_request(request)
        # > отложить на выдачу (для доставки, кэшина, обмена)
        # > принято частично (для приема кэша, снятия с карт, обмена)
        # > закрыть заявку
        # > сообщение
        # > изменить заявку
        # > добавить пропуск
        # > добавить комментарий
        # > распаковать
        # > отменить заявку
        # > назад
        # > главное меню
    )

    await Processing.enter_chosen_request_menu.set()

    return
async def set_date_from_text(message:Message, state:FSMContext):
    data_state = await state.get_data()

    await bot.delete_message (
        chat_id=message.chat.id,
        message_id=data_state['message_to_delete']
    )
    await bot.delete_message (
        chat_id=message.chat.id,
        message_id=message.message_id
    )

    match = re.fullmatch(r'\d\d\.\d\d', message.text)

    if match:
        changed_request = data_state['changed_request']

        is_changed = True
        new_date = message.text

        changed_request[10] = message.chat.username
        changed_request[0] = new_date

        await state.update_data(is_changed=is_changed)
        await state.update_data(changed_request=changed_request)

        all_changes_data = data_state['all_changes_data']

        if 'date' not in all_changes_data:
            all_changes_data.append('date')
            await state.update_data(all_changes_data=all_changes_data)

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'

        await message.answer (
            text,
            reply_markup=create_kb_change_request(changed_request, is_changed)
        )

        await Processing.change_request_menu.set()

        return

    else:
        result = await message.answer (
            'Неправильный формат даты.' + \
            ' Попробуйте еще раз ввести в формате чч.мм.\n' + \
            '(пример для 11 ноября: 11.11)'
        )

        await state.update_data(message_to_delete=result.message_id)
        await Processing.typing_coustom_date.set()

        return
Exemple #3
0
async def show_chosen_request(call:CallbackQuery, state:FSMContext):
    '''
    Обрабатывает нажатие на одну из заявок, выведенных списком
    '''
    await call.answer()
    await call.message.delete()

    data_btn = cb_current_requests.parse(call.data)

    if data_btn['type_btn'] == 'exit':
        await call.message.answer (
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id)
        )
        await state.finish()
        
        return

    data_state = await state.get_data()
    current_requests = data_state['current_requests']

    for request in current_requests:

        if data_btn['id'] == request[1]:
            await state.update_data(chosen_request=request)

            break

    data_state = await state.get_data()
    request = data_state['chosen_request']
    text = get_data_chosen_request(request)
    
    await call.message.answer (
        text=text,
        reply_markup=create_kb_chosen_request(request)
        # > отложить на выдачу (для доставки, кэшина, обмена)
        # > принято частично (для приема кэша, снятия с карт, обмена)
        # > закрыть заявку
        # > сообщение
        # > изменить заявку
        # > добавить пропуск
        # > добавить комментарий
        # > распаковать
        # > отменить заявку
        # > посмотреть историю
        # > назад
        # > главное меню
    )

    await Processing.enter_chosen_request_menu.set()

    return
    
async def set_blue_amount(message:Message, state:FSMContext):
    data_state = await state.get_data()
    await bot.delete_message (
        chat_id=message.chat.id,
        message_id=data_state['message_to_delete']
    )
    await bot.delete_message (
        chat_id=message.chat.id,
        message_id=message.message_id
    )

    try:
        chosen_request = data_state['chosen_request']
        blue_amount_chunk = int(message.text)
        blue_amount_chunk = str(blue_amount_chunk)
        
    except Exception as e:
        print(e)
        await message.answer (
            text='Изменение заявки отменено. Неправильный формат синих.',
            reply_markup=create_kb_coustom_main_menu(message.chat.id)
        )
        await state.finish()
        
        return
    
    data_state = await state.get_data()
    chosen_request = data_state['chosen_request']
    
    if chosen_request[5][0] == '-':
        blue_amount_chunk = '-' + blue_amount_chunk

    chosen_request[16] = blue_amount_chunk
    await state.update_data(chosen_request=chosen_request)

    text = get_data_chosen_request(chosen_request)

    await message.answer (
        text=text,
        reply_markup=create_kb_confirm_blue()
        # > подтвердить
        # > вернуться к заявке
        # > назад - главное меню
    )

    await Processing.enter_to_confirm_blue_menu_chunk.set()

    return
async def set_date_from_text(message: Message, state: FSMContext):
    data_state = await state.get_data()

    await bot.delete_message(chat_id=message.chat.id,
                             message_id=data_state['message_to_delete'])
    await bot.delete_message(chat_id=message.chat.id,
                             message_id=message.message_id)

    match = re.fullmatch(r'\d\d\d\d', message.text)

    if match:
        changed_request = data_state['changed_request']

        is_changed = True
        new_numb = message.text

        changed_request[10] = message.chat.username
        changed_request[2] = new_numb

        await state.update_data(is_changed=is_changed)
        await state.update_data(changed_request=changed_request)

        all_changes_data = data_state['all_changes_data']

        if 'numb' not in all_changes_data:
            all_changes_data.append('numb')
            await state.update_data(all_changes_data=all_changes_data)

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'

        await message.answer(text,
                             reply_markup=create_kb_change_request(
                                 changed_request, is_changed))

        await Processing.change_request_menu.set()

        return

    else:
        result = await message.answer(
            'Неправильный формат номера заявки.' + ' ' +
            'Попробуйте еще раз ввести в формате XXXX.\n(Например: 1546)')
        await state.update_data(message_to_delete=result.message_id)
        await Processing.new_request_id.set()

        return
Exemple #6
0
async def log_message_handler(call: CallbackQuery, state: FSMContext):
    await call.answer()
    await call.message.delete()

    if call.data == 'back_to_request':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text, reply_markup=create_kb_chosen_request(chosen_request))

        await Processing.enter_chosen_request_menu.set()

        return

    elif call.data == 'back_to_main_menu':

        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return

    else:

        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return
Exemple #7
0
async def set_type_of_end(call: types.CallbackQuery, state: FSMContext):
    await call.answer()
    await call.message.delete()
    request_data = await state.get_data()

    if call.data == 'add_currency':
        if request_data['operation_type'] == 'change':
            await state.update_data(type_end=call.data)
            await call.message.answer(text='Прием / Выдача',
                                      reply_markup=create_kb_plus_minus())
            await Request.plus_minus.set()
            # to plus_or_minus_summ.py
        else:
            await state.update_data(type_end=call.data)
            result = await bot.send_message(chat_id=call.message.chat.id,
                                            text='введите сумму:')
            await state.update_data(_del_message=result.message_id)

            await Request.temp_sum_state.set()
            # to temp_sum_message_handler.py

    elif call.data == 'send_btn':
        await state.update_data(type_end=call.data)

        data_state = await state.get_data()
        request_date = data_state['data_request']
        creator_name = call.message.chat.username

        result = await call.message.answer_sticker(
            'CAACAgIAAxkBAAL9pmBTBOfTdmX0Vi66ktpCQjUQEbHZAAIGAAPANk8Tx8qi9LJucHYeBA'
        )

        try:
            request_id, request_numb, permit_text, created_request = sheet.send_to_google(
                request_data, creator_name)

            if permit_text != '':
                permit.write_new_permit(request_id, request_numb, request_date,
                                        permit_text)

                await notify_about_permit_to_order(request_numb, creator_name)

            permit.clear_table()  # Очищаем таблицу от старых пропусков

        except Exception as e:
            print(e)
            traceback.print_exc()
            await bot.delete_message(chat_id=call.message.chat.id,
                                     message_id=result.message_id)
            await call.message.answer(
                f'Ошибка! Проблемы с таблицами...\n==============================',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
            await state.finish()

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)
        await call.message.answer(f'Заявка успешно создана и в обработке!',
                                  reply_markup=create_kb_coustom_main_menu(
                                      call.message.chat.id))

        sign = all_emoji['квз']
        text_header = f'{sign}Новая заявка{sign}\n'
        text = get_data_chosen_request(created_request)

        text = text_header + text

        await notify_someone(text, 'admin', 'changer', 'executor')
        await notify_in_group_chat(text)

        await state.finish()

        await notify_about_balance()

    elif call.data == 'comment':
        await state.update_data(type_end=call.data)

        result = await call.message.answer(
            text='Напишите коментарий:', reply_markup=create_kb_back_button())

        await state.update_data(_del_message=result.message_id)

        await Request.comment.set()

    elif call.data == 'change_date':
        await call.message.answer(text='Какую дату устанавливаем?',
                                  reply_markup=create_kb_choose_date())
        await state.update_data(type_end=call.data)
        await Request.data_request.set()

    elif call.data == 'order_permit':
        await state.update_data(type_end=call.data)
        result = await call.message.answer('Напишите Ф.И.О. для пропуска:')
        await state.update_data(_del_message=result.message_id)
        await Request.permit.set()

    else:
        await call.message.answer(
            f'Создание заявки отменено\n========================',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()
async def chosen_request_menu(call: CallbackQuery, state: FSMContext):
    '''
    > отложить на выдачу (для доставки, кэшина, обмена)
    > принято частично (для приема кэша, снятия с карт, обмена)
    > закрыть заявку
    > сообщение
    > изменить заявку
    > добавить пропуск
    > добавить комментарий
    > распаковать
    > отменить заявку
    > назад
    > главное меню
    '''
    await call.answer()
    await call.message.delete()

    data_btn = cb_chosen_requests.parse(call.data)

    if data_btn['type_btn'] == 'to_ready_for_give':
        # сбрасываем имя пользователя в текущей заявке
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        chosen_request[10] = '0'
        await state.update_data(chosen_request=chosen_request)
        # сбрасываем имя пользователя чтобы не отображалось
        ###################################################

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        rub, usd, eur = get_minus_FGH(chosen_request)

        if not rub == '': rub = rub + '\n'
        if not usd == '': usd = usd + '\n'

        await call.message.answer(
            text=
            f'Откладываем на выдачу полные суммы по заявке:\n{rub}{usd}{eur}\nили корректировать суммы?',
            reply_markup=create_kb_what_sum()
            # > скорректировать
            # > подтвердить
            # > вернуться к заявке
            # > назад - главное меню
        )

        await Processing.enter_reserve_to_ready_menu.set()

        return

    elif data_btn['type_btn'] == 'recived_chunck':
        # сбрасываем имя пользователя в текущей заявке
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        chosen_request[10] = '0'
        await state.update_data(chosen_request=chosen_request)
        # сбрасываем имя пользователя чтобы не отображалось
        ###################################################

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        await call.message.answer(
            text='Какая из исходных сумм по заявке принята частично?',
            reply_markup=create_kb_sum_correct_chunk(chosen_request)
            # > rub
            # > usd
            # > eur
            # > назад - главное меню
        )
        await Processing.enter_correct_sum_chunk_menu.set()

        return

    elif data_btn['type_btn'] == 'close_request':
        # L(11) - "Исполнено"
        # P(15) - Дата и время исполнения
        # K(10) - Исполнитель - имя исполнителя из телеги
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        text = get_text_before_close_request(chosen_request)
        # text = get_values_MNO_or_FGH_ifMNO_is_empty(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_confirm_close_request(chosen_request)
            # > подтверждаю!
            # > закрыть с другой суммой
            # > скорректировать синие
            # > вернуться к заявке
            # > назад - главное меню
        )
        await Processing.close_request_menu.set()

        return

    elif data_btn['type_btn'] == 'message_to':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        text = get_text_message_to(chosen_request)

        await call.message.answer(text=text,
                                  reply_markup=create_kb_message_keyboard())
        await Processing.message_processing.set()

        return

    elif data_btn['type_btn'] == 'change_request':
        data_state = await state.get_data()

        chosen_request = data_state['chosen_request']
        is_changed = False

        await state.update_data(changed_request=chosen_request)
        await state.update_data(is_changed=is_changed)
        await state.update_data(all_changes_data=[])

        text = get_data_chosen_request(chosen_request) + \
        '\n\n Выберите изменение:'

        await call.message.answer(text,
                                  reply_markup=create_kb_change_request(
                                      chosen_request, is_changed))

        await Processing.change_request_menu.set()

        return

    elif data_btn['type_btn'] == 'add_permit':
        result = await call.message.answer(
            'Введите Ф.И.О. которые будут добавленны')
        await state.update_data(message_to_delete=result.message_id)
        await Processing.add_permit.set()
        # ---> add_permit_message_handler <---

    elif data_btn['type_btn'] == 'add_comment':
        result = await call.message.answer(
            text='Напишите коментарий:', reply_markup=create_kb_back_button())
        await state.update_data(message_to_delete=result.message_id)

        await Processing.add_another_comment.set()
        # ---> ./change_request/change_request_menu

        return

    elif data_btn['type_btn'] == 'unpack':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        username = call.message.chat.username
        chosen_request[10] = username
        chosen_request[11] = 'В обработке'
        chosen_request[12] = '0'
        chosen_request[13] = '0'
        chosen_request[14] = '0'
        chosen_request[16] = '0'
        req_id = chosen_request[1]
        chosen_request[9] = updating_log('UNPACK', username, chosen_request)

        result = await call.message.answer_sticker(
            'CAACAgIAAxkBAAL9pmBTBOfTdmX0Vi66ktpCQjUQEbHZAAIGAAPANk8Tx8qi9LJucHYeBA'
        )

        try:
            sheet.replace_row(chosen_request)
            current_requests,\
            in_processing_requests,\
            ready_to_give_requests =\
            sheet.get_numbs_processing_and_ready_requests()

        except Exception as e:
            print(e)
            await call.message.answer_sticker(
                'CAACAgIAAxkBAAL9rGBTCImgCvHJBZ-doEYr2jkvs6UEAAIaAAPANk8TgtuwtTwGQVceBA'
            )
            await call.message.answer(
                text='Не удалось соединиться с гугл таблицей...',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
            await state.finish()

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)
        await state.update_data(current_requests=current_requests)

        persone = all_emoji['персона']
        text_notify_unpack = get_data_request_unpack(chosen_request)
        text_notify_unpack = text_notify_unpack + f'⚙️ Распаковано в обработку\n{persone}@{username}'

        await notify_someone(text_notify_unpack, 'admin', 'changer',
                             'executor')
        await notify_in_group_chat(text_notify_unpack)

        for request in current_requests:

            if req_id == request[1]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'cancel_request':
        await call.message.answer(
            text='Отменить заявку?',
            reply_markup=create_kb_confirm_cancel_request())
        await Processing.confirm_cancel_request.set()
        # to confirm_cancel_requeest.py

        return

    elif data_btn['type_btn'] == 'show_log':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        data_log = chosen_request[9]

        if data_log == 0 or data_log == '0':
            beauty_text_log = 'лог для этой заявки отсутствует'
        else:
            beauty_text_log = beauty_text_log_builder(data_log)

        await call.message.answer(text=beauty_text_log,
                                  reply_markup=create_kb_under_log())

        await Processing.request_log.set()

        return

    elif data_btn['type_btn'] == 'back':
        data_state = await state.get_data()

        in_processing_requests = data_state['in_processing_requests']
        ready_to_give_requests = data_state['ready_to_give_requests']

        await call.message.answer('Текущие заявки:',
                                  reply_markup=create_kb_current_requests(
                                      in_processing_requests,
                                      ready_to_give_requests))

        await Processing.chosen_request.set()

        return

    elif data_btn['type_btn'] == 'main_menu':
        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return
async def recive_chunk__sum_set(message: Message, state: FSMContext):
    data_state = await state.get_data()
    await bot.delete_message(chat_id=message.chat.id,
                             message_id=data_state['message_to_delete'])
    await bot.delete_message(chat_id=message.chat.id,
                             message_id=message.message_id)

    try:
        chunk_recive__sum = int(message.text)

        if chunk_recive__sum <= 0:
            raise ValueError('f**k off')

    except Exception as e:
        await message.answer(
            text='Изменение отменено. Формат суммы не правильный.',
            reply_markup=create_kb_coustom_main_menu(message.chat.id))
        await state.finish()
        print(e)

        return

    await state.update_data(chunk_recive__sum=chunk_recive__sum)

    data_state = await state.get_data()
    chunk_recive__currency = data_state['chunk_recive__currency']
    # rub usd eur

    if chunk_recive__currency == 'rub':
        chosen_request = data_state['chosen_request']
        chosen_request[12] = chunk_recive__sum
        await state.update_data(chosen_request=chosen_request)
        await message.answer(
            text='Сколько синих?',
            reply_markup=create_kb_what_blue()
            # > без синих
            # > ввести колличество синих
            # > вернуться к заявке
            # > назад - главное меню
        )

        await Processing.enter_blue_amount_chunk_menu.set()
        # to blue_amount_handlers.py

        return

    else:
        chosen_request = data_state['chosen_request']
        chunk_recive__sum = data_state['chunk_recive__sum']

        if chunk_recive__currency == 'usd':
            chosen_request[13] = chunk_recive__sum

        elif chunk_recive__currency == 'eur':
            chosen_request[14] = chunk_recive__sum

        await state.update_data(chosen_request=chosen_request)

        text = get_data_chosen_request(chosen_request)

        await message.answer(text=text, reply_markup=create_kb_confirm_blue())
        await Processing.enter_to_confirm_chunk_menu.set()

        return
Exemple #10
0
async def blue_amount_menu(call: CallbackQuery, state: FSMContext):
    '''
    > подтверждаю!             confirm_close
    > закрыть с другой суммой  another_sum_close
    > скорректировать синие    correct_blue
    > вернуться к заявке       back_to_request
    > назад - главное меню     back__main_menu
    '''
    await call.answer()
    await call.message.delete()
    await state.update_data(close_request_menu='+')

    data_btn = cb_confirm_close_request.parse(call.data)

    if data_btn['type_btn'] == 'confirm_close':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[1]
        initial_com = chosen_request[8]

        for request in current_requests:

            if request_id == request[1]:
                initial_rub = request[5]
                initial_usd = request[6]
                initial_eur = request[7]

                break

        if chosen_request[5] != initial_rub:
            initial_com = initial_com + ' || ' + 'изначальная сумма RUB:' + initial_rub

        if chosen_request[6] != initial_usd:
            initial_com = initial_com + ' || ' + 'изначальная сумма USD:' + initial_usd

        if chosen_request[7] != initial_eur:
            initial_com = initial_com + ' || ' + 'изначальная сумма EUR:' + initial_eur

        chosen_request[8] = initial_com
        user = call.message.chat.username
        chosen_request[10] = user
        chosen_request[11] = 'Исполнено'

        if chosen_request[12] != '0': chosen_request[5] = chosen_request[12]
        else: chosen_request[12] = chosen_request[5]

        if chosen_request[13] != '0': chosen_request[6] = chosen_request[13]
        else: chosen_request[13] = chosen_request[6]

        if chosen_request[14] != '0': chosen_request[7] = chosen_request[14]
        else: chosen_request[14] = chosen_request[7]

        # chosen_request[12] = chosen_request[5]
        # chosen_request[13] = chosen_request[6]
        # chosen_request[14] = chosen_request[7]

        time_close = datetime.today().strftime('%H:%M (%d.%m)')
        chosen_request[15] = time_close

        chosen_request[9] = updating_log('CLOSE', user, chosen_request)

        text = get_text_after_close_request(chosen_request, initial_rub,
                                            initial_usd, initial_eur)

        try:
            result = await call.message.answer_sticker(sticker['go_to_table'])
            sheet.replace_row(chosen_request)

        except Exception as e:
            print(e)
            await bot.delete_message(chat_id=call.message.chat.id,
                                     message_id=result.message_id)
            await call.message.answer_sticker(sticker['not_connection'])
            await call.message.answer(
                text='Не удалось соединиться с гугл таблицей',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)

        await call.message.answer(text='Заявка закрыта!',
                                  reply_markup=create_kb_coustom_main_menu(
                                      call.message.chat.id))

        await notify_someone(text, 'admin', 'changer', 'executor')
        await notify_in_group_chat(text)

        await state.finish()

        return

    elif data_btn['type_btn'] == 'another_sum_close':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']

        await call.message.answer(
            text='Выберите сумму для корректировки',
            reply_markup=create_kb_which_sum_close(chosen_request)
            # > rub
            # > usd
            # > eur
            # > назад главное меню
        )
        await Processing.which_sum_correct_menu.set()

        return

    elif data_btn['type_btn'] == 'correct_blue':
        result = await call.message.answer('Введите колличество синих')
        await state.update_data(message_to_delete=result.message_id)
        await Processing.blue_amount_close.set()

        return

    elif data_btn['type_btn'] == 'back_to_request':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[2]

        for request in current_requests:

            if request_id == request[1]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'back__main_menu':
        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()

        return
async def set_date_from_buttons (
    call:CallbackQuery, state:FSMContext
):
    await call.answer()
    await call.message.delete()

    data_state = await state.get_data()

    changed_request = data_state['changed_request']

    if call.data == 'set_tomorrow_date':
        tomorrow_date = (
            datetime.now() + timedelta(days=1)
        ).strftime("%d.%m")

        is_changed = True

        changed_request[0] = tomorrow_date
        changed_request[10] = call.message.chat.username
        
        await state.update_data(is_changed=is_changed)
        await state.update_data(changed_request=changed_request)

        all_changes_data = data_state['all_changes_data']

        if 'date' not in all_changes_data:
            all_changes_data.append('date')
            await state.update_data(all_changes_data=all_changes_data)

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'

        await call.message.answer (
            text,
            reply_markup=create_kb_change_request(changed_request, is_changed)
        )

        await Processing.change_request_menu.set()

        return

    elif call.data == 'set_after_tomorrow_date':
        after_tomorrow_date = (
            datetime.now() + timedelta(days=2)
        ).strftime("%d.%m")

        is_changed = True

        changed_request[10] = call.message.chat.username
        changed_request[0] = after_tomorrow_date

        await state.update_data(is_changed=is_changed)
        await state.update_data(changed_request=changed_request)

        all_changes_data = data_state['all_changes_data']

        if 'date' not in all_changes_data:
            all_changes_data.append('date')
            await state.update_data(all_changes_data=all_changes_data)

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'

        await call.message.answer (
            text,
            reply_markup=create_kb_change_request(changed_request, is_changed)
        )

        await Processing.change_request_menu.set()

        return

    elif call.data == 'enter_coustom_date':
        result = await call.message.answer('Введите дату в формате ЧЧ.ММ')

        await state.update_data(message_to_delete=result.message_id)
        await Processing.typing_coustom_date.set()

        return

    elif call.data == 'back':
        data_state = await state.get_data()

        changed_request = data_state['changed_request']
        is_changed = data_state['is_changed']

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'
        
        await call.message.answer (
            text,
            reply_markup=create_kb_change_request(changed_request, is_changed)
        )

        await Processing.change_request_menu.set()

        return

    elif call.data == 'main_menu':
        await call.message.answer (
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id)
        )

        await state.finish()
        
        return
Exemple #12
0
async def blue_amount_menu(call: CallbackQuery, state: FSMContext):
    '''
    Обрабатывает кнопки из keyboards/blue_keyboard.py
    > без синих  without_blue
    > ввести колличество синих  enter_blue
    > вернуться к заявке  back_to_request
    > назад - главное меню  back_main_menu
    '''
    await call.answer()
    await call.message.delete()
    await state.update_data(enter_to_blue_amount_menu='+')

    data_btn = cb_what_bluе.parse(call.data)

    if data_btn['type_btn'] == 'without_blue':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        chosen_request[11] = 'Готово к выдаче'
        # chosen_request[12] = chosen_request[5]
        chosen_request[10] = '0'
        chosen_request[16] = '0'
        await state.update_data(chosen_request=chosen_request)

        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_confirm_blue()
            # > подтвердить
            # > вернуться к заявке
            # > назад - главное меню
        )
        await Processing.enter_to_confirm_blue_menu.set()

        return

    elif data_btn['type_btn'] == 'enter_blue':
        result = await call.message.answer('Введите колличество синих')
        await state.update_data(message_to_delete=result.message_id)
        await Processing.blue_amount.set()

        return

    elif data_btn['type_btn'] == 'back_to_request':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[2]

        for request in current_requests:

            if request_id == request[2]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'back_main_menu':

        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return
Exemple #13
0
async def confirm_blue_amount(call: CallbackQuery, state: FSMContext):
    '''
    Обрабатывает кнопки из keyboards/blue_keyboard.py
    > подтвердить  confirm
    > вернуться к заявке  back_to_request
    > назад - главное меню  back_main_menu
    '''
    await call.answer()
    await call.message.delete()
    await state.update_data(enter_to_confirm_blue_menu='+')

    data_btn = cb_confirm_blue.parse(call.data)

    if data_btn['type_btn'] == 'confirm':
        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        user = call.message.chat.username
        chosen_request[10] = user
        chosen_request[11] = 'Готово к выдаче'
        chosen_request[9] = updating_log('RESERVE', user, chosen_request)

        try:
            result = await call.message.answer_sticker(sticker['go_to_table'])
            sheet.replace_row(chosen_request)

        except Exception as e:
            print(e)
            await bot.delete_message(chat_id=call.message.chat.id,
                                     message_id=result.message_id)
            await call.message.answer_sticker(sticker['not_connection'])
            await call.message.answer(
                text='Не удалось соединиться с гугл таблицей',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)

        text = get_data_chosen_request(chosen_request)

        await notify_someone(text, 'admin', 'changer', 'executor')
        await notify_in_group_chat(text)

        request_id = chosen_request[2]
        await call.message.answer(
            text=f'Заявка #N{request_id} отложена на выдачу',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()

        return

    elif data_btn['type_btn'] == 'back_to_request':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[2]

        for request in current_requests:

            if request_id == request[2]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'back_main_menu':
        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()

        return
Exemple #14
0
async def change_request_menu_handler(call:CallbackQuery, state:FSMContext):
    '''
    keyboards/inline/in_processin/change_request_keyboards.create_kb_change_request
    > новая дата            new_date
    > новый номер           new_id
    > переопределить тип    change_type
    > изменить сумму        update_sum
    > другая валюта         more_currency
    > СОХРАНИТЬ ИЗМЕНЕНИЯ   save_changes
    > назад                 back
    > главное меню          main_menu
    '''
    await call.answer()
    await call.message.delete()

    data_state = await state.get_data()
    data_btn = cb_change_request.parse(call.data)

    if data_btn['type_btn'] == 'new_date':
        await call.message.answer (
            text='Выберите дату:',
            reply_markup=create_kb_change_date()
        )
        
        await Processing.select_date.set()

        return

    elif data_btn['type_btn'] == 'new_id':
        result = await call.message.answer (
            text='Введите новый номер заявки'
        )
        
        await state.update_data(message_to_delete=result.message_id)
        await Processing.new_request_id.set()

        return

    elif data_btn['type_btn'] == 'change_type':
        data_state = await state.get_data()
        changed_request = data_state['chosen_request']

        await call.message.answer (
            text='Выберите новый тип заявки',
            reply_markup=create_kb_new_request_type()
        )
        await Processing.new_request_type.set()

        return

    elif data_btn['type_btn'] == 'update_sum':
        await call.message.answer (
            text='Выберите валюту',
            reply_markup=create_kb_choose_currency()
        )
        await Processing.which_sum_change__currency.set()

        return

    elif data_btn['type_btn'] == 'save_changes':
        username = call.message.chat.username
        data_state = await state.get_data()

        changed_request = data_state['changed_request']
        changed_request[10] = username
        
        changed_request_id = changed_request[1]
        changed_request_date = changed_request[0]
        changed_request_numb = changed_request[2]

        changed_request[9] = updating_log('CHANGE', username, changed_request)
        
        try:
            result = await call.message.answer_sticker (
                sticker['go_to_table']
            )
            sheet.replace_row(changed_request)

            if 'date' in data_state['all_changes_data']:
                permit.change_permit_date(changed_request_id, changed_request_date)

            if 'numb' in data_state['all_changes_data']:
                permit.change_permit_numb(changed_request_id, changed_request_numb)


            current_requests,\
            in_processing_requests,\
            ready_to_give_requests =\
            sheet.get_numbs_processing_and_ready_requests()

        except Exception as e:
            print(e)
            await bot.delete_message (
                chat_id=call.message.chat.id,
                message_id=result.message_id
            )

            await call.message.answer_sticker (
                sticker['not_connection']
            )

            await call.message.answer (
                text='Не удалось соединиться с гугл таблицей',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id)
            )

            return

        await bot.delete_message (
            chat_id=call.message.chat.id,
            message_id=result.message_id
        )

        await state.update_data(current_requests=current_requests)
        await state.update_data(in_processing_requests=in_processing_requests)
        await state.update_data(ready_to_give_requests=ready_to_give_requests)

        for request in current_requests:

            if changed_request_id == request[1]:
                await state.update_data(chosen_request=request)

                break

        text = get_data_chosen_request(changed_request)
        
        await call.message.answer (
            text=text,
            reply_markup=create_kb_chosen_request(changed_request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > добавить коментарий
            # > отменить заявку
            # > назад главное меню
        )

        await Processing.enter_chosen_request_menu.set()

        user_id = call.message.chat.id

        change_info_text = get_text_after_change_request (
            data_state['chosen_request'],
            changed_request
        )

        await notify_someone_except_user (
            change_info_text, 
            user_id,
            'admin',
            'changer',
            'executor'
        )
        await notify_in_group_chat(change_info_text)

        return

    elif data_btn['type_btn'] == 'back':
        data_state = await state.get_data()

        chosen_request = data_state['chosen_request']

        text = get_data_chosen_request(chosen_request)
        
        await call.message.answer (
            text=text,
            reply_markup=create_kb_chosen_request(chosen_request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'main_menu':
        await call.message.answer (
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id)
        )

        await state.finish()
        
        return
Exemple #15
0
async def set_date_from_buttons(call: CallbackQuery, state: FSMContext):
    '''
    > выдача                 issuing_office
    > прием                  cash_recive
    > доставка               delivery
    > обмен                  exchange
    > кэшин                  cash_in
    > снятие с карт          cash_out
    > документы              documents
    > назад                  back
    > главное меню           main_menu
    '''
    await call.answer()
    await call.message.delete()

    if call.data == 'issuing_office':
        new_request_type = 'выдача'

    elif call.data == 'cash_recive':
        new_request_type = 'прием'

    elif call.data == 'delivery':
        new_request_type = 'доставка'

    elif call.data == 'exchange':
        new_request_type = 'обмен'

    elif call.data == 'cash_in':
        new_request_type = 'кэшин'

    elif call.data == 'cash_out':
        new_request_type = 'снятие с карт'

    elif call.data == 'documents':
        new_request_type = 'документы'

    elif call.data == 'back':
        data_state = await state.get_data()

        changed_request = data_state['changed_request']
        is_changed = data_state['is_changed']

        text = get_data_chosen_request(changed_request) + \
        '\n\n Выберите изменение:'

        await call.message.answer(text,
                                  reply_markup=create_kb_change_request(
                                      changed_request, is_changed))

        await Processing.change_request_menu.set()

        return

    elif call.data == 'main_menu':
        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()

        return

    data_state = await state.get_data()

    is_changed = True
    changed_request = data_state['changed_request']

    changed_request[3] = new_request_type
    # changed_request[5] = '0'
    # changed_request[6] = '0'
    # changed_request[7] = '0'
    # changed_request[11] = 'В обработке'
    # changed_request[12] = '0'
    # changed_request[13] = '0'
    # changed_request[14] = '0'
    # changed_request[16] = '0'

    await state.update_data(is_changed=is_changed)
    await state.update_data(changed_request=changed_request)

    all_changes_data = data_state['all_changes_data']

    if 'request_type' not in all_changes_data:
        all_changes_data.append('request_type')
        await state.update_data(all_changes_data=all_changes_data)

    text = get_data_chosen_request(changed_request) + \
    '\n\n Выберите изменение:'

    await call.message.answer(text,
                              reply_markup=create_kb_change_request(
                                  changed_request, is_changed))

    await Processing.change_request_menu.set()

    return
async def cancel_request(call: CallbackQuery, state: FSMContext):
    await call.answer()
    await call.message.delete()

    if call.data == 'cancel':
        username = call.message.chat.username
        data_state = await state.get_data()

        request = data_state['chosen_request']
        request[5] = '0'
        request[6] = '0'
        request[7] = '0'
        request[11] = 'Отменена'
        request[12] = '0'
        request[13] = '0'
        request[14] = '0'
        request_id = request[1]
        request[9] = updating_log('CANCEL', username, request)

        result = await call.message.answer_sticker(
            'CAACAgIAAxkBAAL9pmBTBOfTdmX0Vi66ktpCQjUQEbHZAAIGAAPANk8Tx8qi9LJucHYeBA'
        )

        try:
            sheet.replace_row(request)
            permit.delete_permit(request_id)

        except Exception as e:
            print(e)
            await call.message.answer_sticker(
                'CAACAgIAAxkBAAL9rGBTCImgCvHJBZ-doEYr2jkvs6UEAAIaAAPANk8TgtuwtTwGQVceBA'
            )
            await call.message.answer(
                text='Не удалось соединиться с гугл таблицей...',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
            await state.finish()

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)

        request[10] = username
        request_type_emoji = all_emoji[request[3]]
        request_id = request[2]
        persone = all_emoji['персона']

        text = f'{request_type_emoji} #N{request_id}\nОТМЕНЕНА\n{persone} @{username}'

        await call.message.answer(f'Заявка отменена',
                                  reply_markup=create_kb_coustom_main_menu(
                                      call.message.chat.id))

        await notify_someone(text, 'admin', 'changer', 'executor')
        await notify_in_group_chat(text)

        await state.finish()

        return

    elif call.data == 'back_to_request':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[1]

        for request in current_requests:

            if request_id == request[1]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    else:
        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
        await state.finish()

        return
async def close__sum_set(message: Message, state: FSMContext):
    data_state = await state.get_data()

    await bot.delete_message(chat_id=message.chat.id,
                             message_id=data_state['message_to_delete'])
    await bot.delete_message(chat_id=message.chat.id,
                             message_id=message.message_id)

    try:
        which_sum_change__amount = int(message.text)

        if which_sum_change__amount < 0:
            raise ValueError('f**k off')
        which_sum_change__amount = str(which_sum_change__amount)

    except Exception as e:
        await message.answer(
            text='Изменение заявки отменено. Формат суммы не правильный.',
            reply_markup=create_kb_coustom_main_menu(message.chat.id))

        await state.finish()

        return

    await state.update_data(which_sum_change__amount=which_sum_change__amount)

    data_state = await state.get_data()

    which_sum_change__sign = data_state['which_sum_change__sign']
    currency = data_state['which_sum_change__currency']

    if which_sum_change__sign == 'minus':
        sum = '-' + which_sum_change__amount
    else:
        sum = which_sum_change__amount

    changed_request = data_state['changed_request']

    if currency == 'rub':
        changed_request[5] = sum

    if currency == 'usd':
        changed_request[6] = sum

    if currency == 'eur':
        changed_request[7] = sum

    is_changed = True

    await state.update_data(is_changed=is_changed)
    await state.update_data(changed_request=changed_request)

    all_changes_data = data_state['all_changes_data']

    if 'sum' not in all_changes_data:
        all_changes_data.append('sum')
        await state.update_data(all_changes_data=all_changes_data)

    text = get_data_chosen_request(changed_request) + \
    '\n\n Выберите изменение:'

    await message.answer(text,
                         reply_markup=create_kb_change_request(
                             changed_request, is_changed))

    await Processing.change_request_menu.set()

    return
Exemple #18
0
async def choose_currency(call: CallbackQuery, state: FSMContext):
    '''
    > скорректировать
    > подтвердить
    > вернуться к заявке
    > назад - главное меню
    '''
    await call.answer()
    await call.message.delete()
    await state.update_data(enter_reserve_to_ready_menu='+')

    data_btn = cb_what_sum.parse(call.data)

    if data_btn['type_btn'] == 'correct_sum':
        data_state = await state.get_data()
        request = data_state['chosen_request']

        await call.message.answer(
            text='Выберите одну из исходных сумм по заявке',
            reply_markup=create_kb_what_sum_correct(request))
        await Processing.enter_correct_sum_to_ready_menu.set()

        return

    elif data_btn['type_btn'] == 'confirm_sum':
        data_state = await state.get_data()

        chosen_request = data_state['chosen_request']

        # if request with RUB than the first char will be '-'
        if chosen_request[5][0] == '-':
            chosen_request[12] = chosen_request[5]

            if chosen_request[6][0] == '-':
                chosen_request[13] = chosen_request[6]

            if chosen_request[7][0] == '-':
                chosen_request[14] = chosen_request[7]

            await state.update_data(chosen_request=chosen_request)
            await call.message.answer(
                text='Сколько синих?',
                reply_markup=create_kb_what_blue()
                # > без синих
                # > ввести колличество синих
                # > вернуться к заявке
                # > назад - главное меню
            )

            await Processing.enter_to_blue_amount_menu.set()
            # to blue_amount_handlers.py
            return
        # Проверка для синих купюр если рублевая заявка
        ###############################################

        chosen_request[11] = 'Готово к выдаче'
        user = call.message.chat.username
        chosen_request[10] = user

        if chosen_request[6][0] == '-':
            chosen_request[13] = chosen_request[6]

        if chosen_request[7][0] == '-':
            chosen_request[14] = chosen_request[7]

        chosen_request[16] = '0'  # тут синих быть не должно

        text = get_data_chosen_request(chosen_request)

        await call.message.answer(text=text)

        chosen_request[9] = updating_log('RESERVE', user, chosen_request)

        try:
            result = await call.message.answer_sticker(sticker['go_to_table'])
            sheet.replace_row(chosen_request)

        except Exception as e:
            print(e)
            await bot.delete_message(chat_id=call.message.chat.id,
                                     message_id=result.message_id)
            await call.message.answer_sticker(sticker['not_connection'])
            await call.message.answer(
                text='Не удалось соединиться с гугл таблицей',
                reply_markup=create_kb_coustom_main_menu(call.message.chat.id))
            await state.finish()

            return

        await bot.delete_message(chat_id=call.message.chat.id,
                                 message_id=result.message_id)

        text = get_data_chosen_request(chosen_request)

        await notify_someone(text, 'admin', 'changer', 'executor')
        await notify_in_group_chat(text)

        request_id = chosen_request[2]

        await call.message.answer(
            text=f'Заявка #N{request_id} отложена на выдачу',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return

    elif data_btn['type_btn'] == 'back_to_chosen_request':
        data_state = await state.get_data()
        current_requests = data_state['current_requests']
        chosen_request = data_state['chosen_request']
        request_id = chosen_request[2]

        for request in current_requests:

            if request_id == request[2]:
                await state.update_data(chosen_request=request)

                break

        data_state = await state.get_data()
        chosen_request = data_state['chosen_request']
        text = get_data_chosen_request(chosen_request)

        await call.message.answer(
            text=text,
            reply_markup=create_kb_chosen_request(request)
            # > принято частично (для приема кэша, снятия с карт, обмена)
            # > отложить на выдачу (для доставки, кэшина, обмена)
            # > закрыть заявку
            # > сообщение
            # > изменить заявку
            # > отменить заявку
            # > назад главное меню
        )
        await Processing.enter_chosen_request_menu.set()

        return

    elif data_btn['type_btn'] == 'back_main_menu':

        await call.message.answer(
            text='Выход из меню "В РАБОТЕ". Используйте главное меню.',
            reply_markup=create_kb_coustom_main_menu(call.message.chat.id))

        await state.finish()

        return