Ajuda para calcular desconto em uma venda

Pessoal, estou com uma dificuldade em fazer o seguinte fluxo:

  1. Cadastrar uma nova venda de um veículo. No formulário você insere data, pega o modelo de uma lista, um vendedor de outra lista e por último se tiver desconto ou não.

  2. Ao fim, submeter o formulário e exibir em uma tabela as informações acima, e acrescentando o valor final da venda com o desconto aplicado.
    Consigo pegar os dados do veículo e do vendedor na lista do formulário e grava com sucesso, porém não estou conseguindo identificar onde ficaria esse cálculo do desconto já que quando o formulário detecta na lista do carro, ele não está criando um novo, por esse motivo quando tentei aplicar direto no método adicionar ele me retornou valor nulo. Lembrando que meus dados são BigDecimal.
    Meu Bean:
    public class VendaBean implements Serializable {

    private static final long serialVersionUID = 1L;
    private Venda venda = new Venda();
    private List lista = new ArrayList<>();
    private VendaDAO vdao = new VendaDAO();
    private List carros = new ArrayList<>();
    private List usuarios = new ArrayList<>();

    @PostConstruct
    public void listar() {
    lista = vdao.listar(Venda.class);
    }

    public void adicionar() {
    try {
    if(venda.getId() == 0) {
    vdao.salvar(venda);
    lista.add(venda);
    vdao.listar(Venda.class);
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
    “Venda “+venda.getId()+” cadastrada com sucesso!”,“Sucesso”));
    }else {
    vdao.editar(venda);
    vdao.listar(Venda.class);
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,
    “Venda “+venda.getId()+” editada com sucesso!”,“Sucesso”));
    }
    } catch (Exception e) {
    FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR,
    “Erro ao cadastrar ou alterar venda!”,“Erro!”));
    e.printStackTrace();
    System.out.println(e.getMessage());
    }
    venda = new Venda();
    }

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

    // inicio getters e setters
    public Venda getVenda() {
    return venda;
    }

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

    public List getLista() {
    return lista;
    }

    public void setLista(List lista) {
    this.lista = lista;
    }

    public VendaDAO getVdao() {
    return vdao;
    }

    public void setVdao(VendaDAO vdao) {
    this.vdao = vdao;
    }

    public List getCarros() {
    CarroDAO cdao = new CarroDAO();
    carros = cdao.listar(Carro.class);
    return carros;
    }

    public void setCarros(List carros) {
    this.carros = carros;
    }

    public List getUsuarios() {
    UsuarioDAO udao = new UsuarioDAO();
    usuarios = udao.listar(Usuario.class);
    return usuarios;
    }

    public void setUsuarios(List usuarios) {
    this.usuarios = usuarios;
    }