Files
abap-llm/tasks_gen/train/G1150/seed/farrier_fee.func.abap
2026-10-05 18:02:52 +02:00

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.