浏览代码

Обновлена выборка даты

vmshay 2 年之前
父节点
当前提交
49b82b52d8

+ 2 - 2
bot/database.py

@@ -59,7 +59,7 @@ class Database:
             return False
         elif len(result_set) > 0:
             for row in result_set:
-                event_data = {"desc": row['description'], "date": row['date']}
+                event_data = f"Описание {row['description']}\n Дата {row['dat']}"
                 events_list.append(event_data)
             return events_list
 
@@ -83,7 +83,7 @@ class Database:
         self.close()
 
 
-# Db = Database()
+db = Database()
 # data = Db.sql_simple_check("select tg_id from user_table where tg_id = 338836490 and approved = 0")
 # data = Db.sql_simple_check(simple_select(columns="tg_id", table="user_table", tg_id='338836490', approved='0'))
 # print(data)

+ 31 - 3
bot/functions.py

@@ -1,6 +1,7 @@
 import phonenumbers
 import re
 import datetime
+from datetime import date, timedelta
 
 
 def validate_phone(number):
@@ -55,12 +56,39 @@ def beauty_reg_request(data):
 
 
 def beauty_all_events(data):
-    result = (f"Инициатор : {data['Инициатор']}\n"
-              f"Событие : {data['Описание']}\n"
-              f"Дата: {data['Дата']}")
+    result = (f"Инициатор:\n{data['Инициатор']}\n\n"
+              f"Событие:\n{data['Описание']}\n\n"
+              f"Дата:\n{data['Дата']}")
     return result
 
 
 def make_date():
     today = datetime.datetime.now()
     return datetime.datetime.strftime(today, '%d.%m.%Y')
+
+
+def date_range(range):
+    today = date.today()
+    weekday = today.weekday()
+    days_per_month = {1: 31, 2: 28, 3: 30, 4: 31, 5: 30, 6: 31,
+                      7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31}
+    if range == "today":
+        return f"{today}"
+
+    if range == "week":
+        first = today - timedelta(days=weekday)
+        # upper bound
+        last = today + timedelta(days=(6 - weekday))
+        return f"{first} {last}"
+
+    if range == "month":
+        first = today.replace(day=1)
+        # вторая дата
+        try:
+            last = today.replace(day=days_per_month[today.month])
+        except ValueError:
+            if today.month == 2:  # Not a leap year
+                last = today.replace(day=28)
+            else:
+                raise
+        return f"{first}  {last}"

+ 9 - 1
bot/keyboards.py

@@ -5,7 +5,7 @@ import datetime
 
 # Основная
 button_bind = KeyboardButton('🎯 Запланировать мероприятие')
-button_my = KeyboardButton('🗒 Мои события')
+button_my = KeyboardButton('🗒 Мои события')
 button_all = KeyboardButton('📅 Все события')
 button_config = KeyboardButton("👮 Управление")
 main_kb = ReplyKeyboardMarkup(resize_keyboard=True)
@@ -52,6 +52,14 @@ def user_manage_kb(b_accept, b_deny, b_next, b_prev, b_count):
     return keyboard
 
 
+def events_range_kb():
+    keyboard = InlineKeyboardMarkup()
+    today_button = InlineKeyboardButton(text="Сегодня",callback_data="today")
+    week_button = InlineKeyboardButton(text="Эта неделя", callback_data="week")
+    month_button = InlineKeyboardButton(text="Текущий месяц",callback_data="month")
+    keyboard.add(today_button,week_button,month_button)
+    return keyboard
+
 # Генератор календаря
 def make_calendar():
     current_date = datetime.date.today()

+ 8 - 8
handlers/admin/admin_menu.py

@@ -4,12 +4,12 @@ from bot import database
 
 
 async def enter_admin_menu(message: types.message):
-    Db = database.Database()
-    if not Db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    elif not Db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
+    elif not db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
         await message.answer("Доступ только для администраторов")
     else:
         await message.delete()
@@ -18,12 +18,12 @@ async def enter_admin_menu(message: types.message):
 
 
 async def exit_admin_menu(message: types.message):
-    Db = database.Database()
-    if not Db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    elif not Db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
+    elif not db.sql_simple_check(sql=f'select admin from user_table where tg_id = {message.from_user.id}'):
         await message.answer("Доступ только для администраторов", reply_markup=main_kb)
     else:
         await message.answer("Выход", reply_markup=main_kb)

+ 16 - 16
handlers/admin/manage_users.py

@@ -5,15 +5,15 @@ from bot.keyboards import user_manage_kb,register_kb
 
 
 async def list_users(message: types.Message):
-    Db = database.Database()
-    if not Db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
-    if not Db.sql_parse_users("select id,name,phone from user_table where approved = '0'"):
+    if not db.sql_parse_users("select id,name,phone from user_table where approved = '0'"):
         await message.answer('Заявки на регистрацию отсутствуют')
     else:
