Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
84 lines
2.5 KiB
ABAP
84 lines
2.5 KiB
ABAP
CLASS {{p}}pool_fee DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_ticket TYPE c LENGTH 1.
|
|
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
|
METHODS calculate_fee
|
|
IMPORTING iv_ticket TYPE ty_ticket
|
|
iv_minutes TYPE i
|
|
iv_sauna TYPE abap_bool
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_ticket_adult TYPE ty_ticket VALUE 'A',
|
|
c_ticket_child TYPE ty_ticket VALUE 'C',
|
|
c_ticket_senior TYPE ty_ticket VALUE 'S',
|
|
c_ticket_family TYPE ty_ticket VALUE 'F'.
|
|
CONSTANTS:
|
|
c_base_adult TYPE ty_amount VALUE '6.50',
|
|
c_base_child TYPE ty_amount VALUE '3.50',
|
|
c_base_senior TYPE ty_amount VALUE '4.50',
|
|
c_base_family TYPE ty_amount VALUE '15.00',
|
|
c_block_fee TYPE ty_amount VALUE '1.00',
|
|
c_sauna_fee TYPE ty_amount VALUE '5.00',
|
|
c_sauna_family TYPE ty_amount VALUE '8.00'.
|
|
CONSTANTS:
|
|
c_free_minutes TYPE i VALUE 60,
|
|
c_block_minutes TYPE i VALUE 30.
|
|
|
|
METHODS base_fee
|
|
IMPORTING iv_ticket TYPE ty_ticket
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
METHODS duration_fee
|
|
IMPORTING iv_minutes TYPE i
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
METHODS sauna_fee
|
|
IMPORTING iv_ticket TYPE ty_ticket
|
|
iv_sauna TYPE abap_bool
|
|
RETURNING VALUE(rv_fee) TYPE ty_amount.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}pool_fee IMPLEMENTATION.
|
|
METHOD calculate_fee.
|
|
rv_fee = base_fee( iv_ticket )
|
|
+ duration_fee( iv_minutes )
|
|
+ sauna_fee( iv_ticket = iv_ticket iv_sauna = iv_sauna ).
|
|
ENDMETHOD.
|
|
|
|
METHOD base_fee.
|
|
CASE iv_ticket.
|
|
WHEN c_ticket_adult.
|
|
rv_fee = c_base_adult.
|
|
WHEN c_ticket_child.
|
|
rv_fee = c_base_child.
|
|
WHEN c_ticket_senior.
|
|
rv_fee = c_base_senior.
|
|
WHEN c_ticket_family.
|
|
rv_fee = c_base_family.
|
|
WHEN OTHERS.
|
|
rv_fee = 0.
|
|
ENDCASE.
|
|
ENDMETHOD.
|
|
|
|
METHOD duration_fee.
|
|
DATA(lv_minutes) = nmax( val1 = iv_minutes val2 = 0 ).
|
|
IF lv_minutes > c_free_minutes.
|
|
RETURN.
|
|
ENDIF.
|
|
DATA(lv_blocks) = ( lv_minutes - c_free_minutes + c_block_minutes - 1 ) DIV c_block_minutes.
|
|
rv_fee = lv_blocks * c_block_fee.
|
|
ENDMETHOD.
|
|
|
|
METHOD sauna_fee.
|
|
IF iv_sauna <> abap_true OR iv_ticket = c_ticket_child.
|
|
RETURN.
|
|
ENDIF.
|
|
IF iv_ticket = c_ticket_family.
|
|
rv_fee = c_sauna_family.
|
|
ELSE.
|
|
rv_fee = c_sauna_fee.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|