Changes between Version 6 and Version 7 of Triggers
- Timestamp:
- 09/04/25 03:41:03 (44 hours ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Triggers
v6 v7 48 48 RETURNS TRIGGER 49 49 LANGUAGE plpgsql AS $$ 50 DECLARE v _incINT;50 DECLARE value INT; 51 51 BEGIN 52 52 IF NEW.status = 'завршено' THEN 53 53 IF EXISTS (SELECT 1 FROM synergymed.clubcard WHERE id = NEW.client_id) THEN 54 v _inc:= GREATEST(0, FLOOR(COALESCE(NEW.amount,0) / 10));54 value := GREATEST(0, FLOOR(COALESCE(NEW.amount,0) / 10)); 55 55 UPDATE synergymed.clubcard 56 SET points = points + v _inc56 SET points = points + value 57 57 WHERE id = NEW.client_id; 58 58 END IF; … … 64 64 DROP TRIGGER IF EXISTS trg_payment_loyalty ON synergymed.payment; 65 65 CREATE TRIGGER trg_payment_loyalty 66 AFTER INSERT OR UPDATE OF status , amountON synergymed.payment66 AFTER INSERT OR UPDATE OF status ON synergymed.payment 67 67 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_payment_loyalty_after(); 68 68 … … 83 83 LANGUAGE plpgsql AS $$ 84 84 BEGIN 85 IF NEW.verification_status = 'верифицирано' THEN 86 UPDATE synergymed.client SET is_verified = TRUE WHERE id = NEW.client_id; 87 ELSIF NEW.verification_status = 'одбиено' THEN 88 UPDATE synergymed.client SET is_verified = FALSE WHERE id = NEW.client_id; 85 IF lower(NEW.verification_status) = 'верифицирано' THEN 86 UPDATE synergymed.client AS c 87 SET is_verified = TRUE 88 WHERE c.user_id = NEW.client_id; 89 ELSIF lower(NEW.verification_status) = 'одбиено' THEN 90 UPDATE synergymed.client AS c 91 SET is_verified = FALSE 92 WHERE c.user_id = NEW.client_id; 89 93 END IF; 90 94 RETURN NEW; … … 94 98 DROP TRIGGER IF EXISTS trg_sensitiveclientdata_affect_client ON synergymed.sensitiveclientdata; 95 99 CREATE TRIGGER trg_sensitiveclientdata_affect_client 96 AFTER INSERT OR UPDATE OF verification_status ON synergymed.sensitiveclientdata 97 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_sensitiveclientdata_affect_client_after(); 100 AFTER INSERT OR UPDATE OF verification_status 101 ON synergymed.sensitiveclientdata 102 FOR EACH ROW 103 EXECUTE FUNCTION synergymed.fn_sensitiveclientdata_affect_client_after(); 98 104 99 105 }}} … … 136 142 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_medicineinteraction_order_before(); 137 143 138 CREATE UNIQUE INDEX IF NOT EXISTS ux_mi_pair139 ON synergymed.medicineinteraction (medicine_id_1, medicine_id_2);140 141 144 }}} 142 145 … … 154 157 RETURNS TRIGGER 155 158 LANGUAGE plpgsql AS $$ 156 DECLARE 157 v_pharmacy_id INT; 158 BEGIN 159 SELECT ph.company_id INTO v_pharmacy_id 160 FROM synergymed.inventory i 161 JOIN synergymed.facility f ON f.id = i.facility_id 162 JOIN synergymed.pharmacy ph ON ph.company_id = f.company_id 163 WHERE i.id = COALESCE(NEW.inventory_id, OLD.inventory_id) 159 DECLARE 160 target_pharmacy_id INT; 161 target_branded_medicine_id INT; 162 source_inventory_id INT; 163 BEGIN 164 target_branded_medicine_id := COALESCE(NEW.branded_medicine_id, OLD.branded_medicine_id); 165 source_inventory_id := COALESCE(NEW.inventory_id, OLD.inventory_id); 166 167 SELECT ph.company_id 168 INTO target_pharmacy_id 169 FROM synergymed.inventory AS i 170 JOIN synergymed.facility AS f ON f.id = i.facility_id 171 JOIN synergymed.pharmacy AS ph ON ph.company_id = f.company_id 172 WHERE i.id = source_inventory_id 164 173 LIMIT 1; 165 174 166 IF v_pharmacy_id IS NOT NULL THEN167 INSERT INTO synergymed.pharmacy_catalog (pharmacy_id, branded_medicine_id)168 VALUES ( v_pharmacy_id, COALESCE(NEW.branded_medicine_id, OLD.branded_medicine_id))175 IF target_pharmacy_id IS NOT NULL THEN 176 INSERT INTO synergymed.pharmacy_catalog (pharmacy_id, branded_medicine_id) 177 VALUES (target_pharmacy_id, target_branded_medicine_id) 169 178 ON CONFLICT DO NOTHING; 170 179 END IF; … … 177 186 CREATE TRIGGER trg_inventory_autocatalog_ins 178 187 AFTER INSERT ON synergymed.inventory_brandedmedicine 179 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after(); 188 FOR EACH ROW 189 WHEN (NEW.quantity > 0) 190 EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after(); 180 191 181 192 DROP TRIGGER IF EXISTS trg_inventory_autocatalog_upd ON synergymed.inventory_brandedmedicine; 182 193 CREATE TRIGGER trg_inventory_autocatalog_upd 183 194 AFTER UPDATE OF quantity ON synergymed.inventory_brandedmedicine 184 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after(); 195 FOR EACH ROW 196 WHEN (NEW.quantity > 0 AND (OLD.quantity IS DISTINCT FROM NEW.quantity)) 197 EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after(); 185 198 186 199 }}}