Thursday, June 4, 2015

Bank Guarantee Reminder Email



PROGRAM FOR BANK GUARANTEE REMINDER EMAIL AND DISPLAY THE LIST
*&---------------------------------------------------------------------*
*& REPORT  ZBG_EMAIL_REMIND
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZBG_EMAIL_REMIND.

TYPE-POOLS : SLIS.

PARAMETERS: ZFBDT TYPE BSEG-ZFBDT.
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_EMAIL_REMIND WITH HEADER LINE.

DATA: IT_BSIK TYPE STANDARD TABLE OF ZBG_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 ZFBDT IS INITIAL.
CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  
EXPORTING
    
DATE      = SY-DATUM
    DAYS      
= 0
    MONTHS    
= 1
    SIGNUM    
= '+'
    YEARS     
= 0
  
IMPORTING
    CALC_DATE 
= ZFBDT.
ENDIF.

SELECT * INTO CORRESPONDING FIELDS OF WA_BSIK
FROM BSIK WHERE
  BUKRS 
= 'YOUR COMPANY CODE' AND
  ZFBDT 
= ZFBDT AND
  BSCHL 
= '39' AND
  UMSKZ 
IN ('E').

  
APPEND WA_BSIK TO IT_BSIK.
ENDSELECT.

LOOP AT IT_BSIK INTO WA_BSIK.

  
IF WA_BSIK-UMSKZ EQ 'E'.
    WA_BSIK
-BLART = 'BANK GUARANTEE'.
  
ENDIF.

  
CALL FUNCTION 'DATE_TO_PERIOD_CONVERT'
    
EXPORTING
      I_DATE  
= WA_BSIK-BUDAT
      I_PERIV 
= 'V3'    "Your Fiscal Year Variant
    
IMPORTING
      E_GJAHR 
= V_GJAHR.

  WA_BSIK
-GJAHR = V_GJAHR.

  
SELECT USNAM INTO CORRESPONDING FIELDS OF WA_BSIK FROM BKPF WHERE
    BELNR 
= WA_BSIK-BELNR AND
    GJAHR 
= V_GJAHR AND
    BUKRS 
= 'RCFL'.
  
ENDSELECT.

  
"QUERY FOR EMAIL
  
SELECT SINGLE USRID INTO WA_BSIK-USEREMAIL FROM PA0105 WHERE
    PERNR 
= WA_BSIK-USNAM AND
    USRTY 
= '08' AND
    ENDDA 
= '99991231'.

  
"QUERY FOR NAME
  
SELECT VORNA NACHN FROM PA0002 INTO CORRESPONDING FIELDS OF WA_BSIK WHERE
    ENDDA 
EQ '99991231' AND
    PERNR 
= WA_BSIK-USNAM.
  
ENDSELECT.

  
SELECT NAME1 INTO CORRESPONDING FIELDS OF WA_BSIK FROM LFA1 WHERE
    LIFNR 
= WA_BSIK-LIFNR.
  
ENDSELECT.

  
MODIFY IT_BSIK FROM WA_BSIK.
  
APPEND WA_BSIK TO ITAB.
ENDLOOP.

SORT ITAB BY LIFNR BELNR.
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   = 'LIFNR'.
  FIELDCATALOG
-SELTEXT_M   = 'Vendor'.
  FIELDCATALOG
-COL_POS     = 1.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'NAME1'.
  FIELDCATALOG
-SELTEXT_M   = 'Vendor Name'.
  FIELDCATALOG
-COL_POS     = 2.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'BELNR'.
  FIELDCATALOG
-SELTEXT_M   = 'Document Number'.
  FIELDCATALOG
-COL_POS     = 3.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'BUDAT'.
  FIELDCATALOG
-SELTEXT_M   = 'Posting Date'.
  FIELDCATALOG
-COL_POS     = 4.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'GJAHR'.
  FIELDCATALOG
-SELTEXT_M   = 'Fiscal Year'.
  FIELDCATALOG
-COL_POS     = 5.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'ZFBDT'.
  FIELDCATALOG
-SELTEXT_M   = 'Due Date'.
  FIELDCATALOG
-COL_POS     = 6.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'WRBTR'.
  FIELDCATALOG
-SELTEXT_M   = 'Amount in Document Currency'.
  FIELDCATALOG
-COL_POS     = 7.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'DMBTR'.
  FIELDCATALOG
-SELTEXT_M   = 'Amount in Local Currency'.
  FIELDCATALOG
-COL_POS     = 8.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'BLART'.
  FIELDCATALOG
-SELTEXT_M   = 'Document Type'.
  FIELDCATALOG
-COL_POS     = 9.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'UMSKZ'.
  FIELDCATALOG
-SELTEXT_M   = 'Special G/L Indicator'.
  FIELDCATALOG
-COL_POS     = 10.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'ZUONR'.
  FIELDCATALOG
