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

4.1 Процедура, создающая запись в таблице «orders»:

функция: create_order - добавление записи в таблицу orders

-- вход:

-- 1. customer_name - название заказчика

-- 2. contact_person_name - контактное лицо

-- 3. order_time - время заказа

-- 4. order_completion_time - время завершения исполнения заказа

-- выход: нет

-- эффекты:

-- 1. создание новой записи в таблице orders

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

-- 1. передаваемые аргументы должны существовать

def create_order(customer_name, contact_person_name, order_time, order_completion_time):

try:

# Get IDs for customer and contact person

customer_id = get_terminal_classifier_id(customer_name)

contact_person_id = get_product_id(contact_person_name)

# Check if IDs exist

if customer_id is None:

raise ValueError(f"Customer '{customer_name}' does not exist.")

if contact_person_id is None:

raise ValueError(f"Contact person '{contact_person_name}' does not exist.")

# Insert into the orders table

cursor.execute(

"""

INSERT INTO orders (customer, contact_person, order_time, order_completion_time)

VALUES (?, ?, ?, ?)

""",

(customer_id, contact_person_id, order_time, order_completion_time)

)

conn.commit()

print("Заказ успешно создан!")

except sqlite3.Error as e:

print(f"Error creating order: {e}")

except ValueError as ve:

print(f"Validation error: {ve}")

4.2 Процедура, добавляющая позицию заказа:

функция: create_order_pos - добавление записи в таблицу orders_pos

-- вход:

-- 1. order_id_value - id заказа

-- 2. obj_id_value - id продукции на позицию

-- 3. quantity_value - количество продукции в партии в позиции заказа

-- выход: 1 - успех / 0 - иначе

-- эффекты:

-- 1. создание новой записи в таблице orders_pos

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

-- 1. передаваемые аргументы должны существовать

def create_order_pos(order_id_value, obj_id_value, quantity_value):

try:

# Validate quantity

if quantity_value <= 0:

raise ValueError(f"Кол-во({quantity_value}) должно быть больше 0")

# Check if order exists

cursor.execute('SELECT id FROM orders WHERE id = ?', (order_id_value,))

if cursor.fetchone() is None:

raise ValueError('Заказ должен существовать. Сейчас он не найден.')

# Check if product exists

cursor.execute('SELECT id, configurable_type FROM product WHERE id = ?', (obj_id_value,))

product = cursor.fetchone()

if product is None:

raise ValueError('Добавляемое в заказ изделие должно существовать. Сейчас оно не найдено.')

obj_configurable_type = product[1]

# Дополнительная проверка: configurable_type == 2

if obj_configurable_type == 2:

cursor.execute("""

SELECT id FROM prod_param

WHERE prod_id = ?

""", (obj_id_value,))

param_exists = cursor.fetchone() # Проверяем, есть ли хоть один параметр

if param_exists is None: # Если нет параметров, выбрасываем исключение

raise ValueError('Вариант исполнения без задания значений параметров не может быть добавлен в позицию заказа. Пожалуйста, добавьте значения параметров или выберите существующий вариант исполнения с указанными параметрами')

# Validate product type

if obj_configurable_type not in (0, 2):

print(f'Добавляемое в заказ изделие должно быть вариантом исполнения или изделием без конфигурации. Указано типовое изделие. Будет создан вариант исполнения')

new_variant_id = create_obj_variant(obj_id_value)

print(f'Был создан вариант исполнения с id={new_variant_id}\nЕсли хотите добавить позицию заказа, вызовите функцию create_order_pos() еще раз, передав в качестве id новое id варианта исполнения, которое равно id={new_variant_id}')

return

# Check if order position already exists

cursor.execute('''

SELECT quantity FROM orders_pos

WHERE order_id = ? AND prod_id = ?

''', (order_id_value, obj_id_value))

existing_order = cursor.fetchone()

if existing_order:

# Update quantity if it exists

new_quantity = existing_order[0] + quantity_value

cursor.execute('''

UPDATE orders_pos

SET quantity = ?

WHERE order_id = ? AND prod_id = ?

''', (new_quantity, order_id_value, obj_id_value))

else:

# Insert new order position

cursor.execute('''

INSERT INTO orders_pos (order_id, prod_id, quantity)

VALUES (?, ?, ?)

''', (order_id_value, obj_id_value, quantity_value))

conn.commit()

return 1 if cursor.rowcount == 1 else 0

except (sqlite3.Error, ValueError) as e:

print(f"Ошибка при добавлении позиции в заказ: {e}")

conn.rollback()

return 0

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