REPORT zpj_wizard_test.

DATA: g_step_id(20) TYPE c.

****************************************
* screen selection                     *
****************************************
*--- rok - vychozi blok ---*
SELECTION-SCREEN: BEGIN OF BLOCK b0 WITH FRAME TITLE text-000.
PARAMETERS: p_year LIKE mkpf-mjahr OBLIGATORY MODIF ID s0.
SELECTION-SCREEN: END OF BLOCK b0.

* --- mesic v tomto roce ---*
SELECTION-SCREEN: BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
PARAMETERS: p_month TYPE scmamonth OBLIGATORY MODIF ID s1.
SELECTION-SCREEN: END OF BLOCK b1.

* --- mesic v jinem roce ---*
SELECTION-SCREEN: BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_month2 TYPE scmamonth OBLIGATORY MODIF ID s2.
SELECTION-SCREEN: END OF BLOCK b2.

* --- den v tomto mesici ---*
SELECTION-SCREEN: BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_day LIKE scgenappt-week_day OBLIGATORY MODIF ID s3.
SELECTION-SCREEN: END OF BLOCK b3.

* --- den v jinem mesici ---*
SELECTION-SCREEN: BEGIN OF BLOCK b4 WITH FRAME TITLE text-004.
PARAMETERS: p_day2 LIKE scgenappt-week_day OBLIGATORY MODIF ID s4.
SELECTION-SCREEN: END OF BLOCK b4.

SELECTION-SCREEN: PUSHBUTTON /2(12) text-bak USER-COMMAND bak
                  MODIF ID bak.

****************************************
* AT SELECTION SCREEN                  *
****************************************
AT SELECTION-SCREEN.
  CASE sy-ucomm.
    WHEN 'BAK'.
      PERFORM set_previous_step.
  ENDCASE.

****************************************
* AT SELECTION SCREEN                  *
****************************************
AT SELECTION-SCREEN OUTPUT.
  PERFORM handle_sel_screen.

****************************************
* START OF SELECTION                   *
****************************************
START-OF-SELECTION.
  IF g_step_id(2) = 'S3' OR g_step_id(2) = 'S4'. "finalni kroky
    PERFORM display_message.
  ELSE.
    PERFORM choose_step.
  ENDIF.

*---------------------------------------------------------------------*
*       FORM handle_sel_screen                                        *
*---------------------------------------------------------------------*
FORM handle_sel_screen.
* obsluhuji obrazovku pri startu transakce?
* (poznam podle toho, ze dosud nebylo vyplneno povinne pole rok)
  IF p_year IS INITIAL.
    g_step_id = 'S0'.
    SET PARAMETER ID 'STEP_ID' FIELD g_step_id.
  ELSE.
*   ... nebo jiz byl zvolen krok?
    GET PARAMETER ID 'STEP_ID' FIELD g_step_id.
  ENDIF.

  LOOP AT SCREEN.
    IF screen-group1 = g_step_id(2)
     OR ( screen-group1 = 'BAK' AND g_step_id(2) <> 'S0' ).
      screen-active = 1.
      screen-input = 1.
      MODIFY SCREEN.
    ELSEIF g_step_id+2 CS screen-group1.
      screen-active = 1.
      screen-input = 0.
      MODIFY SCREEN.
    ELSE.
      screen-active = 0.
      MODIFY SCREEN.
    ENDIF.
  ENDLOOP.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM set_previous_step                                        *
*---------------------------------------------------------------------*
FORM set_previous_step.
  CHECK g_step_id <> 'S0'.

  g_step_id = g_step_id+2.

  SET PARAMETER ID 'STEP_ID' FIELD g_step_id.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM choose_step                                              *
*---------------------------------------------------------------------*
FORM choose_step.
  DATA: l_step_id(2) TYPE c.

  CASE g_step_id(2).
    WHEN 'S0'.
      IF p_year = sy-datum(4).
        l_step_id = 'S1'.
      ELSE.
        l_step_id = 'S2'.
      ENDIF.
    WHEN 'S1'.
      IF p_month = sy-datum+4(2).
        l_step_id = 'S3'.
      ELSE.
        l_step_id = 'S4'.
      ENDIF.
    WHEN 'S2'.
      IF p_month2 = sy-datum+4(2).
        l_step_id = 'S3'.
      ELSE.
        l_step_id = 'S4'.
      ENDIF.
  ENDCASE.

  CONCATENATE l_step_id g_step_id INTO g_step_id.

  SET PARAMETER ID 'STEP_ID' FIELD g_step_id.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM display_message                                          *
*---------------------------------------------------------------------*
FORM display_message.
  DATA: l_month LIKE p_month,
        l_day LIKE p_day.

  IF g_step_id+2(2) = 'S1'.
    l_month = p_month.
  ELSE.
    l_month = p_month2.
  ENDIF.

  IF g_step_id(2) = 'S3'.
    l_day = p_day.
  ELSE.
    l_day = p_day2.
  ENDIF.

  MESSAGE s000(xt) WITH 'Date:' l_day l_month p_year.
ENDFORM.