
Добавил:
hiiamfool
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
# -*- coding: utf-8 -*-
import sqlite3
path = "C:/Users/admin/source/repos/UNIVERSITY_repos/3 course/6 sem/mispris/2/furniture.db"
# path = "/home/user/repos/mispris/2/furniture.db"
conn = sqlite3.connect(path)
cursor = conn.cursor()
print("\n\nDB has been created/connected\n")
conn.execute("PRAGMA foreign_keys = ON")
# def create_category_table():
# cursor.execute('''CREATE TABLE IF NOT EXISTS category
# (id INTEGER PRIMARY KEY AUTOINCREMENT,
# id_parent INTEGER,
# terminal_classifier_name TEXT UNIQUE,
# FOREIGN KEY (id_parent) REFERENCES category(id))''')
# conn.commit()
def create_product_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS product (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_category INTEGER,
product_name TEXT NOT NULL,
quantity INTEGER DEFAULT 0,
price REAL DEFAULT 0,
unit_value REAL,
FOREIGN KEY (id_category) REFERENCES terminal_classifier(id)
)
''')
conn.commit()
########################## second lab ##########################
def create_terminal_classifier_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS terminal_classifier
(id INTEGER PRIMARY KEY AUTOINCREMENT,
id_parent INTEGER,
terminal_classifier_name TEXT NOT NULL,
terminal_classifier_short_name TEXT NOT NULL,
id_unit INTEGER,
FOREIGN KEY (id_unit) REFERENCES unit(id),
FOREIGN KEY (id_parent) REFERENCES terminal_classifier(id))''')
conn.commit()
def create_enum_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS enum
(id INTEGER PRIMARY KEY AUTOINCREMENT,
enum_id INTEGER,
priority INTEGER NOT NULL DEFAULT 0,
enum_name TEXT NOT NULL,
enum_short_name TEXT NOT NULL,
enum_description TEXT,
real_value REAL,
int_value INTEGER,
pic_value TEXT,
FOREIGN KEY (enum_id) REFERENCES terminal_classifier(id))''')
conn.commit()
def create_unit_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS unit
(id INTEGER PRIMARY KEY AUTOINCREMENT,
unit_name TEXT UNIQUE,
unit_name_short TEXT UNIQUE)''')
conn.commit()
def creating_tables():
# create_category_table()
create_product_table()
create_terminal_classifier_table()
create_enum_table()
create_unit_table()
creating_tables()
def delete_data(tables_order):
try:
for table_name in tables_order:
cursor.execute(f"DELETE FROM {table_name};")
conn.commit()
print("Данные успешно удалены")
except sqlite3.Error as _ex:
print(f"Произошла ошибка при удалении данных: {_ex}")
def dropAllTables():
try:
# Список таблиц в порядке, в котором их нужно удалить (сначала те, которые не содержат внешних ключей)
tables_order = [ 'product', 'enum', 'terminal_classifier', 'unit']
delete_data(tables_order)
for table_name in tables_order:
cursor.execute(f"DROP TABLE IF EXISTS {table_name};")
conn.commit()
print("Таблицы успешно удалены")
except Exception as _ex:
print(f"Произошла ошибка при удалении таблиц: {_ex}")
def is_category_exists(terminal_classifier_name):
cursor.execute("SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
def is_product_exist(product_name):
cursor.execute("SELECT COUNT(*) FROM product WHERE product_name = ?", (product_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
def is_unit_exist(unit_name_short):
cursor.execute("SELECT COUNT(*) FROM unit WHERE unit_name_short = ?", (unit_name_short,))
count = cursor.fetchone()[0]
res = count > 0
return res
def add_unit(unit_name, unit_name_short):
try:
if not is_unit_exist(unit_name_short):
cursor.execute('''
INSERT INTO unit (unit_name, unit_name_short)
VALUES (?, ?)
''', (unit_name, unit_name_short))
conn.commit()
print('Единица измерения успешно добавлена.')
else:
print('Единица измерения с таким названием уже существует.')
except Exception as _ex:
print(f'Error {_ex} - произошла ошибка при добавлении единицы измерения')
def add_category(terminal_classifier_name, terminal_classifier_short_name, id_parent=None, id_unit=None):
# try:
if is_category_exists(terminal_classifier_name):
print(f'Категория с названием {terminal_classifier_name} уже существует.')
return
if id_unit:
cursor.execute("SELECT COUNT(*) FROM unit WHERE id = ?", (id_unit,))
unit_check_exist = cursor.fetchone()[0]
if not unit_check_exist:
print(f'Указанного id единицы измерения не существует!')
return
cursor.execute('''
INSERT INTO terminal_classifier (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit)
VALUES (?, ?, ?, ?)
''', (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit))
conn.commit()
print('Категория успешно добавлена.')
# except Exception as _ex:
# print(f'Error {_ex} - ошибка при добавлении категории.')
def add_subcategory(terminal_classifier_name, subterminal_classifier_name, subterminal_classifier_short_name, id_unit=None):
try:
if is_category_exists(terminal_classifier_name):
# Получаем Id категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_to_set = cursor.fetchone()[0]
add_category(subterminal_classifier_name, subterminal_classifier_short_name, id_parent_to_set, id_unit)
conn.commit()
print("Подкатегория успешно добавлена.")
else:
print("Указанная категория/подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении подкатегории: {_ex}")
def edit_category(id, terminal_classifier_name_new, terminal_classifier_short_name_new, id_unit=None):
try:
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE id = ?', (id,))
if cursor.fetchone()[0] == 0:
raise ValueError(f"Запись с id={id} не найдена в таблице terminal_classifier.")
if id_unit is not None:
cursor.execute('SELECT COUNT(*) FROM unit WHERE id = ?', (id_unit,))
if cursor.fetchone()[0] == 0:
raise ValueError(f"Запись с id_unit={id_unit} не найдена в таблице unit.")
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_name = ? AND id != ?', (terminal_classifier_name_new, id))
if cursor.fetchone()[0] > 0:
raise ValueError(f"Новое полное имя '{terminal_classifier_name_new}' уже занято.")
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_short_name = ? AND id != ?', (terminal_classifier_short_name_new, id))
if cursor.fetchone()[0] > 0:
raise ValueError(f"Новое короткое имя '{terminal_classifier_short_name_new}' уже занято.")
cursor.execute('''
UPDATE terminal_classifier
SET terminal_classifier_name = ?,
terminal_classifier_short_name = ?,
id_unit = ?
WHERE id = ?
''', (terminal_classifier_name_new, terminal_classifier_short_name_new, id_unit, id))
# Подтверждаем изменения
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении категории: {_ex}")
def add_product(product_name, terminal_classifier_name, quantity, price, unit_value ):
try:
if is_category_exists(terminal_classifier_name):
# Получаем id подкатегории по ее названию
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# Добавляем новое изделие в таблицу Изделие
cursor.execute("INSERT INTO product (id_category, product_name, quantity, price, unit_value) VALUES (?, ?, ?, ?, ?)",
(category_id, product_name, quantity, price, unit_value))
conn.commit()
print("Изделие успешно добавлено.")
else:
print("Указанная подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении изделия: {_ex}")
def get_all_categories():
try:
cursor.execute("SELECT * FROM terminal_classifier")
categories_names = cursor.fetchall()
return categories_names
except Exception as _ex:
print(f"Произошла ошибка при получении категорий: {_ex}")
return None
def get_all_products():
try:
cursor.execute("SELECT * FROM product")
products_names = cursor.fetchall()
return products_names
except Exception as _ex:
print(f"Произошла ошибка при получении товаров: {_ex}")
return None
def product_update_price(product_name, new_price):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET price = ? WHERE product_name = ?", (new_price, product_name))
conn.commit()
print('Цена изделия успешно обновлена.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при обновлении цены изделия: {_ex}")
def product_update_quantity(product_name, new_quantity):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET quantity = ? WHERE product_name = ?", (new_quantity, product_name))
conn.commit()
print('Количество изделия успешно обновлено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при обновлении цены изделия: {_ex}")
def change_product_category(product_name, new_category):
try:
if is_category_exists(new_category):
# Получаем идентификатор новой категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_category,))
new_category_id = cursor.fetchone()[0]
# Обновляем категорию у изделия
cursor.execute("UPDATE product SET id_category = ? WHERE product_name = ?", (new_category_id, product_name))
conn.commit()
print('Категория изделия успешно изменена.')
else:
print('Указанная новая подкатегория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при изменении подкатегории изделия: {_ex}")
def change_product_unit_value(product_name, unit_value):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET unit_value = ? WHERE product_name = ?", (unit_value, product_name))
conn.commit()
print('Значение единицы измерения изделия успешно изменено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при изменении значения единицы измерения изделия: {_ex}")
def delete_product_unit_value(product_name):
try:
if is_product_exist(product_name):
# cursor.execute("SELECT id_unit FROM product WHERE product_name = ?", (product_name,))
# delete_unit_id = cursor.fetchone()[0]
cursor.execute("UPDATE product SET unit_value = ? WHERE product_name = ?", (None, product_name))
conn.commit()
print('Значение единицы измерения изделия успешно удалено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении значения единицы измерения изделия: {_ex}")
def is_enum_exist(terminal_classifier_name):
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
check_if_exist = cursor.fetchone()
return check_if_exist
except Exception as _ex:
print(f"Произошла ошибка при проверке перечисления на существование: {_ex}")
def is_enum_pos_exist(enum_name):
try:
cursor.execute("SELECT id FROM enum WHERE enum_name = ?", (enum_name,))
check_if_exist = cursor.fetchone()
if check_if_exist:
return True
else:
return False
except Exception as _ex:
print(f"Произошла ошибка при проверке перечисления на существование: {_ex}")
def add_enum_pos(enum_id, enum_name, enum_short_name, enum_description=None, real_value=None, int_value=None, pic_value=None, priority=None):
try:
# Check if enum already exists in terminal_classifier
if is_enum_pos_exist(enum_name):
print("Указанное перечисление уже существует.")
return
# Get next priority if not provided
if priority is None:
cursor.execute("SELECT COALESCE(MAX(priority), 0) + 1 FROM enum", ())
priority = cursor.fetchone()[0]
# UPDATE via id
cursor.execute("INSERT INTO enum (enum_id, enum_name, enum_short_name, enum_description, real_value, int_value, pic_value, priority) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
(enum_id, enum_name, enum_short_name, enum_description, real_value, int_value, pic_value, priority))
conn.commit()
print('Перечисление успешно добавлено.')
except Exception as _ex:
print(f"Произошла ошибка при добавлении перечисления: {_ex}")
def delete_enum_classification(terminal_classifier_name):
try:
if is_enum_exist(terminal_classifier_name):
# Получаем идентификатор удаляемого класса перечислений
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
delete_id = cursor.fetchone()[0]
# Перемещаем все классы перечисления удаляемого класса перечисления в класс-перечисление "неопределенные"
cursor.execute("UPDATE terminal_classifier SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (delete_id,))
# Перемещаем все перечисления удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE enum SET enum_id = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE enum_id = ?", (delete_id,))
# Удаляем класс-перечисление
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (delete_id,))
conn.commit()
print('Класс перечисления успешно удален.')
else:
print('Указанный класс перечисления не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении класса перечисления: {_ex}")
def delete_enum_pos(enum_name):
try:
# Удаление перечисления
cursor.execute("DELETE FROM enum WHERE enum_name = ?", (enum_name,))
rows_deleted = cursor.rowcount
if rows_deleted > 0:
print('Перечисление успешно удалено.')
else:
print('Перечисление с указанным названием не найдено.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при удалении перечисления: {_ex}")
def change_enum_pos(id, new_enum_name, new_enum_short_name, new_enum_description=None, new_real_value=None, new_int_value=None, new_pic_value=None):
try:
cursor.execute("SELECT enum_name FROM enum WHERE id = ?", (id,))
old_name_to_check = cursor.fetchone()[0]
if is_enum_pos_exist(old_name_to_check):
cursor.execute("UPDATE enum SET enum_name = ?, enum_short_name = ?, enum_description = ?, real_value = ?, int_value = ?, pic_value = ? WHERE id = ?",
(new_enum_name, new_enum_short_name, new_enum_description, new_real_value, new_int_value, new_pic_value, id))
conn.commit()
print('Перечисление изменено.')
else:
print('Указаное перечисление не найдено.')
return
except Exception as _ex:
print(f"Произошла ошибка при изменении перечисления: {_ex}")
def edit_enum_pos_priority(enum_pos_id, new_priority):
try:
# Получаем enum_id для указанного enum_pos_id
cursor.execute("SELECT enum_id FROM enum WHERE id = ?", (enum_pos_id,))
result = cursor.fetchone()
if result is None:
print('Указанное enum_pos_id не найдено.')
return None
enum_id = result[0]
# Проверяем, существует ли уже запись с таким priority для данного enum_id
cursor.execute("""
SELECT count(*)
FROM enum
WHERE priority = ?
AND enum_id = ?
""", (new_priority, enum_id))
count = cursor.fetchone()[0]
if count == 0:
# Обновляем priority
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
else:
# Смещаем приоритеты и обновляем нужную запись
cursor.execute("""
UPDATE enum
SET priority = priority + 1
WHERE priority >= ?
AND enum_id = ?
""", (new_priority, enum_id))
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
conn.commit()
print("Приоритет перечисления изменен")
return new_priority
except Exception as _ex:
print(f"Произошла ошибка при изменении приоритета перечисления: {_ex}")
def find_enums(enum_class_id):
try:
cursor.execute("""
SELECT ep.id, ep.enum_name, ep.enum_short_name, ep.enum_id, ep.priority, ep.real_value, ep.int_value, ep.pic_value
FROM enum ep
WHERE ep.enum_id = ?
ORDER BY ep.priority ASC
""", (enum_class_id,))
results = cursor.fetchall()
for row in results:
print(row)
return results
except Exception as _ex:
print(f"Произошла ошибка при получении списка перечислений заданного класса: {_ex}")
def add_enum_in_classifier(terminal_classifier_name, terminal_classifier_short_name, enum_parent_name, id_unit=None):
# try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (enum_parent_name,))
id_parent_check = cursor.fetchone()
if id_parent_check is not None:
id_parent = id_parent_check[0]
else:
id_parent = None
if id_unit:
cursor.execute("SELECT COUNT(*) FROM unit WHERE id = ?", (id_unit,))
count = cursor.fetchone()[0]
if (not count):
print(f'Произошла ошибка при добавлении записи в enum_classifier! Указанного id_unit не существует.')
cursor.execute('''
INSERT INTO terminal_classifier (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit)
VALUES (?, ?, ?, ?)
''', (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit))
conn.commit()
print('Класс перечисления успешно добавлен в основную базу.')
# except Exception as _ex:
# print(f'Error {_ex} - ошибка при добавлении enum_in_classifier.')
def change_enum_priority(enum_name, priority):
try:
if (priority >= 0):
cursor.execute("UPDATE enum SET priority = ? WHERE enum_name = ?", (priority, enum_name))
conn.commit()
else:
print('Приоритет должен быть неотрицательным целым числом.')
return
except Exception as _ex:
print(f'Error {_ex} - ошибка при изменении приоритета конкретного перечисления.')
def check_cyclic_dependency_terminal_classifier(new_parent_terminal_classifier_id, terminal_classifier_id):
try:
def fetch_parent_terminal_classifier(enum_id):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (enum_id,))
return cursor.fetchone()[0]
current_id = new_parent_terminal_classifier_id
while current_id is not None:
if current_id == terminal_classifier_id:
return True
current_id = fetch_parent_terminal_classifier(current_id)
return False
except Exception as _ex:
print(f'Error {_ex} - ошибка при проверке классов перечисления на цикл.')
def change_parent_of_terminal_classifier(terminal_classifier_name, new_parent_terminal_classifier=None):
try:
print(f'введенные категории - для {terminal_classifier_name} назначить родителем {new_parent_terminal_classifier}')
if (is_enum_exist(terminal_classifier_name)):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_enum = cursor.fetchone()[0]
if (new_parent_terminal_classifier is not None):
if (is_enum_exist(new_parent_terminal_classifier)):
if (terminal_classifier_name == new_parent_terminal_classifier):
print('Нельзя назначить классу самого себя в родители.')
return
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_parent_terminal_classifier,))
id_new_parent_terminal_classifier = cursor.fetchone()[0]
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_class_of_class = cursor.fetchone()[0]
# Check for cyclic dependency using the recursive function
if check_cyclic_dependency_terminal_classifier(id_new_parent_terminal_classifier, id_enum):
if (id_parent_class_of_class):
# if parent class has had their own parent then would set it
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_terminal_classifier, id_enum))
conn.commit()
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_parent_class_of_class, id_new_parent_terminal_classifier ))
conn.commit()
print('Родитель у подкласса был успешно изменен.')
else:
# if not then class becomes root
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE terminal_classifier_name = ?", (None, new_parent_terminal_classifier))
conn.commit()
print(f'Подкласс c terminal_classifier_name - {new_parent_terminal_classifier} стала родительской.')
# Update the parent class
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_terminal_classifier, id_enum ))
conn.commit()
else:
print('Новая родительский класс не существует.')
else:
# code for new_parent_class=None
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (None, id_enum))
conn.commit()
print('Класс стал корневым / одним из корневых')
else:
print('Указанного класса не существует.')
except Exception as _ex:
conn.rollback()
print(f"Ошибка в изменении родителя класса (terminal_classifier): {_ex}")
def delete_product(product_name):
try:
# Удаление изделия
cursor.execute("DELETE FROM product WHERE product_name = ?", (product_name,))
rows_deleted = cursor.rowcount
if rows_deleted > 0:
print('Изделие успешно удалено.')
else:
print('Изделие с указанным названием не найдено.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при удалении изделия: {_ex}")
def delete_category(terminal_classifier_name):
try:
if is_category_exists(terminal_classifier_name):
# Получаем идентификатор удаляемой категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?;", (terminal_classifier_name,))
delete_id = cursor.fetchone()[0]
# Перемещаем все подкатегории удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE category SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (delete_id,))
# Перемещаем все изделия удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE product SET id_category = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_category = ?", (delete_id,))
# Удаляем категорию
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (delete_id,))
conn.commit()
print('Категория успешно удалена.')
else:
print('Указанная категория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении категории: {_ex}")
def delete_subcategory(subterminal_classifier_name):
try:
if is_category_exists(subterminal_classifier_name):
# Получаем идентификатор удаляемой подкатегории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (subterminal_classifier_name,))
subcategory_id = cursor.fetchone()[0]
# Перемещаем связанные изделия в категорию "неопределенные"
cursor.execute("UPDATE product SET id_category = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_category = ?", (subcategory_id,))
# Перемещаем связанные подкатегории в категорию "неопределенные"
cursor.execute("UPDATE category SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (subcategory_id,))
# Удаляем подкатегорию
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (subcategory_id,))
conn.commit()
print('Подкатегория успешно удалена.')
else:
print('Указанная подкатегория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении подкатегории: {_ex}")
def get_subcategory_parent(subterminal_classifier_name):
try:
if is_category_exists(subterminal_classifier_name):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (subterminal_classifier_name,))
id_parent_category_of_subcategory = cursor.fetchone()[0]
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (id_parent_category_of_subcategory,))
parent_terminal_classifier_name = cursor.fetchone()[0]
return parent_terminal_classifier_name
else:
print('Указанной подкатегории не существует!')
except Exception as _ex:
print(f"Произошла ошибка при получении родительской категории подкатегории: {_ex}")
def check_cyclic_dependency(new_parent_id, category_id):
def fetch_parent_category(cat_id):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (cat_id,))
return cursor.fetchone()[0]
current_id = new_parent_id
while current_id is not None:
if current_id == category_id:
return True
current_id = fetch_parent_category(current_id)
return False
def change_parent_of_category(terminal_classifier_name, new_parent_category=None):
try:
print(f'введенные категории - для {terminal_classifier_name} назначить родителем {new_parent_category}')
if (is_category_exists(terminal_classifier_name)):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_category = cursor.fetchone()[0]
if (new_parent_category is not None):
if (is_category_exists(new_parent_category)):
if (terminal_classifier_name == new_parent_category):
print('Нельзя назначить категории саму себя в родители.')
return
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_parent_category,))
id_new_parent_category = cursor.fetchone()[0]
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_category_of_category = cursor.fetchone()[0]
# Check for cyclic dependency using the recursive function
if check_cyclic_dependency(id_new_parent_category, id_category):
if (id_parent_category_of_category):
# if parent category has had their own parent then would set it
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category))
conn.commit()
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_parent_category_of_category, id_new_parent_category ))
conn.commit()
print('Родитель у подкатегории был успешно изменен.')
else:
# if not then category becomes root
cursor.execute("UPDATE category SET id_parent = ? WHERE terminal_classifier_name = ?", (None, new_parent_category))
conn.commit()
print(f'Подкатегория c terminal_classifier_name {new_parent_category} стала родительской.')
# Update the parent category
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category ))
conn.commit()
else:
print('Новая родительская категория не существует.')
else:
# code for new_parent_category=None
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (None, id_category))
conn.commit()
print('Категория стала корневой / одной из корневых')
else:
print('Указанной категории не существует.')
except Exception as _ex:
conn.rollback()
print(f"Ошибка в изменении родителя категории: {_ex}")
def change_terminal_classifier_name(old_name, new_name):
try:
if is_category_exists(old_name):
if not is_category_exists(new_name):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (old_name,))
terminal_classifier_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE category SET terminal_classifier_name = ? WHERE id = ?", (new_name, terminal_classifier_name_id))
print('Имя категории успешно изменено.')
else:
print('Указанное новое имя категории уже существует!')
else:
print('Указанная категория не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени категории: {_ex}")
def change_product_name(old_name, new_name):
try:
if is_product_exist(old_name):
if not is_product_exist(new_name):
cursor.execute("SELECT id FROM product WHERE product_name = ?", (old_name,))
product_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE product SET product_name = ? WHERE id = ?", (new_name, product_name_id))
print('Имя изделия успешно изменено.')
else:
print('Указанное новое имя изделия уже существует!')
else:
print('Указанное изделие не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени изделия: {_ex}")
def get_category_parents(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
terminal_classifier_name_copy = terminal_classifier_name
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# function for recursive search parents
def find_parents(category_id, parents_list):
id_parent = 0
cursor.execute("SELECT EXISTS(SELECT 1 FROM terminal_classifier WHERE id = ?)", (category_id,))
record_exists = cursor.fetchone()[0]
if record_exists:
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (category_id,))
id_parent = cursor.fetchone()[0]
if id_parent == 0:
return
if category_id != 0 and id_parent != 0:
if id_parent != 0:
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (id_parent,))
parent_name = cursor.fetchone()
parents_list.append(parent_name)
find_parents(id_parent, parents_list)
parents_list = []
parents_list_res = []
# begin recursive search for parents
find_parents(category_id, parents_list)
for elem in parents_list:
if elem:
parents_list_res.append(elem[0])
if parents_list_res:
print(f'родительские элементы для категории "{terminal_classifier_name_copy}": \n {parents_list_res}')
else:
print(f'У категории "{terminal_classifier_name_copy}" нет родительских элементов')
except Exception as _ex:
print(f"Произошла ошибка при получении списка родителей категории: {_ex}")
else:
print('Категории не существует.')
def print_category_children(terminal_classifier_name, order):
if not is_category_exists(terminal_classifier_name):
print("Такой категории нет.")
return
children_list_res = get_category_children(terminal_classifier_name)
if children_list_res:
if order == 'прямой':
print(f'дочерние элементы для категории "{terminal_classifier_name}": \n {children_list_res}')
elif order == 'обратный':
print(f'дочерние элементы для категории "{terminal_classifier_name}": \n {children_list_res[::-1]}')
else:
print('Такого порядка вывода нет!')
else:
print(f'У категории "{terminal_classifier_name}" нет дочерних элементов')
def get_category_children(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# function for recursive search subcategories
def find_children(category_id, children_list):
childrens_id = 0
childrens_id = []
cursor.execute("SELECT COUNT(*) FROM terminal_classifier WHERE id_parent = ?", (category_id,))
record_exists = cursor.fetchall()
if record_exists:
cursor.execute("SELECT id FROM terminal_classifier WHERE id_parent = ?", (category_id,))
childrens_id = cursor.fetchall()
if childrens_id == 0:
return
if category_id != 0 and childrens_id != 0:
for elem in childrens_id:
elem_id = elem[0]
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (elem_id,))
child_name = cursor.fetchone()
children_list.append(child_name)
find_children(elem_id, children_list)
children_list = []
children_list_res = []
# begin search subcategories
find_children(category_id, children_list)
for elem in children_list:
if elem:
children_list_res.append(elem[0])
return children_list_res
except Exception as _ex:
print(f"Произошла ошибка при получении списка дочерних категорий: {_ex}")
else:
print('Категории не существует.')
############### added after first review ###############
def print_products_of_category(terminal_classifier_name, order):
products = get_products_of_category(terminal_classifier_name)
if products:
print(f'Изделия для категории "{terminal_classifier_name}":')
print_str = ''
if order == 'прямой':
for prod in products:
print_str += '"' + prod + '"' + ' '
print(print_str)
elif order == 'обратный':
products = products[::-1]
for prod in products:
print_str += '"' + prod + '"' + ' '
print(print_str)
else:
print('Такого порядка вывода нет!')
else:
print(f'У категории "{terminal_classifier_name}" нет изделий')
def get_products_of_category(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
try:
categories_to_check = get_category_children(terminal_classifier_name)
products = []
if categories_to_check:
for category in categories_to_check:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (category,))
id_of_searched_category = cursor.fetchone()[0]
cursor.execute("SELECT id FROM product WHERE id_category = ?", (id_of_searched_category,))
products_id = cursor.fetchall()
for id in products_id:
cursor.execute("SELECT product_name FROM product WHERE id = ?", (id[0],))
product_to_add = cursor.fetchone()[0]
products.append(product_to_add)
else:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_of_searched_category = cursor.fetchone()[0]
cursor.execute("SELECT id FROM product WHERE id_category = ?", (id_of_searched_category,))
products_id = cursor.fetchall()
for id in products_id:
cursor.execute("SELECT product_name FROM product WHERE id = ?", (id[0],))
product_to_add = cursor.fetchone()[0]
products.append(product_to_add)
return products
except Exception as _ex:
print(f"Произошла ошибка при поиске изделия заданной категории: {_ex}")
else:
print('Категории не существует.')
def fill_data_example():
add_unit('килограмм', 'кг')
add_unit('штука', 'шт')
add_unit('метр', 'м')
add_unit('милиметр', 'мм')
add_unit('метр-квадратный', 'м2')
add_unit('метр-кубический', 'м3')
add_unit('секунда', 'с')
add_unit('ватт', 'вт')
add_unit('метры-в-секунду', 'м/с')
add_category("категория неопределенное", 'ктгр нпрдлн')
add_category("категория изделия", 'ктгр издл')
##
add_subcategory("категория изделия", "категория столы", 'ктгр стлы', 2)
add_subcategory("категория столы", "категория столы-металл", 'ктгр стлы-мтл',2)
add_product("стол_arizone", "категория столы-металл", 110, 2500, None)
add_product("стол_garden_story", "категория столы-металл", 54, 5665, None)
#
add_subcategory("категория столы", "категория столы-дерево", 'ктгр стлы-дрв', 2)
add_product("стол_эстер", "категория столы-дерево", 124, 6460, None)
add_product("стол_кентуки", "категория столы-дерево", 1340, 2400, None)
##
add_subcategory("категория изделия", "категория стулья", 'ктгр стля', 2)
add_subcategory("категория стулья", "категория стулья-пластик", 'ктгр стля-плстк', 2)
add_product("стул_rambo", "категория стулья-пластик", 435, 1580, None)
add_product("стул_keter", "категория стулья-пластик", 252, 1300, None)
#
add_subcategory("категория стулья", "категория стулья-металл", 'ктгр стля-мтл', 2)
add_product("стул_arizone", "категория стулья-пластик", 245, 3400, None)
add_product("стул_giardino", "категория стулья-пластик", 25, 2400, None)
##
add_subcategory("категория изделия", "категория кресла", 'ктгр крсл', 2)
add_subcategory("категория кресла", "категория кресла-кресло_кокон", 'ктгр крсл-ккн', 2)
add_product("кресло-m-group", "категория кресла-кресло_кокон", 24, 12000, None)
add_product("кресло-гамак", "категория кресла-кресло_кокон", 14, 15500, None)
#
add_subcategory("категория кресла", "категория кресла-двухместное_кресло", 'ктгр крсл-двмстн', 2)
add_product("кресло-gemini_promob", "категория кресла-двухместное_кресло", 4, 8999, None)
add_product("кресло-парящая_кровать", "категория кресла-двухместное_кресло", 54, 9999, None)
add_enum_in_classifier('перечисление неопределенное', 'п-нпрдлн', None, None)
add_enum_in_classifier('перечисление перечисление', 'п-enum', None, None)
add_enum_in_classifier('перечисление чисел', 'п-чсл', 'перечисление', None)
add_enum_in_classifier('перечисление целых-чисел', 'п-ц-чсл', 'перечисление чисел', None)
add_enum_in_classifier('перечисление вещественных-чисел', 'п-в-чсл', 'перечисление чисел', None)
add_enum_in_classifier('перечисление букв','п-бкв', 'перечисление перечисление', None)
add_enum_in_classifier('перечисление строк','п-стр', 'перечисление букв', None)
add_enum_in_classifier('перечисление размер', 'п-рзм', 'перечисление вещественных чисел', None)
add_enum_in_classifier('перечисление материал', 'п-мтр', 'перечисление строк', None)
add_enum_in_classifier('перечисление ширина', 'п-шрн', 'перечисление размер', 4) #10
add_enum_in_classifier('перечисление высота', 'п-вст', 'перечисление размер', 4) #11
add_enum_in_classifier('перечисление длина', 'п-длн', 'перечисление размер', 4) #12
add_enum_pos(10, 'перечисление ширина ножки стула', 'п-шрн-нжк-стл', 'ширина ножки стула дачного', 50, None, None, 2)
add_enum_pos(11, 'перечисление высота ножки стула', 'п-вст-нжк-стл', 'ширина ножки стула дачного', 500, None, None, 2)
add_enum_pos(12, 'перечисление длина ножки стула', 'п-длн-нжк-стл', 'ширина ножки стула дачного', 50, None, None, 2)
# dropAllTables()
# fill_data_example()
# add_enum_pos(10, 'ширина стул_rambo', 'шрн с_rambo', 'стул дачный', 0.555, None, None, 2, None)
# delete_enum_pos('ширина стул_rambo')
# change_enum_pos(2, 'ширина стул_rambo new', 'шрн с_rambo new', 'стул дачный new', 0.9, None, None, 2)
# print(is_enum_pos_exist('ширина стул_rambo'))
# edit_enum_pos_priority(3, 1)
# find_enums(10)
# change_enum_priority('ширина стул_arizone', 2)
# print(is_enum_pos_exist('длина'))
# delete_enum_pos('ширина')
# change_enum_pos(2, 'высота_new', 'вст_new')
# change_enum_priority('длина', 1)
# change_parent_of_terminal_classifier('материал')
# edit_enum_pos_priority(5, 0)
# add_enum_in_classifier('неопределенное', 'н', None)
# add_enum_in_classifier('перечисление', 'enum', None)
# add_enum_in_classifier('перечисление чисел', 'п-чсл', 'перечисление')
# add_enum_pos(1, 'оттенок', 'отнк', enum_description=None, real_value=None, int_value=None, pic_value=None, id_unit=None, priority=None)
# change_enum_pos(2, 'test for ottenok 2', 'test_otnk_2', new_enum_description=None, new_real_value=None, new_int_value=None, new_pic_value=None, new_id_unit=2)
# edit_enum_pos_priority(2, 0)
# change_parent_of_terminal_classifier(terminal_classifier_name)
# change_parent_of_terminal_classifier(terminal_classifier_name, new_parent_terminal_classifier=None)
conn.close()
import sqlite3
path = "C:/Users/admin/source/repos/UNIVERSITY_repos/3 course/6 sem/mispris/2/furniture.db"
# path = "/home/user/repos/mispris/2/furniture.db"
conn = sqlite3.connect(path)
cursor = conn.cursor()
print("\n\nDB has been created/connected\n")
conn.execute("PRAGMA foreign_keys = ON")
# def create_category_table():
# cursor.execute('''CREATE TABLE IF NOT EXISTS category
# (id INTEGER PRIMARY KEY AUTOINCREMENT,
# id_parent INTEGER,
# terminal_classifier_name TEXT UNIQUE,
# FOREIGN KEY (id_parent) REFERENCES category(id))''')
# conn.commit()
def create_product_table():
cursor.execute('''
CREATE TABLE IF NOT EXISTS product (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id_category INTEGER,
product_name TEXT NOT NULL,
quantity INTEGER DEFAULT 0,
price REAL DEFAULT 0,
unit_value REAL,
FOREIGN KEY (id_category) REFERENCES terminal_classifier(id)
)
''')
conn.commit()
########################## second lab ##########################
def create_terminal_classifier_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS terminal_classifier
(id INTEGER PRIMARY KEY AUTOINCREMENT,
id_parent INTEGER,
terminal_classifier_name TEXT NOT NULL,
terminal_classifier_short_name TEXT NOT NULL,
id_unit INTEGER,
FOREIGN KEY (id_unit) REFERENCES unit(id),
FOREIGN KEY (id_parent) REFERENCES terminal_classifier(id))''')
conn.commit()
def create_enum_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS enum
(id INTEGER PRIMARY KEY AUTOINCREMENT,
enum_id INTEGER,
priority INTEGER NOT NULL DEFAULT 0,
enum_name TEXT NOT NULL,
enum_short_name TEXT NOT NULL,
enum_description TEXT,
real_value REAL,
int_value INTEGER,
pic_value TEXT,
FOREIGN KEY (enum_id) REFERENCES terminal_classifier(id))''')
conn.commit()
def create_unit_table():
cursor.execute('''CREATE TABLE IF NOT EXISTS unit
(id INTEGER PRIMARY KEY AUTOINCREMENT,
unit_name TEXT UNIQUE,
unit_name_short TEXT UNIQUE)''')
conn.commit()
def creating_tables():
# create_category_table()
create_product_table()
create_terminal_classifier_table()
create_enum_table()
create_unit_table()
creating_tables()
def delete_data(tables_order):
try:
for table_name in tables_order:
cursor.execute(f"DELETE FROM {table_name};")
conn.commit()
print("Данные успешно удалены")
except sqlite3.Error as _ex:
print(f"Произошла ошибка при удалении данных: {_ex}")
def dropAllTables():
try:
# Список таблиц в порядке, в котором их нужно удалить (сначала те, которые не содержат внешних ключей)
tables_order = [ 'product', 'enum', 'terminal_classifier', 'unit']
delete_data(tables_order)
for table_name in tables_order:
cursor.execute(f"DROP TABLE IF EXISTS {table_name};")
conn.commit()
print("Таблицы успешно удалены")
except Exception as _ex:
print(f"Произошла ошибка при удалении таблиц: {_ex}")
def is_category_exists(terminal_classifier_name):
cursor.execute("SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
def is_product_exist(product_name):
cursor.execute("SELECT COUNT(*) FROM product WHERE product_name = ?", (product_name,))
count = cursor.fetchone()[0]
res = count > 0
return res
def is_unit_exist(unit_name_short):
cursor.execute("SELECT COUNT(*) FROM unit WHERE unit_name_short = ?", (unit_name_short,))
count = cursor.fetchone()[0]
res = count > 0
return res
def add_unit(unit_name, unit_name_short):
try:
if not is_unit_exist(unit_name_short):
cursor.execute('''
INSERT INTO unit (unit_name, unit_name_short)
VALUES (?, ?)
''', (unit_name, unit_name_short))
conn.commit()
print('Единица измерения успешно добавлена.')
else:
print('Единица измерения с таким названием уже существует.')
except Exception as _ex:
print(f'Error {_ex} - произошла ошибка при добавлении единицы измерения')
def add_category(terminal_classifier_name, terminal_classifier_short_name, id_parent=None, id_unit=None):
# try:
if is_category_exists(terminal_classifier_name):
print(f'Категория с названием {terminal_classifier_name} уже существует.')
return
if id_unit:
cursor.execute("SELECT COUNT(*) FROM unit WHERE id = ?", (id_unit,))
unit_check_exist = cursor.fetchone()[0]
if not unit_check_exist:
print(f'Указанного id единицы измерения не существует!')
return
cursor.execute('''
INSERT INTO terminal_classifier (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit)
VALUES (?, ?, ?, ?)
''', (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit))
conn.commit()
print('Категория успешно добавлена.')
# except Exception as _ex:
# print(f'Error {_ex} - ошибка при добавлении категории.')
def add_subcategory(terminal_classifier_name, subterminal_classifier_name, subterminal_classifier_short_name, id_unit=None):
try:
if is_category_exists(terminal_classifier_name):
# Получаем Id категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_to_set = cursor.fetchone()[0]
add_category(subterminal_classifier_name, subterminal_classifier_short_name, id_parent_to_set, id_unit)
conn.commit()
print("Подкатегория успешно добавлена.")
else:
print("Указанная категория/подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении подкатегории: {_ex}")
def edit_category(id, terminal_classifier_name_new, terminal_classifier_short_name_new, id_unit=None):
try:
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE id = ?', (id,))
if cursor.fetchone()[0] == 0:
raise ValueError(f"Запись с id={id} не найдена в таблице terminal_classifier.")
if id_unit is not None:
cursor.execute('SELECT COUNT(*) FROM unit WHERE id = ?', (id_unit,))
if cursor.fetchone()[0] == 0:
raise ValueError(f"Запись с id_unit={id_unit} не найдена в таблице unit.")
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_name = ? AND id != ?', (terminal_classifier_name_new, id))
if cursor.fetchone()[0] > 0:
raise ValueError(f"Новое полное имя '{terminal_classifier_name_new}' уже занято.")
cursor.execute('SELECT COUNT(*) FROM terminal_classifier WHERE terminal_classifier_short_name = ? AND id != ?', (terminal_classifier_short_name_new, id))
if cursor.fetchone()[0] > 0:
raise ValueError(f"Новое короткое имя '{terminal_classifier_short_name_new}' уже занято.")
cursor.execute('''
UPDATE terminal_classifier
SET terminal_classifier_name = ?,
terminal_classifier_short_name = ?,
id_unit = ?
WHERE id = ?
''', (terminal_classifier_name_new, terminal_classifier_short_name_new, id_unit, id))
# Подтверждаем изменения
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении категории: {_ex}")
def add_product(product_name, terminal_classifier_name, quantity, price, unit_value ):
try:
if is_category_exists(terminal_classifier_name):
# Получаем id подкатегории по ее названию
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# Добавляем новое изделие в таблицу Изделие
cursor.execute("INSERT INTO product (id_category, product_name, quantity, price, unit_value) VALUES (?, ?, ?, ?, ?)",
(category_id, product_name, quantity, price, unit_value))
conn.commit()
print("Изделие успешно добавлено.")
else:
print("Указанная подкатегория не существует.")
except Exception as _ex:
print(f"Произошла ошибка при добавлении изделия: {_ex}")
def get_all_categories():
try:
cursor.execute("SELECT * FROM terminal_classifier")
categories_names = cursor.fetchall()
return categories_names
except Exception as _ex:
print(f"Произошла ошибка при получении категорий: {_ex}")
return None
def get_all_products():
try:
cursor.execute("SELECT * FROM product")
products_names = cursor.fetchall()
return products_names
except Exception as _ex:
print(f"Произошла ошибка при получении товаров: {_ex}")
return None
def product_update_price(product_name, new_price):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET price = ? WHERE product_name = ?", (new_price, product_name))
conn.commit()
print('Цена изделия успешно обновлена.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при обновлении цены изделия: {_ex}")
def product_update_quantity(product_name, new_quantity):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET quantity = ? WHERE product_name = ?", (new_quantity, product_name))
conn.commit()
print('Количество изделия успешно обновлено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при обновлении цены изделия: {_ex}")
def change_product_category(product_name, new_category):
try:
if is_category_exists(new_category):
# Получаем идентификатор новой категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_category,))
new_category_id = cursor.fetchone()[0]
# Обновляем категорию у изделия
cursor.execute("UPDATE product SET id_category = ? WHERE product_name = ?", (new_category_id, product_name))
conn.commit()
print('Категория изделия успешно изменена.')
else:
print('Указанная новая подкатегория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при изменении подкатегории изделия: {_ex}")
def change_product_unit_value(product_name, unit_value):
try:
if is_product_exist(product_name):
cursor.execute("UPDATE product SET unit_value = ? WHERE product_name = ?", (unit_value, product_name))
conn.commit()
print('Значение единицы измерения изделия успешно изменено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при изменении значения единицы измерения изделия: {_ex}")
def delete_product_unit_value(product_name):
try:
if is_product_exist(product_name):
# cursor.execute("SELECT id_unit FROM product WHERE product_name = ?", (product_name,))
# delete_unit_id = cursor.fetchone()[0]
cursor.execute("UPDATE product SET unit_value = ? WHERE product_name = ?", (None, product_name))
conn.commit()
print('Значение единицы измерения изделия успешно удалено.')
else:
print('Указанное изделие не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении значения единицы измерения изделия: {_ex}")
def is_enum_exist(terminal_classifier_name):
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
check_if_exist = cursor.fetchone()
return check_if_exist
except Exception as _ex:
print(f"Произошла ошибка при проверке перечисления на существование: {_ex}")
def is_enum_pos_exist(enum_name):
try:
cursor.execute("SELECT id FROM enum WHERE enum_name = ?", (enum_name,))
check_if_exist = cursor.fetchone()
if check_if_exist:
return True
else:
return False
except Exception as _ex:
print(f"Произошла ошибка при проверке перечисления на существование: {_ex}")
def add_enum_pos(enum_id, enum_name, enum_short_name, enum_description=None, real_value=None, int_value=None, pic_value=None, priority=None):
try:
# Check if enum already exists in terminal_classifier
if is_enum_pos_exist(enum_name):
print("Указанное перечисление уже существует.")
return
# Get next priority if not provided
if priority is None:
cursor.execute("SELECT COALESCE(MAX(priority), 0) + 1 FROM enum", ())
priority = cursor.fetchone()[0]
# UPDATE via id
cursor.execute("INSERT INTO enum (enum_id, enum_name, enum_short_name, enum_description, real_value, int_value, pic_value, priority) VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
(enum_id, enum_name, enum_short_name, enum_description, real_value, int_value, pic_value, priority))
conn.commit()
print('Перечисление успешно добавлено.')
except Exception as _ex:
print(f"Произошла ошибка при добавлении перечисления: {_ex}")
def delete_enum_classification(terminal_classifier_name):
try:
if is_enum_exist(terminal_classifier_name):
# Получаем идентификатор удаляемого класса перечислений
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
delete_id = cursor.fetchone()[0]
# Перемещаем все классы перечисления удаляемого класса перечисления в класс-перечисление "неопределенные"
cursor.execute("UPDATE terminal_classifier SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (delete_id,))
# Перемещаем все перечисления удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE enum SET enum_id = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE enum_id = ?", (delete_id,))
# Удаляем класс-перечисление
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (delete_id,))
conn.commit()
print('Класс перечисления успешно удален.')
else:
print('Указанный класс перечисления не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении класса перечисления: {_ex}")
def delete_enum_pos(enum_name):
try:
# Удаление перечисления
cursor.execute("DELETE FROM enum WHERE enum_name = ?", (enum_name,))
rows_deleted = cursor.rowcount
if rows_deleted > 0:
print('Перечисление успешно удалено.')
else:
print('Перечисление с указанным названием не найдено.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при удалении перечисления: {_ex}")
def change_enum_pos(id, new_enum_name, new_enum_short_name, new_enum_description=None, new_real_value=None, new_int_value=None, new_pic_value=None):
try:
cursor.execute("SELECT enum_name FROM enum WHERE id = ?", (id,))
old_name_to_check = cursor.fetchone()[0]
if is_enum_pos_exist(old_name_to_check):
cursor.execute("UPDATE enum SET enum_name = ?, enum_short_name = ?, enum_description = ?, real_value = ?, int_value = ?, pic_value = ? WHERE id = ?",
(new_enum_name, new_enum_short_name, new_enum_description, new_real_value, new_int_value, new_pic_value, id))
conn.commit()
print('Перечисление изменено.')
else:
print('Указаное перечисление не найдено.')
return
except Exception as _ex:
print(f"Произошла ошибка при изменении перечисления: {_ex}")
def edit_enum_pos_priority(enum_pos_id, new_priority):
try:
# Получаем enum_id для указанного enum_pos_id
cursor.execute("SELECT enum_id FROM enum WHERE id = ?", (enum_pos_id,))
result = cursor.fetchone()
if result is None:
print('Указанное enum_pos_id не найдено.')
return None
enum_id = result[0]
# Проверяем, существует ли уже запись с таким priority для данного enum_id
cursor.execute("""
SELECT count(*)
FROM enum
WHERE priority = ?
AND enum_id = ?
""", (new_priority, enum_id))
count = cursor.fetchone()[0]
if count == 0:
# Обновляем priority
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
else:
# Смещаем приоритеты и обновляем нужную запись
cursor.execute("""
UPDATE enum
SET priority = priority + 1
WHERE priority >= ?
AND enum_id = ?
""", (new_priority, enum_id))
cursor.execute("""
UPDATE enum
SET priority = ?
WHERE id = ?
""", (new_priority, enum_pos_id))
conn.commit()
print("Приоритет перечисления изменен")
return new_priority
except Exception as _ex:
print(f"Произошла ошибка при изменении приоритета перечисления: {_ex}")
def find_enums(enum_class_id):
try:
cursor.execute("""
SELECT ep.id, ep.enum_name, ep.enum_short_name, ep.enum_id, ep.priority, ep.real_value, ep.int_value, ep.pic_value
FROM enum ep
WHERE ep.enum_id = ?
ORDER BY ep.priority ASC
""", (enum_class_id,))
results = cursor.fetchall()
for row in results:
print(row)
return results
except Exception as _ex:
print(f"Произошла ошибка при получении списка перечислений заданного класса: {_ex}")
def add_enum_in_classifier(terminal_classifier_name, terminal_classifier_short_name, enum_parent_name, id_unit=None):
# try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (enum_parent_name,))
id_parent_check = cursor.fetchone()
if id_parent_check is not None:
id_parent = id_parent_check[0]
else:
id_parent = None
if id_unit:
cursor.execute("SELECT COUNT(*) FROM unit WHERE id = ?", (id_unit,))
count = cursor.fetchone()[0]
if (not count):
print(f'Произошла ошибка при добавлении записи в enum_classifier! Указанного id_unit не существует.')
cursor.execute('''
INSERT INTO terminal_classifier (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit)
VALUES (?, ?, ?, ?)
''', (terminal_classifier_name, terminal_classifier_short_name, id_parent, id_unit))
conn.commit()
print('Класс перечисления успешно добавлен в основную базу.')
# except Exception as _ex:
# print(f'Error {_ex} - ошибка при добавлении enum_in_classifier.')
def change_enum_priority(enum_name, priority):
try:
if (priority >= 0):
cursor.execute("UPDATE enum SET priority = ? WHERE enum_name = ?", (priority, enum_name))
conn.commit()
else:
print('Приоритет должен быть неотрицательным целым числом.')
return
except Exception as _ex:
print(f'Error {_ex} - ошибка при изменении приоритета конкретного перечисления.')
def check_cyclic_dependency_terminal_classifier(new_parent_terminal_classifier_id, terminal_classifier_id):
try:
def fetch_parent_terminal_classifier(enum_id):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (enum_id,))
return cursor.fetchone()[0]
current_id = new_parent_terminal_classifier_id
while current_id is not None:
if current_id == terminal_classifier_id:
return True
current_id = fetch_parent_terminal_classifier(current_id)
return False
except Exception as _ex:
print(f'Error {_ex} - ошибка при проверке классов перечисления на цикл.')
def change_parent_of_terminal_classifier(terminal_classifier_name, new_parent_terminal_classifier=None):
try:
print(f'введенные категории - для {terminal_classifier_name} назначить родителем {new_parent_terminal_classifier}')
if (is_enum_exist(terminal_classifier_name)):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_enum = cursor.fetchone()[0]
if (new_parent_terminal_classifier is not None):
if (is_enum_exist(new_parent_terminal_classifier)):
if (terminal_classifier_name == new_parent_terminal_classifier):
print('Нельзя назначить классу самого себя в родители.')
return
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_parent_terminal_classifier,))
id_new_parent_terminal_classifier = cursor.fetchone()[0]
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_class_of_class = cursor.fetchone()[0]
# Check for cyclic dependency using the recursive function
if check_cyclic_dependency_terminal_classifier(id_new_parent_terminal_classifier, id_enum):
if (id_parent_class_of_class):
# if parent class has had their own parent then would set it
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_terminal_classifier, id_enum))
conn.commit()
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_parent_class_of_class, id_new_parent_terminal_classifier ))
conn.commit()
print('Родитель у подкласса был успешно изменен.')
else:
# if not then class becomes root
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE terminal_classifier_name = ?", (None, new_parent_terminal_classifier))
conn.commit()
print(f'Подкласс c terminal_classifier_name - {new_parent_terminal_classifier} стала родительской.')
# Update the parent class
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (id_new_parent_terminal_classifier, id_enum ))
conn.commit()
else:
print('Новая родительский класс не существует.')
else:
# code for new_parent_class=None
cursor.execute("UPDATE terminal_classifier SET id_parent = ? WHERE id = ?", (None, id_enum))
conn.commit()
print('Класс стал корневым / одним из корневых')
else:
print('Указанного класса не существует.')
except Exception as _ex:
conn.rollback()
print(f"Ошибка в изменении родителя класса (terminal_classifier): {_ex}")
def delete_product(product_name):
try:
# Удаление изделия
cursor.execute("DELETE FROM product WHERE product_name = ?", (product_name,))
rows_deleted = cursor.rowcount
if rows_deleted > 0:
print('Изделие успешно удалено.')
else:
print('Изделие с указанным названием не найдено.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при удалении изделия: {_ex}")
def delete_category(terminal_classifier_name):
try:
if is_category_exists(terminal_classifier_name):
# Получаем идентификатор удаляемой категории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?;", (terminal_classifier_name,))
delete_id = cursor.fetchone()[0]
# Перемещаем все подкатегории удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE category SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (delete_id,))
# Перемещаем все изделия удаляемой категории в категорию "неопределенные"
cursor.execute("UPDATE product SET id_category = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_category = ?", (delete_id,))
# Удаляем категорию
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (delete_id,))
conn.commit()
print('Категория успешно удалена.')
else:
print('Указанная категория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении категории: {_ex}")
def delete_subcategory(subterminal_classifier_name):
try:
if is_category_exists(subterminal_classifier_name):
# Получаем идентификатор удаляемой подкатегории
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (subterminal_classifier_name,))
subcategory_id = cursor.fetchone()[0]
# Перемещаем связанные изделия в категорию "неопределенные"
cursor.execute("UPDATE product SET id_category = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_category = ?", (subcategory_id,))
# Перемещаем связанные подкатегории в категорию "неопределенные"
cursor.execute("UPDATE category SET id_parent = (SELECT id FROM terminal_classifier WHERE terminal_classifier_name = 'неопределенные') WHERE id_parent = ?", (subcategory_id,))
# Удаляем подкатегорию
cursor.execute("DELETE FROM terminal_classifier WHERE id = ?", (subcategory_id,))
conn.commit()
print('Подкатегория успешно удалена.')
else:
print('Указанная подкатегория не существует.')
except Exception as _ex:
print(f"Произошла ошибка при удалении подкатегории: {_ex}")
def get_subcategory_parent(subterminal_classifier_name):
try:
if is_category_exists(subterminal_classifier_name):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (subterminal_classifier_name,))
id_parent_category_of_subcategory = cursor.fetchone()[0]
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (id_parent_category_of_subcategory,))
parent_terminal_classifier_name = cursor.fetchone()[0]
return parent_terminal_classifier_name
else:
print('Указанной подкатегории не существует!')
except Exception as _ex:
print(f"Произошла ошибка при получении родительской категории подкатегории: {_ex}")
def check_cyclic_dependency(new_parent_id, category_id):
def fetch_parent_category(cat_id):
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (cat_id,))
return cursor.fetchone()[0]
current_id = new_parent_id
while current_id is not None:
if current_id == category_id:
return True
current_id = fetch_parent_category(current_id)
return False
def change_parent_of_category(terminal_classifier_name, new_parent_category=None):
try:
print(f'введенные категории - для {terminal_classifier_name} назначить родителем {new_parent_category}')
if (is_category_exists(terminal_classifier_name)):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_category = cursor.fetchone()[0]
if (new_parent_category is not None):
if (is_category_exists(new_parent_category)):
if (terminal_classifier_name == new_parent_category):
print('Нельзя назначить категории саму себя в родители.')
return
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (new_parent_category,))
id_new_parent_category = cursor.fetchone()[0]
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_parent_category_of_category = cursor.fetchone()[0]
# Check for cyclic dependency using the recursive function
if check_cyclic_dependency(id_new_parent_category, id_category):
if (id_parent_category_of_category):
# if parent category has had their own parent then would set it
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category))
conn.commit()
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_parent_category_of_category, id_new_parent_category ))
conn.commit()
print('Родитель у подкатегории был успешно изменен.')
else:
# if not then category becomes root
cursor.execute("UPDATE category SET id_parent = ? WHERE terminal_classifier_name = ?", (None, new_parent_category))
conn.commit()
print(f'Подкатегория c terminal_classifier_name {new_parent_category} стала родительской.')
# Update the parent category
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (id_new_parent_category, id_category ))
conn.commit()
else:
print('Новая родительская категория не существует.')
else:
# code for new_parent_category=None
cursor.execute("UPDATE category SET id_parent = ? WHERE id = ?", (None, id_category))
conn.commit()
print('Категория стала корневой / одной из корневых')
else:
print('Указанной категории не существует.')
except Exception as _ex:
conn.rollback()
print(f"Ошибка в изменении родителя категории: {_ex}")
def change_terminal_classifier_name(old_name, new_name):
try:
if is_category_exists(old_name):
if not is_category_exists(new_name):
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (old_name,))
terminal_classifier_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE category SET terminal_classifier_name = ? WHERE id = ?", (new_name, terminal_classifier_name_id))
print('Имя категории успешно изменено.')
else:
print('Указанное новое имя категории уже существует!')
else:
print('Указанная категория не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени категории: {_ex}")
def change_product_name(old_name, new_name):
try:
if is_product_exist(old_name):
if not is_product_exist(new_name):
cursor.execute("SELECT id FROM product WHERE product_name = ?", (old_name,))
product_name_id = cursor.fetchone()[0]
cursor.execute("UPDATE product SET product_name = ? WHERE id = ?", (new_name, product_name_id))
print('Имя изделия успешно изменено.')
else:
print('Указанное новое имя изделия уже существует!')
else:
print('Указанное изделие не существует.')
conn.commit()
except Exception as _ex:
print(f"Произошла ошибка при изменении имени изделия: {_ex}")
def get_category_parents(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
terminal_classifier_name_copy = terminal_classifier_name
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# function for recursive search parents
def find_parents(category_id, parents_list):
id_parent = 0
cursor.execute("SELECT EXISTS(SELECT 1 FROM terminal_classifier WHERE id = ?)", (category_id,))
record_exists = cursor.fetchone()[0]
if record_exists:
cursor.execute("SELECT id_parent FROM terminal_classifier WHERE id = ?", (category_id,))
id_parent = cursor.fetchone()[0]
if id_parent == 0:
return
if category_id != 0 and id_parent != 0:
if id_parent != 0:
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (id_parent,))
parent_name = cursor.fetchone()
parents_list.append(parent_name)
find_parents(id_parent, parents_list)
parents_list = []
parents_list_res = []
# begin recursive search for parents
find_parents(category_id, parents_list)
for elem in parents_list:
if elem:
parents_list_res.append(elem[0])
if parents_list_res:
print(f'родительские элементы для категории "{terminal_classifier_name_copy}": \n {parents_list_res}')
else:
print(f'У категории "{terminal_classifier_name_copy}" нет родительских элементов')
except Exception as _ex:
print(f"Произошла ошибка при получении списка родителей категории: {_ex}")
else:
print('Категории не существует.')
def print_category_children(terminal_classifier_name, order):
if not is_category_exists(terminal_classifier_name):
print("Такой категории нет.")
return
children_list_res = get_category_children(terminal_classifier_name)
if children_list_res:
if order == 'прямой':
print(f'дочерние элементы для категории "{terminal_classifier_name}": \n {children_list_res}')
elif order == 'обратный':
print(f'дочерние элементы для категории "{terminal_classifier_name}": \n {children_list_res[::-1]}')
else:
print('Такого порядка вывода нет!')
else:
print(f'У категории "{terminal_classifier_name}" нет дочерних элементов')
def get_category_children(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
try:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
category_id = cursor.fetchone()[0]
# function for recursive search subcategories
def find_children(category_id, children_list):
childrens_id = 0
childrens_id = []
cursor.execute("SELECT COUNT(*) FROM terminal_classifier WHERE id_parent = ?", (category_id,))
record_exists = cursor.fetchall()
if record_exists:
cursor.execute("SELECT id FROM terminal_classifier WHERE id_parent = ?", (category_id,))
childrens_id = cursor.fetchall()
if childrens_id == 0:
return
if category_id != 0 and childrens_id != 0:
for elem in childrens_id:
elem_id = elem[0]
cursor.execute("SELECT terminal_classifier_name FROM terminal_classifier WHERE id = ?", (elem_id,))
child_name = cursor.fetchone()
children_list.append(child_name)
find_children(elem_id, children_list)
children_list = []
children_list_res = []
# begin search subcategories
find_children(category_id, children_list)
for elem in children_list:
if elem:
children_list_res.append(elem[0])
return children_list_res
except Exception as _ex:
print(f"Произошла ошибка при получении списка дочерних категорий: {_ex}")
else:
print('Категории не существует.')
############### added after first review ###############
def print_products_of_category(terminal_classifier_name, order):
products = get_products_of_category(terminal_classifier_name)
if products:
print(f'Изделия для категории "{terminal_classifier_name}":')
print_str = ''
if order == 'прямой':
for prod in products:
print_str += '"' + prod + '"' + ' '
print(print_str)
elif order == 'обратный':
products = products[::-1]
for prod in products:
print_str += '"' + prod + '"' + ' '
print(print_str)
else:
print('Такого порядка вывода нет!')
else:
print(f'У категории "{terminal_classifier_name}" нет изделий')
def get_products_of_category(terminal_classifier_name):
if is_category_exists(terminal_classifier_name):
try:
categories_to_check = get_category_children(terminal_classifier_name)
products = []
if categories_to_check:
for category in categories_to_check:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (category,))
id_of_searched_category = cursor.fetchone()[0]
cursor.execute("SELECT id FROM product WHERE id_category = ?", (id_of_searched_category,))
products_id = cursor.fetchall()
for id in products_id:
cursor.execute("SELECT product_name FROM product WHERE id = ?", (id[0],))
product_to_add = cursor.fetchone()[0]
products.append(product_to_add)
else:
cursor.execute("SELECT id FROM terminal_classifier WHERE terminal_classifier_name = ?", (terminal_classifier_name,))
id_of_searched_category = cursor.fetchone()[0]
cursor.execute("SELECT id FROM product WHERE id_category = ?", (id_of_searched_category,))
products_id = cursor.fetchall()
for id in products_id:
cursor.execute("SELECT product_name FROM product WHERE id = ?", (id[0],))
product_to_add = cursor.fetchone()[0]
products.append(product_to_add)
return products
except Exception as _ex:
print(f"Произошла ошибка при поиске изделия заданной категории: {_ex}")
else:
print('Категории не существует.')
def fill_data_example():
add_unit('килограмм', 'кг')
add_unit('штука', 'шт')
add_unit('метр', 'м')
add_unit('милиметр', 'мм')
add_unit('метр-квадратный', 'м2')
add_unit('метр-кубический', 'м3')
add_unit('секунда', 'с')
add_unit('ватт', 'вт')
add_unit('метры-в-секунду', 'м/с')
add_category("категория неопределенное", 'ктгр нпрдлн')
add_category("категория изделия", 'ктгр издл')
##
add_subcategory("категория изделия", "категория столы", 'ктгр стлы', 2)
add_subcategory("категория столы", "категория столы-металл", 'ктгр стлы-мтл',2)
add_product("стол_arizone", "категория столы-металл", 110, 2500, None)
add_product("стол_garden_story", "категория столы-металл", 54, 5665, None)
#
add_subcategory("категория столы", "категория столы-дерево", 'ктгр стлы-дрв', 2)
add_product("стол_эстер", "категория столы-дерево", 124, 6460, None)
add_product("стол_кентуки", "категория столы-дерево", 1340, 2400, None)
##
add_subcategory("категория изделия", "категория стулья", 'ктгр стля', 2)
add_subcategory("категория стулья", "категория стулья-пластик", 'ктгр стля-плстк', 2)
add_product("стул_rambo", "категория стулья-пластик", 435, 1580, None)
add_product("стул_keter", "категория стулья-пластик", 252, 1300, None)
#
add_subcategory("категория стулья", "категория стулья-металл", 'ктгр стля-мтл', 2)
add_product("стул_arizone", "категория стулья-пластик", 245, 3400, None)
add_product("стул_giardino", "категория стулья-пластик", 25, 2400, None)
##
add_subcategory("категория изделия", "категория кресла", 'ктгр крсл', 2)
add_subcategory("категория кресла", "категория кресла-кресло_кокон", 'ктгр крсл-ккн', 2)
add_product("кресло-m-group", "категория кресла-кресло_кокон", 24, 12000, None)
add_product("кресло-гамак", "категория кресла-кресло_кокон", 14, 15500, None)
#
add_subcategory("категория кресла", "категория кресла-двухместное_кресло", 'ктгр крсл-двмстн', 2)
add_product("кресло-gemini_promob", "категория кресла-двухместное_кресло", 4, 8999, None)
add_product("кресло-парящая_кровать", "категория кресла-двухместное_кресло", 54, 9999, None)
add_enum_in_classifier('перечисление неопределенное', 'п-нпрдлн', None, None)
add_enum_in_classifier('перечисление перечисление', 'п-enum', None, None)
add_enum_in_classifier('перечисление чисел', 'п-чсл', 'перечисление', None)
add_enum_in_classifier('перечисление целых-чисел', 'п-ц-чсл', 'перечисление чисел', None)
add_enum_in_classifier('перечисление вещественных-чисел', 'п-в-чсл', 'перечисление чисел', None)
add_enum_in_classifier('перечисление букв','п-бкв', 'перечисление перечисление', None)
add_enum_in_classifier('перечисление строк','п-стр', 'перечисление букв', None)
add_enum_in_classifier('перечисление размер', 'п-рзм', 'перечисление вещественных чисел', None)
add_enum_in_classifier('перечисление материал', 'п-мтр', 'перечисление строк', None)
add_enum_in_classifier('перечисление ширина', 'п-шрн', 'перечисление размер', 4) #10
add_enum_in_classifier('перечисление высота', 'п-вст', 'перечисление размер', 4) #11
add_enum_in_classifier('перечисление длина', 'п-длн', 'перечисление размер', 4) #12
add_enum_pos(10, 'перечисление ширина ножки стула', 'п-шрн-нжк-стл', 'ширина ножки стула дачного', 50, None, None, 2)
add_enum_pos(11, 'перечисление высота ножки стула', 'п-вст-нжк-стл', 'ширина ножки стула дачного', 500, None, None, 2)
add_enum_pos(12, 'перечисление длина ножки стула', 'п-длн-нжк-стл', 'ширина ножки стула дачного', 50, None, None, 2)
# dropAllTables()
# fill_data_example()
# add_enum_pos(10, 'ширина стул_rambo', 'шрн с_rambo', 'стул дачный', 0.555, None, None, 2, None)
# delete_enum_pos('ширина стул_rambo')
# change_enum_pos(2, 'ширина стул_rambo new', 'шрн с_rambo new', 'стул дачный new', 0.9, None, None, 2)
# print(is_enum_pos_exist('ширина стул_rambo'))
# edit_enum_pos_priority(3, 1)
# find_enums(10)
# change_enum_priority('ширина стул_arizone', 2)
# print(is_enum_pos_exist('длина'))
# delete_enum_pos('ширина')
# change_enum_pos(2, 'высота_new', 'вст_new')
# change_enum_priority('длина', 1)
# change_parent_of_terminal_classifier('материал')
# edit_enum_pos_priority(5, 0)
# add_enum_in_classifier('неопределенное', 'н', None)
# add_enum_in_classifier('перечисление', 'enum', None)
# add_enum_in_classifier('перечисление чисел', 'п-чсл', 'перечисление')
# add_enum_pos(1, 'оттенок', 'отнк', enum_description=None, real_value=None, int_value=None, pic_value=None, id_unit=None, priority=None)
# change_enum_pos(2, 'test for ottenok 2', 'test_otnk_2', new_enum_description=None, new_real_value=None, new_int_value=None, new_pic_value=None, new_id_unit=2)
# edit_enum_pos_priority(2, 0)
# change_parent_of_terminal_classifier(terminal_classifier_name)
# change_parent_of_terminal_classifier(terminal_classifier_name, new_parent_terminal_classifier=None)
conn.close()