/* 
 * QuoteList.java
 *
 * Created on 12 de agosto de 2004, 11:36 --> fecha de creación del archivo
 */

package com.fenalco.entities;

import java.util.Hashtable;
import java.util.Vector;

import com.fenalco.utilities.database.QueryException;
import com.fenalco.utilities.database.SQLUtilities;

/**
 * Esta clase representa un listado de cotizaciones que puede ser solicitado por
 * un minorista, un proveedor o el administrador del sistema.
 * 
 * @author Néstor Romero León, Mario Linares Vásquez
 */
public class QuoteList
{
	/**
	 * Este <CODE>Hashtable</CODE> contiene una colección de objetos <CODE>
	 * Quote</CODE> que está construida de la siguiente forma:
	 * key:Identificador de la Cotización <CODE>quoteId</CODE> value:Objeto
	 * del tipo <CODE>Quote</CODE>
	 */
	private Vector quotes;

	/**
	 * Constructor que crea el objeto con el listado de cotizaciones de acuerdo
	 * a los parámetros que recibe. Sus parámetros corresponden al identificador
	 * de la empresa que solicita el listado y el rol del usuario.
	 * 
	 * Hace un llamado al método <CODE>loadData(params)</CODE> para realizar
	 * la carga de la cotizaciones desde la base de datos.
	 * 
	 * @param companyId
	 *            Identificador de la empresa
	 * @param roleId
	 *            Identificador del rol del usuario
	 */
	public QuoteList( int companyId, int roleId)
	{
		// TODO: implement
		this.quotes = new Vector();
		this.loadData(companyId, roleId);
	}

	/**
	 * Este método realiza la carga de las cotizaciones desde la base de datos
	 * utilizando el método <CODE>query</CODE> de la clase <CODE>SQLUtilities
	 * </CODE>.
	 * 
	 * Utiliza como parámetros un identificador de la empresa y el rol del
	 * usuario
	 * 
	 * @param companyId
	 *            Identificador de la empresa
	 * @param roleId
	 *            Identificador del rol del usuario
	 * @return Valor booleano que indica si la operación tuvo éxito o no.
	 */
	public boolean loadData( int companyId, int roleId )
	{
		try
		{
			Vector results = new Vector();
			String sql = new String(
					"SELECT DISTINCT cotizacion.coti_id,coti_fecha "
							+ "FROM cotizacion, establecimiento ");

			if( roleId == 2 )
			{
				//Cotizaciones recibidas por un Proveedor
				sql = sql.concat("WHERE cotizacion.empr_id=" + companyId + " ");

			}
			else
				if( roleId == 3 )
				{
					//Cotizaciones enviadas por un MInorista
					sql = sql
							.concat("WHERE cotizacion.esta_id = establecimiento.esta_id AND "
									+ "establecimiento.empr_id="
									+ companyId
									+ " ");

				}

			sql = sql.concat("ORDER BY coti_fecha DESC;");

			//System.out.println("SQL OrderList->"+sql);

			results = SQLUtilities.query(sql);

			for( int i = 0; i < results.size(); i++ )
			{
				Hashtable temp = new Hashtable();
				temp = (Hashtable) results.elementAt(i);
				Integer key = (Integer) temp.get("coti_id");
				//this.quotes.put(key, new Quote(key.intValue()));
                                this.quotes.addElement( new Quote( key.intValue() ) );
			}
		}
		catch (QueryException qe)
		{
			System.out.println(qe.getMessage());
			return false;
		}

		return true;
	}

	/**
	 * Consultor para el atributo quotes.
	 * 
	 * @return Valor del atributo quotes.
	 */
	public Vector getQuotes( )
	{
		return quotes;
	}

	/**
	 * Modificador para el atributo quotes.
	 * 
	 * @param quotes
	 *            Nuevo valor para el atributo quotes.
	 */
	public void setQuotes( Vector quotes )
	{
		this.quotes = quotes;
	}

}