/*
 * SupplierStarter.java
 *
 * Created on 10 de agosto de 2004, 18:44
 */

package com.fenalco.servlets.supplier;

import java.io.IOException;
import java.sql.Date;
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.OrderList;
import com.fenalco.entities.ShopKeeperList;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;
import com.fenalco.entities.ReportDataAccess;
import com.fenalco.utilities.lists.OrderListViewSupplier;
import com.fenalco.utilities.lists.TopReportListView;

/**
 * Este servlet carga la información que se necesita para la página principal de
 * los proveedores, la cual se construirá con una lista de los últimos pedidos
 * recibidos.
 * 
 * Esta información es enviada como respuesta a la página proveedor.jsp
 * 
 * @author andres
 */
public class SupplierStarter extends HttpServlet
{

	/**
	 * Inicializa el servlet.
	 * 
	 * @param config
	 *            Parámetro de configuración
	 * @throws ServletException
	 *             Excepción de fallo en operación de inicialización
	 */
	public void init( ServletConfig config ) throws ServletException
	{
		super.init(config);

	}

	/**
	 * Destruye el servlet.
	 */
	public void destroy( )
	{

	}

	/**
	 * Procesa las peticiones para los métodos HTTP <code>GET</code> y
	 * <code>POST</code>.
	 * 
	 * @param request
	 *            Petición al servlet
	 * @param response
	 *            Respuesta del servlet
	 * @throws ServletException
	 *             Excepción de fallo en la operación de procesamiento de
	 *             peticiones
	 * @throws IOException
	 *             Excepción de fallo en la operación de escritura con el flujo
	 *             <CODE>PrintWriter</CODE> de response.
	 */
	protected void processRequest( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		HttpSession session = request.getSession(false);
		RequestDispatcher dispatcher;
		String url;
		String message = "";

	    try
	    {
	        if( session == null || ( User )session.getAttribute( "user" ) == null || ( ( User )session.getAttribute( "user" ) ).getRoleId() != 2 )
			{
				url = "/logout";
                                //message = "Sesión no iniciada";
				message = MessageBuilder.buildMessage(15);
			}
			else
			{
				User supplier = (User) session.getAttribute("user");
                                
                                OrderList orderList = loadLatestOrderList( supplier.getCompanyId() , 5 );
                                OrderListViewSupplier view = new OrderListViewSupplier(orderList);
                                
                                Vector productList = ReportDataAccess.topReportBuilder( supplier.getCompanyId(),2,0,5,1,new Date(0), new Date(0) );
                                Vector shopKeeperList = ReportDataAccess.topReportBuilder( supplier.getCompanyId(),2,0,5,2,new Date(0), new Date(0) );
                                int newCompanies = 0;
                                
                                ShopKeeperList skl = new ShopKeeperList();
                                java.util.Date end = new java.util.Date();
                                java.util.Date start = new java.util.Date();
                                //Últimos 7 días
                                start.setDate( end.getDate() - 7 );

                                Date startDate = new Date( start.getTime() );
                                Date endDate = new Date( end.getTime() );
                                skl.nonClientList(supplier.getCompanyId(), startDate, endDate, 1 );
                                newCompanies = skl.getShopKeepers().size();
                                
                                
				url = "/proveedor/proveedor.jsp";
	
				if( view == null )
				{
					//Fallo en la creación del listado de pedidos
					//message = "Fallo en la creación del listado de pedidos";
					message = MessageBuilder.buildMessage(9);
	
				}
				else
				{
					//Todo OK
					//message = "La operación de carga del listado de pedidos";
					message = MessageBuilder.buildMessage(3);
                                        
                                        request.setAttribute( "view", view );
                                        request.setAttribute( "productList" , new TopReportListView (productList) );
                                        request.setAttribute( "shopKeeperList", new TopReportListView( shopKeeperList ) ); 
                                        request.setAttribute( "newCompanies", new Integer(newCompanies) );
                                        request.setAttribute( "userName", supplier.getFirstName() +" "+ supplier.getLastName() );
                                        request.setAttribute( "userCompany" , supplier.getCompanyName() );
	
				}
			}
	    }
	    catch( Exception e )
	    {
                e.printStackTrace();
                url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }

		request.setAttribute("message", message);
		dispatcher = getServletContext().getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

	/**
	 * Carga una lista de los últimos pedidos recibidos por el proveedor con los
	 * siguientes parámetros:
	 *  - empresa que solicita: identificador del proveedor - empresa objetivo:
	 * todas - rol: identificador del rol proveedor - fechaInicio: -1 -
	 * fechaFin: -1
	 * 
	 * Esta combinación solicita un listado de pedidos recibidos por el
	 * proveedor de parte de todos los minoristas del sistema, para realizar
	 * esta operación se crea un objeto OrderList con el constructor
	 * parametrizado y luego se llama al método latestOrderList con el parámetro
	 * asignado en la base de datos para la cardinalidad del listado.
	 * 
	 * @param supplierId
	 *            Identificador del proveedor
	 * @return OrderList con el listado de los últimos pedidos recibidos.
	 */
	protected OrderList loadLatestOrderList( int supplierId, int numberOfOrders )
	{
		OrderList orderList = new OrderList(supplierId, -1, "Proveedor", new Date(0), new Date(0), 2, false);
		orderList.latestOrderList( numberOfOrders );
		return orderList;
	}

	/**
	 * Maneja el método HTTP <code>GET</code>.
	 * 
	 * @param request
	 *            Petición al servlet
	 * @param response
	 *            Respuesta del servlet
	 * @throws ServletException
	 *             Excepción de fallo en la operación de procesamiento de
	 *             peticiones
	 * @throws IOException
	 *             Excepción de fallo en la operación de escritura con el flujo
	 *             <CODE>PrintWriter</CODE> de response.
	 */
	protected void doGet( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Maneja el método HTTP <code>POST</code>.
	 * 
	 * @param request
	 *            Petición al servlet
	 * @param response
	 *            Respuesta del servlet
	 * @throws ServletException
	 *             Excepción de fallo en la operación de procesamiento de
	 *             peticiones
	 * @throws IOException
	 *             Excepción de fallo en la operación de escritura con el flujo
	 *             <CODE>PrintWriter</CODE> de response.
	 */
	protected void doPost( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Información general del servlet.
	 * 
	 * @return Retorna una descripción general del servlet.
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}