/*
 * Created on 16/08/2004
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.fenalco.utilities.lists;

import java.util.Enumeration;
import java.util.Vector;

import com.fenalco.entities.DataAccess;
import com.fenalco.entities.Order;
import com.fenalco.entities.OrderProduct;
import com.fenalco.entities.SupplierProduct;

/**
 * @author Andrés
 *
 * Esta clase representa la vista de un pedido que ve el minorista
 * es decir, la vista de un listado de objetos tipo OrderProduct
 */
public class OrderViewShopKeeper implements ListView
{
    /**
     * El listado (modelo o documento)
     */    
    Order order;
    /**
     * Como el listado es un hashtable, aqui almaceno los keys
     */    
    private Enumeration keys;
    /**
     * La llave actual que se está trabajando, se usa para tener acceso a los objetos
     * que se deben mostrar de ese elemento de la lista
     */    
    private Object actualKey;
    /**
     * valor actual en el que se está trabajando, es decir, la fila actual de la lista
     */    
    private OrderProduct actualValue;
    /**
     * aqui se almacenan los datos que se van a mostrar en las diferentes columnas
     * de la lista
     */    
    private Vector valuesToShow;
    /**
     * contador que indica en que columna voy
     */ 	   
    private int count;
    
    public OrderViewShopKeeper( Order o )
    {
    	order = o;
    	keys = order.getProducts().keys();
    }


	/* (non-Javadoc)
	 * @see com.fenalco.utilities.lists.ListView#move()
	 */
	public boolean move()
	{
        boolean res = false;
        if( keys.hasMoreElements() )
        {
            actualKey = keys.nextElement();
            actualValue = ( OrderProduct )order.getProducts().get( actualKey );
            
            valuesToShow = new Vector();
            count = 0;
             
            SupplierProduct prod = getProduct( actualValue.getSupplierProductId() );
            
            // siempre el primer elemento que mando es el id del objeto (se use o no)
            valuesToShow.addElement( actualValue.getTableId() + "" );
            valuesToShow.addElement( prod.getCode() );
            valuesToShow.addElement( prod.getShortDescription() );
            valuesToShow.addElement( prod.getSupplierName() );
            valuesToShow.addElement( prod.getCategoryName() );
            valuesToShow.addElement( DataAccess.getCurrency(actualValue.getOrderPrice())+ "" );
            valuesToShow.addElement( actualValue.getQuantity() + "" );
            res = true;
        }
        return res;
	}

	/* (non-Javadoc)
	 * @see com.fenalco.utilities.lists.ListView#nextElement()
	 */
	public Object nextElement()
	{
        Object res = null;
        if( valuesToShow != null && valuesToShow.size() > 0)
        {
            if( count < valuesToShow.size() )
            {
                res = valuesToShow.elementAt( count++ );
            }
        }
        return res;
	}
	
	private SupplierProduct getProduct( int id )
	{
		SupplierProduct prod = new SupplierProduct(  );
                prod.loadMinimalData(id);
		return prod;
	}
        
        public String getDate(){
            return this.order.getDate().toString();
        }
        
        public String getTotal(){
            return DataAccess.getCurrency(this.order.getValue());
        }
}
