CLASS {{p}}pool_fee DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_ticket TYPE c LENGTH 1. TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2. METHODS calculate_fee IMPORTING iv_ticket TYPE ty_ticket iv_minutes TYPE i iv_sauna TYPE abap_bool RETURNING VALUE(rv_fee) TYPE ty_amount. PRIVATE SECTION. CONSTANTS: c_ticket_adult TYPE ty_ticket VALUE 'A', c_ticket_child TYPE ty_ticket VALUE 'C', c_ticket_senior TYPE ty_ticket VALUE 'S', c_ticket_family TYPE ty_ticket VALUE 'F'. CONSTANTS: c_base_adult TYPE ty_amount VALUE '6.50', c_base_child TYPE ty_amount VALUE '3.50', c_base_senior TYPE ty_amount VALUE '4.50', c_base_family TYPE ty_amount VALUE '15.00', c_block_fee TYPE ty_amount VALUE '1.00', c_sauna_fee TYPE ty_amount VALUE '5.00', c_sauna_family TYPE ty_amount VALUE '8.00'. CONSTANTS: c_free_minutes TYPE i VALUE 60, c_block_minutes TYPE i VALUE 30. METHODS base_fee IMPORTING iv_ticket TYPE ty_ticket RETURNING VALUE(rv_fee) TYPE ty_amount. METHODS duration_fee IMPORTING iv_minutes TYPE i RETURNING VALUE(rv_fee) TYPE ty_amount. METHODS sauna_fee IMPORTING iv_ticket TYPE ty_ticket iv_sauna TYPE abap_bool RETURNING VALUE(rv_fee) TYPE ty_amount. ENDCLASS. CLASS {{p}}pool_fee IMPLEMENTATION. METHOD calculate_fee. rv_fee = base_fee( iv_ticket ) + duration_fee( iv_minutes ) + sauna_fee( iv_ticket = iv_ticket iv_sauna = iv_sauna ). ENDMETHOD. METHOD base_fee. CASE iv_ticket. WHEN c_ticket_adult. rv_fee = c_base_adult. WHEN c_ticket_child. rv_fee = c_base_child. WHEN c_ticket_senior. rv_fee = c_base_senior. WHEN c_ticket_family. rv_fee = c_base_family. WHEN OTHERS. rv_fee = 0. ENDCASE. ENDMETHOD. METHOD duration_fee. DATA(lv_minutes) = nmax( val1 = iv_minutes val2 = 0 ). IF lv_minutes <= c_free_minutes. RETURN. ENDIF. DATA(lv_blocks) = ( lv_minutes - c_free_minutes + c_block_minutes - 1 ) DIV c_block_minutes. rv_fee = lv_blocks * c_block_fee. ENDMETHOD. METHOD sauna_fee. IF iv_sauna <> abap_true OR iv_ticket = c_ticket_child. RETURN. ENDIF. IF iv_ticket = c_ticket_family. rv_fee = c_sauna_family. ELSE. rv_fee = c_sauna_fee. ENDIF. ENDMETHOD. ENDCLASS.