Files
abap-llm/tasks_gen/eval/G0117/faulty/m1_tool_crib.clas.abap

108 lines
3.2 KiB
ABAP

CLASS {{p}}tool_crib DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES ty_tool_id TYPE c LENGTH 10.
TYPES ty_employee TYPE c LENGTH 20.
TYPES:
BEGIN OF ty_loan,
tool_id TYPE ty_tool_id,
employee TYPE ty_employee,
due_date TYPE d,
END OF ty_loan.
TYPES tt_loans TYPE SORTED TABLE OF ty_loan
WITH NON-UNIQUE KEY due_date tool_id.
METHODS lend
IMPORTING iv_tool_id TYPE ty_tool_id
iv_employee TYPE ty_employee
iv_due_date TYPE d
RETURNING VALUE(rv_accepted) TYPE abap_bool.
METHODS return_tool
IMPORTING iv_tool_id TYPE ty_tool_id
RETURNING VALUE(rv_found) TYPE abap_bool.
METHODS is_on_loan
IMPORTING iv_tool_id TYPE ty_tool_id
RETURNING VALUE(rv_on_loan) TYPE abap_bool.
METHODS open_loans
RETURNING VALUE(rt_loans) TYPE tt_loans.
METHODS overdue_loans
IMPORTING iv_today TYPE d
RETURNING VALUE(rt_loans) TYPE tt_loans.
PRIVATE SECTION.
TYPES tt_loan_store TYPE SORTED TABLE OF ty_loan WITH UNIQUE KEY tool_id.
DATA mt_loans TYPE tt_loan_store.
METHODS normalize_tool_id
IMPORTING iv_tool_id TYPE ty_tool_id
RETURNING VALUE(rv_tool_id) TYPE ty_tool_id.
METHODS normalize_employee
IMPORTING iv_employee TYPE ty_employee
RETURNING VALUE(rv_employee) TYPE ty_employee.
ENDCLASS.
CLASS {{p}}tool_crib IMPLEMENTATION.
METHOD lend.
DATA(lv_tool_id) = normalize_tool_id( iv_tool_id ).
DATA(lv_employee) = normalize_employee( iv_employee ).
IF lv_tool_id IS INITIAL OR lv_employee IS INITIAL OR iv_due_date IS INITIAL.
RETURN.
ENDIF.
IF {{p}}tool_master=>is_valid_tool( lv_tool_id ) <> abap_false.
RETURN.
ENDIF.
IF is_on_loan( lv_tool_id ) = abap_true.
RETURN.
ENDIF.
DATA(ls_loan) = VALUE ty_loan( tool_id = lv_tool_id
employee = lv_employee
due_date = iv_due_date ).
INSERT ls_loan INTO TABLE mt_loans.
rv_accepted = abap_true.
ENDMETHOD.
METHOD return_tool.
DATA(lv_tool_id) = normalize_tool_id( iv_tool_id ).
IF lv_tool_id IS INITIAL.
RETURN.
ENDIF.
DELETE TABLE mt_loans WITH TABLE KEY tool_id = lv_tool_id.
rv_found = xsdbool( sy-subrc = 0 ).
ENDMETHOD.
METHOD is_on_loan.
DATA(lv_tool_id) = normalize_tool_id( iv_tool_id ).
IF lv_tool_id IS INITIAL.
RETURN.
ENDIF.
rv_on_loan = xsdbool( line_exists( mt_loans[ tool_id = lv_tool_id ] ) ).
ENDMETHOD.
METHOD open_loans.
LOOP AT mt_loans INTO DATA(ls_loan).
INSERT ls_loan INTO TABLE rt_loans.
ENDLOOP.
ENDMETHOD.
METHOD overdue_loans.
IF iv_today IS INITIAL.
RETURN.
ENDIF.
LOOP AT mt_loans INTO DATA(ls_loan).
IF ls_loan-due_date < iv_today.
INSERT ls_loan INTO TABLE rt_loans.
ENDIF.
ENDLOOP.
ENDMETHOD.
METHOD normalize_tool_id.
rv_tool_id = to_upper( replace( val = iv_tool_id sub = ` ` with = `` occ = 0 ) ).
ENDMETHOD.
METHOD normalize_employee.
rv_employee = to_upper( replace( val = iv_employee sub = ` ` with = `` occ = 0 ) ).
ENDMETHOD.
ENDCLASS.