Files
abap-llm/tasks_gen/train/G1935/reference/if_mix_recipe.intf.abap
2026-10-05 22:08:59 +02:00

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.