Changes between Version 1 and Version 2 of Procedures


Ignore:
Timestamp:
08/31/25 23:10:16 (2 months ago)
Author:
222004
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Procedures

    v1 v2  
    3030}}}
    3131----
    32 == 2) Блокирање на клиент ако има повеќе неуспешни плаќања \\
    33 Со оваа процедура се проверува колку пати клиентот имал неуспешно плаќање и ако надмине лимит, автоматски му се деактивира статусот. \\Корисна е за ризик менаџмент и заштита од злоупотреби.\\
     32== 2) Проверка на ризици при нова нарачка \\
     33Кога клиент прави нова нарачка, пред таа да се потврди, системот прави комплетна проверка – дали клиентот е верифициран, дали некој од лековите има опасни интеракции со постојните рецепти на клиентот, и дали залихата е доволна. Ако има проблем, процедурата враќа предупредување; ако е сè во ред, ја потврдува нарачката.\\
     34Ова е корисно за да се спречат нелегални купувања, медицински ризици и грешки.
    3435{{{
    3536
    36 CREATE OR REPLACE PROCEDURE synergymed.sp_block_client_for_failed_payments(p_client_id INT, p_limit INT)
     37CREATE OR REPLACE PROCEDURE synergymed.sp_validate_new_order(p_order_id INT)
    3738LANGUAGE plpgsql
    3839AS $$
    39 DECLARE v_failed INT;
     40DECLARE
     41  v_client_id INT;
     42  v_verified BOOLEAN;
     43  v_problem TEXT := '';
     44  v_item RECORD;
     45  v_active_pres RECORD;
    4046BEGIN
    41   SELECT COUNT(*) INTO v_failed
    42   FROM synergymed.payment
    43   WHERE client_id = p_client_id
    44     AND status = 'неуспешно';
     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;
    4549
    46   IF v_failed >= p_limit THEN
    47     UPDATE synergymed.client
    48     SET is_verified = FALSE
    49     WHERE user_id = p_client_id;
     50  IF NOT v_verified THEN
     51    RAISE EXCEPTION 'Клиентот % не е верифициран!', v_client_id;
     52  END IF;
    5053
    51     RAISE NOTICE 'Клиентот % е блокиран поради % неуспешни плаќања', p_client_id, v_failed;
     54  FOR v_item IN
     55    SELECT cobm.branded_medicine_id, cobm.quantity, bm.medicine_id
     56    FROM synergymed.clientorder_brandedmedicine cobm
     57    JOIN synergymed.brandedmedicine bm ON bm.id = cobm.branded_medicine_id
     58    WHERE cobm.order_id = p_order_id
     59  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
     64    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;
     75    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;
     85    END IF;
     86  END LOOP;
     87
     88  IF v_problem <> '' THEN
     89    RAISE EXCEPTION 'Нарачката % има проблеми: %', p_order_id, v_problem;
    5290  ELSE
    53     RAISE NOTICE 'Клиентот % има само % неуспешни плаќања (лимит %)', p_client_id, v_failed, p_limit;
     91    UPDATE synergymed.clientorder
     92    SET status = 'потврдено'
     93    WHERE id = p_order_id;
     94    RAISE NOTICE 'Нарачката % е успешно потврдена.', p_order_id;
    5495  END IF;
    5596END;
    5697$$;
    57 
    58 
    5998}}}
    6099