/* 
 * SupplierProductList.java
 *
 * Created on 11 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 el conjunto de productos ofrecidos por un proveedor en
 * el sistema, constituye la forma de ensamblar el catálogo de productos al
 * permitir su creación por criterios como proveedor, categoría de producto,
 * campo de búsqueda y tipo de ordenamiento.
 * 
 * Ordenamiento 0: Alfabético Ordenamiento 1: Por proveedor Ordenamiento 2: Por
 * Precio
 * 
 * @author Néstor Romero León
 */
public class SupplierProductList
{
	/**
	 * Este <CODE>Hashtable</CODE> agrupa el conjunto de productos que un
	 * proveedor ofrece en el sistema, es un reflejo de los registros de la
	 * tabla proveedor_producto para un proveedor específico.
	 */
	private Hashtable supplierProducts;

	/**
	 * Constructor para generar un listado de los productos ofrecidos por un
	 * proveedor para el uso del proveedor.
	 * 
	 * Este método llama al método <CODE>loadData</CODE> que recibe los mismos
	 * parámetros.
	 * 
	 * Los parámetros reciben como parámetro por defecto (-1) para listar todos
	 * las entradas para una selección específica, por ejemplo todas las
	 * categorías.
	 * 
	 * @param supplierId
	 *            Identificador del proveedor
	 */
	public SupplierProductList( int supplierId)
	{
		this.supplierProducts = new Hashtable();
		this.loadData(supplierId);
	}

	/**
	 * Este constructor genera un listado de los productos que un proveedor
	 * tiene asociados a una comunidad determinada, para ello recibe como
	 * parámetros los identificadores de proveedor y de comunidad.
	 * 
	 * 
	 * Para la consulta de la base de datos hace un llamado al método <CODE>
	 * loadData</CODE> que recibe los mismos parámetros.
	 * 
	 * @param supplierId
	 *            Identificador del proveedor
	 * @param communityId
	 *            Identificador de la comunidad
	 */
	public SupplierProductList( int supplierId, int communityId)
	{
		this.supplierProducts = new Hashtable();
		this.loadData(supplierId, communityId);
	}

	/**
	 * Constructor para generar un listado de los productos ofrecidos por un
	 * proveedor para el uso del minorista.
	 * 
	 * Este método llama al método <CODE>loadData</CODE> que recibe los mismos
	 * parámetros.
	 * 
	 * Los parámetros reciben como parámetro por defecto (-1)para listar todos
	 * las entradas para una selección específica, por ejemplo todos los
	 * proveedores, todas las categorías, etc.
	 * 
	 * @param shopKeeperId
	 *            Identificador del minorista
	 * @param supplierId
	 *            Identificador del proveedor
	 * @param category
	 *            Categoría del producto
	 * @param sortCriteria
	 *            Criterio de ordenamiento
	 * @param searchField
	 *            Campo de búsqueda
	 */
	public SupplierProductList( int shopKeeperId, int supplierId, int category,
			int sortCriteria, String searchField)
	{
		this.supplierProducts = new Hashtable();
		this.loadData(shopKeeperId, supplierId, category, sortCriteria,
				searchField);
	}

	/**
	 * Este método utiliza los parámetros recibidos para cargar un listado de
	 * los productos para uso del proveedor, llama al método <CODE>query
	 * </CODE> de la clase <CODE>SQLUtilities</CODE>.
	 * 
	 * @param supplierId
	 *            Identificador del proveedor
	 * @return Valor booleano que indica la operación tuvo éxito o no.
	 */
	public boolean loadData( int supplierId )
	{
		boolean response = true;
		Vector result = new Vector();
		Hashtable aux = new Hashtable();
		String sql = "SELECT prod_prov_id " + "FROM producto_proveedor "
				+ "WHERE empr_id=" + supplierId + ";";

		try
		{
			result = SQLUtilities.query(sql);
			for( int i = 0; i < result.size(); i++ )
			{
				aux = (Hashtable) result.elementAt(i);
				this.supplierProducts.put(aux.get("prod_prov_id"),
						new SupplierProduct(((Integer) aux.get("prod_prov_id"))
								.intValue()));
			}

		}
		catch (QueryException qe)
		{
			response = false;
		}

		return response;
	}

	/**
	 * Este método consulta la base de datos para cargar un listado de los
	 * productos que un proveedor tiene asociados a una comunidad determinada.
	 * 
	 * Hace uso del método <CODE>query</CODE> de la clase <CODE>SQLUtilities
	 * </CODE>.
	 * 
	 * @param supplierId
	 *            Identificador del proveedor
	 * @param communityId
	 *            Identificador de la comunidad
	 * @return Valor booleano que indica si la operación tuvo éxito o no.
	 */
	public boolean loadData( int supplierId, int communityId )
	{
		/*
		 * boolean response = true; Vector result = new Vector(); Hashtable
		 * supplierProducts = new Hashtable(); String sql = "SELECT " + "FROM " +
		 * "WHERE";
		 * 
		 * try{ result = SQLUtilities.query(sql); }catch(QueryException qe){
		 * //System.out.println("Query Error: "+qe); response = false; }
		 * 
		 * return response;
		 */
		return false;
	}

	/**
	 * Este método utiliza los parámetros recibidos para cargar un listado de
	 * los productos para uso del minorista, llama al método <CODE>query
	 * </CODE> de la clase <CODE>SQLUtilities</CODE>.
	 * 
	 * Este método debe tener en cuenta si el minorista puede ver o no al
	 * proveedor y si el minorista es cliente exclusivo de algún proveedor.
	 * 
	 * Un valor de -1 en el identificador del minorista(shopKeeperId) indica que
	 * el listado será utilizado por un proveedor como catálogo de sus
	 * productos.
	 * 
	 * @param shopKeeperId
	 *            Identificador del minorista
	 * @param supplierId
	 *            Identificador del proveedor
	 * @param category
	 *            Categoría de producto
	 * @param sortCriteria
	 *            Criterio de ordenamiento
	 * @param searchField
	 *            Campo de búsqueda
	 * @return Valor booleano que indica si la operación tuvo éxito o no.
	 */
	public boolean loadData( int shopKeeperId, int supplierId, int category,
			int sortCriteria, String searchField )
	{
		// TODO: implementar de acuerdo a los filtros que lleve el catálogo de
		// productos
		return false;
	}

	/**
	 * Consultor para el atributo supplierProducts.
	 * 
	 * @return Valor del atributo supplierProducts.
	 */
	public Hashtable getSupplierProducts( )
	{
		return supplierProducts;
	}

	/**
	 * Modificador para el atributo supplierProducts.
	 * 
	 * @param supplierProducts
	 *            Nuevo valor para el atributo supplierProducts.
	 */
	public void setSupplierProducts( Hashtable supplierProducts )
	{
		this.supplierProducts = supplierProducts;
	}

}