Files
abap-llm/tasks_gen/eval/G0135/reference/pool_fee.clas.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.