Skip to content

Instantly share code, notes, and snippets.

@antelio
Created February 20, 2019 20:37
Show Gist options
  • Save antelio/e0d5e96289fe8e68dd67f1e58dd09703 to your computer and use it in GitHub Desktop.
Save antelio/e0d5e96289fe8e68dd67f1e58dd09703 to your computer and use it in GitHub Desktop.
*&---------------------------------------------------------------------*
*& Include ZINCL_CUSTOMER
*&---------------------------------------------------------------------*
TYPES: BEGIN OF taddr,
addrn TYPE adrct-addrnumber,
END OF taddr.
DATA: wa_addr TYPE taddr,
wa_kna1 TYPE kna1.
DATA: tb_addr TYPE TABLE OF taddr,
tb_kna1 TYPE TABLE OF kna1.
*&---------------------------------------------------------------------*
*& Form loop_addr
*&---------------------------------------------------------------------*
FORM loop_addr.
APPEND wa_addr TO tb_addr.
ENDFORM. "loop_addr
*&---------------------------------------------------------------------*
*& Form loop_kna1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM loop_kna1.
APPEND wa_kna1 TO tb_kna1.
ENDFORM. "loop_addr
*&---------------------------------------------------------------------*
*& Form CREATE_CUSTOMER
*&---------------------------------------------------------------------*
FORM create_customer TABLES tb_knbk STRUCTURE fknbk
tb_knvi STRUCTURE fknvi
tb_knvp STRUCTURE fknvp
tb_bapiadsmtp STRUCTURE bapiadsmtp
tb_bapiadsmt_x STRUCTURE bapiadsmtx
tb_bapiaduri STRUCTURE bapiaduri
tb_bapiaduri_x STRUCTURE bapiadurix
tb_bapicomrem STRUCTURE bapicomrem
tb_bapicomre_x STRUCTURE bapicomrex
tb_bapiadtel STRUCTURE bapiadtel
tb_bapiadtel_x STRUCTURE bapiadtelx
messages STRUCTURE bapiret2
USING p_kna1 TYPE kna1
p_knb1 TYPE knb1
p_knvv TYPE knvv
p_addr TYPE bapiaddr1
CHANGING p_customer_id TYPE kunnr
p_fail.
DATA: v_kunnr TYPE kunnr,
v_subrc(2) TYPE n, "sy-subrc,
v_obj_id TYPE bapi4001_1-objkey,
v_obj_type TYPE bapi4001_1-objtype,
wa_kna1 TYPE kna1.
DATA: v_zterm TYPE knb1-zterm, "PRB10312 - 19/04/2013
v_zwels TYPE knb1-zwels, "PRB10312 - 19/04/2013
v_message TYPE text200, "PRB10312 - 19/04/2013
v_extid TYPE text100, "PRB10312 - 19/04/2013
v_cli TYPE kunnr. "PRB10312 - 19/04/2013
DATA: t_adrct TYPE TABLE OF adrct.
FIELD-SYMBOLS: <fs_adrct> TYPE adrct.
CLEAR p_customer_id.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = p_kna1
i_knb1 = p_knb1
i_knvv = p_knvv
i_bapiaddr1 = p_addr
pi_postflag = 'X'
IMPORTING
e_kunnr = p_customer_id
o_kna1 = wa_kna1
TABLES
t_xknbk = tb_knbk
t_xknvp = tb_knvp
t_xknvi = tb_knvi
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc EQ 0.
* PRB10312 - 19/04/2013 - Início
FREE cl_log.
CLEAR: v_zterm, v_zwels.
IF p_customer_id IS INITIAL.
v_cli = p_kna1-kunnr.
ELSE.
v_cli = p_customer_id.
ENDIF.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = v_cli.
v_extid = v_cli.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - create_customer) Depois da criação do cliente - KNB1-ZTERM = ' v_zterm
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - create_customer) Depois da criação do cliente - KNB1-ZWELS = ' v_zwels
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
CLEAR v_obj_id.
v_kunnr = p_customer_id.
IF v_kunnr IS INITIAL.
v_kunnr = p_kna1-kunnr.
ENDIF.
UNPACK v_kunnr TO v_kunnr.
v_obj_id = v_kunnr.
WRITE 'KNA1' TO v_obj_type.
CALL FUNCTION 'BAPI_ADDRESSORG_CHANGE'
EXPORTING
obj_type = v_obj_type
obj_id = v_obj_id
context = 1
TABLES
bapiadtel = tb_bapiadtel
bapiadsmtp = tb_bapiadsmtp
bapiaduri = tb_bapiaduri
bapiadtel_x = tb_bapiadtel_x
bapiadsmt_x = tb_bapiadsmt_x
bapiaduri_x = tb_bapiaduri_x
return = messages.
** Inicio Alt. AVSA
READ TABLE messages WITH KEY type = c_e.
IF sy-subrc EQ 0.
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
CLEAR p_customer_id.
p_fail = c_x.
ELSE.
PERFORM bapi_commit.
SELECT *
FROM adrct
INTO TABLE t_adrct
WHERE addrnumber = wa_kna1-adrnr.
LOOP AT t_adrct ASSIGNING <fs_adrct>.
IF sy-langu NE 'E'.
<fs_adrct>-langu = 'E'.
ENDIF.
IF sy-langu NE 'P'.
<fs_adrct>-langu = 'P'.
ENDIF.
ENDLOOP.
IF NOT t_adrct IS INITIAL.
MODIFY adrct FROM TABLE t_adrct.
COMMIT WORK AND WAIT.
ENDIF.
ENDIF.
* IF sy-subrc EQ 0.
* PERFORM bapi_commit.
* ELSE.
* PERFORM bapi_rollback.
* PERFORM log_message
* TABLES messages
* USING sy-subrc.
*
* CLEAR p_customer_id.
* p_fail = c_x.
* ENDIF.
** Fim Alt. AVSA
ELSE.
* PRB10312 - 19/04/2013 - Início
v_subrc = sy-subrc.
CLEAR: v_zterm, v_zwels.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_customer_id.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - create_customer) Erro na criação do cliente - KNB1-ZTERM = ' v_zterm
'- SY-SUBRC = ' v_subrc '(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - create_customer) Erro na criação do cliente - KNB1-ZWELS = ' v_zwels
'- SY-SUBRC = ' v_subrc '(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
CLEAR p_customer_id.
p_fail = c_x.
ENDIF.
ENDFORM. " CREATE_CUSTOMER
*&---------------------------------------------------------------------*
*& Form change_manager
*&---------------------------------------------------------------------*
FORM change_manager TABLES tb_knvp STRUCTURE fknvp
tb_knvp_aux STRUCTURE fknvp
messages STRUCTURE bapiret2
USING p_kna1 TYPE kna1
p_manager
p_new.
DATA: v_zterm TYPE knb1-zterm, "PRB10312 - 19/04/2013
v_zwels TYPE knb1-zwels, "PRB10312 - 19/04/2013
v_message TYPE text200, "PRB10312 - 19/04/2013
v_extid TYPE text100. "PRB10312 - 19/04/2013
FIELD-SYMBOLS: <knvp> TYPE fknvp.
IF p_new IS INITIAL.
* LOOP AT tb_knvp ASSIGNING <knvp> WHERE pernr IS NOT INITIAL.
LOOP AT tb_knvp_aux ASSIGNING <knvp> WHERE pernr IS NOT INITIAL.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = p_kna1
pi_postflag = 'X'
TABLES
* t_yknvp = tb_knvp
t_yknvp = tb_knvp_aux
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc EQ 0.
PERFORM bapi_commit.
* PRB10312 - 19/04/2013 - Início
CLEAR: v_zterm, v_zwels.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm,v_zwels)
WHERE kunnr = p_kna1-kunnr.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_NEW vazio - Depois da alteração - KNB1-ZTERM = ' v_zterm
INTO v_message
SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_NEW vazio - Depois da alteração - KNB1-ZWELS = ' v_zwels
INTO v_message
SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
ELSE.
* PRB10312 - 19/04/2013 - Início
CLEAR: v_zterm, v_zwels.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_kna1-kunnr.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_NEW vazio - Erro na atualização do cliente - KNB1-ZTERM = ' v_zterm
INTO v_message
SEPARATED BY space.
PERFORM log USING v_extid v_message 'E'.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_NEW vazio - Erro na atualização do cliente - KNB1-ZWELS = ' v_zwels
INTO v_message
SEPARATED BY space.
PERFORM log USING v_extid v_message 'E'.
* PRB10312 - 19/04/2013 - Fim
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
ENDIF.
ENDLOOP.
ENDIF.
IF p_manager IS NOT INITIAL.
LOOP AT tb_knvp ASSIGNING <knvp>.
<knvp>-pernr = p_manager.
<knvp>-kz = 'I'.
ENDLOOP.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = p_kna1
pi_postflag = 'X'
TABLES
t_xknvp = tb_knvp
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc EQ 0.
PERFORM bapi_commit.
* PRB10312 - 19/04/2013 - Início
CLEAR: v_zterm, v_zwels.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_kna1-kunnr.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_MANAGER preenchido - Depois da alteração - KNB1-ZTERM = ' v_zterm
INTO v_message
SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_MANAGER preenchido - Depois da alteração - KNB1-ZWELS = ' v_zwels
INTO v_message
SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
ELSE.
* PRB10312 - 19/04/2013 - Início
CLEAR: v_zterm, v_zwels.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_kna1-kunnr.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_MANAGER preenchido - Erro na atualização do cliente - KNB1-ZTERM = ' v_zterm
INTO v_message
SEPARATED BY space.
PERFORM log USING v_extid v_message 'E'.
CONCATENATE '(ZLWS2_CHANGE_CUSTOMER - change_manager) P_MANAGER preenchido - Erro na atualização do cliente - KNB1-ZWELS = ' v_zwels
INTO v_message
SEPARATED BY space.
PERFORM log USING v_extid v_message 'E'.
* PRB10312 - 19/04/2013 - Fim
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
ENDIF.
ENDIF.
ENDFORM. "change_manager
*&---------------------------------------------------------------------*
*& Form put_billing_info
*&---------------------------------------------------------------------*
FORM put_billing_info TABLES tb_knbk STRUCTURE fknbk
tb_knvi STRUCTURE fknvi
tb_yknbk STRUCTURE fknbk
tb_bapiadsmtp STRUCTURE bapiadsmtp
tb_bapiadsmt_x STRUCTURE bapiadsmtx
tb_bapiaduri STRUCTURE bapiaduri
tb_bapiaduri_x STRUCTURE bapiadurix
tb_bapiadtel STRUCTURE bapiadtel
tb_bapiadtel_x STRUCTURE bapiadtelx
messages STRUCTURE bapiret2
USING p_kna1 TYPE kna1
p_knb1 TYPE knb1
p_knvv TYPE knvv
p_addr TYPE bapiaddr1
CHANGING p_fail.
DATA: v_kunnr TYPE kunnr,
v_subrc TYPE sy-subrc,
v_obj_id TYPE bapi4001_1-objkey,
v_obj_type TYPE bapi4001_1-objtype,
* PRB10312 - 19/04/2013 - Início
v_message TYPE text200,
v_extid TYPE text100,
v_zterm TYPE knb1-zterm,
v_zwels TYPE knb1-zwels, "PRB10312 - 19/04/2013
lv_subrc(2) TYPE n.
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Antes alteração cliente - KNB1-ZTERM ='
p_knb1-zterm
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF p_knb1-zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Antes alteração cliente - KNB1-ZWELS ='
p_knb1-zwels
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF p_knb1-zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Antes alteração cliente - KNVV-ZTERM ='
p_knvv-zterm
'(' p_knvv-vkorg ')'
INTO v_message
SEPARATED BY space.
IF p_knvv-zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = p_kna1
i_knb1 = p_knb1
i_knvv = p_knvv
i_bapiaddr1 = p_addr
pi_postflag = 'X'
TABLES
t_xknbk = tb_knbk
t_yknbk = tb_yknbk
t_xknvi = tb_knvi
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc EQ 0.
* PRB10312 - 19/04/2013 - Início
v_extid = p_kna1-kunnr.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_kna1-kunnr
AND bukrs = p_knb1-bukrs.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Depois da alteração do cliente - KNB1-ZTERM ='
v_zterm
'(' p_knb1-bukrs ')'
INTO v_message SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Depois da alteração do cliente - KNB1-ZWELS ='
v_zwels
'(' p_knb1-bukrs ')'
INTO v_message SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
CLEAR v_obj_id.
v_kunnr = p_kna1-kunnr.
UNPACK v_kunnr TO v_kunnr.
v_obj_id = v_kunnr.
WRITE 'KNA1' TO v_obj_type.
CALL FUNCTION 'BAPI_ADDRESSORG_CHANGE'
EXPORTING
obj_type = v_obj_type
obj_id = v_obj_id
context = 1
TABLES
bapiadtel = tb_bapiadtel
bapiadsmtp = tb_bapiadsmtp
bapiaduri = tb_bapiaduri
bapiadtel_x = tb_bapiadtel_x
bapiadsmt_x = tb_bapiadsmt_x
bapiaduri_x = tb_bapiaduri_x
return = messages.
IF sy-subrc EQ 0.
PERFORM bapi_commit.
ELSE.
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
* PRB10686 - 22/05/2013 - Início
lv_subrc = sy-subrc.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Erro na alteração de BAPI_ADDRESSORG_CHANGE - SY-SUBRC ='
lv_subrc
INTO v_message SEPARATED BY space.
v_extid = p_kna1-kunnr.
PERFORM log USING v_extid v_message 'E'.
* PRB10686 - 22/05/2013 - Fim
p_fail = c_x.
ENDIF.
ELSE.
* PRB10312 - 19/04/2013 - Início
lv_subrc = sy-subrc.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info) Erro na alteração do cliente - SY-SUBRC ='
lv_subrc
INTO v_message SEPARATED BY space.
v_extid = p_kna1-kunnr.
PERFORM log USING v_extid v_message 'E'.
* PRB10312 - 19/04/2013 - Fim
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
p_fail = c_x.
ENDIF.
ENDFORM. "put_billing_info
*&---------------------------------------------------------------------*
*& Form get_kna1_addr
*&---------------------------------------------------------------------*
FORM get_kna1_addr TABLES p_results TYPE STANDARD TABLE
USING p_addr.
REFRESH p_results.
SELECT kunnr stcd1 stcd2 erdat name1 name2
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE p_results
WHERE adrnr EQ p_addr
AND ktokd NOT IN ('CLSI','Z006').
ENDFORM. "get_kna1_addr
*&---------------------------------------------------------------------*
*& Form get_login
*&---------------------------------------------------------------------*
FORM get_login USING p_addr CHANGING p_login.
CLEAR p_login.
SELECT SINGLE remark
FROM adrct
INTO p_login
WHERE addrnumber EQ p_addr.
ENDFORM. "get_login
*&---------------------------------------------------------------------*
*& Form get_email
*&---------------------------------------------------------------------*
FORM get_email USING p_addr CHANGING p_email.
CLEAR p_email.
SELECT SINGLE smtp_addr
FROM adr6
INTO p_email
WHERE addrnumber EQ p_addr
AND dft_receiv EQ 'X'.
ENDFORM. "get_email
*&---------------------------------------------------------------------*
*& Form get_manager
*&---------------------------------------------------------------------*
FORM get_manager USING p_kunnr CHANGING p_manager.
CLEAR p_manager.
SELECT SINGLE pernr
FROM knvp
INTO p_manager
WHERE kunnr EQ p_kunnr
AND vkorg EQ '0100'
AND vtweg EQ '10'
AND spart EQ '10'
AND parvw EQ 'ZC'.
ENDFORM. "get_manager
*&---------------------------------------------------------------------*
*& Form append_customer
*&---------------------------------------------------------------------*
FORM append_customer TABLES p_customers STRUCTURE zstlw_read_customer
USING p_data TYPE read_cust.
DATA: wa_cust TYPE zstlw_read_customer.
CLEAR wa_cust.
wa_cust-id = p_data-kunnr.
wa_cust-login = p_data-remark.
wa_cust-email = p_data-smtp_addr.
wa_cust-cpf = p_data-stcd2.
wa_cust-cnpj = p_data-stcd1.
wa_cust-manager_id = p_data-pernr.
wa_cust-created_at = p_data-erdat.
CONCATENATE p_data-name1 p_data-name2 INTO wa_cust-name.
APPEND wa_cust TO p_customers.
ENDFORM. "append_customer
*&---------------------------------------------------------------------*
*& Form search_by_login
*&---------------------------------------------------------------------*
FORM search_by_login TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_login.
DATA: wa_login TYPE adrct-remark.
DATA: t_results TYPE TABLE OF read_cust WITH HEADER LINE.
REFRESH: t_results, tb_addr.
"Busca endereço
CLEAR wa_login.
wa_login = p_login.
TRANSLATE wa_login TO UPPER CASE.
EXEC SQL PERFORMING loop_addr.
SELECT DISTINCT addrnumber
INTO :wa_addr
FROM adrct
WHERE upper(remark) = :wa_login
AND client = :sy-mandt
ENDEXEC.
IF tb_addr[] IS NOT INITIAL.
LOOP AT tb_addr INTO wa_addr.
PERFORM get_kna1_addr
TABLES t_results
USING wa_addr.
LOOP AT t_results.
t_results-remark = p_login.
PERFORM get_email USING wa_addr CHANGING t_results-smtp_addr.
PERFORM get_manager USING t_results-kunnr CHANGING t_results-pernr.
PERFORM append_customer TABLES t_customers USING t_results.
ENDLOOP.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_login
*&---------------------------------------------------------------------*
*& Form search_by_email
*&---------------------------------------------------------------------*
FORM search_by_email TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_email.
DATA: wa_email TYPE adr6-smtp_addr.
DATA: t_results TYPE TABLE OF read_cust WITH HEADER LINE.
REFRESH: t_results, tb_addr.
"Busca endereço
CLEAR: wa_email.
wa_email = p_email.
TRANSLATE wa_email TO UPPER CASE.
EXEC SQL PERFORMING loop_addr.
SELECT addrnumber
INTO :wa_addr
FROM adr6
WHERE upper(smtp_addr) = :wa_email
AND client = :sy-mandt
*** Inicio Alt. AA - Buscar emails ativos - Story 41150393
* AND dft_receiv = :'X'
AND flg_nouse = :'X'
*** Fim Alt. AA - Buscar emails ativos - Story 41150393
ENDEXEC.
IF tb_addr[] IS NOT INITIAL.
LOOP AT tb_addr INTO wa_addr.
PERFORM get_kna1_addr
TABLES t_results
USING wa_addr.
LOOP AT t_results.
t_results-smtp_addr = p_email.
PERFORM get_login USING wa_addr CHANGING t_results-remark.
PERFORM get_manager USING t_results-kunnr CHANGING t_results-pernr.
PERFORM append_customer TABLES t_customers USING t_results.
ENDLOOP.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_email
*&---------------------------------------------------------------------*
*& Form search_by_prov_id
*&---------------------------------------------------------------------*
FORM search_by_prov_id TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_provid.
DATA: wa_custid TYPE kunnr,
wa_result TYPE read_cust.
CLEAR: wa_custid, wa_result.
IF ycsv_feature_toggle=>is_enable( 'create_provisioning_table' ) EQ ych_boolean=>false.
SELECT SINGLE k~kunnr
FROM vbap AS p
INNER JOIN vbak AS k
ON p~mandt = k~mandt
AND p~vbeln = k~vbeln
INTO wa_custid
WHERE p~zzprovisioning EQ p_provid.
ELSE.
SELECT SINGLE k~kunnr
FROM ztb_provisioning AS p
INNER JOIN vbak AS k
ON p~mandt EQ k~mandt
AND p~contract_id EQ k~vbeln
INTO wa_custid
WHERE p~id EQ p_provid.
ENDIF.
IF wa_custid IS NOT INITIAL.
SELECT SINGLE kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF wa_result
WHERE kunnr EQ wa_custid
AND ktokd NOT IN ('CLSI','Z006').
PERFORM get_login USING wa_result-adrnr CHANGING wa_result-remark.
PERFORM get_email USING wa_result-adrnr CHANGING wa_result-smtp_addr.
PERFORM get_manager USING wa_custid CHANGING wa_result-pernr.
PERFORM append_customer TABLES t_customers USING wa_result.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_prov_id
*&---------------------------------------------------------------------*
*& Form search_by_cpf
*&---------------------------------------------------------------------*
FORM search_by_cpf TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_cpf.
DATA: tb_results TYPE TABLE OF read_cust WITH HEADER LINE.
REFRESH tb_results.
SELECT kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE tb_results
WHERE stcd2 EQ p_cpf
AND ktokd NOT IN ('CLSI','Z006').
IF tb_results[] IS NOT INITIAL.
LOOP AT tb_results.
PERFORM get_login USING tb_results-adrnr CHANGING tb_results-remark.
PERFORM get_email USING tb_results-adrnr CHANGING tb_results-smtp_addr.
PERFORM get_manager USING tb_results-kunnr CHANGING tb_results-pernr.
PERFORM append_customer TABLES t_customers USING tb_results.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_cpf
*&---------------------------------------------------------------------*
*& Form search_by_cnpj
*&---------------------------------------------------------------------*
FORM search_by_cnpj TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_cnpj.
DATA: tb_results TYPE TABLE OF read_cust WITH HEADER LINE.
REFRESH tb_results.
SELECT kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE tb_results
WHERE stcd1 EQ p_cnpj
AND ktokd NOT IN ('CLSI','Z006').
IF tb_results[] IS NOT INITIAL.
LOOP AT tb_results.
PERFORM get_login USING tb_results-adrnr CHANGING tb_results-remark.
PERFORM get_email USING tb_results-adrnr CHANGING tb_results-smtp_addr.
PERFORM get_manager USING tb_results-kunnr CHANGING tb_results-pernr.
PERFORM append_customer TABLES t_customers USING tb_results.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_cnpj
*&---------------------------------------------------------------------*
*& Form search_by_name
*&---------------------------------------------------------------------*
FORM search_by_name TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_name.
DATA: wa_name(70) TYPE c,
wa_result TYPE read_cust.
REFRESH: tb_kna1, t_customers.
CLEAR: wa_name.
CONCATENATE '%' p_name '%' INTO wa_name.
TRANSLATE wa_name TO UPPER CASE.
EXEC SQL PERFORMING loop_kna1.
SELECT *
INTO :wa_kna1
FROM kna1
WHERE concat(upper(name1),upper(name2)) like :wa_name
AND ktokd not in ('CLSI','Z006')
AND mandt = :sy-mandt
ENDEXEC.
IF tb_kna1[] IS NOT INITIAL.
LOOP AT tb_kna1 INTO wa_kna1.
CLEAR wa_result.
MOVE-CORRESPONDING wa_kna1 TO wa_result.
PERFORM get_login USING wa_kna1-adrnr CHANGING wa_result-remark.
PERFORM get_email USING wa_kna1-adrnr CHANGING wa_result-smtp_addr.
PERFORM get_manager USING wa_kna1-kunnr CHANGING wa_result-pernr.
PERFORM append_customer TABLES t_customers USING wa_result.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_name
*&---------------------------------------------------------------------*
*& Form search_by_manager
*&---------------------------------------------------------------------*
FORM search_by_manager TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_manager.
DATA: tb_knvp TYPE TABLE OF knvp WITH HEADER LINE,
wa_result TYPE read_cust.
REFRESH: t_customers, tb_knvp.
SELECT *
FROM knvp
INTO TABLE tb_knvp
WHERE pernr EQ p_manager
AND vkorg EQ '0100'
AND vtweg EQ '10'
AND spart EQ '10'
AND parvw EQ 'ZC'.
IF tb_knvp[] IS NOT INITIAL.
LOOP AT tb_knvp.
CLEAR: wa_result.
SELECT SINGLE kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF wa_result
WHERE kunnr EQ tb_knvp-kunnr
AND ktokd NOT IN ('CLSI','Z006').
wa_result-pernr = p_manager.
PERFORM get_login USING wa_result-adrnr CHANGING wa_result-remark.
PERFORM get_email USING wa_result-adrnr CHANGING wa_result-smtp_addr.
PERFORM append_customer TABLES t_customers USING wa_result.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_manager
*&---------------------------------------------------------------------*
*& Form search_by_serv_key
*&---------------------------------------------------------------------*
FORM search_by_serv_key TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_servkey.
DATA: tb_vbap TYPE TABLE OF vbap,
tb_vbak TYPE TABLE OF vbak WITH HEADER LINE.
DATA wa_result TYPE read_cust.
REFRESH: t_customers, tb_vbap, tb_vbap.
SELECT DISTINCT vbeln
FROM vbap
INTO CORRESPONDING FIELDS OF TABLE tb_vbap
WHERE matnr EQ p_servkey.
SELECT DISTINCT kunnr
FROM vbak
INTO CORRESPONDING FIELDS OF TABLE tb_vbak
FOR ALL ENTRIES IN tb_vbap
WHERE vbeln EQ tb_vbap-vbeln.
IF tb_vbak[] IS NOT INITIAL.
LOOP AT tb_vbak.
CLEAR: wa_result.
SELECT SINGLE kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF wa_result
WHERE kunnr EQ tb_vbak-kunnr
AND ktokd NOT IN ('CLSI','Z006').
PERFORM get_login USING wa_result-adrnr CHANGING wa_result-remark.
PERFORM get_email USING wa_result-adrnr CHANGING wa_result-smtp_addr.
PERFORM get_manager USING wa_result-kunnr CHANGING wa_result-pernr.
PERFORM append_customer TABLES t_customers USING wa_result.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_serv_key
*&---------------------------------------------------------------------*
*& Form search_by_created_at
*&---------------------------------------------------------------------*
FORM search_by_created_at TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_datfrom p_datto.
DATA: tb_results TYPE TABLE OF read_cust WITH HEADER LINE.
DATA: r_erdat TYPE RANGE OF kna1-erdat,
i_erdat LIKE LINE OF r_erdat.
REFRESH: t_customers, tb_results, r_erdat.
CLEAR i_erdat.
IF p_datfrom IS NOT INITIAL AND p_datto IS NOT INITIAL.
i_erdat-sign = 'I'.
i_erdat-option = 'BT'.
i_erdat-low = p_datfrom.
i_erdat-high = p_datto.
APPEND i_erdat TO r_erdat.
ELSEIF p_datfrom IS NOT INITIAL.
i_erdat-sign = 'I'.
i_erdat-option = 'GE'.
i_erdat-low = p_datfrom.
APPEND i_erdat TO r_erdat.
ELSEIF p_datto IS NOT INITIAL.
i_erdat-sign = 'I'.
i_erdat-option = 'LE'.
i_erdat-low = p_datto.
APPEND i_erdat TO r_erdat.
ENDIF.
SELECT kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF TABLE tb_results
WHERE erdat IN r_erdat
AND ktokd NOT IN ('CLSI','Z006').
IF tb_results[] IS NOT INITIAL.
LOOP AT tb_results.
PERFORM get_login USING tb_results-adrnr CHANGING tb_results-remark.
PERFORM get_email USING tb_results-adrnr CHANGING tb_results-smtp_addr.
PERFORM get_manager USING tb_results-kunnr CHANGING tb_results-pernr.
PERFORM append_customer TABLES t_customers USING tb_results.
ENDLOOP.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_created_at
*&---------------------------------------------------------------------*
*& Form search_by_contract
*&---------------------------------------------------------------------*
FORM search_by_contract TABLES t_customers STRUCTURE zstlw_read_customer
t_messages STRUCTURE bapiret2
USING p_contract.
DATA: wa_result TYPE read_cust,
wa_kunnr TYPE kunnr.
REFRESH: t_customers.
CLEAR wa_kunnr.
SELECT SINGLE kunnr
FROM vbak
INTO wa_kunnr
WHERE vbeln EQ p_contract.
IF wa_kunnr IS NOT INITIAL.
CLEAR: wa_result.
SELECT SINGLE kunnr stcd1 stcd2 erdat name1 name2 adrnr
FROM kna1
INTO CORRESPONDING FIELDS OF wa_result
WHERE kunnr EQ wa_kunnr
AND ktokd NOT IN ('CLSI','Z006').
PERFORM get_login USING wa_result-adrnr CHANGING wa_result-remark.
PERFORM get_email USING wa_result-adrnr CHANGING wa_result-smtp_addr.
PERFORM get_manager USING wa_result-kunnr CHANGING wa_result-pernr.
PERFORM append_customer TABLES t_customers USING wa_result.
ELSE.
t_messages-type = 'E'.
t_messages-message = text-070.
APPEND t_messages.
ENDIF.
ENDFORM. "search_by_serv_key
*&---------------------------------------------------------------------*
*& Form get_billing_data
*&---------------------------------------------------------------------*
FORM get_billing_data TABLES messages STRUCTURE bapiret2
USING p_id
CHANGING p_paymethod p_dueday p_paycondition.
DATA: v_message TYPE text200, "PRB10312 - 19/04/2013
v_extid TYPE text100. "PRB10312 - 19/04/2013
CLEAR: p_paymethod, p_dueday, p_paycondition.
SELECT SINGLE zterm zwels
FROM knb1
INTO (p_paycondition, p_paymethod)
WHERE kunnr EQ p_id.
IF sy-subrc NE 0.
* PRB10312 - 19/04/2013 - Início
v_message = '(ZLWS2_GET_BILLING_INFO - get_billing_data) Não achou cliente na KNB1'.
v_extid = p_id.
PERFORM log USING v_extid v_message 'E'.
* PRB10312 - 19/04/2013 - Fim
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '029'.
messages-message = text-029.
APPEND messages.
EXIT.
* PRB10312 - 19/04/2013 - Início
ELSE.
v_extid = p_id.
CONCATENATE '(ZLWS2_GET_BILLING_INFO - get_billing_data) Leitura do cliente na KNB1 - ZTERM = ' p_paycondition
INTO v_message
SEPARATED BY space.
IF p_paycondition IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_GET_BILLING_INFO - get_billing_data) Leitura do cliente na KNB1 - ZWELS = ' p_paymethod
INTO v_message
SEPARATED BY space.
IF p_paymethod IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
ENDIF.
IF p_paymethod EQ space.
* CLEAR p_paycondition. "PRB10312 - 19/04/2013 - Comentado
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '045'.
messages-message = text-045.
APPEND messages.
EXIT.
ENDIF.
SELECT SINGLE kvgr1
FROM knvv
INTO p_dueday
WHERE kunnr EQ p_id.
ENDFORM. "get_billing_data
*&---------------------------------------------------------------------*
*& Form get_boleto
*&---------------------------------------------------------------------*
FORM get_boleto USING p_id p_bank CHANGING p_boleto TYPE zstlw_boleto.
CLEAR: p_boleto.
p_boleto-bank = p_bank.
SELECT SINGLE katr1
FROM kna1
INTO p_boleto-receive
WHERE kunnr EQ p_id.
ENDFORM. "get_boleto
*&---------------------------------------------------------------------*
*& Form get_credit_limit
*&---------------------------------------------------------------------*
FORM get_credit_limit USING p_id CHANGING p_credit_limit. " TYPE knkk_klimk.
CLEAR: p_credit_limit.
*** Alt. AVSA - Retornar Saldo do limite de credito do cliente
* SELECT SINGLE KLIMK
* FROM KNKK
* INTO p_credit_limit
* WHERE KUNNR = p_id
* AND KKBER = '0010'.
SELECT SINGLE klime
FROM knka
INTO p_credit_limit
WHERE kunnr = p_id.
ENDFORM. "get_credit_limit
*&---------------------------------------------------------------------*
*& Form get_account_debit
*&---------------------------------------------------------------------*
FORM get_account_debit TABLES messages STRUCTURE bapiret2
USING p_id
CHANGING p_account TYPE zstlw_account_debit.
DATA: wa_knbk TYPE knbk.
CLEAR: p_account, wa_knbk.
SELECT SINGLE *
FROM knbk
INTO wa_knbk
WHERE kunnr EQ p_id.
IF sy-subrc EQ 0.
p_account-bank = wa_knbk-bankl(3).
p_account-agency_number = wa_knbk-bankl+4.
IF wa_knbk-bkont(1) NE c_dig_null. "Digito nulo = N
p_account-agency_digit = wa_knbk-bkont(1).
ENDIF.
p_account-account_number = wa_knbk-bankn.
IF wa_knbk-bkont+1(1) NE c_dig_null. "Digito nulo = N
p_account-account_digit = wa_knbk-bkont+1.
ENDIF.
p_account-name = wa_knbk-koinh.
p_account-document = wa_knbk-bkref.
ELSE.
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '122'.
messages-message = text-122.
APPEND messages.
EXIT.
ENDIF.
ENDFORM. "get_account_debit
*&---------------------------------------------------------------------*
*& Form get_credit_card
*&---------------------------------------------------------------------*
FORM get_credit_card TABLES messages STRUCTURE bapiret2
USING p_id CHANGING p_creditcard TYPE zstlw_credit_card.
DATA: wa_vcnum TYPE vcnum,
wa_vckun TYPE vckun,
wa_knvp TYPE knvp,
vl_tam TYPE i,
vl_aux TYPE i,
vl_msk TYPE i.
CLEAR: wa_vcnum, wa_vckun, wa_knvp, p_creditcard.
SELECT SINGLE *
FROM knvp
INTO wa_knvp
WHERE kunnr = p_id
AND parvw = 'ZG'.
IF sy-subrc NE 0.
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '123'.
messages-message = text-123.
APPEND messages.
EXIT.
ENDIF.
SELECT SINGLE *
FROM vckun
INTO wa_vckun
WHERE kunnr EQ wa_knvp-kunn2.
IF sy-subrc NE 0.
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '124'.
messages-message = text-124.
APPEND messages.
EXIT.
ENDIF.
SELECT SINGLE *
FROM vcnum
INTO wa_vcnum
WHERE ccins EQ wa_vckun-ccins
AND ccnum EQ wa_vckun-ccnum.
* SELECT SINGLE begru
* FROM kna1
* INTO p_creditcard-security_code
* WHERE kunnr EQ p_id.
IF sy-subrc NE 0.
messages-type = 'E'.
messages-id = 'ZMSG'.
messages-number = '124'.
messages-message = text-124.
APPEND messages.
EXIT.
ENDIF.
p_creditcard-type = wa_vckun-ccins.
p_creditcard-expiry_date = wa_vcnum-datbi.
p_creditcard-name = wa_vcnum-ccname.
p_creditcard-security_code = wa_vcnum-ccard_id.
vl_tam = STRLEN( wa_vckun-ccnum ).
IF vl_tam >= 10.
vl_aux = vl_tam - 4.
vl_msk = vl_aux - 6.
p_creditcard-number = wa_vckun-ccnum(6).
DO vl_msk TIMES.
CONCATENATE p_creditcard-number '*' INTO p_creditcard-number.
ENDDO.
CONCATENATE p_creditcard-number wa_vckun-ccnum+vl_aux(4) INTO p_creditcard-number.
ENDIF.
ENDFORM. "get_credit_card
*&---------------------------------------------------------------------*
*& Form create_partner
*&---------------------------------------------------------------------*
FORM create_partner CHANGING v_partner.
DATA: l_kna1 TYPE kna1.
l_kna1-land1 = 'BR'.
l_kna1-ktokd = 'Z003'.
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = l_kna1
IMPORTING
e_kunnr = v_partner
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
ENDFORM. "create_partner
*&---------------------------------------------------------------------*
*& Form put_billing_info_ccred
*&---------------------------------------------------------------------*
FORM put_billing_info_ccred TABLES tb_knbk STRUCTURE fknbk
tb_knvi STRUCTURE fknvi
tb_yknbk STRUCTURE fknbk
tb_bapiadsmtp STRUCTURE bapiadsmtp
tb_bapiadsmt_x STRUCTURE bapiadsmtx
tb_bapiaduri STRUCTURE bapiaduri
tb_bapiaduri_x STRUCTURE bapiadurix
tb_bapiadtel STRUCTURE bapiadtel
tb_bapiadtel_x STRUCTURE bapiadtelx
t_yknvp STRUCTURE fknvp
messages STRUCTURE bapiret2
USING p_kna1 TYPE kna1
p_knb1 TYPE knb1
p_knvv TYPE knvv
p_addr TYPE bapiaddr1
p_partner TYPE kna1-kunnr
CHANGING p_fail.
DATA: v_kunnr TYPE kunnr,
v_subrc(2) TYPE n,
v_obj_id TYPE bapi4001_1-objkey,
v_obj_type TYPE bapi4001_1-objtype,
v_message TYPE text200, "PRB10312 - 19/04/2013
v_extid TYPE text100, "PRB10312 - 19/04/2013
v_zwels TYPE knb1-zwels, "PRB10312 - 19/04/2013
v_zterm TYPE knb1-zterm. "PRB10312 - 19/04/2013
DATA: t_knvp TYPE TABLE OF fknvp,
wa_knvp TYPE fknvp.
CLEAR: wa_knvp.
REFRESH: t_knvp[].
wa_knvp-kunnr = p_kna1-kunnr.
wa_knvp-vkorg = p_knvv-vkorg.
wa_knvp-vtweg = p_knvv-vtweg.
wa_knvp-spart = p_knvv-spart.
wa_knvp-kunn2 = p_partner.
wa_knvp-parvw = 'ZG'.
APPEND wa_knvp TO t_knvp.
* PRB10312 - 19/04/2013 - Início
v_extid = p_kna1-kunnr.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Antes alteração cliente - KNB1-ZTERM ='
p_knb1-zterm
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF p_knb1-zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Antes alteração cliente - KNB1-ZWELS ='
p_knb1-zwels
'(' p_knb1-bukrs ')'
INTO v_message
SEPARATED BY space.
IF p_knb1-zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Antes alteração cliente - KNVV-ZTERM ='
p_knvv-zterm
'(' p_knvv-vkorg ')'
INTO v_message
SEPARATED BY space.
IF p_knvv-zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
CALL FUNCTION 'SD_CUSTOMER_MAINTAIN_ALL'
EXPORTING
i_kna1 = p_kna1
i_knb1 = p_knb1
i_knvv = p_knvv
i_bapiaddr1 = p_addr
pi_postflag = 'X'
TABLES
t_xknbk = tb_knbk
t_yknbk = tb_yknbk
t_xknvi = tb_knvi
t_xknvp = t_knvp
* t_yknvp = t_yknvp
EXCEPTIONS
client_error = 1
kna1_incomplete = 2
knb1_incomplete = 3
knb5_incomplete = 4
knvv_incomplete = 5
kunnr_not_unique = 6
sales_area_not_unique = 7
sales_area_not_valid = 8
insert_update_conflict = 9
number_assignment_error = 10
number_not_in_range = 11
number_range_not_extern = 12
number_range_not_intern = 13
account_group_not_valid = 14
parnr_invalid = 15
bank_address_invalid = 16
tax_data_not_valid = 17
no_authority = 18
company_code_not_unique = 19
dunning_data_not_valid = 20
knb1_reference_invalid = 21
cam_error = 22
OTHERS = 23.
IF sy-subrc EQ 0.
* PRB10312 - 19/04/2013 - Início
v_extid = p_kna1-kunnr.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = p_kna1-kunnr
AND bukrs = p_knb1-bukrs.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Depois da alteração do cliente - KNB1-ZTERM ='
v_zterm
'(' p_knb1-bukrs ')'
INTO v_message SEPARATED BY space.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Depois da alteração do cliente - KNB1-ZWELS ='
v_zwels
'(' p_knb1-bukrs ')'
INTO v_message SEPARATED BY space.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
* PRB10312 - 19/04/2013 - Fim
CLEAR v_obj_id.
v_kunnr = p_kna1-kunnr.
UNPACK v_kunnr TO v_kunnr.
v_obj_id = v_kunnr.
WRITE 'KNA1' TO v_obj_type.
CALL FUNCTION 'BAPI_ADDRESSORG_CHANGE'
EXPORTING
obj_type = v_obj_type
obj_id = v_obj_id
context = 1
TABLES
bapiadtel = tb_bapiadtel
bapiadsmtp = tb_bapiadsmtp
bapiaduri = tb_bapiaduri
bapiadtel_x = tb_bapiadtel_x
bapiadsmt_x = tb_bapiadsmt_x
bapiaduri_x = tb_bapiaduri_x
return = messages.
IF sy-subrc EQ 0.
PERFORM bapi_commit.
ELSE.
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
* PRB10686 - 22/05/2013 - Início
v_subrc = sy-subrc.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Erro na alteração do BAPI_ADDRESSORG_CHANGE - SY-SUBRC ='
v_subrc
INTO v_message SEPARATED BY space.
v_extid = p_kna1-kunnr.
PERFORM log USING v_extid v_message 'E'.
* PRB10686 - 22/05/2013 - Fim
p_fail = c_x.
ENDIF.
ELSE.
* PRB10312 - 19/04/2013 - Início
v_subrc = sy-subrc.
CONCATENATE '(ZLWS2_PUT_BILLING_INFO - put_billing_info_ccred) Erro na alteração do cliente - SY-SUBRC ='
v_subrc
INTO v_message SEPARATED BY space.
v_extid = p_kna1-kunnr.
PERFORM log USING v_extid v_message 'E'.
* PRB10312 - 19/04/2013 - Fim
PERFORM bapi_rollback.
PERFORM log_message
TABLES messages
USING sy-subrc.
p_fail = c_x.
ENDIF.
ENDFORM. "put_billing_info
*&---------------------------------------------------------------------*
*& Form create_ccard
*&---------------------------------------------------------------------*
FORM create_ccard USING vcnum vckun v_partner.
DATA: wa_vcnum TYPE vcnum,
wa_vckun TYPE vckun.
CALL FUNCTION 'SD_CCARD_RESET'.
CALL FUNCTION 'SD_CCARD_VCNUM_MAINTAIN'
EXPORTING
i_vcnum_old = wa_vcnum
i_vcnum_new = vcnum.
IF sy-subrc = 0.
CALL FUNCTION 'SD_CCARD_VCKUN_MAINTAIN'
EXPORTING
i_vckun_old = wa_vckun
i_vckun_new = vckun.
IF sy-subrc = 0.
CALL FUNCTION 'SD_CCARD_SAVE'
EXPORTING
kunnr_save = v_partner
no_update_task = c_x.
ENDIF.
ENDIF.
ENDFORM. "create_ccard
*&---------------------------------------------------------------------*
*& Form convert_customer_input
*&---------------------------------------------------------------------*
FORM convert_customer_input CHANGING cust_id.
CALL FUNCTION 'CONVERSION_EXIT_ZSYS2_INPUT'
EXPORTING
input = cust_id
IMPORTING
output = cust_id.
ENDFORM. "convert_customer_input
*&---------------------------------------------------------------------*
*& Form convert_customer_output
*&---------------------------------------------------------------------*
FORM convert_customer_output CHANGING cust_id.
CALL FUNCTION 'CONVERSION_EXIT_ZSYS2_OUTPUT'
EXPORTING
input = cust_id
IMPORTING
output = cust_id.
ENDFORM. "convert_customer_output
*&---------------------------------------------------------------------*
*& Form f_seleciona_contrato_faturas
*&---------------------------------------------------------------------*
FORM f_seleciona_contrato_faturas TABLES pt_cobranca STRUCTURE ztbfi_cobranca
pt_vbak STRUCTURE vbak
pt_vbap STRUCTURE vbap
USING p_id "Cliente
p_company. "Empresa STORY 37926373 JFB
* Seleciona faturas que não estão cobradas(em aberto)
FREE: pt_cobranca[].
SELECT *
FROM ztbfi_cobranca
INTO TABLE pt_cobranca
WHERE kunrg EQ p_id " Pagador(Cliente)
AND flagcob NE 'X' " Flag de cobrança
AND afdat > sy-datum. " Evita alteração de forma de pagamento da fatura muito próximo do vencimento.
" Ex: Fatura cartão de crédito que vence amanhã e cliente altera, hoje, para débito automático.
" Banco exige 2 dias de antecedência e mais 1 dia para o retorno.
" Isso resultaria em um atraso de 3 dias no pagamento, podendo gerar juros e multa.
IF sy-subrc IS INITIAL.
SORT pt_cobranca BY bukrs vbeln posnr kunrg.
ENDIF. "Retorno SELECT ztbfi_cobranca
* Seleciona os contratos do cliente
FREE: pt_vbak[].
SELECT k~vbeln
INTO CORRESPONDING FIELDS OF TABLE pt_vbak
FROM vbak AS k INNER JOIN
vbap AS p
ON k~vbeln EQ p~vbeln
WHERE k~kunnr EQ p_id
AND k~vbtyp EQ 'G' "Contratos
AND p~abgru EQ space. "Motivo de recusa
IF sy-subrc IS INITIAL.
SORT pt_vbak BY vbeln.
DELETE ADJACENT DUPLICATES FROM pt_vbak COMPARING vbeln.
ENDIF. "Retorno SELECT vbak
ENDFORM. "f_seleciona_contrato_faturas
*&---------------------------------------------------------------------*
*& Form f_seleciona_contrato_faturas
*&---------------------------------------------------------------------*
FORM f_atualiza_contratos_payment TABLES pt_cobranca STRUCTURE ztbfi_cobranca "STORY 37926373 JFB
pt_vbak STRUCTURE vbak
pt_vbap STRUCTURE vbap
USING p_id "Cliente
p_payment_method. "Forma de pagamento
DATA: wa_vbak TYPE vbak,
wa_header_in TYPE bapisdhd1,
wa_header_inx TYPE bapisdhd1x,
return TYPE TABLE OF bapiret2.
FIELD-SYMBOLS: <fs_cob> TYPE ztbfi_cobranca.
CLEAR: wa_vbak,
wa_header_in,
wa_header_inx.
LOOP AT pt_vbak INTO wa_vbak.
wa_header_in-pymt_meth = p_payment_method. "Forma de pagamento
wa_header_inx-pymt_meth = 'X'.
wa_header_inx-updateflag = 'U'.
CALL FUNCTION 'SD_SALESDOCUMENT_CHANGE'
EXPORTING
salesdocument = wa_vbak-vbeln
order_header_in = wa_header_in
order_header_inx = wa_header_inx
TABLES
return = return.
READ TABLE return WITH KEY type = 'E' TRANSPORTING NO FIELDS.
IF NOT sy-subrc IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDLOOP. "Retorno LOOP AT pt_vbak
* Atualiza tabela a ztbfi_cobranca com a nova forma de pagamento para faturas em aberto
UNASSIGN: <fs_cob>.
*** Inicio Alt. AA - Bug 4077
LOOP AT pt_cobranca ASSIGNING <fs_cob> WHERE flagcr EQ 'X'
AND flagcob EQ space.
*** Fim Alt. AA - Bug 4077
<fs_cob>-zlsch = p_payment_method.
ENDLOOP.
MODIFY ztbfi_cobranca FROM TABLE pt_cobranca.
IF sy-subrc IS INITIAL.
COMMIT WORK.
ENDIF.
ENDFORM. "f_atualiza_contratos_payment.
*&---------------------------------------------------------------------*
*& Form LOG
*&---------------------------------------------------------------------*
* Log para análise de problema que não gera linha da recorrente
* PRB10312 - 19/04/2013
*----------------------------------------------------------------------*
FORM log USING extid TYPE text100
txt TYPE text200
status.
IF cl_log IS INITIAL.
CREATE OBJECT cl_log
EXPORTING
extid = extid
level = 4.
ENDIF.
cl_log->log_txt( msg_type = status text = txt ).
ENDFORM. "log
FUNCTION zlws2_create_customer.
*"----------------------------------------------------------------------
*"*"Interface local:
*" IMPORTING
*" VALUE(NAME) TYPE TEXT70
*" VALUE(CPF) TYPE STCD2 OPTIONAL
*" VALUE(CNPJ) TYPE STCD1 OPTIONAL
*" VALUE(RG) TYPE STCD3 OPTIONAL
*" VALUE(INSC_ESTADUAL) TYPE STCD3 OPTIONAL
*" VALUE(INSC_MUNICIPAL) TYPE STCD4 OPTIONAL
*" VALUE(TRADEMARK) TYPE NAME3_GP OPTIONAL
*" VALUE(LOGIN) TYPE AD_REMARK1
*" VALUE(MANAGER_ID) TYPE PERNR_D OPTIONAL
*" VALUE(FACEBOOK) TYPE AD_URI2 OPTIONAL
*" VALUE(TWITTER) TYPE AD_URI2 OPTIONAL
*" VALUE(KNEW_LOCAWEB_AT) TYPE KATR7 OPTIONAL
*" VALUE(CUSTOMER_CLASS) TYPE KUKLA OPTIONAL
*" VALUE(AGREE_LW_PROMT) TYPE FLAG OPTIONAL
*" VALUE(AGREE_PARTN_PROMT) TYPE FLAG OPTIONAL
*" VALUE(AGREE_SMS) TYPE FLAG OPTIONAL
*" VALUE(ADDRESS) TYPE ZSTLW_CUSTOMER4
*" EXPORTING
*" VALUE(ID) TYPE ZKUNNR
*" TABLES
*" PHONES STRUCTURE ZSTLW_PHONES_DATA
*" EMAILS STRUCTURE ZSTLW_MAIL_DATA
*" MESSAGES STRUCTURE BAPIRET2
*"----------------------------------------------------------------------
DATA: wa_kna1 TYPE kna1,
wa_knb1 TYPE knb1,
wa_knvv TYPE knvv,
wa_addr TYPE bapiaddr1,
tb_knbk TYPE TABLE OF fknbk,
tb_knvi TYPE TABLE OF fknvi,
tb_knvp TYPE TABLE OF fknvp,
tb_sales TYPE TABLE OF tvta WITH HEADER LINE.
FIELD-SYMBOLS: <knvi> TYPE fknvi,
<knvp> TYPE fknvp.
DATA: tb_bapiadsmtp TYPE TABLE OF bapiadsmtp WITH HEADER LINE,
tb_bapiadsmt_x TYPE TABLE OF bapiadsmtx WITH HEADER LINE,
tb_bapiaduri TYPE TABLE OF bapiaduri WITH HEADER LINE,
tb_bapiaduri_x TYPE TABLE OF bapiadurix WITH HEADER LINE,
tb_bapicomrem TYPE TABLE OF bapicomrem WITH HEADER LINE,
tb_bapicomre_x TYPE TABLE OF bapicomrex WITH HEADER LINE,
tb_bapiadtel TYPE TABLE OF bapiadtel WITH HEADER LINE,
tb_bapiadtel_x TYPE TABLE OF bapiadtelx WITH HEADER LINE.
DATA: fail TYPE flag,
v_mail TYPE flag,
v_active TYPE flag, "Flag utilizado para verificar se há mais que 1 email principal
v_zterm TYPE knb1-zterm, "PRB10312 - 19/04/2013
v_zwels TYPE knb1-zwels, "PRB10312 - 19/04/2013
v_message TYPE text200, "PRB10312 - 19/04/2013
v_extid TYPE text100. "PRB10312 - 19/04/2013
DATA: wa_mail TYPE zstlw_mail_data,
wa_phone TYPE zstlw_phones_data,
wa_knvp TYPE fknvp.
"Buffer da tabela de constants
DATA: tb_constants TYPE TABLE OF ztbconstantes.
PERFORM initialize_buffers
TABLES tb_constants
USING c_sd c_cre_cust.
TRY.
REFRESH: messages, tb_knbk, tb_knvi, tb_knvp.
CLEAR: fail, wa_kna1, wa_knb1, wa_knvv, wa_knvp, wa_addr, id.
PERFORM check_obligatory_fields
TABLES messages
USING: name '036',
login '042',
address-postal_code '037',
address-city '038',
address-street '039',
address-state '040',
address-country '041',
address-num '047'.
CHECK messages[] IS INITIAL.
PERFORM check_country_state_relation
TABLES messages
USING address-country address-state.
CHECK messages[] IS INITIAL.
"verifica existencia de e-mails
IF emails[] IS INITIAL.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 043.
messages-message = text-043.
APPEND messages.
EXIT.
ENDIF.
"verifica se há e-mail principal.
READ TABLE emails TRANSPORTING NO FIELDS WITH KEY
main = 'X'.
IF sy-subrc NE 0.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 078.
messages-message = text-078.
APPEND messages.
EXIT.
ENDIF.
"verifica se há e-mail ativo.
READ TABLE emails TRANSPORTING NO FIELDS WITH KEY
active = 'X'.
IF sy-subrc NE 0.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 078.
messages-message = text-078.
APPEND messages.
EXIT.
ENDIF.
LOOP AT emails INTO wa_mail.
IF wa_mail-main NE space AND wa_mail-active NE space AND v_mail EQ space.
v_mail = 'X'.
ELSEIF wa_mail-main NE space AND wa_mail-active NE space AND v_mail NE space.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 077.
messages-message = text-077.
APPEND messages.
ENDIF.
ENDLOOP.
CLEAR v_mail.
LOOP AT emails INTO wa_mail.
IF wa_mail-main NE space AND wa_mail-active EQ space AND v_mail EQ space.
v_mail = 'X'.
ELSEIF wa_mail-main NE space AND wa_mail-active EQ space AND v_mail NE space.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 081.
messages-message = text-081.
APPEND messages.
ENDIF.
ENDLOOP.
"verifica existencia de telefones
IF phones[] IS INITIAL.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 069.
messages-message = text-069.
APPEND messages.
EXIT.
ENDIF.
LOOP AT phones INTO wa_phone.
IF wa_phone-tel_number EQ space.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 069.
messages-message = text-069.
APPEND messages.
EXIT.
ENDIF.
ENDLOOP.
CHECK messages[] IS INITIAL.
PERFORM check_manager
TABLES messages
USING manager_id '050'.
CHECK messages[] IS INITIAL.
"Valida CPF ou CNPJ
IF cnpj IS INITIAL AND cpf IS NOT INITIAL.
"Valida CPF
PERFORM cpf_verify
TABLES messages
USING cpf.
CHECK messages[] IS INITIAL.
wa_kna1-stcd2 = cpf.
wa_kna1-stcd3 = rg.
wa_kna1-stkzn = c_x.
ELSEIF cnpj IS NOT INITIAL.
"Valida CNPJ
PERFORM cnpj_verify
TABLES messages
USING cnpj.
CHECK messages[] IS INITIAL.
wa_kna1-stcd1 = cnpj.
wa_kna1-stcd3 = insc_estadual.
wa_kna1-stcd4 = insc_municipal.
ELSE.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 804.
messages-message = text-804.
APPEND messages.
EXIT.
ENDIF.
"Valida CEP
PERFORM postal_code_verify
TABLES messages
USING address-postal_code.
CHECK messages[] IS INITIAL.
"Valida Tipo de Suporte
PERFORM check_support_type
TABLES messages
USING customer_class. "STORY 52155251
CHECK messages[] IS INITIAL.
"Valida dados marketing
PERFORM check_agreement
TABLES messages
USING agree_lw_promt
agree_partn_promt
agree_sms
knew_locaweb_at.
"Dados gerais do cliente
PERFORM get_account_group
TABLES tb_constants
CHANGING wa_kna1.
PERFORM get_cfop_category
TABLES tb_constants
CHANGING wa_kna1.
"Dados de empresa
PERFORM get_customer_account
TABLES tb_constants
CHANGING wa_knb1.
PERFORM get_payment_condition
TABLES tb_constants
CHANGING wa_knb1.
IF wa_knb1-zterm IS INITIAL.
v_message = '(ZLWS2_CREATE_CUSTOMER) Não encontrou constante para ZTERM.'.
v_extid = 'ZLWS2_CREATE_CUSTOMER'.
PERFORM log USING v_extid v_message 'E'.
ELSE.
CONCATENATE '(ZLWS2_CREATE_CUSTOMER) Constante para ZTERM = ' wa_knb1-zterm INTO v_message
SEPARATED BY space.
v_extid = 'ZLWS2_CREATE_CUSTOMER'.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
wa_kna1-mandt = sy-mandt.
wa_kna1-erdat = sy-datum.
wa_kna1-ernam = sy-uname.
wa_kna1-name1 = name(35).
wa_kna1-name2 = name+35.
wa_kna1-name3 = trademark.
wa_kna1-kukla = customer_class. "STORY 52155251
wa_kna1-katr3 = agree_lw_promt.
wa_kna1-katr4 = agree_partn_promt.
wa_kna1-katr5 = agree_sms.
wa_kna1-katr7 = knew_locaweb_at.
wa_kna1-land1 = address-country.
wa_kna1-spras = c_langu.
"Dados de endereço
wa_addr-name = wa_kna1-name1.
wa_addr-name_2 = wa_kna1-name2.
wa_addr-name_3 = wa_kna1-name3.
wa_addr-street = address-street(40).
wa_addr-str_suppl3 = address-street+40(20).
wa_addr-adr_notes = login.
wa_addr-house_no = address-num.
wa_addr-house_no2 = address-complement.
wa_addr-district = address-district.
wa_addr-postl_cod1 = address-postal_code.
wa_addr-city = address-city.
wa_addr-region = address-state.
wa_addr-country = address-country.
wa_addr-langu_cr = wa_addr-langu = c_langu.
wa_addr-langucriso = wa_addr-langu_iso = 'PT'.
PERFORM get_fiscal_area
USING address-country
address-state
address-postal_code
CHANGING wa_addr.
"E-mails
REFRESH: tb_bapiadsmt_x, tb_bapiadsmtp.
CLEAR: tb_bapiadsmt_x, tb_bapiadsmtp.
tb_bapiadsmt_x-std_no = c_x.
tb_bapiadsmt_x-e_mail = c_x.
tb_bapiadsmt_x-consnumber = c_x.
tb_bapiadsmt_x-updateflag = c_i.
tb_bapiadsmtp-std_no = c_x.
LOOP AT emails INTO wa_mail.
tb_bapiadsmtp-e_mail = wa_mail-address.
tb_bapiadsmtp-std_recip = wa_mail-main.
tb_bapiadsmtp-flg_nouse = wa_mail-active.
tb_bapiadsmtp-r_3_user = wa_mail-main_candidate.
IF wa_mail-main = 'X' AND wa_mail-active = 'X'.
v_active = 'X'.
ENDIF.
APPEND: tb_bapicomre_x, tb_bapicomrem,
tb_bapiadsmt_x, tb_bapiadsmtp.
ENDLOOP.
IF v_active IS INITIAL.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 080.
messages-message = text-080.
APPEND messages.
EXIT.
ENDIF.
"URIs
tb_bapiaduri_x-std_no = c_x.
tb_bapiaduri_x-uri_type = c_x.
tb_bapiaduri_x-uri = c_x.
tb_bapiaduri_x-updateflag = c_i.
tb_bapiaduri-std_no = c_x.
IF facebook IS NOT INITIAL.
tb_bapiaduri-uri_type = c_fac.
tb_bapiaduri-uri = facebook.
APPEND: tb_bapiaduri, tb_bapiaduri_x.
ENDIF.
IF twitter IS NOT INITIAL.
tb_bapiaduri-uri_type = c_twi.
tb_bapiaduri-uri = twitter.
APPEND: tb_bapiaduri, tb_bapiaduri_x.
ENDIF.
"Telefones
REFRESH: tb_bapiadtel_x, tb_bapiadtel.
CLEAR: tb_bapiadtel_x, tb_bapiadtel.
tb_bapiadtel_x-std_no = c_x.
tb_bapiadtel_x-telephone = c_x.
tb_bapiadtel_x-extension = c_x.
tb_bapiadtel_x-r_3_user = c_x.
tb_bapiadtel_x-updateflag = c_i.
LOOP AT phones INTO wa_phone.
tb_bapiadtel-telephone = wa_phone-tel_number.
tb_bapiadtel-extension = wa_phone-extension.
tb_bapiadtel-std_no = c_x.
tb_bapiadtel-r_3_user = '1'.
IF wa_phone-type EQ c_mob.
tb_bapiadtel-r_3_user = '3'.
tb_bapiadtel-std_no = space.
ENDIF.
APPEND: tb_bapiadtel_x, tb_bapiadtel.
ENDLOOP.
"Gerente de conta
IF manager_id IS NOT INITIAL.
wa_knvp-parvw = 'ZC'.
wa_knvp-pernr = manager_id.
APPEND wa_knvp TO tb_knvp.
ENDIF.
"Dados de vendas
wa_knvv-zterm = wa_knb1-zterm.
wa_knvv-waers = c_waers.
PERFORM get_fiscal_classification
TABLES tb_constants
CHANGING wa_knvv.
PERFORM get_tax_classification
TABLES tb_constants tb_knvi.
"Áreas de vendas.
REFRESH tb_sales.
SELECT mandt vkorg vtweg spart
FROM tvta
INTO TABLE tb_sales
WHERE vtweg EQ '10'.
"vkorg NE 'ENTP' AND vkorg NE 'ENTT'.
CHECK messages[] IS INITIAL.
LOOP AT tb_sales.
wa_knb1-bukrs = tb_sales-vkorg.
wa_knvv-vkorg = tb_sales-vkorg.
wa_knvv-vwerk = tb_sales-vkorg.
wa_knvv-vtweg = tb_sales-vtweg.
wa_knvv-spart = tb_sales-spart.
LOOP AT tb_knvp ASSIGNING <knvp>.
<knvp>-vkorg = tb_sales-vkorg.
<knvp>-vtweg = tb_sales-vtweg.
<knvp>-spart = tb_sales-spart.
ENDLOOP.
PERFORM create_customer
TABLES tb_knbk tb_knvi tb_knvp
tb_bapiadsmtp tb_bapiadsmt_x
tb_bapiaduri tb_bapiaduri_x
tb_bapicomrem tb_bapicomre_x
tb_bapiadtel tb_bapiadtel_x
messages
USING wa_kna1 wa_knb1 wa_knvv wa_addr
CHANGING id fail.
IF fail IS NOT INITIAL.
PERFORM bapi_rollback.
EXIT.
ENDIF.
IF wa_kna1-kunnr IS INITIAL.
wa_kna1-kunnr = id.
wa_knb1-kunnr = id.
wa_knvv-kunnr = id.
LOOP AT tb_knvi ASSIGNING <knvi>.
<knvi>-kunnr = id.
ENDLOOP.
LOOP AT tb_knvp ASSIGNING <knvp>.
<knvp>-kunnr = id.
ENDLOOP.
ELSEIF id IS INITIAL.
id = wa_kna1-kunnr.
ENDIF.
ENDLOOP.
CHECK fail IS INITIAL.
PERFORM bapi_commit.
SELECT SINGLE zterm zwels
FROM knb1
INTO (v_zterm, v_zwels)
WHERE kunnr = id.
CONCATENATE '(ZLWS2_CREATE_CUSTOMER) Criação do cliente - KNB1-ZTERM = ' v_zterm
INTO v_message
SEPARATED BY space.
v_extid = id.
IF v_zterm IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CONCATENATE '(ZLWS2_CREATE_CUSTOMER) Criação do cliente - KNB1-ZWELS = ' v_zwels
INTO v_message
SEPARATED BY space.
v_extid = id.
IF v_zwels IS INITIAL.
PERFORM log USING v_extid v_message 'E'.
ELSE.
PERFORM log USING v_extid v_message 'S'.
ENDIF.
CATCH cx_root.
messages-type = c_e.
messages-id = c_zcrcl.
messages-number = 025.
messages-message = text-025.
APPEND messages.
ENDTRY.
IF messages[] IS NOT INITIAL.
DELETE ADJACENT DUPLICATES FROM messages COMPARING ALL FIELDS.
ENDIF.
PERFORM convert_customer_output
CHANGING id.
ENDFUNCTION.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment