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 | }}} |