File size: 5,325 Bytes
339f372
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
from aiogram import Router, F
from aiogram.types import Message, CallbackQuery
from aiogram.fsm.context import FSMContext
from app.database import requests as rq
from app.keyboards import admin_keyboards as kb
from app.states import AdminAddService, AdminStates
from app.middleware.authentification import admin_check

router = Router()

@router.message(F.text == 'Отредактировать каталог услуг')
async def catalog_editor_start(message: Message):
    if not await admin_check(message, {}):
        await message.answer("У вас нет доступа к админ-панели")
        return
    await message.answer(
        'Текущие услуги. Нажмите на услугу для редактирования',
        reply_markup=await kb.admin_keyboard_service_catalog()
    )


@router.callback_query(F.data.startswith('change_service_'))
async def edit_service(callback: CallbackQuery):
    await callback.answer('')
    service = await rq.get_service_info(callback.data.split('_')[2])
    await callback.message.answer(f'Услуга {service.service_name} \n\n'
                                  f'Описание: {service.service_description}\n'
                                  f'Цена: {service.service_price} рублей \n\n'
                                  f'Что Вы хотите изменить?',
                                  reply_markup=await kb.admin_change_service(service.id))


@router.callback_query(F.data == 'add_service')
async def add_service(callback: CallbackQuery, state: FSMContext):
    await callback.answer('Добавляем услугу')
    await state.set_state(AdminAddService.admin_add_name)
    await callback.message.answer('Введите название новой услуги')


@router.message(AdminAddService.admin_add_name)
async def add_name(message: Message, state: FSMContext):
    await state.update_data(name=message.text)
    await state.set_state(AdminAddService.admin_add_desc)
    await message.answer('Введите описание новой услуги')


@router.message(AdminAddService.admin_add_desc)
async def add_desc(message: Message, state: FSMContext):
    await state.update_data(desc=message.text)
    await state.set_state(AdminAddService.admin_add_price)
    await message.answer('Введите цену услуги в рублях')


@router.message(AdminAddService.admin_add_price)
async def add_price(message: Message, state: FSMContext):
    await state.update_data(price=message.text)
    data = await state.get_data()
    await rq.add_service(data['name'], data['desc'], data['price'], True)
    await message.answer('Услуга сохранена! Теперь можно изменить ее, выбрав услугу в меню и отредактировав',
                         reply_markup=kb.admin_back)
    await state.clear()


@router.callback_query(F.data.startswith('editservice_'))
async def begin_service_edit(callback: CallbackQuery, state: FSMContext):
    await callback.answer('')
    await state.set_state(AdminStates.admin_edit_service)
    await state.update_data(service_id=callback.data.split('_')[2])
    await state.update_data(parameter_changed=callback.data.split("_")[1])
    replace_dict = {'name': 'ое название', 'desc': 'ое описание', 'price': 'ую цену'}
    await callback.message.answer(f'Введите нов{replace_dict[callback.data.split("_")[1]]} услуги')


@router.message(AdminStates.admin_edit_service)
async def finish_service_edit(message: Message, state: FSMContext):
    await state.update_data(change=message.text)
    data = await state.get_data()
    await rq.edit_service(data['service_id'], data['parameter_changed'], data['change'], True)
    await state.clear()
    await message.answer(f'Информация была обновлена, можно вернуться на главную', reply_markup=kb.admin_back)


@router.callback_query(F.data.startswith('deleteservice_'))
async def confirm_service_deletion(callback: CallbackQuery, state: FSMContext):
    await callback.answer('')
    await state.set_state(AdminStates.admin_delete_service)
    await state.update_data(serv_id=callback.data.split("_")[1])
    await callback.message.answer(f'Вы уверены, что хотите удалить услугу?',
                            reply_markup=kb.yes_no_keyboard)


@router.message(AdminStates.admin_delete_service)
async def delete_or_not_delete(message: Message, state: FSMContext):
    if message.text == 'Нет':
        await state.clear()
        await message.answer('Тогда вернемся в меню :)', reply_markup=kb.admin_back)

    if message.text == 'Да':
        data = await state.get_data()
        await rq.delete_service(data['serv_id'])
        await state.clear()
        await message.answer('Услуга была успешно удалена! Можно вернуться в меню', reply_markup=kb.admin_back)


@router.callback_query(F.data == 'admin_to_main')
async def return_to_main(callback: CallbackQuery):
    await callback.answer('Возвращаемся в меню')
    await callback.message.answer('Здравствуйте! Что Вы хотите сделать?', reply_markup=kb.admin_main)