*&---------------------------------------------------------------------*
*& Report ZSCH_013_SPEISEKARTE_DYNPRO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zsch_013_speisekarte_dynpro.

TABLES:zsch_013_ts_speise.

TYPES:gtt_speisen TYPE STANDARD TABLE OF zsch_013_ts_speise WITH NON-UNIQUE DEFAULT KEY..

DATA: gt_speisen TYPE gtt_speisen,
      gv_idx     TYPE i VALUE 1,
      ok_code    TYPE sy-ucomm.

" Globale Variable fr das Sortierfeld
DATA gv_sort_by TYPE c LENGTH 10 VALUE 'MEALNUMBER'.


PARAMETERS pa_carr TYPE s_carr_id DEFAULT 'LH'     OBLIGATORY.
PARAMETERS pa_lang TYPE spras     DEFAULT sy-langu OBLIGATORY.
PARAMETERS:pa_meal TYPE zsch_013_ts_speise-mealnumber.
**********************************************************************
START-OF-SELECTION.
  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
    INTO CORRESPONDING FIELDS OF TABLE @gt_speisen.

  IF gt_speisen IS INITIAL.
    MESSAGE 'Heute keine Speisekarte - kommen Sie morgen wieder.' TYPE 'S'.
    RETURN.
  ENDIF.
**********************************************************************
END-OF-SELECTION.
  CALL SCREEN 100.
**********************************************************************
MODULE status_0100 OUTPUT.
  DATA(lv_nr_lines) = lines( gt_speisen ).
  SET PF-STATUS 'STATUS_0100'.
  SET TITLEBAR  'TITLE_0100' WITH pa_carr gv_idx lv_nr_lines.
ENDMODULE.
**********************************************************************
MODULE fill_card OUTPUT.
  READ TABLE gt_speisen INTO zsch_013_ts_speise INDEX gv_idx.
ENDMODULE.
**********************************************************************
MODULE user_command_0100 INPUT.
  DATA(lv_ok) = ok_code.
  CLEAR ok_code.
  CASE lv_ok.
    WHEN 'BACK' OR 'EXIT' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'NEXT'.
      IF gv_idx < lines( gt_speisen ).
        gv_idx = gv_idx + 1.
      ELSE.
        MESSAGE 'Letzte Mahlzeit erreicht.' TYPE 'S'.
      ENDIF.
    WHEN 'PREV'.
      IF gv_idx > 1.
        gv_idx = gv_idx - 1.
      ELSE.
        MESSAGE 'Erste Mahlzeit - weiter zurck geht es nicht.' TYPE 'S'.
      ENDIF.
    WHEN 'EDIT'.
      CALL SCREEN 200 STARTING AT 10 5.
    WHEN 'SORT'.
      IF gv_sort_by = 'MEALNUMBER'.
        SORT gt_speisen BY mealtype.
        gv_sort_by = 'MEALTYPE'.
      ELSE.
        SORT gt_speisen BY mealnumber.
        gv_sort_by = 'MEALNUMBER'.
      ENDIF.
      gv_idx = 1.
      MESSAGE |Sortiert nach { gv_sort_by }.| TYPE 'S'.
    WHEN 'JUMP'.
      IF pa_meal IS INITIAL.
        MESSAGE 'Bitte Mahlzeitennummer eingeben.' TYPE 'S'.
      ELSE.
        READ TABLE gt_speisen WITH KEY mealnumber = pa_meal
                              TRANSPORTING NO FIELDS.
        IF sy-subrc = 0.
          gv_idx = sy-tabix.
        ELSE.
          MESSAGE |Mahlzeit { pa_meal } nicht gefunden.| TYPE 'S'.
        ENDIF.
      ENDIF.

  ENDCASE.
ENDMODULE.
**********************************************************************
MODULE status_0200 OUTPUT.
  SET PF-STATUS 'STATUS_0200'.
  SET TITLEBAR  'TITLE_0200' WITH zsch_013_ts_speise-carrid zsch_013_ts_speise-mealnumber.
ENDMODULE.
**********************************************************************
MODULE check_meal_chain INPUT.
  IF zsch_013_ts_speise-mealtype IS NOT INITIAL
     AND zsch_013_ts_speise-mealtype <> 'VE'
     AND zsch_013_ts_speise-mealtype <> 'FI'
     AND zsch_013_ts_speise-mealtype <> 'FL'.
    MESSAGE |Mealtype { zsch_013_ts_speise-mealtype } unbekannt - nur VE, FI, FL.|
            TYPE 'E'.
  ENDIF.
ENDMODULE.
**********************************************************************
MODULE user_command_0200 INPUT.
  lv_ok = ok_code.
  CLEAR ok_code.
  CASE lv_ok.
    WHEN 'BACK' OR 'CANCEL'.
      LEAVE TO SCREEN 0.
    WHEN 'SAVE'.
      MESSAGE 'Demo: Speichern ist hier nicht aktiv.' TYPE 'S'.
  ENDCASE.
ENDMODULE.