Remoçao de item em Lista

Java

25/08/2016

Boa tarde galera..
Estou com o seguinte problema, talvez seja até simples, mas estou desde ontem tentando arrumar e ainda não consegui, então toda ajuda é bem vinda..

Seguinte: Eu tenho duas listas na página da venda, uma com itensVenda, e outra com maoDeObra..
A lista itensVenda, remove normalmente e funciona de acordo como eu preciso, porém a lista maoDeObra, após adicionar várias Mão de Obra, quanto tento remover alguma, ela sempre remove o primeiro item da lista..
Gostaria de alguma ajuda pra isso..

>> maodeobra.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://xmlns.jcp.org/jsf/html"
 xmlns:p="http://primefaces.org/ui"
 xmlns:f="http://xmlns.jcp.org/jsf/core">

<p:panelGrid columns="2" layout="grid" columnClasses="coluna10, coluna90">
    <p:outputLabel value="Mão de Obra:" for="maodeobra"/>
    <h:panelGroup>
        <p:inputText id="maodeobra" value="#{vendaControle.maoDeObra.descricao}"/>
    </h:panelGroup>

    <p:outputLabel value="Valor:" for="valor"/>
    <p:inputText id="valor" 
                 value="#{vendaControle.maoDeObra.valor}">
        <f:convertNumber minFractionDigits="2"
                         maxFractionDigits="2"/>
    </p:inputText>

    <p:commandButton value="Adicionar"
                     icon=" ui-icon-circle-triangle-s"
                     action="#{vendaControle.addItem2()}"
                     ajax="false"/>

</p:panelGrid>

<p:dataTable value="#{vendaControle.venda.maoDeObra}"
             var="obra"
             paginator="true" rows="5"
             rowIndexVar="rowIndex"
             emptyMessage="Nenhum registro encontrado">

    <p:column headerText="Descrição" width="10%" style="text-align:center">
        <h:outputText value="#{obra.descricao}"/>
    </p:column>

    <p:column headerText="Valor" width="10%" style="text-align:center">
        <h:outputText value="#{obra.valor}">
            <f:convertNumber minFractionDigits="2"
                             maxFractionDigits="2"
                             type="currency"
                             currencySymbol="R$"/>
        </h:outputText>

    </p:column>

    <p:column headerText="Remover" width="20%" style="text-align:center">
        <p:commandButton value="Remover"
                         icon="ui-icon-circle-triangle-n"
                         action="#{vendaControle.removeItem2(obra)}"
                         ajax="false"/>
    </p:column>

</p:dataTable>



>> VendaControle.java

package controle;

