(RESOLVIDO)Ajuda com Relatório - Por Favor!

Sim, é isso o que o println() faz. :grinning:

Dentro daquele for você deve popular sua tela de relatório. Cada venda é uma linha.

1 curtida

@RoinujNosde

eu realmente tenho muita dificuldade com iteração

mas tentando de outra forma consegui este resultado:

o problema é que o filtro não está funcionando, tem alguma forma, sem usar iteração em que consiga aplicar o filtro?

código:

package br.com.fjsistemas.cadastros.view;

import java.time.format.DateTimeFormatter;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.button.ButtonVariant;
import com.vaadin.flow.component.datepicker.DatePicker;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.html.Label;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.data.binder.PropertyId;
import com.vaadin.flow.data.renderer.LocalDateRenderer;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;

import br.com.fjsistemas.backend.Venda;
import br.com.fjsistemas.main.MainView;
import br.com.fjsistemas.service.VendaService;

@Route(value = "relatorio-view", layout = MainView.class)
@PageTitle("Relatório de Vendas")
public class RelatorioView extends VerticalLayout {

	private static final long serialVersionUID = 1L;

	private HorizontalLayout layoutDatas = new HorizontalLayout();

	private Button gerarRelatorio = new Button("Gerar Relatório");

	private Grid<Venda> grid = new Grid<>();

	Label label = new Label("Valor Total no Periodo:");
	Label labelEsquerda = new Label("Data");
	Label labelCentro = new Label("Cliente");
	Label labelDireita = new Label("Valor");

	@PropertyId("dataInicio")
	private DatePicker dataInicio = new DatePicker("Início");

	@PropertyId("dataFim")
	private DatePicker dataFim = new DatePicker("Final");

	@PropertyId("somaValores")
	private TextField somaValores = new TextField();

	@Autowired
	private VendaService vendaService;

	private List<Venda> listaVendas;

	@SuppressWarnings("unused")
	private Venda venda;

	public RelatorioView() {
		configuraRelatorio();
	}

	private void populaInformacao() {

		listaVendas = vendaService.read();
		atualizaGrdVenda();
	}

	private void atualizaGrdVenda() {
		grid.setItems(listaVendas);
	}

	private void configuraRelatorio() {

		grid.setWidthFull();
		grid.setHeight("740px");

		grid.addColumn(new LocalDateRenderer<>(Venda::getDataVenda, DateTimeFormatter.ofPattern("dd/MM/yyy")))
				.setHeader("Data Venda").setAutoWidth(true);

		grid.addColumn(venda -> venda.getCliente().getNome()).setHeader("Nome:").setAutoWidth(true)
				.setKey("cliente.nome");

		grid.addColumn(Venda::getValorTotalVenda).setHeader("Valor Total:").setAutoWidth(true)
				.setKey("valorTotalVenda");

		grid.addItemClickListener(e -> {
			venda = e.getItem();
		});

		gerarRelatorio.addThemeVariants(ButtonVariant.LUMO_PRIMARY);
		gerarRelatorio.getStyle().set("margin-top", "37px");
		gerarRelatorio.addClickListener(event -> {
			populaInformacao();
		});

		label.getStyle().set("margin-left", "540px");
		label.getStyle().set("margin-top", "40px");
		label.getElement().getStyle().set("fontWeight", "bold");

		somaValores.getStyle().set("margin-top", "33px");
		somaValores.setWidth("370px");

		dataInicio.setWidth("181px");
		dataFim.setWidth("181px");

		layoutDatas.add(dataInicio, dataFim, gerarRelatorio, label, somaValores);

		add(layoutDatas, grid);
	}

	public List<Venda> getListaVenda() {
		return listaVendas;
	}

	public void setListaVenda(List<Venda> listaVenda) {
		this.listaVendas = listaVenda;
	}
}

Lembra o método que falei pra adicionar na VendaRepository? Aquele é o filtro e vc não está usando.

Ao invés de chamar read() aqui, use o método de filtrar.

Se não está usando pode apagar.

1 curtida

@RoinujNosde

Deu certo man!!! Muito obg por tudo…ficou ótimo!!!

Mas agora deixa eu tirar uma duvida com vc, eu estou usando este código aqui:

	@SuppressWarnings("unused")
	private Venda venda; 

uso ele aqui(no final):

    grid.setWidthFull();
		grid.setHeight("740px");

		grid.addColumn(new LocalDateRenderer<>(Venda::getDataVenda, DateTimeFormatter.ofPattern("dd/MM/yyy")))
				.setHeader("Data Venda").setAutoWidth(true);

		grid.addColumn(venda -> venda.getCliente().getNome()).setHeader("Nome:").setAutoWidth(true)
				.setKey("cliente.nome");

		grid.addColumn(Venda::getValorTotalVenda).setHeader("Valor Total:").setAutoWidth(true)
				.setKey("valorTotalVenda");

		grid.addItemClickListener(e -> {
			venda = e.getItem();
		});

mas estranhamente se eu tiro a @SuppressWarnings(“unused”), ele fica com um Warning aparecendo, esses Warning me irritam pra caramba, por isso eu coloquei o @SuppressWarnings(“unused”).

Pq será que isso acontece no eclipse? vc sabe me dizer?

Porque isso aqui não “usa” a variável venda, apenas atribui um valor a ela.
Apague o campo venda e esse trecho que eu citei e teste seu código. Deverá funcionar sem problemas.

1 curtida

certinho…vlw meu parceiro!!!