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