77 lines
2.4 KiB
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.
|