Vous êtes sur la page 1sur 46

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

*& Report Z_SC_TAT_REPORT_3


*&
*&---------------------------------------------------------------------*
*& BETC Specs / Task No : BE83
*& Description : LAVA Service Center : TAT Report - New fields
*& Developed by : BETC
*&---------------------------------------------------------------------*


REPORT z_sc_tat_report_3.

TYPE-POOLS:slis.
TYPES: BEGIN OF ty_output,
cname TYPE char35,
kunum TYPE char10,
qmnum TYPE char20,
call_type TYPE char25,
valid TYPE char15,"Valid / Invalid
doa_type TYPE char20,
mapar TYPE char30,
sernr TYPE char30,
serge TYPE char30,
remark TYPE char200,
cust_name TYPE char35,
cust_phone TYPE char25,
erdat TYPE char25,
req_id TYPE char20,
req_id_on TYPE char25,
req_id_at TYPE char25,
fwd_req_id TYPE char20,
fwd_req_id_on TYPE char20,
warranty TYPE char10,
model TYPE char25,
branch TYPE char30,
asm_name TYPE char35,
busm TYPE char10,
busm_name TYPE char45,
spl_doa_no TYPE char20,
spl_doa_on TYPE char30,
doa_pgr_date TYPE char20,
bucket_stat TYPE char_60,
* sub_status TYPE char_60,
age TYPE char10,
s2rf_on TYPE char25,
s2rf_at TYPE char25,
ssd_id TYPE char20,
ssd_name TYPE char35,
bztxt TYPE char20, "District
regio TYPE char10, "State
bezei TYPE bezei20," State
ort01 TYPE char35, "City
rev_courier_id TYPE char25,"added by a.srinivasan
rev_courier_name TYPE name1_gp, "added by a.srinivasan.
rev_cour_pick_on TYPE char20,"reverse courier pick date "added by a
.srinivasan.
cour_pick_on TYPE char20,"courier pick at
cour_pick_at TYPE char20,"
rev_cour_pick_at TYPE char20,"reverse courier pick at " added by a.
srinivasan.
rev_dock_no TYPE char20, "reverse document no "added by a.srinivasa
n.
rf_recv_on TYPE char25,"RF Received Date"ADDED by a.srinivasan.
rf_recv_at TYPE char25,"RF Received At
under_rr_on TYPE char25,"Under Repair Date
under_rr_at TYPE char25, "Under Repair Time
rd_dispatch_on TYPE char25,"Ready for Dispatch Date
rd_dispatch_at TYPE char25, "Ready for Dispatch On
fwd_created_on TYPE char25, "Forward Challan Date
fwd_created_at TYPE char25, "Forward challan time
fwd_courier_id TYPE name1_gp, "Forward courier ID
fwd_courier_name TYPE name1_gp, "Forward courier name
fwd_docket_no TYPE char30, "forward docket number
ssd_recv_date TYPE char25, "Received at SSD Date
cust_delv_date TYPE char30, "Delivered to Customer Date
cust_delv_time TYPE char30, "Delivered to Customer Time
fault_cod TYPE char20,"Fault code
rf_fault_cod TYPE char20,"Fault code
fault_txt TYPE char50,"Fault code
stndby_issued TYPE char20, "standy by issued.
stndby_model TYPE char25, "stand by model.
stndby_imei TYPE char30, "stand by imei
stndby_issued_on TYPE char30, "stand by issues on
rf_tat TYPE char20,"RF Call - RF TAT
lava_cust_tat TYPE char20, "LAVA Customer TAT
repair_tat TYPE char20, "Repair TAT
action_cod TYPE char20," action code
rf_action_cod TYPE char20," action code
action_txt TYPE qtxtcdgrfe," action taken
rep_comp_dt TYPE char20, "Repair Complete Date
ssd_tat TYPE char25,"RF Call - SSD TAT
cour_rl_tat TYPE char25, "RF Call - Reverse TAT
"RF_TAT type char5, "rf tat
cour_fl_tat TYPE char25, "RF Call - Forward TAT
bu TYPE char40,"business unit description
part_code TYPE char30,"part code
part_desc TYPE char50, "part descritpion
pcba_req_on TYPE char25, "Part Requisition Date
cfa_stock TYPE char20, "CFA Stock
mnoi_stock TYPE char20, " Stock at MNOI
asp_stock TYPE char20, " Stock at ASP
part_consumed TYPE char140,"part consumed
deviceid TYPE deviceid,
rf_deviceid TYPE deviceid,
afih_deviceid TYPE deviceid,
curr_st TYPE char40,
labst TYPE char30,
courier_id TYPE char30,
ssd_recv_time TYPE char20,
kurztext TYPE kurztext, "Symptom
sym_code TYPE char20, "Symptom Code
cust_intm_dt TYPE char25, "Customer Intimation Date
doa_remk TYPE char100,"Reason for DOA
pcba_rep TYPE char20,"Replacement
pcba_rep_model TYPE zmodel,"Replacement Model
pcba_rep_imei TYPE mapar,"Replacement IMEI
pcba_rep_date TYPE char20," Replacement Date
rf_call TYPE char20,
rf_pcba_rep TYPE char20,"Replacement
rf_pcba_rep_model TYPE zmodel,"Replacement Model
rf_pcba_rep_imei TYPE mapar,"Replacement IMEI
rf_pcba_rep_date TYPE char25," Replacement Date
els_status TYPE char25, "ELS STATUS
END OF ty_output.
TYPES: BEGIN OF tt_solisti1,
line(3000) TYPE c,
END OF tt_solisti1.

DATA:l_split VALUE ','.

DATA: gt_st_tat TYPE TABLE OF zs3n_st_tat_report,
gs_st_tat TYPE zs3n_st_tat_report,

gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output,

gt_kunnr TYPE TABLE OF zla_rs_kunnr,
gs_kunnr TYPE zla_rs_kunnr,

gv_date TYPE zs3n_t_notif_mas-created_on,
gv_req_id TYPE zs3n_t_notif_mas-req_id,
gv_fwd_req TYPE zs3n_t_notif_mas-fwd_req_id,
gv_ssd_id TYPE zs3n_t_notif_mas-ssd_id,
gv_qmnum TYPE zs3n_t_notif_mas-qmnum,
gv_bu TYPE zbu_region-bu.

DATA:ls_fieldcat TYPE slis_t_fieldcat_alv,
lt_fieldcat TYPE slis_fieldcat_alv.

DATA: wk_repid TYPE sy-repid,
wk_layout TYPE slis_layout_alv.

DATA: gt_dd07t TYPE TABLE OF dd07t,
gs_dd07t TYPE dd07t.


**Variable for the Email functionality
DATA: gt_attachment TYPE TABLE OF tt_solisti1,
gs_attachment TYPE tt_solisti1,

gt_message TYPE TABLE OF solisti1,
gs_message TYPE solisti1,

gt_mess_att TYPE TABLE OF solisti1,
gs_mess_att TYPE solisti1,

gt_mail TYPE TABLE OF zemail_1,
gs_mail TYPE zemail_1,

gt_receivers TYPE TABLE OF somlreci1,
gs_receivers TYPE somlreci1,

gt_packing_list TYPE TABLE OF sopcklsti1,
gs_packing_list TYPE sopcklsti1,

gt_lines2 TYPE TABLE OF tline,
gs_lines2 TYPE tline,

gt_contents TYPE TABLE OF solisti1,
gs_contents TYPE solisti1,

gv_cnt TYPE i,
gv_format(4) TYPE c ,"so_obj_tp ,
gv_attdescription(40) TYPE c ,
gv_attfilename TYPE so_obj_des ,
gv_name TYPE string,
gv_attachment_desc(22) TYPE c,
gc_cnt TYPE i,
gv_sent_all(1) TYPE c,
gv_doc_data LIKE sodocchgi1,
gv_error TYPE sy-subrc,
gv_buffer TYPE string.

CONSTANTS: gc_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
gc_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf,
gc_newline TYPE c VALUE cl_abap_char_utilities=>newline,
gc_form_feed TYPE c VALUE cl_abap_char_utilities=>form_feed.

FIELD-SYMBOLS : <fs_st_tat> TYPE zs3n_st_tat_report.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_date FOR gv_date,
s_del_dt FOR gv_date,
s_req_id FOR gv_req_id NO-DISPLAY,
s_fwd_rq FOR gv_fwd_req NO-DISPLAY,
s_kunnr FOR gv_ssd_id NO-DISPLAY,
s_qmnum FOR gv_qmnum.
PARAMETERS: p_bu TYPE zbu_region-bu.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_del TYPE char1 AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_pen TYPE char1 AS CHECKBOX DEFAULT 'X'.
PARAMETERS: p_doa TYPE char1 AS CHECKBOX.
PARAMETERS: p_snd2rf TYPE char1 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_email TYPE char1 RADIOBUTTON GROUP g1.
PARAMETERS: p_local TYPE char1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
PARAMETERS: p_server TYPE char1 RADIOBUTTON GROUP g1.
PARAMETERS: p_folder TYPE char40 DEFAULT 'C:\Temp\'.
PARAMETERS: p_file TYPE char40 .
*SELECTION-SCREEN COMMENT /4(50) text-004.
SELECTION-SCREEN END OF BLOCK b3.

PARAMETERS: p_old TYPE char1 AS CHECKBOX.

START-OF-SELECTION.
PERFORM get_data.
PERFORM build_excel_tat.
IF p_email IS NOT INITIAL AND sy-batch IS NOT INITIAL.
PERFORM send_email_tat.
ELSE.
PERFORM save_tat.
ENDIF.
* PERFORM build_excel.
* IF p_email IS NOT INITIAL AND sy-batch IS NOT INITIAL.
* PERFORM send_email.
* ELSE.
* PERFORM save_pc.
* ENDIF.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
DATA lv_skip TYPE xfeld.
DATA lv_delivered TYPE char1.
CLEAR lv_skip.

IF p_bu IS NOT INITIAL.
PERFORM get_kunnr.
ENDIF.

*Only delivered
IF p_del = 'X' .
lv_delivered = 'D'.
ENDIF.
*Only Pending
IF p_pen = 'X' .
lv_delivered = 'P'.
ENDIF.
*Both
IF p_del = 'X' AND
p_pen = 'X' .
lv_delivered = 'B'.
ENDIF.

APPEND LINES OF s_kunnr TO gt_kunnr.


CALL FUNCTION 'ZS3N_FM_GET_TAT_DETAIL3'
EXPORTING
im_delivered = lv_delivered
im_doa_call = p_doa
im_send_2_rf = p_snd2rf
im_skip = lv_skip
im_old = p_old
TABLES
et_output_data = gt_st_tat
it_dates = s_date
it_del_dt = s_del_dt
it_req_id = s_req_id
it_fwd_req_id = s_fwd_rq
it_kunnr = gt_kunnr
it_qmnum = s_qmnum.

