Thursday, 19 March 2015

                                      ZMM_GP_PRINT

*&---------------------------------------------------------------------*
*& Report  ZMM_GP_PRINT
*&
*&---------------------------------------------------------------------*
*& Description: This is used to print gate pass
*& Author     : Hemalatha
*& Package    : ZRGPNRGP
*& Version    : V0
*&---------------------------------------------------------------------*

REPORT  zmm_gp_print MESSAGE-ID zmm_gp_msg.

INCLUDE zmm_gp_print_top.      "DECLARATION"

INCLUDE zmm_gp_print_s01.      "SELECTION SCREEN"

INCLUDE zmm_gp_print_m01.      "FETCHING DATA"


INCLUDE zmm_gp_print_f01.      "FORMS"

***************************************************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GP_PRINT_TOP
*&---------------------------------------------------------------------*

TYPES : BEGIN OF gty_zmm_gprh,                         "Structure for Gate Pass Request header details
        gpr_no         TYPE  zzm_gpr_no,               "GPR Number
        zyear          TYPE  zzm_year,                 "Year of Creation
        created_by     TYPE  zzm_usr_crt_by,           "Created By (user fills it)
        created_on     TYPE  zzm_crt_dt,               "Creation Date
        created_ph     TYPE  zzm_crt_ph,               "Phone number of the person
        released_by    TYPE  zzm_released_by,          "Released By (HOD) - SAP Login ID
        END OF gty_zmm_gprh,

        BEGIN OF gty_lfa1,                             "Structure for Vendor Details
        lifnr          TYPE  lifnr,                    "Account Number of Vendor or Creditor
        land1          TYPE  land1,                    "Country Key
        name1          TYPE  name1_gp,                 "Name1
        ort01          TYPE  ort01_gp,                 "City
        pstlz          TYPE  pstlz,                    "Postal Code
        regio          TYPE  t005u-bland,              "Region (State, Province, County)
        stras          TYPE  stras_gp,                 "House number and street
        stcd1          TYPE  stcd1,                    "Tax Number 1
        stcd2          TYPE  stcd2,                    "Tax Number 2
        telf1          TYPE  telf1,                    "First telephone number
        telfx          TYPE  telfx,                    "Fax Number
        stceg          TYPE  stceg,                    "VAT Registration Number
        END OF gty_lfa1,

        BEGIN OF gty_join_head_ot,                     "Structure for header,item and other details
        gp_no          TYPE  zzm_gp_no,                "Gate Pass Number
        zyear          TYPE  zzm_year,                 "Year of Creation
        ref_id         TYPE  zzm_ref_doc,              "Reference Document Number (either MBLNR or GPR)
        ref_type       TYPE  zzm_ref_type,             "Reference Type
        sy_created_by  TYPE  zzm_crt_by,               "Created By (SAP ID)
        created_on     TYPE  zzm_crt_dt,               "Creation Date
        deleted        TYPE  zzm_del_flag,             "Deleted Flag
        gp_used        TYPE  zzm_gp_used,              "Indicates if GP has been used in a RGP
        matnr_rec_by   TYPE  zzm_matnr_rec_by,         "Material Received By
        reason         TYPE  zzm_reason,               "reason code
        text           TYPE  zzm_text,                 "Text
        purchaser      TYPE  zzm_purchaser,            "Purchaser
        gate_entry_no  TYPE  zzm_transno,              "Gate Entry Number
        gate_entry_year TYPE zzm_gate_year,            "Creation year
        gpr_no         TYPE  zzm_gpr_no,               "GPR Number
        returnable     TYPE  zzm_returnable,           "Returnable
        exp_ret_date   TYPE  zzm_ret_date,             "Expected Return Date
        werks          TYPE  werks_d,                  "Plant
        lifnr          TYPE  lifnr,                    "Account Number of Vendor or Creditor
        name1          TYPE  zzm_name1,                "Vendor Name
        stras          TYPE  stras,                    "Address
        ort01          TYPE  ort01_gp,                 "City
        pstlz          TYPE  pstlz,                    "Postal Code
        region         TYPE  regio,                    "Region (State, Province, County)
        land1          TYPE  land1,                    "Country Key
        tel_number     TYPE  ad_tlnmbr1,               "First telephone no.: dialling code+number
        tel_extn       TYPE  ad_tlxtns1,               "First Telephone No.: Extension
        fax_number     TYPE  ad_fxnmbr1,               "First fax no.: dialling code+number
        fax_extn       TYPE  ad_fxxtns1,               "First fax no.: extension
        v_cst_no       TYPE  j_1icstno,                "Central Sales Tax Number
        v_gst_no       TYPE  j_1icstno,                "Central Sales Tax Number
        v_vat          TYPE  stceg,                    "VAT Registration Number
        lrno           TYPE  zzm_lr_no,                "Lorry Receipt Number
        lr_date        TYPE  zzm_lr_date,              "LR Date
        trans          TYPE  zzm_transporter,          "Transporter Name
        mat_rec        TYPE  zzm_mat_rec,              "Material Received By
        freight        TYPE  zzm_freight,              "Freight payer
        insu_payer     TYPE  zzm_insu,                 "Insurance payer
        octr_payer     TYPE  zzm_octr,                 "Octrio payer
        veh_det        TYPE  zzm_veh_det,              "Vehicle Details
        no_cases       TYPE  zzm_no_cases,             "No of Cases
        apprx_weight   TYPE  zzm_apprx_weight,         "Approximate Weight
        posnr          TYPE  zzm_posnr,                "Item number of the SD document
        budat          TYPE  budat,                    "Posting Date in the Document
        lgort          TYPE  lgort_d,                  "Storage Location
        wo_ref         TYPE  zzm_wo_ref,               "Work Order Reference
        wo_ref_dt      TYPE  zzm_wo_ref_dt,            "WO Reference Date
        eicn_no        TYPE  zzm_eicn,                 "Excise invoice/challan No
        eicn_date      TYPE  zzm_eicn_date,            "Excise invoice/challan date
        matnr          TYPE  matnr,                    "Material Number
        quan_iss       TYPE  zzm_quan_iss,             "Quantity Issued (Weight)
        wt_unit        TYPE  meins,                    "Base Unit of Measure
        apprx_value    TYPE  zzm_apprx_value,          "Approximate Value
        END OF gty_join_head_ot,

        BEGIN OF gty_t001w,                            "Structure for getting plant description
        werks          TYPE  werks_d,                  "Plant
        name1          TYPE  name1,                    "Name
        END OF gty_t001w,

        BEGIN OF gty_t001l,                            "Structure for getting storage location description
        lgort          TYPE  lgort_d,                  "Storage Location
        lgobe          TYPE  lgobe,                    "Description of Storage Location
        END OF gty_t001l,

        BEGIN OF gty_makt,                             "Structure for getting material description
        matnr          TYPE  matnr,                    "Material Number
        maktx          TYPE  maktx,                    "Material Description (Short Text)
        END OF gty_makt,

        BEGIN OF gty_zmm_ge,                           "Structure for getting Gate Entry Date
        gate_trans_no  TYPE  zzm_transno,              "Gate Entry Number
        zyear          TYPE  zzm_gate_year,            "Creation year
        entry_crdt     TYPE  zzm_ge_date,              "Gate Entry Date
        END OF gty_zmm_ge.


