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

2.2.5. Функция изменения класса параметра

функция: edit_class_param - функция изменения класса параметра

-- вход:

-- 1. id - id класса параметра

-- 2. new_param_class_name - новое имя класса параметра

-- 3. new_param_class_short_name - новое короткое имя класса параметра

-- 4. new_param_id - (опционально) - новый параметр класса параметра (при передаче None - станет неопределенным)

-- 5. class_param_id - (опционально) - новый класс класса параметра (при передаче None - станет корнывым)

-- выход: нет

-- эффекты:

-- 1. изменения класса параметра

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

-- 1. если вводится new_param_id, оно должно существовать

-- 2. если вводится class_param_id, оно должно существовать

def edit_class_param(id, new_param_class_name, new_param_class_short_name, new_param_id=None, class_param_id=None):

try:

# Начало транзакции

conn.execute('BEGIN TRANSACTION')

cursor.execute('''SELECT param_class_name FROM class_param WHERE id = ? ''', (id,))

is_class_param_exist = cursor.fetchone()

if not is_class_param_exist:

print(f'Ошибка в edit_class_param: Параметра класса с id = {id} не существует.')

return 0

else:

param_class_name_old = is_class_param_exist[0]

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', (param_class_name_old,))

id_class_param_in_tc = cursor.fetchone()[0]

if new_param_id:

cursor.execute('''SELECT param_name FROM param WHERE id = ? ''', (new_param_id,))

is_param_exist = cursor.fetchone()

if not is_param_exist:

print(f'Ошибка в edit_class_param: Параметра с id = {new_param_id} не существует.')

return 0

else:

cursor.execute('''SELECT id FROM param WHERE param_name = ? ''', ('неопределенный параметр',))

new_param_id = cursor.fetchone()[0]

if class_param_id:

cursor.execute('''SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ? ''', (class_param_id,))

is_terminal_class_name_exist = cursor.fetchone()

if check_cyclic_dependency_terminal_classifier(class_param_id, param_class_name_old):

print("Ошибка в edit_class_param: родитель и потомок образуют цикл. ")

return 0

if (is_terminal_class_name_exist[0] == param_class_name_old):

print(f'_terminal_class_name_ = {is_terminal_class_name_exist[0]}, param_class_name_old = {param_class_name_old} =>', sep='')

print(f'Нельзя назначить классу в родителя самого себя')

return 0

if not is_terminal_class_name_exist:

print(f'Ошибка в edit_class_param: Параметра класса с id = {id} не существует.')

return 0

if change_parent_of_category(param_class_name_old, is_terminal_class_name_exist[0]):

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', ('неопределенный параметр класса',))

class_param_id = cursor.fetchone()[0]

cursor.execute("UPDATE class_param SET param_class_name = ?, param_class_short_name = ?, param_id = ?, class_param_id = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, new_param_id, class_param_id, id))

cursor.execute("UPDATE terminal_classifier SET terminal_classifier_name = ?, terminal_classifier_short_name = ?, id_parent = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, class_param_id, id_class_param_in_tc))

res = cursor.rowcount

# Фиксация изменений

conn.commit()

# Возвращение результата

if res == 1:

print(f'Параметр с id = {id} успешно обновлен.')

return 1

else:

return 0

else:

cursor.execute('''SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ? ''', ('неопределенный параметр класса',))

class_param_id = cursor.fetchone()[0]

cursor.execute("UPDATE class_param SET param_class_name = ?, param_class_short_name = ?, param_id = ?, class_param_id = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, new_param_id, class_param_id, id))

cursor.execute("UPDATE terminal_classifier SET terminal_classifier_name = ?, terminal_classifier_short_name = ?, id_parent = ? WHERE id = ?", (new_param_class_name, new_param_class_short_name, class_param_id, id_class_param_in_tc))

res = cursor.rowcount

# Фиксация изменений

conn.commit()

# Возвращение результата

if res == 1:

print(f'Параметр класса с id = {id} успешно обновлен.')

return 1

else:

return 0

except sqlite3.Error as e:

print(f"Ошибка в edit_class_param: {e}")

conn.rollback()

return 0

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