|
@@ -1,36 +1,37 @@
|
|
|
import asyncio
|
|
|
+import calendar
|
|
|
+from datetime import date, datetime
|
|
|
+
|
|
|
from aiogram import types, Dispatcher
|
|
|
+from aiogram.dispatcher.storage import FSMContext
|
|
|
+
|
|
|
from bot import database, sql
|
|
|
-from bot.keyboards import register_kb, make_calendar, events_kb, cancel_booking, main_kb
|
|
|
from bot.functions import make_date, time_validator, normalize_time, to_quotes, check_overlap, beauty_booked_time
|
|
|
-from handlers.user.states import BookingState
|
|
|
-from aiogram.dispatcher.storage import FSMContext
|
|
|
-from bot import messages
|
|
|
-from handlers.admin.notifications import new_event
|
|
|
-from datetime import date, datetime
|
|
|
-import calendar
|
|
|
+from bot.keyboards import make_calendar, events_kb, cancel_booking, main_kb
|
|
|
+from bot.notifications import new_event
|
|
|
+from bot.states import BookingState
|
|
|
+
|
|
|
|
|
|
+async def make_event(call: types.CallbackQuery):
|
|
|
|
|
|
-async def make_event(message: types.message):
|
|
|
today = date.today()
|
|
|
month = today.month
|
|
|
days_in_month = calendar.monthrange(today.year, month)[1]
|
|
|
db = database.Database()
|
|
|
- if not db.sql_fetchone(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
|
|
|
- not db.sql_fetchone(f"select approved from user_table where tg_id={message.from_user.id}"):
|
|
|
- await message.delete()
|
|
|
- await message.answer(messages.non_register, reply_markup=register_kb)
|
|
|
- else:
|
|
|
- if message.text == "🎯 Запланировать мероприятие":
|
|
|
- await message.delete()
|
|
|
- await message.answer(messages.events_welcome(make_date()), reply_markup=make_calendar(month,
|
|
|
- days_in_month,
|
|
|
- f"month_prev:{month}",
|
|
|
- f"month_next:{month}"))
|
|
|
+ text = (f"выберите дату чтобы увидеть список мероприятий\n\n"
|
|
|
+ f"Так же календарь мероприятий можно посмотреть в "
|
|
|
+ f"<a href=moodle.tomtit-tomsk.ru>Moodle</a>\n\n"
|
|
|
+ f"Сегодняшняя дата <b>{make_date()}</b>")
|
|
|
+ await call.message.edit_text(text, reply_markup=make_calendar(month,
|
|
|
+ days_in_month,
|
|
|
+ f"month_prev:{month}",
|
|
|
+ f"month_next:{month}"))
|
|
|
|
|
|
|
|
|
async def select_date(call: types.CallbackQuery, state: FSMContext):
|
|
|
db = database.Database()
|
|
|
+ username = db.sql_fetchone(f"select name from user_table where tg_id = {call.from_user.id}")
|
|
|
+ await state.update_data(username=username)
|
|
|
date = call.data.split("_")[1]
|
|
|
booked = db.sql_fetchall(sql.sql_booked_time(date))
|
|
|
today = datetime.strftime(datetime.today(), '%Y-%m-%d')
|
|
@@ -79,22 +80,25 @@ async def select_date(call: types.CallbackQuery, state: FSMContext):
|
|
|
|
|
|
|
|
|
async def edit_date(call: types.CallbackQuery, state: FSMContext):
|
|
|
- today = date.today()
|
|
|
- month = today.month
|
|
|
- days_in_month = calendar.monthrange(today.year, month)[1]
|
|
|
- await call.message.edit_text(f"выберите дату чтобы увидеть список мероприятий\n\n"
|
|
|
- f"Так же календарь мероприятий можно посмотреть в "
|
|
|
- f"<a href=moodle.tomtit-tomsk.ru>Moodle</a>\n\n"
|
|
|
- f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar(month,
|
|
|
- days_in_month,
|
|
|
- f"month_prev:{month}",
|
|
|
- f"month_next:{month}"))
|
|
|
-
|
|
|
+ await call.message.edit_text(f"🤖Вас приветствует бот 405 кабинета🤖\n"
|
|
|
+ f"Я помогу Вам запланировать мероприятие.\n\n"
|
|
|
+ f"Вот что можно сделать:\n"
|
|
|
+ f"<b>Запланировать мероприятие</b>\n"
|
|
|
+ f"Планирование мероприятия\n\n"
|
|
|
+ f"<b>Мои события</b>\n"
|
|
|
+ f"События запланированные Вами\n\n"
|
|
|
+ f"<b>Все события</b>\n"
|
|
|
+ f"События всех пользователей\n"
|
|
|
+ f"с выборкой по интервалам\n\n"
|
|
|
+ f"Если есть пожелания или замечания\n"
|
|
|
+ f"Можете обратиться к @FeldwebelWillman\n"
|
|
|
+ f"Или воспользовтаься обратной связью /feedback",
|
|
|
+ reply_markup=main_kb())
|
|
|
await state.finish()
|
|
|
|
|
|
|
|
|
async def booking_date(call: types.CallbackQuery):
|
|
|
- await call.message.answer("Введите диапазон времени\n"
|
|
|
+ await call.message.edit_text("Введите диапазон времени\n"
|
|
|
"Возможные форматы\n\n"
|
|
|
"13.00 15.30\n"
|
|
|
"8.00-9.00\n"
|
|
@@ -132,44 +136,31 @@ async def send_event(message: types.Message, state: FSMContext):
|
|
|
await message.answer("Описание слишком длинное")
|
|
|
|
|
|
else:
|
|
|
+
|
|
|
await state.update_data(description=message.text)
|
|
|
await state.update_data(approved=0)
|
|
|
data = await state.get_data()
|
|
|
+ db.sql_query_send(sql.sql_send_event(data))
|
|
|
await message.delete()
|
|
|
await message.answer("Заявка принята\n"
|
|
|
"Уведомлять администраторов не требуется\n"
|
|
|
- "они получат оповощение автоматически", reply_markup=main_kb)
|
|
|
+ "они получат оповощение автоматически\n"
|
|
|
+ "Для новой заявки используйте /start")
|
|
|
+ event_id = db.sql_fetchone('select max(id) from events_table')
|
|
|
+ await state.update_data(id=event_id)
|
|
|
+ data = await state.get_data()
|
|
|
await state.finish()
|
|
|
- db.sql_query_send(sql.sql_send_event(data))
|
|
|
- await new_event()
|
|
|
-
|
|
|
+ await new_event(data)
|
|
|
|
|
|
-async def next_month(call: types.CallbackQuery):
|
|
|
- m_id = int(call.data.split(":")[1])+1
|
|
|
- days = calendar.monthrange(2022, m_id)[1]
|
|
|
- await call.message.edit_reply_markup(reply_markup=make_calendar(m_id,
|
|
|
- days,
|
|
|
- f"month_prev:{m_id}",
|
|
|
- f"month_next:{m_id}"))
|
|
|
|
|
|
-
|
|
|
-async def prev_month(call: types.CallbackQuery):
|
|
|
- m_id = int(call.data.split(":")[1])-1
|
|
|
- days = calendar.monthrange(2022, m_id)[1]
|
|
|
- await call.message.edit_reply_markup(reply_markup=make_calendar(m_id,
|
|
|
- days,
|
|
|
- f"month_prev:{m_id}",
|
|
|
- f"month_next:{m_id}"))
|
|
|
-
|
|
|
-
|
|
|
-def events_register(dp: Dispatcher):
|
|
|
- dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
|
|
|
+def register(dp: Dispatcher):
|
|
|
+ dp.register_callback_query_handler(make_event, text='plain')
|
|
|
dp.register_callback_query_handler(select_date, text_startswith='date_')
|
|
|
+ dp.register_callback_query_handler(edit_date, text='cancel_booking')
|
|
|
+ dp.register_callback_query_handler(booking_date, text='booking', state=BookingState.start)
|
|
|
dp.register_callback_query_handler(edit_date, text=['change', 'cancel_booking'], state=[BookingState.start,
|
|
|
BookingState.time,
|
|
|
BookingState.description])
|
|
|
- dp.register_callback_query_handler(booking_date, text='booking', state=BookingState.start)
|
|
|
+
|
|
|
dp.register_message_handler(get_time, state=BookingState.time)
|
|
|
- dp.register_message_handler(send_event, state=BookingState.description)
|
|
|
- dp.register_callback_query_handler(next_month, text_startswith='month_next')
|
|
|
- dp.register_callback_query_handler(prev_month, text_startswith='month_prev')
|
|
|
+ dp.register_message_handler(send_event, state=BookingState.description)
|