You are on page 1of 15

*&---------------------------------------------------------------------*

*& Report ZRO_CHANGE


*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZRO_CHANGE.

TYPE-POOLS : TRUXS.

SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.


PARAMETERS :P_FNAME(70) OBLIGATORY.
*SELECTION-SCREEN SKIP.
*PARAMETERS: P_MODE TYPE CTU_PARAMS-DISMODE DEFAULT 'E'.
SELECTION-SCREEN END OF BLOCK B1.

TYPES: BEGIN OF GTY_FILE,


BUKRS TYPE BUKRS, "Company Code
SWENR TYPE SWENR, "Project name
SMENR TYPE SMENR, "Rental Object
CONDVALIDFROM TYPE RECDVALIDFROM, "Valid From
UNITPRICE TYPE RECDUNITPRICE, "Unit Price
PHASE TYPE RLGESCH, "LOCATION ON FLOOR "ADDED BY M.SLEEM
01/05/2023 >> ADDING PHASE COLUMN TO THE PROGRAM
RESIDENT TYPE REBDMEASVALUE, "A200
INDOOR_AREA TYPE REBDMEASVALUE, "A501
SHLAND TYPE REBDMEASVALUE, "M021
SHGARDEN TYPE REBDMEASVALUE, "M020
USABLE_SPACE TYPE REBDMEASVALUE, "A003

END OF GTY_FILE.
DATA: GT_FINAL TYPE STANDARD TABLE OF GTY_FILE,
GS_FINAL TYPE GTY_FILE,
DD(8).
*TYPES: BEGIN OF TY_LINES,
* LINE TYPE CHAR255,
* END OF TY_LINES.
*DATA: IT_LINES TYPE STANDARD TABLE OF TY_LINES,
* WA_LINES TYPE TY_LINES.
DATA: IT_LINES TYPE SOLI_TAB,
WA_LINES TYPE SOLI.
DATA: TITLE TYPE STRING.
DATA XVIBDMEAS TYPE TABLE OF VIBDMEAS WITH HEADER LINE .
DATA REKEY TYPE RECAINTRENO .
DATA: GT_BDC TYPE STANDARD TABLE OF BDCDATA,
GS_BDC TYPE BDCDATA,
GT_MSG TYPE STANDARD TABLE OF BDCMSGCOLL,
LT_MSG TYPE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE,
GS_MSG TYPE BDCMSGCOLL.
DATA: G_RC TYPE SY-SUBRC.
DATA: FILENAME TYPE RLGRAP-FILENAME.

"downloaded excel file type (log)


TYPES: BEGIN OF TY_EXCEL_DWN,
RENTALOBJ(22) TYPE C,
MESSAGE(220) TYPE C,
END OF TY_EXCEL_DWN.

DATA : IT_DOWNLOAD TYPE STANDARD TABLE OF TY_EXCEL_DWN,


WA_DOWNLOAD TYPE TY_EXCEL_DWN.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.
DATA: LT_FTAB TYPE FILETABLE,
LS_FTAB TYPE FILE_TABLE.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG


* EXPORTING
* WINDOW_TITLE =
* DEFAULT_EXTENSION =
* DEFAULT_FILENAME =
* FILE_FILTER =
* WITH_ENCODING =
* INITIAL_DIRECTORY =
* MULTISELECTION =
CHANGING
FILE_TABLE = LT_FTAB
RC = G_RC
* USER_ACTION =
* FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 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.

READ TABLE LT_FTAB INTO LS_FTAB INDEX 1.


* G_FILE = LS_FTAB-FILENAME.
P_FNAME = LS_FTAB-FILENAME.

START-OF-SELECTION.
PERFORM UPLOAD_EXCEL.

WA_DOWNLOAD-RENTALOBJ = 'RENTALOBJ'.
WA_DOWNLOAD-MESSAGE = 'MESSAGE'.
APPEND WA_DOWNLOAD TO IT_DOWNLOAD.
CLEAR WA_DOWNLOAD.

IF GT_FINAL IS NOT INITIAL.


PERFORM PROCESS_BDC .
ENDIF.

PERFORM DOWNLOAD_EXCEL_LOG.

END-OF-SELECTION.
* PERFORM DISPLAY_MSGS.

*&---------------------------------------------------------------------*
*& Form UPLOAD_EXCEL
*&---------------------------------------------------------------------*

FORM UPLOAD_EXCEL .
FILENAME = P_FNAME.
DATA: I_TAB_DATA TYPE TRUXS_T_TEXT_DATA.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_FIELD_SEPERATOR = '#'
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = I_TAB_DATA
I_FILENAME = FILENAME
TABLES
I_TAB_CONVERTED_DATA = GT_FINAL
EXCEPTIONS
CONVERSION_FAILED = 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. " UPLOAD_EXCEL

