Files
abap-llm/tasks_gen/eval/G0121/faulty/m1_alert_merge.func.abap

86 lines
2.3 KiB
ABAP

FUNCTION {{p}}alert_merge
IMPORTING
iv_max_priority TYPE i
EXPORTING
ev_count TYPE i
ev_duplicates TYPE i
ev_first_call_id TYPE string
ev_first_district TYPE string
ev_last_call_id TYPE string
EXCEPTIONS
invalid_priority.
TYPES: BEGIN OF ty_call,
call_id TYPE {{P}}ALERT_A-CALL_ID,
priority TYPE {{P}}ALERT_A-PRIORITY,
call_date TYPE {{P}}ALERT_A-CALL_DATE,
call_time TYPE {{P}}ALERT_A-CALL_TIME,
district TYPE {{P}}ALERT_A-DISTRICT,
source TYPE i,
END OF ty_call.
DATA lt_calls TYPE STANDARD TABLE OF ty_call WITH DEFAULT KEY.
DATA ls_call TYPE ty_call.
DATA lv_total TYPE i.
IF iv_max_priority < 1 OR iv_max_priority > 5.
RAISE invalid_priority.
ENDIF.
SELECT COUNT(*)
FROM {{P}}ALERT_A
WHERE priority NOT BETWEEN 2 AND 5
INTO @DATA(lv_bad_a).
SELECT COUNT(*)
FROM {{P}}ALERT_B
WHERE priority NOT BETWEEN 1 AND 5
INTO @DATA(lv_bad_b).
IF lv_bad_a > 0 OR lv_bad_b > 0.
RAISE invalid_priority.
ENDIF.
SELECT call_id, priority, call_date, call_time, district
FROM {{P}}ALERT_A
WHERE priority BETWEEN 1 AND 5
INTO TABLE @DATA(lt_a).
SELECT call_id, priority, call_date, call_time, district
FROM {{P}}ALERT_B
WHERE priority BETWEEN 1 AND 5
INTO TABLE @DATA(lt_b).
LOOP AT lt_a INTO DATA(ls_a).
ls_call = CORRESPONDING #( ls_a ).
ls_call-source = 1.
APPEND ls_call TO lt_calls.
ENDLOOP.
LOOP AT lt_b INTO DATA(ls_b).
ls_call = CORRESPONDING #( ls_b ).
ls_call-source = 2.
APPEND ls_call TO lt_calls.
ENDLOOP.
lv_total = lines( lt_calls ).
SORT lt_calls BY call_id call_date call_time source.
DELETE ADJACENT DUPLICATES FROM lt_calls COMPARING call_id.
ev_duplicates = lv_total - lines( lt_calls ).
DELETE lt_calls WHERE priority > iv_max_priority.
SORT lt_calls BY priority call_date call_time call_id.
ev_count = lines( lt_calls ).
IF lt_calls IS NOT INITIAL.
READ TABLE lt_calls INTO ls_call INDEX 1.
ev_first_call_id = ls_call-call_id.
ev_first_district = ls_call-district.
READ TABLE lt_calls INTO ls_call INDEX ev_count.
ev_last_call_id = ls_call-call_id.
ELSE.
CLEAR: ev_first_call_id, ev_first_district, ev_last_call_id.
ENDIF.
ENDFUNCTION.