
- •Задание на работу
- •0.1. Функциональные требования
- •0.2. Содержание работы
- •1. Разработка функциональных требований к подсистеме
- •2. Разработка проектной модели классов
- •3. Разработка модели хранения
- •4. Разработка физической модели данных и поддерживающих процедур
- •4.1 Процедура, создающая запись в таблице «orders»:
- •4.2 Процедура, добавляющая позицию заказа:
- •4.3 Процедура, изменяющая тип конфигурируемости объекта-изделия:
- •4.4 Процедура, изменяющая конфигурируемость параметра:
- •4.5 Процедура, возвращающая список конфигурируемых параметров данного объекта-изделия:
- •4.6 Процедура, возвращающая список нЕконфигурируемых параметров данного объекта-изделия:
- •4.7 Процедура, возвращающая список всех параметров данного объекта-изделия:
- •4.8 Процедура, возвращающая список вариантов исполнения для данного типового изделия с конфигуратором:
- •4.9 Процедура, создающая вариант исполнения по данному типовому изделию с конфигуратором:
- •4.10 Процедура, создающая типовое изделие с конфигуратором по данному типовому изделию без конфигуратора:
- •4.11 Процедура, выводящая сведения о деталях заказа:
- •4.12 Процедура, связывающая имеющийся параметр с продуктом:
- •4.13 Процедура, задающая значения параметра для продукции:
- •5. Тестирование процедур
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}')