*&---------------------------------------------------------------------*
*& Form PROCESS_BDC
*&---------------------------------------------------------------------*
FORM PROCESS_BDC.

DATA:COMPCODE LIKE BAPI_RE_RENTAL_OBJECT_KEY-COMP_CODE,


BUSINESSENTITYNUMBER LIKE BAPI_RE_RENTAL_OBJECT_KEY-BUSINESS_ENTITY,
RENTALOBJECTNUMBER LIKE BAPI_RE_RENTAL_OBJECT_KEY-RENTAL_OBJECT,
XRENTALOBJ LIKE BAPI_RE_RENTAL_OBJECT_DAT,
XRENTALOBJ_X LIKE BAPI_RE_RENTAL_OBJECT_DATX.

DATA: CONDITION TYPE STANDARD TABLE OF BAPI_RE_CONDITION_DATC WITH HEADER


LINE,
G_CONDITION TYPE BAPI_RE_CONDITION_DATC,
RETURN TYPE STANDARD TABLE OF BAPIRET2 WITH HEADER LINE.

DATA CONDITION_OLD TYPE STANDARD TABLE OF BAPI_RE_CONDITION WITH HEADER LINE.


DATA MEASUREMENT TYPE STANDARD TABLE OF BAPI_RE_MEASUREMENT_DATC WITH HEADER
LINE.
DATA MEASUREMENT_OLD TYPE STANDARD TABLE OF BAPI_RE_MEASUREMENT WITH HEADER LINE.
DATA RENTAL_OBJECT TYPE BAPI_RE_RENTAL_OBJECT .

"FOR MAIL SEND BY CHANGES


DATA OLD_PRICE TYPE C LENGTH 30.
DATA NEW_PRICE TYPE C LENGTH 30.
TYPES: BEGIN OF TY_LOG_MEASCHANGE,
MEASUREMENT Type REBDMEAS,
CHANGE_INDICATOR TYPE RECACHANGEIND,
OLD_VALUE(17) TYPE C,
NEW_VALUE(17) TYPE C,
END OF TY_LOG_MEASCHANGE.
DATA : IT_MEASUREMENTLOG TYPE STANDARD TABLE OF TY_LOG_MEASCHANGE
WITH HEADER LINE.

"**************************************

LOOP AT GT_FINAL INTO GS_FINAL.

COMPCODE = GS_FINAL-BUKRS.
BUSINESSENTITYNUMBER = GS_FINAL-SWENR.
RENTALOBJECTNUMBER = GS_FINAL-SMENR.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'


EXPORTING
INPUT = GS_FINAL-SMENR
IMPORTING
OUTPUT = GS_FINAL-SMENR.

SELECT SINGLE INTRENO INTO REKEY FROM VIBDRO WHERE BUKRS = GS_FINAL-BUKRS AND
SWENR = GS_FINAL-SWENR AND SMENR = GS_FINAL-SMENR .

"CONCATENATE GS_FINAL-CONDVALIDFROM+6(2) GS_FINAL-CONDVALIDFROM+4(2) GS_FINAL-


CONDVALIDFROM(4) INTO DD.
"Hend - 17-03-2021 - Get active price, delimit it then insert new price

CALL FUNCTION 'BAPI_RE_RO_GET_DETAIL'


EXPORTING
COMPCODE = COMPCODE
BUSINESSENTITYNUMBER = BUSINESSENTITYNUMBER
RENTALOBJECTNUMBER = RENTALOBJECTNUMBER
DETAIL_DATA_FROM = SY-DATUM
* DETAIL_DATA_TO =
IMPORTING
RENTAL_OBJECT = RENTAL_OBJECT
* OBJECT_ADDRESS =
* COSETTLE_PARAM =
TABLES
CONDITION = CONDITION_OLD
MEASUREMENT = MEASUREMENT_OLD.
***********************************ADDED BY M.SLEEM
01/05/2023*******************************
***********************************ADDING PHASE
COLUMN***************************************

CLEAR: XRENTALOBJ , XRENTALOBJ_X.


IF GS_FINAL-PHASE IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = GS_FINAL-PHASE
IMPORTING
OUTPUT = GS_FINAL-PHASE.

XRENTALOBJ-LOCATION_ON_FLOOR = GS_FINAL-PHASE.
XRENTALOBJ_X-LOCATION_ON_FLOOR = 'X'.

IF ( GS_FINAL-CONDVALIDFROM IS INITIAL ) AND


( GS_FINAL-UNITPRICE IS INITIAL ).

CALL FUNCTION 'BAPI_RE_RO_CHANGE'


