diff --git a/src/api/googlesheets.py b/src/api/googlesheets.py
index 6ce7ef57..9198ee1c 100644
--- a/src/api/googlesheets.py
+++ b/src/api/googlesheets.py
@@ -15,8 +15,6 @@
from settings.settings import RANGE_NAME
config = parse_settings()
-SPREADSHEET_ID = {}
-SPREADSHEET_ID.setdefault('Домик', config.sheets.sheet_id)
filename = 'credentials.json'
path = os.getenv('CONFIG_PATH')
@@ -53,10 +51,14 @@ def get_values(
return result.get('values', [])
-def get_data_from_spreadsheet(sheet, value_render_option='FORMATTED_VALUE'):
+def get_data_from_spreadsheet(
+ spreadsheet_id,
+ sheet,
+ value_render_option='FORMATTED_VALUE'
+):
try:
values = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
sheet,
value_render_option
)
@@ -71,36 +73,9 @@ def get_data_from_spreadsheet(sheet, value_render_option='FORMATTED_VALUE'):
raise ConnectionError
-def get_quality_of_seats(event_id: str, keys: List[str]):
- try:
- dict_column_name, len_column = get_column_info('База спектаклей_')
-
- values = get_values(
- SPREADSHEET_ID['Домик'],
- f'{RANGE_NAME['База спектаклей']}'
- )
-
- if not values:
- googlesheets_logger.info('No data found')
- raise ValueError
-
- return_data = []
- for row in values:
- if event_id == row[dict_column_name['event_id']]:
- for key in keys:
- return_data.append(row[dict_column_name[key]])
- return return_data
- raise KeyError
- except HttpError as err:
- googlesheets_logger.error(err)
- except KeyError:
- googlesheets_logger.error(f'Показа с event_id = {event_id} не найдено')
-
-
-def get_column_info(name_sheet):
+def get_column_info(spreadsheet_id, name_sheet):
data_column_name = get_data_from_spreadsheet(
- RANGE_NAME[name_sheet] + f'2:2'
- )
+ spreadsheet_id, RANGE_NAME[name_sheet] + f'2:2')
dict_column_name: Dict[int | str, int] = {}
for i, item in enumerate(data_column_name[0]):
if item == '':
@@ -117,15 +92,17 @@ def get_column_info(name_sheet):
def write_data_reserve(
+ spreadsheet_id,
event_id,
numbers: List[int],
option: int = 1
) -> None:
try:
- dict_column_name, len_column = get_column_info('База спектаклей_')
+ dict_column_name, len_column = get_column_info(
+ spreadsheet_id, 'База спектаклей_')
values = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
f'{RANGE_NAME['База спектаклей']}',
value_render_option='UNFORMATTED_VALUE'
)
@@ -204,7 +181,7 @@ def write_data_reserve(
'data': data
}
request = sheet.values().batchUpdate(
- spreadsheetId=SPREADSHEET_ID['Домик'],
+ spreadsheetId=spreadsheet_id,
body=value_range_body
)
try:
@@ -226,10 +203,11 @@ def write_data_reserve(
async def write_client_reserve(
+ spreadsheet_id,
context: ContextTypes.DEFAULT_TYPE,
chat_id: int,
base_ticket: BaseTicket,
- ticket_status_value,
+ ticket_status_value
) -> int:
# TODO Заменить на запись в другой лист
reserve_user_data = context.user_data['reserve_user_data']
@@ -240,7 +218,7 @@ async def write_client_reserve(
try:
values_column = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
RANGE_NAME['База клиентов']
)
@@ -259,9 +237,11 @@ async def write_client_reserve(
values[i].append(chat_id)
values[i].append(client_data['name_adult'])
values[i].append(client_data['phone'])
- values[i].append(' | '.join([i[0] for i in client_data['data_children']]))
+ values[i].append(
+ ' | '.join([i[0] for i in client_data['data_children']]))
values[i].append('')
- values[i].append(' | '.join([i[1] for i in client_data['data_children']]))
+ values[i].append(
+ ' | '.join([i[1] for i in client_data['data_children']]))
# Спектакль
values[i].append(event_id)
@@ -304,7 +284,8 @@ async def write_client_reserve(
range_sheet = (RANGE_NAME['База клиентов_'] +
f'R1C1:R1C{end_column_index}')
- execute_append_googlesheet(sheet,
+ execute_append_googlesheet(spreadsheet_id,
+ sheet,
range_sheet,
value_input_option,
response_value_render_option,
@@ -319,15 +300,17 @@ async def write_client_reserve(
def update_ticket_in_gspread(
+ spreadsheet_id,
ticket_id: int,
ticket_status: str,
option: int = 1
) -> None:
try:
- dict_column_name, len_column = get_column_info('База клиентов_')
+ dict_column_name, len_column = get_column_info(
+ spreadsheet_id, 'База клиентов_')
values = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
f'{RANGE_NAME['База клиентов']}',
value_render_option='UNFORMATTED_VALUE'
)
@@ -374,7 +357,7 @@ def update_ticket_in_gspread(
'data': data
}
request = sheet.values().batchUpdate(
- spreadsheetId=SPREADSHEET_ID['Домик'],
+ spreadsheetId=spreadsheet_id,
body=value_range_body
)
try:
@@ -420,12 +403,14 @@ def get_flags_by_ticket_status(ticket_status_value):
def write_client_cme(
- custom_made_event: CustomMadeEvent,
+ spreadsheet_id,
+ custom_made_event: CustomMadeEvent
) -> None:
- dict_column_name, len_column = get_column_info('База ДР_')
+ dict_column_name, len_column = get_column_info(
+ spreadsheet_id, 'База ДР_')
values_column = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
RANGE_NAME['База ДР']
)
@@ -452,7 +437,7 @@ def write_client_cme(
elif key == 'name_theater':
values[0].append(
'=VLOOKUP('
- 'INDEX($1:$66;ROW();MATCH("theater_event_id";$2:$2;0));'
+ 'INDEX($A:$Z;ROW();MATCH("theater_event_id";$2:$2;0));'
'\'Репертуар\'!$A$3:$F;'
'MATCH("name";\'Репертуар\'!$2:$2;0)'
')'
@@ -473,17 +458,21 @@ def write_client_cme(
range_sheet = (RANGE_NAME['База ДР_'] +
f'R1C1:R1C{end_column_index}')
- execute_append_googlesheet(sheet,
+ execute_append_googlesheet(spreadsheet_id,
+ sheet,
range_sheet,
value_input_option,
response_value_render_option,
value_range_body)
-def write_client_list_waiting(context: ContextTypes.DEFAULT_TYPE):
+def write_client_list_waiting(
+ spreadsheet_id,
+ context: ContextTypes.DEFAULT_TYPE
+):
try:
values_column = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
RANGE_NAME['Лист ожидания']
)
@@ -535,7 +524,8 @@ def write_client_list_waiting(context: ContextTypes.DEFAULT_TYPE):
range_sheet = (RANGE_NAME['Лист ожидания_'] +
f'R1C1:R1C{end_column_index}')
- execute_append_googlesheet(sheet,
+ execute_append_googlesheet(spreadsheet_id,
+ sheet,
range_sheet,
value_input_option,
response_value_render_option,
@@ -545,10 +535,15 @@ def write_client_list_waiting(context: ContextTypes.DEFAULT_TYPE):
googlesheets_logger.error(err)
-def update_cme_in_gspread(cme_id, status) -> None:
- dict_column_name, len_column = get_column_info('База ДР_')
+def update_cme_in_gspread(
+ spreadsheet_id,
+ cme_id,
+ status
+) -> None:
+ dict_column_name, len_column = get_column_info(
+ spreadsheet_id, 'База ДР_')
values = get_values(
- SPREADSHEET_ID['Домик'],
+ spreadsheet_id,
f'{RANGE_NAME['База ДР']}',
value_render_option='UNFORMATTED_VALUE'
)
@@ -579,7 +574,8 @@ def update_cme_in_gspread(cme_id, status) -> None:
range_sheet = (f'{RANGE_NAME['База ДР_']}'
f'R{row_cme}C{col1}:R{row_cme}C{col2}')
- execute_update_googlesheet(sheet,
+ execute_update_googlesheet(spreadsheet_id,
+ sheet,
range_sheet,
value_input_option,
response_value_render_option,
@@ -587,6 +583,7 @@ def update_cme_in_gspread(cme_id, status) -> None:
def execute_update_googlesheet(
+ spreadsheet_id,
sheet,
range_sheet,
value_input_option,
@@ -594,7 +591,7 @@ def execute_update_googlesheet(
value_range_body
):
request = sheet.values().update(
- spreadsheetId=SPREADSHEET_ID['Домик'],
+ spreadsheetId=spreadsheet_id,
range=range_sheet,
valueInputOption=value_input_option,
responseValueRenderOption=response_value_render_option,
@@ -618,6 +615,7 @@ def execute_update_googlesheet(
def execute_append_googlesheet(
+ spreadsheet_id,
sheet,
range_sheet,
value_input_option,
@@ -625,7 +623,7 @@ def execute_append_googlesheet(
value_range_body
):
request = sheet.values().append(
- spreadsheetId=SPREADSHEET_ID['Домик'],
+ spreadsheetId=spreadsheet_id,
range=range_sheet,
valueInputOption=value_input_option,
insertDataOption='INSERT_ROWS',
diff --git a/src/db/db_googlesheets.py b/src/db/db_googlesheets.py
index 21549559..3e14da1a 100644
--- a/src/db/db_googlesheets.py
+++ b/src/db/db_googlesheets.py
@@ -7,11 +7,10 @@
from telegram.ext import ContextTypes
from api.googlesheets import (
- get_data_from_spreadsheet,
- get_column_info,
- write_data_reserve,
+ get_data_from_spreadsheet, get_column_info, write_data_reserve,
)
from db import db_postgres
+from settings import parse_settings
from settings.settings import RANGE_NAME
from utilities.schemas.custom_made_format import CustomMadeFormatDTO
from utilities.schemas.schedule_event import ScheduleEventDTO
@@ -19,20 +18,26 @@
from utilities.schemas.ticket import BaseTicketDTO
db_googlesheets_logger = logging.getLogger('bot.db.googlesheets')
+config = parse_settings()
+sheet_id_domik = config.sheets.sheet_id_domik
+sheet_id_cme = config.sheets.sheet_id_cme
def load_base_tickets(only_active=True) -> List[BaseTicketDTO]:
tickets = []
- dict_column_name, len_column = get_column_info('Варианты стоимости_')
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'Варианты стоимости_')
qty_tickets = len(get_data_from_spreadsheet(
- RANGE_NAME['Варианты стоимости_'] + f'A:A'
- ))
+ sheet_id_domik, RANGE_NAME['Варианты стоимости_'] + f'A:A'))
+
+ sheet = (RANGE_NAME['Варианты стоимости_'] +
+ f'R2C1:R{qty_tickets}C{len_column}')
data = get_data_from_spreadsheet(
- RANGE_NAME['Варианты стоимости_'] +
- f'R2C1:R{qty_tickets}C{len_column}'
+ sheet_id_domik,
+ sheet
)
db_googlesheets_logger.info('Данные стоимости броней загружены')
@@ -65,15 +70,18 @@ def load_schedule_events(
) -> List[ScheduleEventDTO]:
events = []
- dict_column_name, len_column = get_column_info('База спектаклей_')
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'База спектаклей_')
qty_events = len(get_data_from_spreadsheet(
- RANGE_NAME['База спектаклей_'] + f'A:A'
- ))
+ sheet_id_domik, RANGE_NAME['База спектаклей_'] + f'A:A'))
+
+ sheet = (RANGE_NAME['База спектаклей_'] +
+ f'R2C1:R{qty_events}C{len_column}')
data = get_data_from_spreadsheet(
- RANGE_NAME['База спектаклей_'] +
- f'R2C1:R{qty_events}C{len_column}',
+ sheet_id_domik,
+ sheet,
value_render_option='UNFORMATTED_VALUE'
)
db_googlesheets_logger.info('Данные мероприятий загружены')
@@ -109,15 +117,18 @@ def load_schedule_events(
def load_theater_events() -> List[TheaterEventDTO]:
events = []
- dict_column_name, len_column = get_column_info('Список спектаклей_')
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'Список спектаклей_')
- qty_tickets = len(get_data_from_spreadsheet(
- RANGE_NAME['Список спектаклей_'] + f'A:A'
- ))
+ qty_theater_events = len(get_data_from_spreadsheet(
+ sheet_id_domik, RANGE_NAME['Список спектаклей_'] + f'A:A'))
+
+ sheet = (RANGE_NAME['Список спектаклей_'] +
+ f'R2C1:R{qty_theater_events}C{len_column}')
data = get_data_from_spreadsheet(
- RANGE_NAME['Список спектаклей_'] +
- f'R2C1:R{qty_tickets}C{len_column}',
+ sheet_id_domik,
+ sheet,
value_render_option='UNFORMATTED_VALUE'
)
db_googlesheets_logger.info('Данные репертуара загружены')
@@ -146,15 +157,17 @@ def load_theater_events() -> List[TheaterEventDTO]:
def load_custom_made_format() -> List[CustomMadeFormatDTO]:
formats = []
- dict_column_name, len_column = get_column_info('База ФЗМ_')
+ dict_column_name, len_column = get_column_info(
+ sheet_id_cme, 'База ФЗМ_')
- qty_tickets = len(get_data_from_spreadsheet(
- RANGE_NAME['База ФЗМ_'] + f'A:A'
- ))
+ qty_cme_formats = len(get_data_from_spreadsheet(
+ sheet_id_cme, RANGE_NAME['База ФЗМ_'] + f'A:A'))
+
+ sheet = RANGE_NAME['База ФЗМ_'] + f'R2C1:R{qty_cme_formats}C{len_column}'
data = get_data_from_spreadsheet(
- RANGE_NAME['База ФЗМ_'] +
- f'R2C1:R{qty_tickets}C{len_column}',
+ sheet_id_cme,
+ sheet,
value_render_option='UNFORMATTED_VALUE'
)
db_googlesheets_logger.info('Данные форматов заказных мероприятий загружены')
@@ -183,13 +196,16 @@ def load_custom_made_format() -> List[CustomMadeFormatDTO]:
def load_special_ticket_price() -> Dict:
special_ticket_price = {}
first_colum = get_data_from_spreadsheet(
- RANGE_NAME['Индив стоимости']
- )
- dict_column_name, len_column = get_column_info('Индив стоимости_')
+ sheet_id_domik, RANGE_NAME['Индив стоимости'])
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'Индив стоимости_')
+
+ sheet = (RANGE_NAME['Индив стоимости_'] +
+ f'RC1:R{len(first_colum)}C{len_column}')
data = get_data_from_spreadsheet(
- RANGE_NAME['Индив стоимости_'] +
- f'RC1:R{len(first_colum)}C{len_column}',
+ sheet_id_domik,
+ sheet,
value_render_option='UNFORMATTED_VALUE'
)
@@ -211,13 +227,16 @@ def load_clients_data(
event_id: int
) -> Tuple[List[List[str]], Dict[int | str, int]]:
data_clients_data = []
- first_colum = get_data_from_spreadsheet(RANGE_NAME['База клиентов'])
+ first_colum = get_data_from_spreadsheet(
+ sheet_id_domik, RANGE_NAME['База клиентов'])
+
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'База клиентов_')
- dict_column_name, len_column = get_column_info('База клиентов_')
sheet = (RANGE_NAME['База клиентов_'] +
f'R1C1:R{len(first_colum)}C{len_column}')
- data = get_data_from_spreadsheet(sheet)
+ data = get_data_from_spreadsheet(sheet_id_domik, sheet)
for item in data[1:]:
if item[dict_column_name['event_id']] == str(event_id):
@@ -230,14 +249,16 @@ def load_clients_wait_data(
event_ids: List[int]
) -> Tuple[List[List[str]], Dict[int | str, int]]:
data_clients_data = []
- first_colum = get_data_from_spreadsheet(RANGE_NAME['Лист ожидания'])
+ first_colum = get_data_from_spreadsheet(
+ sheet_id_domik, RANGE_NAME['Лист ожидания'])
- dict_column_name, len_column = get_column_info('Лист ожидания_')
+ dict_column_name, len_column = get_column_info(
+ sheet_id_domik, 'Лист ожидания_')
sheet = (RANGE_NAME['Лист ожидания_'] +
f'R1C1:R{len(first_colum)}C{len_column}')
- data = get_data_from_spreadsheet(sheet)
+ data = get_data_from_spreadsheet(sheet_id_domik, sheet)
for item in data[2:]:
if int(item[dict_column_name['event_id']]) in event_ids:
@@ -282,7 +303,7 @@ async def increase_free_and_decrease_nonconfirm_seat(
]
try:
- write_data_reserve(event_id, numbers)
+ write_data_reserve(sheet_id_domik, event_id, numbers)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
@@ -337,7 +358,7 @@ async def decrease_free_and_increase_nonconfirm_seat(
]
try:
- write_data_reserve(event_id, numbers)
+ write_data_reserve(sheet_id_domik, event_id, numbers)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
@@ -386,7 +407,7 @@ async def increase_free_seat(
]
try:
- write_data_reserve(event_id, numbers, 3)
+ write_data_reserve(sheet_id_domik, event_id, numbers, 3)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
@@ -431,7 +452,7 @@ async def decrease_free_seat(
]
try:
- write_data_reserve(event_id, numbers, 3)
+ write_data_reserve(sheet_id_domik, event_id, numbers, 3)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
@@ -476,7 +497,7 @@ async def decrease_nonconfirm_seat(
]
try:
- write_data_reserve(event_id, numbers, 2)
+ write_data_reserve(sheet_id_domik, event_id, numbers, 2)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
@@ -534,7 +555,7 @@ async def update_free_seat(
]
try:
- write_data_reserve(event_id, numbers, 3)
+ write_data_reserve(sheet_id_domik, event_id, numbers, 3)
await db_postgres.update_schedule_event(
context.session,
int(event_id),
diff --git a/src/db/db_postgres.py b/src/db/db_postgres.py
index 85ea849c..4bf73c5e 100644
--- a/src/db/db_postgres.py
+++ b/src/db/db_postgres.py
@@ -297,6 +297,7 @@ async def create_theater_event(
flag_indiv_cost=False,
price_type=PriceType.NONE,
theater_event_id=None,
+ note=None,
):
theater_event = TheaterEvent(
id=theater_event_id,
@@ -311,7 +312,8 @@ async def create_theater_event(
max_num_child_bd=max_num_child_bd,
max_num_adult_bd=max_num_adult_bd,
flag_indiv_cost=flag_indiv_cost,
- price_type=price_type
+ price_type=price_type,
+ note=note
)
session.add(theater_event)
await session.commit()
diff --git a/src/db/migrations/versions/20250213-2205_06fcbbb514eb_rev8.py b/src/db/migrations/versions/20250213-2205_06fcbbb514eb_rev8.py
new file mode 100644
index 00000000..742a7c03
--- /dev/null
+++ b/src/db/migrations/versions/20250213-2205_06fcbbb514eb_rev8.py
@@ -0,0 +1,31 @@
+"""rev8
+
+Revision ID: 06fcbbb514eb
+Revises: 83d1fd16082b
+Create Date: 2025-02-13 22:05:15.186749
+
+"""
+
+from alembic import op
+import sqlalchemy as sa
+from sqlalchemy.dialects import postgresql
+
+# revision identifiers, used by Alembic.
+revision = "06fcbbb514eb"
+down_revision = "83d1fd16082b"
+branch_labels = None
+depends_on = None
+
+
+def upgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.add_column(
+ "theater_events", sa.Column("note", sa.String(), nullable=True)
+ )
+ # ### end Alembic commands ###
+
+
+def downgrade() -> None:
+ # ### commands auto generated by Alembic - please adjust! ###
+ op.drop_column("theater_events", "note")
+ # ### end Alembic commands ###
diff --git a/src/db/models.py b/src/db/models.py
index ce27e78e..1d4f5646 100644
--- a/src/db/models.py
+++ b/src/db/models.py
@@ -231,6 +231,7 @@ class TheaterEvent(BaseModel):
max_num_adult_bd: Mapped[int] = mapped_column(default=10)
flag_indiv_cost: Mapped[bool] = mapped_column(default=False)
price_type: Mapped[PriceType] = mapped_column(default=PriceType.NONE)
+ note: Mapped[Optional[str]]
schedule_events: Mapped[List['ScheduleEvent']] = relationship(
lazy='selectin')
diff --git a/src/handlers/birthday_hl.py b/src/handlers/birthday_hl.py
index aa1a110f..351ad711 100644
--- a/src/handlers/birthday_hl.py
+++ b/src/handlers/birthday_hl.py
@@ -261,11 +261,7 @@ async def get_time(update: Update, context: ContextTypes.DEFAULT_TYPE):
f'{context.bot_data['texts']['text_legend']}'
)
for i, theater_event in enumerate(theater_events):
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
text += f'{DICT_OF_EMOJI_FOR_BUTTON[i + 1]} '
text += f'{full_name}\n'
keyboard.append(InlineKeyboardButton(
@@ -306,11 +302,7 @@ async def get_show(update: Update, context: ContextTypes.DEFAULT_TYPE):
theater_event_id = int(callback_data)
theater_event = await db_postgres.get_theater_event(context.session,
theater_event_id)
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
await query.edit_message_text(
f'Вы выбрали мероприятие:\n{full_name}')
@@ -351,7 +343,7 @@ async def get_age(update: Update, context: ContextTypes.DEFAULT_TYPE):
_, callback_data = remove_intent_id(query.data)
age = callback_data
- await query.edit_message_text(f'Возраст именника: {age}')
+ await query.edit_message_text(f'Исполнится лет имениннику: {age}')
custom_made_formats = await db_postgres.get_all_custom_made_format(
context.session)
@@ -654,11 +646,7 @@ async def get_note(update: Update, context: ContextTypes.DEFAULT_TYPE):
case 'theater_event_id':
theater_event = await db_postgres.get_theater_event(
context.session, item)
- item = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ item = get_full_name_event(theater_event)
case 'custom_made_format_id':
custom_made_format = await db_postgres.get_custom_made_format(
context.session, item)
@@ -753,7 +741,8 @@ async def get_confirm(update: Update, context: ContextTypes.DEFAULT_TYPE):
context.user_data['birthday_user_data'][
'custom_made_event_id'] = custom_made_event.id
- write_client_cme(custom_made_event)
+ sheet_id_cme = context.config.sheets.sheet_id_cme
+ write_client_cme(sheet_id_cme, custom_made_event)
state = ConversationHandler.END
context.user_data['STATE'] = state
diff --git a/src/handlers/list_wait_hl.py b/src/handlers/list_wait_hl.py
index f617f303..7059bb08 100644
--- a/src/handlers/list_wait_hl.py
+++ b/src/handlers/list_wait_hl.py
@@ -31,11 +31,7 @@ async def send_clients_wait_data(
await update.effective_chat.send_action(ChatAction.TYPING)
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
date_event, time_event = await get_formatted_date_and_time_of_event(
schedule_events[0])
diff --git a/src/handlers/main_hl.py b/src/handlers/main_hl.py
index 1cd20177..3283a74c 100644
--- a/src/handlers/main_hl.py
+++ b/src/handlers/main_hl.py
@@ -303,7 +303,9 @@ async def update_ticket(update: Update, context: ContextTypes.DEFAULT_TYPE):
):
pass
- update_ticket_in_gspread(ticket_id, new_ticket_status.value)
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ update_ticket_in_gspread(sheet_id_domik, ticket_id,
+ new_ticket_status.value)
data['status'] = new_ticket_status
case 'Покупатель':
people = ticket.people
@@ -457,8 +459,9 @@ async def confirm_reserve(update: Update, context: ContextTypes.DEFAULT_TYPE):
main_handlers_logger.info(text)
ticket_status = TicketStatus.APPROVED
+ sheet_id_domik = context.config.sheets.sheet_id_domik
for ticket_id in ticket_ids:
- update_ticket_in_gspread(ticket_id, ticket_status.value)
+ update_ticket_in_gspread(sheet_id_domik, ticket_id, ticket_status.value)
await db_postgres.update_ticket(context.session,
ticket_id,
status=ticket_status)
@@ -566,8 +569,9 @@ async def reject_reserve(update: Update, context: ContextTypes.DEFAULT_TYPE):
main_handlers_logger.info(text)
ticket_status = TicketStatus.REJECTED
+ sheet_id_domik = context.config.sheets.sheet_id_domik
for ticket_id in ticket_ids:
- update_ticket_in_gspread(ticket_id, ticket_status.value)
+ update_ticket_in_gspread(sheet_id_domik, ticket_id, ticket_status.value)
await db_postgres.update_ticket(context.session,
ticket_id,
status=ticket_status)
@@ -646,7 +650,9 @@ async def confirm_birthday(update: Update, context: ContextTypes.DEFAULT_TYPE):
await query.answer()
except TimedOut as e:
main_handlers_logger.error(e)
- update_cme_in_gspread(cme_id, cme_status.value)
+
+ sheet_id_cme = context.config.sheets.sheet_id_cme
+ update_cme_in_gspread(sheet_id_cme, cme_id, cme_status.value)
await message.edit_text(
message.text + f'\nОбновил статус в гугл-таблице {cme_status.value}')
@@ -749,7 +755,9 @@ async def reject_birthday(update: Update, context: ContextTypes.DEFAULT_TYPE):
await query.answer()
except TimedOut as e:
main_handlers_logger.error(e)
- update_cme_in_gspread(cme_id, cme_status.value)
+
+ sheet_id_cme = context.config.sheets.sheet_id_cme
+ update_cme_in_gspread(sheet_id_cme, cme_id, cme_status.value)
await message.edit_text(
message.text + f'\nОбновил статус в гугл-таблице {cme_status.value}')
diff --git a/src/handlers/reserve_admin_hl.py b/src/handlers/reserve_admin_hl.py
index 057cdba8..009c55d3 100644
--- a/src/handlers/reserve_admin_hl.py
+++ b/src/handlers/reserve_admin_hl.py
@@ -251,7 +251,9 @@ async def start_forma_info(
text += '\nЗаписываю новый билет в клиентскую базу...'
await query.edit_message_text(text)
await update.effective_chat.send_action(ChatAction.TYPING)
- await write_client_reserve(context,
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ await write_client_reserve(sheet_id_domik,
+ context,
update.effective_chat.id,
chose_base_ticket,
TicketStatus.CREATED.value)
diff --git a/src/handlers/reserve_hl.py b/src/handlers/reserve_hl.py
index 88bb41ba..85b91ea4 100644
--- a/src/handlers/reserve_hl.py
+++ b/src/handlers/reserve_hl.py
@@ -257,11 +257,7 @@ async def choice_date(update: Update, context: ContextTypes.DEFAULT_TYPE):
flag_christmas_tree = True
if event.flag_santa:
flag_santa = True
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
text = (f'Вы выбрали мероприятие:\n'
f'{full_name}\n'
f'Выберите удобную дату\n\n')
@@ -761,7 +757,9 @@ async def get_name_children(
except TimedOut as e:
reserve_hl_logger.error(e)
reserve_hl_logger.info(text)
- await write_client_reserve(context,
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ await write_client_reserve(sheet_id_domik,
+ context,
update.effective_chat.id,
chose_base_ticket,
TicketStatus.CREATED.value)
@@ -982,7 +980,8 @@ async def get_phone_for_waiting(
text=text,
message_thread_id=thread_id
)
- write_client_list_waiting(context)
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ write_client_list_waiting(sheet_id_domik, context)
await update.effective_chat.send_message(
text='Вы добавлены в лист ожидания, '
'если место освободится, то с вами свяжутся. '
diff --git a/src/handlers/sub_hl.py b/src/handlers/sub_hl.py
index a99918e6..54d7db33 100644
--- a/src/handlers/sub_hl.py
+++ b/src/handlers/sub_hl.py
@@ -23,7 +23,7 @@
)
from settings.settings import ADMIN_GROUP, FILE_ID_RULES, OFFER
from utilities.utl_func import (
- get_unique_months, get_full_name_event,
+ get_unique_months,
filter_schedule_event_by_active,
get_formatted_date_and_time_of_event, get_schedule_event_ids_studio,
create_approve_and_reject_replay, set_back_context,
@@ -265,11 +265,7 @@ async def create_and_send_payment(
schedule_event)
chose_base_ticket = await db_postgres.get_base_ticket(
context.session, chose_base_ticket_id)
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ name = theater_event.name
email = await db_postgres.get_email(context.session,
update.effective_user.id)
@@ -282,7 +278,9 @@ async def create_and_send_payment(
update, context, TicketStatus.CREATED)
await update.effective_chat.send_action(ChatAction.TYPING)
- await write_client_reserve(context,
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ await write_client_reserve(sheet_id_domik,
+ context,
update.effective_chat.id,
chose_base_ticket,
TicketStatus.CREATED.value)
@@ -311,8 +309,8 @@ async def create_and_send_payment(
ticket_name_for_desc
)
len_for_name = max_len_decs - len_desc_without_name
- full_name_for_desc = full_name[:len_for_name]
- description = f'Билет на мероприятие {full_name_for_desc} {date_event} в {time_event}'
+ name_for_desc = name[:len_for_name]
+ description = f'Билет на мероприятие {name_for_desc} {date_event} в {time_event}'
param = create_param_payment(
price=chose_price,
description=' '.join([description, ticket_name_for_desc]),
diff --git a/src/handlers/support_hl.py b/src/handlers/support_hl.py
index 0c87a7b0..e560f821 100644
--- a/src/handlers/support_hl.py
+++ b/src/handlers/support_hl.py
@@ -243,17 +243,20 @@ async def theater_event_preview(
):
query = update.callback_query
- text = (f'{kv_name_attr_theater_event['name']}=Название\n'
- f'{kv_name_attr_theater_event['min_age_child']}=1\n'
- f'{kv_name_attr_theater_event['max_age_child']}=0\n'
- f'{kv_name_attr_theater_event['show_emoji']}=\n'
- f'{kv_name_attr_theater_event['flag_premier']}=Нет\n'
- f'{kv_name_attr_theater_event['flag_active_repertoire']}=Да\n'
- f'{kv_name_attr_theater_event['flag_active_bd']}=Нет\n'
- f'{kv_name_attr_theater_event['max_num_child_bd']}=8\n'
- f'{kv_name_attr_theater_event['max_num_adult_bd']}=10\n'
- f'{kv_name_attr_theater_event['flag_indiv_cost']}=Нет\n'
- f'{kv_name_attr_theater_event['price_type']}=По умолчанию/Базовая стоимость/Опции/Индивидуальная\n')
+ text = (
+ f'{kv_name_attr_theater_event['name']}=Название\n'
+ f'{kv_name_attr_theater_event['min_age_child']}=1\n'
+ f'{kv_name_attr_theater_event['max_age_child']}=0\n'
+ f'{kv_name_attr_theater_event['show_emoji']}=\n'
+ f'{kv_name_attr_theater_event['flag_premier']}=Нет\n'
+ f'{kv_name_attr_theater_event['flag_active_repertoire']}=Да\n'
+ f'{kv_name_attr_theater_event['flag_active_bd']}=Нет\n'
+ f'{kv_name_attr_theater_event['max_num_child_bd']}=8\n'
+ f'{kv_name_attr_theater_event['max_num_adult_bd']}=10\n'
+ f'{kv_name_attr_theater_event['flag_indiv_cost']}=Нет\n'
+ f'{kv_name_attr_theater_event['price_type']}=По умолчанию/Базовая стоимость/Опции/Индивидуальная\n'
+ f'{kv_name_attr_theater_event['note']}=\n'
+ )
await query.edit_message_text(text)
await query.answer()
diff --git a/src/handlers/webhook_hl.py b/src/handlers/webhook_hl.py
index ac1fb855..a94d410a 100644
--- a/src/handlers/webhook_hl.py
+++ b/src/handlers/webhook_hl.py
@@ -46,7 +46,7 @@ async def webhook_update(update: WebhookNotification,
pass
-async def processing_ticket_paid(update, context):
+async def processing_ticket_paid(update, context: ContextTypes.DEFAULT_TYPE):
message_id = update.object.metadata['message_id']
chat_id = update.object.metadata['chat_id']
ticket_ids = update.object.metadata['ticket_ids'].split('|')
@@ -66,8 +66,9 @@ async def processing_ticket_paid(update, context):
webhook_hl_logger.error('Удаление кнопки для оплаты не произошло')
text = f'Номер вашего билета '
ticket_status = TicketStatus.PAID
+ sheet_id_domik = context.config.sheets.sheet_id_domik
for ticket_id in ticket_ids:
- update_ticket_in_gspread(ticket_id, ticket_status.value)
+ update_ticket_in_gspread(sheet_id_domik, ticket_id, ticket_status.value)
await db_postgres.update_ticket(context.session,
ticket_id,
status=ticket_status)
diff --git a/src/settings/config_loader.py b/src/settings/config_loader.py
index f73a9c02..d8cb1676 100644
--- a/src/settings/config_loader.py
+++ b/src/settings/config_loader.py
@@ -29,7 +29,8 @@ class PostgresSettings(BaseModel):
class GoogleSheetsSettings(BaseModel):
credentials_path: str
- sheet_id: str
+ sheet_id_domik: str
+ sheet_id_cme: str
class YookassaSettings(BaseModel):
diff --git a/src/utilities/schemas/context.py b/src/utilities/schemas/context.py
index 929788ca..8594ebe0 100644
--- a/src/utilities/schemas/context.py
+++ b/src/utilities/schemas/context.py
@@ -4,7 +4,7 @@
'date': 'Дата',
'time': 'Время',
'theater_event_id': 'Спектакль',
- 'age': 'Возраст именинника',
+ 'age': 'Исполнится лет имениннику',
'qty_child': 'Кол-во детей',
'qty_adult': 'Кол-во взрослых',
'custom_made_format_id': 'Формат праздника',
diff --git a/src/utilities/schemas/theater_event.py b/src/utilities/schemas/theater_event.py
index 337f2f03..503d3f38 100644
--- a/src/utilities/schemas/theater_event.py
+++ b/src/utilities/schemas/theater_event.py
@@ -29,6 +29,7 @@ class TheaterEventDTO(BaseModel):
max_num_adult_bd: int
flag_indiv_cost: bool
price_type: PriceType
+ note: str
def to_dto(self):
return {
@@ -44,7 +45,8 @@ def to_dto(self):
'max_num_child_bd': self.max_num_child_bd,
'max_num_adult_bd': self.max_num_adult_bd,
'flag_indiv_cost': self.flag_indiv_cost,
- 'price_type': self.price_type
+ 'price_type': self.price_type,
+ 'note': self.note
}
@@ -60,6 +62,7 @@ def to_dto(self):
'max_num_adult_bd': 'Макс кол-во взрослых ДР',
'flag_indiv_cost': 'Индив стоимость',
'price_type': 'Расчет стоимости',
+ 'note': 'Примечание',
}
diff --git a/src/utilities/utl_func.py b/src/utilities/utl_func.py
index c708fce5..17eaef2b 100644
--- a/src/utilities/utl_func.py
+++ b/src/utilities/utl_func.py
@@ -618,11 +618,7 @@ async def clean_replay_kb_and_send_typing_action(update):
async def render_text_for_choice_time(theater_event, schedule_events):
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
event = schedule_events[0]
weekday = int(event.datetime_event.strftime('%w'))
date_event = (event.datetime_event.strftime('%d.%m ') +
@@ -670,13 +666,14 @@ def get_unique_months(events: Sequence[ScheduleEvent]):
return unique_sorted_months
-def get_full_name_event(
- name,
- flag_premiere,
- min_age_child,
- max_age_child,
- duration
-):
+def get_full_name_event(event: TheaterEvent):
+ name = event.name
+ flag_premiere = event.flag_premier
+ min_age_child = event.min_age_child
+ max_age_child = event.max_age_child
+ duration = event.duration
+ note = event.note
+
full_name: str = name
full_name += '\n'
if flag_premiere:
@@ -696,6 +693,8 @@ def get_full_name_event(
full_name += str(duration // 60) + 'ч'
if duration % 60 > 0:
full_name += str(duration % 60) + 'мин'
+ if note:
+ full_name += f'\n{note}'
return full_name
@@ -745,11 +744,7 @@ async def filter_schedule_event_by_active(
async def create_event_names_text(enum_theater_events, text):
for i, event in enum_theater_events:
- full_name = get_full_name_event(event.name,
- event.flag_premier,
- event.min_age_child,
- event.max_age_child,
- event.duration)
+ full_name = get_full_name_event(event)
text += f'{DICT_OF_EMOJI_FOR_BUTTON[i]} {full_name}\n\n'
return text
@@ -894,11 +889,7 @@ async def create_str_info_by_schedule_event_id(context, choice_event_id):
context.session, schedule_event.theater_event_id)
date_event, time_event = await get_formatted_date_and_time_of_event(
schedule_event)
- full_name = get_full_name_event(theater_event.name,
- theater_event.flag_premier,
- theater_event.min_age_child,
- theater_event.max_age_child,
- theater_event.duration)
+ full_name = get_full_name_event(theater_event)
text_emoji = await get_emoji(schedule_event)
text_select_event = (f'Мероприятие:\n'
f'{full_name}\n'
diff --git a/src/utilities/utl_googlesheets.py b/src/utilities/utl_googlesheets.py
index a764c32f..a4b3f3fe 100644
--- a/src/utilities/utl_googlesheets.py
+++ b/src/utilities/utl_googlesheets.py
@@ -49,5 +49,6 @@ async def write_to_return_seats_for_sale(context):
async def update_ticket_db_and_gspread(context, ticket_id, **kwargs):
- update_ticket_in_gspread(ticket_id, kwargs['status'].value)
+ sheet_id_domik = context.config.sheets.sheet_id_domik
+ update_ticket_in_gspread(sheet_id_domik, ticket_id, kwargs['status'].value)
await db_postgres.update_ticket(context.session, ticket_id, **kwargs)