/* 
 * StoreList.java
 *
 * Falta codificar el listado para el caso en el que un proveedor desea 
 * agregar establecimientos a una comunidad.
 *
 * Created on 11 de agosto de 2004, 11:36 --> fecha de creación del archivo
 */

package com.fenalco.entities;

import java.util.Enumeration;
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 establecimientos que pertenecen a un
 * minorista, o que pertenecen a una comunidad segùn los paràmetros utilizados
 * para su comstrucciòn
 * 
 * @author Néstor Romero León
 */
public class StoreList
{
	/**
	 * Este <CODE>Hashtable</CODE> contiene un conjunto de establecimentos que
	 * pertenecen a un minorista, está organizado de la siguiente forma:
	 * key:Identificador del establecimiento <CODE>storeId</CODE> value:Objeto
	 * del tipo <CODE>Store</CODE>
	 */
	private Vector stores;

	public StoreList( )
	{
		this.stores = new Vector(); 
	}

	/**
	 * Constructor que recibe como parámetro el identificador del proveedor,
	 * llama al método <CODE>loadData</CODE> para cargar los establecimientos
	 * del minorista en el objeto.
	 * 
	 * @param shopKeeperId
	 *            Identificador del minorista
	 */
	public StoreList( int shopKeeperId)
	{
		// TODO: implement
		this.stores = new Vector();
		this.loadData(shopKeeperId);
	}

	/**
	 * Este método carga los establecimientos del minorista desde la base de
	 * datos haciendo uso del identificador del minorista y del método <CODE>
	 * query</CODE> de la clase <CODE>SQLUtilities</CODE>.
	 * 
	 * @param shopKeeperId
	 *            Identificador del minorista
	 * @return Valor booleano que indica si la operación tuvo éxito o no.
	 */
	public boolean loadData( int shopKeeperId )
	{
		// TODO: implement
		try
		{
			Vector results = new Vector();
                        
			results = SQLUtilities.query("SELECT esta_id " +
                                                     "FROM establecimiento " +
                                                     "WHERE empr_id="+ shopKeeperId + 
                                                     " ORDER BY empr_id;");
                        
			
                        for( int i = 0; i < results.size(); i++ )
			{
				Hashtable temp = new Hashtable();
				temp = (Hashtable) results.elementAt(i);
				Integer key = (Integer) temp.get("esta_id");
				//this.stores.put(key, new Store(key.intValue()));
                                this.stores.addElement( new Store( key.intValue()));
			}
		}
		catch (QueryException qe)
		{
			System.out.println(qe.getMessage());
			return false;
		}
                catch (Exception e){
                    e.printStackTrace();
                    return false;
                }

		return true;
	}

	/**
	 * Consultor para el atributo stores.
	 * 
	 * @return Valor del parámetro stores.
	 */
	public Vector getStores( )
	{
		return this.stores;
	}

	/**
	 * Valor para el parámetro stores.
	 * 
	 * @param stores
	 *            Nuevo valor para el parámetro stores.
	 */
	public void setStores( Vector stores )
	{
		this.stores = stores;
	}

	public boolean getNonCommunityStores( int shopKeeperId, int communityId )
	{
		Vector result = new Vector();
		Hashtable storeData = new Hashtable();
		boolean response = true;

		Community community = new Community(communityId);

		String sql = new String(
				"SELECT establecimiento.esta_id,establecimiento.empr_id "
						+ "FROM establecimiento "
						+ "WHERE establecimiento.esta_id NOT IN "
						+ "(SELECT comunidad_establecimiento.esta_id "
						+ "FROM comunidad_establecimiento,comunidad "
						+ "WHERE comunidad.comu_id=comunidad_establecimiento.comu_id AND "
						+ "comunidad.empr_id=" + community.getSupplierId()
						+ ") AND " + "establecimiento.empr_id IN "
						+ "(SELECT minorista_proveedor.empr_id "
						+ "FROM minorista_proveedor " + "WHERE pro_empr_id ="
						+ community.getSupplierId() + ") ");

		if( shopKeeperId != -1 )
		{
			sql = sql.concat("AND establecimiento.empr_id=" + shopKeeperId
					+ " ");
		}

		sql = sql.concat("ORDER BY establecimiento.esta_nombre;");

		//       System.out.println(sql);
		try
		{
			result = SQLUtilities.query(sql);

			for( int i = 0; i < result.size(); i++ )
			{
				storeData = (Hashtable) result.elementAt(i);
				Integer key = (Integer) storeData.get("esta_id");
				//this.stores.put(key, new Store(key.intValue()));
                                this.stores.addElement( new Store( key.intValue() ));
			}

		}
		catch (QueryException qe)
		{
			//System.out.println("Query Error: "+qe);
			response = false;
		}

		return response;
	}