EXPORTING
COMPCODE = COMPCODE
BUSINESSENTITYNUMBER = BUSINESSENTITYNUMBER
RENTALOBJECTNUMBER = RENTALOBJECTNUMBER
RENTAL_OBJECT = XRENTALOBJ
RENTAL_OBJECT_X = XRENTALOBJ_X
TABLES
RETURN = RETURN
.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
***********************************************************************************
**********

"not initial and there is change in unit price


IF ( ( CONDITION_OLD[] IS NOT INITIAL ) AND
( GS_FINAL-CONDVALIDFROM IS NOT INITIAL AND
GS_FINAL-UNITPRICE IS NOT INITIAL ) ).
READ TABLE CONDITION_OLD INDEX 1.
"Subtract one day
DATA DL_DATE TYPE SY-DATUM.

CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'


EXPORTING
DATE = GS_FINAL-CONDVALIDFROM
DAYS = 1
MONTHS = 0
SIGNUM = '-'
YEARS = 0
IMPORTING
CALC_DATE = DL_DATE.

CONDITION-CHANGE_INDICATOR = 'U'.
CONCATENATE COMPCODE '/' BUSINESSENTITYNUMBER '/'
RENTALOBJECTNUMBER INTO CONDITION-CALCULATION_OBJECT_ID.
CONDITION-CONDITION_TYPE = 'U001' .
CONDITION-CALCULATION_OBJECT_TYPE = 'IM'.
CONDITION-VALID_FROM = CONDITION_OLD-VALID_FROM .
CONDITION-CURRENCY = CONDITION_OLD-CURRENCY. "'EGP' .
CONDITION-UNIT_PRICE = CONDITION_OLD-UNIT_PRICE.
CONDITION-CALC_RULE = 'A' .
CONDITION-EXTERNAL_PURPOSE = 'G'.
CONDITION-IS_ONE_TIME = CONDITION_OLD-IS_ONE_TIME.
CONDITION-VALID_TO = DL_DATE.
APPEND CONDITION TO CONDITION.

CALL FUNCTION 'BAPI_RE_RO_CHANGE'


EXPORTING
COMPCODE = COMPCODE
BUSINESSENTITYNUMBER = BUSINESSENTITYNUMBER
RENTALOBJECTNUMBER = RENTALOBJECTNUMBER
RENTAL_OBJECT = XRENTALOBJ
RENTAL_OBJECT_X = XRENTALOBJ_X
TABLES
CONDITION = CONDITION
RETURN = RETURN.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
CLEAR CONDITION.
CLEAR CONDITION[].
ENDIF.
"HEND - 17-03-2021 - END
"No changes on unit price
IF ( ( GS_FINAL-CONDVALIDFROM IS NOT INITIAL ) AND
( GS_FINAL-UNITPRICE IS NOT INITIAL ) ).
G_CONDITION-CHANGE_INDICATOR = 'I' .
G_CONDITION-CONDITION_TYPE = 'U001' .
G_CONDITION-VALID_FROM = GS_FINAL-CONDVALIDFROM .
G_CONDITION-CURRENCY = 'EGP' .
G_CONDITION-UNIT_PRICE = GS_FINAL-UNITPRICE.
G_CONDITION-CALC_RULE = 'A' .
G_CONDITION-EXTERNAL_PURPOSE = 'G'.
G_CONDITION-IS_ONE_TIME = 'X'.
CONCATENATE COMPCODE '/' BUSINESSENTITYNUMBER '/'
RENTALOBJECTNUMBER INTO G_CONDITION-CALCULATION_OBJECT_ID.
APPEND G_CONDITION TO CONDITION .
ENDIF.

IF ( GS_FINAL-RESIDENT IS NOT INITIAL ). "A200


IT_MEASUREMENTLOG-MEASUREMENT = 'A200'. "LOG
READ TABLE MEASUREMENT_OLD WITH KEY MEASUREMENT = 'A200'.
IF ( SY-SUBRC EQ 0 ).
MEASUREMENT-CHANGE_INDICATOR = 'U'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U'. "LOG
IT_MEASUREMENTLOG-OLD_VALUE = MEASUREMENT_OLD-VALUE_AVAIL. "LOG
ELSE.
MEASUREMENT-CHANGE_INDICATOR = 'I'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I'. "LOG
ENDIF.
IT_MEASUREMENTLOG-NEW_VALUE = GS_FINAL-RESIDENT. "LOG
MEASUREMENT-MEASUREMENT = 'A200'.

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
MEASUREMENT-VALUE_AVAIL = MEASUREMENT_OLD-VALUE_AVAIL.
ELSE .
MEASUREMENT-VALUE_AVAIL = GS_FINAL-RESIDENT.
ENDIF .
IF MEASUREMENT_OLD-VALID_FROM IS INITIAL .

