CLASS {{p}}shipping_cost_calc DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. INTERFACES {{p}}if_shipping_cost. PRIVATE SECTION. METHODS base_rate IMPORTING iv_weight TYPE {{p}}if_shipping_cost=>ty_weight RETURNING VALUE(rv_rate) TYPE {{p}}if_shipping_cost=>ty_amount. METHODS express_surcharge IMPORTING iv_rate TYPE {{p}}if_shipping_cost=>ty_amount RETURNING VALUE(rv_surcharge) TYPE {{p}}if_shipping_cost=>ty_amount. ENDCLASS. CLASS {{p}}shipping_cost_calc IMPLEMENTATION. METHOD {{p}}if_shipping_cost~calculate. IF iv_weight <= 0. rv_cost = 0. RETURN. ENDIF. DATA(lv_cost) = base_rate( iv_weight ). IF iv_express = abap_true. lv_cost = lv_cost - express_surcharge( lv_cost ). ENDIF. IF lv_cost < {{p}}if_shipping_cost=>c_rate-min_charge. rv_cost = {{p}}if_shipping_cost=>c_rate-min_charge. ELSE. rv_cost = lv_cost. ENDIF. ENDMETHOD. METHOD base_rate. IF iv_weight <= 1. rv_rate = '4.90'. ELSEIF iv_weight <= 5. rv_rate = '8.50'. ELSEIF iv_weight <= 10. rv_rate = '12.00'. ELSEIF iv_weight <= {{p}}if_shipping_cost=>c_rate-bulk_weight. rv_rate = '18.75'. ELSE. DATA(lv_started_kg) = CONV i( ceil( iv_weight - {{p}}if_shipping_cost=>c_rate-bulk_weight ) ). rv_rate = '18.75' + lv_started_kg * {{p}}if_shipping_cost=>c_rate-bulk_step. ENDIF. ENDMETHOD. METHOD express_surcharge. rv_surcharge = round( val = iv_rate * {{p}}if_shipping_cost=>c_rate-express_percent / 100 dec = 2 ). ENDMETHOD. ENDCLASS.