SELECT *
FROM dd07t
INTO TABLE gt_dd07t
WHERE domname = 'ZS3N_DOM_NOTIF_STATUS'
AND ddlanguage = 'E'.
IF sy-subrc NE 0.
*No data found
ENDIF.

ENDFORM. "get_data


*&---------------------------------------------------------------------*
*& Form build_excel_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_excel_tat.

DATA: gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output.
DATA: lv_date TYPE char8.
DATA: lt_st_tat TYPE TABLE OF zs3n_st_tat_report.
lt_st_tat[] = gt_st_tat[].

SORT lt_st_tat BY qmnum part_code.
DELETE ADJACENT DUPLICATES FROM lt_st_tat COMPARING qmnum part_code.

gs_output-rep_comp_dt = 'Repair Complete Date'.
gs_output-cust_intm_dt = 'Customer Intimation Date'.
gs_output-doa_remk = 'Reason for DOA'.
gs_output-action_txt = 'Action Code Desc'.
gs_output-action_cod = 'Action Code'.
gs_output-rf_action_cod = 'RF - Action Code'.
gs_output-asm_name = 'ASO/ASM Name'.
gs_output-busm = 'BUSM'.
gs_output-busm_name = 'BUSM Name'.
gs_output-spl_doa_no = 'Special DOA Number'.
gs_output-spl_doa_on = 'Special DOA Approved On'.
gs_output-doa_pgr_date = 'DOA PGR Date'.
gs_output-asp_stock = 'Service Center Stock'.
gs_output-bezei = 'State'.
gs_output-branch = 'Branch Name'.
gs_output-bu = 'BU Name'.
gs_output-bucket_stat = 'Workorder Status'.
* gs_output-sub_status = 'Workorder Sub Status'.
gs_output-age = 'Ageing'.
gs_output-bztxt = 'District'.
gs_output-call_type = 'Call Type'.
gs_output-valid = 'Valid/Invalid'.
gs_output-doa_type = 'DOA Type'.
gs_output-cfa_stock = 'CFA Stock'.
gs_output-cname = 'ASP Name'.
gs_output-cour_fl_tat = 'RF Call - Forward TAT'.
gs_output-cour_pick_at = 'Courier Picked Time'.
gs_output-cour_pick_on = 'Courier Picked Date'.
gs_output-cour_rl_tat = 'RF Call - Reverse TAT'.
gs_output-courier_id = 'Forward Courier Id'.
gs_output-curr_st = 'Current Status'.
gs_output-cust_delv_date = 'Delivery Date'.
gs_output-cust_delv_time = 'Delivered to Customer Time'.
gs_output-cust_name = 'Customer Name'.
gs_output-cust_phone = 'Customer Contact Number'.
gs_output-deviceid = 'Engineer Remarks'.
gs_output-rf_deviceid = 'RF - Engineer Remarks'.
gs_output-afih_deviceid = 'Device Id'.
gs_output-erdat = 'Creation Date'.
gs_output-fault_cod = 'Fault Code'.
gs_output-rf_fault_cod = 'Fault Code'.
gs_output-fault_txt = 'Fault Code Desc'.
gs_output-fwd_courier_id = 'Forward courier ID'.
gs_output-fwd_courier_name = 'Forward courier name'.
gs_output-fwd_created_at = 'Forward Challan TIme'.
gs_output-fwd_created_on = 'Forward Challan Date'.
gs_output-fwd_docket_no = 'Forward Docket No.'.
gs_output-fwd_req_id = 'Forward Challan No.'.
gs_output-fwd_req_id_on = 'FWD Pick Req.Date'.
gs_output-kunum = 'ASP Code'.
gs_output-kurztext = 'Symptom Code Description'.
gs_output-sym_code = 'Symptom Code'.
gs_output-lava_cust_tat = 'Customer TAT'.
gs_output-repair_tat = 'Repair TAT'.
gs_output-mapar = 'IMEI Number'.
gs_output-sernr = 'Serial Number'.
gs_output-serge = 'Secondary IMEI'.
gs_output-remark = 'Problem Reported By Customer'.
gs_output-mnoi_stock = 'MNOI Stock'.
gs_output-model = 'Model'.
gs_output-ort01 = 'City'.
gs_output-part_code = 'Part Code'.
gs_output-part_desc = 'Part Description'.
gs_output-part_consumed = 'RF - Part Consumed'.
gs_output-part_desc = 'Part Description'.
gs_output-pcba_req_on = 'Part Requisition Date'.
gs_output-qmnum = 'Workorder Number'.
gs_output-rd_dispatch_at = 'Ready for Dispatch Time'.
gs_output-rd_dispatch_on = 'Ready for Dispatch Date'.
gs_output-regio = 'State'.
gs_output-req_id = 'Reverse Challan No.'.
gs_output-req_id_at = 'Reverse Challan Time'.
gs_output-req_id_on = 'Reverse Challan Date'.
gs_output-rev_courier_id = 'Reverse Courier ID'.
gs_output-rev_courier_name = 'Reverse Courier Name'.
gs_output-rev_dock_no = 'Reverse Docket No'.
gs_output-rf_recv_at = 'RF Received Time'.
gs_output-rf_recv_on = 'RF Received Date'.
gs_output-rf_tat = 'RF Call - RF TAT'.
gs_output-rf_call = 'RF Call'.
gs_output-s2rf_at = 'Sent To RF Time'.
gs_output-s2rf_on = 'Send To RF Date'.
gs_output-ssd_id = 'Service Centre Code'.
gs_output-ssd_name = 'Service Centre Name'.
gs_output-ssd_recv_date = 'Received at SSD Date'.
gs_output-ssd_recv_time = 'Received at SSD Time'.
gs_output-ssd_tat = 'RF Call SSD TAT'.
gs_output-stndby_imei = 'Issued IMEI'.
gs_output-stndby_issued = 'Standy by issued'.
gs_output-stndby_model = 'Issued model'.
gs_output-stndby_issued_on = 'Standy by issued On'.
gs_output-under_rr_at = ' Under Repair Time'.
gs_output-under_rr_on = 'Under Repair Date'.
gs_output-warranty = 'Warranty'.
gs_output-pcba_rep = 'Replacement'.
gs_output-rf_pcba_rep = 'RF - Replacement'.
gs_output-pcba_rep_model = 'Replacement Model'.
gs_output-rf_pcba_rep_model = 'RF - Replacement Model'.
gs_output-pcba_rep_imei = 'Replacement IMEI'.
gs_output-rf_pcba_rep_imei = 'RF - Replacement IMEI'.
gs_output-pcba_rep_date = 'Replacement Date'.
gs_output-rf_pcba_rep_date = 'RF - Replacement Date'.
gs_output-els_status = 'ELS Status'.



CONCATENATE gs_output-qmnum
gs_output-erdat
gs_output-call_type
gs_output-valid
gs_output-doa_type
gs_output-ssd_id
gs_output-ssd_name
gs_output-bu
gs_output-branch
gs_output-bezei
gs_output-ort01
gs_output-asm_name
gs_output-busm
gs_output-busm_name
gs_output-spl_doa_no
gs_output-spl_doa_on
gs_output-doa_pgr_date
gs_output-warranty
gs_output-cust_name
gs_output-cust_phone
gs_output-model
gs_output-mapar
gs_output-sernr
gs_output-serge
* Serial No
gs_output-sym_code
gs_output-kurztext
gs_output-remark
* gs_output-sub_status
gs_output-bucket_stat
gs_output-age
gs_output-fault_cod
gs_output-fault_txt
gs_output-action_cod
gs_output-action_txt
gs_output-rep_comp_dt
gs_output-cust_intm_dt
gs_output-cust_delv_date
gs_output-repair_tat
gs_output-lava_cust_tat
gs_output-deviceid
gs_output-part_code
gs_output-part_desc
gs_output-pcba_req_on
* CFA Dispatch Status
* CFA Dispatch Date & Time
gs_output-stndby_issued
gs_output-stndby_model
gs_output-stndby_imei
gs_output-stndby_issued_on
gs_output-pcba_rep
gs_output-pcba_rep_model
gs_output-pcba_rep_imei
gs_output-pcba_rep_date
gs_output-cfa_stock
gs_output-mnoi_stock
gs_output-asp_stock
* DOA Type
gs_output-doa_remk
gs_output-rf_call
gs_output-s2rf_on
gs_output-s2rf_at
gs_output-req_id
gs_output-req_id_on
gs_output-req_id_at
gs_output-rev_courier_id
gs_output-rev_courier_name
gs_output-rev_dock_no
gs_output-cour_pick_on
gs_output-cour_pick_at
gs_output-rf_recv_on
gs_output-rf_recv_at
gs_output-under_rr_on
gs_output-under_rr_at
gs_output-rd_dispatch_on
gs_output-rd_dispatch_at
gs_output-fwd_req_id
gs_output-fwd_created_on
gs_output-fwd_created_at
gs_output-fwd_courier_id
gs_output-fwd_courier_name
gs_output-fwd_docket_no
gs_output-ssd_recv_date
gs_output-ssd_recv_time
gs_output-ssd_recv_time
gs_output-ssd_tat
gs_output-cour_rl_tat
gs_output-rf_tat
gs_output-cour_fl_tat
gs_output-rf_fault_cod
gs_output-rf_action_cod
gs_output-rf_deviceid
gs_output-part_consumed
gs_output-pcba_rep
gs_output-rf_pcba_rep_model
gs_output-rf_pcba_rep_imei
gs_output-rf_pcba_rep_date
gs_output-afih_deviceid
gs_output-els_status
* DOA Issued from RF
* RF - Reason for DOA
INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.

CLEAR gs_attachment.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
APPEND gs_attachment TO gt_attachment.

APPEND gs_output TO gt_output.

