Changes between Version 6 and Version 7 of Triggers


Ignore:
Timestamp:
09/04/25 03:41:03 (44 hours ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Triggers

    v6 v7  
    4848RETURNS TRIGGER
    4949LANGUAGE plpgsql AS $$
    50 DECLARE v_inc INT;
     50DECLARE value INT;
    5151BEGIN
    5252  IF NEW.status = 'завршено' THEN
    5353    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));
    5555      UPDATE synergymed.clubcard
    56       SET points = points + v_inc
     56      SET points = points + value
    5757      WHERE id = NEW.client_id;
    5858    END IF;
     
    6464DROP TRIGGER IF EXISTS trg_payment_loyalty ON synergymed.payment;
    6565CREATE TRIGGER trg_payment_loyalty
    66 AFTER INSERT OR UPDATE OF status, amount ON synergymed.payment
     66AFTER INSERT OR UPDATE OF status ON synergymed.payment
    6767FOR EACH ROW EXECUTE FUNCTION synergymed.fn_payment_loyalty_after();
    6868
     
    8383LANGUAGE plpgsql AS $$
    8484BEGIN
    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;
    8993  END IF;
    9094  RETURN NEW;
     
    9498DROP TRIGGER IF EXISTS trg_sensitiveclientdata_affect_client ON synergymed.sensitiveclientdata;
    9599CREATE 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();
     100AFTER INSERT OR UPDATE OF verification_status
     101ON synergymed.sensitiveclientdata
     102FOR EACH ROW
     103EXECUTE FUNCTION synergymed.fn_sensitiveclientdata_affect_client_after();
    98104
    99105}}}
     
    136142FOR EACH ROW EXECUTE FUNCTION synergymed.fn_medicineinteraction_order_before();
    137143
    138 CREATE UNIQUE INDEX IF NOT EXISTS ux_mi_pair
    139 ON synergymed.medicineinteraction (medicine_id_1, medicine_id_2);
    140 
    141144}}}
    142145
     
    154157RETURNS TRIGGER
    155158LANGUAGE 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)
     159DECLARE
     160  target_pharmacy_id INT;
     161  target_branded_medicine_id INT;
     162  source_inventory_id INT;
     163BEGIN
     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
    164173  LIMIT 1;
    165174
    166   IF v_pharmacy_id IS NOT NULL THEN
    167     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)
    169178    ON CONFLICT DO NOTHING;
    170179  END IF;
     
    177186CREATE TRIGGER trg_inventory_autocatalog_ins
    178187AFTER INSERT ON synergymed.inventory_brandedmedicine
    179 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after();
     188FOR EACH ROW
     189WHEN (NEW.quantity > 0)
     190EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after();
    180191
    181192DROP TRIGGER IF EXISTS trg_inventory_autocatalog_upd ON synergymed.inventory_brandedmedicine;
    182193CREATE TRIGGER trg_inventory_autocatalog_upd
    183194AFTER UPDATE OF quantity ON synergymed.inventory_brandedmedicine
    184 FOR EACH ROW EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after();
     195FOR EACH ROW
     196WHEN (NEW.quantity > 0 AND (OLD.quantity IS DISTINCT FROM NEW.quantity))
     197EXECUTE FUNCTION synergymed.fn_inventory_autocatalog_after();
    185198
    186199}}}