| 1 | = Тригери |
| 2 | == 1. Тригер за спречување на преклопени договори по оглас |
| 3 | * Тригер за забрана на преклопени договори (Lease) за ист оглас (Listing) ]. Целта е да се спречи креирање на изнајмувања со ранг на датуми кои се преклопуваат за ист Listing. Доколку новото (или изменетото) изнајмување се поклопува со постоечко, операцијата ќе биде одбиена со RAISE EXCEPTION. |
| 4 | {{{ |
| 5 | CREATE OR REPLACE FUNCTION domify.f_lease_no_overlap() |
| 6 | RETURNS TRIGGER AS $$ |
| 7 | DECLARE |
| 8 | cnt INT; |
| 9 | BEGIN |
| 10 | SELECT COUNT(*) INTO cnt |
| 11 | FROM domify."lease" |
| 12 | WHERE listing_id = NEW.listing_id |
| 13 | AND id <> COALESCE(NEW.id, -1) |
| 14 | AND daterange(start_date, end_date, '[]') |
| 15 | && daterange(NEW.start_date, NEW.end_date, '[]'); |
| 16 | IF cnt > 0 THEN |
| 17 | RAISE EXCEPTION |
| 18 | 'Listing % веќе има договор кој се преклопува со периодот %–%', |
| 19 | NEW.listing_id, NEW.start_date, NEW.end_date; |
| 20 | END IF; |
| 21 | RETURN NEW; |
| 22 | END; |
| 23 | $$ LANGUAGE plpgsql; |
| 24 | |
| 25 | CREATE TRIGGER t_lease_no_overlap |
| 26 | BEFORE INSERT OR UPDATE ON domify."lease" |
| 27 | FOR EACH ROW |
| 28 | EXECUTE FUNCTION domify.f_lease_no_overlap(); |
| 29 | |
| 30 | }}} |