Files
abap-llm/tasks_gen/eval/G0188/faulty/m0_laundry_pricer.clas.abap

80 lines
2.2 KiB
ABAP

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_rate_wash TYPE ty_amount VALUE '2.50',
c_rate_dry TYPE ty_amount VALUE '4.00',
c_rate_iron TYPE ty_amount VALUE '1.50',
c_express_fee TYPE ty_amount VALUE '5.00',
c_min_price TYPE ty_amount VALUE '10.00',
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 iv_member <> abap_true.
lv_price = lv_price * c_member_discount.
ENDIF.
IF iv_express = abap_true.
lv_price = lv_price + c_express_fee.
ENDIF.
IF lv_price < c_min_price.
lv_price = c_min_price.
ENDIF.
rv_price = round_currency( lv_price ).
ENDMETHOD.
METHOD rate_per_kg.
CASE iv_service.
WHEN c_service_wash.
rv_rate = c_rate_wash.
WHEN c_service_dry.
rv_rate = c_rate_dry.
WHEN c_service_iron.
rv_rate = c_rate_iron.
WHEN OTHERS.
rv_rate = c_rate_wash.
ENDCASE.
ENDMETHOD.
METHOD round_currency.
rv_amount = round( val = iv_amount dec = 2 ).
ENDMETHOD.
ENDCLASS.