65 lines
1.7 KiB
ABAP
65 lines
1.7 KiB
ABAP
FUNCTION {{p}}farrier_fee
|
|
IMPORTING
|
|
iv_horses TYPE i
|
|
iv_km TYPE decfloat34
|
|
iv_new_shoes TYPE abap_bool
|
|
iv_contract TYPE abap_bool
|
|
EXPORTING
|
|
ev_fee TYPE decfloat34
|
|
ev_weeks TYPE i
|
|
ev_reject TYPE abap_bool
|
|
EXCEPTIONS
|
|
invalid_horses.
|
|
|
|
* Farrier service - mobile shoeing round
|
|
* Calculation of one visit
|
|
* Last change: 22.09.1996 / W. Klose
|
|
|
|
DATA: lv_horses TYPE i,
|
|
lv_fee TYPE decfloat34,
|
|
lv_travel TYPE decfloat34,
|
|
lv_weeks TYPE i.
|
|
|
|
MOVE iv_horses TO lv_horses.
|
|
|
|
IF lv_horses LT 0.
|
|
RAISE invalid_horses.
|
|
ELSE.
|
|
CLEAR: ev_fee, ev_weeks.
|
|
ev_reject = abap_false.
|
|
IF lv_horses EQ 0.
|
|
ev_reject = abap_true.
|
|
ELSE.
|
|
* shoeing fee: 45.00 per horse, from the fifth horse 40.00
|
|
IF lv_horses LE 4.
|
|
COMPUTE lv_fee = lv_horses * 45.
|
|
ELSE.
|
|
COMPUTE lv_fee = 4 * 45 + ( lv_horses - 4 ) * 40.
|
|
ENDIF.
|
|
* new shoes are charged for every horse
|
|
IF iv_new_shoes EQ abap_true.
|
|
COMPUTE lv_fee = lv_fee + lv_horses * 30.
|
|
ENDIF.
|
|
* travel: 60 cent per kilometre, at least 10.00, rounded up to whole euro
|
|
COMPUTE lv_travel = iv_km * 60 / 100.
|
|
IF lv_travel LT 10.
|
|
lv_travel = 10.
|
|
ENDIF.
|
|
COMPUTE lv_travel = CEIL( lv_travel ).
|
|
COMPUTE lv_fee = lv_fee + lv_travel.
|
|
* contract stables get 12 per cent off the visit
|
|
IF iv_contract EQ abap_true.
|
|
COMPUTE lv_fee = lv_fee * 88 / 100.
|
|
ENDIF.
|
|
* next visit: every six weeks, contract stables every four weeks
|
|
lv_weeks = 6.
|
|
IF iv_contract EQ abap_true.
|
|
lv_weeks = 4.
|
|
ENDIF.
|
|
MOVE lv_fee TO ev_fee.
|
|
ev_weeks = lv_weeks.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
ENDFUNCTION.
|