FUNCTION zeta_fm_predprijem.
*"----------------------------------------------------------------------
*"*"Lokln rozhran:
*"  IMPORTING
*"     REFERENCE(EBELN) TYPE  EBELN
*"  EXPORTING
*"     REFERENCE(MESSAGE) TYPE  CHAR100
*"     REFERENCE(VBELN) LIKE  LIPS-VBELN
*"     REFERENCE(TKNUM) LIKE  VTTK-TKNUM
*"     REFERENCE(EINDT) LIKE  EKET-EINDT
*"  TABLES
*"      EKPO STRUCTURE  EKPO
*"----------------------------------------------------------------------
  DATA: t_dlgn      LIKE komdlgn  OCCURS 100 WITH HEADER LINE,
        t_vbfs      LIKE vbfs     OCCURS 100 WITH HEADER LINE,
        t_vbls      LIKE vbls     OCCURS 100 WITH HEADER LINE,
        t_vsek      LIKE verko    OCCURS 100 WITH HEADER LINE,
        t_vsep      LIKE verpo    OCCURS 100 WITH HEADER LINE,
        itab_vttk   LIKE vttkvb   OCCURS 0   WITH HEADER LINE,
        lt_rsparams LIKE rsparams OCCURS 0   WITH HEADER LINE,
        itab_vtrlk  LIKE vtrlk    OCCURS 0   WITH HEADER LINE,
        itab_vtrlp  LIKE vtrlp    OCCURS 0   WITH HEADER LINE,
        itab_vttp   LIKE vttpvb   OCCURS 0   WITH HEADER LINE,
        i_yvttk     LIKE vttkvb   OCCURS 0   WITH HEADER LINE,
        i_yvttp     LIKE vttpvb   OCCURS 0   WITH HEADER LINE,
        itab_xvbpa  LIKE vbpavb   OCCURS 0   WITH HEADER LINE,
        itab_yvbpa  LIKE vbpavb   OCCURS 0   WITH HEADER LINE.

  DATA: s_vbsk  LIKE vbsk,
        ls_tvsa LIKE tvsa,
        t_husn  TYPE vsep_t_husernr,
        t_sern  TYPE v50s_sern_t,
        wa_ekpo LIKE ekpo.

  DATA: lv_error   TYPE bool,
        lv_message TYPE char50,
        lv_werks   LIKE ekpo-werks,
        lv_tplst   LIKE vttk-tplst,
        lv_shtyp   LIKE vttk-shtyp VALUE '0010',
        lv_tknum   LIKE vttk-tknum VALUE '$0001',
        lv_numdel  TYPE i,
        lv_dispo   TYPE char1,
        lv_tabix   LIKE sy-tabix,
        nrnr       LIKE inri-nrrangenr.

  CLEAR: lv_error, lv_message, lv_werks, lv_tplst, lv_numdel, lv_tabix, wa_prijem,
         lv_dispo, nrnr, s_vbsk, ls_tvsa, t_husn, t_sern, wa_ekpo.
  REFRESH: t_dlgn, t_vbfs, t_vbls, t_vsek, t_vsep, itab_vttk,
           lt_rsparams, itab_vtrlk, itab_vtrlp, itab_vttp, itab_xvbpa, itab_yvbpa.

  " kontrola zda beru poloky pouze z jedn objednvky
  LOOP AT ekpo.
    IF ekpo-ebeln NE ebeln.
      lv_error = 'X'.
      EXIT.
    ENDIF.
  ENDLOOP.

  IF lv_error NE 'X'.
    "dotahnusi hlavikov daje objednvky
    SELECT SINGLE * FROM ekko INTO ls_ekko
      WHERE ebeln EQ ebeln.

    CLEAR wa_prijem.
