<?php

namespace OfficeBrain\CustomBundle\UserBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use JMS\Serializer\Annotation\ExclusionPolicy;
use JMS\Serializer\Annotation\Exclude;

/**
 * User
 *
 * @ORM\Table(name="tbl_user")
 * @ORM\Entity(repositoryClass="OfficeBrain\CustomBundle\UserBundle\Entity\UserRepository")
 * @Gedmo\SoftDeleteable(fieldName="deletedAt", timeAware=false)
 * @Gedmo\SoftDeleteable(fieldName="expiredAt", timeAware=false)
 * @Gedmo\SoftDeleteable(fieldName="passwordRequestedAt", timeAware=false)
 * @ExclusionPolicy("none")
 */
class User implements UserInterface, \Serializable
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="bigint",length=20, options={"unsigned"=true})
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * Bidirectional (OWNING SIDE - FK)
     * @ORM\ManyToOne(targetEntity="\OfficeBrain\Bundle\CompanyBundle\Entity\Company", inversedBy="companyUser")
     * @ORM\JoinColumn(name="company_id",nullable=true)
     */
    protected $userCompany;

    /**
     * Bidirectional (OWNING SIDE - FK)
     * @ORM\ManyToOne(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\User", inversedBy="child")
     * @ORM\JoinColumn(name="parent_id", nullable=true)
     */
    protected $parent;

    /**
     * @var string
     * @ORM\Column(name="login_username", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $loginUsername;

    /**
     * @var string
     * @ORM\Column(name="email", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $email;


    /**
     * @var string
     * @ORM\Column(name="password", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $password;

    /**
     * @var string
     * @ORM\Column(name="salt", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $salt;

    /**
     * @var string
     * @ORM\Column(name="gender", type="string", length=255, columnDefinition="enum('male','female','other')", options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $gender;

    /**
     * @var string
     * @ORM\Column(name="first_name", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $firstName;

    /**
     * @var string
     * @ORM\Column(name="middle_name", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $middleName;

    /**
     * @var string
     * @ORM\Column(name="last_name", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $lastName;

    /**
     * @var string
     * @ORM\Column(name="photo", type="text", options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $photo;

    /**
     * @var string
     * @ORM\Column(name="street1", type="text", options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $street1;

    /**
     * @var string
     * @ORM\Column(name="street2", type="text", options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $street2;

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

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

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

    /**
     * @var string
     * @ORM\Column(name="zipcode", type="string", length=50, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $zipcode;

    /**
     * @var string
     * @ORM\Column(name="extension", type="string", length=50, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $extension;

    /**
     * @var string
     * @ORM\Column(name="phone", type="string", length=50, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $phone;

    /**
     * @var string
     * @ORM\Column(name="mobile", type="string", length=50, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $mobile;

    /**
     * @var string
     * @ORM\Column(name="fax", type="string", length=50, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $fax;

    /**
     * @var string
     * @ORM\Column(name="website", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $website;


    /**
     * Bidirectional (OWNING SIDE - FK)
     * @Exclude
     * @ORM\ManyToOne(targetEntity="\OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceGroup", inversedBy="user")
     * @ORM\JoinColumn(name="service_group_id", nullable=true)
     */
    protected $serviceGroup;

    /**
     * @var string
     * @ORM\Column(name="fb_token", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $fbToken;

    /**
     * @var string
     * @ORM\Column(name="fb_secret_key", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $fbSecretKey;

    /**
     * @var string
     * @ORM\Column(name="gmail_token", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $gmailToken;

    /**
     * @var string
     * @ORM\Column(name="gmail_secret_key", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $gmailSecretKey;

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

    private $locatedDistributorId;

    /**
     * @var boolean
     * @ORM\Column(name="status", type="string", length=255, columnDefinition="enum('approve','unapprove','pending','active','inactive')", options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $status;


    /**
     * @var boolean
     * @ORM\Column(name="locked", type="boolean", nullable=true)
     */
    private $locked;


    /**
     * @var boolean
     * @ORM\Column(name="expired", type="boolean", nullable=true)
     */
    private $expired;

    /**
     * @var datetime
     *
     * @ORM\Column(name="expired_at",type="datetime", nullable=true)
     */
    protected $expiredAt;

    /**
     * @var string
     * @ORM\Column(name="confirmation_token", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $confirmationToken;


    /**
     * @var datetime
     *
     * @ORM\Column(name="password_requested_at",type="datetime", nullable=true)
     */
    protected $passwordRequestedAt;


    /**
     * @var string
     * @ORM\Column(name="membership_number1", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber1;

    /**
     * @var string
     * @ORM\Column(name="membership_number2", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber2;

    /**
     * @var string
     * @ORM\Column(name="membership_number3", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber3;

    /**
     * @var string
     * @ORM\Column(name="membership_number4", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber4;

    /**
     * @var string
     * @ORM\Column(name="membership_number5", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber5;

    /**
     * @var string
     * @ORM\Column(name="membership_number6", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $membershipNumber6;

    /**
     * @var string
     * @ORM\Column(name="ob_customer_id", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $obCustomerId;

    /**
     * @var string
     * @ORM\Column(name="last_visited_culture", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $lastVisitedCulture;


    /**
     * @var string
     * @ORM\Column(name="job_title", type="string", length=100, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $jobTitle;


    /**
     * @var boolean
     * @ORM\Column(name="is_company", type="boolean", nullable=true)
     */
    private $isCompany;

    /**
     * @var boolean
     * @ORM\Column(name="is_individual", type="boolean", nullable=true)
     */
    private $isIndividual;

    /**
     * @var string
     * @ORM\Column(name="company_number", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $companyNumber;

    /**
     * @var string
     * @ORM\Column(name="company_name", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $companyName;


    /**
     * @var boolean
     * @ORM\Column(name="newsletters_unsubscription", type="boolean", nullable=true)
     */
    private $newslettersUnsubscription;

    /**
     * @var string
     * @ORM\Column(name="instance_type", type="string", length=255, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $instanceType;

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

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

    /**
     * @var string
     * @ORM\Column(name="user_type", type="string", length=100, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $userType;
    
    /**
     * @var string
     * @ORM\Column(name="country_culture", type="string",  length=100, options={"collate"="utf8_unicode_ci"}, nullable=true)
     */
    private $countryCulture;

    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\User", mappedBy="parent")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $child;


    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\ContactBook", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $contactBook;
    
    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $employeeInfo;
    
    
    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceUserAccessMapping", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $instanceAccess;

    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\CompanyBundle\Entity\Company", mappedBy="userc")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $company;
    
    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $ecatalogueUser;

    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue", mappedBy="supplier")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $ecatalogueSupplier;
    
    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\PrioritizeSupplierBundle\Entity\PrioritizeSupplier", mappedBy="supplier")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $prioritysupplier;
    
    /**
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\PrioritizeSupplierBundle\Entity\PrioritizeSupplier", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $prioritysuppliersuer;
    
    /**
     * @Exclude
     * @ORM\OneToMany(targetEntity="\OfficeBrain\Bundle\EcatalogueBundle\Entity\PrioritizeCatalogue", mappedBy="user")
     * @ORM\JoinColumn(nullable=true)
     */
    protected $prioritizeEcatalogueUser;
    
    /**
     * @var datetime
     *
     * @Gedmo\Timestampable(on="create")
     * @ORM\Column(name="created_at",type="datetime")
     */
    protected $createdAt;

    /**
     * @var datetime
     *
     * @Gedmo\Timestampable(on="update")
     * @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 string
     */
    public $new;

    /**
     * @var boolean
     * @ORM\Column(name="contact_info_type", type="boolean", nullable=true)
     */
    private $contactInfoType;
    
    /**
     * Get id
     *
     * @return integer
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * @ORM\OneToMany(targetEntity="\OfficeBrain\CustomBundle\ServiceGroupBundle\Entity\CouponUsers", mappedBy="userId")
     */
    private $couponUsers;
    
    /**
     * Constructor
     */
    public function __construct()
    {
        $this->child = new \Doctrine\Common\Collections\ArrayCollection();
        $this->user = new \Doctrine\Common\Collections\ArrayCollection();
        $this->instanceAccess = new \Doctrine\Common\Collections\ArrayCollection();
        $this->company = new \Doctrine\Common\Collections\ArrayCollection();
        $this->couponUsers = new \Doctrine\Common\Collections\ArrayCollection();
    }

    /**
     * Get loginUsername
     *
     * @return string
     */
    public function getUsername()
    {
        return $this->email;
    }
    
    /**
     * Set login_username
     *
     * @param string $loginUsername
     * @return User
     */
    public function setLoginUsername($loginUsername)
    {
        $this->loginUsername = $loginUsername;

        return $this;
    }

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

    /**
     * Set email
     *
     * @param string $email
     * @return User
     */
    public function setEmail($email)
    {
        $this->email = $email;

        return $this;
    }

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

    /**
     * Set password
     *
     * @param string $password
     * @return User
     */
    public function setPassword($password)
    {
        $this->password = $password;

        return $this;
    }

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

    /**
     * Set salt
     *
     * @param string $salt
     * @return User
     */
    public function setSalt($salt)
    {
        $this->salt = $salt;

        return $this;
    }

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

    /**
     * Set gender
     *
     * @param string $gender
     * @return User
     */
    public function setGender($gender)
    {
        $this->gender = $gender;

        return $this;
    }

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

    /**
     * Set firstName
     *
     * @param string $firstName
     * @return User
     */
    public function setFirstName($firstName)
    {
        $this->firstName = $firstName;

        return $this;
    }

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

    /**
     * Set lastName
     *
     * @param string $lastName
     * @return User
     */
    public function setLastName($lastName)
    {
        $this->lastName = $lastName;

        return $this;
    }

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

    /**
     * Set photo
     *
     * @param string $photo
     * @return User
     */
    public function setPhoto($photo)
    {
        $this->photo = $photo;

        return $this;
    }

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

    /**
     * Set street1
     *
     * @param string $street1
     * @return User
     */
    public function setStreet1($street1)
    {
        $this->street1 = $street1;

        return $this;
    }

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

    /**
     * Set street2
     *
     * @param string $street2
     * @return User
     */
    public function setStreet2($street2)
    {
        $this->street2 = $street2;

        return $this;
    }

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

    /**
     * Set countryId
     *
     * @param integer $countryId
     * @return User
     */
    public function setCountryId($countryId)
    {
        $this->countryId = $countryId;

        return $this;
    }

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

    /**
     * Set stateId
     *
     * @param integer $stateId
     * @return User
     */
    public function setStateId($stateId)
    {
        $this->stateId = $stateId;

        return $this;
    }

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

    /**
     * Set cityId
     *
     * @param integer $cityId
     * @return User
     */
    public function setCityId($cityId)
    {
        $this->cityId = $cityId;

        return $this;
    }

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

    /**
     * Set zipcode
     *
     * @param string $zipcode
     * @return User
     */
    public function setZipcode($zipcode)
    {
        $this->zipcode = $zipcode;

        return $this;
    }

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

    /**
     * Set extension
     *
     * @param string $extension
     * @return User
     */
    public function setExtension($extension)
    {
        $this->extension = $extension;

        return $this;
    }

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

    /**
     * Set phone
     *
     * @param string $phone
     * @return User
     */
    public function setPhone($phone)
    {
        $this->phone = $phone;

        return $this;
    }

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

    /**
     * Set mobile
     *
     * @param string $mobile
     * @return User
     */
    public function setMobile($mobile)
    {
        $this->mobile = $mobile;

        return $this;
    }

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

    /**
     * Set fax
     *
     * @param string $fax
     * @return User
     */
    public function setFax($fax)
    {
        $this->fax = $fax;

        return $this;
    }

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

    /**
     * Set website
     *
     * @param string $website
     * @return User
     */
    public function setWebsite($website)
    {
        $this->website = $website;

        return $this;
    }

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

    /**
     * Set fbToken
     *
     * @param string $fbToken
     * @return User
     */
    public function setFbToken($fbToken)
    {
        $this->fbToken = $fbToken;

        return $this;
    }

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

    /**
     * Set fbSecretKey
     *
     * @param string $fbSecretKey
     * @return User
     */
    public function setFbSecretKey($fbSecretKey)
    {
        $this->fbSecretKey = $fbSecretKey;

        return $this;
    }

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

    /**
     * Set gmailToken
     *
     * @param string $gmailToken
     * @return User
     */
    public function setGmailToken($gmailToken)
    {
        $this->gmailToken = $gmailToken;

        return $this;
    }

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

    /**
     * Set gmailSecretKey
     *
     * @param string $gmailSecretKey
     * @return User
     */
    public function setGmailSecretKey($gmailSecretKey)
    {
        $this->gmailSecretKey = $gmailSecretKey;

        return $this;
    }

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

    /**
     * Set locatedDistributorId
     *
     * @param integer $locatedDistributorId
     * @return User
     */
    public function setLocatedDistributorId($locatedDistributorId)
    {
        $this->locatedDistributorId = $locatedDistributorId;

        return $this;
    }

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

    /**
     * Set status
     *
     * @param boolean $status
     * @return User
     */
    public function setStatus($status)
    {
        $this->status = $status;

        return $this;
    }

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

    /**
     * Set locked
     *
     * @param boolean $locked
     * @return User
     */
    public function setLocked($locked)
    {
        $this->locked = $locked;

        return $this;
    }

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

    /**
     * Set expired
     *
     * @param boolean $expired
     * @return User
     */
    public function setExpired($expired)
    {
        $this->expired = $expired;

        return $this;
    }

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

    /**
     * Set expiredAt
     *
     * @param \DateTime $expiredAt
     * @return User
     */
    public function setExpiredAt($expiredAt)
    {
        $this->expiredAt = $expiredAt;

        return $this;
    }

    /**
     * Get expiredAt
     *
     * @return \DateTime
     */
    public function getExpiredAt()
    {
        return $this->expiredAt;
    }

    /**
     * Set confirmationToken
     *
     * @param string $confirmationToken
     * @return User
     */
    public function setConfirmationToken($confirmationToken)
    {
        $this->confirmationToken = $confirmationToken;

        return $this;
    }

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

    /**
     * Set passwordRequestedAt
     *
     * @param \DateTime $passwordRequestedAt
     * @return User
     */
    public function setPasswordRequestedAt($passwordRequestedAt)
    {
        $this->passwordRequestedAt = $passwordRequestedAt;

        return $this;
    }

    /**
     * Get passwordRequestedAt
     *
     * @return \DateTime
     */
    public function getPasswordRequestedAt()
    {
        return $this->passwordRequestedAt;
    }


    /**
     * Set jobTitle
     *
     * @param string $jobTitle
     * @return User
     */
    public function setJobTitle($jobTitle)
    {
        $this->jobTitle = $jobTitle;

        return $this;
    }

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

    /**
     * Set isCompany
     *
     * @param boolean $isCompany
     * @return User
     */
    public function setIsCompany($isCompany)
    {
        $this->isCompany = $isCompany;

        return $this;
    }

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

    /**
     * Set isIndividual
     *
     * @param boolean $isIndividual
     * @return User
     */
    public function setIsIndividual($isIndividual)
    {
        $this->isIndividual = $isIndividual;

        return $this;
    }

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

    /**
     * Set newslettersUnsubscription
     *
     * @param boolean $newslettersUnsubscription
     * @return User
     */
    public function setNewslettersUnsubscription($newslettersUnsubscription)
    {
        $this->newslettersUnsubscription = $newslettersUnsubscription;

        return $this;
    }

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

    /**
     * Set instanceType
     *
     * @param string $instanceType
     * @return User
     */
    public function setInstanceType($instanceType)
    {
        $this->instanceType = $instanceType;

        return $this;
    }

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

    /**
     * Set instanceTypeId
     *
     * @param integer $instanceTypeId
     * @return User
     */
    public function setInstanceId($instanceId)
    {
        $this->instanceId = $instanceId;

        return $this;
    }

    /**
     * Get instanceTypeId
     *
     * @return integer
     */
    public function getInstanceId()
    {
        return $this->instanceId;
    }

    /**
     * Set erpId
     *
     * @param integer $erpId
     * @return User
     */
    public function setErpId($erpId)
    {
        $this->erpId = $erpId;

        return $this;
    }

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

    /**
     * Set userType
     *
     * @param string $userType
     * @return User
     */
    public function setUserType($userType)
    {
        $this->userType = $userType;

        return $this;
    }

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

    /**
     * Set createdAt
     *
     * @param \DateTime $createdAt
     * @return User
     */
    public function setCreatedAt($createdAt)
    {
        $this->createdAt = $createdAt;

        return $this;
    }

    /**
     * Get createdAt
     *
     * @return \DateTime
     */
    public function getCreatedAt()
    {
        return $this->createdAt;
    }

    /**
     * Set updatedAt
     *
     * @param \DateTime $updatedAt
     * @return User
     */
    public function setUpdatedAt($updatedAt)
    {
        $this->updatedAt = $updatedAt;

        return $this;
    }

    /**
     * Get updatedAt
     *
     * @return \DateTime
     */
    public function getUpdatedAt()
    {
        return $this->updatedAt;
    }

    /**
     * Set deletedAt
     *
     * @param \DateTime $deletedAt
     * @return User
     */
    public function setDeletedAt($deletedAt)
    {
        $this->deletedAt = $deletedAt;

        return $this;
    }

    /**
     * Get deletedAt
     *
     * @return \DateTime
     */
    public function getDeletedAt()
    {
        return $this->deletedAt;
    }

    /**
     * Set createdUid
     *
     * @param integer $createdUid
     * @return User
     */
    public function setCreatedUid($createdUid)
    {
        $this->createdUid = $createdUid;

        return $this;
    }

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

    /**
     * Set updatedUid
     *
     * @param integer $updatedUid
     * @return User
     */
    public function setUpdatedUid($updatedUid)
    {
        $this->updatedUid = $updatedUid;

        return $this;
    }

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

    /**
     * Set deletedUid
     *
     * @param integer $deletedUid
     * @return User
     */
    public function setDeletedUid($deletedUid)
    {
        $this->deletedUid = $deletedUid;

        return $this;
    }

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

    /**
     * Set userCompany
     *
     * @param \OfficeBrain\Bundle\CompanyBundle\Entity\Company $userCompany
     * @return User
     */
    public function setUserCompany(\OfficeBrain\Bundle\CompanyBundle\Entity\Company $userCompany = null)
    {
        $this->userCompany = $userCompany;

        return $this;
    }

    /**
     * Get userCompany
     *
     * @return \OfficeBrain\Bundle\CompanyBundle\Entity\Company
     */
    public function getUserCompany()
    {
        return $this->userCompany;
    }

    /**
     * Set serviceGroup
     *
     * @param \OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceGroup $serviceGroup
     * @return User
     */
    public function setServiceGroup($serviceGroup = null)
    {
        $this->serviceGroup = $serviceGroup;

        return $this;
    }

    /**
     * Get serviceGroup
     *
     * @return \OfficeBrain\Bundle\ServiceGroupBundle\Entity\ServiceGroup
     */
    public function getServiceGroup()
    {
        return $this->serviceGroup;
    }


    /**
     * Add child
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\User $child
     * @return User
     */
    public function addChild(\OfficeBrain\Bundle\UserBundle\Entity\User $child)
    {
        $this->child[] = $child;

        return $this;
    }

    /**
     * Remove child
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\User $child
     */
    public function removeChild(\OfficeBrain\Bundle\UserBundle\Entity\User $child)
    {
        $this->child->removeElement($child);
    }

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

    /**
     * Add user
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\ContactBook $user
     * @return User
     */
    public function addUser(\OfficeBrain\Bundle\UserBundle\Entity\ContactBook $user)
    {
        $this->user[] = $user;

        return $this;
    }

    /**
     * Remove user
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\ContactBook $user
     */
    public function removeUser(\OfficeBrain\Bundle\UserBundle\Entity\ContactBook $user)
    {
        $this->user->removeElement($user);
    }

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

    /**
     * Add instanceAccess
     *
     * @param \OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceUserAccessMapping $instanceAccess
     * @return User
     */
    public function addInstanceAccess(\OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceUserAccessMapping $instanceAccess)
    {
        $this->instanceAccess[] = $instanceAccess;

        return $this;
    }

    /**
     * Remove instanceAccess
     *
     * @param \OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceUserAccessMapping $instanceAccess
     */
    public function removeInstanceAccess(\OfficeBrain\Bundle\AccessManagementBundle\Entity\InstanceUserAccessMapping $instanceAccess)
    {
        $this->instanceAccess->removeElement($instanceAccess);
    }

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

    /**
     * Add company
     *
     * @param \OfficeBrain\Bundle\CompanyBundle\Entity\Company $company
     * @return User
     */
    public function addCompany(\OfficeBrain\Bundle\CompanyBundle\Entity\Company $company)
    {
        $this->company[] = $company;

        return $this;
    }

    /**
     * Remove company
     *
     * @param \OfficeBrain\Bundle\CompanyBundle\Entity\Company $company
     */
    public function removeCompany(\OfficeBrain\Bundle\CompanyBundle\Entity\Company $company)
    {
        $this->company->removeElement($company);
    }

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

    /**
     * Set middleName
     *
     * @param string $middleName
     * @return User
     */
    public function setMiddleName($middleName)
    {
        $this->middleName = $middleName;

        return $this;
    }

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

    /**
     * Set companyNumber
     *
     * @param string $companyNumber
     * @return User
     */
    public function setCompanyNumber($companyNumber)
    {
        $this->companyNumber = $companyNumber;

        return $this;
    }

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

    /**
     * Add contactBook
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\ContactBook $contactBook
     * @return User
     */
    public function addContactBook(\OfficeBrain\Bundle\UserBundle\Entity\ContactBook $contactBook)
    {
        $this->contactBook[] = $contactBook;

        return $this;
    }

    /**
     * Remove contactBook
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\ContactBook $contactBook
     */
    public function removeContactBook(\OfficeBrain\Bundle\UserBundle\Entity\ContactBook $contactBook)
    {
        $this->contactBook->removeElement($contactBook);
    }

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

    /**
     * Set membershipNumber1
     *
     * @param string $membershipNumber1
     * @return User
     */
    public function setMembershipNumber1($membershipNumber1)
    {
        $this->membershipNumber1 = $membershipNumber1;

        return $this;
    }

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

    /**
     * Set membershipNumber2
     *
     * @param string $membershipNumber2
     * @return User
     */
    public function setMembershipNumber2($membershipNumber2)
    {
        $this->membershipNumber2 = $membershipNumber2;

        return $this;
    }

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

    /**
     * Set membershipNumber3
     *
     * @param string $membershipNumber3
     * @return User
     */
    public function setMembershipNumber3($membershipNumber3)
    {
        $this->membershipNumber3 = $membershipNumber3;

        return $this;
    }

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

    /**
     * Set membershipNumber4
     *
     * @param string $membershipNumber4
     * @return User
     */
    public function setMembershipNumber4($membershipNumber4)
    {
        $this->membershipNumber4 = $membershipNumber4;

        return $this;
    }

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

    /**
     * Set membershipNumber5
     *
     * @param string $membershipNumber5
     * @return User
     */
    public function setMembershipNumber5($membershipNumber5)
    {
        $this->membershipNumber5 = $membershipNumber5;

        return $this;
    }

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

    /**
     * Set membershipNumber6
     *
     * @param string $membershipNumber6
     * @return User
     */
    public function setMembershipNumber6($membershipNumber6)
    {
        $this->membershipNumber6 = $membershipNumber6;

        return $this;
    }

    /**
     * Get membershipNumber6
     *
     * @return string
     */
    public function getMembershipNumber6()
    {
        return $this->membershipNumber6;
    }
      /**
     * @inheritDoc
     */
    public function getRoles()
    {
        return array('ROLE_ADMINISTRATOR');
    }

    /**
     * @inheritDoc
     */
    public function eraseCredentials()
    {
    }


    /**
     * @see \Serializable::serialize()
     */
    public function serialize()
    {
        return serialize(array(
                $this->id,
                $this->email,
                $this->password,
                // see section on salt below
                // $this->salt,
        ));
    }

    /**
     * @see \Serializable::unserialize()
     */
    public function unserialize($serialized)
    {
        list(
                $this->id,
                $this->email,
                $this->password,
                // see section on salt below
                // $this->salt
        ) = unserialize($serialized);
    }

    public function isAccountNonExpired()
    {
        return $this->expiredAt!==1;
    }

    public function isAccountNonLocked()
    {
        return $this->locked!==1;
    }

    public function isCredentialsNonExpired()
    {
        return true;
    }

    public function isEnabled()
    {
        return $this->status==='active';
    }

    /**
     * Set obCustomerId
     *
     * @param string $obCustomerId
     * @return User
     */
    public function setObCustomerId($obCustomerId)
    {
        $this->obCustomerId = $obCustomerId;

        return $this;
    }

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

    /**
     * Set lastVisitedCulture
     *
     * @param string $lastVisitedCulture
     * @return User
     */
    public function setLastVisitedCulture($lastVisitedCulture)
    {
        $this->lastVisitedCulture = $lastVisitedCulture;

        return $this;
    }

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

    /**
     * Set companyName
     *
     * @param string $companyName
     * @return User
     */
    public function setCompanyName($companyName)
    {
        $this->companyName = $companyName;

        return $this;
    }

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

    /**
     * Get user full name
     *
     * @return string
     */
    public function getFullName()
    {
        return $this->firstName.' '.$this->lastName;
    }
    

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

        return $this;
    }

    /**
     * Remove ecatalogueUser
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue $ecatalogueUser
     */
    public function removeEcatalogueUser(\OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue $ecatalogueUser)
    {
        $this->ecatalogueUser->removeElement($ecatalogueUser);
    }

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

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

        return $this;
    }

    /**
     * Remove ecatalogueSupplier
     *
     * @param \OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue $ecatalogueSupplier
     */
    public function removeEcatalogueSupplier(\OfficeBrain\Bundle\EcatalogueBundle\Entity\Ecatalogue $ecatalogueSupplier)
    {
        $this->ecatalogueSupplier->removeElement($ecatalogueSupplier);
    }

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

    /**
     * Set parent
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\User $parent
     * @return User
     */
    public function setParent(\OfficeBrain\Bundle\UserBundle\Entity\User $parent = null)
    {
        $this->parent = $parent;

        return $this;
    }

    /**
     * Get parent
     *
     * @return \OfficeBrain\Bundle\UserBundle\Entity\User 
     */
    public function getParent()
    {
        return $this->parent;
    }

    /**
     * Set countryCulture
     *
     * @param string $countryCulture
     *
     * @return User
     */
    public function setCountryCulture($countryCulture)
    {
        $this->countryCulture = $countryCulture;

        return $this;
    }

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

    /**
     * Add employeeInfo
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo $employeeInfo
     *
     * @return User
     */
    public function addEmployeeInfo(\OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo $employeeInfo)
    {
        $this->employeeInfo[] = $employeeInfo;

        return $this;
    }

    /**
     * Remove employeeInfo
     *
     * @param \OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo $employeeInfo
     */
    public function removeEmployeeInfo(\OfficeBrain\Bundle\UserBundle\Entity\EmployeeInfo $employeeInfo)
    {
        $this->employeeInfo->removeElement($employeeInfo);
    }

    /**
     * Get employeeInfo
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getEmployeeInfo()
    {
        return $this->employeeInfo;
    }
	public function getPrioritizeEcatalogueUser() {
		return $this->prioritizeEcatalogueUser;
	}
	public function setPrioritizeEcatalogueUser($prioritizeEcatalogueUser) {
		$this->prioritizeEcatalogueUser = $prioritizeEcatalogueUser;
		return $this;
	}
	
	/**
	 * Set contactInfoType
	 *
	 * @param string $contactInfoType
	 * @return User
	 */
	public function setContactInfoType($contactInfoType)
	{
		$this->contactInfoType = $contactInfoType;
	
		return $this;
	}
	
	/**
	 * Get contactInfoType
	 *
	 * @return string
	 */
	public function getContactInfoType()
	{
		return $this->contactInfoType;
	}
	
	/**
	 * Add couponUsers
	 *
	 * @param \OfficeBrain\CustomBundle\ServiceGroupBundle\Entity\CouponUsers $couponUsers
	 * @return User
	 */
	public function addCouponUsers(\OfficeBrain\CustomBundle\ServiceGroupBundle\Entity\CouponUsers $couponUsers)
	{
		$this->couponUsers[] = $couponUsers;
	
		return $this;
	}
	
	/**
	 * Remove couponUsers
	 *
	 * @param \OfficeBrain\CustomBundle\ServiceGroupBundle\Entity\CouponUsers $couponUsers
	 */
	public function removeCouponUsers(\OfficeBrain\CustomBundle\ServiceGroupBundle\Entity\CouponUsers $couponUsers)
	{
		$this->couponUsers->removeElement($couponUsers);
	}
	
	/**
	 * Get couponUsers
	 *
	 * @return \Doctrine\Common\Collections\Collection
	 */
	public function getCouponUsers()
	{
		return $this->couponUsers;
	}
}
