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

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

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