Changes between Version 2 and Version 3 of Procedures


Ignore:
Timestamp:
09/04/25 04:48:22 (42 hours ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Procedures

    v2 v3  
    3939AS $$
    4040DECLARE
    41   v_client_id INT;
    42   v_verified BOOLEAN;
    43   v_problem TEXT := '';
    44   v_item RECORD;
    45   v_active_pres RECORD;
     41  clientId INT;
     42  isVerified BOOLEAN;
     43  problems TEXT := '';
     44  orderItem RECORD;
     45  medComponent RECORD;
     46  activePrescription RECORD;
     47  totalStock INT;
    4648BEGIN
    47   SELECT client_id INTO v_client_id FROM synergymed.clientorder WHERE id = p_order_id;
    48   SELECT is_verified INTO v_verified FROM synergymed.client WHERE user_id = v_client_id;
     49  SELECT client_id INTO clientId
     50  FROM synergymed.clientorder
     51  WHERE id = p_order_id;
    4952
    50   IF NOT v_verified THEN
    51     RAISE EXCEPTION 'Клиентот % не е верифициран!', v_client_id;
     53  IF clientId IS NULL THEN
     54    RAISE EXCEPTION 'Нема нарачка со id=%', p_order_id;
    5255  END IF;
    5356
    54   FOR v_item IN
    55     SELECT cobm.branded_medicine_id, cobm.quantity, bm.medicine_id
     57  SELECT is_verified INTO isVerified
     58  FROM synergymed.client
     59  WHERE user_id = clientId;
     60
     61  IF COALESCE(isVerified, FALSE) = FALSE THEN
     62    UPDATE synergymed.clientorder
     63    SET status = 'неуспешно'
     64    WHERE id = p_order_id;
     65    RAISE EXCEPTION 'Клиентот % не е верифициран!', clientId;
     66  END IF;
     67
     68  FOR orderItem IN
     69    SELECT cobm.branded_medicine_id, cobm.quantity
    5670    FROM synergymed.clientorder_brandedmedicine cobm
    57     JOIN synergymed.brandedmedicine bm ON bm.id = cobm.branded_medicine_id
    5871    WHERE cobm.order_id = p_order_id
    5972  LOOP
    60     FOR v_active_pres IN
    61       SELECT pr.medicine_id
    62       FROM synergymed.prescription pr
    63       WHERE pr.client_id = v_client_id AND pr.valid_to >= CURRENT_DATE
     73    FOR medComponent IN
     74      SELECT bmm.medicine_id
     75      FROM synergymed.branded_medicine_instanceof_medicine bmm
     76      WHERE bmm.branded_medicine_id = orderItem.branded_medicine_id
    6477    LOOP
    65       IF EXISTS (
    66         SELECT 1
    67         FROM synergymed.medicineinteraction mi
    68         WHERE (mi.medicine_id_1, mi.medicine_id_2) IN (
    69                 (v_item.medicine_id, v_active_pres.medicine_id),
    70                 (v_active_pres.medicine_id, v_item.medicine_id)
    71               )
    72       ) THEN
    73         v_problem := v_problem || E'\n Интеракција помеѓу нов лек ' || v_item.branded_medicine_id || ' и постоечки лек ' || v_active_pres.medicine_id;
    74       END IF;
     78      FOR activePrescription IN
     79        SELECT pr.medicine_id
     80        FROM synergymed.prescription pr
     81        WHERE pr.client_id = clientId
     82          AND pr.valid_to >= CURRENT_DATE
     83      LOOP
     84        IF EXISTS (
     85          SELECT 1
     86          FROM synergymed.medicineinteraction mi
     87          WHERE (mi.medicine_id_1 = medComponent.medicine_id AND mi.medicine_id_2 = activePrescription.medicine_id)
     88             OR (mi.medicine_id_1 = activePrescription.medicine_id AND mi.medicine_id_2 = medComponent.medicine_id)
     89        ) THEN
     90          problems := problems || E'\n Интеракција помеѓу нов бренд лек ' || orderItem.branded_medicine_id || ' (компонента ' || medComponent.medicine_id
     91                 || ') и постоечки лек ' || activePrescription.medicine_id;
     92        END IF;
     93      END LOOP;
    7594    END LOOP;
    76        
    77     IF EXISTS (
    78       SELECT 1
    79       FROM synergymed.inventory_brandedmedicine ibm
    80       WHERE ibm.branded_medicine_id = v_item.branded_medicine_id
    81       GROUP BY ibm.branded_medicine_id
    82       HAVING SUM(ibm.quantity) < v_item.quantity
    83     ) THEN
    84       v_problem := v_problem || E'\n Недоволна залиха за лек ' || v_item.branded_medicine_id;
     95
     96    SELECT COALESCE(SUM(ibm.quantity), 0) INTO totalStock
     97    FROM synergymed.inventory_brandedmedicine ibm
     98    WHERE ibm.branded_medicine_id = orderItem.branded_medicine_id;
     99
     100    IF totalStock < orderItem.quantity THEN
     101      problems := problems || E'\n Недоволна залиха за бренд лек ' || orderItem.branded_medicine_id || ' (потребно: ' || orderItem.quantity
     102    || ', достапно: ' || totalStock || ')';
    85103    END IF;
    86104  END LOOP;
    87105
    88   IF v_problem <> '' THEN
    89     RAISE EXCEPTION 'Нарачката % има проблеми: %', p_order_id, v_problem;
     106  IF problems <> '' THEN
     107    UPDATE synergymed.clientorder
     108    SET status = 'неуспешно'
     109    WHERE id = p_order_id;
     110    RAISE EXCEPTION 'Нарачката % има проблеми:%', p_order_id, problems;
    90111  ELSE
    91112    UPDATE synergymed.clientorder
    92     SET status = 'потврдено'
     113    SET status = 'во тек'
    93114    WHERE id = p_order_id;
    94     RAISE NOTICE 'Нарачката % е успешно потврдена.', p_order_id;
     115    RAISE NOTICE 'Нарачката % е успешно потврдена и е во тек.', p_order_id;
    95116  END IF;
    96117END;
    97118$$;
     119
    98120}}}
    99121