CLEAR gs_attachment.
SORT lt_st_tat BY qmnum part_code part_cons.
DELETE ADJACENT DUPLICATES FROM lt_st_tat COMPARING qmnum part_code part_co
ns.
LOOP AT lt_st_tat INTO gs_st_tat.
CLEAR gs_output.
MOVE-CORRESPONDING gs_st_tat TO gs_output.
WRITE gs_st_tat-cname TO gs_output-cname.
WRITE gs_st_tat-kunum TO gs_output-kunum.
WRITE gs_st_tat-qmnum TO gs_output-qmnum.
WRITE gs_st_tat-call_type TO gs_output-call_type.
WRITE gs_st_tat-valid TO gs_output-valid.
WRITE gs_st_tat-doa_type TO gs_output-doa_type.
WRITE gs_st_tat-mapar TO gs_output-mapar.
WRITE gs_st_tat-sernr TO gs_output-sernr.
WRITE gs_st_tat-cust_name TO gs_output-cust_name.
WRITE gs_st_tat-cust_phone TO gs_output-cust_phone.
WRITE gs_st_tat-erdat TO gs_output-erdat.
WRITE gs_st_tat-req_id TO gs_output-req_id.
WRITE gs_st_tat-req_id_on TO gs_output-req_id_on.
WRITE gs_st_tat-req_id_at TO gs_output-req_id_at.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-fwd_created_on TO gs_output-fwd_req_id_on.
WRITE gs_st_tat-warranty TO gs_output-warranty.
WRITE gs_st_tat-model TO gs_output-model.
WRITE gs_st_tat-branch TO gs_output-branch .
WRITE gs_st_tat-asm_name TO gs_output-asm_name.
WRITE gs_st_tat-busm TO gs_output-busm.
WRITE gs_st_tat-busm_name TO gs_output-busm_name.
WRITE gs_st_tat-spl_doa_no TO gs_output-spl_doa_no.
WRITE gs_st_tat-spl_doa_on TO gs_output-spl_doa_on.
WRITE gs_st_tat-doa_pgr_date TO gs_output-doa_pgr_date.
WRITE gs_st_tat-bucket_stat TO gs_output-bucket_stat .
WRITE gs_st_tat-s2rf_at TO gs_output-s2rf_at.
WRITE gs_st_tat-ssd_id TO gs_output-ssd_id .
WRITE gs_st_tat-ssd_name TO gs_output-ssd_name.
WRITE gs_st_tat-bztxt TO gs_output-bztxt.
WRITE gs_st_tat-regio TO gs_output-regio.
WRITE gs_st_tat-bezei TO gs_output-bezei.
WRITE gs_st_tat-ort01 TO gs_output-ort01.

WRITE gs_st_tat-bu TO gs_output-bu.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_created_on.
WRITE gs_st_tat-fwd_created_at TO gs_output-fwd_created_at.
WRITE gs_st_tat-courier_id TO gs_output-rev_courier_id.
WRITE gs_st_tat-courier_name TO gs_output-rev_courier_name.
WRITE gs_st_tat-docket_number TO gs_output-rev_dock_no.
WRITE gs_st_tat-cour_pick_on TO gs_output-cour_pick_on.
WRITE gs_st_tat-cour_pick_at TO gs_output-cour_pick_at.
WRITE gs_st_tat-rf_recv_on TO gs_output-rf_recv_on.
WRITE gs_st_tat-rf_recv_at TO gs_output-rf_recv_at.
WRITE gs_st_tat-under_rr_on TO gs_output-under_rr_on.
WRITE gs_st_tat-under_rr_at TO gs_output-under_rr_at.
WRITE gs_st_tat-rd_dispatch_on TO gs_output-rd_dispatch_on.
WRITE gs_st_tat-rd_dispatch_at TO gs_output-rd_dispatch_at.
WRITE gs_st_tat-fwd_created_on TO gs_output-fwd_created_on.
WRITE gs_st_tat-fwd_created_at TO gs_output-fwd_created_at.
WRITE gs_st_tat-fwd_courier_id TO gs_output-fwd_courier_id.
WRITE gs_st_tat-fwd_courier_name TO gs_output-fwd_courier_name.
WRITE gs_st_tat-fwd_docket_no TO gs_output-fwd_docket_no.
WRITE gs_st_tat-ssd_recv_date TO gs_output-ssd_recv_date.
WRITE gs_st_tat-cust_delv_date TO gs_output-cust_delv_date.
WRITE gs_st_tat-cust_delv_time TO gs_output-cust_delv_time.
WRITE gs_st_tat-fault_cod TO gs_output-fault_cod.
WRITE gs_st_tat-fault_cod TO gs_output-rf_fault_cod.
WRITE gs_st_tat-action_txt TO gs_output-action_txt.
WRITE gs_st_tat-ssd_tat TO gs_output-ssd_tat.
WRITE gs_st_tat-cour_rl_tat TO gs_output-cour_rl_tat.
WRITE gs_st_tat-rf_tat TO gs_output-rf_tat.
WRITE gs_st_tat-cour_fl_tat TO gs_output-cour_fl_tat.
WRITE gs_st_tat-stndby_issued TO gs_output-stndby_issued.
IF gs_st_tat-stndby_issued IS INITIAL.
gs_output-stndby_issued = 'No'.
ELSE.
gs_output-stndby_issued = 'Yes'.
ENDIF.

WRITE gs_st_tat-stndby_model TO gs_output-stndby_model.
WRITE gs_st_tat-stndby_imei TO gs_output-stndby_imei.
WRITE gs_st_tat-lava_cust_tat TO gs_output-lava_cust_tat.
WRITE gs_st_tat-part_code TO gs_output-part_code.
WRITE gs_st_tat-part_desc TO gs_output-part_desc.
WRITE gs_st_tat-cfa_stock TO gs_output-cfa_stock.
WRITE gs_st_tat-mnoi_stock TO gs_output-mnoi_stock.
WRITE gs_st_tat-asp_stock TO gs_output-asp_stock.
WRITE gs_st_tat-part_cons TO gs_output-part_consumed.
WRITE gs_st_tat-deviceid TO gs_output-deviceid.
WRITE gs_st_tat-afih_deviceid TO gs_output-afih_deviceid.
IF gs_st_tat-els_status = 'A'.
gs_output-els_status = 'Pass'.
ELSE.
gs_output-els_status = 'Fail'.
ENDIF.

WRITE gs_st_tat-kurztext TO gs_output-kurztext.
WRITE gs_st_tat-s2rf_on TO gs_output-s2rf_on.
WRITE gs_st_tat-cust_intm_dt TO gs_output-cust_intm_dt.
WRITE gs_st_tat-rep_comp_dt TO gs_output-rep_comp_dt.
WRITE gs_st_tat-pcba_req_on TO gs_output-pcba_req_on.

READ TABLE gt_dd07t INTO gs_dd07t WITH KEY domvalue_l = gs_st_tat-
notifi_status.
IF sy-subrc = 0.
WRITE gs_dd07t-ddtext TO gs_output-curr_st.
ENDIF.
* WRITE gs_st_tat-notifi_status TO gs_output-curr_st.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-courier_id TO gs_output-courier_id.
WRITE gs_st_tat-ssd_recv_time TO gs_output-ssd_recv_time.
WRITE gs_st_tat-kurztext TO gs_output-kurztext.
CLEAR lv_date.
lv_date = gs_st_tat-s2rf_on.
IF gs_st_tat-s2rf_on IS INITIAL OR lv_date IS INITIAL.
gs_output-rf_call = 'No'.
CLEAR: gs_output-s2rf_on,
gs_output-s2rf_at,
gs_output-req_id,
gs_output-req_id_on,
gs_output-req_id_at,
gs_output-rev_courier_id,
gs_output-rev_courier_name,
gs_output-rev_dock_no,
gs_output-cour_pick_on,
gs_output-cour_pick_at,
gs_output-rf_recv_on,
gs_output-rf_recv_at,
gs_output-under_rr_on,
gs_output-under_rr_at,
gs_output-rd_dispatch_on,
gs_output-rd_dispatch_at,
gs_output-fwd_req_id,
gs_output-fwd_created_on,
gs_output-fwd_created_at,
gs_output-fwd_courier_id,
gs_output-fwd_courier_name,
gs_output-fwd_docket_no,
gs_output-ssd_recv_date,
gs_output-ssd_recv_time,
gs_output-ssd_recv_time,
gs_output-ssd_tat,
gs_output-cour_rl_tat,
gs_output-rf_tat,
gs_output-cour_fl_tat,
gs_output-rf_fault_cod,
gs_output-rf_action_cod,
gs_output-rf_deviceid,
gs_output-part_consumed,
gs_output-rf_pcba_rep,
gs_output-rf_pcba_rep_model,
gs_output-rf_pcba_rep_imei,
gs_output-rf_pcba_rep_date,
gs_output-afih_deviceid.
ELSE.
gs_output-rf_call = 'Yes'.
gs_output-rf_fault_cod = gs_output-fault_cod.
gs_output-rf_action_cod = gs_output-action_cod.
gs_output-rf_deviceid = gs_output-deviceid.
gs_output-rf_pcba_rep = gs_output-pcba_rep.
gs_output-rf_pcba_rep_model = gs_output-pcba_rep_model.
gs_output-rf_pcba_rep_imei = gs_output-pcba_rep_imei.
gs_output-rf_pcba_rep_date = gs_output-pcba_rep_date.
ENDIF.

REPLACE ALL OCCURRENCES OF gc_tab IN gs_output WITH ','.
REPLACE ALL OCCURRENCES OF gc_cret IN gs_output WITH ','.
REPLACE ALL OCCURRENCES OF gc_newline IN gs_output WITH ','.
REPLACE ALL OCCURRENCES OF gc_form_feed IN gs_output WITH ','.
CONCATENATE gs_output-qmnum
gs_output-erdat
gs_output-call_type
gs_output-valid
gs_output-doa_type
gs_output-ssd_id
gs_output-ssd_name
gs_output-bu
gs_output-branch
gs_output-bezei
gs_output-ort01
gs_output-asm_name
gs_output-busm
gs_output-busm_name
gs_output-spl_doa_no
gs_output-spl_doa_on
gs_output-doa_pgr_date
gs_output-warranty
gs_output-cust_name
gs_output-cust_phone
gs_output-model
gs_output-mapar
gs_output-sernr
gs_output-serge
* Serial No
gs_output-sym_code
gs_output-kurztext
gs_output-remark
* gs_output-sub_status
gs_output-bucket_stat
gs_output-age
gs_output-fault_cod
gs_output-fault_txt
gs_output-action_cod
gs_output-action_txt
gs_output-rep_comp_dt
gs_output-cust_intm_dt
gs_output-cust_delv_date
gs_output-repair_tat
gs_output-lava_cust_tat
gs_output-deviceid
gs_output-part_code
gs_output-part_desc
gs_output-pcba_req_on
* CFA Dispatch Status
* CFA Dispatch Date & Time
gs_output-stndby_issued
gs_output-stndby_model
gs_output-stndby_imei
gs_output-stndby_issued_on
gs_output-pcba_rep
gs_output-pcba_rep_model
gs_output-pcba_rep_imei
gs_output-pcba_rep_date
gs_output-cfa_stock
gs_output-mnoi_stock
gs_output-asp_stock
* DOA Type
gs_output-doa_remk
gs_output-rf_call
gs_output-s2rf_on
gs_output-s2rf_at
gs_output-req_id
gs_output-req_id_on
gs_output-req_id_at
gs_output-rev_courier_id
gs_output-rev_courier_name
gs_output-rev_dock_no
gs_output-cour_pick_on
gs_output-cour_pick_at
gs_output-rf_recv_on
gs_output-rf_recv_at
gs_output-under_rr_on
gs_output-under_rr_at
gs_output-rd_dispatch_on
gs_output-rd_dispatch_at
gs_output-fwd_req_id
gs_output-fwd_created_on
gs_output-fwd_created_at
gs_output-fwd_courier_id
gs_output-fwd_courier_name
gs_output-fwd_docket_no
gs_output-ssd_recv_date
gs_output-ssd_recv_time
gs_output-ssd_recv_time
gs_output-ssd_tat
gs_output-cour_rl_tat
gs_output-rf_tat
gs_output-cour_fl_tat
gs_output-rf_fault_cod
gs_output-rf_action_cod
gs_output-deviceid
gs_output-part_consumed
gs_output-pcba_rep
gs_output-pcba_rep_model
gs_output-pcba_rep_imei
gs_output-pcba_rep_date
gs_output-afih_deviceid
gs_output-els_status
* DOA Issued from RF
* RF - Reason for DOA
INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.
ENDLOOP.

