Files
abap-llm/tasks_gen/train/G1039/reference/tour_summary.clas.abap

77 lines
2.4 KiB
ABAP

CLASS {{p}}tour_summary DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_tour_summary.
PRIVATE SECTION.
TYPES ty_fee TYPE p LENGTH 8 DECIMALS 2.
CONSTANTS:
c_fee_classic TYPE ty_fee VALUE '20.00',
c_fee_premium TYPE ty_fee VALUE '30.00',
c_child_share TYPE ty_fee VALUE '0.50',
c_group_discount TYPE ty_fee VALUE '0.90',
c_group_size TYPE i VALUE 10.
METHODS validate
IMPORTING it_bookings TYPE {{p}}if_tour_summary=>tt_booking
RETURNING VALUE(rv_status) TYPE {{p}}if_tour_summary=>ty_status.
METHODS booking_fee
IMPORTING is_booking TYPE {{p}}if_tour_summary=>ty_booking
RETURNING VALUE(rv_fee) TYPE ty_fee.
METHODS adult_fee
IMPORTING iv_tour_type TYPE {{p}}if_tour_summary=>ty_tour_type
RETURNING VALUE(rv_fee) TYPE ty_fee.
ENDCLASS.
CLASS {{p}}tour_summary IMPLEMENTATION.
METHOD {{p}}if_tour_summary~summarize.
DATA(lv_status) = validate( it_bookings ).
IF lv_status <> {{p}}if_tour_summary=>c_status-ok.
rs_result = VALUE #( status = lv_status ).
RETURN.
ENDIF.
LOOP AT it_bookings INTO DATA(ls_booking).
rs_result-total_fee = rs_result-total_fee + booking_fee( ls_booking ).
ENDLOOP.
rs_result-booking_count = lines( it_bookings ).
IF rs_result-booking_count > 0.
rs_result-average_fee = rs_result-total_fee / rs_result-booking_count.
ENDIF.
rs_result-status = {{p}}if_tour_summary=>c_status-ok.
ENDMETHOD.
METHOD validate.
rv_status = {{p}}if_tour_summary=>c_status-ok.
LOOP AT it_bookings INTO DATA(ls_booking).
IF ls_booking-adults < 0 OR ls_booking-children < 0.
rv_status = {{p}}if_tour_summary=>c_status-invalid_number.
RETURN.
ENDIF.
IF ls_booking-tour_type <> 'C' AND ls_booking-tour_type <> 'P'.
rv_status = {{p}}if_tour_summary=>c_status-unknown_type.
RETURN.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD booking_fee.
DATA(lv_adult_fee) = adult_fee( is_booking-tour_type ).
rv_fee = is_booking-adults * lv_adult_fee
+ is_booking-children * lv_adult_fee * c_child_share.
IF is_booking-adults + is_booking-children >= c_group_size.
rv_fee = rv_fee * c_group_discount.
ENDIF.
ENDMETHOD.
METHOD adult_fee.
IF iv_tour_type = 'P'.
rv_fee = c_fee_premium.
ELSE.
rv_fee = c_fee_classic.
ENDIF.
ENDMETHOD.
ENDCLASS.