-SELTEXT_M   = 'Assignment Number'.
  FIELDCATALOG
-COL_POS     = 11.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'SGTXT'.
  FIELDCATALOG
-SELTEXT_M   = 'Item Text'.
  FIELDCATALOG
-COL_POS     = 12.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'USNAM'.
  FIELDCATALOG
-SELTEXT_M   = 'User'.
  FIELDCATALOG
-COL_POS     = 13.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'USEREMAIL'.
  FIELDCATALOG
-SELTEXT_M   = 'Email'.
  FIELDCATALOG
-COL_POS     = 14.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'VORNA'.
  FIELDCATALOG
-SELTEXT_M   = 'First Name'.
  FIELDCATALOG
-COL_POS     = 15.
  
APPEND FIELDCATALOG TO FIELDCATALOG.
  
CLEAR  FIELDCATALOG.

  FIELDCATALOG
-FIELDNAME   = 'NACHN'.
  FIELDCATALOG
-SELTEXT_M   = 'Last Name'.
  FIELDCATALOG
-COL_POS     = 16.
  
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.
  
CALL FUNCTION 'ZBG_EMAIL_REMIND'
    
EXPORTING
      LV_EMP_USERID        
= 'SYSTEM'
      LIFNR                
= WA_BSIK-LIFNR
      LIFNR_NAME           
= WA_BSIK-NAME1
      LV_EMP_EMAILID       
= WA_BSIK-USEREMAIL
      CREDIT               
= WA_BSIK-DMBTR
      USNAM                
= WA_BSIK-USNAM
      VORNA                
= WA_BSIK-VORNA
      NACHN                
= WA_BSIK-NACHN
      BELNR                
= WA_BSIK-BELNR
      GJAHR                
= WA_BSIK-GJAHR
      ZFBDT                
= WA_BSIK-ZFBDT.
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 = 'BELNR'.
        
READ TABLE ITAB INTO WA_BSIK INDEX RS_SELFIELD-TABINDEX.
        
IF SY-SUBRC = 0.
          
SET PARAMETER ID 'BLN' FIELD WA_BSIK-BELNR.
          
SET PARAMETER ID 'BUK' FIELD 'YOUR COMPANY CODE'."WA_BSIK-BUKRS'.
          
SET PARAMETER ID 'GJR' FIELD WA_BSIK-GJAHR.
          
CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
        
ENDIF.
      
ENDIF.
  
ENDCASE.
ENDFORM.                    "USER_COMMAND
----------------------------------------------------------------------------------------------------------------------------------------------------
FUCNTION MODULE FOR SENDING BANK GUARANTEE REMINDER EMAIL

IMPORT

LV_EMP_USERID             TYPE     FITP_USER-UNAME
LIFNR   TYPE     LIFNR
LIFNR_NAME    TYPE     NAME1
LV_EMP_EMAILID          TYPE     PA0105-USRID_LONG
CREDIT                TYPE     DMBTR
USNAM TYPE     USNAM
VORNA TYPE     VORNA
NACHN TYPE     NACHN
BELNR  TYPE     BELNR_D
ZFBDT  TYPE     BUDAT
GJAHR  TYPE     GJAHR

SOURCE CODE

FUNCTION ZBG_EMAIL_REMIND.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(LV_EMP_USERID) TYPE  FITP_USER-UNAME
*"     VALUE(LIFNR) TYPE  LIFNR
*"     VALUE(LIFNR_NAME) TYPE  NAME1
*"     VALUE(LV_EMP_EMAILID) TYPE  PA0105-USRID_LONG
*"     VALUE(CREDIT) TYPE  DMBTR
*"     VALUE(USNAM) TYPE  USNAM
*"     VALUE(VORNA) TYPE  VORNA
*"     VALUE(NACHN) TYPE  NACHN
*"     VALUE(BELNR) TYPE  BELNR_D
*"     VALUE(ZFBDT) TYPE  BUDAT
*"     VALUE(GJAHR) TYPE  GJAHR
*"----------------------------------------------------------------------

* *&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 
= VORNA.
C3 
= NACHN.

CONCATENATE C1 C2 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 
= 'The Bank Guarantee received from '.
C5 
= LIFNR_NAME.
C6 
= LIFNR.
C7 
= 'of Rs. '.
C8 
= CREDIT.
C9 
= 'entered in SAP vide Document Number - '.
C10 
= 'and Fiscal Year - '.
C11 
= 'is due to expire on '.
C3 
= '.'.
CONCATENATE C4 C5 C6 C7 C8 C9 BELNR C10 GJAHR C11 ZFBDT 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 neccessary 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.
C4 
= 'You can see the Report by executing T-Code ZBG_EMAIL_REMIND'.
C5 
= ''.
CONCATENATE C4 C5 INTO WA_IT_MESSAGE-LINE SEPARATED BY SPACE.
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.