MEASUREMENT-VALID_FROM = '00000000'.
ELSE .
MEASUREMENT-VALID_FROM = RENTAL_OBJECT-OBJECT_VALID_FROM .
ENDIF .

IF MEASUREMENT-CHANGE_INDICATOR = 'I'.
MEASUREMENT-VALID_TO = '00000000'. .
ELSE .
MEASUREMENT-VALID_TO = SY-DATUM - 1 . "'99991231' .
ENDIF .
MEASUREMENT-UNIT = 'M2'.
APPEND MEASUREMENT TO MEASUREMENT.
APPEND IT_MEASUREMENTLOG TO IT_MEASUREMENTLOG. "LOG
CLEAR MEASUREMENT.
CLEAR IT_MEASUREMENTLOG. "LOG
*----------------------------------------------------------------

XVIBDMEAS-INTRENO = REKEY .
XVIBDMEAS-MEAS = 'A200' .
XVIBDMEAS-VALIDFROM = SY-DATUM.
XVIBDMEAS-MEASVALUE = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASVALUECMPL = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASUNIT = 'M2' .
APPEND XVIBDMEAS TO XVIBDMEAS .
CLEAR XVIBDMEAS .

ENDIF .

IF ( GS_FINAL-SHLAND IS NOT INITIAL ). "M021


IT_MEASUREMENTLOG-MEASUREMENT = 'M021'. "LOG
READ TABLE MEASUREMENT_OLD WITH KEY MEASUREMENT = 'M021'.
IF ( SY-SUBRC EQ 0 ).
MEASUREMENT-CHANGE_INDICATOR = 'U'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U'. "LOG
IT_MEASUREMENTLOG-OLD_VALUE = MEASUREMENT_OLD-VALUE_AVAIL. "LOG
ELSE.
MEASUREMENT-CHANGE_INDICATOR = 'I'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I'. "LOG
ENDIF.
IT_MEASUREMENTLOG-NEW_VALUE = GS_FINAL-SHLAND. "LOG
MEASUREMENT-MEASUREMENT = 'M021'.

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
MEASUREMENT-VALUE_AVAIL = MEASUREMENT_OLD-VALUE_AVAIL.
ELSE .
MEASUREMENT-VALUE_AVAIL = GS_FINAL-SHLAND.
ENDIF .
IF MEASUREMENT_OLD-VALID_FROM IS INITIAL .

MEASUREMENT-VALID_FROM = '00000000'.
ELSE .
MEASUREMENT-VALID_FROM = RENTAL_OBJECT-OBJECT_VALID_FROM .
ENDIF .

IF MEASUREMENT-CHANGE_INDICATOR = 'I'.
MEASUREMENT-VALID_TO = '00000000'. .
ELSE .
MEASUREMENT-VALID_TO = SY-DATUM - 1 . "'99991231' .
ENDIF .
MEASUREMENT-UNIT = 'M2'.
APPEND MEASUREMENT TO MEASUREMENT.
APPEND IT_MEASUREMENTLOG TO IT_MEASUREMENTLOG. "LOG
CLEAR MEASUREMENT.
CLEAR IT_MEASUREMENTLOG. "LOG
*-----------------------------------------------------

XVIBDMEAS-INTRENO = REKEY .
XVIBDMEAS-MEAS = 'M021' .
XVIBDMEAS-VALIDFROM = SY-DATUM.
XVIBDMEAS-MEASVALUE = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASVALUECMPL = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASUNIT = 'M2' .
APPEND XVIBDMEAS TO XVIBDMEAS .

CLEAR XVIBDMEAS .
*-----------------------------------------------------
ENDIF.

IF ( GS_FINAL-SHGARDEN IS NOT INITIAL ). "M020


IT_MEASUREMENTLOG-MEASUREMENT = 'M020'. "LOG
READ TABLE MEASUREMENT_OLD WITH KEY MEASUREMENT = 'M020'.
IF ( SY-SUBRC EQ 0 ).
MEASUREMENT-CHANGE_INDICATOR = 'U'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U'. "LOG
IT_MEASUREMENTLOG-OLD_VALUE = MEASUREMENT_OLD-VALUE_AVAIL. "LOG
ELSE.
MEASUREMENT-CHANGE_INDICATOR = 'I'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I'. "LOG
ENDIF.
IT_MEASUREMENTLOG-NEW_VALUE = GS_FINAL-SHGARDEN. "LOG
MEASUREMENT-MEASUREMENT = 'M020'.

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
MEASUREMENT-VALUE_AVAIL = MEASUREMENT_OLD-VALUE_AVAIL.
ELSE .
MEASUREMENT-VALUE_AVAIL = GS_FINAL-SHGARDEN.
ENDIF .
IF MEASUREMENT_OLD-VALID_FROM IS INITIAL .

