57 lines
1.4 KiB
ABAP
57 lines
1.4 KiB
ABAP
CLASS {{p}}jump_pricer DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
|
PUBLIC SECTION.
|
|
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
|
|
|
METHODS constructor.
|
|
METHODS calculate
|
|
IMPORTING iv_persons TYPE i
|
|
iv_minutes TYPE i
|
|
iv_member TYPE abap_bool
|
|
RETURNING VALUE(rv_price) TYPE ty_amount.
|
|
|
|
PRIVATE SECTION.
|
|
CONSTANTS:
|
|
c_short_price TYPE ty_amount VALUE '8.00',
|
|
c_long_price TYPE ty_amount VALUE '12.00',
|
|
c_member_factor TYPE ty_amount VALUE '0.80',
|
|
c_group_factor TYPE ty_amount VALUE '0.90',
|
|
c_group_size TYPE i VALUE 10,
|
|
c_long_minutes TYPE i VALUE 60.
|
|
|
|
METHODS price_per_person
|
|
IMPORTING iv_minutes TYPE i
|
|
RETURNING VALUE(rv_price) TYPE ty_amount.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}jump_pricer IMPLEMENTATION.
|
|
METHOD constructor.
|
|
ENDMETHOD.
|
|
|
|
METHOD calculate.
|
|
IF iv_persons < 1 OR iv_minutes < 1.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
DATA(lv_price) = CONV ty_amount( price_per_person( iv_minutes ) * iv_persons ).
|
|
|
|
IF iv_member = abap_true.
|
|
lv_price = lv_price * c_member_factor.
|
|
ENDIF.
|
|
|
|
IF iv_persons >= c_group_size.
|
|
lv_price = lv_price * c_group_factor.
|
|
ENDIF.
|
|
|
|
rv_price = round( val = lv_price dec = 2 ).
|
|
ENDMETHOD.
|
|
|
|
METHOD price_per_person.
|
|
IF iv_minutes < c_long_minutes.
|
|
rv_price = c_short_price.
|
|
ELSE.
|
|
rv_price = c_long_price.
|
|
ENDIF.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|