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

package com.fenalco.servlets.shopkeeper;

import java.io.IOException;

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.Log;
import com.fenalco.entities.Quote;
import com.fenalco.entities.User;
import com.fenalco.utilities.MessageBuilder;
import com.fenalco.utilities.database.Transaction;
import com.fenalco.utilities.lists.QuoteViewShopKeeper;

/**
 * Este servlet procesa las solitudes de operaciones generadas sobre la lista de
 * cotizaciones del minorista en la página miscotizaciones.jsp. Estas
 * operaciones son ver detalle y eliminar.
 * 
 * @author Mario Linares Vásquez
 *  
 */
public class QuoteHandler extends HttpServlet
{

	/**
	 * Inicializa el servlet.
	 * 
	 * @param config
	 * @throws ServletException
	 */
	public void init( ServletConfig config ) throws ServletException
	{
		super.init(config);

	}

	/**
	 * Destructor de servlet.
	 */
	public void destroy( )
	{

	}

	/**
	 * Procesa las solicitudes de los métodos HTTP <code>GET</code> y
	 * <code>POST</code>. Este servlet de acuerdo a la operación seleccionada
	 * por el usuario en la página miscotizaciones.jsp procesa la solicitiud. El
	 * tipo de operación se toma del parámetro <CODE>operationType</CODE> del
	 * <CODE>request</CODE> y de acuerdo a este se realiza lo siguiente -
	 * <CODE>operationType</CODE>= view Crea una instancia de la clase <CODE>
	 * Quote</CODE> con el parámetro <CODE>id</CODE> del <CODE>request
	 * </CODE>, se adiciona esta al <CODE>response</CODE> como atributo con
	 * el nombre <CODE>view</CODE> y se redireciona el fjujo a la página
	 * vercotizacion.jsp -<CODE>operationType</CODE>= delete Crea una
	 * instancia de la clase <CODE>Quote</CODE> con el parámetro <CODE>id
	 * </CODE> se invoca la función <CODE>delete</CODE> y luego se
	 * redirecciona el flujo al servlet miscotizaciones
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void processRequest( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{

		String url = "/minorista/vercotizacion.jsp";
		String message = "";
        HttpSession session = request.getSession( false );

	    try
	    {
	        if( session != null && ( User )session.getAttribute( "user" ) != null && ( ( User )session.getAttribute( "user" ) ).getRoleId() == 3 )
			{
	
				String operation = request.getParameter("operationType");
	
				int shopKeeperId = ((User) request.getSession()
						.getAttribute("user")).getCompanyId();
	
				if( operation.equals("view") )
				{
					int id = Integer.parseInt(request.getParameter("quoteId"));
					Quote quote = new Quote(id);
					QuoteViewShopKeeper view = new QuoteViewShopKeeper(quote);
					request.setAttribute("view", view);
	
				}
				else if( operation.equals("delete") )
				{
					String[] items = request.getParameterValues("item");
					if( items != null )
					{
						Transaction transaction = new Transaction();
						for( int i = 0; i < items.length; i++ )
						{
							Quote tempQuote = new Quote(Integer
									.parseInt(items[i]));
							tempQuote.delete(transaction);
							
							// por cada cotización que se elimine guardo el registro en el Log
	                        try
	                        {
	                            Transaction t = new Transaction( );
	                            Log l = new Log( );
								User user = ( User )session.getAttribute( "user" );
	                            String userId = user.getLogin();
	                            String numberId = user.getIdentificationNumber();
	                            String externalUser = "";
	                            User callcenter = ( User )session.getAttribute( "callcenter" );
	                            String description = "Eliminación de la cotización al proveedor " + tempQuote.getSupplierName();
	                            if( callcenter != null )
	                            {
	                                externalUser = callcenter.getLogin();
	                            }
								l.saveData(userId, numberId, 11, description, externalUser, t );
	                            t.execute();
	                        }
	                        catch( Exception ex )
	                        {
	                            System.out.println( "Error guardando el Log." );
	                        }
	
						}
						transaction.execute();
						
						
					}
					url = "/minorista/miscotizaciones";
				}
	
			}
			else
			{
				message = MessageBuilder.buildMessage(15);
				url = "/index.jsp";
			}
	    }
	    catch( Exception e )
	    {
	        url="/logout";
	        message = MessageBuilder.buildMessage(15);
	    }
		request.setAttribute("message", message);
		RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(url);
		dispatcher.forward(request, response);

	}

	/**
	 * Procesa el método HTTP <code>GET</code>.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void doGet( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Procesa el método HTTP <code>POST</code>.
	 * 
	 * @param request
	 *            servlet request
	 * @param response
	 *            servlet response
	 * @throws ServletException
	 * @throws IOException
	 */
	protected void doPost( HttpServletRequest request,
			HttpServletResponse response ) throws ServletException, IOException
	{
		processRequest(request, response);
	}

	/**
	 * Retorna una breve descripción de el servlet.
	 * 
	 * @return
	 */
	public String getServletInfo( )
	{
		return "Short description";
	}

}