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
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
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
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
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
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
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
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
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
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