
*&---------------------------------------------------------------------*
*& Report ZSCH_012_SPEISEKARTE
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsch_012_speisekarte.

INCLUDE <icon>.
* Es folgt der Typen- und Datenblock
TYPES: BEGIN OF gst_speise,
carrid TYPE s_carr_id,
mealnumber TYPE s_mealnum,
mealtype TYPE s_mealtype,
text TYPE s_mealtext,
END OF gst_speise.
DATA: gs_smeal TYPE smeal,
gt_speisen TYPE STANDARD TABLE OF gst_speise WITH DEFAULT
KEY.
* --- Das schön gestaltete Selektionsbild ---
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-b01.
PARAMETERS pa_carr TYPE s_carr_id DEFAULT 'LH' OBLIGATORY.
PARAMETERS pa_lang TYPE spras DEFAULT sy-langu OBLIGATORY.
SELECT-OPTIONS so_meal FOR gs_smeal-mealnumber.
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-b02.
PARAMETERS:
pa_alle RADIOBUTTON GROUP typ DEFAULT 'X' USER-COMMAND flip,
pa_vegi RADIOBUTTON GROUP typ,
pa_fisch RADIOBUTTON GROUP typ,
pa_meat RADIOBUTTON GROUP typ.
PARAMETERS pa_icon AS CHECKBOX DEFAULT abap_true.
SELECTION-SCREEN END OF BLOCK b2.
* --- Pruefung auf Existenz der Fluggesellschaft ---
AT SELECTION-SCREEN ON pa_carr.
SELECT SINGLE carrid
FROM scarr
INTO @DATA(lv_found)
WHERE carrid = @pa_carr.
IF sy-subrc <> 0.
MESSAGE |Fluggesellschaft { pa_carr } gibt es nicht.| TYPE 'E'.
ENDIF.
* --- Umgestalten ---
AT SELECTION-SCREEN OUTPUT.
* Wenn ein konkreter Gerichtstyp aktiv ist, so_meal sperren.
LOOP AT SCREEN INTO DATA(ls_screen).
IF ls_screen-name CP 'SO_MEAL*'.
IF pa_alle = abap_true.
ls_screen-input = 1.
ELSE.
CLEAR: so_meal, so_meal[].
ls_screen-input = 0.
ENDIF.
MODIFY SCREEN FROM ls_screen.
ENDIF.
ENDLOOP.
* --- Liste vorbereiten ---
TOP-OF-PAGE.
WRITE: / 'Speisekarte –', pa_carr,
/ sy-uline.
WRITE: / 'Nummer',
10 'Typ',
14 'Bezeichnung'.
WRITE / sy-uline.
* --- Hauptverarbeitung ---
START-OF-SELECTION.

DATA lv_typ TYPE s_mealtype.

IF pa_vegi = abap_true. lv_typ = 'VE'.
ELSEIF pa_fisch = abap_true. lv_typ = 'FI'.
ELSEIF pa_meat = abap_true. lv_typ = 'FL'.
ENDIF.

SELECT m~carrid,
m~mealnumber,
m~mealtype,
t~text
FROM smeal AS m
LEFT OUTER JOIN smealt AS t
ON m~carrid = t~carrid
AND m~mealnumber = t~mealnumber
AND t~sprache = @pa_lang
WHERE m~carrid = @pa_carr
AND m~mealnumber IN @so_meal
AND ( @lv_typ IS INITIAL OR m~mealtype = @lv_typ )
INTO TABLE @gt_speisen.

IF sy-subrc <> 0.
MESSAGE 'Der Koch hat heute frei – keine Gerichte gefunden.' TYPE 'S'.
RETURN.
ENDIF.

LOOP AT gt_speisen INTO DATA(gs_speise).
WRITE: / gs_speise-mealnumber,
gs_speise-mealtype,
gs_speise-text.
IF pa_icon = abap_true.
WRITE SWITCH #( gs_speise-mealtype
WHEN 'VE' THEN icon_selection
WHEN 'FI' THEN icon_transfer_structure
WHEN 'FL' THEN icon_gis_pan
ELSE space ) AS ICON.
ENDIF.
ENDLOOP.

END-OF-SELECTION.
IF lines( gt_speisen ) > 0.
WRITE: / |Gesamt: { lines( gt_speisen ) } Gerichte.|.
ENDIF.