| 79 | = Тригер за враќање на залиха ако се избрише елемент од {{{contains}}} |
| 80 | Овој тригер служи за враќање на количина во {{{stock}}} ако се избрише елемент од нарачка (откажана, вратена итн.)\\ |
| 81 | односно, ако се избрише ред од {{{contains}}},пример за тоа е вратен производ, количината да се врати назад. \\ |
| 82 | Првин се креира функција : |
| 83 | {{{#!sql |
| 84 | CREATE OR REPLACE FUNCTION increment_stock_on_delete() |
| 85 | RETURNS TRIGGER AS $$ |
| 86 | BEGIN |
| 87 | UPDATE stock |
| 88 | SET quantity = quantity + OLD.quantity, |
| 89 | updated_at = NOW() |
| 90 | WHERE id_stock = OLD.id_stock; |
| 91 | |
| 92 | RETURN OLD; |
| 93 | END; |
| 94 | $$ LANGUAGE plpgsql; |
| 95 | }}} |
| 96 | \\ |
| 97 | Потоа се креира тригерот што ја повикува таа функција: |
| 98 | {{{#!sql |
| 99 | CREATE TRIGGER trg_increment_stock |
| 100 | AFTER DELETE ON contains |
| 101 | FOR EACH ROW |
| 102 | EXECUTE FUNCTION increment_stock_on_delete(); |
| 103 | }}} |
| 104 | \\ |
| 105 | = Тригер за враќање на залиха ако нарачка не се испорача |
| 106 | Првин се креира функција : |
| 107 | {{{#!sql |
| 108 | CREATE OR REPLACE FUNCTION restock_if_cancelled() |
| 109 | RETURNS TRIGGER AS $$ |
| 110 | DECLARE |
| 111 | row RECORD; |
| 112 | BEGIN |
| 113 | IF TG_OP = 'UPDATE' AND OLD.order_status <> 'cancelled' AND NEW.order_status = 'cancelled' THEN |
| 114 | FOR row IN |
| 115 | SELECT c.id_stock, c.quantity |
| 116 | FROM contains c |
| 117 | WHERE c.id_order = NEW.id_order |
| 118 | LOOP |
| 119 | UPDATE stock |
| 120 | SET quantity = quantity + row.quantity, |
| 121 | updated_at = NOW() |
| 122 | WHERE id_stock = row.id_stock; |
| 123 | END LOOP; |
| 124 | END IF; |
| 125 | |
| 126 | RETURN NEW; |
| 127 | END; |
| 128 | $$ LANGUAGE plpgsql; |
| 129 | }}} |
| 130 | \\ |
| 131 | Потоа се креира тригерот што ја повикува таа функција: |
| 132 | {{{#!sql |
| 133 | CREATE TRIGGER trg_restock_on_cancel |
| 134 | AFTER UPDATE ON orders |
| 135 | FOR EACH ROW |
| 136 | EXECUTE FUNCTION restock_if_cancelled(); |
| 137 | }}} |
| 138 | \\ |