/*
 * ProductScalesView.java
 *
 * Created on 10 de agosto de 2004, 17:58
 */ 

package com.fenalco.servlets.supplier;

import java.io.IOException;
import java.util.Vector;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
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 com.fenalco.entities.ProductList;
import com.fenalco.entities.SupplierList;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;
import com.fenalco.utilities.lists.ProductListViewSupplier;

/**
 *
 * @author  andres
 * @version
 */
public class ProductScalesView extends HttpServlet {
    
    /** Initializes the servlet.
     */
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        
    }
    
    /** Destroys the servlet.
     */
    public void destroy() {
        
    }
    
    /** Hay que cargar la lista de productos que se le están ofreciendo a este
     * minorista, además hay que paginar el listado e incluir el motor de búsqueda
     * @param request servlet request
     * @param response servlet response
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        
        HttpSession session = request.getSession(false);
        String url = "";
        String message = "";
        
	    try
	    {
	        if( session == null || ( User )session.getAttribute( "user" ) == null || ( ( User )session.getAttribute( "user" ) ).getRoleId() != 2 )
	        {
	            url="/logout";
	            message = MessageBuilder.buildMessage(15);
	        }
	        else
	        {
	        
	            
	            // carga la lista de proveedores para enviarla al jsp
	            //SupplierList proveedores = new SupplierList( establecimiento.getId() );
	            //SupplierListViewSysManager prov = new SupplierListViewSysManager( proveedores );
	
	            // captura los criterios de búsqueda provenientes del jsp
	            boolean esNombre = true;
	            String nombre = "";
	            String categoria = "";
	            int orden = 2;
	
	            // criterios de paginación
	            int pagina = 1;
	            int resultadosPagina = 20;
	            int paginas;    // numero total de páginas
	            int inicio = 0;     // numero del primero registro que se va a mostrar
	            int fin = 19;        // numero del último registro que se va a mostrar
	            int total;      // numero total de resultados
	
	
	            try
	            {
	                String temp = request.getParameter( "esnombre" );
	                if( temp == null )
	                {
	                    temp = "1";
	                }
	                
	                if( Integer.parseInt( temp ) == 1 )
	                {
	                    esNombre = true;
	                }
	                else
	                {
	                    esNombre = false;
	                }
	
	                temp = request.getParameter( "nombre" );
	                if( temp == null )
	                {
	                    nombre = "";
	                }
	                else
	                {
	                    nombre = temp;
	                }
	                
	                temp = request.getParameter( "categoria" );
	                if( temp == null )
	                {
	                    categoria = "";
	                }
	                else
	                {
	                    categoria = temp;
	                }
	                temp = request.getParameter( "ordenamiento" );
	                if( temp == null )
	                {
	                    orden = 2;
	                }
	                else
	                {
	                    orden = Integer.parseInt( temp );
	                }
	                temp = request.getParameter( "pagina" );
	                if( temp == null )
	                {
	                    pagina = 1;
	                }
	                else
	                {
	                    pagina = Integer.parseInt( temp );
	                }
	                pagina = ( pagina < 1 ) ? 1 : pagina;
	                temp = request.getParameter( "cantidad" );
	                if( temp == null )
	                {
	                    resultadosPagina = 20;
	                }
	                else
	                {
	                    resultadosPagina = Integer.parseInt( temp );
	                }
	                resultadosPagina = ( resultadosPagina < 1 ) ? 20 : resultadosPagina;
	
	            }
	            catch( Exception e )
	            {
	                System.out.println( "Excepcion en el servlet del catalogo --> " + e );
	            }
	        
	            User user = ( User )session.getAttribute( "user" );
	            //int emprId = user.getCompanyId();
	            int proveedor = user.getCompanyId();
	            SupplierList proveedores = new SupplierList();
	            
	            
	            ProductList lista = new ProductList();
	            
	            // hago la búsqueda y obtengo solo los ids de los productos que cumplen
	            // los criterios seleccionados
	            Vector ids = lista.loadIds( esNombre, nombre, proveedor, categoria, orden, proveedores, true );
	            
	            // aqui se efectua la paginación
	            total = ids.size();
	            paginas = ( int )Math.ceil( ( double )total / ( double )resultadosPagina );
	            if( pagina > paginas )
	            {
	                pagina = paginas;
	            }
	            inicio = ( pagina - 1 ) * resultadosPagina;
	            fin = pagina * resultadosPagina;
	            inicio = ( inicio < 0 ) ? 0 : inicio;
	            if( fin > total )
	            {
	                fin = total;
	            }
	            for( int i = inicio; i < fin; i++ )
	            {
	                lista.addElement( ids.elementAt( i ) );
	            }
	            
	            ProductListViewSupplier vistaCatalogo;
	            
	            vistaCatalogo = new ProductListViewSupplier( lista );
	            
	            message = ( String )request.getAttribute( "message" );
	
	            //request.setAttribute( "proveedores", prov );
	            request.setAttribute( "productos", vistaCatalogo );
	            
	            // información de los criterios de búsqueda
	            request.setAttribute( "esNombre", Boolean.valueOf( esNombre ) );
	            request.setAttribute( "nombre", nombre );
	            //request.setAttribute( "proveedor", Integer.valueOf( proveedor + "" ) );
	            request.setAttribute( "categoria", categoria );
	            request.setAttribute( "ordenamiento", Integer.valueOf( orden + "" ) );
	            
	            /// información de la paginacion
	            inicio++;  // para no arrancar desde 0
	            inicio = ( fin == 0 ) ? 0 : inicio;
	            request.setAttribute( "inicio", inicio + "" );
	            request.setAttribute( "fin", fin + "");
	            request.setAttribute( "total", total + "" );
	            request.setAttribute( "pagina", pagina + "" );
	            request.setAttribute( "paginas", paginas + "" );
	            request.setAttribute( "cantidad", resultadosPagina + "" );
	            
	            request.setAttribute( "message", message );
	
	
	            url = "/proveedor/productos.jsp";
	        }
	    }
	    catch( Exception e )
	    {
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }

        request.setAttribute("communityId",new Integer(request.getParameter("communityId")));
        request.setAttribute( "message", message );
        RequestDispatcher rd = getServletContext().getRequestDispatcher( url );
        rd.forward(request, response);
    }
    
    /** Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     */
    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
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    /** Returns a short description of the servlet.
     */
    public String getServletInfo() {
        return "Short description";
    }
    
}
