/*
 * Created on 30/08/2004
 *
 */
package com.fenalco.entities;

import java.sql.Date;
import java.util.Hashtable;
import java.util.Vector;

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

//import com.fenalco.utilities.database.Transaction;

/**
 * @author Andrés
 * 
 * Esta clase representa un producto de la base de datos.
 */
public class SupplierProduct
{
	/**
	 * Identificador de la tabla
	 */
	private int id;

	/**
	 * c{odigo de barras del producto
	 */
	private String code;//

	/**
	 * identificador del proveedor al que está asociado este producto
	 */
	private String supplierGLN;//

	/**
	 * Identificador de la categoría a la cual pertenece el producto
	 */
	private int category;//

	/**
	 * Nombre de la categoría a la cual pertenece el producto
	 */
	private String categoryName;//

	/**
	 * Código interno que el proveedor utiliza para el producto TODO: este campo
	 * puede no ir
	 */
	private String codeSupplier;//

	/**
	 * descripción larga del producto (máximo 40 caracteres)
	 */
	private String longDescription;//

	/**
	 * Descripción corta del producto (máximo 18 caracteres)
	 */
	private String shortDescription;//

	/**
	 * Color del producto
	 */
	private String color;//

	/**
	 * talla del producto
	 */
	private String size;

	/**
	 * Marca del producto
	 */
	private String brand;//

	/**
	 * Número del registro sanitario del producto
	 */
	private String sanitaryRegistry;//

	/**
	 * forma farmacéutica del producto. Ej: Píldora, Pastilla, Jarabe, etc
	 */
	private String pharmaceuticalForm;

	/**
	 * Estilo
	 */
	private String style;

	/**
	 * Es el nombre del objeto que se esta codificando. Ej: Jabón, Detergente,
	 * Crema Dental, Pantalón, Teléfono etc
	 */
	private String functionalName;//

	/**
	 * Tipo de tela del articulo, sabor o fragancia
	 */
	private String variant;

	/**
	 * Nombre del fabricante
	 */
	private String manufacturerName;//

	/**
	 * Principio activo del producto
	 */
	private String activePrinciple;//

	/**
	 * identifica si es unidad de consumo o no
	 */
	private boolean consumerUnit;//

	/**
	 * identifica si es unidad de despacho o no
	 */
	private boolean despatchUnit;//

	/**
	 * indica si es unidad de comercio o no
	 */
	private boolean invoiceUnit;//

	/**
	 * Ancho del artículo
	 */
	private float width;//

	/**
	 * Unidades en las que se mide el ancho del artículo
	 */
	private String widthUnit;//

	/**
	 * peso neto del producto
	 */
	private float netWeight;//

	/**
	 * Unidades en las que se mide el peso neto del producto
	 */
	private String netWeightUnit;//

	/**
	 * Profundidad del artículo
	 */
	private float depth;//

	/**
	 * Unidades en las que se mide la profundidad del artículo
	 */
	private String depthUnit;//

	/**
	 * Altura del artículo
	 */
	private float height;//

	/**
	 * Unidades en las que se mide la altura del artículo
	 */
	private String heightUnit;//

	/**
	 * Peso bruto del producto
	 */
	private float grossWeight;//

	/**
	 * Unidades en las que se mide el peso bruto del producto
	 */
	private String grossWeightUnit;//

	/**
	 * Temperatura mímina que soporta el artículo
	 */
	private float minimumTemperature;//

	/**
	 * Temperatura máxima que soporta el artículo
	 */
	private float maximumTemperature;//

	/**
	 * Unidad en la que se miden las temperaturas
	 */
	private String temperatureUnit;//

	/**
	 * Número máximo de unidades que se pueden apilar
	 */
	private int stackingWeightMaximum;

	/**
	 * Número de capas que tiene una unidad logística
	 */
	private int completeLayers;

	/**
	 * Numero de productos por capa dentro de la unidad logística
	 */
	private int itemsContainedInALayer;

	/**
	 * El contenido del producto dentro del envase. Es la oferta real de
	 * producto al consumidor
	 */
	private float netContent;//

	/**
	 * Unidad en que se mide el contenido del producto
	 */
	private String netContentUnit;//

	/**
	 * Se refiere al numero de piezas de un producto específicamente para el
	 * sector textil
	 */
	private int pieces;//

	/**
	 * Se refiere a la fecha de registro sanitario del producto
	 */
	private Date sanitaryRegistryDate;

	/**
	 * IVA
	 */
	private float tax;//

	/**
	 * Tipo de empaque del producto
	 */
	private String packagingType;//

	/**
	 * URL en donde se encuentra la imagen
	 */
	private String image;//

	/**
	 * Identificador del proveedor que publica el producto
	 */
	private int supplierId;

	/**
	 * Nombre del proveedor
	 */
	private String supplierName;

	/**
	 * indica si el producto se va a mostrar en el nurit
	 */
	private boolean nurit;

	/**
	 * indic el estado del producto, esto es si el proveedor lo esta vendiendo o
	 * no
	 */
	private boolean status;
        
        /**
         * El precio base del producto con IVA
         */
        private double basePrice;

	/**
	 * Crea un nuevo producto vacio
	 *  
	 */
	public SupplierProduct( )
	{
	}

	/**
	 * Crea un nuevo producto y llama al método loadData para que lo cargue de
	 * la base de datos
	 * 
	 * @param prodId
	 *            identificador del producto en la base de datos
	 */
	public SupplierProduct( int prodId)
	{
		id = prodId;
		loadData(id);
	}

	/**
	 * Crea un nuevo producto y llama al método loadData para que lo cargue de
	 * la base de datos
	 * 
	 * @param prodCode
	 *            código de barras del producto
	 * @param suppCode
	 *            identificador del proveedor al que está asociado el producto
	 */
	public SupplierProduct( String prodCode, int suppCode)
	{
		code = prodCode;
		supplierId = suppCode;
		loadData(code, supplierId);
	}

