CLASS {{p}}tailor_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC. PUBLIC SECTION. TYPES ty_garment TYPE c LENGTH 10. TYPES ty_service TYPE c LENGTH 10. TYPES ty_price TYPE p LENGTH 8 DECIMALS 2. METHODS calculate_price IMPORTING iv_garment TYPE ty_garment iv_service TYPE ty_service iv_quantity TYPE i iv_express TYPE abap_bool RETURNING VALUE(rv_price) TYPE ty_price. PRIVATE SECTION. CONSTANTS: c_express_fee TYPE ty_price VALUE '6.00', c_minimum_price TYPE ty_price VALUE '15.00', c_discount_low TYPE ty_price VALUE '10.00', c_discount_high TYPE ty_price VALUE '20.00', c_qty_low TYPE i VALUE 3, c_qty_high TYPE i VALUE 5, c_percent_base TYPE i VALUE 100. METHODS service_base IMPORTING iv_service TYPE ty_service RETURNING VALUE(rv_base) TYPE ty_price. METHODS garment_factor IMPORTING iv_garment TYPE ty_garment RETURNING VALUE(rv_factor) TYPE ty_price. METHODS discount_percent IMPORTING iv_quantity TYPE i RETURNING VALUE(rv_percent) TYPE ty_price. ENDCLASS. CLASS {{p}}tailor_pricer IMPLEMENTATION. METHOD calculate_price. DATA lv_base TYPE ty_price. DATA lv_factor TYPE ty_price. DATA lv_unit TYPE ty_price. DATA lv_total TYPE ty_price. DATA lv_discount TYPE ty_price. IF iv_quantity <= 0. RETURN. ENDIF. lv_base = service_base( iv_service ). lv_factor = garment_factor( iv_garment ). IF lv_base <= 0 OR lv_factor <= 0. RETURN. ENDIF. lv_unit = lv_base * lv_factor. IF iv_express = abap_true. lv_unit = lv_unit + c_express_fee. ENDIF. lv_total = lv_unit * iv_quantity. lv_discount = discount_percent( iv_quantity ). lv_total = lv_total - lv_total * lv_discount / c_percent_base. IF lv_total >= c_minimum_price. rv_price = c_minimum_price. ELSE. rv_price = lv_total. ENDIF. ENDMETHOD. METHOD service_base. CASE iv_service. WHEN 'HEM'. rv_base = '8.00'. WHEN 'TAKE_IN'. rv_base = '15.00'. WHEN 'ZIP'. rv_base = '12.00'. WHEN 'SLEEVE'. rv_base = '10.00'. WHEN 'LINING'. rv_base = '25.00'. WHEN OTHERS. rv_base = 0. ENDCASE. ENDMETHOD. METHOD garment_factor. CASE iv_garment. WHEN 'TROUSERS'. rv_factor = '1.00'. WHEN 'SKIRT'. rv_factor = '1.00'. WHEN 'JACKET'. rv_factor = '1.50'. WHEN 'DRESS'. rv_factor = '1.50'. WHEN 'COAT'. rv_factor = '2.00'. WHEN OTHERS. rv_factor = 0. ENDCASE. ENDMETHOD. METHOD discount_percent. IF iv_quantity >= c_qty_high. rv_percent = c_discount_high. ELSEIF iv_quantity >= c_qty_low. rv_percent = c_discount_low. ENDIF. ENDMETHOD. ENDCLASS.