<?php

namespace OfficeBrain\Bundle\QuoteBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Doctrine\Common\Collections\ArrayCollection;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Exclude;
/**
 * QuoteItemLine
 *
 * @ORM\Table(name="tbl_quote_item_line", options={"type"="InnoDB","charset"="utf8","collate"="utf8_unicode_ci"})
 * @ORM\Entity(repositoryClass="OfficeBrain\Bundle\QuoteBundle\Entity\QuoteItemLineRepository")
 */
class QuoteItemLine
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="bigint",length=20 ,options={"unsigned"=true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     * @ORM\ManyToOne(targetEntity="QuoteMaster", inversedBy="quoteItemLine")  
     * @ORM\JoinColumn(name="quote_master_id", referencedColumnName="id")
     */
    private $quoteMasterId;

    /**
     * @var integer
     *
     * @ORM\Column(name="product_id", type="bigint",length=20 ,options={"unsigned"=true}, nullable=true)
     */
    private $productId;

    /**
     * @var boolean
     *
     * @ORM\Column(name="is_paper_proof", type="boolean",options={"default" = false}, nullable=true)
     */
    private $isPaperProof = false;
    
    /**
     * @var boolean
     *
     * @ORM\Column(name="is_product_proof", type="boolean",options={"default" = false}, nullable=true)
     */
    private $isProductProof = false;

    /**
     * @var string
     *
     * @ORM\Column(name="email_for_paper_proof", type="string", length=255, nullable=true)
     */
    private $emailForPaperProof;

    /**
     * @var integer
     *
     * @ORM\Column(name="supplier_id", type="bigint",length=20 ,options={"unsigned"=true}, nullable=true)
     */
    private $supplierId;

    /**
     * @var integer
     *
     * @ORM\Column(name="currency_id", type="bigint",length=20 ,options={"unsigned"=true}, nullable=true)
     */
    private $currencyId;

    /**
     * @var string
     *
     * @ORM\Column(name="currency_name", type="string", length=255, nullable=true)
     */
    private $currencyName;

    /**
     * @var string
     *
     * @ORM\Column(name="currency_symbol", type="string", length=255, nullable=true)
     */
    private $currencySymbol;

    /**
     * @var string
     *
     * @ORM\Column(name="product_sku", type="string", length=255, nullable=true)
     */
    private $productSku;

    /**
     * @var string
     *
     * @ORM\Column(name="product_slug", type="string", length=255, nullable=true)
     */
    private $productSlug;

    /**
     * @var string
     *
     * @ORM\Column(name="product_thumb_image", type="string", length=255, nullable=true)
     */
    private $productThumbImage;

    /**
     * @var string
     *
     * @ORM\Column(name="product_image", type="string", length=255, nullable=true)
     */
    private $productImage;

    /**
     * @var string
     *
     * @ORM\Column(name="product_note", type="string", length=255, nullable=true)
     */
    private $productNote;

    /**
     * @var boolean
     *
     * @ORM\Column(name="is_send_review_link", type="boolean",options={"default" = false}, nullable=true)
     */
    private $isSendReviewLink = false;

    /**
     * @var boolean
     *
     * @ORM\Column(name="is_feedback_posted", type="boolean",options={"default" = false}, nullable=true)
     */
    private $isFeedbackPosted = false;

    /**
     * @var boolean
     *
     * @ORM\Column(name="is_complete", type="boolean",options={"default" = false}, nullable=true)
     */
    private $isComplete = false;

    
    /**
     * @var array
     *
     * @ORM\Column(name="product_comments",type="text", nullable=true)
     */
    private $productComments;
    
    /**
     * @var array
     *
     * @ORM\Column(name="order_type",type="string", length=255,nullable=true)
     */
    private $orderType;

    /**
     * @var boolean
     *
     * @ORM\Column(name="sequence_num", type="bigint",length=20 ,options={"unsigned"=true}, nullable=true)
     */
    private $sequenceNum =0;

    /**
     * @var boolean
     *
     * @ORM\Column(name="display_sku", type="boolean",options={"default" = true}, nullable=true)
     */
    private $displaySku = true;
    
    /**
     * @var boolean
     *
     * @ORM\Column(name="display_qty", type="boolean",options={"default" = true}, nullable=true)
     */
    private $displayQty = true;
    
    /**
     * @var string
     *
     * @ORM\Column(name="negotation_status", type="string", length=255,nullable=true)
     */
    private $negotationStatus;
    
    /**
     * @var string
     *
     * @ORM\Column(name="item_line_amount", type="decimal",precision=11, scale=2, options={"default" = 0.00})
     */
    private $itemLineAmount = '0.00';
    
    /**
     * @var string
     *
     * @ORM\Column(name="unit_price", type="decimal",precision=11, scale=2, options={"default" = 0.00})
     */
    private $unitPrice = '0.00';
    
    /**
     * @var string
     *
     * @ORM\Column(name="item_line_total", type="decimal",precision=11, scale=2, options={"default" = 0.00})
     */
    private $itemLineTotal = '0.00';
    
    /**
     * @var string
     *
     * @ORM\Column(name="item_line_discount", type="decimal",precision=11, scale=2, options={"default" = 0.00})
     */
    private $itemLineDiscount = '0.00';
    
    /**
     * @var text
     *
     * @ORM\Column(name="product_detail_configuration", type="text", nullable=true)
     */
    private $productDetailConfiguration;

    /**
     * @ORM\OneToMany(targetEntity="QuoteProductImprintArea", mappedBy="quoteItemLineId", cascade={"remove"})
     */
    private $quoteProductImprintArea;
    
    /**
     * @ORM\OneToMany(targetEntity="QuoteProductCharges", mappedBy="quoteItemLineId", cascade={"remove"})
     */
    private $quoteProductCharges;
    
    /**
     * @ORM\OneToMany(targetEntity="QuoteProductAdditionalCharges", mappedBy="quoteItemLineId", cascade={"remove"})
     */
    private $quoteProductAdditionalCharges;

    /**
     * @ORM\OneToMany(targetEntity="QuoteProduct", mappedBy="quoteItemLineId", cascade={"remove"})
     */
    private $quoteProduct;
    
    /**
     * @var string
     *
     * @ORM\Column(name="extra_color", type="string", length=255,nullable=true)
     */
    private $extraColor;

    public function __construct() {
    
    	$this ->quoteProductImprintArea = new ArrayCollection();
    	$this ->quoteProductCharges = new ArrayCollection();
    	$this ->quoteProductAdditionalCharges = new ArrayCollection();
    	$this ->quoteProduct = new ArrayCollection();
    }
    
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set quoteMasterId
     *
     * @param integer $quoteMasterId
     * @return QuoteItemLine
     */
    public function setQuoteMasterId($quoteMasterId)
    {
        $this->quoteMasterId = $quoteMasterId;

        return $this;
    }

    /**
     * Get quoteMasterId
     *
     * @return integer 
     */
    public function getQuoteMasterId()
    {
        return $this->quoteMasterId;
    }

    /**
     * Set productId
     *
     * @param integer $productId
     * @return QuoteItemLine
     */
    public function setProductId($productId)
    {
        $this->productId = $productId;

        return $this;
    }

    /**
     * Get productId
     *
     * @return integer 
     */
    public function getProductId()
    {
        return $this->productId;
    }

    /**
     * Set isPaperProof
     *
     * @param boolean $isPaperProof
     * @return QuoteItemLine
     */
    public function setIsPaperProof($isPaperProof)
    {
        $this->isPaperProof = $isPaperProof;

        return $this;
    }

    /**
     * Get isPaperProof
     *
     * @return boolean 
     */
    public function getIsPaperProof()
    {
        return $this->isPaperProof;
    }

    /**
     * Set isProductProof
     *
     * @param boolean $isProductProof
     * @return QuoteItemLine
     */
    public function setIsProductProof($isProductProof)
    {
        $this->isProductProof = $isProductProof;

        return $this;
    }

    /**
     * Get isProductProof
     *
     * @return boolean 
     */
    public function getIsProductProof()
    {
        return $this->isProductProof;
    }

    /**
     * Set emailForPaperProof
     *
     * @param string $emailForPaperProof
     * @return QuoteItemLine
     */
    public function setEmailForPaperProof($emailForPaperProof)
    {
        $this->emailForPaperProof = $emailForPaperProof;

        return $this;
    }

    /**
     * Get emailForPaperProof
     *
     * @return string 
     */
    public function getEmailForPaperProof()
    {
        return $this->emailForPaperProof;
    }

    /**
     * Set supplierId
     *
     * @param integer $supplierId
     * @return QuoteItemLine
     */
    public function setSupplierId($supplierId)
    {
        $this->supplierId = $supplierId;

        return $this;
    }

    /**
     * Get supplierId
     *
     * @return integer 
     */
    public function getSupplierId()
    {
        return $this->supplierId;
    }

    /**
     * Set currencyId
     *
     * @param integer $currencyId
     * @return QuoteItemLine
     */
    public function setCurrencyId($currencyId)
    {
        $this->currencyId = $currencyId;

        return $this;
    }

    /**
     * Get currencyId
     *
     * @return integer 
     */
    public function getCurrencyId()
    {
        return $this->currencyId;
    }

    /**
     * Set currencyName
     *
     * @param string $currencyName
     * @return QuoteItemLine
     */
    public function setCurrencyName($currencyName)
    {
        $this->currencyName = $currencyName;

        return $this;
    }

    /**
     * Get currencyName
     *
     * @return string 
     */
    public function getCurrencyName()
    {
        return $this->currencyName;
    }

    /**
     * Set currencySymbol
     *
     * @param string $currencySymbol
     * @return QuoteItemLine
     */
    public function setCurrencySymbol($currencySymbol)
    {
        $this->currencySymbol = $currencySymbol;

        return $this;
    }

    /**
     * Get currencySymbol
     *
     * @return string 
     */
    public function getCurrencySymbol()
    {
        return $this->currencySymbol;
    }

    /**
     * Set productSku
     *
     * @param string $productSku
     * @return QuoteItemLine
     */
    public function setProductSku($productSku)
    {
        $this->productSku = $productSku;

        return $this;
    }

    /**
     * Get productSku
     *
     * @return string 
     */
    public function getProductSku()
    {
        return $this->productSku;
    }

    /**
     * Set productSlug
     *
     * @param string $productSlug
     * @return QuoteItemLine
     */
    public function setProductSlug($productSlug)
    {
        $this->productSlug = $productSlug;

        return $this;
    }

    /**
     * Get productSlug
     *
     * @return string 
     */
    public function getProductSlug()
    {
        return $this->productSlug;
    }

    /**
     * Set productThumbImage
     *
     * @param string $productThumbImage
     * @return QuoteItemLine
     */
    public function setProductThumbImage($productThumbImage)
    {
        $this->productThumbImage = $productThumbImage;

        return $this;
    }

    /**
     * Get productThumbImage
     *
     * @return string 
     */
    public function getProductThumbImage()
    {
        return $this->productThumbImage;
    }

    /**
     * Set productImage
     *
     * @param string $productImage
     * @return QuoteItemLine
     */
    public function setProductImage($productImage)
    {
        $this->productImage = $productImage;

        return $this;
    }

    /**
     * Get productImage
     *
     * @return string 
     */
    public function getProductImage()
    {
        return $this->productImage;
    }

    /**
     * Set productNote
     *
     * @param string $productNote
     * @return QuoteItemLine
     */
    public function setProductNote($productNote)
    {
        $this->productNote = $productNote;

        return $this;
    }

    /**
     * Get productNote
     *
     * @return string 
     */
    public function getProductNote()
    {
        return $this->productNote;
    }

    /**
     * Set isSendReviewLink
     *
     * @param boolean $isSendReviewLink
     * @return QuoteItemLine
     */
    public function setIsSendReviewLink($isSendReviewLink)
    {
        $this->isSendReviewLink = $isSendReviewLink;

        return $this;
    }

    /**
     * Get isSendReviewLink
     *
     * @return boolean 
     */
    public function getIsSendReviewLink()
    {
        return $this->isSendReviewLink;
    }

    /**
     * Set isFeedbackPosted
     *
     * @param boolean $isFeedbackPosted
     * @return QuoteItemLine
     */
    public function setIsFeedbackPosted($isFeedbackPosted)
    {
        $this->isFeedbackPosted = $isFeedbackPosted;

        return $this;
    }

    /**
     * Get isFeedbackPosted
     *
     * @return boolean 
     */
    public function getIsFeedbackPosted()
    {
        return $this->isFeedbackPosted;
    }
    
    /**
     * Set isComplete
     *
     * @param boolean $isComplete
     * @return QuoteItemLine
     */
    public function setIsComplete($isComplete)
    {
    	$this->isComplete = $isComplete;
    
    	return $this;
    }
    
    /**
     * Get isComplete
     *
     * @return boolean
     */
    public function getIsComplete()
    {
    	return $this->isComplete;
    }

    /**
     * Set productComments
     *
     * @param array $productComments
     * @return QuoteItemLine
     */
    public function setProductComments($productComments)
    {
        $this->productComments = $productComments;

        return $this;
    }

    /**
     * Get productComments
     *
     * @return array 
     */
    public function getProductComments()
    {
        return $this->productComments;
    }

    /**
     * Set orderType
     *
     * @param array $orderType
     * @return QuoteItemLine
     */
    public function setOrderType($orderType)
    {
    	$this->orderType = $orderType;
    
    	return $this;
    }
    
    /**
     * Get orderType
     *
     * @return array
     */
    public function getOrderType()
    {
    	return $this->orderType;
    }
        
    /**
     * Set sequenceNum
     *
     * @param boolean $sequenceNum
     * @return QuoteItemLine
     */
    public function setSequenceNum($sequenceNum)
    {
        $this->sequenceNum = $sequenceNum;

        return $this;
    }

    /**
     * Get sequenceNum
     *
     * @return boolean 
     */
    public function getSequenceNum()
    {
        return $this->sequenceNum;
    }

    /**
     * Set displaySku
     *
     * @param boolean $displaySku
     * @return QuoteItemLine
     */
    public function setDisplaySku($displaySku)
    {
        $this->displaySku = $displaySku;

        return $this;
    }

    /**
     * Get displaySku
     *
     * @return boolean 
     */
    public function getDisplaySku()
    {
        return $this->displaySku;
    }
    
    /**
     * Set displaySku
     *
     * @param boolean $displaySku
     * @return QuoteItemLine
     */
    public function setDisplayQty($displayQty)
    {
    	$this->displayQty = $displayQty;
    
    	return $this;
    }
    
    /**
     * Get displaySku
     *
     * @return boolean
     */
    public function getDisplayQty()
    {
    	return $this->displayQty;
    }

    /**
     * Add quoteProductImprintArea
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductImprintArea $quoteProductImprintArea
     * @return QuoteItemLine
     */
    public function addQuoteProductImprintArea(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductImprintArea $quoteProductImprintArea)
    {
        $this->quoteProductImprintArea[] = $quoteProductImprintArea;

        return $this;
    }

    /**
     * Remove quoteProductImprintArea
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductImprintArea $quoteProductImprintArea
     */
    public function removeQuoteProductImprintArea(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductImprintArea $quoteProductImprintArea)
    {
        $this->quoteProductImprintArea->removeElement($quoteProductImprintArea);
    }

    /**
     * Get quoteProductImprintArea
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getQuoteProductImprintArea()
    {
        return $this->quoteProductImprintArea;
    }

    /**
     * Add quoteProductCharges
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductCharges $quoteProductCharges
     * @return QuoteItemLine
     */
    public function addQuoteProductCharge(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductCharges $quoteProductCharges)
    {
        $this->quoteProductCharges[] = $quoteProductCharges;

        return $this;
    }

    /**
     * Remove quoteProductCharges
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductCharges $quoteProductCharges
     */
    public function removeQuoteProductCharge(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductCharges $quoteProductCharges)
    {
        $this->quoteProductCharges->removeElement($quoteProductCharges);
    }

    /**
     * Get quoteProductCharges
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getQuoteProductCharges()
    {
        return $this->quoteProductCharges;
    }

    /**
     * Add quoteProduct
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProduct $quoteProduct
     * @return QuoteItemLine
     */
    public function addQuoteProduct(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProduct $quoteProduct)
    {
        $this->quoteProduct[] = $quoteProduct;

        return $this;
    }

    /**
     * Remove quoteProduct
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProduct $quoteProduct
     */
    public function removeQuoteProduct(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProduct $quoteProduct)
    {
        $this->quoteProduct->removeElement($quoteProduct);
    }

    /**
     * Get quoteProduct
     *
     * @return \Doctrine\Common\Collections\Collection 
     */
    public function getQuoteProduct()
    {
        return $this->quoteProduct;
    }

    /**
     * Set negotationStatus
     *
     * @param string $negotationStatus
     * @return QuoteItemLine
     */
    public function setNegotationStatus($negotationStatus)
    {
        $this->negotationStatus = $negotationStatus;

        return $this;
    }

    /**
     * Get negotationStatus
     *
     * @return string 
     */
    public function getNegotationStatus()
    {
        return $this->negotationStatus;
    }
    
    public function setfieldMethod($fieldName, $fieldValue) {
    	 
    	$this->$fieldName = $fieldValue;
    	 
    	return  $this->$fieldName;
    }

    /**
     * Add quoteProductAdditionalCharge
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductAdditionalCharges $quoteProductAdditionalCharge
     *
     * @return QuoteItemLine
     */
    public function addQuoteProductAdditionalCharge(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductAdditionalCharges $quoteProductAdditionalCharge)
    {
        $this->quoteProductAdditionalCharges[] = $quoteProductAdditionalCharge;

        return $this;
    }

    /**
     * Remove quoteProductAdditionalCharge
     *
     * @param \OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductAdditionalCharges $quoteProductAdditionalCharge
     */
    public function removeQuoteProductAdditionalCharge(\OfficeBrain\Bundle\QuoteBundle\Entity\QuoteProductAdditionalCharges $quoteProductAdditionalCharge)
    {
        $this->quoteProductAdditionalCharges->removeElement($quoteProductAdditionalCharge);
    }

    /**
     * Get quoteProductAdditionalCharges
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getQuoteProductAdditionalCharges()
    {
        return $this->quoteProductAdditionalCharges;
    }

    /**
     * Set itemLineTotal
     *
     * @param string $itemLineTotal
     *
     * @return QuoteItemLine
     */
    public function setItemLineTotal($itemLineTotal)
    {
        $this->itemLineTotal = $itemLineTotal;

        return $this;
    }

    /**
     * Get itemLineTotal
     *
     * @return string
     */
    public function getItemLineTotal()
    {
        return $this->itemLineTotal;
    }

    /**
     * Set itemLineDiscount
     *
     * @param string $itemLineDiscount
     *
     * @return QuoteItemLine
     */
    public function setItemLineDiscount($itemLineDiscount)
    {
        $this->itemLineDiscount = $itemLineDiscount;

        return $this;
    }

    /**
     * Get itemLineDiscount
     *
     * @return string
     */
    public function getItemLineDiscount()
    {
        return $this->itemLineDiscount;
    }

    /**
     * Set itemLineAmount
     *
     * @param string $itemLineAmount
     *
     * @return QuoteItemLine
     */
    public function setItemLineAmount($itemLineAmount)
    {
        $this->itemLineAmount = $itemLineAmount;

        return $this;
    }

    /**
     * Get itemLineAmount
     *
     * @return string
     */
    public function getItemLineAmount()
    {
        return $this->itemLineAmount;
    }

    /**
     * Set unitPrice
     *
     * @param string $unitPrice
     *
     * @return QuoteItemLine
     */
    public function setUnitPrice($unitPrice)
    {
        $this->unitPrice = $unitPrice;

        return $this;
    }

    /**
     * Get unitPrice
     *
     * @return string
     */
    public function getUnitPrice()
    {
        return $this->unitPrice;
    }
    
    /**
     * Set productDetailConfiguration
     *
     * @param string $productDetailConfiguration
     * @return PreAddToCart
     */
    public function setProductDetailConfiguration($productDetailConfiguration)
    {
    	$this->productDetailConfiguration = $productDetailConfiguration;
    
    	return $this;
    }
    
    /**
     * Get productDetailConfiguration
     *
     * @return string
     */
    public function getProductDetailConfiguration()
    {
    	return $this->productDetailConfiguration;
    }
    
    /**
     * Set extraColor
     *
     * @param string $extraColor
     * @return OrderItemLine
     */
    public function setExtraColor($extraColor)
    {
    	$this->extraColor = $extraColor;
    
    	return $this;
    }
    
    /**
     * Get extraColor
     *
     * @return string
     */
    public function getExtraColor()
    {
    	return $this->extraColor;
    }
}
