
- •Задание на работу
- •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.3 Процедура, изменяющая тип конфигурируемости объекта-изделия:
функция: edit_obj_configurability - процедура, изменяющая тип конфигурируемости объекта-изделия
-- вход:
-- 1. obj_id - id продукции
-- 2. configurability_type_val - тип желаемой конфигурации
-- выход: 1 - успех / 0 - иначе
-- эффекты:
-- 1. изменение типа конфигурируемости объекта-изделия
-- требования:
-- 1. передаваемые аргументы должны существовать
-- 2. значения configurability_type_val должны быть в пределах [0; 2] целочисленно включительно
def edit_obj_configurability(obj_id: int, configurability_type_val: int) -> int:
try:
if not is_exist_by_id_in_table(obj_id, PRODUCT_TABLE):
raise ValueError(f'Продукции с id={obj_id} не существует')
if not configurability_type_val in [0, 1, 2]:
raise ValueError(f'configurability_type_val имеет недопустимое значение. допустимые значения: 0, 1, 2')
cursor.execute("""
UPDATE product
SET configurable_type = ?
WHERE id = ?
""", (configurability_type_val, obj_id))
res = cursor.rowcount
conn.commit()
print(f'конфигурируемость продукции (configurability_type) успешно изменено на значение = {configurability_type_val}')
return 1 if res == 1 else 0
except (sqlite3.Error, ValueError) as e:
print(f"Ошибка при изменении конфигурируемости продукции: {e}")
conn.rollback()
return 0
4.4 Процедура, изменяющая конфигурируемость параметра:
функция: edit_obj_param_configurability - процедура, изменяющая тип конфигурируемости объекта-изделия
-- вход:
-- 1. obj_id_val - id продукции
-- 2. param_id_val - id параметра
-- 3. is_configurable_val - является ли конфигурируемым
-- выход: 1 - успех / 0 - иначе
-- эффекты:
-- 1. изменение типа конфигурируемости параметра для объекта-изделия
-- требования:
-- 1. передаваемые аргументы должны существовать
def edit_obj_param_configurability(obj_id_val: int, param_id_val: int, is_configurable_val: bool) -> int:
try:
cursor.execute("""
SELECT configurable_type
FROM product
WHERE id = ?
""", (obj_id_val,))
row = cursor.fetchone()
if row is None:
raise Exception(f'Object with id {obj_id_val} not found')
configurable_type_val = row[0]
if configurable_type_val != 1 and is_configurable_val:
raise Exception(f'Конфигурируемые параметры могут быть только у типового изделия с конфигуратором')
cursor.execute("""
UPDATE prod_param
SET is_configurable = ?
WHERE prod_id = ? AND param_id = ?
""", (is_configurable_val, obj_id_val, param_id_val))
res = cursor.rowcount
conn.commit()
return 1 if res == 1 else 0
except (sqlite3.Error, ValueError) as e:
print(f"Ошибка при edit_obj_param_configurability: {e}")
conn.rollback()
return 0
4.5 Процедура, возвращающая список конфигурируемых параметров данного объекта-изделия:
функция: find_obj_param_configurable - процедура, возвращающая список конфигурируемых параметров данного объекта-изделия
-- вход:
-- 1. obj_id_val - id продукции\
-- выход: id и названия всех параметров
-- эффекты:
-- 1. нет
-- требования:
-- 1. передаваемые аргументы должны существовать
def find_obj_param_configurable(obj_id_val: int):
try:
# Проверка существования продукции в таблице product
if not (is_exist_by_id_in_table(obj_id_val, PRODUCT_TABLE)):
raise ValueError(f'продукции с id={obj_id_val} нет в таблице product')
# Поиск id параметров, которые являются конфигурируемыми
cursor.execute("""
SELECT param_id
FROM prod_param
WHERE prod_id = ? AND is_configurable = 1
""", (obj_id_val,))
res_id = cursor.fetchall() # Список кортежей, например [(2,), (3,)]
# Если параметры не найдены
if not res_id:
print(f'конфигурируемых параметров для продукции с id={obj_id_val} не найдено')
return 0
# Список для хранения имён параметров
res_configurable_params_names = []
# Перебор всех найденных параметров
for param_id_tuple in res_id:
param_id = param_id_tuple[0] # Достаём id из кортежа
cursor.execute("""
SELECT param_name
FROM param
WHERE id = ?
""", (param_id,))
param_name = cursor.fetchone()
if param_name:
res_configurable_params_names.append(param_name[0]) # Добавляем имя параметра
# Вывод результатов
print(f'\nid конфигурируемых параметров для продукции с id={obj_id_val}: {[id[0] for id in res_id]}')
print(f'res_configurable_params_names - {res_configurable_params_names}\n')
# Возвращаем все id и названия параметров
return [[id[0] for id in res_id], res_configurable_params_names]
except (sqlite3.Error, ValueError) as e:
print(f"Ошибка в find_obj_param_configurable: {e}")
conn.rollback()
return 0