<?php

namespace OfficeBrain\Bundle\EcatalogueBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\Common\Collections\ArrayCollection;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Exclude;
use Doctrine\Common\Collections\Collection;

/**
 * Ecatalogue
 *
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 * @ORM\Table("tbl_virtual_catalogues")
 * @ORM\Entity(repositoryClass="OfficeBrain\Bundle\EcatalogueBundle\Entity\EcatalogueRepository")
 * @ORM\HasLifecycleCallbacks
 */

class Ecatalogue
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;
    
    /**
     * @var integer
     *
     * @ORM\Column(name="country_id", type="integer")
     * @Assert\NotBlank(message="Country Can not Blank")
     */
    private $countryId;
    
    /**
     * @ORM\Column(type="text", name="category")
     */
    protected $category;
    
    /**
     * Bidirectional (OWNING SIDE - FK)
     *
     * @ORM\ManyToOne(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\User", inversedBy="ecatalogueUser")
     * @ORM\JoinColumn(name="user_id", nullable=true)

     */
    protected $user;
    
    /**
     * Bidirectional (OWNING SIDE - FK)
     *
     * @ORM\ManyToOne(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\User", inversedBy="ecatalogueSupplier")
     * @ORM\JoinColumn(name="supplier_id", nullable=true)
     * @Assert\NotBlank(message = "admin.eatalogue.supplier.not_blank")
     */
    protected $supplier;
    
    /**
     * @ORM\Column(type="string", name="user_type", length=50,nullable=true)
     */
    protected $userType;
    
    /**
     * @ORM\OneToMany(targetEntity="EcatalogueLanguage", mappedBy="ecatalogueId", cascade={"all"})
     */
    protected $ecatalogueLanguage;
    
    
    /**
     * @ORM\Column(type="string", name="status", length=50, options={"default" = "0"})
     * @Assert\NotBlank(message="admin.not_blank")
     */
    protected $status;
    
    /**
     * @var datetime
     *
     * @Gedmo\Timestampable()
     * @ORM\Column(name="created_at",type="datetime",nullable=true)
     */
    protected $createdAt;
    
    /**
     * @var datetime
     *
     * @Gedmo\Timestampable()
     * @ORM\Column( name="updated_at", type="datetime",nullable=true)
     */
    protected $updatedAt;
    
    
    /**
     * @var datetime
     *
     * @ORM\Column(name="deleted_at",type="datetime",  nullable=true)
     */
    protected $deletedAt;
    
    /**
     * @var integer
     * @ORM\Column(name="created_uid", type="bigint" ,length=20 ,options={"unsigned"=true},nullable=true)
     */
    private $createdUid;
    
    /**
     * @var integer
     * @ORM\Column(name="updated_uid", type="bigint" ,length=20 ,options={"unsigned"=true},nullable=true)
     */
    private $updatedUid;
    
    /**
     * @var integer
     * @ORM\Column(name="deleted_uid", type="bigint" ,length=20 ,options={"unsigned"=true},nullable=true)
     */
    private $deletedUid;
    
    /**
     * @var integer
     *
     * @ORM\Column(name="instance_id", type="integer")
     */
    private $instanceId;
    
    /**
     * @var string
     *
     * @ORM\Column(name="instance_type", type="string", length=255)
     */
    private $instanceType;
    
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="start_date", type="datetime", nullable=true)
     */
    private $startDate;
    
    /**
     * @var \DateTime
     *
     * @ORM\Column(name="end_date", type="datetime", nullable=true)
     */
    private $endDate;
    
    /**
     * Bidirectional (INVERSE SIDE)
     *
     * @ORM\OneToMany(targetEntity="PrioritizeCatalogue", mappedBy="catalogue", cascade={"persist", "remove"})
     * 
     */
    private $prioritizeCatalogue;
    
    
    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * Set id
     *
     * @param integer $id
     * @return EcatalogueId
     */
    public function setId($id)
    {
    	$this->id = $id;
    
    	return $this;
    }
    
	public function getCountryId() {
		return $this->countryId;
	}
	public function setCountryId($countryId) {
		$this->countryId = $countryId;
		return $this;
	}
	public function getCategory() {
		return $this->category;
	}
	public function setCategory($category) {
		$this->category = $category;
		return $this;
	}
	public function getUser() {
		return $this->user;
	}
	/**
	 * Set userc
	 *
	 * @param \OfficeBrain\Bundle\UserBundle\Entity\User $user
	 * @return User
	 */
	public function setUser($user) {
		$this->user = $user;
		return $this;
	}
	public function getSupplier() {
		return $this->supplier;
	}
	/**
	 * Set supplier
	 *
	 * @param \OfficeBrain\Bundle\UserBundle\Entity\User $supplier
	 * @return supplier
	 */
	public function setSupplier($supplier) {
		$this->supplier = $supplier;
		return $this;
	}
	public function getUserType() {
		return $this->userType;
	}
	public function setUserType($userType) {
		$this->userType = $userType;
		return $this;
	}
	public function getEcatalogueLanguage() {
		return $this->ecatalogueLanguage;
	}
	public function setEcatalogueLanguage($ecatalogueLanguage) {
		$this->ecatalogueLanguage = $ecatalogueLanguage;
		return $this;
	}
	public function getStatus() {
		return $this->status;
	}
	public function setStatus($status) {
		$this->status = $status;
		return $this;
	}
	public function getCreatedAt() {
		return $this->createdAt;
	}
	public function setCreatedAt($createdAt) {
		$this->createdAt = $createdAt;
		return $this;
	}
	public function getUpdatedAt() {
		return $this->updatedAt;
	}
	public function setUpdatedAt($updatedAt) {
		$this->updatedAt = $updatedAt;
		return $this;
	}
	public function getDeletedAt() {
		return $this->deletedAt;
	}
	public function setDeletedAt($deletedAt) {
		$this->deletedAt = $deletedAt;
		return $this;
	}
	public function getCreatedUid() {
		return $this->createdUid;
	}
	public function setCreatedUid($createdUid) {
		$this->createdUid = $createdUid;
		return $this;
	}
	public function getUpdatedUid() {
		return $this->updatedUid;
	}
	public function setUpdatedUid($updatedUid) {
		$this->updatedUid = $updatedUid;
		return $this;
	}
	public function getDeletedUid() {
		return $this->deletedUid;
	}
	public function setDeletedUid($deletedUid) {
		$this->deletedUid = $deletedUid;
		return $this;
	}
	public function getInstanceId() {
		return $this->instanceId;
	}
	public function setInstanceId($instanceId) {
		$this->instanceId = $instanceId;
		return $this;
	}
	public function getInstanceType() {
		return $this->instanceType;
	}
	public function setInstanceType($instanceType) {
		$this->instanceType = $instanceType;
		return $this;
	}
	
	
	
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->ecatalogueLanguage = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Add ecatalogueLanguage
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\EcatalogueLanguage $ecatalogueLanguage
     * @return Ecatalogue
     */
    public function addEcatalogueLanguage( $ecatalogueLanguage)
    {
        $this->ecatalogueLanguage[] = $ecatalogueLanguage;

        return $this;
    }

    /**
     * Remove ecatalogueLanguage
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\EcatalogueLanguage $ecatalogueLanguage
     */
    public function removeEcatalogueLanguage( $ecatalogueLanguage)
    {
        $this->ecatalogueLanguage->removeElement($ecatalogueLanguage);
    }
	public function getStartDate() {
		return $this->startDate;
	}
	public function setStartDate(\DateTime $startDate) {
		$this->startDate = $startDate;
		return $this;
	}
	public function getEndDate() {
		return $this->endDate;
	}
	public function setEndDate(\DateTime $endDate) {
		$this->endDate = $endDate;
		return $this;
	}	 
    

    /**
     * Add prioritizeCatalogue
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\PrioritizeCatalogue $prioritizeCatalogue
     *
     * @return Ecatalogue
     */
    public function addPrioritizeCatalogue(\OfficeBrain\Bundle\EcatalogueBundle\Entity\PrioritizeCatalogue $prioritizeCatalogue)
    {
        $this->prioritizeCatalogue[] = $prioritizeCatalogue;

        return $this;
    }

    /**
     * Remove prioritizeCatalogue
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\PrioritizeCatalogue $prioritizeCatalogue
     */
    public function removePrioritizeCatalogue(\OfficeBrain\Bundle\EcatalogueBundle\Entity\PrioritizeCatalogue $prioritizeCatalogue)
    {
        $this->prioritizeCatalogue->removeElement($prioritizeCatalogue);
    }

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