DATA :  gi_zmm_gprh TYPE TABLE OF gty_zmm_gprh,        "Internal Table for GPR Header data
        gs_zmm_gprh TYPE gty_zmm_gprh,                 "Work Area for GPR Header data

        gs_lfa1     TYPE gty_lfa1,                     "Work Area for Vendor details

        gi_zmm_head_ot TYPE TABLE OF gty_join_head_ot, "Internal table for header,item and other data
        li_zmm_head_ot TYPE TABLE OF gty_join_head_ot, "Temp Internal table for header,item and other data
        gs_zmm_head_ot TYPE gty_join_head_ot,          "Internal table for header,item and other data

        gi_output   TYPE TABLE OF zmm_gp_output,
        gs_output   TYPE zmm_gp_output,

        gi_fieldcat TYPE slis_t_fieldcat_alv ,         "Internal Table for Fieldcatalog
        gs_fieldcat TYPE slis_fieldcat_alv ,           "Work Area For Fieldcatalog

        gi_final    TYPE zmm_gp_ttype,                 "Internal Table for table fields in form
        gs_final    LIKE LINE OF gi_final,             "Work Area for table fields in form
        s_struct    TYPE zmm_gp_struct,                "Structure for static fields in form

        gs_makt     TYPE gty_makt,                     "Work Area for material description
        gi_makt     TYPE TABLE OF gty_makt,            "Internal Table for material Description

        gs_t001w    TYPE gty_t001w,                    "Work Area for plant details
        gi_t001w    TYPE TABLE OF gty_t001w,           "Internal table for plant details

        gs_t001l    TYPE gty_t001l,                    "Work Area for Storage location details
        gi_t001l    TYPE TABLE OF gty_t001l,           "Internal Table for Storage location details

        gs_zmm_ge   TYPE gty_zmm_ge,                   "Work Area for Gate Entry details
        gi_zmm_ge   TYPE TABLE OF gty_zmm_ge,          "Internal table for Gate entry details

        gv_user_data TYPE soudatai1,                  "Declaration for reading User Details
        gv_fullname(40) TYPE c,
        i_user      TYPE soudnamei1,

        gs_tline    TYPE tline,                       "Declaration for reading long text
        i_tline     LIKE TABLE OF gs_tline,
        e_header    TYPE thead,
        BEGIN OF wa_tab,
        tdline      LIKE tline-tdline,
        END OF wa_tab,
        td_tab      LIKE STANDARD TABLE OF wa_tab,

        str          TYPE string,                     "Variable to hold longext
        var          TYPE string,

        wa_funcnm       TYPE funcname,                "Declaration for calling Adobe Form
        fp_outputparams TYPE sfpoutputparams,
        fp_docparams    TYPE sfpdocparams,
        fp_formoutput   TYPE fpformoutput,
        output_file     TYPE string,
        data_tab        TYPE TABLE OF x255,
        filename        TYPE string,
        path            TYPE string,
        fullpath        TYPE string,
        wt_file         TYPE filetable,
        default_extension TYPE string VALUE 'PDF',

        lv_filelength TYPE i,
        lt_rawtab     TYPE TABLE OF char255,

        wa_data_tab  LIKE LINE OF lt_rawtab,
        wa_data_tab1 TYPE xstring,
        lo_fp        TYPE REF TO if_fp VALUE IS INITIAL,
        lo_fpex      TYPE REF TO cx_fp_runtime VALUE IS INITIAL,
        lo_pdfobj    TYPE REF TO if_fp_pdf_object VALUE IS INITIAL,
        pdf_data     TYPE xstring,

        xml_data     TYPE xstring,
        lt_xml_data  TYPE STANDARD TABLE OF xstring,
        lv_xml_data_string TYPE string,
        t_return     TYPE STANDARD TABLE OF bapiret2,
        t_per_info   TYPE STANDARD TABLE OF smum_xmltb,
        tag_open     TYPE tdsfflag,

        v_gp_no      TYPE zmm_gph-gp_no,               "Gate Pass Number
        v_zyear      TYPE zzm_year,                    "Year of Creation
        v_create     TYPE zzm_crt_dt,                  "Creation Date
        v_werks      TYPE werks_d,                     "Plant
        v_lgort      TYPE t001l-lgort,                 "Storage Location
        v_name       TYPE string,                      "Vendor Name
        v_name1      TYPE string,                      "Vendor Name
        v_name2      TYPE string,                      "Vendor Name
        v_stras      TYPE string,                      "Address
        v_stras1     TYPE string,                      "Street1
        v_stras2     TYPE string,                      "Street2
        v_stras3     TYPE string,                      "Street3
        v_stras4     TYPE string,                      "Street4
        v_stras5     TYPE string,                      "Street5
        v_ort01      TYPE string,                      "City
        v_pstlz      TYPE string,                      "Postal Code
        v_ortpstl    TYPE string,                      "Reference Variable to hold City and Postal Code
        v_region     TYPE string,                      "Region
        v_land1      TYPE string,                      "Country Key
        v_regland1   TYPE string,                      "Reference Variable to hold Region and Country

        gv_name      TYPE t005t-landx,                 "To hold Country Name
        gv_region_name    TYPE t005u-bezei,            "To hold Region Description

        gv_land1     TYPE string,                      "Country
        gv_region    TYPE string,                      "Region
        gv_ort01     TYPE string,                      "City
        gv_pstlz     TYPE string,                      "Postal Code
        gv_ortpst    TYPE string,                      "City&Postal Code
        gv_name1     TYPE string,                      "Country Name
        gv_stras     TYPE string,                      "Street
        v_line1      TYPE string,                      "Address line1
        v_line2      TYPE string,                      "Address line2
        v_line3      TYPE string,                      "Address line3

        gv_apprx_value TYPE zzm_apprx_value,          "For holding Sum of Apprx_Value

        dd07v_tab_a  TYPE TABLE OF dd07v,             "View on fixed values and domain texts
        dd_tab       TYPE TABLE OF dd07v,
        ds_tab       TYPE dd07v.

