| 1 | | Triggers |
| | 1 | = Тригер: trg_after_t_type_insert |
| | 2 | Автоматски го менува статусот на производот откако ќе се финализира набавката. |
| | 3 | |
| | 4 | Логика: |
| | 5 | * Се зема производот поврзан со TransactionID. |
| | 6 | |
| | 7 | * Ако типот е 'Buy', производот добива статус 'sold'. |
| | 8 | |
| | 9 | * Ако типот е 'Rent', производот добива статус 'rented'. |
| | 10 | SQL код: |
| | 11 | |
| | 12 | {{{ |
| | 13 | CREATE TRIGGER trg_after_t_type_insert |
| | 14 | AFTER INSERT ON t_type |
| | 15 | FOR EACH ROW |
| | 16 | BEGIN |
| | 17 | DECLARE v_product_id INT; |
| | 18 | |
| | 19 | SELECT ProductID INTO v_product_id |
| | 20 | FROM procurement |
| | 21 | WHERE TransactionID = NEW.TransactionID; |
| | 22 | |
| | 23 | IF NEW.Type = 'Buy' THEN |
| | 24 | UPDATE product SET Status = 'sold' WHERE ProductID = v_product_id; |
| | 25 | ELSEIF NEW.Type = 'Rent' THEN |
| | 26 | UPDATE product SET Status = 'rented' WHERE ProductID = v_product_id; |
| | 27 | END IF; |
| | 28 | END; |
| | 29 | |
| | 30 | }}} |
| | 31 | |
| | 32 | = Тригер: refund_wallet_after_reject |
| | 33 | Автоматски да се рефундира сумата на клиентот доколку неговото барање биде одбиено. |
| | 34 | Логика: |
| | 35 | * Кога статусот на барањето се менува од нешто друго во 'Rejected', парите се враќаат назад на соодветниот паричник (wallet). |
| | 36 | SQL код: |
| | 37 | {{{ |
| | 38 | CREATE TRIGGER refund_wallet_after_reject |
| | 39 | AFTER UPDATE ON procurement_request |
| | 40 | FOR EACH ROW |
| | 41 | BEGIN |
| | 42 | IF NEW.Status = 'Rejected' AND OLD.Status != 'Rejected' THEN |
| | 43 | UPDATE wallet |
| | 44 | SET Balance = Balance + NEW.TotalPrice |
| | 45 | WHERE WalletID = NEW.CardID; |
| | 46 | END IF; |
| | 47 | END; |
| | 48 | }}} |
| | 49 | |
| | 50 | = Тригер: prevent_duplicate_pending_request |
| | 51 | Спречува додавање на ново барање за набавка за производ кој веќе има статус Pending. |
| | 52 | Логика: |
| | 53 | * Доколку веќе постои барање за истиот ProductID со статус 'Pending', се прекинува внесувањето и се прикажува грешка. |
| | 54 | SQL код: |
| | 55 | {{{ |
| | 56 | CREATE TRIGGER prevent_duplicate_pending_request |
| | 57 | BEFORE INSERT ON procurement_request |
| | 58 | FOR EACH ROW |
| | 59 | BEGIN |
| | 60 | IF EXISTS ( |
| | 61 | SELECT 1 FROM procurement_request |
| | 62 | WHERE ProductID = NEW.ProductID AND Status = 'Pending' |
| | 63 | ) THEN |
| | 64 | SIGNAL SQLSTATE '45000' |
| | 65 | SET MESSAGE_TEXT = 'Овој производ веќе има барање во тек.'; |
| | 66 | END IF; |
| | 67 | END; |
| | 68 | }}} |