INTERFACE {{p}}if_mix_recipe PUBLIC. TYPES ty_grade TYPE c LENGTH 4. TYPES ty_qty TYPE p LENGTH 8 DECIMALS 2. TYPES ty_status TYPE c LENGTH 10. TYPES: BEGIN OF ty_mix, grade TYPE ty_grade, cement_kg TYPE ty_qty, sand_kg TYPE ty_qty, gravel_kg TYPE ty_qty, water_l TYPE ty_qty, END OF ty_mix. CONSTANTS: BEGIN OF c_grade, c20 TYPE ty_grade VALUE 'C20', c25 TYPE ty_grade VALUE 'C25', c30 TYPE ty_grade VALUE 'C30', c35 TYPE ty_grade VALUE 'C35', END OF c_grade, BEGIN OF c_status, ok TYPE ty_status VALUE 'OK', grade TYPE ty_status VALUE 'GRADE', volume TYPE ty_status VALUE 'VOLUME', END OF c_status. METHODS check_order IMPORTING iv_grade TYPE ty_grade iv_volume TYPE ty_qty RETURNING VALUE(rv_status) TYPE ty_status. METHODS mix_for IMPORTING iv_grade TYPE ty_grade iv_volume TYPE ty_qty RETURNING VALUE(rs_mix) TYPE ty_mix. ENDINTERFACE. INTERFACE {{p}}if_mix_recipe. METHOD check_order. DATA lv_grade TYPE ty_grade. lv_grade = to_upper( iv_grade ). IF lv_grade <> c_grade-c20 AND lv_grade <> c_grade-c25 AND lv_grade <> c_grade-c30 AND lv_grade <> c_grade-c35. rv_status = c_status-grade. RETURN. ENDIF. IF iv_volume < '0.50' OR iv_volume > '20.00'. rv_status = c_status-volume. RETURN. ENDIF. rv_status = c_status-ok. ENDMETHOD. METHOD mix_for. IF check_order( iv_grade = iv_grade iv_volume = iv_volume ) <> c_status-ok. RETURN. ENDIF. DATA lv_grade TYPE ty_grade. lv_grade = to_upper( iv_grade ). DATA lv_cement TYPE ty_qty. DATA lv_sand TYPE ty_qty. DATA lv_gravel TYPE ty_qty. DATA lv_water TYPE ty_qty. CASE lv_grade. WHEN c_grade-c20. lv_cement = '280.00'. lv_sand = '720.00'. lv_gravel = '1180.00'. lv_water = '175.00'. WHEN c_grade-c25. lv_cement = '320.00'. lv_sand = '700.00'. lv_gravel = '1160.00'. lv_water = '175.00'. WHEN c_grade-c30. lv_cement = '360.00'. lv_sand = '680.00'. lv_gravel = '1140.00'. lv_water = '170.00'. WHEN c_grade-c35. lv_cement = '400.00'. lv_sand = '660.00'. lv_gravel = '1120.00'. lv_water = '165.00'. WHEN OTHERS. RETURN. ENDCASE. DATA lv_factor TYPE ty_qty. lv_factor = '1.00'. IF iv_volume < '2.00'. lv_factor = '1.10'. ENDIF. rs_mix-grade = lv_grade. rs_mix-cement_kg = ceil( lv_cement * iv_volume * lv_factor ). rs_mix-sand_kg = ceil( lv_sand * iv_volume * lv_factor ). rs_mix-gravel_kg = ceil( lv_gravel * iv_volume * lv_factor ). rs_mix-water_l = ceil( lv_water * iv_volume * lv_factor ). ENDMETHOD. ENDINTERFACE.