CONSTANTS: c_gi_output      TYPE slis_tabname      VALUE 'GI_OUTPUT',             "Out put internal table name
           c_rgp_print_top  TYPE trdir-name        VALUE 'ZMM_GP_PRINT_TOP',      "Top Include name
           c_struc_name     TYPE dd02l-tabname     VALUE 'ZMM_GP_OUTPUT',         "Output structure name
           c_sel(7)         TYPE c                 VALUE 'GV_SEL',                "Radio button field
           c_pf_status      TYPE slis_formname     VALUE 'PF_STATUS',             "Status Bar name
           c_inter          TYPE slis_formname     VALUE 'INTER',                 "Interactive Subroutine Name
           c_print(7)       TYPE c                 VALUE 'PRINT',                 "Print Button Name
           c_menu(12)       TYPE c                VALUE 'ZMM_GP_MENU',           "GUI status name
           c_back(5)        TYPE c                 VALUE 'BACK',                  "Back button name
           c_z_gate         like e_header-tdobject VALUE 'Z_GATE',                "Object name for long text
           c_znrg           LIKE e_header-tdid     VALUE 'ZNRG',                  "Object id for long text
           c_tilt           TYPE c                 VALUE '~',                     "Symbol for splitting
           c_sep            TYPE c                 VALUE '-',                     "Symbol for concatination
           c_coma           TYPE c                 VALUE ',',                     "Symbol for concatination
           c_x              TYPE c                 VALUE 'X',                     "
           c_adobe          TYPE fpname            VALUE 'ZMM_GP_ADOBE',          "Adobe Form name
           c_ref_typ(3)     TYPE c                 VALUE 'MDN',                   "Refernce type
           c_s              TYPE c                 VALUE 'S',                     "Message type for success
           c_e              TYPE c                 VALUE 'E',                     "Message type for Error
           c_10             TYPE c                 VALUE '/',                     "Symbol for concatination
           c_accely         TYPE c LENGTH 10       VALUE '0000000001',            "Accely Vendor
           c_frieght        TYPE dd01l-domname     VALUE 'YFREIGHT',              "Freight payer
           c_insu           TYPE dd01l-domname     VALUE 'YINSU',                 "Insurance payer
           c_octr           TYPE dd01l-domname     VALUE 'Y0CTR'.                 "Octrio payer


FIELD-SYMBOLS: <fs_gi_output> like gi_output,               "Field Symbol for output internal table
               <fs_gs_output> LIKE gs_output,               "Field Symbol for output workarea
               <fs_table>     LIKE gi_fieldcat,             "Field Symbol for fieldcatalog internal table
               <fs>           LIKE gs_fieldcat.             "Field Symbol for fieldcatalog workarea
**********************************************************************************************************************

*&---------------------------------------------------------------------*
*&  Include           ZMM_GP_PRINT_S01
*&---------------------------------------------------------------------*

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-a00.
SELECT-OPTIONS:s_gp_no FOR  v_gp_no ,
               s_zyear FOR v_zyear NO INTERVALS OBLIGATORY,
               s_create FOR v_create,
               s_werks FOR v_werks,
               s_lgort FOR v_lgort.
SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN.                    "Validating Gate Pass No,Year and Creation Date
  SELECT gp_no FROM zmm_gph INTO v_gp_no UP TO 1 ROWS WHERE gp_no IN s_gp_no
                                                        AND zyear IN s_zyear
                                                        AND created_on IN s_create.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e100 DISPLAY LIKE c_s.
  ENDIF.


AT SELECTION-SCREEN ON s_werks.         "Validating Plant
  SELECT werks FROM t001w INTO v_werks UP TO 1 ROWS WHERE werks IN s_werks.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e103 DISPLAY LIKE c_s.
  ENDIF.

AT SELECTION-SCREEN ON s_lgort.         "Validating Storage Location
  SELECT lgort FROM t001l INTO v_lgort UP TO 1 ROWS WHERE lgort IN s_lgort.
  ENDSELECT.
  IF sy-subrc <> 0.
    MESSAGE e104 DISPLAY LIKE c_s.
  ENDIF.
************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GP_PRINT_M01
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM zmm_get_data_f01.             "Fetching data
PERFORM zmm_combine_data_f02.     "Moving data into a final internal table
PERFORM zmm_display_data_f03.        "Displaying the data


********************************************************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZMM_GP_PRINT_F01
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  zmm_get_data_f01
*&---------------------------------------------------------------------*
*       fetching data
*----------------------------------------------------------------------*

