Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
108 lines
3.2 KiB
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 AND 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.
|