| 1 | CREATE OR REPLACE FUNCTION project.fn_validate_consultation_slots()
|
|---|
| 2 | RETURNS trigger
|
|---|
| 3 | LANGUAGE plpgsql
|
|---|
| 4 | SET search_path = project, public
|
|---|
| 5 | AS $$
|
|---|
| 6 | DECLARE
|
|---|
| 7 | d date;
|
|---|
| 8 | BEGIN
|
|---|
| 9 | IF NEW.consultation_slots IS NULL THEN
|
|---|
| 10 | RETURN NEW;
|
|---|
| 11 | END IF;
|
|---|
| 12 |
|
|---|
| 13 | FOREACH d IN ARRAY NEW.consultation_slots
|
|---|
| 14 | LOOP
|
|---|
| 15 | IF d < CURRENT_DATE AND (TG_OP = 'INSERT' OR OLD.consultation_slots IS NULL OR NOT (d = ANY(OLD.consultation_slots))) THEN
|
|---|
| 16 | RAISE EXCEPTION 'consultation_slots contains past date %', d;
|
|---|
| 17 | END IF;
|
|---|
| 18 | END LOOP;
|
|---|
| 19 |
|
|---|
| 20 | RETURN NEW;
|
|---|
| 21 | END;
|
|---|
| 22 | $$;
|
|---|
| 23 | CREATE OR REPLACE TRIGGER trg_validate_consultation_slots
|
|---|
| 24 | BEFORE INSERT OR UPDATE
|
|---|
| 25 | ON project.therapist
|
|---|
| 26 | FOR EACH ROW
|
|---|
| 27 | EXECUTE FUNCTION project.fn_validate_consultation_slots();
|
|---|
| 28 |
|
|---|
| 29 |
|
|---|
| 30 | CREATE OR REPLACE FUNCTION project.fn_validate_therapy_exp_date()
|
|---|
| 31 | RETURNS trigger
|
|---|
| 32 | LANGUAGE plpgsql
|
|---|
| 33 | SET search_path = project, public
|
|---|
| 34 | AS $$
|
|---|
| 35 | DECLARE
|
|---|
| 36 | consult_date DATE;
|
|---|
| 37 | BEGIN
|
|---|
| 38 | SELECT date INTO consult_date FROM project.consultation WHERE id_consultation = NEW.id_consultation;
|
|---|
| 39 | IF consult_date IS NOT NULL AND NEW.exp_date < consult_date THEN
|
|---|
| 40 | RAISE EXCEPTION 'therapy.exp_date (%) cannot be before consultation date (%)', NEW.exp_date, consult_date;
|
|---|
| 41 | END IF;
|
|---|
| 42 | RETURN NEW;
|
|---|
| 43 | END;
|
|---|
| 44 | $$;
|
|---|
| 45 | CREATE OR REPLACE TRIGGER trg_validate_therapy_exp_date
|
|---|
| 46 | BEFORE INSERT OR UPDATE
|
|---|
| 47 | ON project.therapy
|
|---|
| 48 | FOR EACH ROW
|
|---|
| 49 | EXECUTE FUNCTION project.fn_validate_therapy_exp_date();
|
|---|
| 50 |
|
|---|
| 51 |
|
|---|
| 52 | CREATE OR REPLACE FUNCTION project.fn_validate_diary_not_future()
|
|---|
| 53 | RETURNS trigger
|
|---|
| 54 | LANGUAGE plpgsql
|
|---|
| 55 | SET search_path = project, public
|
|---|
| 56 | AS $$
|
|---|
| 57 | BEGIN
|
|---|
| 58 | IF NEW.date > CURRENT_DATE THEN
|
|---|
| 59 | RAISE EXCEPTION 'diary.date (%) cannot be in the future', NEW.date;
|
|---|
| 60 | END IF;
|
|---|
| 61 | RETURN NEW;
|
|---|
| 62 | END;
|
|---|
| 63 | $$;
|
|---|
| 64 | CREATE OR REPLACE TRIGGER trg_validate_diary_not_future
|
|---|
| 65 | BEFORE INSERT OR UPDATE
|
|---|
| 66 | ON project.diary
|
|---|
| 67 | FOR EACH ROW
|
|---|
| 68 | EXECUTE FUNCTION project.fn_validate_diary_not_future();
|
|---|
| 69 |
|
|---|
| 70 |
|
|---|
| 71 | CREATE OR REPLACE FUNCTION project.fn_validate_consultation_payment_date()
|
|---|
| 72 | RETURNS trigger
|
|---|
| 73 | LANGUAGE plpgsql
|
|---|
| 74 | SET search_path = project, public
|
|---|
| 75 | AS $$
|
|---|
| 76 | BEGIN
|
|---|
| 77 | IF NEW.date_of_payment IS NOT NULL AND NEW.date_of_payment < NEW.date THEN
|
|---|
| 78 | RAISE EXCEPTION 'consultation.date_of_payment (%) cannot be before consultation.date (%)', NEW.date_of_payment, NEW.date;
|
|---|
| 79 | END IF;
|
|---|
| 80 | RETURN NEW;
|
|---|
| 81 | END;
|
|---|
| 82 | $$;
|
|---|
| 83 | CREATE OR REPLACE TRIGGER trg_validate_consultation_payment_date
|
|---|
| 84 | BEFORE INSERT OR UPDATE
|
|---|
| 85 | ON project.consultation
|
|---|
| 86 | FOR EACH ROW
|
|---|
| 87 | EXECUTE FUNCTION project.fn_validate_consultation_payment_date();
|
|---|