BasketItemBean.java

package sk.iway.iwcm.components.basket;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.servlet.http.HttpServletRequest;

import sk.iway.iwcm.common.CloudToolsForCore;
import sk.iway.iwcm.doc.DocDB;
import sk.iway.iwcm.doc.DocDetails;

/**
 *  BasketItemBean.java - Polozka nakupneho kosika
 *
 *@Title        webjet7
 *@Company      Interway s.r.o. (www.interway.sk)
 *@Copyright    Interway s.r.o. (c) 2001-2010
 *@author       $Author: murbanec $
 *@version      $Revision: 1.5 $
 *@created      Date: 9.11.2005 15:06:05
 *@modified     $Date: 2009/11/25 16:34:07 $
 */

@Entity
@Table(name="basket_item")
public class BasketItemBean implements Serializable
{
	private static final long serialVersionUID = 1281182025300889704L;

	private transient DocDetails doc;

	@Id
	@Column(name="basket_item_id")
	@GeneratedValue(generator="WJGen_basket_item")
   @TableGenerator(name="WJGen_basket_item", pkColumnValue="basket_item")
	private int basketItemId;

	@Column(name="browser_id")
	private Long browserId;

	@Column(name="logged_user_id")
	private int loggedUserId;

	@Column(name="item_id")
	private int itemId;

	@Column(name="item_title")
	private String itemTitle;

	@Column(name="item_part_no")
	private String itemPartNo;

	@Column(name="item_price")
	private Double itemPrice;

	@Column(name="item_vat")
	private Double itemVat;

	@Column(name="item_qty")
	private Integer itemQty;

	@Column(name="item_note")
	private String itemNote;

	@Column(name="date_insert")
	@Temporal(TemporalType.TIMESTAMP)
	private Date dateInsert;

	@ManyToOne(cascade=CascadeType.ALL)
	@JoinColumn(name="basket_invoice_id")
	BasketInvoiceBean basketInvoice;

	@Column(name="domain_id")
	private int domainId;

	public double getItemPriceQty()
	{
		return(getItemQty().intValue() * getItemPrice().doubleValue());
	}

	/**
	 * Vrati cenu jednej polozky vratane DPH
	 * @return
	 */
	public double getItemPriceVat()
	{
		//TODO: vypocet DPH
		double vat = getItemVat().doubleValue();
		vat = (vat / 100) + 1;

		return(getItemPrice().doubleValue() * vat);
	}

	public boolean itemAlreadyPurchased()
	{
		return getBasketItemId() > 0;
	}

	/**
	 * Vrati cenu vratane DPH * pocet poloziek
	 * @return
	 */
	public double getItemPriceVatQty()
	{
		return(getItemQty().intValue() * getItemPriceVat());
	}

	public String getTitle()
	{
		if (itemAlreadyPurchased())
			return getItemTitle();
		return(getDoc().getTitle());
	}

	public synchronized DocDetails getDoc()
	{
		if (doc == null)
		{
			DocDB docDB = DocDB.getInstance();
			doc = docDB.getDoc(getItemId());
		}
		return(doc);
	}

	//------------------------PREPOCITAVANIE NA LOKALNE CENY POUZIVATELA-----------------------
	/**
	 * Metody na prepocitavanie cien do inych mien. Metody sa vyskytuju v roznych obmenach:
	 * getLocalPrice - vypocita cenu bez DPH
	 * getItemLocalPriceQty - vypocita cenu bez DPH krat pocet poloziek v kosiku
	 * getLocalPriceVat - vypocita cenu aj s DPH
	 * getItemLocalPriceVatQty - vypocita cenu s DPH krat pocet poloziek v kosiku
	 *
	 * Tieto metody sa vyskytuju v dvoch obmenach - s a bez zadanej meny. Ak sa mena nezada,
	 * vezme sa vychodzia mena pouzivatela.
	 */

	public double getLocalPrice(HttpServletRequest request, String currency)
	{
		if (itemAlreadyPurchased())
			return getItemPrice();
		return getDoc().getLocalPriceDouble(request,currency);
	}

	public double getLocalPrice(HttpServletRequest request)
	{
		if (itemAlreadyPurchased())
			return getItemPrice();
		return getDoc().getLocalPriceDouble(request);
	}

