Wednesday, July 22, 2015

Program for Sending Email to Customer for BG Reminder

*&---------------------------------------------------------------------*
*& REPORT  ZBG_EMAIL_REMIND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZBG_CUST_EMAIL_REMIND.

TYPE-POOLS : SLIS.

PARAMETERS: ZAXDAT TYPE BKPF-BUDAT.
Data: E_ZAXDAT TYPE BKPF-BUDAT.

Data: v_ZAXDAT type AKKP-AXDAT.


PARAMETERS : DISPLAY AS CHECKBOX.
PARAMETERS : EMAIL AS CHECKBOX.

*ALV DATA DECLARATIONS
DATA: FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV WITH HEADER LINE,
      GD_TAB_GROUP TYPE SLIS_T_SP_GROUP_ALV,
      GD_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GD_REPID     LIKE SY-REPID,
      GT_EVENTS     TYPE SLIS_T_EVENT,
      GD_PRNTPARAMS TYPE SLIS_PRINT_ALV.

DATA: ITAB TYPE STANDARD TABLE OF ZBG_CUST_EMAIL_REMIND WITH HEADER LINE.

DATA: IT_BSIK TYPE STANDARD TABLE OF ZBG_CUST_EMAIL_REMIND WITH HEADER LINE.
DATA: WA_BSIK LIKE LINE OF IT_BSIK.

TYPES: BEGIN OF ST,
        LIFNR TYPE BSAK-LIFNR,
       END OF ST.

DATA: IT_LIFNR TYPE TABLE OF ST WITH HEADER LINE ,
      WA_LIFNR LIKE LINE OF IT_LIFNR.

DATA: V_GJAHR TYPE GJAHR.

IF ZAXDAT IS INITIAL.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  EXPORTING
    DATE      = SY-DATUM
    DAYS      = 0
    MONTHS    = 1
    SIGNUM    = '+'
    YEARS     = 0
  IMPORTING
    CALC_DATE = E_ZAXDAT.
CONCATENATE E_ZAXDAT '063000' INTO v_ZAXDAT.
ENDIF.

IF ZAXDAT IS NOT INITIAL.
  CONCATENATE ZAXDAT '063000' INTO v_ZAXDAT.
ENDIF.

SELECT * INTO CORRESPONDING FIELDS OF WA_BSIK
FROM AKKP WHERE
  BUKRS = 'COMPANYC' AND
  AXDAT = v_ZAXDAT AND
  AKKST IN ('D', 'E').

  APPEND WA_BSIK TO IT_BSIK.
ENDSELECT.


LOOP AT IT_BSIK INTO WA_BSIK.

  SELECT BAANR INTO CORRESPONDING FIELDS OF WA_BSIK FROM AKKB WHERE
    LCNUM = WA_BSIK-LCNUM.
  ENDSELECT.

  "QUERY FOR EMAIL
  SELECT T1~NAME1 SMTP_ADDR FROM KNA1 AS T1
    LEFT OUTER JOIN ADRC AS T2
    ON T1~ADRNR = T2~ADDRNUMBER
    LEFT OUTER JOIN ADR6 AS T4
    ON T1~ADRNR = T4~ADDRNUMBER
    INTO CORRESPONDING FIELDS OF WA_BSIK WHERE
    T1~KUNNR EQ WA_BSIK-KUNNR.
  ENDSELECT.

  MODIFY IT_BSIK FROM WA_BSIK.
  APPEND WA_BSIK TO ITAB.

ENDLOOP.

SORT ITAB BY LCNUM KUNNR.
DELETE ADJACENT DUPLICATES FROM ITAB COMPARING ALL FIELDS.

IF EMAIL = 'X'.
  PERFORM SENDMAIL.
ENDIF.

IF DISPLAY EQ 'X'.
  PERFORM BUILD_FIELDCATALOG.
  PERFORM BUILD_LAYOUT.
  PERFORM DISPLAY_ALV_REPORT.
