REPORT zeta_objednavka_new.

*&---------------------------------------------------------------------*
*& INCLUDE Zhlav reportu s deklarac dat
*&---------------------------------------------------------------------*
INCLUDE zeta_obj_variables.
INCLUDE zeta_obj_bo.
INCLUDE zeta_obj_ai.
INCLUDE zeta_obj_forms.

START-OF-SELECTION.
  IF p_ebeln IS NOT INITIAL.
    gv_tcode = 'W'.  " nhled
    PERFORM inicialization.
    PERFORM read_objednavka_detail.
  ENDIF.

*&---------------------------------------------------------------------*
*&      Form  INIT_9000
*&---------------------------------------------------------------------*
*       inicializace promnnch
*----------------------------------------------------------------------*
FORM inicialization .
  CLEAR: wa_header, wa_condition, itab, wa_itab, gt_output,
         it_zterm, it_werks, it_lgort, it_lifnr, it_empst, it_waeat, it_waein, it_waedt,
         it_upload_data, t_mara, it_celnikurzy, tab_fcode, gv_error.

  REFRESH: itab, gt_output, it_zterm, it_werks, it_lgort, it_lifnr, it_empst, it_waeat, it_waein, it_waedt,
           it_upload_data, t_mara, it_celnikurzy, tab_fcode.


  gv_create_listbox      = 'X'.
  gv_create_listbox_cond = 'X'.
  gv_create_listbox_item = 'X'.
  gv_set_table           = 'X'.

*  wa_header-lgort        = '0001'.

  wa_header-ekorg = '2100'.
  wa_header-bsart = 'NB'.
  wa_header-bstyp = 'F'.

  wa_condition-sazba     = '0.385'.
  wa_condition-zfr_waers = 'CZK'. " defaultn mna dopravy CZK
  wa_condition-zfr_ukurs = 1.

  g_tabstrip-subscreen   = '9011'.
  g_tabstrip-pressed_tab = 'TABSTRIP_FC1'.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_RELEASED_CONTRACT
*&---------------------------------------------------------------------*
*       Vyhledn uvvolnnch kontrakt pro objednvku
*----------------------------------------------------------------------*
FORM get_released_contract USING full_screen.

  CALL FUNCTION 'ZETA_FM_RELEASED_CONTRACT'
    EXPORTING
      full_screen = full_screen
    IMPORTING
      e_next      = gv_next
      e_header    = wa_header
    TABLES
      t_item      = itab.

  PERFORM save_exchange_clo USING 'ZCEL' wa_header-waers.
  CASE wa_header-land1.
    WHEN 'CZ' OR 'SK' OR 'PL' OR 'FR' OR 'DE'.
      wa_condition-zfrp_x = 'X'.
    WHEN OTHERS.
      CLEAR: wa_condition-zfrp_x.
  ENDCASE.

  " pepoet
  LOOP AT itab.
    CALL FUNCTION 'ZETA_FM_CALC_ITEM_OBJEDNAVKA'
      EXPORTING
        is_header    = wa_header
        is_item      = itab
        is_condition = wa_condition
      IMPORTING
        es_item      = itab
        es_condition = wa_condition.

    itab-zclo_orig = itab-zclo.
    MODIFY itab.
  ENDLOOP.



ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  GET_RELEASED_POBJ
*&---------------------------------------------------------------------*
*       Vyhledn uvvolnnch POBJ pro objednvku
*----------------------------------------------------------------------*
FORM get_released_pobj  USING full_screen.

  " z poadavku vybrm artikly dle poboky
  CALL FUNCTION 'ZETA_FM_RELEASED_POBJ'
    EXPORTING
      full_screen = full_screen
      i_werks     = wa_header-werks
    IMPORTING
      e_next      = gv_next
      e_header    = wa_header
    TABLES
      t_item      = itab.

  PERFORM save_exchange_clo USING 'ZCEL' wa_header-waers.
  CASE wa_header-land1.
    WHEN 'CZ' OR 'SK' OR 'PL' OR 'FR' OR 'DE'.
      wa_condition-zfrp_x = 'X'.
    WHEN OTHERS.
      CLEAR: wa_condition-zfrp_x.
  ENDCASE.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  nacti_objednavku
