Generator: pilot analysis and fixes; G0002-G0021 tasks; handover notes merged
- Static bundle checks (name length, seed type, reserved words, contract test classes, testclasses_file), local abaplint parser check before SAP, max_tokens, robust JSON parse - Runner: G2 for CDS views with parameters, contract_check detail in report - G0020 and G0013 fixed by review and revalidated (oracle 100, null 0) - Pilot results in docs/faz1-tasarim.md 11e; handover notes merged into CLAUDE.md and docs Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
128
tasks_gen/eval/G0010/reference/stock_cover_checker.clas.abap
Normal file
128
tasks_gen/eval/G0010/reference/stock_cover_checker.clas.abap
Normal file
@@ -0,0 +1,128 @@
|
||||
CLASS {{p}}stock_cover_checker DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
INTERFACES {{p}}if_stock_cover.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_stock,
|
||||
material TYPE {{p}}if_stock_cover=>ty_material,
|
||||
plant TYPE {{p}}if_stock_cover=>ty_plant,
|
||||
remaining TYPE {{p}}if_stock_cover=>ty_quantity,
|
||||
END OF ty_stock.
|
||||
TYPES tt_stock TYPE HASHED TABLE OF ty_stock WITH UNIQUE KEY material plant.
|
||||
|
||||
METHODS aggregate
|
||||
IMPORTING it_stock TYPE {{p}}if_stock_cover=>tt_stock_item
|
||||
RETURNING VALUE(rt_stock) TYPE tt_stock.
|
||||
|
||||
METHODS free_quantity
|
||||
IMPORTING it_stock TYPE tt_stock
|
||||
iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
RETURNING VALUE(rv_quantity) TYPE {{p}}if_stock_cover=>ty_quantity.
|
||||
|
||||
METHODS consume
|
||||
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
iv_quantity TYPE {{p}}if_stock_cover=>ty_quantity
|
||||
CHANGING ct_stock TYPE tt_stock.
|
||||
|
||||
METHODS normalize_material
|
||||
IMPORTING iv_material TYPE {{p}}if_stock_cover=>ty_material
|
||||
RETURNING VALUE(rv_material) TYPE {{p}}if_stock_cover=>ty_material.
|
||||
|
||||
METHODS normalize_plant
|
||||
IMPORTING iv_plant TYPE {{p}}if_stock_cover=>ty_plant
|
||||
RETURNING VALUE(rv_plant) TYPE {{p}}if_stock_cover=>ty_plant.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}stock_cover_checker IMPLEMENTATION.
|
||||
METHOD {{p}}if_stock_cover~check.
|
||||
DATA(lt_stock) = aggregate( it_stock ).
|
||||
|
||||
LOOP AT it_requirement INTO DATA(ls_requirement).
|
||||
DATA(lv_free) = free_quantity( it_stock = lt_stock
|
||||
iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant ).
|
||||
DATA(ls_result) = VALUE {{p}}if_stock_cover=>ty_result(
|
||||
material = ls_requirement-material
|
||||
plant = ls_requirement-plant
|
||||
required = ls_requirement-required
|
||||
available = lv_free ).
|
||||
|
||||
IF ls_requirement-required <= 0.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-invalid.
|
||||
ELSEIF lv_free >= ls_requirement-required.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-ok.
|
||||
consume( EXPORTING iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant
|
||||
iv_quantity = ls_requirement-required
|
||||
CHANGING ct_stock = lt_stock ).
|
||||
ELSE.
|
||||
ls_result-status = {{p}}if_stock_cover=>c_status-short.
|
||||
ls_result-shortage = ls_requirement-required - lv_free.
|
||||
consume( EXPORTING iv_material = ls_requirement-material
|
||||
iv_plant = ls_requirement-plant
|
||||
iv_quantity = lv_free
|
||||
CHANGING ct_stock = lt_stock ).
|
||||
ENDIF.
|
||||
|
||||
APPEND ls_result TO rt_result.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD {{p}}if_stock_cover~shortages.
|
||||
rt_shortage = it_result.
|
||||
DELETE rt_shortage WHERE status <> {{p}}if_stock_cover=>c_status-short.
|
||||
SORT rt_shortage BY material plant.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD aggregate.
|
||||
LOOP AT it_stock INTO DATA(ls_stock).
|
||||
IF ls_stock-quantity < 0.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
DATA(lv_material) = normalize_material( ls_stock-material ).
|
||||
DATA(lv_plant) = normalize_plant( ls_stock-plant ).
|
||||
ASSIGN rt_stock[ material = lv_material plant = lv_plant ] TO FIELD-SYMBOL(<ls_stock_sum>).
|
||||
IF sy-subrc = 0.
|
||||
<ls_stock_sum>-remaining = <ls_stock_sum>-remaining + ls_stock-quantity.
|
||||
ELSE.
|
||||
INSERT VALUE #( material = lv_material
|
||||
plant = lv_plant
|
||||
remaining = ls_stock-quantity ) INTO TABLE rt_stock.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD free_quantity.
|
||||
ASSIGN it_stock[ material = normalize_material( iv_material )
|
||||
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
|
||||
IF sy-subrc = 0.
|
||||
rv_quantity = <ls_stock>-remaining.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD consume.
|
||||
ASSIGN ct_stock[ material = normalize_material( iv_material )
|
||||
plant = normalize_plant( iv_plant ) ] TO FIELD-SYMBOL(<ls_stock>).
|
||||
IF sy-subrc = 0.
|
||||
<ls_stock>-remaining = <ls_stock>-remaining - iv_quantity.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize_material.
|
||||
DATA lv_text TYPE string.
|
||||
lv_text = iv_material.
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
|
||||
rv_material = to_upper( lv_text ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD normalize_plant.
|
||||
DATA lv_text TYPE string.
|
||||
lv_text = iv_plant.
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_text WITH ``.
|
||||
rv_plant = to_upper( lv_text ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,93 @@
|
||||
CLASS ltc_stock_cover DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}if_stock_cover.
|
||||
METHODS setup.
|
||||
METHODS covered_req_is_ok FOR TESTING.
|
||||
METHODS shortage_is_reported FOR TESTING.
|
||||
METHODS stock_shared_in_order FOR TESTING.
|
||||
METHODS invalid_req_keeps_stock FOR TESTING.
|
||||
METHODS blanks_and_case_ignored FOR TESTING.
|
||||
METHODS shortages_are_sorted FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_stock_cover IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}stock_cover_checker( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD covered_req_is_ok.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 40 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 40 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 40 available = 40 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortage_is_reported.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 5 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 12 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 12 available = 5 shortage = 7 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD stock_shared_in_order.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 10 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 available = 10 shortage = 0 status = 'OK' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 6 available = 4 shortage = 2 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD invalid_req_keeps_stock.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'MAT-A' plant = 'P1' quantity = 9 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 )
|
||||
( material = 'MAT-A' plant = 'P1' required = 9 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P1' required = 0 available = 9 shortage = 0 status = 'INVALID' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 9 available = 9 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD blanks_and_case_ignored.
|
||||
DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item(
|
||||
( material = 'mat-a' plant = 'p1' quantity = 7 ) ).
|
||||
DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement(
|
||||
( material = ' MAT-A ' plant = 'P1' required = 7 ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = ' MAT-A ' plant = 'P1' required = 7 available = 7 shortage = 0 status = 'OK' ) ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = lt_exp
|
||||
act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD shortages_are_sorted.
|
||||
DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-A' plant = 'P1' required = 1 available = 1 shortage = 0 status = 'OK' ) ).
|
||||
DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result(
|
||||
( material = 'MAT-A' plant = 'P2' required = 1 available = 0 shortage = 1 status = 'SHORT' )
|
||||
( material = 'MAT-B' plant = 'P1' required = 1 available = 0 shortage = 1 status = 'SHORT' ) ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user