ENDIF.
*
FORM BUILD_FIELDCATALOG .
  FIELDCATALOG-FIELDNAME   = 'LCNUM'.
  FIELDCATALOG-SELTEXT_M   = 'Fin Doc No'.
  FIELDCATALOG-COL_POS     = 1.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'BUKRS'.
  FIELDCATALOG-SELTEXT_M   = 'Company Code'.
  FIELDCATALOG-COL_POS     = 2.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'AKART'.
  FIELDCATALOG-SELTEXT_M   = 'Document Type'.
  FIELDCATALOG-COL_POS     = 3.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'AKKTP'.
  FIELDCATALOG-SELTEXT_M   = 'Fin Doc Category'.
  FIELDCATALOG-COL_POS     = 4.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'KUNNR'.
  FIELDCATALOG-SELTEXT_M   = 'Customer Number'.
  FIELDCATALOG-COL_POS     = 5.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'NAME1'.
  FIELDCATALOG-SELTEXT_M   = 'NAME'.
  FIELDCATALOG-COL_POS     = 6.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'SMTP_ADDR'.
  FIELDCATALOG-SELTEXT_M   = 'Email'.
  FIELDCATALOG-COL_POS     = 7.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'AKKST'.
  FIELDCATALOG-SELTEXT_M   = 'Fin Status'.
  FIELDCATALOG-COL_POS     = 8.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'AXDAT'.
  FIELDCATALOG-SELTEXT_M   = 'Validity End Date'.
  FIELDCATALOG-COL_POS     = 9.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'WRTAK'.
  FIELDCATALOG-SELTEXT_M   = 'Fin Doc Value'.
  FIELDCATALOG-COL_POS     = 10.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'BAANR'.
  FIELDCATALOG-SELTEXT_M   = 'Ext Fin Doc No'.
  FIELDCATALOG-COL_POS     = 11.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'ERNAM'.
  FIELDCATALOG-SELTEXT_M   = 'Created By'.
  FIELDCATALOG-COL_POS     = 12.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

  FIELDCATALOG-FIELDNAME   = 'ERDAT_TS'.
  FIELDCATALOG-SELTEXT_M   = 'Created On'.
  FIELDCATALOG-COL_POS     = 13.
  APPEND FIELDCATALOG TO FIELDCATALOG.
  CLEAR  FIELDCATALOG.

ENDFORM.                    " BUILD_FIELDCATALOG
*
FORM BUILD_LAYOUT .
GD_LAYOUT-NO_INPUT          = 'X'.
  GD_LAYOUT-COLWIDTH_OPTIMIZE = 'X'.
  GD_LAYOUT-TOTALS_TEXT       = 'TOTALS'(201).
ENDFORM.                    " BUILD_LAYOUT
*
FORM DISPLAY_ALV_REPORT .
GD_REPID = SY-REPID.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            I_CALLBACK_PROGRAM      = GD_REPID
*            I_CALLBACK_TOP_OF_PAGE   = 'TOP-OF-PAGE'  "SEE FORM
            I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
*            I_GRID_TITLE           = OUTTEXT
            IS_LAYOUT               = GD_LAYOUT
            IT_FIELDCAT             = FIELDCATALOG[]
*            IT_SPECIAL_GROUPS       = GD_TABGROUP
            IT_EVENTS               = GT_EVENTS
            IS_PRINT                = GD_PRNTPARAMS
            I_SAVE                  = 'X'
*            IS_VARIANT              = Z_TEMPLATE
       TABLES
            T_OUTTAB                = ITAB

       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_ALV_REPORT
*
FORM SENDMAIL.
LOOP AT IT_BSIK INTO WA_BSIK.
  IF WA_BSIK-SMTP_ADDR IS NOT INITIAL.
    CALL FUNCTION 'ZBG_CUST_EMAIL_REMIND'
      EXPORTING
        LV_EMP_USERID        = 'SYSTEM'
        KUNNR                = WA_BSIK-KUNNR
        KUNNR_NAME           = WA_BSIK-NAME1
        LV_EMP_EMAILID       = WA_BSIK-SMTP_ADDR
        CREDIT               = WA_BSIK-WRTAK
        AXDAT                = WA_BSIK-AXDAT
        BAANR                = WA_BSIK-BAANR.
  ENDIF.
ENDLOOP.
ENDFORM.
*
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
  CASE R_UCOMM.
    WHEN '&IC1'.
      IF RS_SELFIELD-FIELDNAME = 'LCNUM'.
        READ TABLE ITAB INTO WA_BSIK INDEX RS_SELFIELD-TABINDEX.
        IF SY-SUBRC = 0.
          SET PARAMETER ID 'AKN' FIELD WA_BSIK-LCNUM.
          CALL TRANSACTION 'VX13N' AND SKIP FIRST SCREEN.
        ENDIF.
      ENDIF.
  ENDCASE.