        public boolean getNonCommunityStores( int shopKeeperId, String storeName, int communityId )
	{
		Vector result = new Vector();
		Hashtable storeData = new Hashtable();
		boolean response = true;

		Community community = new Community(communityId);

		String sql = new String(
				"SELECT establecimiento.esta_id,establecimiento.empr_id "
						+ "FROM establecimiento "
						+ "WHERE establecimiento.esta_id NOT IN "
						+ "(SELECT comunidad_establecimiento.esta_id "
						+ "FROM comunidad_establecimiento,comunidad "
						+ "WHERE comunidad.comu_id=comunidad_establecimiento.comu_id AND "
						+ "comunidad.empr_id=" + community.getSupplierId()
						+ ") AND " + "establecimiento.empr_id IN "
						+ "(SELECT minorista_proveedor.empr_id "
						+ "FROM minorista_proveedor " + "WHERE pro_empr_id ="
						+ community.getSupplierId() + ") AND " +
                                                " establecimiento.esta_nombre LIKE \'%" + storeName + "%\' ");

		if( shopKeeperId != -1 )
		{
			sql = sql.concat("AND establecimiento.empr_id=" + shopKeeperId	+ " ");
		}

		sql = sql.concat("ORDER BY establecimiento.esta_nombre;");

		       //System.out.println(sql);
		try
		{
			result = SQLUtilities.query(sql);

			for( int i = 0; i < result.size(); i++ )
			{
				storeData = (Hashtable) result.elementAt(i);
				Integer key = (Integer) storeData.get("esta_id");
				//this.stores.put(key, new Store(key.intValue()));
                                this.stores.addElement( new Store( key.intValue() ));
			}

		}
		catch (QueryException qe)
		{
			System.out.println("Query Error: "+qe);
			response = false;
		}

		return response;
	}
        
	public boolean getCommunityStores( int shopKeeperId, int communityId )
	{
		Vector result = new Vector();
		Hashtable storeData = new Hashtable();
		boolean response = true;

		String sql = new String(
				"SELECT establecimiento.esta_id "
						+ "FROM comunidad_establecimiento,establecimiento "
						+ "WHERE comunidad_establecimiento.esta_id=establecimiento.esta_id AND "
						+ "comunidad_establecimiento.comu_id=" + communityId
						+ " ");

		if( shopKeeperId != -1 )
		{
			String sqlShopKeeper = "AND establecimiento.empr_id="
					+ shopKeeperId + " ";
			sql = sql.concat(sqlShopKeeper);
		}

		String sqlSort = "ORDER BY establecimiento.empr_id;";
		sql = sql.concat(sqlSort);

		try
		{
			result = SQLUtilities.query(sql);

			for( int i = 0; i < result.size(); i++ )
			{
				storeData = (Hashtable) result.elementAt(i);
				Integer key = (Integer) storeData.get("esta_id");
				//this.stores.put(key, new Store(key.intValue()));
                                this.stores.addElement( new Store( key.intValue() ));
			}

		}
		catch (QueryException qe)
		{
			//System.out.println("Query Error: "+qe);
			response = false;
		}

		return response;
	}

        public boolean getCommunityStores( int shopKeeperId, String storeName, int communityId )
	{
		Vector result = new Vector();
		Hashtable storeData = new Hashtable();
		boolean response = true;

		String sql = new String(
				"SELECT establecimiento.esta_id "
						+ "FROM comunidad_establecimiento,establecimiento "
						+ "WHERE comunidad_establecimiento.esta_id=establecimiento.esta_id AND "
						+ "comunidad_establecimiento.comu_id=" + communityId
						+ " AND establecimiento.esta_nombre LIKE \'%" + storeName + "%\' ");

		if( shopKeeperId != -1 )
		{
			String sqlShopKeeper = "AND establecimiento.empr_id="
					+ shopKeeperId + " ";
			sql = sql.concat(sqlShopKeeper);
		}

		String sqlSort = "ORDER BY establecimiento.empr_id;";
		sql = sql.concat(sqlSort);

                //System.out.println( sql );
                
		try
		{
			result = SQLUtilities.query(sql);

			for( int i = 0; i < result.size(); i++ )
			{
				storeData = (Hashtable) result.elementAt(i);
				Integer key = (Integer) storeData.get("esta_id");
				//this.stores.put(key, new Store(key.intValue()));
                                this.stores.addElement( new Store( key.intValue() ));
			}

		}
		catch (QueryException qe)
		{
			System.out.println("Query Error: "+qe);
			response = false;
		}

		return response;
	}
        
	

}