FORM zmm_get_data_f01 .

  SELECT   a~gp_no
           a~zyear
           a~ref_id
           a~ref_type
           a~sy_created_by
           a~created_on
           a~deleted
           a~gp_used
           a~matnr_rec_by
           a~reason
           a~text
           a~purchaser
           a~gate_entry_no
           a~gate_entry_year
           b~gpr_no
           b~returnable
           b~exp_ret_date
           b~werks
           b~lifnr
           b~name1
           b~stras
           b~ort01
           b~pstlz
           b~region
           b~land1
           b~tel_number
           b~tel_extn
           b~fax_number
           b~fax_extn
           b~v_cst_no
           b~v_gst_no
           b~v_vat
           b~lrno
           b~lr_date
           b~trans
           b~mat_rec
           b~freight
           b~insu_payer
           b~octr_payer
           b~veh_det
           b~no_cases
           b~apprx_weight
           c~posnr
           c~budat
           c~lgort
           c~wo_ref
           c~wo_ref_dt
           c~eicn_no
           c~eicn_date
           c~matnr
           c~quan_iss
           c~wt_unit
           c~apprx_value

           INTO TABLE gi_zmm_head_ot
           FROM zmm_gph AS a
           INNER JOIN zmm_gp_ot_det AS b
           ON b~gpr_no = a~gp_no
           AND b~zyear = a~zyear
           INNER JOIN zmm_gp_it_det AS c
           ON c~gpr_no = b~gpr_no
           AND c~zyear = b~zyear
                         WHERE a~gp_no IN s_gp_no
                         AND a~zyear IN s_zyear
                         AND a~created_on IN s_create
                         AND b~werks IN s_werks
                         AND c~lgort IN s_lgort.

  IF sy-subrc <> 0.
    MESSAGE s105 DISPLAY LIKE c_e.
    LEAVE LIST-PROCESSING.
  ENDIF.

  IF gi_zmm_head_ot IS NOT INITIAL.
    SORT gi_zmm_head_ot BY gp_no.
    SELECT gpr_no
           zyear
           created_by
           created_on
           created_ph
           released_by
           FROM zmm_gprh INTO TABLE gi_zmm_gprh
                            FOR ALL ENTRIES IN gi_zmm_head_ot
                            WHERE gpr_no = gi_zmm_head_ot-ref_id
                            AND zyear    = gi_zmm_head_ot-zyear.

    SELECT  gate_trans_no zyear entry_crdt FROM zmm_ge INTO TABLE gi_zmm_ge
            FOR ALL ENTRIES IN gi_zmm_head_ot
            WHERE gate_trans_no = gi_zmm_head_ot-gate_entry_no
             AND  zyear         = gi_zmm_head_ot-gate_entry_year.

  ENDIF.

  IF gi_zmm_head_ot IS NOT INITIAL.

    li_zmm_head_ot = gi_zmm_head_ot.
    SORT li_zmm_head_ot BY matnr.
    DELETE ADJACENT DUPLICATES FROM li_zmm_head_ot COMPARING matnr.
    SELECT matnr maktx FROM makt INTO TABLE gi_makt
           FOR ALL ENTRIES IN li_zmm_head_ot
           WHERE matnr = li_zmm_head_ot-matnr
             AND spras = sy-langu.
    REFRESH li_zmm_head_ot.

    SELECT lgort lgobe FROM t001l INTO TABLE gi_t001l.

    SELECT werks name1 FROM t001w INTO TABLE gi_t001w.


  ENDIF.


ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form zmm_combine_data_f02
*&---------------------------------------------------------------------*
*       Combine data
*----------------------------------------------------------------------*
FORM zmm_combine_data_f02.

  SORT gi_t001l BY lgort.
  SORT gi_t001w BY werks.
  LOOP AT gi_zmm_head_ot INTO gs_zmm_head_ot WHERE deleted NE c_x.
    gs_output-gp_no            = gs_zmm_head_ot-gp_no.
    gs_output-created_on       = gs_zmm_head_ot-created_on.
    gs_output-created_by       = gs_zmm_head_ot-sy_created_by.
    gs_output-ref_type         = gs_zmm_head_ot-ref_type.
    gs_output-ref_id           = gs_zmm_head_ot-ref_id.
    gs_output-gp_used          = gs_zmm_head_ot-gp_used.
    gs_output-matnr_rec_by     = gs_zmm_head_ot-matnr_rec_by.
    gs_output-reason           = gs_zmm_head_ot-text.
    gs_output-purchaser        = gs_zmm_head_ot-purchaser.
    gs_output-gate_entry_no    = gs_zmm_head_ot-gate_entry_no.
    gs_output-gate_entry_year  = gs_zmm_head_ot-gate_entry_year.
    gs_output-lgort            = gs_zmm_head_ot-lgort.
    READ TABLE gi_t001l INTO gs_t001l WITH KEY lgort = gs_zmm_head_ot-lgort BINARY SEARCH.
    IF sy-subrc = 0.
      gs_output-lgobe          = gs_t001l-lgobe.
    ENDIF.
    gs_output-returnable       = gs_zmm_head_ot-returnable.
    gs_output-werks            = gs_zmm_head_ot-werks.
    READ TABLE gi_t001w INTO gs_t001w WITH KEY werks = gs_zmm_head_ot-werks BINARY SEARCH.
    IF sy-subrc = 0.
      gs_output-werks_desc     = gs_t001w-name1.
    ENDIF.
    gs_output-gv_sel           = icon_wd_radio_button_empty.
    APPEND gs_output TO gi_output.

    CLEAR : gs_output,gs_zmm_head_ot, gs_zmm_gprh,gs_t001l,gs_t001w.
  ENDLOOP.

ENDFORM.                    " COMBINE_DATA

