CLASS {{p}}laundry_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES: ty_weight_kg TYPE p LENGTH 5 DECIMALS 2, ty_amount TYPE p LENGTH 8 DECIMALS 2, ty_service TYPE c LENGTH 4. CONSTANTS: c_service_wash TYPE ty_service VALUE 'WASH', c_service_dry TYPE ty_service VALUE 'DRY', c_service_iron TYPE ty_service VALUE 'IRON'. METHODS calculate IMPORTING iv_weight_kg TYPE ty_weight_kg iv_service TYPE ty_service iv_express TYPE abap_bool iv_member TYPE abap_bool RETURNING VALUE(rv_price) TYPE ty_amount. PRIVATE SECTION. CONSTANTS c_member_discount TYPE ty_amount VALUE '0.90'. METHODS rate_per_kg IMPORTING iv_service TYPE ty_service RETURNING VALUE(rv_rate) TYPE ty_amount. METHODS round_currency IMPORTING iv_amount TYPE ty_amount RETURNING VALUE(rv_amount) TYPE ty_amount. ENDCLASS. CLASS {{p}}laundry_pricer IMPLEMENTATION. METHOD calculate. IF iv_weight_kg <= 0. rv_price = 0. RETURN. ENDIF. DATA lv_rate TYPE ty_amount. DATA lv_price TYPE ty_amount. lv_rate = rate_per_kg( iv_service ). lv_price = iv_weight_kg * lv_rate. IF lv_price < 10. lv_price = 10. ENDIF. IF iv_express = abap_true. lv_price = lv_price + 5. ENDIF. IF iv_member = abap_true. lv_price = lv_price * c_member_discount. ENDIF. rv_price = round_currency( lv_price ). ENDMETHOD. METHOD rate_per_kg. CASE iv_service. WHEN c_service_dry. rv_rate = '4.00'. WHEN c_service_iron. rv_rate = '2.50'. WHEN OTHERS. rv_rate = '2.50'. ENDCASE. ENDMETHOD. METHOD round_currency. rv_amount = round( val = iv_amount dec = 2 ). ENDMETHOD. ENDCLASS.