Stage 2 summary at 50 accepted trajectories

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Kral
2026-10-05 18:02:52 +02:00
parent 332fb4601d
commit 5bcd1bf9cd
1230 changed files with 77563 additions and 33 deletions

View File

@@ -0,0 +1,14 @@
@EndUserText.label : 'Court bookings'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}booking {
key client : abap.clnt not null;
key booking_id : abap.int4 not null;
court_id : abap.char(4);
member_id : abap.char(10);
booking_date : abap.dats;
duration_min : abap.int4;
booking_state : abap.char(1);
}

View File

@@ -0,0 +1,12 @@
@EndUserText.label : 'Tennis courts'
@AbapCatalog.enhancement.category : #NOT_EXTENSIBLE
@AbapCatalog.tableCategory : #TRANSPARENT
@AbapCatalog.deliveryClass : #A
@AbapCatalog.dataMaintenance : #RESTRICTED
define table {{p}}court {
key client : abap.clnt not null;
key court_id : abap.char(4) not null;
court_name : abap.char(20);
court_kind : abap.char(1);
hourly_rate : abap.dec(9,2);
}

View File

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

View File

@@ -0,0 +1,32 @@
CLASS {{p}}court_seed DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS {{p}}court_seed IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DELETE FROM {{p}}booking.
DELETE FROM {{p}}court.
INSERT {{p}}court FROM TABLE @( VALUE #(
( court_id = 'C001' court_name = 'Centre Court' court_kind = 'I' hourly_rate = '12.00' )
( court_id = 'C002' court_name = 'North Court' court_kind = 'O' hourly_rate = '16.00' )
( court_id = 'C003' court_name = 'East Court' court_kind = 'I' hourly_rate = '20.00' )
( court_id = 'C004' court_name = 'West Court' court_kind = 'O' hourly_rate = '10.00' ) ) ).
INSERT {{p}}booking FROM TABLE @( VALUE #(
( booking_id = 1 court_id = 'C001' member_id = 'M01' booking_date = '20260401' duration_min = 60 booking_state = 'B' )
( booking_id = 2 court_id = 'C001' member_id = 'M02' booking_date = '20260401' duration_min = 30 booking_state = 'B' )
( booking_id = 3 court_id = 'C001' member_id = 'M03' booking_date = '20260401' duration_min = 60 booking_state = 'X' )
( booking_id = 4 court_id = 'C002' member_id = 'M04' booking_date = '20260401' duration_min = 90 booking_state = 'B' )
( booking_id = 5 court_id = 'C002' member_id = 'M05' booking_date = '20260401' duration_min = 30 booking_state = 'B' )
( booking_id = 6 court_id = 'C002' member_id = 'M06' booking_date = '20260401' duration_min = 60 booking_state = 'X' )
( booking_id = 7 court_id = 'C003' member_id = 'M07' booking_date = '20260401' duration_min = 60 booking_state = 'B' )
( booking_id = 8 court_id = 'C004' member_id = 'M08' booking_date = '20260401' duration_min = 45 booking_state = 'B' )
( booking_id = 9 court_id = 'C002' member_id = 'M09' booking_date = '20260331' duration_min = 60 booking_state = 'B' )
( booking_id = 10 court_id = 'C003' member_id = 'M10' booking_date = '20260331' duration_min = 60 booking_state = 'B' )
( booking_id = 11 court_id = 'C003' member_id = 'M11' booking_date = '20260331' duration_min = 60 booking_state = 'B' ) ) ).
out->write( sy-dbcnt ).
ENDMETHOD.
ENDCLASS.