ADT fallback: Accept headers for FUNC; G0189 accepted; regen2 results

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
Kral
2026-10-03 16:31:03 +02:00
parent 428b3565b2
commit 7510131a7d
335 changed files with 12047 additions and 5545 deletions

View File

@@ -0,0 +1,85 @@
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 1 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.

View File

@@ -1,45 +0,0 @@
FUNCTION {{p}}roast_sum
IMPORTING
it_orders TYPE STANDARD TABLE OF {{p}}roasts
EXPORTING
et_totals TYPE STANDARD TABLE OF {{p}}blends
ev_grand_total TYPE decfloat34.
TYPES: BEGIN OF ty_sum,
blend TYPE {{p}}blends-blend,
total_kg TYPE {{p}}blends-total_kg,
END OF ty_sum.
DATA lt_sum TYPE HASHED TABLE OF ty_sum WITH UNIQUE KEY blend.
DATA ls_ord TYPE {{p}}roasts.
DATA ls_sum TYPE ty_sum.
DATA ls_tot TYPE {{p}}blends.
CLEAR: et_totals, ev_grand_total.
LOOP AT it_orders INTO ls_ord.
IF ls_ord-quantity_kg <= 0.
CONTINUE.
ENDIF.
READ TABLE lt_sum INTO ls_sum WITH TABLE KEY blend = ls_ord-blend.
IF sy-subrc = 0.
ls_sum-total_kg = ls_sum-total_kg + ls_ord-quantity_kg.
MODIFY TABLE lt_sum FROM ls_sum.
ELSE.
ls_sum-blend = ls_ord-blend.
ls_sum-total_kg = ls_ord-quantity_kg.
INSERT ls_sum INTO TABLE lt_sum.
ENDIF.
ENDLOOP.
LOOP AT lt_sum INTO ls_sum.
ls_tot-blend = ls_sum-blend.
ls_tot-total_kg = ls_sum-total_kg.
ev_grand_total = ev_grand_total + ls_sum-total_kg.
APPEND ls_tot TO et_totals.
ENDLOOP.
SORT et_totals BY total_kg DESCENDING blend ASCENDING.
ENDFUNCTION.

View File