LOOP AT gt_attachment INTO gs_attachment.
CONCATENATE gv_buffer gs_attachment INTO gv_buffer.
ENDLOOP.

DO.
gs_mess_att = gv_buffer.
APPEND gs_mess_att TO gt_mess_att.
SHIFT gv_buffer LEFT BY 255 PLACES.
IF gv_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "build_excel_tat

*&---------------------------------------------------------------------*
*& Form send_email_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email_tat.
DATA lv_mtype TYPE zemail_1-mtype.

* IF p_bu IS NOT INITIAL.
* CONCATENATE '1' p_bu(2) INTO lv_mtype.
* ELSE.
lv_mtype = 'SCT'.
* ENDIF.
IF p_snd2rf IS NOT INITIAL.
lv_mtype = 'SRF'.
ENDIF.
SELECT *
FROM zemail_1
INTO TABLE gt_mail
WHERE mtype = lv_mtype .

PERFORM populate_message_table_tat.
IF gt_mail[] IS NOT INITIAL.
LOOP AT gt_mail INTO gs_mail.
CLEAR gs_receivers.
gs_receivers-receiver = gs_mail-mail.
gs_receivers-rec_type = 'U'.
gs_receivers-com_type = 'INT'.
gs_receivers-notif_del = 'X'.
gs_receivers-notif_ndel = 'X'.
gs_receivers-express = 'X'.
APPEND gs_receivers TO gt_receivers.
ENDLOOP.
ENDIF.

PERFORM send_email_message_tat.
PERFORM initiate_mail_execute_tat.
ENDFORM. "send_email_tat

*&---------------------------------------------------------------------*
*& Form populate_message_table_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_message_table_tat.
APPEND 'Dear All' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Please find the SC TAT Analysis Report attached herewith.' TO gt_me
ssage.
APPEND ' ' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Regards' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'LAVA ERP Team' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'N.B.: This is system generated mail and in case of any clarificatio
n please contact SAP Team.' TO gt_message.
ENDFORM. "populate_message_table_tat

*&---------------------------------------------------------------------*
*& Form send_email_message_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email_message_tat.
gv_format = 'XLS'.
gv_attdescription = 'Work Orders Analysis Report'.

* Fill the document data.
READ TABLE gt_mess_att INTO gs_mess_att INDEX gv_cnt.
gv_doc_data-doc_size =
( gv_cnt - 1 ) * 255 + STRLEN( gs_mess_att ).

* Populate the subject/generic message attributes
gv_doc_data-obj_langu = sy-langu.
gv_doc_data-obj_name = 'SAPRPT'.
WRITE sy-datum TO gv_doc_data-obj_descr.

gv_doc_data-sensitivty = 'F'.
* IF p_bu IS INITIAL.
IF p_snd2rf IS NOT INITIAL.
CONCATENATE 'WO Ana. Rep. - ' gv_doc_data-
obj_descr ' for Repair Factory' INTO gv_doc_data-
obj_descr SEPARATED BY space.
ELSE.
CONCATENATE 'WO Ana. Rep. - ' gv_doc_data-obj_descr INTO gv_doc_data-
obj_descr SEPARATED BY space.
ENDIF.
* ELSE.
* CONCATENATE 'SC TAT Ana. Rep. - ' gv_doc_data-
obj_descr ' for ' p_bu INTO gv_doc_data-obj_descr SEPARATED BY space.
* ENDIF.
IF gt_mess_att[] IS NOT INITIAL.
CLEAR gs_mess_att.
REFRESH gt_attachment.
gt_attachment[] = gt_mess_att[].
ENDIF.


* Describe the body of the message
CLEAR: gs_packing_list, gt_packing_list[].
gs_packing_list-transf_bin = space.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 0.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_message LINES gs_packing_list-body_num.
gs_packing_list-doc_type = 'RAW'.
APPEND gs_packing_list TO gt_packing_list.

gs_packing_list-transf_bin = 'X'.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 1.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_attachment LINES gs_packing_list-body_num.
gs_packing_list-doc_type = gv_format.
gs_packing_list-obj_descr = gv_attdescription.
gs_packing_list-obj_name = gv_attfilename.
gs_packing_list-doc_size = gs_packing_list-body_num * 255 * 2.
APPEND gs_packing_list TO gt_packing_list.

* Call the FM to post the message to SAPMAIL

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = gv_doc_data
put_in_outbox = 'X'
sender_address = 'Lava-ERP@lavainternational.in'
sender_address_type = 'INT'
commit_work = 'X'
IMPORTING
sent_to_all = gv_sent_all
TABLES
packing_list = gt_packing_list[]
contents_bin = gt_attachment[]
contents_txt = gt_message[]
receivers = gt_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.

* Store function module return code
gv_error = sy-subrc.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1.
ELSE.
cl_os_transaction_end_notifier=>raise_commit_requested( ).
CALL FUNCTION 'DB_COMMIT'.
cl_os_transaction_end_notifier=>raise_commit_finished( ).
ENDIF.

ENDFORM. "send_email_message_tat

*&---------------------------------------------------------------------*
*& Form initiate_mail_execute_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM initiate_mail_execute_tat.
WAIT UP TO 1 SECONDS.
IF gv_error EQ 0.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.
ENDFORM. "

*&---------------------------------------------------------------------*
*& Form save_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM save_tat.
DATA lv_date TYPE char10.
DATA lv_filename TYPE string.

WRITE sy-datum TO lv_date.
IF p_old IS INITIAL.
IF p_file IS INITIAL.
CONCATENATE p_folder 'WO Analysis report_' p_bu '_' lv_date '_' sy-
uzeit '.XLS' INTO lv_filename .
ELSE.
CONCATENATE p_folder p_file p_bu '.XLS' INTO lv_filename .
ENDIF.
ELSE.
IF p_file IS INITIAL.
CONCATENATE p_folder 'WO Analysis report_old' p_bu '_' lv_date '_' sy-
uzeit '.XLS' INTO lv_filename .
ELSE.
CONCATENATE p_folder p_file p_bu'.XLS' INTO lv_filename .
ENDIF.
ENDIF.
IF p_server IS INITIAL.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
TABLES
data_tab = gt_attachment
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0 .
LOOP AT gt_attachment INTO gs_attachment.
TRANSFER gs_attachment TO lv_filename.
ENDLOOP.
CLOSE DATASET lv_filename.
ENDIF.
ENDIF.
ENDFORM. "save_tat


*&---------------------------------------------------------------------*
*& Form save_pc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*FORM save_pc.
* DATA lv_date TYPE char10.
* DATA lv_filename TYPE string.
*
* WRITE sy-datum TO lv_date.
* CONCATENATE p_folder 'Pending Calls' lv_date '.XLS' INTO lv_filename.
*
* IF p_server IS INITIAL.
*
* CALL FUNCTION 'GUI_DOWNLOAD'
* EXPORTING
* filename = lv_filename
* TABLES
* data_tab = gt_attachment
* EXCEPTIONS
* file_write_error = 1
* no_batch = 2
* gui_refuse_filetransfer = 3
* invalid_type = 4
* no_authority = 5
* unknown_error = 6
* header_not_allowed = 7
* separator_not_allowed = 8
* filesize_not_allowed = 9
* header_too_long = 10
* dp_error_create = 11
* dp_error_send = 12
* dp_error_write = 13
* unknown_dp_error = 14
* access_denied = 15
* dp_out_of_memory = 16
* disk_full = 17
* dp_timeout = 18
* file_not_found = 19
* dataprovider_exception = 20
* control_flush_error = 21
* OTHERS = 22.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
* ELSE.
* OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
* IF sy-subrc = 0 .
* LOOP AT gt_attachment INTO gs_attachment.
* TRANSFER gs_attachment TO lv_filename.
* ENDLOOP.
* CLOSE DATASET lv_filename.
* ENDIF.
* ENDIF.
*ENDFORM. "save_pc

FORM get_kunnr.
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kna1-kunnr,
bu TYPE zbu_region-bu,
END OF ty_kna1.
DATA: lt_kna1 TYPE TABLE OF ty_kna1,
ls_kna1 TYPE ty_kna1.

IF p_bu IS NOT INITIAL.
SELECT zdbranch~kunnr zbrtxt~bu
INTO TABLE lt_kna1
FROM zdbranch
INNER JOIN zbrtxt ON zbrtxt~zbcode = zdbranch~zbcode
WHERE zbrtxt~bu = p_bu.

LOOP AT lt_kna1 INTO ls_kna1.
gs_kunnr-option = 'EQ'.
gs_kunnr-sign = 'I'.
gs_kunnr-low = ls_kna1-kunnr.
APPEND gs_kunnr TO gt_kunnr.
ENDLOOP.
ENDIF.

ENDFORM. "get_kunnr









*********************Second program*************************


**&---------------------------------------------------------------------*
*& Report Z_SC_TAT_REPORT_2
*&
*&---------------------------------------------------------------------*
*& BETC Specs / Task No : BE66
*& Description : LAVA Service Center : TAT Report - New fields
*& Developed by : BETC
*&---------------------------------------------------------------------*


REPORT z_sc_tat_report_2.

