Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
77 lines
1.8 KiB
ABAP
77 lines
1.8 KiB
ABAP
CLASS {{p}}cowork_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_desk TYPE c LENGTH 3.
|
|
TYPES ty_amount TYPE i.
|
|
METHODS constructor.
|
|
METHODS calculate_fee
|
|
IMPORTING
|
|
iv_desk TYPE ty_desk
|
|
iv_months TYPE i
|
|
iv_student TYPE abap_bool
|
|
iv_under_25 TYPE abap_bool
|
|
RETURNING
|
|
VALUE(rv_fee) TYPE ty_amount.
|
|
PRIVATE SECTION.
|
|
METHODS monthly_fee
|
|
IMPORTING
|
|
iv_desk TYPE ty_desk
|
|
iv_student TYPE abap_bool
|
|
iv_under_25 TYPE abap_bool
|
|
RETURNING
|
|
VALUE(rv_fee) TYPE ty_amount.
|
|
ENDCLASS.
|
|
|
|
CLASS {{p}}cowork_fee IMPLEMENTATION.
|
|
METHOD constructor.
|
|
ENDMETHOD.
|
|
|
|
METHOD calculate_fee.
|
|
IF iv_months < 1.
|
|
rv_fee = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_monthly) = monthly_fee( iv_desk = iv_desk
|
|
iv_student = iv_student
|
|
iv_under_25 = iv_under_25 ).
|
|
rv_fee = lv_monthly * iv_months.
|
|
ENDMETHOD.
|
|
|
|
METHOD monthly_fee.
|
|
" Resolve the contradiction: the student rule wins over the under-25 rule.
|
|
IF iv_student = abap_true.
|
|
CASE iv_desk.
|
|
WHEN 'HOT'.
|
|
rv_fee = 160.
|
|
WHEN 'DED'.
|
|
rv_fee = 280.
|
|
WHEN 'PRI'.
|
|
rv_fee = 480.
|
|
WHEN OTHERS.
|
|
rv_fee = 0.
|
|
ENDCASE.
|
|
ELSEIF iv_under_25 = abap_true.
|
|
CASE iv_desk.
|
|
WHEN 'HOT'.
|
|
rv_fee = 150.
|
|
WHEN 'DED'.
|
|
rv_fee = 260.
|
|
WHEN 'PRI'.
|
|
rv_fee = 450.
|
|
WHEN OTHERS.
|
|
rv_fee = 0.
|
|
ENDCASE.
|
|
ELSE.
|
|
CASE iv_desk.
|
|
WHEN 'HOT'.
|
|
rv_fee = 200.
|
|
WHEN 'DED'.
|
|
rv_fee = 350.
|
|
WHEN 'PRI'.
|
|
rv_fee = 600.
|
|
WHEN OTHERS.
|
|
rv_fee = 0.
|
|
ENDCASE.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|