MEASUREMENT-VALID_FROM = '00000000'.
ELSE .
MEASUREMENT-VALID_FROM = RENTAL_OBJECT-OBJECT_VALID_FROM .
ENDIF .

IF MEASUREMENT-CHANGE_INDICATOR = 'I'.
MEASUREMENT-VALID_TO = '00000000'. .
ELSE .
MEASUREMENT-VALID_TO = SY-DATUM - 1 . "'99991231' .
ENDIF .
MEASUREMENT-UNIT = 'M2'.
APPEND MEASUREMENT TO MEASUREMENT.
APPEND IT_MEASUREMENTLOG TO IT_MEASUREMENTLOG. "LOG
CLEAR MEASUREMENT.
CLEAR IT_MEASUREMENTLOG. "LOG

*---------------------------------------------------

XVIBDMEAS-INTRENO = REKEY .
XVIBDMEAS-MEAS = 'M020' .
XVIBDMEAS-VALIDFROM = SY-DATUM.
XVIBDMEAS-MEASVALUE = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASVALUECMPL = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASUNIT = 'M2' .
APPEND XVIBDMEAS TO XVIBDMEAS .
CLEAR XVIBDMEAS .

*---------------------------------------------------
ENDIF.

IF ( GS_FINAL-INDOOR_AREA IS NOT INITIAL ) . "A501


IT_MEASUREMENTLOG-MEASUREMENT = 'A501'. "LOG
READ TABLE MEASUREMENT_OLD WITH KEY MEASUREMENT = 'A501'. " KHALED
21/6/2021
IF ( SY-SUBRC EQ 0 ).
MEASUREMENT-CHANGE_INDICATOR = 'U'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U'. "LOG
IT_MEASUREMENTLOG-OLD_VALUE = MEASUREMENT_OLD-VALUE_AVAIL. "LOG
ELSE.
MEASUREMENT-CHANGE_INDICATOR = 'I'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I'. "LOG
ENDIF.
IT_MEASUREMENTLOG-NEW_VALUE = GS_FINAL-INDOOR_AREA.
MEASUREMENT-MEASUREMENT = 'A501'.

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
MEASUREMENT-VALUE_AVAIL = MEASUREMENT_OLD-VALUE_AVAIL.
ELSE .
MEASUREMENT-VALUE_AVAIL = GS_FINAL-INDOOR_AREA.
ENDIF .

IF MEASUREMENT_OLD-VALID_FROM IS INITIAL .

MEASUREMENT-VALID_FROM = '00000000'.
ELSE .
MEASUREMENT-VALID_FROM = RENTAL_OBJECT-OBJECT_VALID_FROM .
ENDIF .

IF MEASUREMENT-CHANGE_INDICATOR = 'I'.
MEASUREMENT-VALID_TO = '00000000'. .
ELSE .
MEASUREMENT-VALID_TO = SY-DATUM - 1 . "'99991231' .
ENDIF .
MEASUREMENT-UNIT = 'M2'.
APPEND MEASUREMENT TO MEASUREMENT.
APPEND IT_MEASUREMENTLOG TO IT_MEASUREMENTLOG. "LOG
CLEAR MEASUREMENT.
CLEAR IT_MEASUREMENTLOG. "LOG

*--------------------------------------------------------

XVIBDMEAS-INTRENO = REKEY .
XVIBDMEAS-MEAS = 'A501' .
XVIBDMEAS-VALIDFROM = SY-DATUM.
XVIBDMEAS-MEASVALUE = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASVALUECMPL = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASUNIT = 'M2' .
APPEND XVIBDMEAS TO XVIBDMEAS .
CLEAR XVIBDMEAS .

*--------------------------------------------------------
ENDIF.

IF ( GS_FINAL-USABLE_SPACE IS NOT INITIAL ) . "A003


IT_MEASUREMENTLOG-MEASUREMENT = 'A003'. "LOG
READ TABLE MEASUREMENT_OLD WITH KEY MEASUREMENT = 'A003'. " KHALED
21/6/2021
IF ( SY-SUBRC EQ 0 ).
MEASUREMENT-CHANGE_INDICATOR = 'U'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U'. "LOG
IT_MEASUREMENTLOG-OLD_VALUE = MEASUREMENT_OLD-VALUE_AVAIL. "LOG
ELSE.
MEASUREMENT-CHANGE_INDICATOR = 'I'.
IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I'. "LOG
ENDIF.
IT_MEASUREMENTLOG-NEW_VALUE = GS_FINAL-USABLE_SPACE. "LOG
MEASUREMENT-MEASUREMENT = 'A003'.

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
MEASUREMENT-VALUE_AVAIL = MEASUREMENT_OLD-VALUE_AVAIL.
ELSE .
MEASUREMENT-VALUE_AVAIL = '001'.
ENDIF .