*&---------------------------------------------------------------------*
*&      Form zmm_display_data_f03
*&---------------------------------------------------------------------*
*       Display data in ALV Grid
*----------------------------------------------------------------------*
FORM zmm_display_data_f03 .
  DELETE ADJACENT DUPLICATES FROM gi_output COMPARING gp_no.
  CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
    EXPORTING
      i_program_name         = sy-repid
      i_internal_tabname     = c_gi_output
      i_structure_name       = c_struc_name
      i_inclname             = c_rgp_print_top
      i_bypassing_buffer     = c_x
    CHANGING
      ct_fieldcat            = gi_fieldcat
    EXCEPTIONS
      inconsistent_interface = 1
      program_error          = 2
      OTHERS                 = 3.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.


  ASSIGN gi_fieldcat TO <fs_table>.
  ASSIGN gs_fieldcat TO <fs>.

  SORT <fs_table> BY fieldname.
  READ TABLE <fs_table> ASSIGNING <fs> WITH KEY fieldname = c_sel BINARY SEARCH.
  IF sy-subrc = 0.
    <fs>-hotspot   = c_x.
    <fs>-icon      = c_x.
  ENDIF.
  READ TABLE <fs_table> ASSIGNING <fs> WITH KEY fieldname = c_ref_typ BINARY SEARCH.
  if sy-subrc = 0.
  <fs>-outputlen = '4'.
  ENDIF.
  SORT gi_output BY gp_no.

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program       = sy-repid
      i_callback_pf_status_set = c_pf_status
      i_callback_user_command  = c_inter
      it_fieldcat              = gi_fieldcat
    TABLES
      t_outtab                 = gi_output
    EXCEPTIONS
      program_error            = 1
      OTHERS                   = 2.

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

*&---------------------------------------------------------------------*
*&      Form  inter
*&---------------------------------------------------------------------*
*      user interaction on output
*----------------------------------------------------------------------*
*      -->UCOMM      Function code that PAI triggered
*      -->SELFIELD   Information cursor position ALV
*----------------------------------------------------------------------*
FORM inter USING ucomm TYPE sy-ucomm
selfield TYPE slis_selfield.

  IF sy-ucomm = c_print.
    EXIT.
  ENDIF.

  CASE selfield-fieldname.
    WHEN c_sel.

      ASSIGN: gi_output TO <fs_gi_output>,
              gs_output TO <fs_gs_output>.

      SORT <fs_gi_output> BY gv_sel gp_no.
      READ TABLE <fs_gi_output> ASSIGNING <fs_gs_output> WITH KEY gv_sel = icon_radiobutton BINARY SEARCH.
      IF sy-subrc = 0.
        <fs_gs_output>-gv_sel = icon_wd_radio_button_empty.

        SORT <fs_gi_output> BY gp_no.
        READ TABLE <fs_gi_output> ASSIGNING <fs_gs_output> INDEX selfield-tabindex.
        IF sy-subrc = 0.
          <fs_gs_output>-gv_sel = icon_radiobutton.
        ENDIF.
      ELSE.

        READ TABLE <fs_gi_output> ASSIGNING <fs_gs_output> INDEX selfield-tabindex.
        IF sy-subrc = 0.
          <fs_gs_output>-gv_sel = icon_radiobutton.
        ENDIF.
      ENDIF.
  ENDCASE.

  selfield-refresh = c_x.


ENDFORM.                    "user_command


*&---------------------------------------------------------------------*
*&      Form  PF_STATUS
*&---------------------------------------------------------------------*
*       Buttons on STATUS BAR
*----------------------------------------------------------------------*
*      -->UT_EXTAB   Excluding Table
*----------------------------------------------------------------------*
FORM pf_status USING ut_extab TYPE slis_t_extab.            "#EC CALLED
  SET PF-STATUS c_menu  .
  CASE sy-ucomm.
    WHEN c_back.
      LEAVE TO SCREEN 0.
    WHEN c_print.
      CLEAR:s_struct,gs_output,gs_zmm_head_ot,gs_zmm_ge,gs_zmm_gprh.
      PERFORM zmm_print_headdet_f08.

  ENDCASE.
ENDFORM.                    "PF_STATUS

*&---------------------------------------------------------------------*
*&      Form  zmm_sub_f04
*&---------------------------------------------------------------------*
*       Moving data to final form table
*----------------------------------------------------------------------*
*      -->P_1315                  Item
*      -->P_GS_ZMM_GPIT_MATNR     Material
*      -->P_GS_ZMM_GPIT_WT_UNIT   Base Unit Of Measure
*      -->P_GS_ZMM_GPIT_QUAN_ISS  Quantity
*      -->P_GS_ZMM_GPH_REF_ID     Reference Id
*      -->P_GS_ZMM_GPIT_WO_REF    Work Order Reference
*      -->P_GS_ZMM_GPIT_EICN_NO   Excise invoice/challan No
*----------------------------------------------------------------------*
FORM zmm_sub_f04  USING    value(p_1315)
                    p_gs_zmm_head_ot_matnr
                    p_gs_zmm_head_ot_wt_unit
                    p_gs_zmm_head_ot_quan_iss
                    p_gs_zmm_head_ot_ref_id
                    p_gs_zmm_head_ot_wo_ref
                    p_gs_zmm_head_ot_eicn_no.

  gs_final-item_no         =  p_1315.
  gs_final-material        =  p_gs_zmm_head_ot_matnr.
  gs_final-units           =  p_gs_zmm_head_ot_wt_unit.
  gs_final-quantity        =  p_gs_zmm_head_ot_quan_iss.
  IF gs_zmm_head_ot-ref_type   = c_ref_typ.
    IF p_gs_zmm_head_ot_ref_id IS NOT INITIAL.
      WRITE p_gs_zmm_head_ot_ref_id TO gs_final-material_doc.
    ENDIF.
  ENDIF.
  IF p_gs_zmm_head_ot_wo_ref IS NOT INITIAL.
    WRITE p_gs_zmm_head_ot_wo_ref TO gs_final-wo_ref.
  ENDIF.
  IF p_gs_zmm_head_ot_eicn_no IS NOT INITIAL.
    WRITE p_gs_zmm_head_ot_eicn_no TO gs_final-exc_inv_challan.
  ENDIF.
  APPEND gs_final TO gi_final.
  CLEAR gs_final.

ENDFORM.                    " SUB2
*&---------------------------------------------------------------------*
*&      Form  ZMM_SUB1_F05
*&---------------------------------------------------------------------*
*       To get discription from domain level
*----------------------------------------------------------------------*
*      -->P_DOMAIN  Domain name
*      <--P_TAB     View on fixed values and domain texts
*----------------------------------------------------------------------*
FORM zmm_sub1_f05  USING    p_domain LIKE dd01l-domname
                            p_dom
                   CHANGING p_tab TYPE dd07v.



  CALL FUNCTION 'DD_DOMA_GET'
 EXPORTING
   domain_name         = p_domain
  TABLES
    dd07v_tab_a         = dd07v_tab_a
    dd07v_tab_n         = dd_tab
 EXCEPTIONS
   ILLEGAL_VALUE       = 1
   OP_FAILURE          = 2
   OTHERS              = 3.

  IF sy-subrc <> 0.

  ENDIF.

  READ TABLE dd_tab INTO p_tab WITH KEY domvalue_l = p_dom.