*&---------------------------------------------------------------------*
*       nacteni objednvky
*----------------------------------------------------------------------*
FORM read_objednavka_detail.

  CLEAR: wa_header, wa_condition, itab.
  REFRESH: itab.

  CALL FUNCTION 'ZETA_OBJEDNAVKA_READ'
    EXPORTING
      i_ebeln     = p_ebeln
    IMPORTING
      e_header    = wa_header
      e_condition = wa_condition
      e_text      = text
    TABLES
      t_item      = itab.

  " zmek ve zmn
  IF gv_tcode EQ 'C'.
    CALL FUNCTION 'ENQUEUE_EMEKKOE'
      EXPORTING
        ebeln          = p_ebeln
      EXCEPTIONS
        foreign_lock   = 1
        system_failure = 2
        OTHERS         = 3.
    IF sy-subrc <> 0.
      gv_tcode = 'W'.

      MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
              INTO DATA(mtext)
              WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

      MESSAGE mtext TYPE 'I'.
    ENDIF.
  ENDIF.

  IF wa_header IS NOT INITIAL.
    IF wa_header-statu NE ''.
      gv_tcode = 'W'.
    ENDIF.

    wa_condition-sazba     = '0.385'.
    PERFORM save_exchange_clo USING 'ZCEL' wa_header-waers.
    CALL SCREEN 9000.
  ENDIF.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  zaloz_objednavku
*&---------------------------------------------------------------------*
*       zaloen objednvky
*----------------------------------------------------------------------*
FORM zaloz_objednavku .
  CLEAR: ok_code, sy-ucomm, lv_error.

  " pepoet polokovch dat ped uloenm
  wa_condition-zfr1_mez = wa_condition-zfr1.
  wa_condition-zfr2_mez = wa_condition-zfr2.
  wa_condition-zoc2_mez = wa_condition-zoc2.
  LOOP AT itab.
    PERFORM calc_itab.
    itab-update = 'I'.
    MODIFY itab.
  ENDLOOP.

  PERFORM read_note CHANGING text.

  PERFORM check_lifnr CHANGING lv_error.

  IF lv_error IS INITIAL.
    CALL FUNCTION 'ZETA_OBJEDNAVKA_CREATE'
      EXPORTING
        i_header    = wa_header
        i_condition = wa_condition
        i_text      = text
      IMPORTING
        e_ebeln     = p_ebeln
      TABLES
        t_item      = itab.

    PERFORM update_dostupnost.  " aktualizace dostupnosti pouze v ppad statusu pro prodej a objednvku

    IF p_ebeln IS NOT INITIAL.
      SET PARAMETER ID 'BES' FIELD p_ebeln.
      LEAVE TO TRANSACTION 'ZETA_OBJ_NAHLED' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.
ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  zmen_objednavku
*&---------------------------------------------------------------------*
*       zmna objednvky
*----------------------------------------------------------------------*
FORM zmen_objednavku USING p_delete.
  CLEAR: ok_code, sy-ucomm, lv_error.

  " objednvka ji byla zautovana povoluji pouze zmnu faktury za dorpavu a JSD
  IF wa_header-statu EQ 'Z'.
    DATA: lv_jsd TYPE string.

    CLEAR: lv_jsd.
    CONCATENATE wa_header-jsd1 wa_header-jsd2 wa_header-jsd3 INTO lv_jsd SEPARATED BY ';'.
    PERFORM save_as_text USING: 'F21' wa_header-fakt_dopr,
                                'F22' lv_jsd.

    MESSAGE 'Zmny uloeny' TYPE 'I'.
    LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 102.

    " boejdnvka nezautovana
  ELSE.

    " pepoet polokovch dat ped uloenm
    wa_condition-zfr1_mez = wa_condition-zfr1.
    wa_condition-zfr2_mez = wa_condition-zfr2.
    wa_condition-zoc2_mez = wa_condition-zoc2.
    LOOP AT itab.
      PERFORM calc_itab.
      MODIFY itab.
    ENDLOOP.

    PERFORM read_note CHANGING text.
    PERFORM check_delete USING p_delete CHANGING lv_answer.
    PERFORM get_delete_item.

    PERFORM check_lifnr CHANGING lv_error.

    IF lv_error IS INITIAL.
      IF lv_answer EQ '1'.
        CALL FUNCTION 'ZETA_OBJEDNAVKA_CHANGE'
          EXPORTING
            i_ebeln     = p_ebeln
            i_header    = wa_header
            i_condition = wa_condition
            i_text      = text
            i_delete    = p_delete
          IMPORTING
            e_error     = gv_error
          TABLES
            t_item      = itab.

        PERFORM update_dostupnost.  " aktualizace dostupnosti pouze v ppad statusu pro prodej a objednvku


        " kontorola zda zmeny probehli v poradku jeste
        IF gv_error NE 'X'.
          LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 102.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.


ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  KONTRAKT_SWITCH
*&---------------------------------------------------------------------*
*       Pepnut mezi zmnou a zobrazenm
*----------------------------------------------------------------------*
FORM objednavka_switch .
  " pokud existuje objednavka nepovolovat upravu ????
  CLEAR: ok_code, sy-ucomm.

  SET PARAMETER ID 'BES' FIELD p_ebeln.
  IF gv_tcode EQ 'W'.
    LEAVE TO TRANSACTION 'ZETA_OBJ_ZMENA' AND SKIP FIRST SCREEN.
  ELSE.

    CLEAR: lv_answer.
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        titlebar       = text-tm3
        text_question  = text-tm3
        text_button_1  = 'Ano'(101)
        text_button_2  = 'Ne'(102)
        default_button = '1'
      IMPORTING
        answer         = lv_answer
      EXCEPTIONS
        text_not_found = 1
        OTHERS         = 2.

    IF lv_answer EQ '1'.
      LEAVE TO TRANSACTION 'ZETA_OBJ_NAHLED' AND SKIP FIRST SCREEN.
    ENDIF.
  ENDIF.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  KONTRAKT_SWAP