IF MEASUREMENT_OLD-VALID_FROM IS INITIAL .

MEASUREMENT-VALID_FROM = '00000000'.
ELSE .
MEASUREMENT-VALID_FROM = RENTAL_OBJECT-OBJECT_VALID_FROM .
ENDIF .

IF MEASUREMENT-CHANGE_INDICATOR = 'I'.
MEASUREMENT-VALID_TO = '00000000'. .
ELSE .
MEASUREMENT-VALID_TO = SY-DATUM - 1 . "'99991231' .
ENDIF .
MEASUREMENT-UNIT = 'M2'.
APPEND MEASUREMENT TO MEASUREMENT.
APPEND IT_MEASUREMENTLOG TO IT_MEASUREMENTLOG. "LOG
CLEAR MEASUREMENT.
CLEAR IT_MEASUREMENTLOG. "LOG

*--------------------------------------------------------

XVIBDMEAS-INTRENO = REKEY .
XVIBDMEAS-MEAS = 'A501' .
XVIBDMEAS-VALIDFROM = SY-DATUM.
XVIBDMEAS-MEASVALUE = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASVALUECMPL = GS_FINAL-RESIDENT .
XVIBDMEAS-MEASUNIT = 'M2' .
APPEND XVIBDMEAS TO XVIBDMEAS .
CLEAR XVIBDMEAS .

*--------------------------------------------------------
ENDIF.

CALL FUNCTION 'BAPI_RE_RO_CHANGE'


EXPORTING
COMPCODE = COMPCODE
BUSINESSENTITYNUMBER = BUSINESSENTITYNUMBER
RENTALOBJECTNUMBER = RENTALOBJECTNUMBER
TABLES
CONDITION = CONDITION
MEASUREMENT = MEASUREMENT
RETURN = RETURN.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.

READ TABLE MEASUREMENT INDEX 1 .

IF MEASUREMENT-CHANGE_INDICATOR = 'U'.
INSERT VIBDMEAS FROM TABLE XVIBDMEAS .
CLEAR XVIBDMEAS[] .
ENDIF.

"****** 17-08-2022 Prepare IT_LINES lines as the mail body ********


IF IT_LINES IS INITIAL .
CONCATENATE 'The following units were changed by:<b>'
SY-UNAME '</b>on<b>' SY-DATUM '</b>at<b>' SY-UZEIT
'</b>using t-code<b>' SY-TCODE '</b>on<b>' SY-SYSID
'</b>server.'
INTO WA_LINES SEPARATED BY SPACE.
APPEND WA_LINES TO IT_LINES.
ENDIF .

"IF Changes are successful, add lines to mail.


READ TABLE RETURN WITH KEY TYPE = 'S'
ID = 'BAPI'
NUMBER = 002.
IF ( SY-SUBRC EQ 0 ). "CHANGES SUCCESSFULLY APPLIED
"PRICE CHANGE
IF ( CONDITION[] IS NOT INITIAL ). "CHANGE UNIT PRICE
"WA_LINES = GS_FINAL-SMENR .
READ TABLE CONDITION_OLD INDEX 1.
READ TABLE CONDITION INDEX 1.

OLD_PRICE = CONDITION_OLD-UNIT_PRICE.
NEW_PRICE = CONDITION-UNIT_PRICE.

SHIFT OLD_PRICE LEFT DELETING LEADING SPACE.


SHIFT NEW_PRICE LEFT DELETING LEADING SPACE.

CONCATENATE '<br/>Unit<b>' RENTAL_OBJECT-IDENT_KEY '</b>price has been


changed from'
OLD_PRICE 'to<b>' NEW_PRICE '</b>.<br/>' INTO WA_LINES SEPARATED BY
SPACE.
APPEND WA_LINES TO IT_LINES.

CLEAR OLD_PRICE.
CLEAR NEW_PRICE.
ENDIF.
"MEASUREMENT CHANGE
IF ( IT_MEASUREMENTLOG[] IS NOT INITIAL ).
LOOP AT IT_MEASUREMENTLOG.

SHIFT IT_MEASUREMENTLOG-OLD_VALUE LEFT DELETING LEADING SPACE.


SHIFT IT_MEASUREMENTLOG-NEW_VALUE LEFT DELETING LEADING SPACE.

IF ( IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'U' ).

CONCATENATE '<br/>Unit<b>' RENTAL_OBJECT-IDENT_KEY '</b>measurement'


