57 lines
1.6 KiB
ABAP
57 lines
1.6 KiB
ABAP
FUNCTION {{p}}meal_bill
|
|
IMPORTING
|
|
iv_week TYPE string
|
|
EXPORTING
|
|
ev_meals TYPE decfloat34
|
|
ev_pupils TYPE decfloat34
|
|
ev_amount TYPE decfloat34
|
|
ev_discount TYPE decfloat34
|
|
EXCEPTIONS
|
|
invalid_price.
|
|
|
|
TYPES:
|
|
BEGIN OF ty_pupil_sum,
|
|
pupil TYPE string,
|
|
meals TYPE i,
|
|
gross TYPE decfloat34,
|
|
amount TYPE decfloat34,
|
|
END OF ty_pupil_sum.
|
|
|
|
DATA lt_pupil TYPE SORTED TABLE OF ty_pupil_sum WITH UNIQUE KEY pupil.
|
|
|
|
SELECT pupil, price, cancelled
|
|
FROM {{P}}MEALBK
|
|
WHERE week_key = @iv_week
|
|
INTO TABLE @DATA(lt_book).
|
|
|
|
LOOP AT lt_book INTO DATA(ls_book).
|
|
IF ls_book-price < 0.
|
|
RAISE invalid_price.
|
|
ENDIF.
|
|
IF ls_book-cancelled = 'X' OR ls_book-price = 0.
|
|
CONTINUE.
|
|
ENDIF.
|
|
READ TABLE lt_pupil ASSIGNING FIELD-SYMBOL(<ls_pupil>) WITH TABLE KEY pupil = ls_book-pupil.
|
|
IF sy-subrc <> 0.
|
|
INSERT VALUE #( pupil = ls_book-pupil ) INTO TABLE lt_pupil ASSIGNING <ls_pupil>.
|
|
ENDIF.
|
|
<ls_pupil>-meals = <ls_pupil>-meals + 1.
|
|
<ls_pupil>-gross = <ls_pupil>-gross + ls_book-price.
|
|
ENDLOOP.
|
|
|
|
LOOP AT lt_pupil ASSIGNING <ls_pupil>.
|
|
<ls_pupil>-amount = <ls_pupil>-gross.
|
|
IF <ls_pupil>-meals >= 5.
|
|
<ls_pupil>-amount = round( val = <ls_pupil>-gross * 9 / 10
|
|
dec = 2
|
|
mode = cl_abap_math=>round_half_up ).
|
|
ENDIF.
|
|
ev_meals = ev_meals + <ls_pupil>-meals.
|
|
ev_amount = ev_amount + <ls_pupil>-amount.
|
|
ev_discount = ev_discount + <ls_pupil>-gross - <ls_pupil>-amount.
|
|
ENDLOOP.
|
|
|
|
ev_pupils = lines( lt_pupil ).
|
|
|
|
ENDFUNCTION.
|