TYPE-POOLS:slis.
TYPES: BEGIN OF ty_output,
cname TYPE char35,
kunum TYPE char10,
qmnum TYPE char20,
call_type TYPE char25,
mapar TYPE char30,
cust_name TYPE char35,
cust_phone TYPE char20,
erdat TYPE char25,
req_id TYPE char20,
req_id_on TYPE char25,
req_id_at TYPE char25,
fwd_req_id TYPE char20,
fwd_req_id_on TYPE char20,
warranty TYPE char10,
model TYPE char25,
branch TYPE char30,
asm_name TYPE char35,
bucket_stat TYPE char_60,
s2rf_on TYPE char25,
s2rf_at TYPE char25,
ssd_id TYPE char10,
ssd_name TYPE char35,
bztxt TYPE char20, "District
regio TYPE char10, "State
bezei TYPE bezei20," State
ort01 TYPE char35, "City
rev_courier_id TYPE lifnr,"added by a.srinivasan
rev_courier_name TYPE name1_gp, "added by a.srinivasan.
rev_cour_pick_on TYPE char20,"reverse courier pick date "added by a
.srinivasan.
cour_pick_on TYPE char20,"courier pick at
cour_pick_at TYPE char20,"
rev_cour_pick_at TYPE char20,"reverse courier pick at " added by a.
srinivasan.
rev_dock_no TYPE char20, "reverse document no "added by a.srinivasa
n.
rf_recv_on TYPE char25,"RF Received Date"ADDED by a.srinivasan.
rf_recv_at TYPE char25,"RF Received At
under_rr_on TYPE char25,"Under Repair Date
under_rr_at TYPE char25, "Under Repair Time
rd_dispatch_on TYPE char25,"Ready for Dispatch Date
rd_dispatch_at TYPE char25, "Ready for Dispatch On
fwd_created_on TYPE char25, "Forward Challan Date
fwd_created_at TYPE char25, "Forward challan time
fwd_courier_id TYPE name1_gp, "Forward courier ID
fwd_courier_name TYPE name1_gp, "Forward courier name
fwd_docket_no TYPE char30, "forward docket number
ssd_recv_date TYPE char25, "Received at SSD Date
cust_delv_date TYPE char30, "Delivered to Customer Date
cust_delv_time TYPE char30, "Delivered to Customer Time
fault_cod TYPE char20,"Fault code
stndby_issued TYPE char5, "standy by issued.
stndby_model TYPE char25, "stand by model.
stndby_imei TYPE char30, "stand by imei
rf_tat TYPE char10,"RF Call - RF TAT
lava_cust_tat TYPE char20, "LAVA Customer TAT
action_txt TYPE qtxtcdgrfe," action taken
ssd_tat TYPE char25,"RF Call - SSD TAT
cour_rl_tat TYPE char25, "RF Call - Reverse TAT
"RF_TAT type char5, "rf tat
cour_fl_tat TYPE char25, "RF Call - Forward TAT
bu TYPE char40,"business unit description
part_code TYPE char30,"part code
part_desc TYPE char50, "part descritpion
cfa_stock TYPE char20, "CFA Stock
mnoi_stock TYPE char20, " Stock at MNOI
asp_stock TYPE char20, " Stock at ASP
part_consumed TYPE char140,"part consumed
deviceid TYPE deviceid,
curr_st TYPE char40,
labst TYPE char30,
courier_id TYPE char30,
ssd_recv_time TYPE char20,
kurztext TYPE kurztext, "Symptom
pcba_req_on TYPE char20,
END OF ty_output.
TYPES: BEGIN OF tt_solisti1,
line(3000) TYPE c,
END OF tt_solisti1.

DATA:l_split VALUE ','.

DATA: gt_st_tat TYPE TABLE OF zs3n_st_tat_report,
gs_st_tat TYPE zs3n_st_tat_report,

gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output,

gt_kunnr TYPE TABLE OF zla_rs_kunnr,
gs_kunnr TYPE zla_rs_kunnr,

gv_date TYPE zs3n_t_notif_mas-created_on,
gv_req_id TYPE zs3n_t_notif_mas-req_id,
gv_fwd_req TYPE zs3n_t_notif_mas-fwd_req_id,
gv_ssd_id TYPE zs3n_t_notif_mas-ssd_id,
gv_qmnum TYPE zs3n_t_notif_mas-qmnum,
gv_bu TYPE zbu_region-bu.

DATA:ls_fieldcat TYPE slis_t_fieldcat_alv,
lt_fieldcat TYPE slis_fieldcat_alv.

DATA: wk_repid TYPE sy-repid,
wk_layout TYPE slis_layout_alv.

DATA: gt_dd07t TYPE TABLE OF dd07t,
gs_dd07t TYPE dd07t.


**Variable for the Email functionality
DATA: gt_attachment TYPE TABLE OF tt_solisti1,
gs_attachment TYPE tt_solisti1,

gt_message TYPE TABLE OF solisti1,
gs_message TYPE solisti1,

gt_mess_att TYPE TABLE OF solisti1,
gs_mess_att TYPE solisti1,

gt_mail TYPE TABLE OF zemail_1,
gs_mail TYPE zemail_1,

gt_receivers TYPE TABLE OF somlreci1,
gs_receivers TYPE somlreci1,

gt_packing_list TYPE TABLE OF sopcklsti1,
gs_packing_list TYPE sopcklsti1,

gt_lines2 TYPE TABLE OF tline,
gs_lines2 TYPE tline,

gt_contents TYPE TABLE OF solisti1,
gs_contents TYPE solisti1,

gv_cnt TYPE i,
gv_format(4) TYPE c ,"so_obj_tp ,
gv_attdescription(40) TYPE c ,
gv_attfilename TYPE so_obj_des ,
gv_name TYPE string,
gv_attachment_desc(22) TYPE c,
gc_cnt TYPE i,
gv_sent_all(1) TYPE c,
gv_doc_data LIKE sodocchgi1,
gv_error TYPE sy-subrc,
gv_buffer TYPE string.

CONSTANTS: gc_tab TYPE c VALUE cl_abap_char_utilities=>horizontal_tab,
gc_cret TYPE c VALUE cl_abap_char_utilities=>cr_lf.

FIELD-SYMBOLS : <fs_st_tat> TYPE zs3n_st_tat_report.


SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS: s_date FOR gv_date,
s_req_id FOR gv_req_id,
s_fwd_rq FOR gv_fwd_req,
s_kunnr FOR gv_ssd_id,
s_qmnum FOR gv_qmnum.
PARAMETERS: p_bu TYPE zbu_region-bu.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
PARAMETERS: p_del TYPE char1 AS CHECKBOX.
PARAMETERS: p_doa TYPE char1 AS CHECKBOX.
PARAMETERS: p_snd2rf TYPE char1 AS CHECKBOX.
SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
PARAMETERS: p_email TYPE char1 RADIOBUTTON GROUP g1.
PARAMETERS: p_local TYPE char1 RADIOBUTTON GROUP g1 DEFAULT 'X'.
PARAMETERS: p_server TYPE char1 RADIOBUTTON GROUP g1.
PARAMETERS: p_folder TYPE char40 DEFAULT 'C:\Temp\'.
*SELECTION-SCREEN COMMENT /4(50) text-004.
SELECTION-SCREEN END OF BLOCK b3.

START-OF-SELECTION.
PERFORM get_data.
PERFORM build_excel_tat.
IF p_email IS NOT INITIAL AND sy-batch IS NOT INITIAL.
PERFORM send_email_tat.
ELSE.
PERFORM save_tat.
ENDIF.
PERFORM build_excel.
IF p_email IS NOT INITIAL AND sy-batch IS NOT INITIAL.
PERFORM send_email.
ELSE.
PERFORM save_pc.
ENDIF.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
DATA lv_skip TYPE xfeld.
CLEAR lv_skip.
IF p_bu IS NOT INITIAL.
PERFORM get_kunnr.
ENDIF.
IF p_local IS NOT INITIAL.
* lv_skip = 'X'.
ENDIF.

APPEND LINES OF s_kunnr TO gt_kunnr.

CALL FUNCTION 'ZS3N_FM_GET_TAT_DETAIL2'
EXPORTING
im_delivered = p_del
im_doa_call = p_doa
im_send_2_rf = p_snd2rf
im_skip = lv_skip
TABLES
et_output_data = gt_st_tat
it_dates = s_date
it_req_id = s_req_id
it_fwd_req_id = s_fwd_rq
it_kunnr = gt_kunnr
it_qmnum = s_qmnum.

SELECT *
FROM dd07t
INTO TABLE gt_dd07t
WHERE domname = 'ZS3N_DOM_NOTIF_STATUS'
AND ddlanguage = 'E'.
IF sy-subrc NE 0.
*No data found
ENDIF.

ENDFORM. "get_data


*&---------------------------------------------------------------------*
*& Form build_excel_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_excel_tat.

DATA: gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output.

DATA: lt_st_tat TYPE TABLE OF zs3n_st_tat_report.
lt_st_tat[] = gt_st_tat[].

SORT lt_st_tat BY qmnum.
DELETE ADJACENT DUPLICATES FROM lt_st_tat COMPARING qmnum.

gs_output-cname = 'ASP Name'.
gs_output-kunum = 'ASP Code'.
gs_output-qmnum = 'Workorder Number'.
gs_output-call_type = 'Call Type'.
gs_output-mapar = 'IMEI Number'.
gs_output-cust_name = 'Customer Name'.
gs_output-cust_phone = 'Phone Number'.
gs_output-erdat = 'Creation Date'.
gs_output-req_id = 'Pick Req.'.
gs_output-req_id_on = 'Pick Req. Date'.
gs_output-fwd_req_id = 'FWD Pick Req.'.
gs_output-fwd_req_id_on = 'FWD Pick Req. Date'.
gs_output-warranty = 'Warranty'.
gs_output-model = 'Model'.
gs_output-call_type = 'Call Type'.
gs_output-branch = 'Branch'.
gs_output-asm_name = 'ASM Name'.
gs_output-bucket_stat = 'Bucket Status'.
gs_output-s2rf_on = 'Send To RF Date'.
gs_output-s2rf_at = 'Sent to RF Time'.
gs_output-ssd_id = 'SSD ID'.
gs_output-ssd_name = 'SSD Name'.
gs_output-bztxt = 'District'.
gs_output-regio = 'State'.
gs_output-bezei = 'State'.
gs_output-ort01 = 'City'.
gs_output-bu = 'BU Name'.
gs_output-req_id = 'Reverse Challan No.'.
gs_output-req_id_on = 'Rev. Cha Date'.
gs_output-req_id_at = 'Rev. Cha Time'.
gs_output-rev_courier_id = 'Reverse Courier ID'.
gs_output-rev_courier_name = 'Reverse Courier Name'.
gs_output-rev_dock_no = 'Reverse Docket No'.
gs_output-cour_pick_on = 'Courier Pick on'.
gs_output-cour_pick_at = 'Courier Pick At'.
gs_output-rf_recv_on = 'RF Received on'.
gs_output-rf_recv_at = 'RF Received Time'.
gs_output-under_rr_on = 'Under Repair Date'.
gs_output-under_rr_at = ' Under Repair Time'.
gs_output-rd_dispatch_on = 'Ready for Dispatch Date'.
gs_output-rd_dispatch_at = 'Ready for Dispatch on'.
gs_output-fwd_created_on = 'Forward Challan Date'.
gs_output-fwd_created_at = 'Forward Challan TIme'.
gs_output-fwd_courier_id = 'Forward courier ID'.
gs_output-fwd_courier_name = 'Forward courier name'.
gs_output-fwd_docket_no = 'Forward Docket No.'.
gs_output-ssd_recv_date = 'Received at SSD Date'.
gs_output-cust_delv_date = 'Delivered to Customer Date'.
gs_output-cust_delv_time = 'Delivered to Customer Time'.
gs_output-fault_cod = 'Fault Code'.
gs_output-action_txt = 'Action Taken'.
gs_output-ssd_tat = 'RF Call SSD TAT'.
gs_output-cour_rl_tat = 'RF Call Reverse TAT'.
gs_output-rf_tat = 'RF TAT'.
gs_output-cour_fl_tat = 'RF Call Forward TAT'.
gs_output-stndby_issued = 'Standy by issued'.
gs_output-stndby_model = 'stand by model'.
gs_output-stndby_imei = 'stand by imei'.
gs_output-lava_cust_tat = 'Lava Customer TAT'.
gs_output-part_code = 'Part Code'.
gs_output-part_desc = 'Part Description'.
gs_output-cfa_stock = 'CFA Stock'.
gs_output-mnoi_stock = 'MNOI Stock'.
gs_output-asp_stock = 'ASP Stock'.
gs_output-part_consumed = 'Part Consumed'.
gs_output-deviceid = 'Engineer Remarks'.
gs_output-curr_st = 'Current Status'.
gs_output-courier_id = 'Forward Courier Id'.
gs_output-ssd_recv_time = 'Received at SSD Time'.
gs_output-kurztext = 'Symptom Code'.
gs_output-pcba_req_on = 'Spare Part Requested Date'.