*    SELECT SINGLE datum uzeit zzdopr kontejner FROM zeta_navozy INTO ( wa_prijem-dpreg, wa_prijem-upreg, wa_prijem-signi, wa_prijem-tpbez )
*      WHERE ebeln EQ ebeln.

    SELECT SINGLE datum uzeit zzdopr kontejner spz FROM zeta_navozy INTO ( wa_prijem-dptbg, wa_prijem-uptbg, wa_prijem-signi, wa_prijem-tpbez, wa_prijem-exti2 )
      WHERE ebeln EQ ebeln.

    IF wa_prijem-dptbg IS INITIAL.
      wa_prijem-dptbg = sy-datum + 1.
    ENDIF.

    SELECT SINGLE lifnr FROM ekko INTO wa_prijem-lifnr_orig
      WHERE ebeln EQ ebeln.

    " modularn okno s obsluhou vstupnch pol
    CALL SCREEN 6666 STARTING AT 80 3 ENDING AT 150 13.

    IF next EQ 'X'.
      " po vyplnn vstupnch pol nastavuji struktury pro zaloen
      s_vbsk-mandt = sy-mandt.
      s_vbsk-ernam = sy-uname.
      s_vbsk-erdat = sy-datum.
      s_vbsk-uzeit = sy-uzeit.
      s_vbsk-smart = 'L'.

      SELECT SINGLE * FROM tvsa INTO ls_tvsa
         WHERE smart = s_vbsk-smart.

      IF ls_tvsa IS INITIAL.
        message = 'Nepodailo se vytvoit pijmanou dodvka z dvodu intern chyby.'.
      ENDIF.

      nrnr = ls_tvsa-numki.
      CALL FUNCTION 'NUMBER_GET_NEXT'
        EXPORTING
          nr_range_nr = nrnr
          object      = 'RV_SAMMG'
        IMPORTING
          number      = s_vbsk-sammg
        EXCEPTIONS
          OTHERS      = 1.
      IF sy-subrc <> 0.
        message = 'Nepodailo se vytvoit pijmanou dodvka z dvodu intern chyby.'.
      ENDIF.

      " naplnn struktury s prijimanyma dodavkama
      LOOP AT ekpo INTO wa_ekpo.
        SELECT SINGLE * FROM ekpo INTO wa_ekpo
          WHERE ebeln EQ wa_ekpo-ebeln AND
                ebelp EQ wa_ekpo-ebelp.

        PERFORM set_t_dlgn TABLES t_dlgn USING wa_ekpo ls_ekko.
        lv_werks = wa_ekpo-werks.
      ENDLOOP.

      SET UPDATE TASK LOCAL.
      SORT t_sern.

      CALL FUNCTION 'GN_DELIVERY_CREATE'
        EXPORTING
          vbsk_i        = s_vbsk
          no_commit     = ' '
          if_synchron   = ' '
          if_no_deque   = 'X'
          if_check_uom  = 'B'
        IMPORTING
          vbsk_e        = s_vbsk
        TABLES
          xkomdlgn      = t_dlgn
          xvbfs         = t_vbfs
          xvbls         = t_vbls
          xverko        = t_vsek
          xverpo        = t_vsep
          it_gn_husernr = t_husn
          it_gn_sernr   = t_sern
        EXCEPTIONS
          error_message = 1
          OTHERS        = 2.

      IF sy-subrc NE 0 AND t_vbls[] IS NOT INITIAL.
        message = 'Nepodailo se vytvoit pijmanou dodvka z dvodu intern chyby.'.
      ELSE.
        vbeln = t_vbls-vbeln_lif.
        COMMIT WORK AND WAIT.

        "pro jistotu si dodvku zkusme najt
        CLEAR: ls_likp.
        SELECT SINGLE vbeln FROM likp INTO CORRESPONDING FIELDS OF ls_likp
          WHERE vbeln = t_vbls-vbeln_lif.

        IF ls_likp IS INITIAL.
          lv_message = 'Pijmn dodvka neexistuje'.
        ELSE.
          "kontrola, e dodvka nen ji v peprav
          CLEAR: ls_vttp.
          SELECT SINGLE tknum vbeln FROM vttp INTO CORRESPONDING FIELDS OF ls_vttp
            WHERE vbeln = t_vbls-vbeln_lif.

          IF ls_vttp IS NOT INITIAL.
            lv_message = 'Pijmn dodvka je ji v peprav'.
          ELSE.

            IF lv_werks EQ '2130'.
              lv_tplst = '1031'.
            ELSEIF lv_werks EQ '2110'.
              lv_tplst = '1010'.
            ELSE.
              lv_message = 'Pro danou poboku nen nastaveno msto pepravn dispozice'.
            ENDIF.

            "vytvoen pepravy (tato fnc neukld,
            "pouze se vytv obraz pepravy v bufferu a pln se potebn tabulky!!!)
            CALL FUNCTION 'SD_SHIPMENT_INITIALIZE'
              EXPORTING
                i_vttk_tplst              = lv_tplst
                i_vttk_shtyp              = lv_shtyp
                i_vttk_tknum              = lv_tknum
              IMPORTING
                e_vttkvb                  = itab_vttk
              EXCEPTIONS
                wrong_shipment_type       = 1
                wrong_planning_point      = 2
                external_number_invalid   = 3
                shipment_blocked          = 4
                duplicate_shipment_number = 5
                OTHERS                    = 6.

            IF sy-subrc <> 0.
              MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                     WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
            ENDIF.

            LOOP AT t_vbls.
              CLEAR lt_rsparams.
              lt_rsparams-selname = 'S_LIAVN'.
              lt_rsparams-kind    = ' '.
              lt_rsparams-sign    = 'I'.
              lt_rsparams-option  = 'EQ'.
              lt_rsparams-low     = t_vbls-vbeln_lif.
              APPEND lt_rsparams.

              CLEAR lt_rsparams.
              lt_rsparams-selname = 'S_EBELN'.
              lt_rsparams-kind    = ' '.
              lt_rsparams-sign    = 'I'.
              lt_rsparams-option  = 'EQ'.
              SELECT vgbel FROM lips INTO lt_rsparams-low  WHERE vbeln = t_vbls-vbeln_lif.
                APPEND lt_rsparams.
              ENDSELECT.
            ENDLOOP.

            SORT lt_rsparams BY selname low.
            DELETE ADJACENT DUPLICATES FROM lt_rsparams COMPARING ALL FIELDS.

            CALL FUNCTION 'SD_DELIVERY_FOR_TRANSPORT'
              EXPORTING
