211 lines
7.5 KiB
Python
211 lines
7.5 KiB
Python
import api
|
||
import database
|
||
from fsm import FSM
|
||
from models import iso_datetime, Message, FSMContext, InputFile
|
||
import keyboards
|
||
import re
|
||
|
||
|
||
async def start(message: Message, state: FSMContext):
|
||
await state.reset_state()
|
||
await state.reset_data()
|
||
await message.answer(
|
||
text='Здравствуйте, %s!\nЧем могу помочь?' % message.from_user.first_name,
|
||
reply_markup=keyboards.start(),
|
||
)
|
||
await FSM.start.set()
|
||
|
||
|
||
async def select_category(message: Message, state: FSMContext):
|
||
await message.answer(
|
||
text='Выберете категорию.',
|
||
reply_markup=await keyboards.categories(),
|
||
)
|
||
await FSM.select_category.set()
|
||
|
||
|
||
async def select_subcategory(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='<b>%(name)s</b>\n\n%(description)s\n\nВыберете подкатегорию.' % dict(data['category']),
|
||
parse_mode='HTML',
|
||
reply_markup=await keyboards.subcategories(data['category']),
|
||
)
|
||
await FSM.select_subcategory.set()
|
||
|
||
|
||
async def select_date(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer_photo(
|
||
photo=InputFile('./static/images/%d.%d.png' % (
|
||
data['subcategory'].category.id,
|
||
data['subcategory'].id
|
||
)),
|
||
caption='<b>%(name)s</b>\n\n%(description)s\n\nВыберете дату.' % dict(data['subcategory']),
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.dates(data['free_to_order']),
|
||
)
|
||
await FSM.select_date.set()
|
||
|
||
|
||
async def select_time_range(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='Выберете время.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.time_ranges(data['free_to_order'], data['date']),
|
||
)
|
||
await FSM.select_time_range.set()
|
||
|
||
|
||
async def input_email_address(message: Message, state: FSMContext):
|
||
await message.answer(
|
||
text='Введите адрес электронной почты для связи.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.back(),
|
||
)
|
||
await FSM.input_email_address.set()
|
||
|
||
|
||
async def input_phone_number(message: Message, state: FSMContext):
|
||
await message.answer(
|
||
text='Введите номер телефона для связи.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.back(),
|
||
)
|
||
await FSM.input_phone_number.set()
|
||
|
||
|
||
async def input_comment(message: Message, state: FSMContext):
|
||
await message.answer(
|
||
text='Опишите вашу проблему.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.back(),
|
||
)
|
||
await FSM.input_comment.set()
|
||
|
||
|
||
async def confirm_order(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='<b>Категория:</b> %s - %s.\n<b>Дата:</b> %s.\n<b>Время:</b> %s.\n<b>Адрес электронной почты:</b> %s.\n<b>Номер телефона:</b> %s.\n<b>Описание проблемы:</b>\n%s' % (
|
||
data['category'].name,
|
||
data['subcategory'].name,
|
||
data['date'].strftime('%d.%m.%Y'),
|
||
'%s - %s' % (
|
||
data['time_range'].start_time.strftime('%H:%M'),
|
||
data['time_range'].end_time.strftime('%H:%M'),
|
||
),
|
||
data['email_address'],
|
||
data['phone_number'],
|
||
data['comment'],
|
||
),
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.order_confirmation(),
|
||
)
|
||
await FSM.confirm_order.set()
|
||
|
||
|
||
async def success_sign_up(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='<b>Обращение %s успешно оформлено!</b>\nВ указанное время с вами свяжется наш специалист.\nСпасибо за обращение!' % data['issue_key'],
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.main_menu(),
|
||
)
|
||
await FSM.success_sign_up.set()
|
||
|
||
|
||
async def select_order(message: Message, state: FSMContext):
|
||
issues = await database.read_issues(message.from_user.id)
|
||
if len(issues) > 0:
|
||
await message.answer(
|
||
text='Выберете обращение.',
|
||
reply_markup=keyboards.issues(issues),
|
||
)
|
||
return await FSM.select_order.set()
|
||
await message.answer(
|
||
text='У вас нет активных обращений.',
|
||
reply_markup=keyboards.main_menu(),
|
||
)
|
||
await FSM.no_orders.set()
|
||
|
||
|
||
async def select_operation(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
issue = await api.read_issue(data['issue'].id)
|
||
datetime_start = re.match(iso_datetime, issue.fields.customfield_10035)
|
||
datetime_end = re.match(iso_datetime, issue.fields.customfield_10036)
|
||
await message.answer(
|
||
text='<b>Категория:</b> %s.\n<b>Дата:</b> %s.\n<b>Время:</b> %s.\n<b>Адрес электронной почты:</b> %s.\n<b>Номер телефона:</b> %s.\n<b>Описание проблемы:</b>\n%s' % (
|
||
issue.fields.customfield_10033,
|
||
'%s.%s.%s' % (
|
||
datetime_start[3],
|
||
datetime_start[2],
|
||
datetime_start[1],
|
||
),
|
||
'%s:%s - %s:%s' % (
|
||
datetime_start[4],
|
||
datetime_start[5],
|
||
datetime_end[4],
|
||
datetime_end[5],
|
||
),
|
||
issue.fields.customfield_10037,
|
||
issue.fields.customfield_10038,
|
||
issue.fields.customfield_10039,
|
||
),
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.operations(),
|
||
)
|
||
await FSM.select_operation.set()
|
||
|
||
|
||
async def reschedule_order_select_date(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='Выберете дату.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.dates(data['free_to_order']),
|
||
)
|
||
await FSM.reschedule_order_select_date.set()
|
||
|
||
|
||
async def reschedule_order_select_time_range(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='Выберете время.',
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.time_ranges(data['free_to_order'], data['date']),
|
||
)
|
||
await FSM.reschedule_order_select_time_range.set()
|
||
|
||
|
||
async def success_reschedule_order(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='<b>Обращение %s успешно изменено!</b>\nВ указанное время с вами свяжется наш специалист.\nСпасибо за обращение!' % data['order'].id,
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.my_orders(),
|
||
)
|
||
await FSM.success_reschedule_order.set()
|
||
|
||
|
||
async def cancel_order(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='Отменить обращение %s?' % data['issue'].key,
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.cancel_order(),
|
||
)
|
||
await FSM.cancel_order.set()
|
||
|
||
|
||
async def success_cancel_order(message: Message, state: FSMContext):
|
||
data = await state.get_data()
|
||
await message.answer(
|
||
text='Обращение %s успешно отменено!' % data['issue'].key,
|
||
parse_mode='HTML',
|
||
reply_markup=keyboards.my_orders(),
|
||
)
|
||
await FSM.success_cancel_order.set()
|