CONCATENATE gs_output-qmnum
gs_output-cust_name
gs_output-cust_phone
gs_output-erdat
gs_output-ssd_id
gs_output-s2rf_on
gs_output-s2rf_at
gs_output-req_id
gs_output-req_id_on
gs_output-req_id_at
gs_output-rev_courier_id
gs_output-rev_courier_name
gs_output-rev_dock_no
gs_output-cour_pick_on
gs_output-cour_pick_at
gs_output-rf_recv_on
gs_output-rf_recv_at
gs_output-under_rr_on
gs_output-under_rr_at
gs_output-rd_dispatch_on
gs_output-rd_dispatch_at
gs_output-fwd_req_id
gs_output-fwd_created_on
gs_output-fwd_created_at
gs_output-fwd_courier_id
gs_output-fwd_courier_name
gs_output-fwd_docket_no
gs_output-ssd_recv_date
gs_output-ssd_recv_time
gs_output-cust_delv_date
gs_output-cust_delv_time
gs_output-ssd_tat
gs_output-cour_rl_tat
gs_output-rf_tat
gs_output-cour_fl_tat
gs_output-fault_cod
gs_output-action_txt
gs_output-curr_st
gs_output-kurztext
gs_output-pcba_req_on
INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.

CLEAR gs_attachment.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
APPEND gs_attachment TO gt_attachment.

APPEND gs_output TO gt_output.

CLEAR gs_attachment.
SORT lt_st_tat BY qmnum part_cons.
DELETE ADJACENT DUPLICATES FROM lt_st_tat COMPARING qmnum part_cons.
LOOP AT lt_st_tat INTO gs_st_tat.
CLEAR gs_output.
MOVE-CORRESPONDING gs_st_tat TO gs_output.
WRITE gs_st_tat-cname TO gs_output-cname.
WRITE gs_st_tat-kunum TO gs_output-kunum.
WRITE gs_st_tat-qmnum TO gs_output-qmnum.
WRITE gs_st_tat-call_type TO gs_output-call_type.
WRITE gs_st_tat-mapar TO gs_output-mapar.
WRITE gs_st_tat-cust_name TO gs_output-cust_name.
WRITE gs_st_tat-cust_phone TO gs_output-cust_phone.
WRITE gs_st_tat-erdat TO gs_output-erdat.
WRITE gs_st_tat-req_id TO gs_output-req_id.
WRITE gs_st_tat-req_id_on TO gs_output-req_id_on.
WRITE gs_st_tat-req_id_at TO gs_output-req_id_at.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-fwd_created_on TO gs_output-fwd_req_id_on.
WRITE gs_st_tat-warranty TO gs_output-warranty.
WRITE gs_st_tat-model TO gs_output-model.
WRITE gs_st_tat-call_type TO gs_output-call_type.
WRITE gs_st_tat-branch TO gs_output-branch .
WRITE gs_st_tat-asm_name TO gs_output-asm_name.
WRITE gs_st_tat-bucket_stat TO gs_output-bucket_stat .
WRITE gs_st_tat-s2rf_at TO gs_output-s2rf_at.
WRITE gs_st_tat-ssd_id TO gs_output-ssd_id .
WRITE gs_st_tat-ssd_name TO gs_output-ssd_name.
WRITE gs_st_tat-bztxt TO gs_output-bztxt.
WRITE gs_st_tat-regio TO gs_output-regio.
WRITE gs_st_tat-bezei TO gs_output-bezei.
WRITE gs_st_tat-ort01 TO gs_output-ort01.

WRITE gs_st_tat-bu TO gs_output-bu.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_created_on.
WRITE gs_st_tat-fwd_created_at TO gs_output-fwd_created_at.
WRITE gs_st_tat-courier_id TO gs_output-rev_courier_id.
WRITE gs_st_tat-courier_name TO gs_output-rev_courier_name.
WRITE gs_st_tat-docket_number TO gs_output-rev_dock_no.
WRITE gs_st_tat-cour_pick_on TO gs_output-cour_pick_on.
WRITE gs_st_tat-cour_pick_at TO gs_output-cour_pick_at.
WRITE gs_st_tat-rf_recv_on TO gs_output-rf_recv_on.
WRITE gs_st_tat-rf_recv_at TO gs_output-rf_recv_at.
WRITE gs_st_tat-under_rr_on TO gs_output-under_rr_on.
WRITE gs_st_tat-under_rr_at TO gs_output-under_rr_at.
WRITE gs_st_tat-rd_dispatch_on TO gs_output-rd_dispatch_on.
WRITE gs_st_tat-rd_dispatch_at TO gs_output-rd_dispatch_at.
WRITE gs_st_tat-fwd_created_on TO gs_output-fwd_created_on.
WRITE gs_st_tat-fwd_created_at TO gs_output-fwd_created_at.
WRITE gs_st_tat-fwd_courier_id TO gs_output-fwd_courier_id.
WRITE gs_st_tat-fwd_courier_name TO gs_output-fwd_courier_name.
WRITE gs_st_tat-fwd_docket_no TO gs_output-fwd_docket_no.
WRITE gs_st_tat-ssd_recv_date TO gs_output-ssd_recv_date.
WRITE gs_st_tat-cust_delv_date TO gs_output-cust_delv_date.
WRITE gs_st_tat-cust_delv_time TO gs_output-cust_delv_time.
WRITE gs_st_tat-fault_cod TO gs_output-fault_cod.
WRITE gs_st_tat-action_txt TO gs_output-action_txt.
WRITE gs_st_tat-ssd_tat TO gs_output-ssd_tat.
WRITE gs_st_tat-cour_rl_tat TO gs_output-cour_rl_tat.
WRITE gs_st_tat-rf_tat TO gs_output-rf_tat.
WRITE gs_st_tat-cour_fl_tat TO gs_output-cour_fl_tat.
WRITE gs_st_tat-stndby_issued TO gs_output-stndby_issued.
IF gs_st_tat-stndby_issued IS INITIAL.
gs_output-stndby_issued = 'No'.
ELSE.
gs_output-stndby_issued = 'Yes'.
ENDIF.
WRITE gs_st_tat-stndby_model TO gs_output-stndby_model.
WRITE gs_st_tat-stndby_imei TO gs_output-stndby_imei.
WRITE gs_st_tat-lava_cust_tat TO gs_output-lava_cust_tat.
WRITE gs_st_tat-part_code TO gs_output-part_code.
WRITE gs_st_tat-part_desc TO gs_output-part_desc.
WRITE gs_st_tat-cfa_stock TO gs_output-cfa_stock.
WRITE gs_st_tat-mnoi_stock TO gs_output-mnoi_stock.
WRITE gs_st_tat-asp_stock TO gs_output-asp_stock.
WRITE gs_st_tat-part_cons TO gs_output-part_consumed.
WRITE gs_st_tat-deviceid TO gs_output-deviceid.
WRITE gs_st_tat-kurztext TO gs_output-kurztext.
WRITE gs_st_tat-pcba_req_on TO gs_output-pcba_req_on.
WRITE gs_st_tat-s2rf_on TO gs_output-s2rf_on.

READ TABLE gt_dd07t INTO gs_dd07t WITH KEY domvalue_l = gs_st_tat-
notifi_status.
IF sy-subrc = 0.
WRITE gs_dd07t-ddtext TO gs_output-curr_st.
ENDIF.
* WRITE gs_st_tat-notifi_status TO gs_output-curr_st.
WRITE gs_st_tat-fwd_req_id TO gs_output-fwd_req_id.
WRITE gs_st_tat-courier_id TO gs_output-courier_id.
WRITE gs_st_tat-ssd_recv_time TO gs_output-ssd_recv_time.
WRITE gs_st_tat-kurztext TO gs_output-kurztext.
WRITE gs_st_tat-pcba_req_on TO gs_output-pcba_req_on.
CONCATENATE gs_output-qmnum
gs_output-cust_name
gs_output-cust_phone
gs_output-erdat
gs_output-ssd_id
gs_output-s2rf_on
gs_output-s2rf_at
gs_output-req_id
gs_output-req_id_on
gs_output-req_id_at
gs_output-rev_courier_id
gs_output-rev_courier_name
gs_output-rev_dock_no
gs_output-cour_pick_on
gs_output-cour_pick_at
gs_output-rf_recv_on
gs_output-rf_recv_at
gs_output-under_rr_on
gs_output-under_rr_at
gs_output-rd_dispatch_on
gs_output-rd_dispatch_at
gs_output-fwd_req_id
gs_output-fwd_created_on
gs_output-fwd_created_at
gs_output-fwd_courier_id
gs_output-fwd_courier_name
gs_output-fwd_docket_no
gs_output-ssd_recv_date
gs_output-ssd_recv_time
gs_output-cust_delv_date
gs_output-cust_delv_time
gs_output-ssd_tat
gs_output-cour_rl_tat
gs_output-rf_tat
gs_output-cour_fl_tat
gs_output-fault_cod
gs_output-action_txt
gs_output-curr_st
gs_output-kurztext
gs_output-pcba_req_on
INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.
ENDLOOP.

