У меня есть 3 таблицы:
master_parts_list
id int(11) not null auto increment
part_number varchar(30) unique
description varchar(255)
price decimal(10,2)
weight decimal(10,2)
active tinyint(1)
quantity_on_hand decimal(10,2)
quantity_allocated decimal(10,2)
quantity_on_order decimal(10,2)
old_part_number varchar(30)
sales_orders
id int(11) not null primary key auto increment
quote_number int(11) unique
order_number int(11) unique
invoice_number int(11) unique
status varchar(255)
customer_number int(11)
customer_po_number char(30)
...and 15 others...
sales_order_parts
id int(11) not null primary key auto increment
order_id int(11)
part_id int(5)
order_quantity int(5)
ship_quantity int(5)
unit_price decimal(10,2)
note varchar(255)
Я хотел обновить поля
quantity_on_hand
quantity_allocated
количество_заказ
Что я хочу, чтобы результат был:
Когда запись добавляется в таблицу sales_order_parts, (создавая новую позицию для заказа на продажу) добавьте order_quantity в поле amount_allocated в master_part_list. Когда запись изменена или удалена для sales_order_parts для order_quantity, обновите поле amount_allocated. Когда запись представляет собой накладные, как указано значением в поле invoice_number, вычитайте ship_quantity из amount_on_hand. Основы управления запасами.
Мне написали триггер для вставки на sales_order_parts
создать триггер alloc_addition_insert
create trigger allocated_addition_insert
after insert on sales_order_parts
for each row
update master_part_list
set master_part_list.quantity_allocated=
(select sum(order_quantity)
from
sales_orders
inner join
sales_order_parts on sales_orders.id = sales_order_parts.order_id
where sales_orders.invoice_number is null and sales_order_parts.part_id = master_part_list.id
group by part_id)
Это работает, после каждой новой записи, код запускается и обновляет кол-во кол-во количественных элементов по количеству по нулевому счету invoice_number (то есть еще не выставлен счет).
Я работаю над триггером UPDATE для sales_orders
delimiter $$
create trigger allocated_order_on_hand_update
after update on sales_orders
for each row begin
update master_part_list
set master_part_list.quantity_on_hand=master_part_list.quantity_on_hand-(select sum(ship_quantity)
from
sales_orders
join
sales_order_parts on sales_orders.id = sales_order_parts.order_id
where sales_orders.invoice_number = new.sales_orders.invoice_number
and sales_orders.invoice_number is not null
group by part_id);
update master_part_list
set master_part_list.quantity_allocated=(select sum(order_quantity)
from
sales_orders
inner join
sales_order_parts on sales_orders.id = sales_order_parts.order_id
where sales_orders.invoice_number is null and sales_order_parts.part_id = master_part_list.id
group by part_id);
end$$
Второе обновление запускается, когда invoice_number имеет значение NULL, но при попытке обновить и сохранить счет-фактуру, который устанавливает номер счета-фактуры в поле invoice_number, он не работает, если invoice_number не равен NULL. Как правило, когда заказ получает счет-фактуру, вычтите сумму ship_quantity из amount_on_hand в master_part_list, но только части для этого конкретного заказа на продажу. Я получаю ошибку:
# 1054 - 'Неизвестный столбец' new.sales_orders.invoice_number 'в' предложении where "
Есть идеи?