Controller.ControllerVenta.java Source code

Java tutorial

Introduction

Here is the source code for Controller.ControllerVenta.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.
 */
package Controller;

import Controller.Validaciones.Validador;
import Model.DTO.ObjVenta;
import Model.DTO.ObjDetalleMovimiento;
import Model.DTO.ObjUsuario;
import Model.Data.ModelVenta;
import com.google.gson.Gson;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.*;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.sql.ResultSet;
import java.io.IOException;
import java.io.OutputStream;
import java.text.NumberFormat;
import java.util.Locale;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletException;

/**
 *
 * @author siete
 */
public class ControllerVenta extends HttpServlet {

    ModelVenta daoModelVenta;
    ObjVenta _objVenta = new ObjVenta();
    ObjUsuario _objUsuario = new ObjUsuario();
    List<ObjDetalleMovimiento> listOjbDetalleMovimientos = new ArrayList<>();
    ObjDetalleMovimiento _objDetalleMovimiento = new ObjDetalleMovimiento();

    /**
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code>
     * methods.
     *
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        if (request.getParameter("action") != null) {
            String url = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
                    + request.getContextPath();
            String action = request.getParameter("action");
            switch (action) {
            case "Registrar": {
                String documentoUsuario = (request.getParameter("documentoUsuario"));
                String documentoCliente = null;
                String nombreCliente = null;
                int numeroVenta = 0;
                if (Validador.validarDocumento(request.getParameter("documentoCliente"))
                        & Validador.validarNombresCompletos(request.getParameter("txtNombreCliente"))
                        & Validador.validarNumero(request.getParameter("txtNumeroVenta"))) {
                    documentoCliente = (request.getParameter("documentoCliente"));
                    nombreCliente = (request.getParameter("txtNombreCliente"));
                    numeroVenta = Integer.parseInt(request.getParameter("txtNumeroVenta"));
                } else {
                    response.setContentType("application/json");
                    response.setCharacterEncoding("UTF-8");
                    response.getWriter().write(Mensaje(false, null, "Ha ingresado datos incorrectos"));
                    break;
                }

                int lenght = Integer.parseInt(request.getParameter("size"));
                int totalCompra = Integer.parseInt(request.getParameter("txtTotalVenta"));
                listOjbDetalleMovimientos = new ArrayList<>();
                for (int i = 0; i < lenght; i++) {
                    _objDetalleMovimiento = new ObjDetalleMovimiento();
                    _objDetalleMovimiento
                            .setIdArticulo(Integer.parseInt(request.getParameter("lista[" + i + "][idArticulo]")));
                    _objDetalleMovimiento
                            .setCantidad(Integer.parseInt(request.getParameter("lista[" + i + "][cantidad]")));
                    _objDetalleMovimiento.setPrecioArticulo(
                            Integer.parseInt(request.getParameter("lista[" + i + "][precioArticulo]")));
                    _objDetalleMovimiento.setTotalDetalleMovimiento(
                            _objDetalleMovimiento.getCantidad() * _objDetalleMovimiento.getPrecioArticulo());
                    _objDetalleMovimiento.setDescuento(lenght);
                    listOjbDetalleMovimientos.add(_objDetalleMovimiento);
                }
                _objUsuario.setDocumentoUsuario(documentoUsuario);
                _objVenta.setIdVenta(numeroVenta);
                _objVenta.setDocumentoCliente(documentoCliente);
                _objVenta.setNombreCliente(nombreCliente);
                _objVenta.setTotalVenta(totalCompra);
                daoModelVenta = new ModelVenta();
                String salida = Mensaje(daoModelVenta.Add(_objVenta, _objUsuario, listOjbDetalleMovimientos),
                        "La venta ha sido registrada", "Ha ocurrido un error");
                daoModelVenta.Signout();
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(salida);
                break;
            }
            case "Consultar": {
                int id = Integer.parseInt(request.getParameter("id"));
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(consultarDetalle(id));
                break;
            }
            case "Enlistar": {
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(getTableVenta());
                break;
            }
            case "Contador": {
                response.setContentType("application/json");
                response.setCharacterEncoding("UTF-8");
                response.getWriter().write(getContador());
                break;
            }
            case "Imprimir": {
                response.setContentType("application/pdf");
                try {
                    Locale loc = Locale.getDefault();
                    NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(loc);
                    //Primero obtengo el id del Movimiento
                    int id = Integer.parseInt(request.getParameter("id"));
                    //Obtengo el reporte a manera de Map
                    Map material = reporte(id);
                    //Topo ese reporte y lo divido, primero en la compra y luego el detalle
                    Map<String, String> venta = (Map) material.get("Venta");
                    List<Map> detalle = (List) material.get("Detalle");
                    //Creo el documento y obtengo el canal de comunicacion con el servidor, para luego enviar el documento.
                    Document document = new Document();
                    OutputStream os = response.getOutputStream();
                    //Creo una instancia a partir del documento y del canal
                    PdfWriter.getInstance(document, os);
                    //Abro el documento
                    document.open();
                    Image logo = Image.getInstance(url + "/public/images/logo.png");
                    logo.scaleAbsolute(new Rectangle(logo.getPlainWidth() / 4, logo.getPlainHeight() / 4));
                    document.add(logo);
                    //Creo una fuente para la letra en negrilla
                    final Font helveticaBold = new Font(Font.FontFamily.HELVETICA, 12, Font.BOLD);
                    //Escribo y agrego un primer parrafo con los datos basicos de la compra         
                    Paragraph headerDerecha = new Paragraph();
                    headerDerecha.add(new Chunk("Id. de la Venta: ", helveticaBold));
                    headerDerecha.add(new Chunk(venta.get("numeroVenta") + "\n"));
                    headerDerecha.add(new Chunk("Nombre del Cliente: ", helveticaBold));
                    headerDerecha.add(new Chunk(venta.get("nombreCliente") + "\n"));
                    headerDerecha.add(new Chunk("Documento del Cliente: ", helveticaBold));
                    headerDerecha.add(new Chunk(venta.get("documentoCliente") + "\n"));
                    headerDerecha.add(new Chunk("Fecha Venta: ", helveticaBold));
                    headerDerecha.add(new Chunk(venta.get("fechaVenta") + "\n"));
                    //Escribo y agrego un segundo parrafo con los datos basicos de Stelarte  
                    Paragraph headerIzquierda = new Paragraph();
                    headerIzquierda.add(new Chunk("Stelarte.Decoracion \n", helveticaBold));
                    headerIzquierda.add(new Chunk("Direccin: ", helveticaBold));
                    headerIzquierda.add(new Chunk("Calle Falsa 123 # 12a34\n"));
                    headerIzquierda.add(new Chunk("Telfono: ", helveticaBold));
                    headerIzquierda.add(new Chunk("2583697 \n"));
                    //Agrego los dos anteriores parrafos al Header
                    PdfPTable header = new PdfPTable(2);
                    header.getDefaultCell().setBorder(0);
                    header.addCell(headerIzquierda);
                    header.addCell(headerDerecha);
                    header.setWidthPercentage(100f);
                    header.setSpacingAfter(20);
                    document.add(header);
                    //Creo la tabla del detalle
                    PdfPTable tablaDetalle = new PdfPTable(new float[] { 1, 3, 2, 2 });
                    tablaDetalle.getDefaultCell().setHorizontalAlignment(Element.ALIGN_CENTER);
                    //Creo el titulo, le quito el borde, le digo que ocupara cuatro columnas y que ser centrado
                    PdfPCell tituloCell = new PdfPCell(new Phrase("Detalle de Venta", helveticaBold));
                    tituloCell.setBorder(0);
                    tituloCell.setColspan(4);
                    tituloCell.setHorizontalAlignment(Element.ALIGN_CENTER);
                    tablaDetalle.addCell(tituloCell);
                    //Aqui creo cada cabecera
                    tablaDetalle.getDefaultCell().setBackgroundColor(BaseColor.LIGHT_GRAY);
                    tablaDetalle.addCell(new Phrase("ID", helveticaBold));
                    tablaDetalle.addCell(new Phrase("Nombre", helveticaBold));
                    tablaDetalle.addCell(new Phrase("Cantidad", helveticaBold));
                    tablaDetalle.addCell(new Phrase("Valor", helveticaBold));
                    tablaDetalle.getDefaultCell().setBackgroundColor(null);
                    //Aqui agrego la tabla cada articulo.
                    for (Map<String, String> next : detalle) {
                        tablaDetalle.addCell(next.get("idArticulo"));
                        tablaDetalle.addCell(next.get("descripcionArticulo"));
                        tablaDetalle.addCell(next.get("cantidad"));
                        tablaDetalle
                                .addCell(currencyFormatter.format(Integer.parseInt(next.get("precioArticulo"))));
                    }
                    //Creo el Footer
                    headerIzquierda = new Paragraph();
                    headerIzquierda.add(new Chunk("Total: ", helveticaBold));
                    headerIzquierda
                            .add(new Chunk(currencyFormatter.format(Integer.parseInt(venta.get("totalVenta")))));
                    PdfPCell footerCell = new PdfPCell(headerIzquierda);
                    footerCell.setBorder(0);
                    footerCell.setColspan(4);
                    footerCell.setHorizontalAlignment(Element.ALIGN_RIGHT);
                    tablaDetalle.addCell(footerCell);
                    //Establesco el tamao  y posicion de la tabla, luego la agrego al documento
                    tablaDetalle.setWidthPercentage(100f);
                    tablaDetalle.setHorizontalAlignment(Element.ALIGN_RIGHT);
                    document.add(tablaDetalle);
                    //Cierro el documento y lo envio con flush.
                    document.close();
                    response.setHeader("Content-Disposition", "attachment;filename=\"reporte.pdf\"");
                    os.flush();
                    os.close();
                } catch (DocumentException de) {
                    throw new IOException(de.getMessage());
                }
                break;
            }
            }
        }
    }

    public String getTableVenta() {
        ResultSet result;
        List<String[]> lista = new ArrayList<>();
        try {
            daoModelVenta = new ModelVenta();
            result = daoModelVenta.ListAll();
            while (result.next()) {
                String[] arreglo = new String[6];
                arreglo[0] = result.getString("numeroVenta").trim();
                arreglo[2] = result.getString("documentoCliente").trim();
                arreglo[3] = result.getString("nombreCliente").trim();
                arreglo[1] = result.getString("fechaVenta").trim();
                arreglo[4] = result.getString("totalVenta").trim();
                arreglo[5] = "<a class=\"btn-sm btn-success btn-block\" href=\"javascript:void(0)\" onclick=\"venta.consultar("
                        + result.getString("idMovimiento") + ")\">"
                        + "<span class=\"glyphicon glyphicon-search\"></span></a>";
                lista.add(arreglo);
            }
            daoModelVenta.Signout();
        } catch (Exception e) {
            System.err.println("Ha Ocurrido un error en el controller venta " + e.toString());
            for (StackTraceElement strings : e.getStackTrace()) {
                System.out.println(strings);
            }
        }
        String salida = new Gson().toJson(lista);
        salida = "{\"data\":" + salida + "}";
        return salida;
    }

    public String Mensaje(boolean entrada, String mensajeSuccess, String mensajeError) {
        Map<String, String> mensaje = new LinkedHashMap<>();
        if (entrada) {
            mensaje.put("mensaje", mensajeSuccess);
            mensaje.put("tipo", "success");

        } else {
            mensaje.put("mensaje", mensajeError);
            mensaje.put("tipo", "error");
        }
        String salida = new Gson().toJson(mensaje);
        return salida;
    }

    private String consultarDetalle(int id) {
        Map<String, Object> lista = new LinkedHashMap<>();
        List<Map> lista2 = new ArrayList<>();
        Map<String, String> resultado = null;
        daoModelVenta = new ModelVenta();
        try {
            ResultSet[] result = daoModelVenta.ConsultarVenta(id);
            while (result[0].next()) {
                resultado = new LinkedHashMap<>();
                resultado.put("idMovimiento", result[0].getString("idMovimiento"));
                resultado.put("fechaVenta", result[0].getString("fechaVenta"));
                resultado.put("totalVenta", result[0].getString("totalVenta"));
                resultado.put("documentoUsuario", result[0].getString("documentoUsuario"));
                resultado.put("numeroVenta", result[0].getString("numeroVenta"));
                resultado.put("nombreCliente", result[0].getString("nombreCliente"));
                resultado.put("documentoCliente", result[0].getString("documentoCliente"));
                lista.put("Venta", resultado);
            }
            while (result[1].next()) {
                resultado = new LinkedHashMap<>();
                resultado.put("idDetalleMovimiento", result[1].getString("idDetalleMovimiento"));
                resultado.put("idArticulo", result[1].getString("idArticulo"));
                resultado.put("descripcionArticulo", result[1].getString("descripcionArticulo"));
                resultado.put("cantidad", result[1].getString("cantidad"));
                resultado.put("descuento", result[1].getString("descuento"));
                resultado.put("totalDetalleMovimiento", result[1].getString("totalDetalleMovimiento"));
                resultado.put("idMovimiento", result[1].getString("idMovimiento"));
                resultado.put("precioArticulo", result[1].getString("precioArticulo"));
                lista2.add(resultado);
            }
            //listas.put("Compra",lista);
            lista.put("Detalle", lista2);
        } catch (Exception e) {
            System.err.println(e);
        }
        daoModelVenta.Signout();
        String salida = new Gson().toJson(lista);
        return salida;
    }

    private String getContador() {
        daoModelVenta = new ModelVenta();
        String numero = daoModelVenta.consultarContador();
        daoModelVenta.Signout();
        Map<String, String> respuesta = new LinkedHashMap<>();
        respuesta.put("numero", numero);
        String salida = new Gson().toJson(respuesta);
        return salida;
    }

    private Map reporte(int id) {
        Map<String, Object> lista = new LinkedHashMap<>();
        List<Map> lista2 = new ArrayList<>();
        Map<String, String> resultado;
        daoModelVenta = new ModelVenta();
        try {
            ResultSet[] result = daoModelVenta.ConsultarVenta(id);
            while (result[0].next()) {
                resultado = new LinkedHashMap<>();
                resultado.put("idMovimiento", result[0].getString("idMovimiento"));
                resultado.put("fechaVenta", result[0].getString("fechaVenta"));
                resultado.put("totalVenta", result[0].getString("totalVenta"));
                resultado.put("documentoUsuario", result[0].getString("documentoUsuario"));
                resultado.put("numeroVenta", result[0].getString("numeroVenta"));
                resultado.put("nombreCliente", result[0].getString("nombreCliente"));
                resultado.put("documentoCliente", result[0].getString("documentoCliente"));
                lista.put("Venta", resultado);
            }
            while (result[1].next()) {
                resultado = new LinkedHashMap<>();
                resultado.put("idDetalleMovimiento", result[1].getString("idDetalleMovimiento"));
                resultado.put("idArticulo", result[1].getString("idArticulo"));
                resultado.put("descripcionArticulo", result[1].getString("descripcionArticulo"));
                resultado.put("cantidad", result[1].getString("cantidad"));
                resultado.put("descuento", result[1].getString("descuento"));
                resultado.put("totalDetalleMovimiento", result[1].getString("totalDetalleMovimiento"));
                resultado.put("idMovimiento", result[1].getString("idMovimiento"));
                resultado.put("precioArticulo", result[1].getString("precioArticulo"));
                lista2.add(resultado);
            }
            lista.put("Detalle", lista2);
        } catch (Exception e) {
        }
        daoModelVenta.Signout();
        return lista;
    }

    // <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>
}