LOOP AT gt_attachment INTO gs_attachment.
CONCATENATE gv_buffer gs_attachment INTO gv_buffer.
ENDLOOP.

DO.
gs_mess_att = gv_buffer.
APPEND gs_mess_att TO gt_mess_att.
SHIFT gv_buffer LEFT BY 255 PLACES.
IF gv_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "build_excel_tat

*&---------------------------------------------------------------------*
*& Form send_email_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email_tat.
DATA lv_mtype TYPE zemail_1-mtype.

IF p_bu IS NOT INITIAL.
CONCATENATE '1' p_bu(2) INTO lv_mtype.
ELSE.
lv_mtype = 'SCT'.
ENDIF.
IF p_snd2rf IS NOT INITIAL.
lv_mtype = 'SRF'.
ENDIF.
SELECT *
FROM zemail_1
INTO TABLE gt_mail
WHERE mtype = lv_mtype .

PERFORM populate_message_table_tat.
IF gt_mail[] IS NOT INITIAL.
LOOP AT gt_mail INTO gs_mail.
CLEAR gs_receivers.
gs_receivers-receiver = gs_mail-mail.
gs_receivers-rec_type = 'U'.
gs_receivers-com_type = 'INT'.
gs_receivers-notif_del = 'X'.
gs_receivers-notif_ndel = 'X'.
gs_receivers-express = 'X'.
APPEND gs_receivers TO gt_receivers.
ENDLOOP.
ENDIF.

PERFORM send_email_message_tat.
PERFORM initiate_mail_execute_tat.
ENDFORM. "send_email_tat

*&---------------------------------------------------------------------*
*& Form populate_message_table_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_message_table_tat.
APPEND 'Dear All' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Please find the SC TAT Analysis Report attached herewith.' TO gt_me
ssage.
APPEND ' ' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Regards' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'LAVA ERP Team' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'N.B.: This is system generated mail and in case of any clarificatio
n please contact SAP Team.' TO gt_message.
ENDFORM. "populate_message_table_tat

*&---------------------------------------------------------------------*
*& Form send_email_message_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email_message_tat.
gv_format = 'XLS'.
gv_attdescription = 'SC TAT Analysis Report'.

* Fill the document data.
READ TABLE gt_mess_att INTO gs_mess_att INDEX gv_cnt.
gv_doc_data-doc_size =
( gv_cnt - 1 ) * 255 + STRLEN( gs_mess_att ).

* Populate the subject/generic message attributes
gv_doc_data-obj_langu = sy-langu.
gv_doc_data-obj_name = 'SAPRPT'.
WRITE sy-datum TO gv_doc_data-obj_descr.

gv_doc_data-sensitivty = 'F'.
IF p_bu IS INITIAL.
IF p_snd2rf IS NOT INITIAL.
CONCATENATE 'SC TAT Ana. Rep. - ' gv_doc_data-
obj_descr ' for Repair Factory' INTO gv_doc_data-
obj_descr SEPARATED BY space.
ELSE.
CONCATENATE 'SC TAT Ana. Rep. - ' gv_doc_data-
obj_descr INTO gv_doc_data-obj_descr SEPARATED BY space.
ENDIF.
ELSE.
CONCATENATE 'SC TAT Ana. Rep. - ' gv_doc_data-
obj_descr ' for ' p_bu INTO gv_doc_data-obj_descr SEPARATED BY space.
ENDIF.
IF gt_mess_att[] IS NOT INITIAL.
CLEAR gs_mess_att.
REFRESH gt_attachment.
gt_attachment[] = gt_mess_att[].
ENDIF.


* Describe the body of the message
CLEAR: gs_packing_list, gt_packing_list[].
gs_packing_list-transf_bin = space.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 0.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_message LINES gs_packing_list-body_num.
gs_packing_list-doc_type = 'RAW'.
APPEND gs_packing_list TO gt_packing_list.

gs_packing_list-transf_bin = 'X'.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 1.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_attachment LINES gs_packing_list-body_num.
gs_packing_list-doc_type = gv_format.
gs_packing_list-obj_descr = gv_attdescription.
gs_packing_list-obj_name = gv_attfilename.
gs_packing_list-doc_size = gs_packing_list-body_num * 255 * 2.
APPEND gs_packing_list TO gt_packing_list.

* Call the FM to post the message to SAPMAIL

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = gv_doc_data
put_in_outbox = 'X'
sender_address = 'Lava-ERP@lavainternational.in'
sender_address_type = 'INT'
commit_work = 'X'
IMPORTING
sent_to_all = gv_sent_all
TABLES
packing_list = gt_packing_list[]
contents_bin = gt_attachment[]
contents_txt = gt_message[]
receivers = gt_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.

* Store function module return code
gv_error = sy-subrc.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1.
ELSE.
cl_os_transaction_end_notifier=>raise_commit_requested( ).
CALL FUNCTION 'DB_COMMIT'.
cl_os_transaction_end_notifier=>raise_commit_finished( ).
ENDIF.

ENDFORM. "send_email_message_tat

*&---------------------------------------------------------------------*
*& Form initiate_mail_execute_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM initiate_mail_execute_tat.
WAIT UP TO 1 SECONDS.
IF gv_error EQ 0.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.
ENDFORM. "



*&---------------------------------------------------------------------*
*& Form build_excel
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_excel.
DATA: gt_output TYPE TABLE OF ty_output,
gs_output TYPE ty_output.
CLEAR: gt_attachment[],gv_buffer, gt_mess_att.

SORT gt_st_tat BY qmnum part_code.
DELETE ADJACENT DUPLICATES FROM gt_st_tat COMPARING qmnum part_code.

gs_output-cname = 'ASP Name'.
gs_output-kunum = 'ASP Code'.
gs_output-qmnum = 'Workorder Number'.
gs_output-call_type = 'Call Type'.
gs_output-mapar = 'IMEI Number'.
gs_output-erdat = 'Creation Date'.
gs_output-warranty = 'Warranty'.
gs_output-model = 'Model'.
gs_output-branch = 'Branch'.
gs_output-asm_name = 'ASM Name'.
gs_output-bucket_stat = 'Bucket Status'.
gs_output-bu = 'BU Name'.
gs_output-fault_cod = 'Fault Code'.
gs_output-action_txt = 'Action Taken'.
gs_output-stndby_issued = 'Standy by issued'.
gs_output-stndby_model = 'stand by model'.
gs_output-stndby_imei = 'stand by imei'.
gs_output-lava_cust_tat = 'Lava Customer TAT'.
gs_output-part_code = 'Part Code'.
gs_output-part_desc = 'Part Description'.
gs_output-cfa_stock = 'CFA Stock'.
gs_output-mnoi_stock = 'MNOI Stock'.
gs_output-asp_stock = 'ASP Stock'.
gs_output-part_consumed = 'Part Consumed'.
gs_output-deviceid = 'Engineer Remarks'.
gs_output-kurztext = 'Symptom Code'.
gs_output-pcba_req_on = 'Spare Part Requested Date'.

CLEAR gs_attachment.
CONCATENATE gs_output-cname
gs_output-kunum
gs_output-qmnum
gs_output-call_type
gs_output-mapar
gs_output-erdat
gs_output-warranty
gs_output-model
gs_output-branch
gs_output-asm_name
gs_output-bucket_stat
gs_output-bu
gs_output-fault_cod
gs_output-action_txt
gs_output-stndby_issued
gs_output-stndby_model
gs_output-stndby_imei
gs_output-lava_cust_tat
gs_output-part_code
gs_output-part_desc
gs_output-cfa_stock
gs_output-mnoi_stock
gs_output-asp_stock
gs_output-part_consumed
gs_output-deviceid
gs_output-kurztext
gs_output-pcba_req_on

INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.

CLEAR gs_attachment.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
APPEND gs_attachment TO gt_attachment.

APPEND gs_output TO gt_output.

CLEAR: gs_attachment, gs_st_tat.
LOOP AT gt_st_tat INTO gs_st_tat.
CLEAR gs_output.
WRITE gs_st_tat-cname TO gs_output-cname.
WRITE gs_st_tat-kunum TO gs_output-kunum.
WRITE gs_st_tat-qmnum TO gs_output-qmnum.
WRITE gs_st_tat-call_type TO gs_output-call_type.
WRITE gs_st_tat-mapar TO gs_output-mapar.
WRITE gs_st_tat-erdat TO gs_output-erdat.
WRITE gs_st_tat-warranty TO gs_output-warranty.
WRITE gs_st_tat-model TO gs_output-model.
WRITE gs_st_tat-branch TO gs_output-branch .
WRITE gs_st_tat-asm_name TO gs_output-asm_name.
WRITE gs_st_tat-bucket_stat TO gs_output-bucket_stat.
* *****************code added by vaibhav for adding new status "Send to RF" o
n 8.8.2014**************************
* PERFORM new_status.
* data it_mas TYPE ZS3N_T_NOTIF_MAS.
*select single * from ZS3N_T_NOTIF_MAS into it_mas where
* QMNUM eq gs_output-QMNUM.
* if sy-subrc eq 0 and it_mas-req_id is INITIAL and it_mas-s2rf = 'X' .
* WRITE 'Send to RF' TO gs_output-bucket_stat .
* ELSEIF it_mas-req_id is not INITIAL and it_mas-s2rf = 'X' .
* WRITE 'Pickup Requested' TO gs_output-bucket_stat .
* endif.
* ************************************************************************
**************************

WRITE gs_st_tat-bu TO gs_output-bu.
WRITE gs_st_tat-fault_cod TO gs_output-fault_cod.
WRITE gs_st_tat-action_txt TO gs_output-action_txt.
WRITE gs_st_tat-ssd_tat TO gs_output-ssd_tat.

IF gs_st_tat-stndby_issued IS INITIAL.
gs_output-stndby_issued = 'No'.
ELSE.
gs_output-stndby_issued = 'Yes'.
ENDIF.
WRITE gs_st_tat-stndby_model TO gs_output-stndby_model.
WRITE gs_st_tat-stndby_imei TO gs_output-stndby_imei.
WRITE gs_st_tat-lava_cust_tat TO gs_output-lava_cust_tat.
WRITE gs_st_tat-part_code TO gs_output-part_code.
WRITE gs_st_tat-part_desc TO gs_output-part_desc.
WRITE gs_st_tat-cfa_stock TO gs_output-cfa_stock.
WRITE gs_st_tat-mnoi_stock TO gs_output-mnoi_stock.
WRITE gs_st_tat-asp_stock TO gs_output-asp_stock.
WRITE gs_st_tat-part_cons TO gs_output-part_consumed.
WRITE gs_st_tat-deviceid TO gs_output-deviceid.
WRITE gs_st_tat-kurztext TO gs_output-kurztext.
WRITE gs_st_tat-pcba_req_on TO gs_output-pcba_req_on.

