CLASS lcl_canhoto DEFINITION.
PUBLIC SECTION.
TYPES: BEGIN OF ty_param,
range_docnum TYPE RANGE OF j_1bdocnum,
range_nfenum TYPE RANGE OF j_1bnfnum9,
range_lifnr TYPE RANGE OF lifnr,
range_dtrecm TYPE RANGE OF datum,
canhoto_recebido TYPE RANGE OF abap_bool,
miro_criada TYPE RANGE OF abap_bool,
fob TYPE RANGE OF abap_bool,
END OF ty_param.
TYPES: BEGIN OF ty_alv.
INCLUDE TYPE zi_canhotodados.
TYPES: style TYPE lvc_t_styl,
updkz TYPE updkz_d,
END OF ty_alv,
tty_alv TYPE STANDARD TABLE OF ty_alv WITH DEFAULT KEY.
TYPES: tty_dados TYPE STANDARD TABLE OF zi_canhotodados WITH DEFAULT KEY.
DATA _s_param TYPE ty_param.
DATA: _t_dados TYPE tty_dados,
_t_alv TYPE tty_alv.
DATA: _o_alv_container TYPE REF TO cl_gui_custom_container,
_o_alv TYPE REF TO cl_salv_table,
_o_alv_edit TYPE REF TO if_salv_gui_om_edit_restricted.
DATA: _o_listener TYPE REF TO lcl_listener.
METHODS:
add_button,
check_data_modified RETURNING VALUE(rv_exit) TYPE abap_bool,
constructor IMPORTING is_param TYPE ty_param,
display_list,
get_data,
run,
set_columns.
METHODS:
on_user_command FOR EVENT added_function OF cl_salv_events
IMPORTING e_salv_function.
ENDCLASS.
CLASS lcl_listener DEFINITION.
PUBLIC SECTION.
INTERFACES if_salv_gui_om_edit_strct_lstr.
ENDCLASS.
CLASS lcl_canhoto IMPLEMENTATION.
METHOD run.
me->get_data( ).
IF me->_t_dados[] IS NOT INITIAL.
CALL SCREEN 9000.
ENDIF.
ENDMETHOD.
METHOD constructor.
_s_param = is_param.
ENDMETHOD.
METHOD get_data.
SELECT *
FROM zi_canhoto
WHERE carrier IN @_s_param-range_lifnr
AND nfdocument IN @_s_param-range_docnum
AND nfenum IN @_s_param-range_nfenum
AND issuedate IN @_s_param-range_dtrecm
AND fob IN @_s_param-fob
AND miro IN @_s_param-miro_criada
AND canhoto IN @_s_param-canhoto_recebido
ORDER BY transportationorder, nfdocument
INTO TABLE @me->_t_dados.
IF sy-subrc <> 0.
MESSAGE 'Nenhum registro foi selecionado.' TYPE 'I'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDMETHOD.
METHOD display_list.
CHECK _o_alv_container IS NOT BOUND.
me->_o_alv_container = NEW cl_gui_custom_container( container_name = 'CONTAINER' ).
me->_t_alv = CORRESPONDING #( me->_t_dados ).
TRY.
cl_salv_table=>factory(
EXPORTING
r_container = me->_o_alv_container
* container_name =
IMPORTING
r_salv_table = me->_o_alv
CHANGING
t_table = me->_t_alv
).
me->_o_alv->get_functions( )->set_all( if_salv_c_bool_sap=>true ).
me->_o_alv->get_layout( )->set_key( VALUE #( report = sy-repid handle = 'Lista' ) ).
me->_o_alv->get_layout( )->set_save_restriction( if_salv_c_layout=>restrict_none ).
me->_o_alv->get_columns( )->set_optimize( abap_true ).
me->_o_alv->get_display_settings( )->set_striped_pattern( abap_true ).
me->_o_alv->get_selections( )->set_selection_mode( if_salv_c_selection_mode=>multiple ).
me->set_columns( ).
me->add_button( ).
DATA(lo_events) = me->_o_alv->get_event( ).
SET HANDLER me->on_user_command FOR lo_events.
me->_o_alv->display( ).
CATCH cx_salv_msg INTO DATA(lx_salv_msg).
ENDTRY.
ENDMETHOD.
METHOD set_columns.
DATA lo_column TYPE REF TO cl_salv_column.
TRY.
DEFINE lm_column.
lo_column = me->_o_alv->get_columns( )->get_column( &1 ).
lo_column->set_short_text( CONV scrtext_s( &2 ) ).
lo_column->set_medium_text( CONV scrtext_m( &3 ) ).
lo_column->set_long_text( &3 ).
END-OF-DEFINITION.
lm_column 'NFDOCUMENT' 'DocNF' TEXT-t01.
lm_column 'NFSERIES' TEXT-t02 TEXT-t02.
lm_column 'NFENUM' TEXT-t03 TEXT-t03.
lm_column 'ISSUEDATE' 'DtEmiNF' TEXT-t04.
lm_column 'NFPARTNER' TEXT-t05 TEXT-t05.
lm_column 'NFPARTNERNAME' 'Nome' TEXT-t06.
lm_column 'FODELIVERYDOCUMENT' 'Remessa' TEXT-t07.
lm_column 'PURCHASEORDERDOCUMENT' 'PedFrete' TEXT-t08.
lm_column 'TRANSPORTATIONORDER' 'OrdFrete' TEXT-t09.
lm_column 'CARRIER' TEXT-t10 TEXT-t10.
lm_column 'CARRIERNAME' 'NomeForn' TEXT-t11.
lm_column 'INCOTERMS' TEXT-t12 TEXT-t12.
lm_column 'SUPPLIERINVOICE' TEXT-t13 TEXT-t13.
lm_column 'DATA_RECEBIMENTO' 'DtReceb' TEXT-t15.
lm_column 'USUARIO_RECEBIMENTO' 'Usuário' TEXT-t16.
lm_column 'NETVALUE' 'ValorLiq' TEXT-t17.
lm_column 'CANHOTO' 'Canhoto' TEXT-t14.
DATA(lo_col) = CAST cl_salv_column_table( lo_column ).
lo_col->set_cell_type( if_salv_c_cell_type=>checkbox ).
me->_o_alv->get_columns( )->get_column( 'MIRO' )->set_technical( abap_true ).
me->_o_alv->get_columns( )->get_column( 'FOB' )->set_technical( abap_true ).
me->_o_alv->get_columns( )->get_column( 'PAYBLOCKREASON' )->set_technical( abap_true ).
DATA(lo_api) = me->_o_alv->extended_grid_api( ).
_o_alv_edit = lo_api->editable_restricted( ).
LOOP AT me->_t_alv REFERENCE INTO DATA(lr_alv).
IF ( lr_alv->miro IS INITIAL ) OR
( lr_alv->miro IS NOT INITIAL AND lr_alv->canhoto IS NOT INITIAL ).
lr_alv->style = VALUE #( ( fieldname = 'CANHOTO' style = cl_gui_alv_grid=>mc_style_disabled ) ).
ELSE.
lr_alv->style = VALUE #( ( fieldname = 'CANHOTO' style = cl_gui_alv_grid=>mc_style_enabled ) ).
ENDIF.
ENDLOOP.
_o_alv_edit->set_t_celltab_columnname( 'STYLE' ).
_o_alv_edit->set_attributes_for_columnname( columnname = 'CANHOTO' all_cells_input_enabled = abap_true ).
_o_listener = NEW lcl_listener( ).
_o_alv_edit->set_listener( _o_listener ).
CATCH cx_salv_not_found INTO DATA(lx_alv_error).
ENDTRY.
ENDMETHOD.
METHOD add_button.
TRY.
* me->_o_alv->get_functions( )->add_function( EXPORTING name = 'SELECT_ALL'
* icon = CONV #( icon_select_all )
* text = 'Selecionar Tudo'
* tooltip = 'Selecionar Tudo'
* position = if_salv_c_function_position=>right_of_salv_functions
* ).
*
*
* me->_o_alv->get_functions( )->add_function( EXPORTING name = 'DESELECT_ALL'
* icon = CONV #( icon_deselect_all )
* text = 'Desmarcar Tudo'
* tooltip = 'Desmarcar Tudo'
* position = if_salv_c_function_position=>right_of_salv_functions
* ).
me->_o_alv->get_functions( )->add_function( EXPORTING name = 'SAVE_ALL'
icon = CONV #( icon_system_save )
text = 'Salvar Modificações'
tooltip = 'Salvar Modificações'
position = if_salv_c_function_position=>right_of_salv_functions
).
me->_o_alv->get_functions( )->add_function( EXPORTING name = 'DESMARCAR_RECEB'
icon = CONV #( icon_delete )
text = 'Eliminar Canhoto Recebido'
tooltip = 'Eliminar Canhoto Recebido'
position = if_salv_c_function_position=>right_of_salv_functions
).
CATCH cx_salv_existing.
CATCH cx_salv_wrong_call.
ENDTRY.
ENDMETHOD.
METHOD on_user_command.
CASE e_salv_function.
WHEN 'SAVE_ALL'.
LOOP AT me->_t_dados REFERENCE INTO DATA(lr_dados).
DATA(lr_alv) = REF #( me->_t_alv[ nfdocument = lr_dados->nfdocument
transportationorder = lr_dados->transportationorder
purchaseorderdocument = lr_dados->purchaseorderdocument ] OPTIONAL ).
"Se teve modificação e não foi salvo
CHECK lr_alv IS BOUND AND
lr_alv->canhoto <> lr_dados->canhoto.
IF lr_alv->canhoto IS INITIAL AND lr_alv->miro IS INITIAL.
CONTINUE.
ENDIF.
DATA(ls_canhoto_tab) = CORRESPONDING ztajltm_canhoto( lr_alv->* MAPPING nf_document = nfdocument purchase_order = purchaseorderdocument ).
IF ls_canhoto_tab-canhoto IS NOT INITIAL.
ls_canhoto_tab-data_recebimento = sy-datum.
ls_canhoto_tab-usuario_recebimento = sy-uname.
ELSE.
CLEAR: ls_canhoto_tab-data_recebimento, ls_canhoto_tab-usuario_recebimento.
ENDIF.
MODIFY ztajltm_canhoto FROM ls_canhoto_tab.
COMMIT WORK AND WAIT.
lr_dados->canhoto = lr_alv->canhoto.
IF lr_alv->canhoto IS NOT INITIAL.
lr_alv->style = VALUE #( ( fieldname = 'CANHOTO' style = cl_gui_alv_grid=>mc_style_disabled ) ).
ELSE.
lr_alv->style = VALUE #( ( fieldname = 'CANHOTO' style = cl_gui_alv_grid=>mc_style_enabled ) ).
ENDIF.
ENDLOOP.
IF sy-subrc = 0.
MESSAGE 'MOdificações gravados com sucesso.' TYPE 'I'.
ENDIF.
_o_alv->refresh( EXPORTING s_stable = VALUE #( row = abap_true col = abap_true ) ).
WHEN 'SELECT_ALL'.
WHEN 'DESELECT_ALL'.
WHEN 'DESMARCAR_RECEB'.
DATA(lt_rows) = _o_alv->get_selections( )->get_selected_rows( ).
IF lt_rows[] IS INITIAL.
MESSAGE 'Nenhum registro foi selecionado.' TYPE 'I'.
ELSE.
LOOP AT lt_rows INTO DATA(ls_rows).
lr_alv = REF #( me->_t_alv[ ls_rows ] OPTIONAL ).
CHECK lr_alv IS BOUND.
IF lr_alv->payblockreason IS INITIAL.
MESSAGE |Faturamento :{ lr_alv->supplierinvoice }, já foi liberado para pagamento.| TYPE 'I'.
CONTINUE.
ENDIF.
lr_alv->canhoto = abap_false.
ENDLOOP.
ENDIF.
_o_alv->refresh( EXPORTING s_stable = VALUE #( row = abap_true col = abap_true ) ).
ENDCASE.
ENDMETHOD.
METHOD check_data_modified.
DATA: lv_bool TYPE abap_bool VALUE 'X',
lv_answer TYPE char1.
rv_exit = abap_true.
CHECK _o_alv_edit IS BOUND.
_o_alv_edit->validate_changed_data( IMPORTING is_input_data_valid = lv_bool
CHANGING x_data_refresh = lv_bool ).
DATA(lv_modificado) = abap_false.
LOOP AT me->_t_dados REFERENCE INTO DATA(lr_dados).
DATA(ls_alv) = VALUE #( me->_t_alv[ nfdocument = lr_dados->nfdocument
transportationorder = lr_dados->transportationorder
purchaseorderdocument = lr_dados->purchaseorderdocument ] OPTIONAL ).
"Se teve modificação e não foi salvo
CHECK ls_alv IS NOT INITIAL AND
ls_alv-canhoto <> lr_dados->canhoto.
lv_modificado = abap_true.
EXIT.
ENDLOOP.
IF lv_modificado = abap_true.
CALL FUNCTION 'POPUP_TO_CONFIRM'
EXPORTING
titlebar = 'Sair da Transação'
text_question = 'Existem alterações não gravados, deseja sair sem salvar ?'
display_cancel_button = abap_false
IMPORTING
answer = lv_answer
EXCEPTIONS
text_not_found = 1
OTHERS = 2.
IF sy-subrc = 0 AND lv_answer = '2'.
CLEAR rv_exit.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS lcl_listener IMPLEMENTATION.
METHOD if_salv_gui_om_edit_strct_lstr~on_f4_request.
ENDMETHOD.
METHOD if_salv_gui_om_edit_strct_lstr~on_check_changed_data.
o_ui_data_modify->get_ui_changes( IMPORTING t_modified_cells = DATA(lt_modified) ).
DATA: canhoto TYPE char1.
LOOP AT lt_modified ASSIGNING FIELD-SYMBOL(<data>)
GROUP BY ( value = <data>-row_id ) INTO DATA(lt_group).
LOOP AT GROUP lt_group ASSIGNING FIELD-SYMBOL(<row_id>).
o_ui_data_modify->get_cell_value( EXPORTING row_id = <row_id>-row_id
fieldname = 'CANHOTO'
IMPORTING cell_value = canhoto ).
ENDLOOP.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
Nenhum comentário:
Postar um comentário