ENDFORM.                    " ZMM_SUB1_F05
*&---------------------------------------------------------------------*
*&      Form  ZMM_PRINT_ACCELYDET_F06
*&---------------------------------------------------------------------*
*       To get the vendor details
*----------------------------------------------------------------------*
FORM zmm_print_accelydet_f06.

  SELECT SINGLE lifnr          "This is for Accely Vendor
                 land1
                 name1
                 ort01
                 pstlz
                 regio
                 stras
                 stcd1
                 stcd2
                 telf1
                 telfx  INTO gs_lfa1 FROM lfa1 WHERE lifnr = c_accely.

  IF sy-subrc = 0.
    CALL FUNCTION 'HRWPC_RFC_BLAND_TEXT_GET'
      EXPORTING
        land       = gs_lfa1-land1   " eg: IN
        bland      = gs_lfa1-regio  " eq: 06
        langu      = sy-langu
      IMPORTING
        bland_text = gv_region_name.
    IF sy-subrc = 0.
      gv_region       = gv_region_name.
    ENDIF.
    CALL FUNCTION 'DR_GET_COUNTRY_NAME'
      EXPORTING
        country  = gs_lfa1-land1  " Country key
        language = sy-langu
      IMPORTING
        name     = gv_name.
    IF sy-subrc = 0.
      gv_land1        = gv_name.
    ENDIF.

    gv_ort01        = gs_lfa1-ort01.
    gv_pstlz        = gs_lfa1-pstlz.

    CONCATENATE gv_ort01 gv_pstlz INTO gv_ortpst SEPARATED BY c_sep.

    gv_name1        = gs_lfa1-name1.
    CONCATENATE gv_name1 gv_ort01 INTO v_line1 SEPARATED BY c_coma.

    CONCATENATE gv_land1 gv_region INTO v_line3 SEPARATED BY c_coma.

    gv_stras        = gs_lfa1-stras.
    CONCATENATE gv_stras gv_ortpst INTO v_line2 SEPARATED BY c_coma.

    s_struct-address_line1      = v_line1.
    s_struct-address_line2      = v_line2.
    s_struct-address_line3      = v_line3.
    s_struct-tel_no             = gs_lfa1-telf1.
    s_struct-fax_no             = gs_lfa1-telfx.
    s_struct-cst_no             = gs_lfa1-stcd1.
    s_struct-lst_no             = gs_lfa1-stcd2.
    s_struct-vat_no             = gs_lfa1-stceg.
  ENDIF.
  CLEAR:v_line2,v_line3,v_line1,gv_ortpst,gv_stras, gv_ortpst,
         gv_land1 ,gv_region,gv_name1 ,gv_ort01,gv_ort01 ,gv_pstlz,
         gv_name,gv_region_name,gs_lfa1.
ENDFORM.                    " ZMM_PRINT_ACCELYDET_F06
*&---------------------------------------------------------------------*
*&      Form  ZMM_PRINT_ITEMDAT_F07
*&---------------------------------------------------------------------*
*       To maintain Item level data in internal table
*----------------------------------------------------------------------*
FORM zmm_print_itemdat_f07 .

  REFRESH gi_final[].
  SORT gi_makt BY matnr.
  SORT gi_zmm_head_ot BY posnr.
  LOOP AT gi_zmm_head_ot INTO gs_zmm_head_ot WHERE gpr_no = gs_output-gp_no.
    gv_apprx_value = gv_apprx_value + gs_zmm_head_ot-apprx_value.
    READ TABLE gi_makt INTO gs_makt WITH KEY matnr = gs_zmm_head_ot-matnr BINARY SEARCH.
    PERFORM zmm_sub_f04 USING space gs_zmm_head_ot-matnr gs_zmm_head_ot-wt_unit gs_zmm_head_ot-quan_iss
                     gs_zmm_head_ot-ref_id gs_zmm_head_ot-wo_ref gs_zmm_head_ot-eicn_no.
    PERFORM zmm_sub_f04 USING gs_zmm_head_ot-posnr gs_makt-maktx space space gs_zmm_head_ot-budat gs_zmm_head_ot-wo_ref_dt
                       gs_zmm_head_ot-eicn_date.
  ENDLOOP.
  s_struct-approx_value = gv_apprx_value.
  CLEAR gv_apprx_value.
ENDFORM.                    " ZMM_PRINT_ITEMDAT_F07
*&---------------------------------------------------------------------*
*&      Form  ZMM_PRINT_HEADDET_F08
*&---------------------------------------------------------------------*
*       To Maintain Header level data.
*----------------------------------------------------------------------*
FORM zmm_print_headdet_f08 .

  SORT gi_output BY gv_sel.
  READ TABLE gi_output INTO gs_output WITH KEY gv_sel = icon_radiobutton BINARY SEARCH.

  IF sy-subrc = 0.
    PERFORM zmm_header_data_f10.
    PERFORM zmm_longtext_f11.
    PERFORM zmm_main_head_f15.
    PERFORM zmm_print_accelydet_f06.
    PERFORM zmm_vendor_det_f12.
    PERFORM zmm_transport_det_f13.
    PERFORM zmm_get_uname_f14.
    PERFORM zmm_print_itemdat_f07.
    PERFORM zmm_call_fun_f09.
  ELSE.
    MESSAGE i106 DISPLAY LIKE c_s.
  ENDIF.
