= Тригер: trg_after_t_type_insert Автоматски го менува статусот на производот откако ќе се финализира набавката. Логика: * Се зема производот поврзан со TransactionID. * Ако типот е 'Buy', производот добива статус 'sold'. * Ако типот е 'Rent', производот добива статус 'rented'. SQL код: {{{ CREATE TRIGGER trg_after_t_type_insert AFTER INSERT ON t_type FOR EACH ROW BEGIN DECLARE v_product_id INT; SELECT ProductID INTO v_product_id FROM procurement WHERE TransactionID = NEW.TransactionID; IF NEW.Type = 'Buy' THEN UPDATE product SET Status = 'sold' WHERE ProductID = v_product_id; ELSEIF NEW.Type = 'Rent' THEN UPDATE product SET Status = 'rented' WHERE ProductID = v_product_id; END IF; END; }}} = Тригер: refund_wallet_after_reject Автоматски да се рефундира сумата на клиентот доколку неговото барање биде одбиено. Логика: * Кога статусот на барањето се менува од нешто друго во 'Rejected', парите се враќаат назад на соодветниот паричник (wallet). SQL код: {{{ CREATE TRIGGER refund_wallet_after_reject AFTER UPDATE ON procurement_request FOR EACH ROW BEGIN IF NEW.Status = 'Rejected' AND OLD.Status != 'Rejected' THEN UPDATE wallet SET Balance = Balance + NEW.TotalPrice WHERE WalletID = NEW.CardID; END IF; END; }}} = Тригер: prevent_duplicate_pending_request Спречува додавање на ново барање за набавка за производ кој веќе има статус Pending. Логика: * Доколку веќе постои барање за истиот ProductID со статус 'Pending', се прекинува внесувањето и се прикажува грешка. SQL код: {{{ CREATE TRIGGER prevent_duplicate_pending_request BEFORE INSERT ON procurement_request FOR EACH ROW BEGIN IF EXISTS ( SELECT 1 FROM procurement_request WHERE ProductID = NEW.ProductID AND Status = 'Pending' ) THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'This product already has a pending request; END IF; END; }}}