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.