	/**
	 * carga un producto de la base de datos a partir de su identificador
	 * 
	 * @param prodId
	 *            identificador del producto en la tabla
	 * @return booleano que indica si se pudo cargar o no
	 */
	public boolean loadData( int prodId )
	{
		id = prodId;
		supplierGLN = "";
		String sql = "SELECT cate_prod_codigo, empr_id, prod_prov_codigo, "
				+ "prod_prov_proveedor, prod_prov_descripcion_larga, prod_prov_descripcion_corta, "
				+ "prod_prov_color, prod_prov_talla, prod_prov_marca, prod_prov_registro_sanitario, "
				+ "prod_prov_forma_farmaceutica, prod_prov_estilo, prod_prov_nombre_funcional, "
				+ "prod_prov_variante, prod_prov_nombre_fabricante, prod_prov_principio_activo, "
				+ "prod_prov_unidad_consumo, prod_prov_unidad_despacho, prod_prov_unidad_comercio, "
				+ "prod_prov_ancho, prod_prov_ancho_unidad, prod_prov_peso_neto, prod_prov_peso_neto_unidad, "
				+ "prod_prov_profundidad, prod_prov_profundidad_unidad, prod_prov_alto, "
				+ "prod_prov_alto_unidad, prod_prov_peso_bruto, prod_prov_peso_bruto_unidad, "
				+ "prod_prov_temperatura_minima, prod_prov_temperatura_maxima, prod_prov_temperatura_unidad, "
				+ "prod_prov_unidades_apilables, prod_prov_tendidos, prod_prov_unidades_tendido, prod_prov_cantidad_envase, "
				+ "prod_prov_cantidad_env_unidad, prod_prov_piezas, prod_prov_fecha_registro_sani, "
				+ "prod_prov_tipo_empaque, prod_prov_url_imagen, prod_prov_nurit, prod_prov_estado, prod_prov_iva, prod_prov_precio_base "
				+ "FROM producto_proveedor WHERE prod_prov_id=" + id + ";";
		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable datos = (Hashtable) res.elementAt(0);

			category = ((Integer) datos.get("cate_prod_codigo")).intValue();
			///////////////////////////////////////////////////////////
			/// para buscar el nombre de la categoria
			sql = "SELECT cate_prod_nombre FROM categoria_producto WHERE cate_prod_codigo="
					+ category + ";";
			Vector res1 = SQLUtilities.query(sql);
			Hashtable datos1 = (Hashtable) res1.elementAt(0);
			categoryName = (String) datos1.get("cate_prod_nombre");
			///////////////////////////////////////////////////////////
                        try
                        {
                            tax = ((Double) datos.get("prod_prov_iva2")).floatValue();
                            //System.out.println( "El IVA es..." + tax );
                        }
                        catch( Exception e )
                        {
                            System.out.println( "PAILA IVA...!!!!!!!" );
                            e.printStackTrace();
                            tax = 0;
                        }
                        try
                        {
                            basePrice = ((Double) datos.get("prod_prov_precio_base2")).floatValue();
                        }
                        catch( Exception e )
                        {
                            basePrice = 0;
                        }
			supplierId = ((Integer) datos.get("empr_id")).intValue();
			code = (String) datos.get("prod_prov_codigo");
			supplierGLN = (String) datos.get("prod_prov_proveedor");
			longDescription = (String) datos.get("prod_prov_descripcion_larga");
			shortDescription = (String) datos
					.get("prod_prov_descripcion_corta");
			color = (String) datos.get("prod_prov_color");
			size = (String) datos.get("prod_prov_talla");
			brand = (String) datos.get("prod_prov_marca");
			sanitaryRegistry = (String) datos
					.get("prod_prov_registro_sanitario");
			pharmaceuticalForm = (String) datos
					.get("prod_prov_forma_farmaceutica");
			style = (String) datos.get("prod_prov_estilo");
			functionalName = (String) datos.get("prod_prov_nombre_funcional");
			variant = (String) datos.get("prod_prov_variante");
			manufacturerName = (String) datos
					.get("prod_prov_nombre_fabricante");
			activePrinciple = (String) datos.get("prod_prov_principio_activo");

			/*
			 * consumerUnit = ( ( Boolean )datos.get( "prod_prov_unidad_consumo" )
			 * ).booleanValue(); despatchUnit = ( ( Boolean )datos.get(
			 * "prod_prov_unidad_despacho" ) ).booleanValue(); invoiceUnit = ( (
			 * Boolean )datos.get( "prod_prov_unidad_comercio" )
			 * ).booleanValue();
			 */

			int isConsumerUnit = ((Integer) datos
					.get("prod_prov_unidad_consumo")).intValue();
			if( isConsumerUnit == 1 )
			{
				consumerUnit = true;
			}
			else
			{
				consumerUnit = false;
			}

			int isDespatchUnit = ((Integer) datos
					.get("prod_prov_unidad_despacho")).intValue();
			if( isDespatchUnit == 1 )
			{
				despatchUnit = true;
			}
			else
			{
				despatchUnit = false;
			}

			int isInvoiceUnit = ((Integer) datos
					.get("prod_prov_unidad_comercio")).intValue();
			if( isInvoiceUnit == 1 )
			{
				invoiceUnit = true;
			}
			else
			{
				invoiceUnit = false;
			}

			width = ((Double) datos.get("prod_prov_ancho2")).floatValue();
			widthUnit = (String) datos.get("prod_prov_ancho_unidad");
			netWeight = ((Double) datos.get("prod_prov_peso_neto2"))
					.floatValue();
			netWeightUnit = (String) datos.get("prod_prov_peso_neto_unidad");
			depth = ((Double) datos.get("prod_prov_profundidad2")).floatValue();
			depthUnit = (String) datos.get("prod_prov_profundidad_unidad");
			height = ((Double) datos.get("prod_prov_alto2")).floatValue();
			heightUnit = (String) datos.get("prod_prov_alto_unidad");
			grossWeight = ((Double) datos.get("prod_prov_peso_bruto2"))
					.floatValue();
			grossWeightUnit = (String) datos.get("prod_prov_peso_bruto_unidad");
			minimumTemperature = ((Double) datos
					.get("prod_prov_temperatura_minima2")).floatValue();
			maximumTemperature = ((Double) datos
					.get("prod_prov_temperatura_maxima2")).floatValue();
			temperatureUnit = (String) datos
					.get("prod_prov_temperatura_unidad");
			stackingWeightMaximum = ((Integer) datos
					.get("prod_prov_unidades_apilables")).intValue();
			completeLayers = ((Integer) datos.get("prod_prov_tendidos"))
					.intValue();
			//itemsContainedInALayer = (( Integer )datos.get(
			// "prod_prov_unidades_tendido" )).intValue();
			netContent = ((Double) datos.get("prod_prov_cantidad_envase2"))
					.floatValue();
			netContentUnit = (String) datos
					.get("prod_prov_cantidad_env_unidad");
			pieces = ((Integer) datos.get("prod_prov_piezas")).intValue();
			sanitaryRegistryDate = Date.valueOf(((Date) datos
					.get("prod_prov_fecha_registro_sani")).toString());
			packagingType = (String) datos.get("prod_prov_tipo_empaque");
			image = (String) datos.get("prod_prov_url_imagen");

			/*
			 * nurit = ( ( Boolean )datos.get( "prod_prov_nurit" )
			 * ).booleanValue(); status = ( ( Boolean )datos.get(
			 * "prod_prov_estado" ) ).booleanValue();
			 */

			int isNurit = ((Integer) datos.get("prod_prov_nurit")).intValue();
			if( isNurit == 1 )
			{
				nurit = true;
			}
			else
			{
				nurit = false;
			}

			int intStatus = ((Integer) datos.get("prod_prov_estado"))
					.intValue();
			if( intStatus == 1 )
			{
				status = true;
			}
			else
			{
				status = false;
			}

			// para cargar el nombre del proveedor
			sql = "SELECT empr_nombre_comercial FROM empresa WHERE empr_id="
					+ supplierId + ";";
			res = SQLUtilities.query(sql);
			datos = (Hashtable) res.elementAt(0);
			supplierName = (String) datos.get("empr_nombre_comercial");

			// para cargar el nombre de la categoria
			sql = "SELECT cate_prod_nombre FROM categoria_producto WHERE cate_prod_codigo="
					+ category + ";";
			res = SQLUtilities.query(sql);
			datos = (Hashtable) res.elementAt(0);
			categoryName = (String) datos.get("cate_prod_nombre");

		}
		catch (Exception e)
		{
			System.out.println("Error cargando producto --> " + e);
			e.printStackTrace();
			return false;
		}
		return true;
	}

	/**
	 * carga un producto de la base de datos a partir del código de barras y el
	 * identificador del proveedor al que está asociado el producto
	 * 
	 * @param prodCode
	 *            código de barras del producto
	 * @param suppCode
	 *            identificador del proveedor
	 * @return booleano que indica si se pudo cargar o no
	 */
	public boolean loadData( String prodCode, int suppCode )
	{
		code = prodCode;
		supplierId = suppCode;
		String sql = "SELECT prod_prov_id, cate_prod_codigo, "
				+ "prod_prov_proveedor, prod_prov_descripcion_larga, prod_prov_descripcion_corta, "
				+ "prod_prov_color, prod_prov_talla, prod_prov_marca, prod_prov_registro_sanitario, "
				+ "prod_prov_forma_farmaceutica, prod_prov_estilo, prod_prov_nombre_funcional, "
				+ "prod_prov_variante, prod_prov_nombre_fabricante, prod_prov_principio_activo, "
				+ "prod_prov_unidad_consumo, prod_prov_unidad_despacho, prod_prov_unidad_comercio, "
				+ "prod_prov_ancho, prod_prov_ancho_unidad, prod_prov_peso_neto, prod_prov_peso_neto_unidad, "
				+ "prod_prov_profundidad, prod_prov_profundidad_unidad, prod_prov_alto, "
				+ "prod_prov_alto_unidad, prod_prov_peso_bruto, prod_prov_peso_bruto_unidad, "
				+ "prod_prov_temperatura_minima, prod_prov_temperatura_maxima, prod_prov_temperatura_unidad, "
				+ "prod_prov_tendidos, prod_prov_unidades_tendido, prod_prov_cantidad_envase, "
				+ "prod_prov_cantidad_env_unidad, prod_prov_piezas, prod_prov_fecha_registro_sani, "
				+ "prod_prov_tipo_empaque, prod_prov_url_imagen, prod_prov_nurit, prod_prov_estado, prod_prov_iva, prod_prov_precio_base "
				+ "FROM producto_proveedor WHERE prod_prov_id=" + id + ";";
		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable datos = (Hashtable) res.elementAt(0);

			id = ((Integer) datos.get("prod_prov_id")).intValue();
			category = ((Integer) datos.get("cate_prod_codigo")).intValue();
			///////////////////////////////////////////////////////////
			/// para buscar el nombre de la categoria
			sql = "SELECT cate_prod_nombre FROM categoria_producto WHERE cate_prod_codigo="
					+ category + ";";
			Vector res1 = SQLUtilities.query(sql);
			Hashtable datos1 = (Hashtable) res1.elementAt(0);
			categoryName = (String) datos1.get("cate_prod_nombre");
			///////////////////////////////////////////////////////////
                        try
                        {
                            tax = ((Float) datos.get("prod_prov_iva3")).floatValue();
                            //System.out.println( "El IVA es..." + tax );
                        }
                        catch( Exception e )
                        {
                            tax = 0;
                            System.out.println( "PAILA IVA...!!!!!!!" );
                            e.printStackTrace();
                        }
                        try
                        {
                            basePrice = ((Float) datos.get("prod_prov_precio_base3")).floatValue();
                        }
                        catch( Exception e )
                        {
                            basePrice = 0;
                        }
			supplierGLN = (String) datos.get("prod_prov_proveedor");
			longDescription = (String) datos.get("prod_prov_descripcion_larga");
			shortDescription = (String) datos
					.get("prod_prov_descripcion_corta");
			color = (String) datos.get("prod_prov_color");
			size = (String) datos.get("prod_prov_talla");
			brand = (String) datos.get("prod_prov_marca");
			sanitaryRegistry = (String) datos
					.get("prod_prov_registro_sanitario");
			pharmaceuticalForm = (String) datos
					.get("prod_prov_forma_farmaceutica");
			style = (String) datos.get("prod_prov_estilo");
			functionalName = (String) datos.get("prod_prov_nombre_funcional");
			variant = (String) datos.get("prod_prov_variante");
			manufacturerName = (String) datos
					.get("prod_prov_nombre_fabricante");
			activePrinciple = (String) datos.get("prod_prov_principio_activo");
			consumerUnit = ((Boolean) datos.get("prod_prov_unidad_consumo"))
					.booleanValue();
			despatchUnit = ((Boolean) datos.get("prod_prov_unidad_despacho"))
					.booleanValue();
			invoiceUnit = ((Boolean) datos.get("prod_prov_unidad_comercio"))
					.booleanValue();
			width = ((Float) datos.get("prod_prov_ancho3")).floatValue();
			widthUnit = (String) datos.get("prod_prov_ancho_unidad");
			netWeight = ((Float) datos.get("prod_prov_peso_neto3"))
					.floatValue();
			netWeightUnit = (String) datos.get("prod_prov_peso_neto_unidad");
			depth = ((Float) datos.get("prod_prov_profundidad3")).floatValue();
			depthUnit = (String) datos.get("prod_prov_profundidad_unidad");
			height = ((Float) datos.get("prod_prov_alto3")).floatValue();
			heightUnit = (String) datos.get("prod_prov_alto_unidad");
			grossWeight = ((Float) datos.get("prod_prov_peso_bruto3"))
					.floatValue();
			grossWeightUnit = (String) datos.get("prod_prov_peso_bruto_unidad");
			minimumTemperature = ((Float) datos
					.get("prod_prov_temperatura_minima3")).floatValue();
			maximumTemperature = ((Float) datos
					.get("prod_prov_temperatura_maxima3")).floatValue();
			temperatureUnit = (String) datos
					.get("prod_prov_temperatura_unidad");
			stackingWeightMaximum = ((Integer) datos
					.get("prod_prov_unidades_apilables")).intValue();
			completeLayers = ((Integer) datos.get("prod_prov_tendidos"))
					.intValue();
			itemsContainedInALayer = ((Integer) datos
					.get("prod_prov_unidades_tendido")).intValue();
			netContent = ((Float) datos.get("prod_prov_cantidad_envase3"))
					.floatValue();
			netContentUnit = (String) datos
					.get("prod_prov_cantidad_env_unidad");
			pieces = ((Integer) datos.get("prod_prov_pieces")).intValue();
			sanitaryRegistryDate = Date.valueOf(((Date) datos
					.get("prod_prov_fecha_registro_sani")).toString());
			packagingType = (String) datos.get("prod_prov_tipo_empaque");
			image = (String) datos.get("prod_prov_url_imagen");
			nurit = ((Boolean) datos.get("prod_prov_nurit")).booleanValue();
			status = ((Boolean) datos.get("prod_prov_estado")).booleanValue();

		}
		catch (Exception e)
		{
			System.out.println("Error cargando producto --> " + e);
			return false;
		}
		return true;
	}

	public boolean loadData( String prodCode, String suppGLN )
	{
		code = prodCode;
		supplierGLN = suppGLN;
		String sql = "SELECT prod_prov_id, cate_prod_codigo, empr_id, "
				+ "prod_prov_descripcion_larga, prod_prov_descripcion_corta, "
				+ "prod_prov_color, prod_prov_talla, prod_prov_marca, prod_prov_registro_sanitario, "
				+ "prod_prov_forma_farmaceutica, prod_prov_estilo, prod_prov_nombre_funcional, "
				+ "prod_prov_variante, prod_prov_nombre_fabricante, prod_prov_principio_activo, "
				+ "prod_prov_unidad_consumo, prod_prov_unidad_despacho, prod_prov_unidad_comercio, "
				+ "prod_prov_ancho, prod_prov_ancho_unidad, prod_prov_peso_neto, prod_prov_peso_neto_unidad, "
				+ "prod_prov_profundidad, prod_prov_profundidad_unidad, prod_prov_alto, "
				+ "prod_prov_alto_unidad, prod_prov_peso_bruto, prod_prov_peso_bruto_unidad, "
				+ "prod_prov_temperatura_minima, prod_prov_temperatura_maxima, prod_prov_temperatura_unidad, "
				+ "prod_prov_tendidos, prod_prov_unidades_tendido, prod_prov_cantidad_envase, "
				+ "prod_prov_cantidad_env_unidad, prod_prov_piezas, prod_prov_fecha_registro_sani, "
				+ "prod_prov_tipo_empaque, prod_prov_url_imagen, prod_prov_nurit, prod_prov_estado, prod_prov_iva, prod_prov_precio_base "
				+ "FROM producto_proveedor WHERE prod_prov_id=" + id + ";";
		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable datos = (Hashtable) res.elementAt(0);

			id = ((Integer) datos.get("prod_prov_codigo")).intValue();
			category = ((Integer) datos.get("cate_prod_codigo")).intValue();
			///////////////////////////////////////////////////////////
			/// para buscar el nombre de la categoria
			sql = "SELECT cate_prod_nombre FROM categoria_producto WHERE cate_prod_codigo="
					+ category + ";";
			Vector res1 = SQLUtilities.query(sql);
			Hashtable datos1 = (Hashtable) res1.elementAt(0);
			categoryName = (String) datos1.get("cate_prod_nombre");
			///////////////////////////////////////////////////////////
                        try
                        {
                            tax = ((Float) datos.get("prod_prov_iva3")).floatValue();
                            //System.out.println( "El IVA es..." + tax );
                        }
                        catch( Exception e )
                        {
                            System.out.println( "PAILA IVA...!!!!!!!" );
                            e.printStackTrace();
                            tax = 0;
                        }
                        try
                        {
                            basePrice = ((Float) datos.get("prod_prov_precio_base3")).floatValue();
                        }
                        catch( Exception e )
                        {
                            basePrice = 0;
                        }
			supplierId = ((Integer) datos.get("empr_id")).intValue();
			longDescription = (String) datos.get("prod_prov_descripcion_larga");
			shortDescription = (String) datos
					.get("prod_prov_descripcion_corta");
			color = (String) datos.get("prod_prov_color");
			size = (String) datos.get("prod_prov_talla");
			brand = (String) datos.get("prod_prov_marca");
			sanitaryRegistry = (String) datos
					.get("prod_prov_registro_sanitario");
			pharmaceuticalForm = (String) datos
					.get("prod_prov_forma_farmaceutica");
			style = (String) datos.get("prod_prov_estilo");
			functionalName = (String) datos.get("prod_prov_nombre_funcional");
			variant = (String) datos.get("prod_prov_variante");
			manufacturerName = (String) datos
					.get("prod_prov_nombre_fabricante");
			activePrinciple = (String) datos.get("prod_prov_principio_activo");
			consumerUnit = ((Boolean) datos.get("prod_prov_unidad_consumo"))
					.booleanValue();
			despatchUnit = ((Boolean) datos.get("prod_prov_unidad_despacho"))
					.booleanValue();
			invoiceUnit = ((Boolean) datos.get("prod_prov_unidad_comercio"))
					.booleanValue();
			width = ((Float) datos.get("prod_prov_ancho3")).floatValue();
			widthUnit = (String) datos.get("prod_prov_ancho_unidad");
			netWeight = ((Float) datos.get("prod_prov_peso_neto3"))
					.floatValue();
			netWeightUnit = (String) datos.get("prod_prov_peso_neto_unidad");
			depth = ((Float) datos.get("prod_prov_profundidad3")).floatValue();
			depthUnit = (String) datos.get("prod_prov_profundidad_unidad");
			height = ((Float) datos.get("prod_prov_alto3")).floatValue();
			heightUnit = (String) datos.get("prod_prov_alto_unidad");
			grossWeight = ((Float) datos.get("prod_prov_peso_bruto3"))
					.floatValue();
			grossWeightUnit = (String) datos.get("prod_prov_peso_bruto_unidad");
			minimumTemperature = ((Float) datos
					.get("prod_prov_temperatura_minima3")).floatValue();
			maximumTemperature = ((Float) datos
					.get("prod_prov_temperatura_maxima3")).floatValue();
			temperatureUnit = (String) datos
					.get("prod_prov_temperatura_unidad");
			stackingWeightMaximum = ((Integer) datos
					.get("prod_prov_unidades_apilables")).intValue();
			completeLayers = ((Integer) datos.get("prod_prov_tendidos"))
					.intValue();
			itemsContainedInALayer = ((Integer) datos
					.get("prod_prov_unidades_tendido")).intValue();
			netContent = ((Float) datos.get("prod_prov_cantidad_envase3"))
					.floatValue();
			netContentUnit = (String) datos
					.get("prod_prov_cantidad_env_unidad");
			pieces = ((Integer) datos.get("prod_prov_pieces")).intValue();
			sanitaryRegistryDate = Date.valueOf(((Date) datos
					.get("prod_prov_fecha_registro_sani")).toString());
			packagingType = (String) datos.get("prod_prov_tipo_empaque");
			image = (String) datos.get("prod_prov_url_imagen");
			nurit = ((Boolean) datos.get("prod_prov_nurit")).booleanValue();
			status = ((Boolean) datos.get("prod_prov_estado")).booleanValue();

		}
		catch (Exception e)
		{
			System.out.println("Error cargando producto --> " + e);
			return false;
		}
		return true;
	}

	public boolean loadMinimalData( int id )
	{
		this.id = id;
		String sql = "SELECT cate_prod_codigo, empr_id, prod_prov_codigo, "
				+ "prod_prov_descripcion_corta, " + "prod_prov_marca, "
				+ "prod_prov_estado, prod_prov_iva, prod_prov_precio_base "
				+ "FROM producto_proveedor WHERE prod_prov_id=" + id + ";";

		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable datos = (Hashtable) res.elementAt(0);

			category = ((Integer) datos.get("cate_prod_codigo")).intValue();
			///////////////////////////////////////////////////////////
			/// para buscar el nombre de la categoria
			sql = "SELECT cate_prod_nombre FROM categoria_producto WHERE cate_prod_codigo="
					+ category + ";";
			Vector res1 = SQLUtilities.query(sql);
			Hashtable datos1 = (Hashtable) res1.elementAt(0);
			categoryName = (String) datos1.get("cate_prod_nombre");
			///////////////////////////////////////////////////////////
			supplierId = ((Integer) datos.get("empr_id")).intValue();
			code = (String) datos.get("prod_prov_codigo");
			shortDescription = (String) datos
					.get("prod_prov_descripcion_corta");
			brand = (String) datos.get("prod_prov_marca");
			if( ((Integer) datos.get("prod_prov_estado")).intValue() == 1 )
			{
				status = true;
			}
			else
			{
				status = false;
			}
                        try
                        {
                            tax = ((Double) datos.get("prod_prov_iva2")).floatValue();
                            //System.out.println( "El IVA es..." + tax );
                        }
                        catch( Exception e )
                        {
                            System.out.println( "PAILA IVA...!!!!!!!" );
                            e.printStackTrace();
                            tax = 0;
                        }
			
                        try
                        {
                            basePrice = ((Double) datos.get("prod_prov_precio_base2")).floatValue();
                        }
                        catch( Exception e )
                        {
                            basePrice = 0;
                        }

			// para cargar el nombre del proveedor
			sql = "SELECT empr_nombre_comercial FROM empresa WHERE empr_id="
					+ supplierId + ";";
			res = SQLUtilities.query(sql);
			datos = (Hashtable) res.elementAt(0);
			supplierName = (String) datos.get("empr_nombre_comercial");

		}
		catch (Exception e)
		{
                    e.printStackTrace();
			System.out.println("Error cargando producto --> " + e);
			return false;
		}
		return true;
	}

	/**
	 * Almacena la información del producto en la base de datos construyendo la
	 * instrucción sql y pasandola a la transacción
	 * 
	 * @param transaction
	 *            Transacción que se está ejecutando
	 * @return booleano que indica si se pudo efectuar la operación o no
	 */
	public boolean saveData( Transaction transaction )
	{
		if( id == 0 )
		{
			id = this.hashCode();

			String sql = "INSERT INTO producto_proveedor (prod_prov_id, cate_prod_codigo, "
					+ "empr_id, prod_prov_codigo, prod_prov_proveedor, prod_prov_descripcion_larga, "
					+ "prod_prov_descripcion_corta, prod_prov_color, prod_prov_talla, prod_prov_marca, "
					+ "prod_prov_registro_sanitario, prod_prov_forma_farmaceutica,prod_prov_estilo, "
					+ "prod_prov_nombre_funcional, prod_prov_variante, prod_prov_nombre_fabricante, "
					+ "prod_prov_principio_activo, prod_prov_unidad_consumo, prod_prov_unidad_despacho, "
					+ "prod_prov_unidad_comercio, prod_prov_ancho, prod_prov_ancho_unidad, "
					+ "prod_prov_peso_neto, prod_prov_peso_neto_unidad, prod_prov_profundidad, "
					+ "prod_prov_profundidad_unidad, prod_prov_alto, prod_prov_alto_unidad, "
					+ "prod_prov_peso_bruto, prod_prov_peso_bruto_unidad, prod_prov_temperatura_minima, "
					+ "prod_prov_temperatura_maxima, prod_prov_temperatura_unidad, prod_prov_unidades_apilables, "
					+ "prod_prov_tendidos, prod_prov_unidades_tendido, prod_prov_cantidad_envase, "
					+ "prod_prov_cantidad_env_unidad, prod_prov_piezas, prod_prov_fecha_registro_sani, "
					+ "prod_prov_tipo_empaque, prod_prov_url_imagen, prod_prov_nurit, prod_prov_estado, "
					+ "prod_prov_iva, prod_prov_precio_base) VALUES("
					+ id
					+ ", "
					+ category
					+ ", "
					+ supplierId
					+ ", "
					+ "\'"
					+ code
					+ "\', "
					+ "\'"
					+ supplierGLN
					+ "\', "
					+ "\'"
					+ longDescription
					+ "\', "
					+ "\'"
					+ shortDescription
					+ "\', "
					+ "\'"
					+ color
					+ "\', "
					+ "\'"
					+ size
					+ "\', "
					+ "\'"
					+ brand
					+ "\', "
					+ "\'"
					+ sanitaryRegistry
					+ "\', "
					+ "\'"
					+ pharmaceuticalForm
					+ "\', "
					+ "\'"
					+ style
					+ "\', "
					+ "\'"
					+ functionalName
					+ "\', "
					+ "\'"
					+ variant
					+ "\', "
					+ "\'"
					+ manufacturerName
					+ "\', "
					+ "\'"
					+ activePrinciple
					+ "\', "
					+ (consumerUnit ? "1" : "0")
					+ ", "
					+ (despatchUnit ? "1" : "0")
					+ ", "
					+ (invoiceUnit ? "1" : "0")
					+ ", "
					+ width
					+ ", "
					+ "\'"
					+ widthUnit
					+ "\', "
					+ netWeight
					+ ", "
					+ "\'"
					+ netWeightUnit
					+ "\', "
					+ depth
					+ ", "
					+ "\'"
					+ depthUnit
					+ "\', "
					+ height
					+ ", "
					+ "\'"
					+ heightUnit
					+ "\', "
					+ grossWeight
					+ ", "
					+ "\'"
					+ grossWeightUnit
					+ "\', "
					+ minimumTemperature
					+ ", "
					+ maximumTemperature
					+ ", "
					+ "\'"
					+ temperatureUnit
					+ "\', "
					+ stackingWeightMaximum
					+ ", "
					+ completeLayers
					+ ", "
					+ itemsContainedInALayer
					+ ", "
					+ netContent
					+ ", "
					+ "\'"
					+ netContentUnit
					+ "\', "
					+ pieces
					+ ", "
					+ "\'"
					+ sanitaryRegistryDate
					+ "\', "
					+ "\'"
					+ packagingType
					+ "\', "
					+ "\'"
					+ image
					+ "\', "
					+ (nurit ? "1" : "0")
					+ ", "
					+ (status ? "1" : "0")
					+ ", "
					+ tax + ", "
					+ basePrice + ");";
			transaction.addSql(sql);
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * Actualiza la información del producto en la base de datos creando la
	 * instrucción sql y pasandola a la transacción
	 * 
	 * @param transaction
	 *            Transacción que se está ejecutando
	 * @return booleano que indica si se pudo efectuar la operación o no
	 */
	public boolean update( Transaction transaction )
	{
		if( id != 0 )
		{
			String sql = "UPDATE producto_proveedor SET " + "cate_prod_codigo="
					+ category + ", " + "empr_id=" + supplierId + ", "
					+ "prod_prov_codigo=\'" + code + "\', "
					+ "prod_prov_proveedor=\'" + supplierGLN + "\', "
					+ "prod_prov_descripcion_larga=\'" + longDescription
					+ "\', " + "prod_prov_descripcion_corta=\'"
					+ shortDescription + "\', " + "prod_prov_color=\'" + color
					+ "\', " + "prod_prov_talla=\'" + size + "\', "
					+ "prod_prov_marca=\'" + brand + "\', "
					+ "prod_prov_registro_sanitario=\'" + sanitaryRegistry
					+ "\', " + "prod_prov_forma_farmaceutica=\'"
					+ pharmaceuticalForm + "\', " + "prod_prov_estilo=\'"
					+ style + "\', " + "prod_prov_nombre_funcional=\'"
					+ functionalName + "\', " + "prod_prov_variante=\'"
					+ variant + "\', " + "prod_prov_nombre_fabricante=\'"
					+ manufacturerName + "\', "
					+ "prod_prov_principio_activo=\'" + activePrinciple
					+ "\', " + "prod_prov_unidad_consumo="
					+ (consumerUnit ? "1" : "0") + ", "
					+ "prod_prov_unidad_despacho=" + (despatchUnit ? "1" : "0")
					+ ", " + "prod_prov_unidad_comercio="
					+ (invoiceUnit ? "1" : "0") + ", " + "prod_prov_ancho="
					+ width + ", " + "prod_prov_ancho_unidad=\'" + widthUnit
					+ "\', " + "prod_prov_peso_neto=" + netWeight + ", "
					+ "prod_prov_peso_neto_unidad=\'" + netWeightUnit + "\', "
					+ "prod_prov_profundidad=" + depth + ", "
					+ "prod_prov_profundidad_unidad=\'" + depthUnit + "\', "
					+ "prod_prov_alto=" + height + ", "
					+ "prod_prov_alto_unidad=\'" + heightUnit + "\', "
					+ "prod_prov_peso_bruto=" + grossWeight + ", "
					+ "prod_prov_peso_bruto_unidad=\'" + grossWeightUnit
					+ "\', " + "prod_prov_temperatura_minima="
					+ minimumTemperature + ", "
					+ "prod_prov_temperatura_maxima=" + maximumTemperature
					+ ", " + "prod_prov_temperatura_unidad=\'"
					+ temperatureUnit + "\', "
					+ "prod_prov_unidades_apilables=" + stackingWeightMaximum
					+ ", " + "prod_prov_tendidos=" + completeLayers + ", "
					+ "prod_prov_unidades_tendido=" + itemsContainedInALayer
					+ ", " + "prod_prov_cantidad_envase=" + netContent + ", "
					+ "prod_prov_cantidad_env_unidad=\'" + netContentUnit
					+ "\', " + "prod_prov_ìezas=" + pieces + ", "
					+ "prod_prov_fecha_registro_sani=\'" + sanitaryRegistryDate
					+ "\', " + "prod_prov_tipo_empaque=\'" + packagingType
					+ "\', " + "prod_prov_url_imagen=\'" + image + "\', "
					+ "prod_prov_nurit=" + (nurit ? "1" : "0") + ", "
					+ "prod_prov_estado=" + (status ? "1" : "0") + ", "
					+ "prod_prov_iva=" + tax + " "
					+ "prod_prov_precio_base=" + basePrice + " "
					+ "WHERE prod_prov_id=" + id
					+ ";";
			transaction.addSql(sql);
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * No se van a eliminar los productos de la base de datos, ya que esto
	 * implicaría borrar las ordenes de compra, cotizaciones y listas que
	 * involucran dichos productos, en lugar de ello simplemente se va a poner
	 * el estado del producto en false, lo que indica que el proveedor no lo
	 * está vendiendo.
	 * 
	 * @param transaction
	 *            Transacción que se está ejecutando
	 * @return booleno que indica si se pudo efectuar la operación o no
	 */
	public boolean delete( Transaction transaction )
	{
		if( id != 0 )
		{
			status = false;
			String sql = "UPDATE producto_proveedor SET estado=0 WHERE prod_prov_id="
					+ id + ";";
			transaction.addSql(sql);
			return true;
		}
		else
		{
			return false;
		}
	}

	/**
	 * @return Returns the activePrinciple.
	 */
	public String getActivePrinciple( )
	{
		return activePrinciple;
	}

	/**
	 * @param activePrinciple
	 *            The activePrinciple to set.
	 */
	public void setActivePrinciple( String activePrinciple )
	{
		this.activePrinciple = activePrinciple.toUpperCase();
	}

	/**
	 * @return Returns the brand.
	 */
	public String getBrand( )
	{
		return brand;
	}

	/**
	 * @param brand
	 *            The brand to set.
	 */
	public void setBrand( String brand )
	{
		this.brand = brand.toUpperCase();
	}

	/**
	 * @return Returns the category.
	 */
	public int getCategory( )
	{
		return category;
	}

	/**
	 * @param category
	 *            The category to set.
	 */
	public void setCategory( int category )
	{
		this.category = category;
	}

	/**
	 * @return Returns the categoryName.
	 */
	public String getCategoryName( )
	{
		return categoryName;
	}

	/**
	 * @param categoryName
	 *            The categoryName to set.
	 */
	public void setCategoryName( String categoryName )
	{
		this.categoryName = categoryName.toUpperCase();
	}

	/**
	 * @return Returns the code.
	 */
	public String getCode( )
	{
		return code;
	}

	/**
	 * @param code
	 *            The code to set.
	 */
	public void setCode( String code )
	{
		this.code = code;
		image = "/images/products/" + code + ".jpg";
	}

	/**
	 * @return Returns the codeSupplier.
	 */
	public String getCodeSupplier( )
	{
		return codeSupplier;
	}

	/**
	 * @param codeSupplier
	 *            The codeSupplier to set.
	 */
	public void setCodeSupplier( String codeSupplier )
	{
		this.codeSupplier = codeSupplier;
	}

	/**
	 * @return Returns the color.
	 */
	public String getColor( )
	{
		return color;
	}

	/**
	 * @param color
	 *            The color to set.
	 */
	public void setColor( String color )
	{
		this.color = color.toUpperCase();
	}

	/**
	 * @return Returns the completeLayers.
	 */
	public int getCompleteLayers( )
	{
		return completeLayers;
	}

	/**
	 * @param completeLayers
	 *            The completeLayers to set.
	 */
	public void setCompleteLayers( int completeLayers )
	{
		this.completeLayers = completeLayers;
	}

	/**
	 * @return Returns the consumerUnit.
	 */
	public boolean isConsumerUnit( )
	{
		return consumerUnit;
	}

	/**
	 * @param consumerUnit
	 *            The consumerUnit to set.
	 */
	public void setConsumerUnit( boolean consumerUnit )
	{
		this.consumerUnit = consumerUnit;
	}

	/**
	 * @return Returns the depth.
	 */
	public float getDepth( )
	{
		return depth;
	}

	/**
	 * @param depth
	 *            The depth to set.
	 */
	public void setDepth( float depth )
	{
		this.depth = depth;
	}

	/**
	 * @return Returns the depthUnit.
	 */
	public String getDepthUnit( )
	{
		return depthUnit;
	}

	/**
	 * @param depthUnit
	 *            The depthUnit to set.
	 */
	public void setDepthUnit( String depthUnit )
	{
		this.depthUnit = depthUnit.toUpperCase();
	}

	/**
	 * @return Returns the despatchUnit.
	 */
	public boolean isDespatchUnit( )
	{
		return despatchUnit;
	}

	/**
	 * @param despatchUnit
	 *            The despatchUnit to set.
	 */
	public void setDespatchUnit( boolean despatchUnit )
	{
		this.despatchUnit = despatchUnit;
	}

	/**
	 * @return Returns the functionalName.
	 */
	public String getFunctionalName( )
	{
		return functionalName;
	}

	/**
	 * @param functionalName
	 *            The functionalName to set.
	 */
	public void setFunctionalName( String functionalName )
	{
		this.functionalName = functionalName.toUpperCase();
	}

	/**
	 * @return Returns the grossWeight.
	 */
	public float getGrossWeight( )
	{
		return grossWeight;
	}

	/**
	 * @param grossWeight
	 *            The grossWeight to set.
	 */
	public void setGrossWeight( float grossWeight )
	{
		this.grossWeight = grossWeight;
	}

	/**
	 * @return Returns the grossWeightUnit.
	 */
	public String getGrossWeightUnit( )
	{
		return grossWeightUnit;
	}

	/**
	 * @param grossWeightUnit
	 *            The grossWeightUnit to set.
	 */
	public void setGrossWeightUnit( String grossWeightUnit )
	{
		this.grossWeightUnit = grossWeightUnit.toUpperCase();
	}

	/**
	 * @return Returns the height.
	 */
	public float getHeight( )
	{
		return height;
	}

	/**
	 * @param height
	 *            The height to set.
	 */
	public void setHeight( float height )
	{
		this.height = height;
	}

	/**
	 * @return Returns the heightUnit.
	 */
	public String getHeightUnit( )
	{
		return heightUnit;
	}

	/**
	 * @param heightUnit
	 *            The heightUnit to set.
	 */
	public void setHeightUnit( String heightUnit )
	{
		this.heightUnit = heightUnit.toUpperCase();
	}

	/**
	 * @return Returns the id.
	 */
	public int getId( )
	{
		return id;
	}

	/**
	 * @param id
	 *            The id to set.
	 */
	public void setId( int id )
	{
		this.id = id;
	}

	/**
	 * @return Returns the invoiceUnit.
	 */
	public boolean isInvoiceUnit( )
	{
		return invoiceUnit;
	}

	/**
	 * @param invoiceUnit
	 *            The invoiceUnit to set.
	 */
	public void setInvoiceUnit( boolean invoiceUnit )
	{
		this.invoiceUnit = invoiceUnit;
	}

	/**
	 * @return Returns the itemsContainedInALayer.
	 */
	public int getItemsContainedInALayer( )
	{
		return itemsContainedInALayer;
	}

	/**
	 * @param itemsContainedInALayer
	 *            The itemsContainedInALayer to set.
	 */
	public void setItemsContainedInALayer( int itemsContainedInALayer )
	{
		this.itemsContainedInALayer = itemsContainedInALayer;
	}

	/**
	 * @return Returns the longDescription.
	 */
	public String getLongDescription( )
	{
		return longDescription;
	}

	/**
	 * @param longDescription
	 *            The longDescription to set.
	 */
	public void setLongDescription( String longDescription )
	{
		this.longDescription = longDescription.toUpperCase();
	}

	/**
	 * @return Returns the manufacturerName.
	 */
	public String getManufacturerName( )
	{
		return manufacturerName;
	}

	/**
	 * @param manufacturerName
	 *            The manufacturerName to set.
	 */
	public void setManufacturerName( String manufacturarName )
	{
		this.manufacturerName = manufacturarName.toUpperCase();
	}

	/**
	 * @return Returns the maximumTemperature.
	 */
	public float getMaximumTemperature( )
	{
		return maximumTemperature;
	}

	/**
	 * @param maximumTemperature
	 *            The maximumTemperature to set.
	 */
	public void setMaximumTemperature( float maximumTemperature )
	{
		this.maximumTemperature = maximumTemperature;
	}

	/**
	 * @return Returns the minimumTemperature.
	 */
	public float getMinimumTemperature( )
	{
		return minimumTemperature;
	}

	/**
	 * @param minimumTemperature
	 *            The minimumTemperature to set.
	 */
	public void setMinimumTemperature( float minimumTemperature )
	{
		this.minimumTemperature = minimumTemperature;
	}

	/**
	 * @return Returns the netContent.
	 */
	public float getNetContent( )
	{
		return netContent;
	}

	/**
	 * @param netContent
	 *            The netContent to set.
	 */
	public void setNetContent( float netContent )
	{
		this.netContent = netContent;
	}

	/**
	 * @return Returns the netContentUnit.
	 */
	public String getNetContentUnit( )
	{
		return netContentUnit;
	}

	/**
	 * @param netContentUnit
	 *            The netContentUnit to set.
	 */
	public void setNetContentUnit( String netContentUnit )
	{
		this.netContentUnit = netContentUnit.toUpperCase();
	}

	/**
	 * @return Returns the netWeight.
	 */
	public float getNetWeight( )
	{
		return netWeight;
	}

	/**
	 * @param netWeight
	 *            The netWeight to set.
	 */
	public void setNetWeight( float netWeight )
	{
		this.netWeight = netWeight;
	}

	/**
	 * @return Returns the netWeightUnit.
	 */
	public String getNetWeightUnit( )
	{
		return netWeightUnit;
	}

	/**
	 * @param netWeightUnit
	 *            The netWeightUnit to set.
	 */
	public void setNetWeightUnit( String netWeightUnit )
	{
		this.netWeightUnit = netWeightUnit.toUpperCase();
	}

	/**
	 * @return Returns the packagingType.
	 */
	public String getPackagingType( )
	{
		return packagingType;
	}

	/**
	 * @param packagingType
	 *            The packagingType to set.
	 */
	public void setPackagingType( String packagingType )
	{
		this.packagingType = packagingType.toUpperCase();
	}

	/**
	 * @return Returns the pharmaceuticalForm.
	 */
	public String getPharmaceuticalForm( )
	{
		return pharmaceuticalForm;
	}

	/**
	 * @param pharmaceuticalForm
	 *            The pharmaceuticalForm to set.
	 */
	public void setPharmaceuticalForm( String pharmaceuticalForm )
	{
		this.pharmaceuticalForm = pharmaceuticalForm.toUpperCase();
	}

	/**
	 * @return Returns the pieces.
	 */
	public int getPieces( )
	{
		return pieces;
	}

	/**
	 * @param pieces
	 *            The pieces to set.
	 */
	public void setPieces( int pieces )
	{
		this.pieces = pieces;
	}

	/**
	 * @return Returns the sanitaryRegistry.
	 */
	public String getSanitaryRegistry( )
	{
		return sanitaryRegistry;
	}

	/**
	 * @param sanitaryRegistry
	 *            The sanitaryRegistry to set.
	 */
	public void setSanitaryRegistry( String sanitaryRegistry )
	{
		this.sanitaryRegistry = sanitaryRegistry;
	}

	/**
	 * @return Returns the sanitaryRegistryDate.
	 */
	public Date getSanitaryRegistryDate( )
	{
		return sanitaryRegistryDate;
	}

	/**
	 * @param sanitaryRegistryDate
	 *            The sanitaryRegistryDate to set.
	 */
	public void setSanitaryRegistryDate( Date sanitaryRegistryDate )
	{
		this.sanitaryRegistryDate = sanitaryRegistryDate;
	}

	/**
	 * @return Returns the shortDescription.
	 */
	public String getShortDescription( )
	{
		return shortDescription;
	}

	/**
	 * @param shortDescription
	 *            The shortDescription to set.
	 */
	public void setShortDescription( String shortDescription )
	{
		this.shortDescription = shortDescription.toUpperCase();
	}

	/**
	 * @return Returns the size.
	 */
	public String getSize( )
	{
		return size;
	}

	/**
	 * @param size
	 *            The size to set.
	 */
	public void setSize( String size )
	{
		this.size = size.toUpperCase();
	}

	/**
	 * @return Returns the stackingWeightMaximum.
	 */
	public int getStackingWeightMaximum( )
	{
		return stackingWeightMaximum;
	}

	/**
	 * @param stackingWeightMaximum
	 *            The stackingWeightMaximum to set.
	 */
	public void setStackingWeightMaximum( int stackingWeightMaximum )
	{
		this.stackingWeightMaximum = stackingWeightMaximum;
	}

	/**
	 * @return Returns the style.
	 */
	public String getStyle( )
	{
		return style;
	}

	/**
	 * @param style
	 *            The style to set.
	 */
	public void setStyle( String style )
	{
		this.style = style.toUpperCase();
	}

	/**
	 * @return Returns the supplierGLN.
	 */
	public String getSupplierGLN( )
	{
		return supplierGLN;
	}

	/**
	 * @param supplierGLN
	 *            The supplierGLN to set.
	 */
	public void setSupplierGLN( String supplierGLN )
	{
		this.supplierGLN = supplierGLN;
	}

	/**
	 * @return Returns the tax.
	 */
	public float getTax( )
	{
		return tax;
	}

	/**
	 * @param tax
	 *            The tax to set.
	 */
	public void setTax( float tax )
	{
		this.tax = tax;
	}

	/**
	 * @return Returns the temperatureUnit.
	 */
	public String getTemperatureUnit( )
	{
		return temperatureUnit;
	}

	/**
	 * @param temperatureUnit
	 *            The temperatureUnit to set.
	 */
	public void setTemperatureUnit( String temperatureUnit )
	{
		this.temperatureUnit = temperatureUnit.toUpperCase();
	}

	/**
	 * @return Returns the variant.
	 */
	public String getVariant( )
	{
		return variant;
	}

	/**
	 * @param variant
	 *            The variant to set.
	 */
	public void setVariant( String variant )
	{
		this.variant = variant.toUpperCase();
	}

	/**
	 * @return Returns the width.
	 */
	public float getWidth( )
	{
		return width;
	}

	/**
	 * @param width
	 *            The width to set.
	 */
	public void setWidth( float width )
	{
		this.width = width;
	}

	/**
	 * @return Returns the widthUnit.
	 */
	public String getWidthUnit( )
	{
		return widthUnit;
	}

	/**
	 * @param widthUnit
	 *            The widthUnit to set.
	 */
	public void setWidthUnit( String widthUnit )
	{
		this.widthUnit = widthUnit.toUpperCase();
	}

	/**
	 * @return Returns the suplierId.
	 */
	public int getSupplierId( )
	{
		return supplierId;
	}

	/**
	 * @param suplierId
	 *            The suplierId to set.
	 */
	public void setSupplierId( int suplierId )
	{
		this.supplierId = suplierId;
	}

	/**
	 * @return Returns the image.
	 */
	public String getImage( )
	{
		return image;
	}

	/**
	 * @param image
	 *            The image to set.
	 */
	public void setImage( String image )
	{
		this.image = image;
	}

	/**
	 * @return Returns the status.
	 */
	public boolean isStatus( )
	{
		return status;
	}

	/**
	 * @param estado
	 *            The status to set.
	 */
	public void setStatus( boolean estado )
	{
		this.status = estado;
	}

	/**
	 * @return Returns the nurit.
	 */
	public boolean isNurit( )
	{
		return nurit;
	}

	/**
	 * @param nurit
	 *            The nurit to set.
	 */
	public void setNurit( boolean nurit )
	{
		this.nurit = nurit;
	}

	public static void main( String[] args )
	{
		SupplierProduct prod = new SupplierProduct();

		prod.setActivePrinciple("milo");
		prod.setBrand("nestle");
		prod.setCategory(1);
		prod.setCode("7702345145211");
		prod.setCodeSupplier("654321");
		prod.setColor("cafe");
		prod.setCompleteLayers(1);
		prod.setConsumerUnit(true);
		prod.setDepth(12.5F);
		prod.setDepthUnit("milimetro");
		prod.setDespatchUnit(true);
		prod.setFunctionalName("chocolate");
		prod.setGrossWeight(300);
		prod.setGrossWeightUnit("gramos");
		prod.setHeight(18);
		prod.setHeightUnit("centimet");
		prod.setImage("imagenes/7702345145211.jpg");
		prod.setInvoiceUnit(false);
		prod.setItemsContainedInALayer(1);
		prod.setLongDescription("bebida de chocolate en polvo");
		prod.setManufacturerName("nestle");
		prod.setMaximumTemperature(50);
		prod.setMinimumTemperature(5);
		prod.setNetContent(350);
		prod.setNetContentUnit("ml");
		prod.setNetWeight(250);
		prod.setNetWeightUnit("gramos");
		prod.setNurit(true);
		prod.setPackagingType("tarro");
		prod.setPieces(1);
		prod.setSanitaryRegistry("555555555");
		prod.setSanitaryRegistryDate(new Date(new java.util.Date().getTime()));
		prod.setShortDescription("milo");
		prod.setStackingWeightMaximum(5);
		prod.setStatus(true);
		prod.setSupplierGLN("7676");
		prod.setSupplierId(3);
		prod.setTax(16);
		prod.setTemperatureUnit("ºC");
		prod.setVariant("");
		prod.setWidth(50);
		prod.setWidthUnit("milimetr");

		Transaction t = new Transaction();
		prod.saveData(t);
		//System.out.println(t.execute());
		System.exit(0);

	}

	/**
	 * Retorna el hashcode que se usará como llave primaria en la tabla
	 */
	/*
	 * public int hashCode() { return ( int )( code.hashCode() +
	 * supplierGLN.hashCode() ); }
	 */

	/**
	 * Getter for property supplierName.
	 * 
	 * @return Value of property supplierName.
	 */
	public java.lang.String getSupplierName( )
	{
		return supplierName;
	}

	/**
	 * Setter for property supplierName.
	 * 
	 * @param supplierName
	 *            New value of property supplierName.
	 */
	public void setSupplierName( java.lang.String supplierName )
	{
		this.supplierName = supplierName.toUpperCase();
	}

	public static boolean changeStatus( Transaction t, int supplierProductId,
			int newStatus )
	{
		boolean response = true;
		String sql = "UPDATE producto_proveedor SET prod_prov_estado ="
				+ newStatus + " WHERE prod_prov_id=" + supplierProductId + ";";
		t.addSql(sql);
		return response;
	}

	public static Double getPriceInCommunity( int prodId, int commId )
	{
		Double price;
		/*
		 * String sql = "SELECT esca_prec_prod_precio FROM
		 * escala_precio_producto " + "WHERE comu_id=" + commId + " AND
		 * prod_prov_id=" + prodId + " AND esca_prec_prod_minimo>=1 AND
		 * esca_prec_prod_minimo <=2;"; System.out.println( sql );
		 * 
		 * try { Vector res = SQLUtilities.query( sql ); Hashtable data = (
		 * Hashtable )res.elementAt( 0 ); price = ( Double )data.get(
		 * "esca_prec_prod_precio" ); } catch( Exception e ) { price = new
		 * Double( 0.0 ); System.out.println( "Error buscando precio del
		 * producto en la comunidad --> " + e ); }
		 */
		try
		{
			PriceScale pr = new PriceScale( prodId, commId );
			price = ( Double ) ( ( ( Vector ) pr.getValues().elementAt( 0 ) ).elementAt( 3 ) );
		}
		catch (Exception e)
		{
                        price = new Double(0);
		}
		return price;
	}

	public static int getSupplierFromProduct( int prodId )
	{
		int provId = 0;
		String sql = "SELECT empr_id FROM producto_proveedor WHERE "
				+ "prod_prov_id=" + prodId + ";";
		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable data = (Hashtable) res.elementAt(0);
			provId = ((Integer) data.get("empr_id")).intValue();
		}
		catch (Exception e)
		{
			System.out.println("Error buscando el proveedor del producto");
		}
		return provId;
	}

	public static String getProductName( int prodId )
	{
		String name = "Producto";
		String sql = "SELECT prod_prov_descripcion_corta FROM producto_proveedor "
				+ "WHERE prod_prov_id=" + prodId + ";";
		try
		{
			Vector res = SQLUtilities.query(sql);
			Hashtable data = (Hashtable) res.elementAt(0);
			name = (String) data.get("prod_prov_descripcion_corta");
		}
		catch (Exception e)
		{
			System.out.println("Error buscando nombre del producto --> " + e);
		}
		return name;
	}
        
        /**
         * Getter for property basePrice.
         * @return Value of property basePrice.
         */
        public double getBasePrice() {
            return basePrice;
        }
        
        /**
         * Setter for property basePrice.
         * @param basePrice New value of property basePrice.
         */
        public void setBasePrice(double basePrice) {
            this.basePrice = basePrice;
        }
        
}