CLASS {{p}}climb_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_entry TYPE c LENGTH 1. TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2. TYPES: BEGIN OF ty_session, entry_type TYPE ty_entry, hours TYPE i, climbers TYPE i, equipment TYPE abap_bool, member TYPE abap_bool, visits TYPE i, END OF ty_session. TYPES: BEGIN OF ty_result, base TYPE ty_amount, surcharge TYPE ty_amount, discount TYPE ty_amount, total TYPE ty_amount, message TYPE string, END OF ty_result. METHODS price IMPORTING is_session TYPE ty_session RETURNING VALUE(rs_result) TYPE ty_result. ENDCLASS. CLASS {{p}}climb_pricer IMPLEMENTATION. METHOD price. DATA: lv_rate TYPE ty_amount, lv_gross TYPE ty_amount. CLEAR rs_result. IF is_session-entry_type = 'A' OR is_session-entry_type = 'Y' OR is_session-entry_type = 'F'. IF is_session-hours GE 1 AND is_session-hours LE 6. IF is_session-climbers GE 1 AND is_session-climbers LE 10. IF is_session-entry_type = 'A'. lv_rate = '9.00'. ELSEIF is_session-entry_type = 'Y'. lv_rate = '6.00'. ELSE. lv_rate = '7.00'. ENDIF. rs_result-base = is_session-hours * lv_rate * is_session-climbers. IF is_session-equipment = 'X'. rs_result-surcharge = is_session-climbers * '4.00'. ENDIF. IF is_session-climbers GE 6. rs_result-surcharge = rs_result-surcharge + '15.00'. ENDIF. lv_gross = rs_result-base + rs_result-surcharge. IF is_session-member = 'X'. rs_result-discount = lv_gross * 15 / 100. ELSEIF is_session-visits GE 10. rs_result-discount = lv_gross * 20 / 100. ELSEIF is_session-visits GE 3. rs_result-discount = lv_gross * 5 / 100. ENDIF. rs_result-total = lv_gross - rs_result-discount. ELSE. rs_result-message = 'INVALID CLIMBERS'. ENDIF. ELSE. rs_result-message = 'INVALID HOURS'. ENDIF. ELSE. rs_result-message = 'UNKNOWN ENTRY TYPE'. ENDIF. ENDMETHOD. ENDCLASS.