Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 сем / 3 / мисприс-2.3_1374_Наволоцкий_Зырянов_Харитонов.docx
Скачиваний:
3
Добавлен:
29.03.2025
Размер:
1.79 Mб
Скачать

4.10 Процедура, создающая типовое изделие с конфигуратором по данному типовому изделию без конфигуратора:

функция: create_typical_obj_with_configuration - процедура, создающая типовое изделие с конфигуратором по данному типовому изделию без конфигуратора

-- вход:

-- 1. obj_id_val - id продукции

-- выход: новый id созданного объекта

-- эффекты:

-- 1. создание типовогои изделия по данному изделию

-- требования:

-- 1. передаваемые аргументы должны существовать

def create_typical_obj_with_configuration(obj_id_val: int) -> int:

cursor.execute("""

SELECT configurable_type, id_category

FROM product

WHERE id = ?

""", (obj_id_val,))

row = cursor.fetchone()

if row is None or row[0] != 0:

raise Exception(f'Oбъект с id={obj_id_val} не является типовым изделием без конфигуратора')

id_category = row[1]

cursor.execute("""

SELECT 1

FROM product

WHERE id_category = ? AND configurable_type = 1

""", (id_category,))

if cursor.fetchone():

raise Exception('Типовое изделие с конфигуратором уже существует в данном классе')

cursor.execute("SELECT product_name, product_name_short FROM product WHERE id = ?", (obj_id_val,))

prod_names = cursor.fetchall()

print(f'prod_names - {prod_names}')

product_name = prod_names[0][0]

product_name_short = prod_names[0][1]

cursor.execute("""

INSERT INTO product (id_category, product_name, product_name_short, configurable_type)

SELECT ?, ?, ?, 1

FROM product WHERE id = ?

""", (id_category, product_name, product_name_short, obj_id_val))

new_obj_id = cursor.lastrowid

conn.commit()

print(f'был успешно создано типовое изделие с конфигуратором. id={new_obj_id} ')

return new_obj_id

4.11 Процедура, выводящая сведения о деталях заказа:

функция: get_order_details - процедура, выводящая сведения о деталях заказа

-- вход:

-- 1. order_id - id заказа

-- выход: вся информация о всех позициях заказа

-- эффекты:

-- 1. нет

-- требования:

-- 1. передаваемые аргументы должны существовать

def get_order_details(order_id: int):

try:

# Найти все записи с указанным order_id в orders_pos

cursor.execute('''

SELECT prod_id, quantity

FROM orders_pos

WHERE order_id = ?

''', (order_id,))

order_positions = cursor.fetchall()

if not order_positions:

print(f'Нет позиций для заказа с id={order_id}')

return

# Пройтись по каждой позиции заказа

for prod_id, quantity in order_positions:

# Получить информацию о продукте

cursor.execute('''

SELECT id, product_name, configurable_type

FROM product

WHERE id = ?

''', (prod_id,))

product = cursor.fetchone()

if not product:

print(f'Продукт с id={prod_id} не найден')

continue

product_id, product_name, configurable_type = product

# Вывести основную информацию о продукте и количество

print(f'Продукт: {product_name} (id={product_id})')

print(f'Количество: {quantity}', sep='')

# Если configurable_type == 2, найти неконфигурируемые параметры

if configurable_type == 2:

params = find_nonconfigurable_params_with_product_info(product_id)

except (sqlite3.Error, ValueError) as e:

print(f'Ошибка при получении деталей заказа: {e}')

Соседние файлы в папке 3