*&---------------------------------------------------------------------*
*       Pepnut na jin kontrakt
*----------------------------------------------------------------------*
FORM objednavka_swap .
  CLEAR: ok_code, sy-ucomm.
  CALL FUNCTION 'ZETA_FM_SWAP_OBJEDNAVKA'.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  OBJEDNAVKA_PRINT_PREVIEW
*&---------------------------------------------------------------------*
*       TIskov nhled objednvky
*----------------------------------------------------------------------*
FORM objednavka_print_preview .
  CALL FUNCTION 'ZETA_FM_OBJEDNAVKA_PREVIEW'
    EXPORTING
      i_ebeln = p_ebeln.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  OBJEDNAVKA_PRINT_POJ_PREVIEW
*&---------------------------------------------------------------------*
*       Tiskov nhled pojistn
*----------------------------------------------------------------------*
FORM objednavka_print_poj_preview .
  CALL FUNCTION 'ZETA_FM_POJISTNE_VIEW'
    EXPORTING
      i_ebeln = p_ebeln.

ENDFORM.

*&---------------------------------------------------------------------*
*&      Form  EXIT_PROGRAM
*&---------------------------------------------------------------------*
*       Oputn programu
*----------------------------------------------------------------------*
FORM exit_program .
  CLEAR: ok_code, sy-ucomm.

  CLEAR: lv_answer.
  IF gv_tcode NE 'W'.
    CALL FUNCTION 'POPUP_TO_CONFIRM'
      EXPORTING
        titlebar       = text-tm1
        text_question  = text-tm1
        text_button_1  = 'Ano'(101)
        text_button_2  = 'Ne'(102)
        default_button = '1'
      IMPORTING
        answer         = lv_answer
      EXCEPTIONS
        text_not_found = 1
        OTHERS         = 2.

  ELSE.
    lv_answer = '1'.
  ENDIF.

  IF lv_answer = '1'. "odpov Ano

    IF sy-calld EQ 'X'.                    " pokud transakci volm z jinho programu
      LEAVE PROGRAM.

    ELSEIF gv_tcode EQ 'N'.                " vychoz screen pro zalozeni
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 101.

    ELSE.                                  " vychozi screen pro zobrazeni/ zmnu
      LEAVE TO LIST-PROCESSING AND RETURN TO SCREEN 102.
    ENDIF.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FILL_FIELD_CAT
*&---------------------------------------------------------------------*
*       ALV pro kontroln pehled
*&---------------------------------------------------------------------*
FORM alv_fill_field_cat .
  CLEAR: ws_field, ws_fieldcat.
  IF g_tabstrip-pressed_tab EQ c_tabstrip-tab3.
    PERFORM alv_append_wsfield USING:
***   col_pos fieldname        coltext  inttype decimals decimals_o outputlen fix emphasize
      1    'MATNR'          text-p01 'C'     2        2          10       'X'  'C150'  '',
      2    'TXZ01'          text-p02 'C'     2        2           8        ''  'C150'  '',
      3    'PBXX_SUM'       text-p20 'I'     2        2          20        ''  'C150'  'X',
      4    'ZOC1'           text-p11 'I'     2        2          20        ''  'C150'  'X',
      5    'ZOC2'           text-p15 'I'     2        2          20        ''  'C150'  'X',
      6    'ZFR1_CZ'        text-p09 'I'     2        2          20        ''  'C150'  'X',
      7    'ZFR2_CZ'        text-p08 'I'     2        2          20        ''  'C150'  'X',
      8    'ZFEE_CZ'        text-p14 'I'     2        2          20        ''  'C150'  'X',
      9    'ZATE_CZ'        text-p13 'I'     2        2          20        ''  'C150'  'X',
     10    'ZSGD_CZ'        text-p12 'I'     2        2          40        ''  'C150'  'X',
     12    'ZSC'            text-p03 'I'     2        2          10        ''  'C150'  '',
     13    'ZSC_SUM'        text-p04 'I'     2        2          30        ''  'C150'  'X'.

    IF wa_header-refer EQ 'K'.
      PERFORM alv_append_wsfield USING:
       "11    'WKUKL'          text-p16 'I'     2        2          20        ''  'C150'  'A',
       11    'ZRKK'           text-p51 'I'     2        2          20        ''  'C150'  ''.
    ENDIF.

  ELSE.
    PERFORM alv_append_wsfield USING:
      1    'MATNR'          text-p01 'C'     2        2          10       'X'  'C150'  '',
      2    'TXZ01'          text-p02 'C'     2        2           8        ''  'C150'  '',
      3    'MENGE'          text-p07 'I'     0        0          20        ''  'C150'  'X',
      4    'NETPR'          text_label 'I'   2        2          20        ''  'C150'  '',
      5    'NETPR_SUM'      text_label 'I'   2        2          20        ''  'C150'  'X',
      6    'ZSC'            text-p03 'I'     2        2          10        ''  'C150'  '',
      7    'ZSC_SUM'        text-p04 'I'     2        2          30        ''  'C150'  'X',

     10    'ZREC'           text-p31 'I'     2        2          30        ''  'C150'  '',
     11    'ZREC_HOD'       text-p71 'I'     2        2          30        ''  'C150'  '',
     12    'ZFIN'           text-p32 'I'     2        2          30        ''  'C150'  '',
     13    'ZFIN_HOD'       text-p72 'I'     2        2          30        ''  'C150'  '',
     14    'ZOIP'           text-p33 'I'     2        2          30        ''  'C150'  '',
     15    'ZOIP_HOD'       text-p73 'I'     2        2          30        ''  'C150'  '',
     16    'ZSER'           text-p34 'I'     2        2          30        ''  'C150'  '',
     17    'ZSER_HOD'       text-p74 'I'     2        2          30        ''  'C150'  '',
     18    'ZVNC_P'         text-p55 'I'     2        2          30        ''  'C150'  '',
     19    'ZVNC'           text-p17 'I'     2        2          30        ''  'C150'  '',

     20    'ZEXV_P'         text-p56 'I'     2        2          30        ''  'C150'  '',
     21    'ZEXV'           text-p47 'I'     2        2          30        ''  'C150'  '',

     22    'ZHR1'           text-p35 'I'     2        2          30        ''  'C150'  '',
     23    'ZHR1_HOD'       text-p75 'I'     2        2          30        ''  'C150'  '',
     24    'ZHR2'           text-p36 'I'     2        2          30        ''  'C150'  '',
     25    'ZHR2_HOD'       text-p76 'I'     2        2          30        ''  'C150'  '',
     26    'ZHR3'           text-p37 'I'     2        2          30        ''  'C150'  '',
     27    'ZHR3_HOD'       text-p77 'I'     2        2          30        ''  'C150'  '',
     28    'ZSKL'           text-p38 'I'     2        2          30        ''  'C150'  '',
     29    'ZMKT'           text-p40 'I'     2        2          30        ''  'C150'  '',
     30    'ZMKT_HOD'       text-p80 'I'     2        2          30        ''  'C150'  '',

     31    'ZONC_P'         text-p57 'I'     2        2          30        ''  'C150'  '',
     32    'ZONC'           text-p18 'I'     2        2          30        ''  'C150'  '',
     33    'ZEXF_P'         text-p59 'I'     2        2          30        ''  'C150'  '',
     34    'ZEXF'           text-p60 'I'     2        2          30        ''  'C150'  '',
     35    'ZEXP_P'         text-p58 'I'     2        2          30        ''  'C150'  '',
     36    'ZEXP'           text-p44 'I'     2        2          30        ''  'C150'  ''.

    IF wa_header-refer EQ 'K'.
      PERFORM alv_append_wsfield USING:
        8    'ZSC_MK'         text-p48 'I'     2        2          20        ''  'C150'  '',
        9    'ZSC_PODIL'      text-p49 'I'     2        2          20        ''  'C150'  ''.
    ENDIF.

