Olá Pessoal, estou fazendo um projeto que tem como funcionalidade principal a parte de vendas(carrinho de compras), minha dúvida é como colocar mais um arraylist na minha parte de venda, atualmente o sistema está vendendo somente produto, quero acrescentar agora serviço, mas estou tendo dificuldades em fazer essa implementação, estou utilizando o padrão mvc por isso vou disponibilizar o codigo-fonte separados por partes modelo, visão e controle, vou ignorar algumas partes para ser mais específico, e vou estar deixando alguns prints de como está o sistema atualmente.
Parte de Modelo - VendaDAO.java
package modelo;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class VendaDAO extends DataBaseDAO{
public void registrar(Venda v) throws Exception{
this.conectar();
String sql = "INSERT INTO venda (id_funcionario,id_cliente,data_venda) VALUES(?,?,now())";
PreparedStatement pstm = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstm.setInt(1, v.getVendedor().getId());
pstm.setInt(2, v.getCliente().getId());
pstm.execute();
ResultSet rs = pstm.getGeneratedKeys();
if(rs.next()){
v.setId(rs.getInt(1));
}
for(ItemProduto ip :v.getCarrinho()){
String sql_item = "INSERT INTO item_produto (id_venda,id_produto,quantidade,valor) VALUES(?,?,?,?)";
PreparedStatement pstm_item = conn.prepareStatement(sql_item);
pstm_item.setInt(1, v.getId());
pstm_item.setInt(2, ip.getProduto().getId());
pstm_item.setInt(3, ip.getQuantidade());
pstm_item.setDouble(4, ip.getValor());
pstm_item.execute();
}
this.desconectar();
}
public ArrayList<ItemProduto> itensProduto(int id) throws Exception{
this.conectar();
String sql = "SELECT * FROM item_produto WHERE id_venda=?";
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
ResultSet rs = pstm.executeQuery();
ArrayList<ItemProduto> lista = new ArrayList<ItemProduto>();
while (rs.next()) {
ItemProduto ip = new ItemProduto();
ip.setId(rs.getInt("id"));
ip.setQuantidade(rs.getInt("quantidade"));
ip.setValor(rs.getDouble("valor"));
ProdutoDAO pDAO = new ProdutoDAO();
ip.setProduto(pDAO.carregarPorId(rs.getInt("id_produto")));
lista.add(ip);
}
this.desconectar();
return lista;
}
public ArrayList<ItemServico> itensServico(int id) throws Exception{
this.conectar();
String sql = "SELECT * FROM item_servico WHERE id_venda=?";
PreparedStatement pstm = conn.prepareStatement(sql);
pstm.setInt(1, id);
ResultSet rs = pstm.executeQuery();
ArrayList<ItemServico> lista = new ArrayList<ItemServico>();
while (rs.next()) {
ItemServico is = new ItemServico();
is.setId(rs.getInt("id"));
is.setQuantidade(rs.getInt("quantidade"));
is.setValor(rs.getDouble("valor"));
ServicoDAO sDAO = new ServicoDAO();
is.setServico(sDAO.carregarPorId(rs.getInt("id_servico")));
lista.add(is);
}
this.desconectar();
return lista;
}
Parte de Visão - form_compra.jsp
<%@page import="modelo.ItemProduto"%>
<%@page import="modelo.ClienteDAO"%>
<%@page import="modelo.Cliente"%>
<%@page import="modelo.Venda"%>
<%@page import="modelo.Produto"%>
<%@page import="java.util.ArrayList"%>
<%@page import="modelo.ProdutoDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>compra</title>
</head>
<body>
<%@include file="banner.jsp" %>
<%
Venda v = new Venda();
Cliente c = new Cliente();
try{
String op = request.getParameter("op");
if(op.equals("n")){
int id = Integer.parseInt(request.getParameter("id"));
ClienteDAO cDAO = new ClienteDAO();
c = cDAO.carregarPorId(id);
v.setCliente(c);
v.setVendedor(uLogado);
v.setCarrinho(new ArrayList<ItemProduto>());
session.setAttribute("venda", v);
}else{
v = (Venda) session.getAttribute("venda");
}
}catch(Exception e){
out.print("Erro:"+e);
}
%>
<br/><br/>Vendedor:<%=v.getVendedor().getNome() %><br/>
Cliente:<%=v.getCliente().getNome() %><br/>
<h4>Catalogo: (<%=v.getCarrinho().size() %> itens no carrinho)</h4>
<%
ProdutoDAO pDAO = new ProdutoDAO();
ArrayList<Produto> lista = new ArrayList<Produto>();
try{
lista = pDAO.listar();
}catch(Exception e){
out.print("Erro:"+e);
}
for(Produto p:lista){
%>
<div id="prod<%=p.getId() %>">
<form method="get" action="gerenciar_carrinho.do">
<input type="hidden" name="id_produto" value="<%=p.getId() %>"/>
<input type="hidden" name="op" value="add"/>
<%=p.getNome() %><br/>
<input type="number" value="1" name="quantidade" style="width: 40px;"/>
<input type="submit" value="ADD"/>
</form>
</div>
<%
}
%>
<br/>
<a href="listar_cliente.jsp"><button>Cancelar</button></a> <a href="form_finalizar_compra.jsp"><button>Finalizar Compra</button></a>
</body>
</html>
Parte de Visão - form_finalizar_compra.jsp
<%@page import="modelo.ItemProduto"%>
<%@page import="modelo.ClienteDAO"%>
<%@page import="modelo.Cliente"%>
<%@page import="modelo.Venda"%>
<%@page import="modelo.Produto"%>
<%@page import="java.util.ArrayList"%>
<%@page import="modelo.ProdutoDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
function excluir(index,item){
if(confirm("Tem certeza que quer excluir o item: "+item+"?")){
window.open("gerenciar_carrinho.do?op=del&index="+index,"_self");
}
}
</script>
<title>Finalizar Compra</title>
</head>
<body>
<%@include file="banner.jsp" %>
<h2>Finalizar Compra</h2>
<%
Venda v = new Venda();
Cliente c = new Cliente();
try{
v = (Venda) session.getAttribute("venda");
}catch(Exception e){
out.print("Erro:"+e);
}
%>
<br/><br/>Vendedor:<%=v.getVendedor().getNome() %><br/>
Cliente:<%=v.getCliente().getNome() %><br/>
<table border="1">
<tr>
<td>ITEM</td>
<td>PRODUTO</td>
<td>QTD</td>
<td>VALOR</td>
<td>TOTAL</td>
<td>REMOVER</td>
</tr>
<%
double total = 0;
int cont=0;
for(ItemProduto ip:v.getCarrinho()){
%>
<tr>
<td align="center"><%=cont+1 %></td>
<td><%=ip.getProduto().getNome() %></td>
<td><%=ip.getQuantidade() %></td>
<td>R$ <%=ip.getValor() %></td>
<td>R$ <%=ip.getQuantidade()*ip.getValor() %></td>
<td align="center">
<a href="#" onclick="excluir(<%=cont %>,<%=cont+1 %>);"><img src="imagens/excluir.png"/></a>
</td>
</tr>
<%
total = total + (ip.getQuantidade()*ip.getValor());
cont++;
}
%>
</table>
<div> Valor Total =================> R$ <%=total %> </div>
<br/>
<a href="listar_cliente.jsp"><button>Cancelar</button></a> <a href="form_compra.jsp?op=c"><button>Continuar Comprando</button></a> <a href="finalizar_compra.do"><button>Confirmar Compra</button></a>
</body>
</html>
Parte de Controle - GerenciarCarrinho.java
package controle;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import modelo.ItemProduto;
import modelo.ItemServico;
import modelo.Produto;
import modelo.ProdutoDAO;
import modelo.Venda;
public class GerenciarCarrinho extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet GerenciarCarrinho</title>");
out.println("</head>");
out.println("<body>");
HttpSession session = request.getSession();
try {
Venda v = (Venda) session.getAttribute("venda");
ArrayList<ItemProduto> carrinho = v.getCarrinho();
String op = request.getParameter("op");
if(op.equals("add")){
Produto p = new Produto();
ProdutoDAO pDAO = new ProdutoDAO();
int id = Integer.parseInt(request.getParameter("id_produto"));
p = pDAO.carregarPorId(id);
int quantidade = Integer.parseInt(request.getParameter("quantidade"));
ItemProduto item = new ItemProduto();
item.setProduto(p);
item.setQuantidade(quantidade);
item.setValor(p.getValor());
carrinho.add(item);
v.setCarrinho(carrinho);
session.setAttribute("venda", v);
response.sendRedirect("form_compra.jsp?op=c");
} else if(op.equals("del")){
int index = Integer.parseInt(request.getParameter("index"));
carrinho.remove(index);
v.setCarrinho(carrinho);
session.setAttribute("venda", v);
response.sendRedirect("form_finalizar_compra.jsp");
}
} catch (Exception e) {
out.print("Erro:"+e);
}
out.println("</body>");
out.println("</html>");
}
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
/**
* Returns a short description of the servlet.
*
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
Prints:
Resumindo: quero acrecentar uma tabela com os serviços ao lado da tabela de produtos e poder adicionar tudo em uma mesma compra, é isto