Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
102
tasks_gen/eval/G0118/reference/canteen_planner.clas.abap
Normal file
102
tasks_gen/eval/G0118/reference/canteen_planner.clas.abap
Normal file
@@ -0,0 +1,102 @@
|
||||
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.
|
||||
Reference in New Issue
Block a user