- •Задание на работу
- •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.8 Процедура, возвращающая список вариантов исполнения для данного типового изделия с конфигуратором:
функция: find_obj_variants - процедура, возвращающая список вариантов исполнения для данного типового изделия с конфигуратором
-- вход:
-- 1. obj_id_val - id продукции
-- выход: список вариантов исполнения для данного типового изделия с конфигуратором
-- эффекты:
-- 1. нет
-- требования:
-- 1. передаваемые аргументы должны существовать
def find_obj_variants(obj_id_val: int):
cursor.execute("""
SELECT id_category
FROM product
WHERE id = ?
""", (obj_id_val,))
row = cursor.fetchone()
if row is None:
raise Exception(f'объект с id={obj_id_val} не найден в таблице {PRODUCT_TABLE}')
id_category_val = row[0]
cursor.execute("""
SELECT configurable_type
FROM product
WHERE id = ?
""", (obj_id_val,))
if cursor.fetchone()[0] != 1:
raise Exception(f'объект с id={obj_id_val} не является типовым изделием с конфигуратором')
cursor.execute("""
SELECT id, product_name, product_name_short, id_category, configurable_type
FROM product
WHERE id_category = ? AND configurable_type = 2
""", (id_category_val,))
res = cursor.fetchall()
print(f'{res}')
return res
4.9 Процедура, создающая вариант исполнения по данному типовому изделию с конфигуратором:
функция: create_obj_variant - процедура, создающая вариант исполнения по данному типовому изделию с конфигуратором
-- вход:
-- 1. obj_id_val - id продукции
-- выход: созданный вариант исполнения
-- эффекты:
-- 1. создание варианта исполнения по данному типовому изделию с конфигуратором
-- требования:
-- 1. передаваемые аргументы должны существовать
def create_obj_variant(obj_id_val: int) -> int:
cursor.execute("""
SELECT configurable_type
FROM product
WHERE id = ?
""", (obj_id_val,))
row = cursor.fetchone()
cursor.execute("""
SELECT id_category
FROM product
WHERE id = ?
""", (obj_id_val,))
id_category = cursor.fetchone()
if id_category:
id_category = id_category[0]
if row is None or row[0] != 1:
raise Exception(f'Oбъект с id={obj_id_val} не является типовым изделием с конфигуратором')
cursor.execute("SELECT product_name, product_name_short FROM product WHERE id = ?", (obj_id_val,))
prod_names = cursor.fetchall()
product_name = prod_names[0][0]
product_name_short = prod_names[0][1]
cursor.execute("""
INSERT INTO product (product_name, product_name_short, configurable_type)
SELECT ?, ?, 2
FROM product WHERE id = ?
""", (product_name, product_name_short, obj_id_val))
new_obj_id = cursor.lastrowid
cursor.execute("""
UPDATE product
SET id_category = ?
WHERE id = ?
""", (id_category, new_obj_id))
cursor.execute("""
UPDATE prod_param
SET is_configurable = 0
WHERE prod_id = ?
""", (new_obj_id,))
conn.commit()
print(f'был создан новый вариант исполнения с именем - \"{product_name}\" c id={new_obj_id}')
return new_obj_id
