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.