/*
 * ShoppingListProduct.java
 *
 * Created on 20 de agosto de 2004, 03:47 PM
 */

package com.fenalco.entities;

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

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

/**
 * 
 * @author Juan Ernesto Peña
 */
public class ShoppingListProduct extends AbstractProduct
{

	/** Identificador de la lista de compras */
	private int shoppingListId;

	/** Constructor por defecto de la clase */
	public ShoppingListProduct( )
	{
	}

	/**
	 * Constructor de la clase
	 * 
	 * @param tableId
	 *            int que representa el id de la tabla producto_lista_compra
	 */
	public ShoppingListProduct( int tableId)
	{
		this.loadData(tableId);
	}

	/**
	 * Carga los datos del producto de la base de datos a partir del id del
	 * producto en la tabla producto_lista_compra
	 * 
	 * @param id
	 *            identificador del producto en la tabla necesaria
	 * @return booleano que indica si se pudo cargar el producto o no
	 */
	public boolean loadData( int id )
	{

		Vector result = new Vector();
		String sql = "SELECT producto_proveedor.prod_prov_id, producto_proveedor.prod_prov_codigo, "
				+ "producto_proveedor.prod_prov_descripcion_corta, prod_list_comp_cantidad, empresa.empr_id, "
				+ "empr_nombre_comercial, list_comp_id "
				+ "FROM producto_lista_compra, producto_proveedor, empresa "
				+ "WHERE prod_list_comp_id="
				+ id
				+ " "
				+ "AND producto_lista_compra.prod_prov_id=producto_proveedor.prod_prov_id "
				+ "AND producto_proveedor.empr_id=empresa.empr_id;";

		try
		{
			result = SQLUtilities.query(sql);

			Hashtable parameter = (Hashtable) result.elementAt(0);
			//            System.out.println(parameter);
			this.setTableId(id);
			this.setSupplierProductId(((Integer) parameter.get("prod_prov_id"))
					.intValue());
			this.setCode((String) parameter.get("prod_prov_codigo"));
			this.setName((String) parameter.get("prod_prov_descripcion_corta"));
			this.setQuantity(((Integer) parameter
					.get("prod_list_comp_cantidad")).intValue());
			this.setSupplierId(((Integer) parameter.get("empr_id")).intValue());
			this.setSupplierName((String) parameter
					.get("empr_nombre_comercial"));
			this.setShoppingListId(((Integer) parameter.get("list_comp_id"))
					.intValue());

		}
		catch (QueryException qe)
		{
			System.out.println("Excepcion en ShoppingListProduct-->"
					+ qe.getMessage());
			return false;
		}

		return true;

	}

	/**
	 * almacena los datos del producto en la base de datos construyendo la
	 * sentencia sql necesaria y adicionandola a la transacción.
	 * 
	 * @param transaction
	 *            la transacción que se está ejecutando
	 * @return boolenao que indica si la operación se realizó con éxito
	 */
	public boolean saveData( Transaction transaction )
	{

		tableId = this.hashCode();

		String sql = "INSERT INTO producto_lista_compra VALUES(" + tableId
				+ "," + this.getSupplierProductId() + ","
				+ this.getShoppingListId() + "," + this.getQuantity() + ");";

		transaction.addSql(sql);

		return true;
	}

	/**
	 * actualiza el producto en la base de datos construyendo la instrucción sql
	 * y pasandola a la transacción
	 * 
	 * @param transaction
	 *            la transacción que se está ejecutando
	 * @return booleano que indica si la operación se pudo ejecutar o no
	 */
	public boolean update( Transaction transaction )
	{
		String sql = "UPDATE producto_lista_compra SET" + ",prod_prov_id="
				+ this.getSupplierProductId() + ",list_comp_id="
				+ this.getShoppingListId() + ",prod_list_comp_cantidad"
				+ this.getQuantity() + " " + "WHERE prod_list_comp_id="
				+ this.getTableId() + ";";

		transaction.addSql(sql);

		return true;
	}

	/**
	 * elimina el producto de la base de datos creando la instrucción sql y la
	 * pasa a la transacción
	 * 
	 * @param transaction
	 *            la transacción que se está ejecutando
	 * @return booleano que indica si se pudo ejecutar la operación o no
	 */
	public boolean delete( Transaction transaction )
	{
		String sql = "DELETE FROM producto_lista_compra WHERE prod_list_comp_id="
				+ this.getTableId() + ";";
		transaction.addSql(sql);

		return true;

	}

	/**
	 * Getter for property quoteId.
	 * 
	 * @return Value of property quoteId.
	 */
	public int getShoppingListId( )
	{
		return shoppingListId;
	}

	/**
	 * Setter for property quoteId.
	 * 
	 * @param quoteId
	 *            New value of property quoteId.
	 */
	public void setShoppingListId( int shoppingListId )
	{
		this.shoppingListId = shoppingListId;
	}

	public int hashCode( )
	{
		return Math.abs(shoppingListId + supplierProductId);
	}
}