CONCATENATE gs_output-cname
gs_output-kunum
gs_output-qmnum
gs_output-call_type
gs_output-mapar
gs_output-erdat
gs_output-warranty
gs_output-model
gs_output-branch
gs_output-asm_name
gs_output-bucket_stat
gs_output-bu
gs_output-fault_cod
gs_output-action_txt
gs_output-stndby_issued
gs_output-stndby_model
gs_output-stndby_imei
gs_output-lava_cust_tat
gs_output-part_code
gs_output-part_desc
gs_output-cfa_stock
gs_output-mnoi_stock
gs_output-asp_stock
gs_output-part_consumed
gs_output-deviceid
gs_output-kurztext
gs_output-pcba_req_on
INTO gs_attachment SEPARATED BY gc_tab.
IF p_email IS NOT INITIAL.
CONCATENATE gc_cret gs_attachment INTO gs_attachment.
ENDIF.
APPEND gs_attachment TO gt_attachment.
ENDLOOP.

LOOP AT gt_attachment INTO gs_attachment.
CONCATENATE gv_buffer gs_attachment INTO gv_buffer.
ENDLOOP.

CLEAR: gs_mess_att, gt_mess_att[].
DO.
gs_mess_att = gv_buffer.
APPEND gs_mess_att TO gt_mess_att.
SHIFT gv_buffer LEFT BY 255 PLACES.
IF gv_buffer IS INITIAL.
EXIT.
ENDIF.
ENDDO.
ENDFORM. "build_excel

*&---------------------------------------------------------------------*
*& Form send_email
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email.
DATA lv_mtype TYPE zemail_1-mtype.

IF p_bu IS NOT INITIAL.
CONCATENATE '1' p_bu(2) INTO lv_mtype.
ELSE.
lv_mtype = 'SCT'.
ENDIF.
IF p_snd2rf IS NOT INITIAL.
lv_mtype = 'SRF'.
ENDIF.

CLEAR gt_mail[].
SELECT *
FROM zemail_1
INTO TABLE gt_mail
WHERE mtype = lv_mtype.

PERFORM populate_message_table.
IF gt_mail[] IS NOT INITIAL.
LOOP AT gt_mail INTO gs_mail.
CLEAR gs_receivers.
gs_receivers-receiver = gs_mail-mail.
gs_receivers-rec_type = 'U'.
gs_receivers-com_type = 'INT'.
gs_receivers-notif_del = 'X'.
gs_receivers-notif_ndel = 'X'.
gs_receivers-express = 'X'.
APPEND gs_receivers TO gt_receivers.
ENDLOOP.
ENDIF.

PERFORM send_email_message.
PERFORM initiate_mail_execute_program.
ENDFORM. "send_email

*&---------------------------------------------------------------------*
*& Form populate_message_table
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM populate_message_table.
CLEAR gt_message[].
APPEND 'Dear All' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Please find the Pending Call Analysis Report attached herewith.' TO
gt_message.
APPEND ' ' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'Regards' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'LAVA ERP Team' TO gt_message.
APPEND ' ' TO gt_message.
APPEND 'N.B.: This is system generated mail and in case of any clarificatio
n please contact SAP Team.' TO gt_message.
ENDFORM. "populate_message_table

*&---------------------------------------------------------------------*
*& Form send_email_message
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM send_email_message.
gv_format = 'XLS'.
gv_attdescription = 'Pending Call Analysis Report'.

CLEAR gv_doc_data.
* Fill the document data.
READ TABLE gt_mess_att INTO gs_mess_att INDEX gv_cnt.
gv_doc_data-doc_size =
( gv_cnt - 1 ) * 255 + STRLEN( gs_mess_att ).

* Populate the subject/generic message attributes
gv_doc_data-obj_langu = sy-langu.
gv_doc_data-obj_name = 'SAPRPT'.
WRITE sy-datum TO gv_doc_data-obj_descr.
* CONCATENATE 'Pending Call Analysis Report - ' gv_doc_data-
obj_descr INTO gv_doc_data-obj_descr.
gv_doc_data-sensitivty = 'F'.
IF p_bu IS INITIAL.
IF p_snd2rf IS NOT INITIAL.
CONCATENATE 'Pend. Call Ana. Rep. - ' gv_doc_data-
obj_descr ' for Repair Factory' INTO gv_doc_data-
obj_descr SEPARATED BY space.
ELSE.
CONCATENATE 'Pend. Call Ana. Rep. - ' gv_doc_data-
obj_descr INTO gv_doc_data-obj_descr SEPARATED BY space.
ENDIF.
ELSE.
CONCATENATE 'Pend. Call Ana. Rep. - ' gv_doc_data-
obj_descr ' for ' p_bu INTO gv_doc_data-obj_descr SEPARATED BY space.
ENDIF.
IF gt_mess_att[] IS NOT INITIAL.
CLEAR gs_mess_att.
REFRESH gt_attachment.
gt_attachment[] = gt_mess_att[].
ENDIF.


* Describe the body of the message
CLEAR: gs_packing_list, gt_packing_list[].
gs_packing_list-transf_bin = space.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 0.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_message LINES gs_packing_list-body_num.
gs_packing_list-doc_type = 'RAW'.
APPEND gs_packing_list TO gt_packing_list.

gs_packing_list-transf_bin = 'X'.
gs_packing_list-head_start = 1.
gs_packing_list-head_num = 1.
gs_packing_list-body_start = 1.
DESCRIBE TABLE gt_attachment LINES gs_packing_list-body_num.
gs_packing_list-doc_type = gv_format.
gs_packing_list-obj_descr = gv_attdescription.
gs_packing_list-obj_name = gv_attfilename.
gs_packing_list-doc_size = gs_packing_list-body_num * 255 * 2.
APPEND gs_packing_list TO gt_packing_list.

* Call the FM to post the message to SAPMAIL

CALL FUNCTION 'SO_DOCUMENT_SEND_API1'
EXPORTING
document_data = gv_doc_data
put_in_outbox = 'X'
sender_address = 'Lava-ERP@lavainternational.in'
sender_address_type = 'INT'
commit_work = 'X'
IMPORTING
sent_to_all = gv_sent_all
TABLES
packing_list = gt_packing_list[]
contents_bin = gt_attachment[]
contents_txt = gt_message[]
receivers = gt_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.

* Store function module return code
gv_error = sy-subrc.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
WITH sy-msgv1.
ELSE.
cl_os_transaction_end_notifier=>raise_commit_requested( ).
CALL FUNCTION 'DB_COMMIT'.
cl_os_transaction_end_notifier=>raise_commit_finished( ).
ENDIF.

ENDFORM. "send_email_message

*&---------------------------------------------------------------------*
*& Form initiate_mail_execute_program
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM initiate_mail_execute_program.
WAIT UP TO 1 SECONDS.
IF gv_error EQ 0.
SUBMIT rsconn01 WITH mode = 'INT' AND RETURN.
ENDIF.
ENDFORM. "initiate_mail_execute_program

*&---------------------------------------------------------------------*
*& Form get_kunnr
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_kunnr.
TYPES: BEGIN OF ty_kna1,
kunnr TYPE kna1-kunnr,
regio TYPE kna1-regio,
bu TYPE zbu_region-bu,
END OF ty_kna1.
DATA: lt_kna1 TYPE TABLE OF ty_kna1,
ls_kna1 TYPE ty_kna1.

IF p_bu IS NOT INITIAL.
SELECT kn~kunnr
kn~regio
bu~bu
FROM kna1 AS kn
INNER JOIN t005u AS tt ON kn~regio EQ tt~bland
INNER JOIN zbu_region AS bu ON bu~bland EQ kn~regio
INTO TABLE lt_kna1
WHERE tt~spras EQ sy-langu AND
tt~land1 EQ kn~land1 AND
bu~bu = p_bu.
IF sy-subrc NE 0.
*No data found
ENDIF.

LOOP AT lt_kna1 INTO ls_kna1.
gs_kunnr-option = 'EQ'.
gs_kunnr-sign = 'I'.
gs_kunnr-low = ls_kna1-kunnr.
APPEND gs_kunnr TO gt_kunnr.
ENDLOOP.
ENDIF.

ENDFORM. "get_kunnr

*&---------------------------------------------------------------------*
*& Form save_tat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM save_tat.
DATA lv_date TYPE char10.
DATA lv_time TYPE char10.
DATA lv_filename TYPE string.

WRITE sy-datum TO lv_date.
lv_time = sy-uzeit .
CONCATENATE p_folder 'SC TAT' lv_date '_' lv_time '.XLS' INTO lv_filename.
IF p_server IS INITIAL.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
TABLES
data_tab = gt_attachment
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0 .
LOOP AT gt_attachment INTO gs_attachment.
TRANSFER gs_attachment TO lv_filename.
ENDLOOP.
CLOSE DATASET lv_filename.
ENDIF.
ENDIF.
ENDFORM. "save_tat


*&---------------------------------------------------------------------*
*& Form save_pc
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM save_pc.
DATA lv_date TYPE char10.
DATA lv_time TYPE char10.

DATA lv_filename TYPE string.

WRITE sy-datum TO lv_date.
lv_time = sy-uzeit .
CONCATENATE p_folder 'Pending Calls' lv_date '_' lv_time '.XLS' INTO lv_fil
ename.

IF p_server IS INITIAL.

CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
filename = lv_filename
TABLES
data_tab = gt_attachment
EXCEPTIONS
file_write_error = 1
no_batch = 2
gui_refuse_filetransfer = 3
invalid_type = 4
no_authority = 5
unknown_error = 6
header_not_allowed = 7
separator_not_allowed = 8
filesize_not_allowed = 9
header_too_long = 10
dp_error_create = 11
dp_error_send = 12
dp_error_write = 13
unknown_dp_error = 14
access_denied = 15
dp_out_of_memory = 16
disk_full = 17
dp_timeout = 18
file_not_found = 19
dataprovider_exception = 20
control_flush_error = 21
OTHERS = 22.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ELSE.
OPEN DATASET lv_filename FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc = 0 .
LOOP AT gt_attachment INTO gs_attachment.
TRANSFER gs_attachment TO lv_filename.
ENDLOOP.
CLOSE DATASET lv_filename.
ENDIF.
ENDIF.
ENDFORM. "save_pc
*&---------------------------------------------------------------------*
*& Form NEW_STATUS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
*FORM NEW_STATUS .
*
*ENDFORM. " NEW_STATUS

Vous aimerez peut-être aussi