ENDFORM.                    " ZMM_PRINT_HEADDET_F08
*&---------------------------------------------------------------------*
*&      Form  ZMM_CALL_FUN_F09
*&---------------------------------------------------------------------*
*       For calling Adobe Form
*----------------------------------------------------------------------*
FORM zmm_call_fun_f09 .
  CALL FUNCTION 'FP_FUNCTION_MODULE_NAME'
    EXPORTING
      i_name     = c_adobe
    IMPORTING
      e_funcname = wa_funcnm.

  fp_outputparams-reqnew = c_x.
  CALL FUNCTION 'FP_JOB_OPEN'
    CHANGING
      ie_outputparams = fp_outputparams
    EXCEPTIONS
      cancel          = 1
      usage_error     = 2
      system_error    = 3
      internal_error  = 4
      OTHERS          = 5.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  fp_docparams-langu    = sy-langu.
  fp_docparams-fillable = c_x.
  fp_docparams-dynamic  = c_x.

  CALL FUNCTION wa_funcnm
    EXPORTING
      /1bcdwb/docparams  = fp_docparams
      struct             = s_struct
      it_final           = gi_final
    IMPORTING
      /1bcdwb/formoutput = fp_formoutput
    EXCEPTIONS
      usage_error        = 1
      system_error       = 2
      internal_error     = 3
      OTHERS             = 4.

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

  CALL FUNCTION 'FP_JOB_CLOSE'
    EXCEPTIONS
      usage_error    = 1
      system_error   = 2
      internal_error = 3
      OTHERS         = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
       WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
ENDFORM.                    " ZMM_CALL_FUN_F09
*&---------------------------------------------------------------------*
*&      Form  ZMM_HEADER_DATA_F10
*&---------------------------------------------------------------------*
*       Maintaining Header data
*----------------------------------------------------------------------*
FORM zmm_header_data_f10 .
  SORT gi_zmm_head_ot BY gp_no.
  READ TABLE gi_zmm_head_ot INTO gs_zmm_head_ot WITH KEY gp_no = gs_output-gp_no BINARY SEARCH.
  IF sy-subrc = 0.
    s_struct-gp_no      = gs_zmm_head_ot-gp_no.
    s_struct-ref_type   = gs_zmm_head_ot-ref_type.
    IF gs_zmm_head_ot-created_on IS NOT INITIAL.
      WRITE gs_zmm_head_ot-created_on TO s_struct-gp_date.
    ENDIF.
    s_struct-gate_pass_created_by = gs_zmm_head_ot-sy_created_by.
    s_struct-ge_no      = gs_zmm_head_ot-gate_entry_no.
  ENDIF.

  SORT gi_zmm_ge BY gate_trans_no.
  READ TABLE gi_zmm_ge INTO gs_zmm_ge WITH KEY  gate_trans_no = gs_zmm_head_ot-gate_entry_no BINARY SEARCH.
  IF sy-subrc = 0.
    IF gs_zmm_ge-entry_crdt IS NOT INITIAL.
      WRITE gs_zmm_ge-entry_crdt TO s_struct-ge_date.
    ENDIF.
  ENDIF.

  SORT gi_zmm_gprh BY gpr_no.
  READ TABLE gi_zmm_gprh INTO gs_zmm_gprh WITH KEY gpr_no = gs_zmm_head_ot-ref_id BINARY SEARCH.
  IF sy-subrc = 0.
    s_struct-gpr_no            = gs_zmm_gprh-gpr_no.
    s_struct-gpr_created_phone = gs_zmm_gprh-created_ph.
    s_struct-gpr_created_by    = gs_zmm_gprh-created_by.
    IF gs_zmm_gprh-created_on IS NOT INITIAL.
      WRITE gs_zmm_gprh-created_on TO s_struct-gpr_date.
    ENDIF.
  ELSE.
    s_struct-gpr_no            = gs_zmm_head_ot-ref_id.

  ENDIF.
ENDFORM.                    " ZMM_HEADER_DATA_F10
*&---------------------------------------------------------------------*
*&      Form  ZMM_LONGTEXT_F11
*&---------------------------------------------------------------------*
*       to read the long text
*----------------------------------------------------------------------*
FORM zmm_longtext_f11 .
  REFRESH i_tline.
  e_header-tdobject = c_z_gate.
  e_header-tdid = c_znrg.
  e_header-tdspras = sy-langu.
  e_header-tdlinesize =  132.

  e_header-tdname = gs_output-gp_no.

  CALL FUNCTION 'READ_TEXT'
    EXPORTING
      client                  = sy-mandt
      id                      = e_header-tdid
      language                = e_header-tdspras
      name                    = e_header-tdname
      object                  = c_z_gate
    TABLES
      lines                   = i_tline
    EXCEPTIONS
      id                      = 1
      language                = 2
      name                    = 3
      not_found               = 4
      object                  = 5
      reference_check         = 6
      wrong_access_to_archive = 7
      OTHERS                  = 8.

  IF sy-subrc = 0.
    LOOP AT i_tline INTO gs_tline.
      var =  str.
      CONCATENATE var gs_tline-tdline INTO str.
    ENDLOOP.
  ENDIF.
  s_struct-long_text = str.
  CLEAR str.