ENDFORM.                    "USER_COMMAND
---------------------------------------------------------------------------------------------------------------------------
FUCNTION MODULE FOR SENDING BANK GUARANTEE EMAIL 
IMPORT
 LV_EMP_USERID    TYPE    FITP_USER-UNAME
KUNNR    TYPE    LIFNR
KUNNR_NAME    TYPE    NAME1_GP
LV_EMP_EMAILID    TYPE    PA0105-USRID_LONG
CREDIT    TYPE    WRTAK
AXDAT    TYPE    AXDAT
BAANR    TYPE    BAANR

                                                                                  SOURCE CODE 
FUNCTION ZBG_CUST_EMAIL_REMIND.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(LV_EMP_USERID) TYPE  FITP_USER-UNAME
*"     VALUE(KUNNR) TYPE  LIFNR
*"     VALUE(KUNNR_NAME) TYPE  NAME1_GP
*"     VALUE(LV_EMP_EMAILID) TYPE  PA0105-USRID_LONG
*"     VALUE(CREDIT) TYPE  WRTAK
*"     VALUE(AXDAT) TYPE  AXDAT
*"     VALUE(BAANR) TYPE  BAANR
*"----------------------------------------------------------------------
*"----------------------------------------------------------------------
*"  IMPORTING
*"     REFERENCE(LV_EMP_USERID) TYPE  FITP_USER-UNAME
*"     REFERENCE(LV_EMP_EMAILID) TYPE  PA0105-USRID_LONG
*"----------------------------------------------------------------------
*{   INSERT         RQ1K900459                                        2
***********************************************************************************
* Created by: P.Surjith Kumar, Enteg InfoTech, Bangalore, India.
* Created on: 03-11-2008
* Purpose   : Sending Mail for the Respective Person's SAP Inbox and External Email id.
***********************************************************************************
* *&Get The Email Id And User Id Whom You Want To Send  ******
  DATA:IT_RECEIVERS    TYPE STANDARD TABLE OF  SOMLRECI1,
       WA_IT_RECEIVERS LIKE LINE OF IT_RECEIVERS,
       IT_PACKING_LIST TYPE STANDARD TABLE OF  SOPCKLSTI1,
       GD_DOC_DATA     TYPE SODOCCHGI1,
       WA_IT_PACKING_LIST LIKE LINE OF  IT_PACKING_LIST,
       PSUBJECT(90)       TYPE C,
       IT_MESSAGE         TYPE STANDARD TABLE OF SOLISTI1,
       WA_IT_MESSAGE      LIKE LINE OF IT_MESSAGE,
       C1(99)    TYPE C,
       C2(30)    TYPE C,
       C3(45)    TYPE C,
       C4(100)    TYPE C,
       C5(13)    TYPE C,
       C6(13)    TYPE C,
       C7(13)    TYPE C,
       C8(13)    TYPE C,
       C9(100TYPE C,
       C10(100TYPE C,
       C11(100TYPE C,
       NUM_LINES TYPE I.

"&-- ASSIGN THE EMAIL ID AND USER ID TO  WHOM YOU WANT TO SEND  -------------&
  FREE WA_IT_RECEIVERS.
  WA_IT_RECEIVERS-RECEIVER   LV_EMP_EMAILID"&---- ASSIGN EMAIL ID
  WA_IT_RECEIVERS-REC_TYPE   'U'.                    "&---- SEND TO EXTERNAL EMAIL ID
  WA_IT_RECEIVERS-COM_TYPE   'INT'.
  WA_IT_RECEIVERS-NOTIF_DEL  'X'.
  WA_IT_RECEIVERS-NOTIF_NDEL 'X'.
  APPEND WA_IT_RECEIVERS TO IT_RECEIVERS .

*  FREE WA_IT_RECEIVERS.
*  WA_IT_RECEIVERS-RECEIVER   = LV_EMP_USERID.  "&----- ASSIGN SAP USER ID
*  WA_IT_RECEIVERS-REC_TYPE   = 'B'.                    "&-- SEND TO SAP INBOX
*  WA_IT_RECEIVERS-COM_TYPE   = 'INT'.
*  WA_IT_RECEIVERS-NOTIF_DEL  = 'X'.
*  WA_IT_RECEIVERS-NOTIF_NDEL = 'X'.
*  APPEND WA_IT_RECEIVERS TO IT_RECEIVERS .
*& - END OF  ASSIGN THE EMAIL ID AND USER ID TO  WHOM YOU WANT TO SEND  --&

"&--- READ THE NUMBER OF LINES IN THE INTERNAL TABLE
DESCRIBE TABLE IT_RECEIVERS LINES NUM_LINES.
"&--- CHECK THE SENDER EMAIL ID OR SAP USER ID IS GOT OR NOT.
IF NUM_LINES IS NOT INITIAL.
*&----------------------------------------------------------------------
* ADD THETEXT TO MAIL TEXT TABLE
*&----------------------------------------------------------------------
*&-- SUBJECT OF THE MAIL -------------&*
PSUBJECT 'SUB: Bank Guarantee'(001).

"&--  BODY  OF THE MAIL ----------------&*
CLEAR WA_IT_MESSAGE.
C1 'Dear'(005).
C2 KUNNR_NAME.

CONCATENATE C1 C2 ',' INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE-LINE '                                               '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

******* ASSIGN YOUR TEXT  BELOW *************************************
CLEAR WA_IT_MESSAGE.
C4 'The BG/LC submitted by you vide ref no'.
C7 'of Rs. '.
C8 CREDIT.
C11 'is due to expire on '.
C3 '.'.
CONCATENATE C4 BAANR C7 C8 C11 AXDAT+0(8C3 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE{} *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE-LINE '                                        '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

******* ASSIGN YOUR TEXT  BELOW *************************************
CLEAR WA_IT_MESSAGE.
C4 'Kindly take necessary action on same immediately.'.
C5 ''.
CONCATENATE C4 C5 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

*** INSERT BLANK LINE{} *********************************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE-LINE '                                        '.
APPEND WA_IT_MESSAGE TO IT_MESSAGE.

**********ASSIGN YOUR TEXT  BELOW ********************************
CLEAR WA_IT_MESSAGE.
WA_IT_MESSAGE-LINE 'This Mail Generate Automatically. Please Do Not Reply.'(003).
APPEND WA_IT_MESSAGE TO IT_MESSAGE.
*********************************************************************

**********& SEND EMAIL MESSAGE  &*********************************
GD_DOC_DATA-DOC_SIZE 1.

*POPULATE THE SUBJECT/GENERIC MESSAGE ATTRIBUTES
GD_DOC_DATA-OBJ_LANGU SY-LANGU.
GD_DOC_DATA-OBJ_NAME 'SAPRPT'.
GD_DOC_DATA-OBJ_DESCR PSUBJECT.
GD_DOC_DATA-SENSITIVTY 'F'.

*DESCRIBE THE BODY OF THE MESSAGE
CLEAR WA_IT_PACKING_LIST.
REFRESH IT_PACKING_LIST.
WA_IT_PACKING_LIST-TRANSF_BIN SPACE.
WA_IT_PACKING_LIST-HEAD_START 1.
WA_IT_PACKING_LIST-HEAD_NUM 0.
WA_IT_PACKING_LIST-BODY_START 1.
DESCRIBE TABLE IT_MESSAGE LINES WA_IT_PACKING_LIST-BODY_NUM.
WA_IT_PACKING_LIST-DOC_TYPE 'RAW'.
APPEND WA_IT_PACKING_LIST TO IT_PACKING_LIST.

*&------ CALL THE FUNCTION MODULE TO SEND THE MESSAGE TO EXTERNAL AND SAP INBOX
CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
  EXPORTING
    DOCUMENT_DATA                   GD_DOC_DATA
   PUT_IN_OUTBOX                    'X'
   COMMIT_WORK                      'X'
  TABLES
    PACKING_LIST                    IT_PACKING_LIST
   CONTENTS_TXT                     IT_MESSAGE
   RECEIVERS                        IT_RECEIVERS
 EXCEPTIONS
   TOO_MANY_RECEIVERS               1
   DOCUMENT_NOT_SENT                2
   DOCUMENT_TYPE_NOT_EXIST          3
   OPERATION_NO_AUTHORIZATION       4
   PARAMETER_ERROR                  5
   X_ERROR                          6
   ENQUEUE_ERROR                    7
   OTHERS                           .
IF SY-SUBRC <> 0.
 MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDIF"&---- END OF CHECK THE SENDER EMAIL ID OR SAP USER ID IS GOT OR NOT.

ENDFUNCTION.