IT_MEASUREMENTLOG-MEASUREMENT 'has been updated from'
IT_MEASUREMENTLOG-OLD_VALUE 'to<b>'
IT_MEASUREMENTLOG-NEW_VALUE '</b>.<br/>' INTO WA_LINES
SEPARATED BY SPACE.

APPEND WA_LINES TO IT_LINES.

ELSEIF ( IT_MEASUREMENTLOG-CHANGE_INDICATOR = 'I' ).

CONCATENATE '<br/>Unit<b>' RENTAL_OBJECT-IDENT_KEY '</b>measurement'


IT_MEASUREMENTLOG-MEASUREMENT 'has been added with value<b>'
IT_MEASUREMENTLOG-NEW_VALUE '</b>.<br/>' INTO WA_LINES
SEPARATED BY SPACE.

APPEND WA_LINES TO IT_LINES.


ENDIF.

ENDLOOP.
ENDIF.

ENDIF.

"****** END Prepare IT_LINES **************************************

LOOP AT RETURN.
CALL FUNCTION 'FORMAT_MESSAGE'
EXPORTING
ID = RETURN-ID
LANG = SY-LANGU
NO = RETURN-NUMBER
V1 = RETURN-MESSAGE_V1
V2 = RETURN-MESSAGE_V2
V3 = RETURN-MESSAGE_V3
V4 = RETURN-MESSAGE_V4
IMPORTING
MSG = WA_DOWNLOAD-MESSAGE "Message text
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
WA_DOWNLOAD-RENTALOBJ = G_CONDITION-CALCULATION_OBJECT_ID.
APPEND WA_DOWNLOAD TO IT_DOWNLOAD.
CLEAR WA_DOWNLOAD.
ENDLOOP.
CLEAR: GS_FINAL,LT_MSG[],G_CONDITION ,CONDITION[],RETURN[],
CONDITION_OLD[], MEASUREMENT[], MEASUREMENT_OLD[],
IT_MEASUREMENTLOG[] .

ENDLOOP.
ENDFORM. " PROCESS_BDC

*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*

FORM BDC_DYNPRO USING PROGRAM DYNPRO.


CLEAR GS_BDC.
GS_BDC-PROGRAM = PROGRAM.
GS_BDC-DYNPRO = DYNPRO.
GS_BDC-DYNBEGIN = 'X'.
APPEND GS_BDC TO GT_BDC.
ENDFORM. "bdc_dynpro

*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*

FORM BDC_FIELD USING FNAM FVAL.


* IF FVAL <> NODATA.
CLEAR GS_BDC.
GS_BDC-FNAM = FNAM.
GS_BDC-FVAL = FVAL.
SHIFT GS_BDC-FVAL LEFT DELETING LEADING SPACE.
APPEND GS_BDC TO GT_BDC.
* ENDIF.
ENDFORM. "bdc_field

*&---------------------------------------------------------------------*
*& Form: DOWNLOAD_EXCEL_LOG
*&---------------------------------------------------------------------*
* Description: DOWNLOAD THE LOG FILE OF THE CHANGES ON RO OBJECT
* WITH THE SUCCESS & FAILURE MESSAGES
*----------------------------------------------------------------------*
FORM DOWNLOAD_EXCEL_LOG.

DATA FILENAME_DWN TYPE STRING.


CONCATENATE 'D:/DocCreation_log' SYST-DATUM '.xls' INTO FILENAME_DWN.

DATA LENGHT TYPE I.

CALL METHOD CL_GUI_FRONTEND_SERVICES=>GUI_DOWNLOAD


EXPORTING
FILENAME = FILENAME_DWN "'C:/log.xls'
WRITE_FIELD_SEPARATOR = '#' "'X'
CHANGING
DATA_TAB = IT_DOWNLOAD.

CONCATENATE 'Change unit price or measurements on' SY-SYSID


INTO TITLE SEPARATED BY SPACE.

* DATA : I_RECIPIENT TYPE AD_SMTPADR .


*
* I_RECIPIENT = 'hmaher@ad-holding.com'. "'MElbadrashiny@ad-holding.com' .
*
* CALL FUNCTION 'EFG_GEN_SEND_EMAIL'
* EXPORTING
* I_TITLE = TITLE
* I_SENDER = 'SAP.Notifications@ad-holding.com'
* I_RECIPIENT = I_RECIPIENT
* I_FLG_COMMIT = 'X'
* I_FLG_SEND_IMMEDIATELY = 'X'
* TABLES
* I_TAB_LINES = IT_LINES
** I_TAB_RECIPIENTS =
* EXCEPTIONS
* NOT_QUALIFIED = 1
* FAILED = 2
* OTHERS = 3.
*
* IF SY-SUBRC <> 0.
** Implement suitable error handling here
* ENDIF.

