108 lines
2.9 KiB
ABAP
108 lines
2.9 KiB
ABAP
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.
|