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