Files
abap-llm/tasks_gen/train/G1094/seed/court_old.prog.abap
2026-10-05 18:02:52 +02:00

93 lines
2.8 KiB
ABAP

REPORT {{p}}court_old.
TYPES: BEGIN OF ty_result,
court TYPE {{p}}court-court_id,
bookings TYPE i,
total_min TYPE i,
charge TYPE p LENGTH 11 DECIMALS 2,
END OF ty_result.
DATA: gt_booking TYPE STANDARD TABLE OF {{p}}booking,
gt_court TYPE STANDARD TABLE OF {{p}}court,
gt_result TYPE STANDARD TABLE OF ty_result,
gs_booking TYPE {{p}}booking,
gs_court TYPE {{p}}court,
gs_result TYPE ty_result,
gs_next TYPE ty_result,
gv_court TYPE {{p}}court-court_id,
gv_fee TYPE p LENGTH 11 DECIMALS 2,
gv_lines TYPE i,
gv_outer TYPE i,
gv_inner TYPE i,
gv_i TYPE i,
gv_j TYPE i,
gv_k TYPE i,
go_alv TYPE REF TO cl_salv_table.
PARAMETERS p_date TYPE d OBLIGATORY.
SELECT-OPTIONS s_court FOR gv_court.
START-OF-SELECTION.
SELECT * FROM {{p}}court INTO TABLE gt_court.
SELECT * FROM {{p}}booking INTO TABLE gt_booking WHERE booking_date = p_date.
LOOP AT gt_booking INTO gs_booking.
IF gs_booking-booking_state <> 'X'.
IF gs_booking-court_id IN s_court.
READ TABLE gt_court INTO gs_court WITH KEY court_id = gs_booking-court_id.
IF sy-subrc = 0.
CLEAR gv_fee.
gv_fee = gs_booking-duration_min * gs_court-hourly_rate / 60.
READ TABLE gt_result INTO gs_result WITH KEY court = gs_booking-court_id.
IF sy-subrc = 0.
gv_i = sy-tabix.
gs_result-bookings = gs_result-bookings + 1.
gs_result-total_min = gs_result-total_min + gs_booking-duration_min.
gs_result-charge = gs_result-charge + gv_fee.
MODIFY gt_result FROM gs_result INDEX gv_i.
ELSE.
CLEAR gs_result.
gs_result-court = gs_booking-court_id.
gs_result-bookings = 1.
gs_result-total_min = gs_booking-duration_min.
gs_result-charge = gv_fee.
APPEND gs_result TO gt_result.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
LOOP AT gt_result INTO gs_result.
IF gs_result-bookings < 2.
DELETE gt_result INDEX sy-tabix.
ENDIF.
ENDLOOP.
gv_lines = lines( gt_result ).
gv_outer = gv_lines - 1.
DO gv_outer TIMES.
gv_i = sy-index.
gv_inner = gv_lines - gv_i.
DO gv_inner TIMES.
gv_j = sy-index.
gv_k = gv_j + 1.
READ TABLE gt_result INTO gs_result INDEX gv_j.
READ TABLE gt_result INTO gs_next INDEX gv_k.
IF gs_next-court < gs_result-court.
MODIFY gt_result FROM gs_next INDEX gv_j.
MODIFY gt_result FROM gs_result INDEX gv_k.
ENDIF.
ENDDO.
ENDDO.
TRY.
cl_salv_table=>factory(
IMPORTING r_salv_table = go_alv
CHANGING t_table = gt_result ).
go_alv->display( ).
CATCH cx_salv_msg.
ENDTRY.