*               selection_set            = 'HPPR'
*               STANDARD_SEL_SET         = ' '
                option_selection_screen  = ' '
*               OPTION_SEARCH_STRATEGY   = 'I'
                option_dialog            = ' '
                trans_planning_point     = lv_tplst
                shipment_number          = lv_tknum
                shipment_processing_type = '2'
*               ENQUEUE_SCOPE_PARAMETER  = '2'
                leg_indicator            = itab_vttk-laufk
                run_with_select_options  = 'X'
              IMPORTING
                number_of_deliveries     = lv_numdel
*               ERROR_OCCURED            =
                e_dispo                  = lv_dispo
              TABLES
                delivery_header          = itab_vtrlk
                delivery_item            = itab_vtrlp
                shipment_item            = itab_vttp
                select_options           = lt_rsparams
              CHANGING
                shipment_header          = itab_vttk
              EXCEPTIONS
                empty_shipment           = 1
                wrong_call               = 2
                OTHERS                   = 3.

            IF itab_vttp[] IS INITIAL.
              " chyba
            ELSE.
              SELECT SINGLE ddtext FROM dd07t INTO wa_prijem-signi
                WHERE domname    EQ 'ZETA_DDOPR' AND
                      ddlanguage EQ 'CS'      AND
                      domvalue_l EQ wa_prijem-signi.

              itab_vttk-signi = wa_prijem-signi.
              itab_vttk-exti1 = wa_prijem-exti1.
              itab_vttk-exti2 = wa_prijem-exti2.
              itab_vttk-tpbez = wa_prijem-tpbez.
              itab_vttk-dptbg = wa_prijem-dptbg.
              IF wa_prijem-dptbg IS NOT INITIAL.
                itab_vttk-uptbg = wa_prijem-uptbg.
              ENDIF.
              APPEND itab_vttk.

              "Je nutn doplnit itab_vttp
              LOOP AT itab_vttp.
                lv_tabix = sy-tabix.
                CLEAR: ls_likp, ls_lips.
                SELECT SINGLE * FROM lips INTO ls_lips WHERE vbeln = itab_vttp-vbeln.
                SELECT SINGLE * FROM likp INTO ls_likp WHERE vbeln = itab_vttp-vbeln.
                itab_vttp-tknum = itab_vttk-tknum.
                itab_vttp-tpnum = lv_tabix.
                itab_vttp-tprfo = lv_tabix.
                itab_vttp-updkz = 'I'.
                itab_vttp-vstel = ls_likp-vstel.
                itab_vttp-lgort = ls_lips-lgort.
                MODIFY itab_vttp.
              ENDLOOP.

              " pepravce v partnersk roli
              itab_xvbpa-mandt = sy-mandt.
              itab_xvbpa-vbeln = lv_tknum.
              itab_xvbpa-parvw = 'TF'.
              itab_xvbpa-lifnr = wa_prijem-lifnr.

              SELECT SINGLE adrnr land1 name1 spras telfx stcd1 stcd2 FROM lfa1 INTO CORRESPONDING FIELDS OF itab_xvbpa
                WHERE lifnr EQ wa_prijem-lifnr.

              itab_xvbpa-adrda = 'D'.
              itab_xvbpa-updkz = 'I'.
              itab_xvbpa-nrart = 'LI'.
              itab_xvbpa-fehgr = '08'.
              APPEND itab_xvbpa.

              " dodavatel
              " pepravce v partnersk roli
              itab_xvbpa-mandt = sy-mandt.
              itab_xvbpa-vbeln = lv_tknum.
              itab_xvbpa-parvw = 'LF'.
              itab_xvbpa-lifnr = wa_prijem-lifnr_orig.

              SELECT SINGLE adrnr land1 name1 spras telfx stcd1 stcd2 FROM lfa1 INTO CORRESPONDING FIELDS OF itab_xvbpa
                WHERE lifnr EQ wa_prijem-lifnr_orig.

              itab_xvbpa-adrda = 'D'.
              itab_xvbpa-updkz = 'I'.
              itab_xvbpa-nrart = 'LI'.
              itab_xvbpa-fehgr = '08'.
              APPEND itab_xvbpa.

              "Mme ve, ukldme
              CALL FUNCTION 'SD_SHIPMENTS_SAVE'
                EXPORTING
                  i_transaktionstyp    = 'V'
                TABLES
                  i_xvttk              = itab_vttk
                  i_yvttk              = i_yvttk
                  i_xvttp              = itab_vttp
                  i_yvttp              = i_yvttp
                  i_vtrlk              = itab_vtrlk
                  i_vtrlp              = itab_vtrlp
                  i_xvbpa              = itab_xvbpa
*                 i_yvbpa              = itab_yvbpa
                EXCEPTIONS
                  no_change            = 1
                  delivery_split_error = 2
                  OTHERS               = 3.
              COMMIT WORK AND WAIT.

              IF sy-subrc NE 0.
                lv_message = 'Pepravu se nepodailo zaloit'.
              ELSE.
                "peprava je uloena OK, vracm jej slo
                READ TABLE itab_vttk INDEX 1.
                tknum =  itab_vttk-tknum.
                eindt = wa_prijem-dptbg. " kvuli aktualizaci data dodvky na objednvce
                CONCATENATE 'Byla zaloena peprava' tknum " 's pijmanou dodvkou' vbeln
                INTO lv_message SEPARATED BY space.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
  ELSE.
    lv_message = 'V pedpjmu jsou rzn objednvky'.
  ENDIF.

  " aktualizace cen
  IF lv_message IS NOT INITIAL.
    message = lv_message.
    MESSAGE lv_message TYPE 'I'.
  ENDIF.
ENDFUNCTION.
