Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
80 lines
2.2 KiB
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.
|