CLASS {{p}}phone_repair_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_device TYPE c LENGTH 6. TYPES ty_repair TYPE c LENGTH 8. TYPES ty_price TYPE p LENGTH 8 DECIMALS 2. CONSTANTS c_device_basic TYPE ty_device VALUE 'BASIC'. CONSTANTS c_device_mid TYPE ty_device VALUE 'MID'. CONSTANTS c_device_high TYPE ty_device VALUE 'HIGH'. CONSTANTS c_repair_screen TYPE ty_repair VALUE 'SCREEN'. CONSTANTS c_repair_battery TYPE ty_repair VALUE 'BATTERY'. CONSTANTS c_repair_board TYPE ty_repair VALUE 'BOARD'. CONSTANTS c_repair_camera TYPE ty_repair VALUE 'CAMERA'. CONSTANTS c_repair_port TYPE ty_repair VALUE 'PORT'. METHODS calculate_price IMPORTING iv_device TYPE ty_device iv_repair TYPE ty_repair iv_express TYPE abap_bool iv_warranty TYPE abap_bool RETURNING VALUE(rv_price) TYPE ty_price. PRIVATE SECTION. CONSTANTS c_base_screen TYPE ty_price VALUE '89.00'. CONSTANTS c_base_battery TYPE ty_price VALUE '19.00'. CONSTANTS c_base_board TYPE ty_price VALUE '149.00'. CONSTANTS c_base_camera TYPE ty_price VALUE '59.00'. CONSTANTS c_base_port TYPE ty_price VALUE '49.00'. CONSTANTS c_factor_basic TYPE ty_price VALUE '1.00'. CONSTANTS c_factor_mid TYPE ty_price VALUE '1.10'. CONSTANTS c_factor_high TYPE ty_price VALUE '1.25'. CONSTANTS c_express_fee TYPE ty_price VALUE '15.00'. CONSTANTS c_warranty_rate TYPE ty_price VALUE '0.80'. CONSTANTS c_minimum_price TYPE ty_price VALUE '25.00'. METHODS base_price IMPORTING iv_repair TYPE ty_repair RETURNING VALUE(rv_price) TYPE ty_price. METHODS device_factor IMPORTING iv_device TYPE ty_device RETURNING VALUE(rv_factor) TYPE ty_price. METHODS price_with_extras IMPORTING iv_price TYPE ty_price iv_express TYPE abap_bool iv_warranty TYPE abap_bool RETURNING VALUE(rv_price) TYPE ty_price. ENDCLASS. CLASS {{p}}phone_repair_pricer IMPLEMENTATION. METHOD calculate_price. rv_price = base_price( iv_repair ). IF rv_price IS INITIAL. RETURN. ENDIF. rv_price = rv_price * device_factor( iv_device ). rv_price = price_with_extras( iv_price = rv_price iv_express = iv_express iv_warranty = iv_warranty ). IF rv_price < c_minimum_price. rv_price = c_minimum_price. ENDIF. ENDMETHOD. METHOD base_price. CASE iv_repair. WHEN c_repair_screen. rv_price = c_base_screen. WHEN c_repair_battery. rv_price = c_base_battery. WHEN c_repair_board. rv_price = c_base_board. WHEN c_repair_camera. rv_price = c_base_camera. WHEN c_repair_port. rv_price = c_base_port. ENDCASE. ENDMETHOD. METHOD device_factor. CASE iv_device. WHEN c_device_mid. rv_factor = c_factor_mid. WHEN c_device_high. rv_factor = c_factor_high. WHEN OTHERS. rv_factor = c_factor_basic. ENDCASE. ENDMETHOD. METHOD price_with_extras. rv_price = iv_price. IF iv_express = abap_true. rv_price = rv_price + c_express_fee. ENDIF. IF iv_warranty = abap_true. rv_price = rv_price * c_warranty_rate. ENDIF. ENDMETHOD. ENDCLASS.