ENDFORM.                    " ZMM_LONGTEXT_F11
*&---------------------------------------------------------------------*
*&      Form  ZMM_VENDOR_DET_F12
*&---------------------------------------------------------------------*
*       Vendor details
*----------------------------------------------------------------------*
FORM zmm_vendor_det_f12 .
  s_struct-vendor             = gs_zmm_head_ot-lifnr.
  v_name                      = gs_zmm_head_ot-name1.
  SPLIT v_name AT c_tilt INTO v_name1 v_name2.
  s_struct-vendor_name1       = v_name1.
  s_struct-vendor_name2       = v_name2.
  v_stras                     = gs_zmm_head_ot-stras.
  SPLIT v_stras AT c_tilt INTO v_stras1 v_stras2 v_stras3 v_stras4 v_stras5.
  s_struct-v_addrline1        = v_stras1.
  s_struct-v_addrline2        = v_stras2.
  s_struct-v_addrline3        = v_stras3.
  s_struct-v_addrline4        = v_stras4.
  s_struct-v_addrline5        = v_stras5.
  v_ort01                     = gs_zmm_head_ot-ort01.
  v_pstlz                     = gs_zmm_head_ot-pstlz.

  IF v_ort01 IS NOT INITIAL AND v_pstlz IS NOT INITIAL.
    CONCATENATE v_ort01 v_pstlz INTO v_ortpstl SEPARATED BY c_sep.
  ELSEIF v_ort01 IS NOT INITIAL OR v_pstlz IS NOT INITIAL.
    IF v_ort01 IS INITIAL.
      v_ortpstl = v_pstlz.
    ELSEIF v_pstlz IS INITIAL.
      v_ortpstl = v_ort01.
    ENDIF.
  ENDIF.
  CALL FUNCTION 'HRWPC_RFC_BLAND_TEXT_GET'
    EXPORTING
      land       = gs_zmm_head_ot-land1  " eg: IN
      bland      = gs_zmm_head_ot-region  " eq: 06
      langu      = sy-langu
    IMPORTING
      bland_text = gv_region_name.
  IF sy-subrc = 0.
    v_region       = gv_region_name.
  ENDIF.
  CALL FUNCTION 'DR_GET_COUNTRY_NAME'
    EXPORTING
      country  = gs_zmm_head_ot-land1  " Country key
      language = sy-langu
    IMPORTING
      name     = gv_name.

  IF sy-subrc = 0.
    v_land1        = gv_name.
  ENDIF.
  s_struct-v_addrline6        = v_ortpstl.

  IF  v_region IS NOT INITIAL AND v_land1 IS NOT INITIAL.
    CONCATENATE  v_region v_land1 INTO v_regland1 SEPARATED BY c_coma.
  ELSEIF  v_region IS NOT INITIAL OR v_land1 IS NOT INITIAL.

    IF v_region IS INITIAL.
      v_regland1 = v_land1.
    ELSEIF v_land1 IS INITIAL.
      v_regland1 = v_region.
    ENDIF.
  ENDIF.

  s_struct-v_addrline7          = v_regland1.
  CONCATENATE gs_zmm_head_ot-tel_number gs_zmm_head_ot-tel_extn INTO s_struct-tel_extn  SEPARATED BY c_10.
  CONCATENATE gs_zmm_head_ot-fax_number gs_zmm_head_ot-fax_extn INTO s_struct-fax_extn SEPARATED BY c_10.

  CLEAR : v_regland1,v_region,v_land1,v_ortpstl,v_pstlz,v_ort01,gv_region_name,gv_name .
ENDFORM.                    " ZMM_VENDOR_DET_F12
*&---------------------------------------------------------------------*
*&      Form  ZMM_TRANSPORT_DET_F13
*&---------------------------------------------------------------------*
*       Transport details
*----------------------------------------------------------------------*
FORM zmm_transport_det_f13 .
  IF gs_zmm_head_ot-exp_ret_date IS NOT INITIAL.
    WRITE gs_zmm_head_ot-exp_ret_date TO s_struct-exp_return_date.
  ENDIF.
  PERFORM zmm_sub1_f05 USING c_frieght
                                 gs_zmm_head_ot-freight
                           CHANGING ds_tab.
  s_struct-freight              = ds_tab-ddtext.
  CLEAR:ds_tab,dd_tab.
  PERFORM zmm_sub1_f05 USING c_insu
                             gs_zmm_head_ot-insu_payer
                       CHANGING ds_tab.
  s_struct-insurance            = ds_tab-ddtext.
  CLEAR:ds_tab,dd_tab.
  PERFORM zmm_sub1_f05 USING c_octr
                             gs_zmm_head_ot-octr_payer
                       CHANGING ds_tab.
  s_struct-octroi               = ds_tab-ddtext.
  CLEAR:ds_tab,dd_tab.

  s_struct-vehicle_details      = gs_zmm_head_ot-veh_det.
  s_struct-vendors_cst_no       = gs_zmm_head_ot-v_cst_no.
  s_struct-vendors_lst_no       = gs_zmm_head_ot-v_gst_no.
  s_struct-vendors_vat_no       = gs_zmm_head_ot-v_vat.
  s_struct-no_of_cases          = gs_zmm_head_ot-no_cases.
  s_struct-approx_weight        = gs_zmm_head_ot-apprx_weight.
  s_struct-lr_no                = gs_zmm_head_ot-lrno.
  IF gs_zmm_head_ot-lr_date IS NOT INITIAL.
    WRITE gs_zmm_head_ot-lr_date TO s_struct-lr_date.
  ENDIF.

  s_struct-transporter_name     = gs_zmm_head_ot-trans.
  s_struct-material_received_by = gs_zmm_head_ot-mat_rec.
  s_struct-reasom_for_mov       = gs_zmm_head_ot-text.

ENDFORM.                    " ZMM_TRANSPORT_DET_F13
*&---------------------------------------------------------------------*
*&      Form  ZMM_GET_UNAME_F14
*&-------------------------------------------------------------------*
*       To get user name
*----------------------------------------------------------------------*
FORM zmm_get_uname_f14 .
  i_user-sapname      = gs_zmm_gprh-released_by.
  CALL FUNCTION 'SO_USER_READ_API1'
    EXPORTING
      user            = i_user
    IMPORTING
      user_data       = gv_user_data
    EXCEPTIONS
      user_not_exist  = 1
      parameter_error = 2
      x_error         = 3
      OTHERS          = 4.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
            WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.
  IF sy-subrc = 0.
    gv_fullname         = gv_user_data-fullname.
  ENDIF.
  s_struct-gpr_released_name = gv_fullname.
  CLEAR:gv_fullname.
ENDFORM.                    " ZMM_GET_UNAME_F14
*&---------------------------------------------------------------------*
*&      Form  ZMM_MAIN_HEAD_F15
*&---------------------------------------------------------------------*
*      Maintaining Header
*----------------------------------------------------------------------*
FORM zmm_main_head_f15 .
  IF gs_zmm_head_ot-returnable = c_x.
    s_struct-returnable = text-a01.
  ELSE.
    s_struct-returnable = text-a02.
  ENDIF.

ENDFORM.                    " ZMM_MAIN_HEAD_F15


INPUT:









OUTPUT:

No comments:

Post a Comment