Files
abap-llm/tasks_gen/eval/G0118/faulty/m1_canteen_planner.clas.abap

103 lines
3.4 KiB
ABAP

CLASS {{p}}canteen_planner DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES {{p}}if_canteen_plan.
PRIVATE SECTION.
TYPES tt_demand TYPE SORTED TABLE OF {{p}}if_canteen_plan=>ty_order
WITH UNIQUE KEY ingredient.
TYPES tt_master TYPE HASHED TABLE OF {{p}}if_canteen_plan=>ty_master
WITH UNIQUE KEY ingredient.
METHODS collect_orders
IMPORTING it_orders TYPE {{p}}if_canteen_plan=>tt_order
CHANGING ct_demand TYPE tt_demand.
METHODS collect_demand
IMPORTING it_orders TYPE {{p}}if_canteen_plan=>tt_order
RETURNING VALUE(rt_demand) TYPE tt_demand.
METHODS to_master
IMPORTING it_catalogue TYPE {{p}}if_canteen_plan=>tt_master
RETURNING VALUE(rt_master) TYPE tt_master.
METHODS packs_needed
IMPORTING iv_quantity TYPE {{p}}if_canteen_plan=>ty_quantity
iv_pack_size TYPE {{p}}if_canteen_plan=>ty_quantity
RETURNING VALUE(rv_packs) TYPE i.
ENDCLASS.
CLASS {{p}}canteen_planner IMPLEMENTATION.
METHOD {{p}}if_canteen_plan~merge_orders.
DATA(lt_demand) = collect_demand( it_orders_a ).
collect_orders( EXPORTING it_orders = it_orders_b
CHANGING ct_demand = lt_demand ).
rt_demand = lt_demand.
ENDMETHOD.
METHOD {{p}}if_canteen_plan~pack_requirement.
DATA(lt_master) = to_master( it_catalogue ).
DATA(lt_demand) = collect_demand( it_demand ).
DATA ls_master TYPE {{p}}if_canteen_plan=>ty_master.
LOOP AT lt_demand INTO DATA(ls_demand).
IF NOT line_exists( lt_master[ ingredient = ls_demand-ingredient ] ).
CONTINUE.
ENDIF.
ls_master = lt_master[ ingredient = ls_demand-ingredient ].
INSERT VALUE #( ingredient = ls_demand-ingredient
packs = packs_needed( iv_quantity = ls_demand-quantity
iv_pack_size = ls_master-pack_size ) )
INTO TABLE rt_packs.
ENDLOOP.
ENDMETHOD.
METHOD {{p}}if_canteen_plan~missing_ingredients.
DATA(lt_master) = to_master( it_catalogue ).
DATA(lt_demand) = collect_demand( it_demand ).
LOOP AT lt_demand INTO DATA(ls_demand).
IF NOT line_exists( lt_master[ ingredient = ls_demand-ingredient ] ).
APPEND ls_demand-ingredient TO rt_missing.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD collect_orders.
LOOP AT it_orders INTO DATA(ls_order).
IF ls_order-quantity > 0.
CONTINUE.
ENDIF.
READ TABLE ct_demand ASSIGNING FIELD-SYMBOL(<ls_demand>)
WITH TABLE KEY ingredient = ls_order-ingredient.
IF sy-subrc = 0.
<ls_demand>-quantity = <ls_demand>-quantity + ls_order-quantity.
ELSE.
INSERT VALUE #( ingredient = ls_order-ingredient
quantity = ls_order-quantity ) INTO TABLE ct_demand.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD collect_demand.
DATA(lt_demand) = VALUE tt_demand( ).
collect_orders( EXPORTING it_orders = it_orders
CHANGING ct_demand = lt_demand ).
rt_demand = lt_demand.
ENDMETHOD.
METHOD to_master.
LOOP AT it_catalogue INTO DATA(ls_catalogue).
INSERT VALUE #( ingredient = ls_catalogue-ingredient
pack_size = ls_catalogue-pack_size ) INTO TABLE rt_master.
ENDLOOP.
ENDMETHOD.
METHOD packs_needed.
rv_packs = iv_quantity DIV iv_pack_size.
IF iv_quantity MOD iv_pack_size <> 0.
rv_packs = rv_packs + 1.
ENDIF.
ENDMETHOD.
ENDCLASS.