import converter.ConverterGenerico;
import entidades.ItemVenda;
import entidades.MaoDeObra;
import entidades.Venda;
import facade.VendaFacade;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@ViewScoped
public class VendaControle implements Serializable {
private Venda venda;
@Inject
private VendaFacade vendaFacade;
private ConverterGenerico converterGenerico;
private ItemVenda itemVenda = new ItemVenda();
private MaoDeObra maoDeObra = new MaoDeObra();

public void addItem() {
    try {
        venda.addItem(itemVenda);
        itemVenda = new ItemVenda();
    } catch (Exception ex) {
        ex.printStackTrace();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}

public void addItem2() {
    try {
        venda.addItem2(maoDeObra);
        maoDeObra = new MaoDeObra();
    } catch (Exception ex) {
        ex.printStackTrace();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}

public void removeItem(ItemVenda i) {
    venda.removeItem(i);
}

public void removeItem2(MaoDeObra m) {
    venda.removeItem2(m);
}

public ConverterGenerico converter() {
    if (converterGenerico == null) {
        converterGenerico = new ConverterGenerico(vendaFacade);
    }
    return converterGenerico;
}

public void novo() {
    venda = new Venda();
    itemVenda = new ItemVenda();
    maoDeObra = new MaoDeObra();
}

public String salvar() {
    try {
        venda.validar();
        venda.movimenta();
        vendaFacade.salvar(venda);
        return "list?faces-redirect=true";
    } catch (Exception ex) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    return null;
}

public String excluir(Venda v) {
    vendaFacade.excluir(v);
    return "list?faces-redirect=true";
}

public List<Venda> getListagem() {
    return vendaFacade.listar();
}

public Venda getVenda() {
    return venda;
}

public void setVenda(Venda venda) {
    this.venda = venda;
}

public ItemVenda getItemVenda() {
    return itemVenda;
}

public void setItemVenda(ItemVenda itemVenda) {
    this.itemVenda = itemVenda;
}

public MaoDeObra getMaoDeObra() {
    return maoDeObra;
}

public void setMaoDeObra(MaoDeObra maoDeObra) {
    this.maoDeObra = maoDeObra;
}

}
Bruno

Bruno

Curtidas 0

Respostas

Bruno

Bruno

25/08/2016

Boa tarde galera..
Estou com o seguinte problema, talvez seja até simples, mas estou desde ontem tentando arrumar e ainda não consegui, então toda ajuda é bem vinda..

Seguinte: Eu tenho duas listas na página da venda, uma com itensVenda, e outra com maoDeObra..
A lista itensVenda, remove normalmente e funciona de acordo como eu preciso, porém a lista maoDeObra, após adicionar várias Mão de Obra, quanto tento remover alguma, ela sempre remove o primeiro item da lista..
Gostaria de alguma ajuda pra isso..

>> maodeobra.xhtml

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml"
 xmlns:h="http://xmlns.jcp.org/jsf/html"
 xmlns:p="http://primefaces.org/ui"
 xmlns:f="http://xmlns.jcp.org/jsf/core">

<p:panelGrid columns="2" layout="grid" columnClasses="coluna10, coluna90">
    <p:outputLabel value="Mão de Obra:" for="maodeobra"/>
    <h:panelGroup>
        <p:inputText id="maodeobra" value="#{vendaControle.maoDeObra.descricao}"/>
    </h:panelGroup>

    <p:outputLabel value="Valor:" for="valor"/>
    <p:inputText id="valor" 
                 value="#{vendaControle.maoDeObra.valor}">
        <f:convertNumber minFractionDigits="2"
                         maxFractionDigits="2"/>
    </p:inputText>

    <p:commandButton value="Adicionar"
                     icon=" ui-icon-circle-triangle-s"
                     action="#{vendaControle.addItem2()}"
                     ajax="false"/>

</p:panelGrid>

<p:dataTable value="#{vendaControle.venda.maoDeObra}"
             var="obra"
             paginator="true" rows="5"
             rowIndexVar="rowIndex"
             emptyMessage="Nenhum registro encontrado">

    <p:column headerText="Descrição" width="10%" style="text-align:center">
        <h:outputText value="#{obra.descricao}"/>
    </p:column>

    <p:column headerText="Valor" width="10%" style="text-align:center">
        <h:outputText value="#{obra.valor}">
            <f:convertNumber minFractionDigits="2"
                             maxFractionDigits="2"
                             type="currency"
                             currencySymbol="R$"/>
        </h:outputText>

    </p:column>

    <p:column headerText="Remover" width="20%" style="text-align:center">
        <p:commandButton value="Remover"
                         icon="ui-icon-circle-triangle-n"
                         action="#{vendaControle.removeItem2(obra)}"
                         ajax="false"/>
    </p:column>

</p:dataTable>


>> VendaControle.java

package controle;

import converter.ConverterGenerico;
import entidades.ItemVenda;
import entidades.MaoDeObra;
import entidades.Venda;
import facade.VendaFacade;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.view.ViewScoped;
import javax.inject.Inject;
import javax.inject.Named;

@Named
@ViewScoped
public class VendaControle implements Serializable {
private Venda venda;
@Inject
private VendaFacade vendaFacade;
private ConverterGenerico converterGenerico;
private ItemVenda itemVenda = new ItemVenda();
private MaoDeObra maoDeObra = new MaoDeObra();

public void addItem() {
    try {
        venda.addItem(itemVenda);
        itemVenda = new ItemVenda();
    } catch (Exception ex) {
        ex.printStackTrace();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}

public void addItem2() {
    try {
        venda.addItem2(maoDeObra);
        maoDeObra = new MaoDeObra();
    } catch (Exception ex) {
        ex.printStackTrace();
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
}

public void removeItem(ItemVenda i) {
    venda.removeItem(i);
}

public void removeItem2(MaoDeObra m) {
    venda.removeItem2(m);
}

public ConverterGenerico converter() {
    if (converterGenerico == null) {
        converterGenerico = new ConverterGenerico(vendaFacade);
    }
    return converterGenerico;
}

public void novo() {
    venda = new Venda();
    itemVenda = new ItemVenda();
    maoDeObra = new MaoDeObra();
}

public String salvar() {
    try {
        venda.validar();
        venda.movimenta();
        vendaFacade.salvar(venda);
        return "list?faces-redirect=true";
    } catch (Exception ex) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, ex.getMessage(), "");
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    return null;
}

public String excluir(Venda v) {
    vendaFacade.excluir(v);
    return "list?faces-redirect=true";
}

public List<Venda> getListagem() {
    return vendaFacade.listar();
}

public Venda getVenda() {
    return venda;
}

public void setVenda(Venda venda) {
    this.venda = venda;
}

public ItemVenda getItemVenda() {
    return itemVenda;
}

public void setItemVenda(ItemVenda itemVenda) {
    this.itemVenda = itemVenda;
}

public MaoDeObra getMaoDeObra() {
    return maoDeObra;
}

public void setMaoDeObra(MaoDeObra maoDeObra) {
    this.maoDeObra = maoDeObra;
}

}



>> Venda.java (entidade)

package entidades;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.swing.JOptionPane;

@Entity
@Table(name = "venda")
public class Venda implements Serializable, MovimentaEstoque, Validador {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ven_id")
private Long id;

@Column(name = "ven_data", nullable = false)
@Temporal(javax.persistence.TemporalType.TIMESTAMP)
private Date data = new Date();

@Column(name = "ven_totalfinal", nullable = false)
private BigDecimal totalfinal = BigDecimal.ZERO;

@Column(name = "ven_desconto", nullable = true)
private BigDecimal desconto = BigDecimal.ZERO;

@Column(name = "ven_tipo", nullable = false)
@Enumerated(EnumType.STRING)
private VendaTipo vendaTipo = VendaTipo.VENDA;

@OneToMany(cascade = CascadeType.ALL,
        fetch = FetchType.LAZY,
        mappedBy = "venda",
        orphanRemoval = true)
private List<ItemVenda> itensVenda = new ArrayList<>();

@OneToMany(cascade = CascadeType.ALL,
        fetch = FetchType.LAZY,
        mappedBy = "venda",
        orphanRemoval = true)
private List<MaoDeObra> maoDeObra = new ArrayList<>();

@ManyToOne
@JoinColumn(name = "ven_cliente", nullable = false)
private Cliente cliente;
@ManyToOne
@JoinColumn(name = "ven_funcionario")
private Funcionario funcionario;

public void addItem(ItemVenda item) throws Exception {
    item.setVenda(this);
    if (!itensVenda.contains(item)) {
        item.setPreco(item.getProduto().getPreco());
        itensVenda.add(item);
        calculaTotal();
    } else {
        JOptionPane.showMessageDialog(null, "O produto '" + item.getProduto().getNome() + "' já está adicionado na venda");
        throw new Exception("");
    }
}

public void addItem2(MaoDeObra obra) throws Exception {
    obra.setVenda(this);
    maoDeObra.add(obra);
    calculaTotal();
}

@Override
public void movimenta() throws Exception {
    if (vendaTipo.equals(VendaTipo.VENDA)) {
        for (ItemVenda item : itensVenda) {
            item.getProduto().baixarEstoque(item.getQuantidade());
        }
    }
}

@Override
public void validar() throws Exception {
    if (itensVenda.isEmpty() && maoDeObra.isEmpty()) {
        JOptionPane.showMessageDialog(null, "Não é possivel salvar uma venda em branco");
        throw new Exception("");
    }
}

public void removeItem(ItemVenda item) {
    itensVenda.remove(item);
    calculaTotal();
}

public void removeItem2(MaoDeObra obra) {
    maoDeObra.remove(obra);
    calculaTotal();
}

public void calculaTotal() {
    if (desconto == null || desconto.compareTo(totalfinal) >= 0) {
        desconto = BigDecimal.ZERO;
    }
    totalfinal = BigDecimal.ZERO;
    for (ItemVenda iv : itensVenda) {
        totalfinal = totalfinal.add(iv.getPreco().multiply(iv.getQuantidade()));
    }
    for (MaoDeObra mo : maoDeObra) {
        totalfinal = totalfinal.add(mo.getValor());
    }
    totalfinal = totalfinal.subtract(desconto);
}

public Funcionario getFuncionario() {
    return funcionario;
}

public void setFuncionario(Funcionario funcionario) {
    this.funcionario = funcionario;
}

public Long getId() {
    return id;
}

public void setId(Long id) {
    this.id = id;
}

public Date getData() {
    return data;
}

public void setData(Date data) {
    this.data = data;
}

public BigDecimal getTotalfinal() {
    return totalfinal;
}

public void setTotalfinal(BigDecimal totalfinal) {
    this.totalfinal = totalfinal;
}

public BigDecimal getDesconto() {
    return desconto;
}

public void setDesconto(BigDecimal desconto) {
    this.desconto = desconto;
}

public List<ItemVenda> getItensVenda() {
    return itensVenda;
}

public void setItensVenda(List<ItemVenda> itensVenda) {
    this.itensVenda = itensVenda;
}

public List<MaoDeObra> getMaoDeObra() {
    return maoDeObra;
}

public void setMaoDeObra(List<MaoDeObra> maoDeObra) {
    this.maoDeObra = maoDeObra;
}

public VendaTipo getVendaTipo() {
    return vendaTipo;
}

public void setVendaTipo(VendaTipo vendaTipo) {
    this.vendaTipo = vendaTipo;
}

public Cliente getCliente() {
    return cliente;
}

public void setCliente(Cliente cliente) {
    this.cliente = cliente;
}

@Override
public int hashCode() {
    int hash = 7;
    hash = 97 * hash + Objects.hashCode(this.id);
    hash = 97 * hash + Objects.hashCode(this.itensVenda);
    hash = 97 * hash + Objects.hashCode(this.maoDeObra);
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Venda other = (Venda) obj;
    if (!Objects.equals(this.id, other.id)) {
        return false;
    }
    if (!Objects.equals(this.itensVenda, other.itensVenda)) {
        return false;
    }
    if (!Objects.equals(this.maoDeObra, other.maoDeObra)) {
        return false;
    }
    return true;
}

@Override
public String toString() {
    return id.toString();
}

}
GOSTEI 0
POSTAR