Files
abap-llm/tasks_gen/train/G1010/faulty/m4_phone_repair_pricer.clas.abap

106 lines
3.4 KiB
ABAP

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.