-        data = Db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
+        data = db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
         await message.answer(beauty_reg_request(data[0]),
                              reply_markup=user_manage_kb(f"accept:{data[0]['ID']}",
                                                          f"deny:{data[0]['ID']}",
@@ -23,8 +23,8 @@ async def list_users(message: types.Message):
 
 
 async def next_user_page(call: types.CallbackQuery):
-    Db = database.Database()
-    data = Db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
+    db = database.Database()
+    data = db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
     index = int(call.data.split(":")[1]) + 1
 
     if not data:
@@ -43,8 +43,8 @@ async def next_user_page(call: types.CallbackQuery):
 
 
 async def prev_user_page(call: types.CallbackQuery):
-    Db = database.Database()
-    data = Db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
+    db = database.Database()
+    data = db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
     index = int(call.data.split(":")[1])-1
     # print(f"prev_index{index}")
     if not data:
@@ -62,21 +62,21 @@ async def prev_user_page(call: types.CallbackQuery):
 
 
 async def accept_user(call: types.CallbackQuery):
-    Db = database.Database()
-    data = Db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
-    # data = Db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
+    db = database.Database()
+    data = db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
+    # data = db.sql_parse_users("select id,name,phone from user_table where approved = '0'")
     index = int(call.message.reply_markup.inline_keyboard[1][1].text.split("/")[0])-1
     # print(index)
 
 
     if len(data) == 1:
         user_id = data[index]['ID']
-        Db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
+        db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
         await call.message.delete()
         await call.message.answer('Заявки на регистрацию отсутствуют')
     elif index == 0:
         user_id = data[index]['ID']
-        Db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
+        db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
         await call.message.edit_text(beauty_reg_request(data[index+1]),
                                      reply_markup=user_manage_kb(f"accept:{user_id}",
                                                                  f"deny:{user_id}",
@@ -85,7 +85,7 @@ async def accept_user(call: types.CallbackQuery):
                                                                  f"{index+1}/{len(data) - 1}"))
     elif index == len(data)-1:
         user_id = data[index]['ID']
-        Db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
+        db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
         await call.message.edit_text(beauty_reg_request(data[index-1]),
                                      reply_markup=user_manage_kb(f"accept:{user_id}",
                                                                  f"deny:{user_id}",
@@ -94,7 +94,7 @@ async def accept_user(call: types.CallbackQuery):
                                                                  f"{index}/{len(data) - 1}"))
     else:
         user_id = data[index]['ID']
-        Db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
+        db.sql_query_send(f"UPDATE booking.user_table SET approved='1' WHERE id={user_id}")
         await call.message.edit_text(beauty_reg_request(data[index-1]),
                                      reply_markup=user_manage_kb(f"accept:{user_id}",
                                                                  f"deny:{user_id}",

+ 3 - 3
handlers/start.py

@@ -5,13 +5,13 @@ from bot import database
 
 # @dp.message_handler(commands=['start'])
 async def start_cmd(message: types.Message):
-    Db = database.Database()
+    db = database.Database()
     await message.delete()
-    if not Db.sql_simple_check(f"select tg_id from user_table where tg_id ={message.from_user.id}"):
+    if not db.sql_simple_check(f"select tg_id from user_table where tg_id ={message.from_user.id}"):
         await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n\n"
                              "Для доступа к функциям нужно пройти простую регистрацию\n",
                              reply_markup=register_kb)
-    elif not Db.sql_simple_check(f"select approved from user_table where tg_id={message.from_user.id}"):
+    elif not db.sql_simple_check(f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.answer(f"Ваша заявка находится на рассмотрернии", reply_markup=check_register_kb)
     else:
         await message.answer(f"🤖Вас приветствует лакей ТТИТ🤖\n"

+ 37 - 19
handlers/user/events.py

@@ -1,20 +1,19 @@
 from aiogram import types, Dispatcher
 from bot import database
-from bot.keyboards import register_kb, make_calendar
-from bot.functions import make_date,beauty_all_events
+from bot.keyboards import register_kb, make_calendar, events_range_kb
+from bot.functions import make_date, date_range
 
 
 async def make_event(message: types.message):
-    Db = database.Database()
-    if not Db.sql_simple_check(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
     else:
         if message.text == "🎯 Запланировать мероприятие":
-
             await message.delete()
-            await message.answer(f"Выберете дату чтобы увидеть список мероприятий\n\n"
+            await message.answer(f"выберите дату чтобы увидеть список мероприятий\n\n"
                                  f"Так же календарь мероприятий можно посмотреть в "
                                  f"<a href=moodle.tomtit.tomsk.ru>Moodle</a>\n\n"
                                  f"Сегодняшняя дата <b>{make_date()}</b>", reply_markup=make_calendar())
@@ -25,32 +24,51 @@ async def select_date(call: types.CallbackQuery):
 
 
 async def my_events(message: types.Message):
-    Db = database.Database()
-    if not Db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
     else:
-        events = Db.sql_parse_user_events(f"select description,`date` from events_table WHERE owner ={message.from_user.id}")
+        events = db.sql_parse_user_events(
+            f"select description,`dat` from events_table WHERE owner = {message.from_user.id}")
         await message.answer("Список событий которые Вы запланировали")
+        for event in events:
+            await message.answer(event)
+            # await message.answer(beauty_all_events(event))
 
 
 async def all_events(message: types.Message):
-    Db = database.Database()
-    if not Db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
-            not Db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
+    db = database.Database()
+    if not db.sql_simple_check(sql=f"select tg_id from user_table where tg_id ={message.from_user.id}") or \
+            not db.sql_simple_check(sql=f"select approved from user_table where tg_id={message.from_user.id}"):
         await message.delete()
         await message.answer("Команды станут доступны после регистрации", reply_markup=register_kb)
     else:
-        events = Db.sql_parse_all_events(f"select events_table.description, user_table.name, events_table.dat from events_table inner join user_table on events_table.owner = user_table.tg_id")
-        await message.answer("Список всех событий")
-        for event in events:
-            await message.answer(beauty_all_events(event))
+        await message.answer("Укажите диапазон дат или выберите кнопкой", reply_markup=events_range_kb())
+
+
+async def select_range(call: types.CallbackQuery):
+    if call.data == "today":
+        await call.message.answer(date_range(call.data))
+    if call.data == "week":
+        await call.message.answer(date_range(call.data))
+    if call.data == "month":
+        await call.message.answer(date_range(call.data))
+
+
+        # events = db.sql_parse_all_events(f"select events_table.description, user_table.name, events_table.dat from events_table inner join user_table on events_table.owner = user_table.tg_id")
+
+
+#        await message.answer("Список всех событий")
+#        for event in events:
+#           await message.answer(beauty_all_events(event))
 
 
 def events_register(dp: Dispatcher):
     dp.register_message_handler(make_event, text="🎯 Запланировать мероприятие")
-    dp.register_message_handler(my_events, text="🗒 ️Мои события")
+    dp.register_message_handler(my_events, text="🗒 Мои события")
     dp.register_message_handler(all_events, text="📅 Все события")
 
     dp.register_callback_query_handler(select_date, text_startswith='date_')
+    dp.register_callback_query_handler(select_range, text=(['month', 'week', 'today']))

+ 8 - 9
handlers/user/registration.py

@@ -7,11 +7,11 @@ from bot import database
 
 
 async def registration(message: types.Message):
-    Db = database.Database()
+    db = database.Database()
     await message.delete()
-    if Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
+    if db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
         await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
-    elif Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
+    elif db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
         msg = await message.answer("Вы зарегистрированны", reply_markup=main_kb)
         await msg.delete()
     else:
@@ -26,7 +26,6 @@ async def registration(message: types.Message):
                              f"<b>89995554433</b>\n"
                              f"<b>8-999-888-11-22</b>\n"
                              f"<b>+7-999-888-11-22</b>", reply_markup=reset_register_kb)
-
         await RegisterStates.phone.set()
 
 
@@ -42,7 +41,7 @@ async def get_number(message: types.Message, state: FSMContext):
 
 
 async def get_fio(message: types.Message, state: FSMContext):
-    Db = database.Database()
+    db = database.Database()
     if reject_cmd(message.text):
         await message.delete()
         await message.answer("Нельзя использовать команды", reply_markup=reset_register_kb)
@@ -58,7 +57,7 @@ async def get_fio(message: types.Message, state: FSMContext):
         await message.answer(f"Спасибо за регистрацию\n"
                              f"Вы сможете воспользоваться функциями после одобрения\n", reply_markup=check_register_kb)
 
-        Db.sql_query_send(f"INSERT INTO user_table"
+        db.sql_query_send(f"INSERT INTO user_table"
                           f"(tg_id,name,phone) VALUES "
                           f"({reg_data['id']},"
                           f"'{reg_data['FIO']}'"
@@ -72,11 +71,11 @@ async def reset_register(message: types.Message, state: FSMContext):
 
 
 async def check_reg_status(message: types.Message):
-    Db = database.Database()
+    db = database.Database()
     await message.delete()
-    if Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
+    if db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 0'):
         await message.answer("Ваша заявка рассматривается", reply_markup=check_register_kb)
-    elif Db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
+    elif db.sql_simple_check(f'select tg_id from user_table where tg_id = {message.from_user.id} and approved = 1'):
         await message.answer("Вы зарегистрированны", reply_markup=main_kb)
 
 

+ 5 - 0
handlers/user/states.py

@@ -12,3 +12,8 @@ class BookingState(StatesGroup):
     description = State()
     group = State()
     persons = State()
+
+
+class DateRangeState(StatesGroup):
+    date = State()
+