93 lines
2.8 KiB
ABAP
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.
|