"SO_NEW_DOCUMENT_ATT_SEND_API1

DESCRIBE TABLE IT_LINES LINES LENGHT.


IF ( LENGHT GT 1 ).
PERFORM SEND_MAIL.
ENDIF.

ENDFORM. " DOWNLOAD_LOG


FORM SEND_MAIL.

CLASS cl_bcs DEFINITION LOAD.

"******************************************************"
" SAP send mail with CL_BCS
"******************************************************"
DATA: lo_document TYPE REF TO cl_document_bcs.
DATA: lx_document_bcs TYPE REF TO cx_document_bcs.
DATA: LX_SEND_REQ_BCS TYPE REF TO CX_SEND_REQ_BCS.
DATA: LX_ADDRESS_BCS TYPE REF TO CX_ADDRESS_BCS.
DATA: lo_send_request TYPE REF TO cl_bcs.
DATA: lo_sender TYPE REF TO if_sender_bcs.
DATA: lv_sent_to_all TYPE os_boolean .
DATA: lt_att_content_hex TYPE solix_tab .
DATA: lt_message_body TYPE bcsy_text.
DATA: lv_sender_email TYPE adr6-smtp_addr.
DATA: LV_EMAIL TYPE ADR6-SMTP_ADDR.
DATA: lo_recipient TYPE REF TO if_recipient_bcs .
DATA: lv_with_error_screen TYPE os_boolean .
DATA: lv_length_mime TYPE num12.
DATA: lv_mime_type TYPE w3conttype.
DATA: lt_attachment TYPE solix_tab.
DATA: lv_attachment_type TYPE soodk-objtp.
DATA: lv_attachment_size TYPE sood-objlen.
DATA: lv_attachment_subject TYPE sood-objdes.
DATA: lt_body_hex TYPE solix_tab.
DATA: lv_mail_subject TYPE so_obj_des.
DATA: lv_type TYPE string.
DATA: lv_extension TYPE string.
DATA: lv_docid_str(12) .

lv_sender_email = 'SAP.Notifications@ad-holding.com'.
lv_email = 'MElbadrashiny@ad-holding.com'. "'hmaher@ad-holding.com'.
lv_mail_subject = TITLE.

* CALL FUNCTION 'SO_SOLITAB_TO_SOLIXTAB'


* EXPORTING
* IP_SOLITAB = IT_LINES
* IMPORTING
* EP_SOLIXTAB = lt_body_hex
.

"-------------------------------------------"
" Send Email
"-------------------------------------------"
TRY.

lo_send_request = cl_bcs=>create_persistent( ).

" Set the subjest of email


"lv_mail_subject up to 50 c.

" Send in HTML format


lo_document = cl_document_bcs=>create_document(
i_type = 'HTM'
"i_hex = lt_body_hex
I_TEXT = IT_LINES
i_subject = lv_mail_subject ) .

" add the document as an attachment


** IF lt_attachment[] IS NOT INITIAL .
**
** lv_attachment_size = lv_length_mime.
** lt_att_content_hex[] = lt_attachment[].
**
** lv_attachment_subject = "Your Attachment Name" .
**
** lo_document->add_attachment(
** i_attachment_type = lv_attachment_type
** i_attachment_size = lv_attachment_size
** i_attachment_subject = lv_attachment_subject
** i_att_content_hex = lt_att_content_hex ).
** ENDIF.

"****************************"
" EMAIL
"*****************************"
" set the e-mail address of the sender:
** lo_sender = cl_sapuser_bcs=>create( sy-uname ).

lo_sender = cl_cam_address_bcs=>create_internet_address(
i_address_string = lv_sender_email ).

" set the e-mail address of the recipient

lo_recipient = cl_cam_address_bcs=>create_internet_address(
i_address_string = lv_email ).
lo_send_request->add_recipient( lo_recipient ) .
** LOOP AT lt_receiver ASSIGNING <fs_receiver>.
** lo_recipient = cl_sapuser_bcs=>create( sy-uname ).
** lo_send_request->add_recipient( lo_recipient ) .
** ENDLOOP.

" assign document to the send request:


lo_send_request->set_document( lo_document ).

" add the sender:


lo_send_request->set_sender( lo_sender ).

MOVE space TO lv_with_error_screen.


" SAP Send Email CL_BCS

lo_send_request->SET_SEND_IMMEDIATELY('X').

lv_sent_to_all = lo_send_request->send( lv_with_error_screen ).

COMMIT WORK.

CATCH cx_document_bcs INTO lx_document_bcs.


CATCH CX_SEND_REQ_BCS INTO LX_SEND_REQ_BCS.
CATCH CX_ADDRESS_BCS INTO LX_ADDRESS_BCS.

ENDTRY.

ENDFORM.

You might also like