*      5    'ZFR_SUM'        text-p52 'I'     2        2          20        ''  'C150'  'X',
*      6    'WAERS'          text-p53 'C'     2        2          20        ''  'C150'  '',
  ENDIF.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM append_wsfield                                           *
*---------------------------------------------------------------------*
*       ALV pro kontroln pehled
*&---------------------------------------------------------------------*
FORM alv_append_wsfield USING col_pos fieldname coltext inttype decimals decimals_o outputlen fix emphasize do_sum.
  ws_field-col_pos    = col_pos.
  ws_field-fieldname  = fieldname.
  ws_field-seltext    = coltext.
  ws_field-coltext    = coltext.
  ws_field-inttype    = inttype.
  ws_field-decimals   = decimals.
  ws_field-decimals_o = decimals_o.
  ws_field-outputlen  = outputlen.
  ws_field-emphasize  = emphasize.
  ws_field-fix_column = fix.
  ws_field-do_sum     = do_sum.
  APPEND ws_field TO ws_fieldcat .
ENDFORM.                    "APPEND_WSFIELD
*&---------------------------------------------------------------------*
*&      Form  LOAD_DATA_INTO_GRID
*&---------------------------------------------------------------------*
*       ALV pro kontroln pehled
*&---------------------------------------------------------------------*
FORM alv_load_data_into_grid .

  is_layout-cwidth_opt = 'X'.
  is_layout-sel_mode   = 'A'.
  is_layout-zebra      = 'X'.
  gs_layout-report     = sy-repid.

  CALL METHOD go_grid->set_table_for_first_display
    EXPORTING
      is_layout       = is_layout
      is_variant      = gs_layout
      i_save          = 'A'
    CHANGING
      it_outtab       = gt_output
      it_fieldcatalog = ws_fieldcat.
ENDFORM.                    "LOAD_DATA_INTO_GRID
*&---------------------------------------------------------------------*
*&      Form  CALL_ZETA_PREDPRIJEM
*&---------------------------------------------------------------------*
*       Vyvoln transakce pedpjem
*----------------------------------------------------------------------*
FORM call_zeta_predprijem .
  DATA: lt_ekpo   LIKE ekpo OCCURS 0 WITH HEADER LINE.


  DATA: gv_message TYPE char100,
        gv_vbeln   LIKE lips-vbeln,
        gv_tknum   LIKE vttk-tknum,
        gv_eindt   LIKE eket-eindt,
        lv_update  TYPE numc1,
        lv_mess    TYPE char100.

  REFRESH: lt_ekpo.
  LOOP AT itab WHERE ebeln EQ p_ebeln.
    MOVE-CORRESPONDING: itab TO lt_ekpo.
    APPEND lt_ekpo.
  ENDLOOP.

  " vytvoen pedpjmu
  CLEAR: gv_message, gv_vbeln, gv_tknum.
  CALL FUNCTION 'ZETA_FM_PREDPRIJEM'
    EXPORTING
      ebeln   = p_ebeln
    IMPORTING
      message = gv_message
      vbeln   = gv_vbeln
      tknum   = gv_tknum
      eindt   = gv_eindt
    TABLES
      ekpo    = lt_ekpo.

  IF gv_tknum IS NOT INITIAL.
    " aktualizace cen
    CLEAR: lv_update.
    CALL FUNCTION 'ZETA_FM_UPDATE_PRICE'
      EXPORTING
        ebeln  = p_ebeln
        eindt  = gv_eindt
      IMPORTING
        update = lv_update.

    IF lv_update EQ '4'.
      CLEAR: lv_mess.
      CONCATENATE 'Aktualizace cen pp' p_ebeln 'se nezdaila poute transakci ME23N' INTO lv_mess SEPARATED BY space.
      MESSAGE lv_mess TYPE 'I'.
    ENDIF.

    SET PARAMETER ID 'VL' FIELD gv_vbeln.
    CALL TRANSACTION 'VL33N' AND SKIP FIRST SCREEN.

    LEAVE TO TRANSACTION 'ZETA_OBJ_ZMENA'.
  ENDIF.
ENDFORM.