	public double getItemLocalPriceQty(HttpServletRequest request, String currency)
	{
		return getItemQty()*getLocalPrice(request, currency);
	}

	public double getItemLocalPriceQty(HttpServletRequest request)
	{
		return getItemQty()*getLocalPrice(request);
	}

	public double getItemLocalPriceVatQty(HttpServletRequest request, String currency)
	{
		double vat = getItemVat().doubleValue();
		vat = (vat / 100) + 1;
		return vat*getItemQty()*getLocalPrice(request, currency);
	}

	public double getLocalPriceVat(HttpServletRequest request, String currency)
	{
		double vat = getItemVat().doubleValue();
		vat = (vat / 100.0) + 1.0;
		return vat*getLocalPrice(request, currency);
	}

	public double getLocalPriceVat(HttpServletRequest request)
	{
		double vat = getItemVat().doubleValue();
		vat = (vat / 100.0) + 1.0;
		return vat*getLocalPrice(request);
	}

	public double getItemLocalPriceVatQty(HttpServletRequest request)
	{
		return getItemLocalPriceVatQty(request, BasketDB.getDisplayCurrency(request));
	}



	/**
	 * ------- getters & setters
	 *
	 *
	 */

	/**
	 *	Vrati identifikator faktury, ku ktorej patri nakupna polozka
	 */
	public int getBasketInvoiceId()
	{
		if (basketInvoice == null)
			return 0;
		return basketInvoice.getBasketInvoiceId();
	}

	public int getBasketItemId()
	{
		return basketItemId;
	}

	public void setBasketItemId(int basketItemId)
	{
		this.basketItemId = basketItemId;
	}

	public Long getBrowserId()
	{
		return browserId;
	}

	public void setBrowserId(Long browserId)
	{
		this.browserId = browserId;
	}

	public int getLoggedUserId()
	{
		return loggedUserId;
	}

	public void setLoggedUserId(int loggedUserId)
	{
		this.loggedUserId = loggedUserId;
	}

	public int getItemId()
	{
		return itemId;
	}

	public void setItemId(int itemId)
	{
		this.itemId = itemId;
	}

	public String getItemTitle()
	{
		return itemTitle;
	}

	public void setItemTitle(String itemTitle)
	{
		this.itemTitle = itemTitle;
	}

	public String getItemPartNo()
	{
		return itemPartNo;
	}

	public void setItemPartNo(String itemPartNo)
	{
		this.itemPartNo = itemPartNo;
	}

	public Double getItemPrice()
	{
		return itemPrice;
	}

	public void setItemPrice(Double itemPrice)
	{
		this.itemPrice = itemPrice;
	}

	public Double getItemVat()
	{
		return itemVat;
	}

	public void setItemVat(Double itemVat)
	{
		this.itemVat = itemVat;
	}

	public Integer getItemQty()
	{
		return itemQty;
	}

	public void setItemQty(Integer itemQty)
	{
		this.itemQty = itemQty;
	}

	public String getItemNote()
	{
		return itemNote;
	}

	public void setItemNote(String itemNote)
	{
		this.itemNote = itemNote;
	}

	public Date getDateInsert()
	{
		return dateInsert == null ? null : (Date) dateInsert.clone();
	}

	public void setDateInsert(Date dateInsert)
	{
		this.dateInsert = dateInsert == null ? null : (Date) dateInsert.clone();
	}

	public BasketInvoiceBean getBasketInvoice()
	{
		return basketInvoice;
	}

	public void setBasketInvoice(BasketInvoiceBean basketInvoice)
	{
		this.basketInvoice = basketInvoice;
	}


	@Override
	public String toString()
	{
		return String.format("%dx%s", getItemQty(), getItemTitle());
	}

	//public int getDomainId() {
	//	return domainId;
	//}

	//public void setDomainId(int domainId) {
	//	this.domainId = domainId;
	//}

	/**
	 * Vrati aktualnu domainId
	 * @return
	 */
	public int getDomainId() {
		return domainId;
		//return CloudToolsForCore.getDomainId();
	}

	/**
	 * Force nastavi objektu domainId aktualnej domeny
	 *
	 */
	public void setDomainId(int domainId) {
		//this.domainId = domainId;
		this.domainId = CloudToolsForCore.getDomainId();
	}

}