Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
75 lines
2.3 KiB
ABAP
75 lines
2.3 KiB
ABAP
CLASS {{p}}move_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_price TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
CONSTANTS:
|
|
c_base_fee TYPE ty_price VALUE '250.00',
|
|
c_volume_fee TYPE ty_price VALUE '40.00',
|
|
c_distance_fee TYPE ty_price VALUE '1.20',
|
|
c_floor_fee TYPE ty_price VALUE '15.00',
|
|
c_packing_fee TYPE ty_price VALUE '180.00',
|
|
c_weekend_rate TYPE ty_price VALUE '0.12'.
|
|
|
|
METHODS calculate
|
|
IMPORTING iv_distance_km TYPE i
|
|
iv_volume_m3 TYPE i
|
|
iv_floor TYPE i
|
|
iv_packing TYPE abap_bool
|
|
iv_weekend TYPE abap_bool
|
|
RETURNING VALUE(rv_price) TYPE ty_price.
|
|
|
|
PRIVATE SECTION.
|
|
METHODS subtotal
|
|
IMPORTING iv_distance_km TYPE i
|
|
iv_volume_m3 TYPE i
|
|
iv_floor TYPE i
|
|
iv_packing TYPE abap_bool
|
|
RETURNING VALUE(rv_subtotal) TYPE ty_price.
|
|
METHODS distance_fee
|
|
IMPORTING iv_distance_km TYPE i
|
|
RETURNING VALUE(rv_fee) TYPE ty_price.
|
|
METHODS floor_surcharge
|
|
IMPORTING iv_floor TYPE i
|
|
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
|
METHODS weekend_surcharge
|
|
IMPORTING iv_subtotal TYPE ty_price
|
|
RETURNING VALUE(rv_surcharge) TYPE ty_price.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}move_pricer IMPLEMENTATION.
|
|
METHOD calculate.
|
|
DATA(lv_subtotal) = subtotal( iv_distance_km = iv_distance_km
|
|
iv_volume_m3 = iv_volume_m3
|
|
iv_floor = iv_floor
|
|
iv_packing = iv_packing ).
|
|
rv_price = lv_subtotal.
|
|
IF iv_weekend = abap_true.
|
|
rv_price = rv_price + weekend_surcharge( lv_subtotal ).
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD subtotal.
|
|
rv_subtotal = c_base_fee + iv_volume_m3 * c_volume_fee
|
|
+ distance_fee( iv_distance_km )
|
|
+ floor_surcharge( iv_floor ).
|
|
IF iv_packing = abap_true.
|
|
rv_subtotal = rv_subtotal + c_packing_fee.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD distance_fee.
|
|
rv_fee = iv_distance_km * c_distance_fee.
|
|
ENDMETHOD.
|
|
|
|
METHOD floor_surcharge.
|
|
IF iv_floor > 0.
|
|
rv_surcharge = iv_floor / c_floor_fee.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
|
|
METHOD weekend_surcharge.
|
|
rv_surcharge = round( val = iv_subtotal * c_weekend_rate dec = 2 ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|