@@ -1,109 +0,0 @@
CLASS {{p}}t14_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
TYPES ty_orders TYPE STANDARD TABLE OF {{p}}roasts.
TYPES ty_totals TYPE STANDARD TABLE OF {{p}}blends.
METHODS run
IMPORTING it_orders TYPE ty_orders
EXPORTING et_totals TYPE ty_totals
ev_grand_total TYPE decfloat34
ev_subrc TYPE sysubrc.
METHODS sums_per_blend FOR TESTING.
METHODS ignores_non_positive FOR TESTING.
METHODS sorted_by_total FOR TESTING.
METHODS tie_break FOR TESTING.
METHODS empty_input FOR TESTING.
ENDCLASS.
CLASS {{p}}t14_test IMPLEMENTATION.
METHOD run.
CLEAR: et_totals, ev_grand_total.
CALL FUNCTION '{{P}}ROAST_SUM'
EXPORTING
it_orders = it_orders
IMPORTING
et_totals = et_totals
ev_grand_total = ev_grand_total
EXCEPTIONS
OTHERS = 1.
ev_subrc = sy-subrc.
ENDMETHOD.
METHOD sums_per_blend.
DATA lt_orders TYPE ty_orders.
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '10.000' ) TO lt_orders.
APPEND VALUE #( order_id = '0000000002' blend = 'PILS' quantity_kg = '5.000' ) TO lt_orders.
DATA lt_totals TYPE ty_totals.
run( EXPORTING it_orders = lt_orders
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_totals ) ).
DATA ls_tot TYPE {{p}}blends.
READ TABLE lt_totals INTO ls_tot INDEX 1.
cl_abap_unit_assert=>assert_equals( exp = 'PILS' act = ls_tot-blend ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 15 ) act = CONV decfloat34( ls_tot-total_kg ) ).
ENDMETHOD.
METHOD ignores_non_positive.
DATA lt_orders TYPE ty_orders.
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '0.000' ) TO lt_orders.
APPEND VALUE #( order_id = '0000000002' blend = 'WEIZ' quantity_kg = '-4.000' ) TO lt_orders.
DATA lt_totals TYPE ty_totals.
run( EXPORTING it_orders = lt_orders
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_totals ) ).
ENDMETHOD.
METHOD sorted_by_total.
DATA lt_orders TYPE ty_orders.
APPEND VALUE #( order_id = '0000000001' blend = 'ARAB' quantity_kg = '5.000' ) TO lt_orders.
APPEND VALUE #( order_id = '0000000002' blend = 'ROBU' quantity_kg = '30.000' ) TO lt_orders.
DATA lt_totals TYPE ty_totals.
run( EXPORTING it_orders = lt_orders
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
DATA ls_tot TYPE {{p}}blends.
READ TABLE lt_totals INTO ls_tot INDEX 1.
cl_abap_unit_assert=>assert_equals( exp = 'ROBU' act = ls_tot-blend ).
ENDMETHOD.
METHOD tie_break.
DATA lt_orders TYPE ty_orders.
APPEND VALUE #( order_id = '0000000001' blend = 'ROBU' quantity_kg = '6.000' ) TO lt_orders.
APPEND VALUE #( order_id = '0000000002' blend = 'ARAB' quantity_kg = '6.000' ) TO lt_orders.
DATA lt_totals TYPE ty_totals.
run( EXPORTING it_orders = lt_orders
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
DATA ls_tot TYPE {{p}}blends.
READ TABLE lt_totals INTO ls_tot INDEX 1.
cl_abap_unit_assert=>assert_equals( exp = 'ARAB' act = ls_tot-blend ).
ENDMETHOD.
METHOD empty_input.
DATA lt_orders TYPE ty_orders.
DATA lt_totals TYPE ty_totals.
DATA lv_grand TYPE decfloat34 VALUE 99.
run( EXPORTING it_orders = lt_orders
IMPORTING et_totals = lt_totals ev_grand_total = lv_grand ev_subrc = DATA(lv_subrc) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_totals ) ).
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_grand ).
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,134 @@
CLASS {{p}}t41_test DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS setup.
METHODS call
IMPORTING
iv_max_priority TYPE i
EXPORTING
ev_count TYPE i
ev_duplicates TYPE i
ev_first_call_id TYPE string
ev_last_call_id TYPE string
ev_subrc TYPE sysubrc.
METHODS add_a
IMPORTING
iv_id TYPE {{P}}ALERT_A-CALL_ID
iv_prio TYPE {{P}}ALERT_A-PRIORITY
iv_date TYPE {{P}}ALERT_A-CALL_DATE
iv_time TYPE {{P}}ALERT_A-CALL_TIME
iv_district TYPE {{P}}ALERT_A-DISTRICT.
METHODS add_b
IMPORTING
iv_id TYPE {{P}}ALERT_B-CALL_ID
iv_prio TYPE {{P}}ALERT_B-PRIORITY
iv_date TYPE {{P}}ALERT_B-CALL_DATE
iv_time TYPE {{P}}ALERT_B-CALL_TIME
iv_district TYPE {{P}}ALERT_B-DISTRICT.
METHODS merges_and_sorts FOR TESTING.
METHODS keeps_earliest FOR TESTING.
METHODS counts_duplicates FOR TESTING.
METHODS filters_by_priority FOR TESTING.
METHODS empty_tables FOR TESTING.
METHODS rejects_bad_priority FOR TESTING.
ENDCLASS.
CLASS {{p}}t41_test IMPLEMENTATION.
METHOD setup.
DELETE FROM {{P}}ALERT_A.
DELETE FROM {{P}}ALERT_B.
ENDMETHOD.
METHOD call.
CALL FUNCTION '{{P}}ALERT_MERGE'
EXPORTING
iv_max_priority = iv_max_priority
IMPORTING
ev_count = ev_count
ev_duplicates = ev_duplicates
ev_first_call_id = ev_first_call_id
ev_last_call_id = ev_last_call_id
EXCEPTIONS
invalid_priority = 1
OTHERS = 2.
ev_subrc = sy-subrc.
ENDMETHOD.
METHOD add_a.
DATA ls_call TYPE {{P}}ALERT_A.
ls_call-call_id = iv_id.
ls_call-priority = iv_prio.
ls_call-call_date = iv_date.
ls_call-call_time = iv_time.
ls_call-district = iv_district.
MODIFY {{P}}ALERT_A FROM @ls_call.
ENDMETHOD.
METHOD add_b.
DATA ls_call TYPE {{P}}ALERT_B.
ls_call-call_id = iv_id.
ls_call-priority = iv_prio.
ls_call-call_date = iv_date.
ls_call-call_time = iv_time.
ls_call-district = iv_district.
MODIFY {{P}}ALERT_B FROM @ls_call.
ENDMETHOD.
METHOD merges_and_sorts.
add_a( iv_id = 'C1' iv_prio = 3 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
add_b( iv_id = 'C2' iv_prio = 1 iv_date = '20240102' iv_time = '080000' iv_district = 'SUED' ).
call( EXPORTING iv_max_priority = 5
IMPORTING ev_count = DATA(lv_count)
ev_first_call_id = DATA(lv_first) ).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ).
cl_abap_unit_assert=>assert_equals( exp = 'C2' act = lv_first ).
ENDMETHOD.
METHOD keeps_earliest.
add_a( iv_id = 'C1' iv_prio = 1 iv_date = '20240101' iv_time = '100000' iv_district = 'NORD' ).
add_b( iv_id = 'C1' iv_prio = 1 iv_date = '20240101' iv_time = '090000' iv_district = 'SUED' ).
call( EXPORTING iv_max_priority = 5
IMPORTING ev_count = DATA(lv_count)
ev_first_call_id = DATA(lv_first) ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_count ).
cl_abap_unit_assert=>assert_equals( exp = 'C1' act = lv_first ).
ENDMETHOD.
METHOD counts_duplicates.
add_a( iv_id = 'C1' iv_prio = 1 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
add_b( iv_id = 'C1' iv_prio = 1 iv_date = '20240101' iv_time = '080000' iv_district = 'SUED' ).
add_b( iv_id = 'C2' iv_prio = 2 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
call( EXPORTING iv_max_priority = 5
IMPORTING ev_count = DATA(lv_count)
ev_duplicates = DATA(lv_dup) ).
cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_count ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_dup ).
ENDMETHOD.
METHOD filters_by_priority.
add_a( iv_id = 'C1' iv_prio = 1 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
add_a( iv_id = 'C2' iv_prio = 4 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
call( EXPORTING iv_max_priority = 2
IMPORTING ev_count = DATA(lv_count)
ev_last_call_id = DATA(lv_last) ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_count ).
cl_abap_unit_assert=>assert_equals( exp = 'C1' act = lv_last ).
ENDMETHOD.
METHOD empty_tables.
call( EXPORTING iv_max_priority = 5
IMPORTING ev_count = DATA(lv_count)
ev_duplicates = DATA(lv_dup)
ev_first_call_id = DATA(lv_first) ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_count ).
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_dup ).
cl_abap_unit_assert=>assert_initial( act = lv_first ).
ENDMETHOD.
METHOD rejects_bad_priority.
add_a( iv_id = 'C1' iv_prio = 7 iv_date = '20240101' iv_time = '080000' iv_district = 'NORD' ).
call( EXPORTING iv_max_priority = 5 IMPORTING ev_subrc = DATA(lv_rc) ).
cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ).
ENDMETHOD.
ENDCLASS.