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(100) TYPE C,
       C10(100) TYPE C,
       C11(100) TYPE 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(8) C3 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                           = 8 .
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.