PedidoDAO.java Source code

Java tutorial

Introduction

Here is the source code for PedidoDAO.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;

/**
 *
 * @author luisjo
 */
public class PedidoDAO implements PedidoDAOInterface {

    private JdbcTemplate jdbcTemplate;

    public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }

    @Override
    public void alta(Pedido p) {
        double importe = 0;
        int idPed = p.getIdPedido();
        int idProd, cantidad;
        ArrayList<PedidoLinea> aux = p.getLineasPedido();
        String inserQuery = "insert into TPedidos (idPedido, idCliente, FHPedido, FRecogida, Importe, Observaciones) values (?, ?, ?, ?, ?, ?) ";
        Object[] params = new Object[] { p.getIdPedido(), p.getIdCliente(), p.getFhPedido(), p.getfRecogida(),
                importe, p.getObservaciones() };
        jdbcTemplate.update(inserQuery, params);
        for (PedidoLinea pl : aux) {
            idProd = pl.getProducto().getIdProducto();
            cantidad = pl.getCantidad();
            inserQuery = "insert into TPedidoLineas (idPedido, idProducto, Cantidad) values (?, ?, ?) ";
            params = new Object[] { idPed, idProd, jdbcTemplate };
            jdbcTemplate.update(inserQuery, params);
            importe += pl.getProducto().getPrecio() * cantidad;
        }
        String updateQuery = "update TPedidos set Importe = ? where IdPedido = ?";
        params = new Object[] { importe, p.getIdPedido() };
        jdbcTemplate.update(updateQuery, params);
    }

    @Override
    public void baja(Pedido p) {
        String updateQuery = "delete from TPedidoLineas where IdPedido = ?";
        Object[] params = new Object[] { p.getIdPedido() };
        jdbcTemplate.update(updateQuery, params);
        updateQuery = "delete from TPedidos where IdPedido = ?";
        params = new Object[] { p.getIdPedido() };
        jdbcTemplate.update(updateQuery, params);
    }

    @Override
    public void modificacion(Pedido p) {
        double importe = 0;
        int idPed = p.getIdPedido();
        int idProd, cantidad;
        ArrayList<PedidoLinea> aux = p.getLineasPedido();
        Object[] params;
        String updateQuery = "delete from TPedidoLineas where IdPedido = ?";
        params = new Object[] { p.getIdPedido() };
        jdbcTemplate.update(updateQuery, params);
        for (PedidoLinea pl : aux) {
            idProd = pl.getProducto().getIdProducto();
            cantidad = pl.getCantidad();
            updateQuery = "insert into TPedidoLineas (idPedido, idProducto, Cantidad) values (?, ?, ?) ";
            params = new Object[] { idPed, idProd, cantidad };
            jdbcTemplate.update(updateQuery, params);
            importe += pl.getProducto().getPrecio() * cantidad;
        }
        updateQuery = "update TPedidos set idCliente = ? , FHPedido = ? , FRecogida = ? , Importe = ? , Observaciones = ? where idPedido = ? ";
        params = new Object[] { p.getIdCliente(), p.getFhPedido(), p.getfRecogida(), importe, p.getObservaciones(),
                p.getIdPedido() };
        jdbcTemplate.update(updateQuery, params);
    }

    @Override
    public Pedido consulta(int idPedido) {
        String selQuery = "select * from TPedidos where idPedido = ?";
        Pedido p = (Pedido) jdbcTemplate.queryForObject(selQuery, new Object[] { idPedido }, new PedidoMapper());
        selQuery = "select * from TPedidoLineas L, TProductos P where L.idProducto = P.idProducto and idPedido = ?";
        ArrayList<PedidoLinea> pl = (ArrayList) jdbcTemplate.query(selQuery, new Object[] { idPedido },
                new PLMapper());
        p.setLineasPedido(pl);
        return p;
    }

    @Override
    public Pedido consulta(String idCliente, GregorianCalendar fPedido) {
        Date fecha = new Date(fPedido.getTimeInMillis());
        String selQuery = "select * from TPedidos where idCliente = ? and FHPedido = ?";
        Pedido p = (Pedido) jdbcTemplate.queryForObject(selQuery, new Object[] { idCliente, fecha },
                new PedidoMapper());
        selQuery = "select * from TPedidoLineas L, TProductos P where L.idProducto = P.idProducto and idPedido = ?";
        ArrayList<PedidoLinea> pl = (ArrayList<PedidoLinea>) jdbcTemplate.query(selQuery,
                new Object[] { p.getIdPedido() }, new BeanPropertyRowMapper(PedidoLinea.class));
        p.setLineasPedido(pl);
        return p;
    }

    @Override
    public ArrayList<Pedido> consultaAll(GregorianCalendar fecha) {
        String selQuery = "select * from TPedidos where FPedido = ?";
        ArrayList<Pedido> p = (ArrayList) jdbcTemplate.query(selQuery, new Object[] { fecha }, new PedidoMapper());
        return p;
    }

    private static class PedidoMapper implements RowMapper<Pedido> {

        public PedidoMapper() {
        }

        @Override
        public Pedido mapRow(ResultSet rs, int i) throws SQLException {

            Pedido p = new Pedido();

            GregorianCalendar gcP = new GregorianCalendar();
            gcP.setTime(rs.getTimestamp("FHPedido"));

            GregorianCalendar gcR = new GregorianCalendar();
            gcR.setTime(rs.getTimestamp("FRecogida"));

            p.setIdPedido(rs.getInt("idPedido"));
            p.setIdCliente(rs.getNString("idCliente"));
            p.setFhPedido(gcP);
            p.setfRecogida(gcR);
            p.setImporte(rs.getDouble("Importe"));
            p.setObservaciones(rs.getString("Observaciones"));

            return p;
        }
    }

    private static class PLMapper implements RowMapper<PedidoLinea> {

        public PLMapper() {
        }

        @Override
        public PedidoLinea mapRow(ResultSet rs, int i) throws SQLException {
            PedidoLinea pl = new PedidoLinea();
            Producto producto = new Producto();

            producto.setIdProducto(rs.getInt("idProducto"));
            producto.setNombre(rs.getString("Nombre"));
            producto.setTipo(rs.getString("Tipo"));
            producto.setDescripcion(rs.getString("Descripcion"));
            producto.setPrecio(rs.getDouble("Precio"));
            producto.setDisponible(rs.getInt("Disponible"));

            pl.setCantidad(rs.getInt("Cantidad"));
            pl.setProducto(producto);

            return pl;
        }

    }

}