<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use App\Entity\Company;
use App\Entity\Partner;
/**
* User
* @ORM\Table(name="user", indexes={@ORM\Index(name="user_company_fk_1", columns={"us_company_id"})})
* @ORM\Entity(repositoryClass="App\Repository\UserRepository")
* @ORM\HasLifecycleCallbacks
*/
class User implements UserInterface, \Serializable {
const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 2;
const IS_NOT_DELETE = 0;
const IS_DELETE = 1;
/* full actuacion */
const USER_SUPER_ADMIN = 1;
/* full actuacion */
const USER_ADMINISTRATOR = 2;
/* puede crear usuarios */
const USER_LICENSE_MANAGER = 3;
/* ver reportes y listas */
const USER_REPORT_VIEWER = 4;
/* usuario gestor de datos de BDs */
const USER_ADMIN_DATABASES = 5;
/* usuario gestor de soportes */
const USER_TICKET_SUPPORT = 6;
/* usuario supervisor de agentes */
const USER_AGENT_MANAGER = 7;
/* usuario agente */
const USER_AGENT = 8;
/* usuario reseller */
const USER_RESELLER = 9;
/* usuario subreseller */
const USER_SUB_RESELLER = 10;
/* usuario subsubreseller */
const USER_SUB_SUB_RESELLER = 11;
/* usuario de soporte interno */
const USER_INTERNAL_SUPPORT = 12;
const LUNCH_TIME_ACTIVE = 1;
const LUNCH_TIME_INACTIVE = 0;
/**
* @var integer
* @ORM\Column(name="us_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var integer
* @ORM\Column(name="us_type", type="integer", options={"default":8})
*/
protected $usType = 8;
/**
* @var string
* @ORM\Column(name="us_name", type="string", length=50, nullable=true)
*/
private $usName;
/**
* @var string
* @ORM\Column(name="us_last_name", type="string", length=50, nullable=true)
*/
private $usLastName;
/**
* @var string
* @ORM\Column(name="us_email", type="string", length=50, nullable=true)
*/
private $usEmail;
/**
* @var string
* @Assert\NotBlank()
* @ORM\Column(name="us_phone_number", type="string", length=50, nullable=true)
*/
private $usPhoneNumber;
/**
* @var string
* @ORM\Column(name="us_phone_prefix", type="string", length=5, nullable=true, options={"default":"+1"})
*/
private $usPhonePrefix = '+1';
/**
* @var \DateTime
* @ORM\Column(name="us_date_created", type="date", nullable=true)
*/
private $usDateCreated;
/**
* @var integer
* @ORM\Column(name="us_status", type="smallint", nullable=true)
*/
private $usStatus;
/**
* @var \App\Entity\User
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_parent_id", referencedColumnName="us_id", onDelete="CASCADE")
* })
*/
private $usUserParent;
/**
* @var \App\Entity\Company
* @ORM\ManyToOne(targetEntity="App\Entity\Company")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_company_id", referencedColumnName="co_id", onDelete="CASCADE")
* })
*/
private $usCompany;
/**
* @var string
* @ORM\Column(name="us_token", type="string", unique=true)
*/
private $username;
/**
* @var string
* @ORM\Column(name="work_time", type="json", nullable=true)
*/
private $worktime;
/**
* @var string
* @ORM\Column(name="us_validatephone", type="boolean", nullable=false)
*/
private $validatePhone = false;
/**
* @var string
* @ORM\Column(name="us_is_subagent", type="boolean", nullable=false, options={"default":false})
*/
private $isSubagent = false;
/**
* @var string
* @ORM\Column(name="us_is_super_agent_manager", type="boolean", nullable=false, options={"default":false})
*/
private $isSuperAgentManager = false;
/**
* @var string
* @ORM\Column(name="us_password", type="string", length=255)
*/
private $password;
/**
* @var string
* @ORM\Column(name="us_credentials", type="string", length=255, nullable=true)
*/
private $credentials;
/**
* @var string
* @ORM\Column(name="us_salt", type="string", length=255, nullable=true)
*/
private $salt;
/**
* @var string
* @ORM\Column(name="us_deleted", type="boolean", nullable=false)
*/
private $deleted;
/**
* @var boolean
* @ORM\Column(name="us_is_omt", type="boolean", nullable=false, options={"default":false})
*/
private $isOMTUser = false;
/**
* @var string
* @ORM\Column(name="us_second_pass", type="text", nullable=true)
*/
private $secondPass;
/**
* @var Partner
* @ORM\ManyToOne(targetEntity="App\Entity\Partner")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_partner_identify", referencedColumnName="p_id", nullable=true, onDelete="CASCADE")
* })
*/
private $partner;
/**
* @var \App\Entity\Country
* @ORM\ManyToOne(targetEntity="App\Entity\Country")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_country", referencedColumnName="co_id")
* })
*/
private $country;
/**
* @var \App\Entity\State
* @ORM\ManyToOne(targetEntity="App\Entity\State")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_state", referencedColumnName="st_id", nullable=true)
* })
*/
private $state;
/**
* @var \App\Entity\Timezone
* @ORM\ManyToOne(targetEntity="App\Entity\Timezone")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="us_time_zone", referencedColumnName="tm_id", nullable=true)
* })
*/
private $timeZone;
/**
* @var string
* @ORM\Column(name="us_default_calendar", type="boolean", nullable=false)
*/
private $defaultCalendar;
/**
* @ORM\Column(name="us_auth_token",type="string", length=255, nullable=true)
*/
private $authToken;
/**
* @var \DateTime
* @ORM\Column(name="us_date_active_session", type="datetime", nullable=true)
*/
private $dateActiveSession;
/**
* @return type
*/
public function getId() {
return $this->id;
}
/**
* @return type
*/
public function getSecondPass() {
return $this->secondPass;
}
/**
* @param type $secondPass
*/
public function setSecondPass($secondPass) {
$this->secondPass = $secondPass;
}
/**
* @return type
*/
public function getUsType() {
return $this->usType;
}
/**
* @param type $usType
*/
public function setUsType($usType) {
$this->usType = $usType;
}
/**
* @return string
*/
public function getUsName() {
return $this->usName;
}
/**
* @return string
*/
public function getUsLastName() {
return $this->usLastName;
}
/**
* @return type
*/
public function getUsEmail() {
return $this->usEmail;
}
/**
* @return type
*/
public function getUsPhoneNumber() {
return $this->usPhoneNumber;
}
/**
* @return string
*/
public function getUsPhonePrefix(){
return $this->usPhonePrefix;
}
/**
* @return type
*/
public function getUsDateCreated() {
return $this->usDateCreated;
}
/**
* @return type
*/
public function getUsStatus() {
return $this->usStatus;
}
/**
* @return type
*/
public function getUsUserParent() {
return $this->usUserParent;
}
/**
* @return \App\Entity\Company
*/
public function getUsCompany() {
return $this->usCompany;
}
/**
* @param type $usName
*/
public function setUsName($usName) {
$this->usName = $usName;
}
/**
* @param type $usLastName
*/
public function setUsLastName($usLastName) {
$this->usLastName = $usLastName;
}
/**
* @param type $usEmail
*/
public function setUsEmail($usEmail) {
$this->usEmail = $usEmail;
}
/**
* @param type $usPhoneNumber
*/
public function setUsPhoneNumber($usPhoneNumber) {
$this->usPhoneNumber = $usPhoneNumber;
}
/**
* @param string $usPhonePrefix
*/
public function setUsPhonePrefix(string $usPhonePrefix){
$this->usPhonePrefix = $usPhonePrefix;
}
/**
* @param \DateTime $usDateCreated
*/
public function setUsDateCreated(\DateTime $usDateCreated = null) {
$this->usDateCreated = $usDateCreated;
}
/**
* @param type $usStatus
*/
public function setUsStatus($usStatus) {
$this->usStatus = $usStatus;
}
/**
* @param type $usUserParent
*/
public function setUsUserParent($usUserParent) {
$this->usUserParent = $usUserParent;
}
/**
* @param Company $usCompany
*/
public function setUsCompany(\App\Entity\Company $usCompany = null) {
$this->usCompany = $usCompany;
}
/**
* @return type
*/
public function getUsername() {
return $this->username;
}
/**
* @param type $username
*/
public function setUsername($username) {
$this->username = $username;
}
/**
* @return type
*/
public function getDeleted() {
return $this->deleted;
}
/**
* @param type $deleted
*/
public function setDeleted($deleted) {
$this->deleted = $deleted;
}
/**
* @ORM\PrePersist
*/
public function defaultDeleted() {
$this->deleted = false;
}
/**
* @return type
*/
public function getIsOMTUser() {
return $this->isOMTUser;
}
/**
* @param type $isOMTUser
*/
public function setIsOMTUser($isOMTUser) {
$this->isOMTUser = $isOMTUser;
}
/**
* Get Roles
* @return Array
*/
public function getRoles() {
$companyStatus = Company::STATUS_INACTIVE;
$isSuperAdmin = static::USER_SUPER_ADMIN;
if ($this->getUsCompany()->getCoStatus() == $companyStatus && $isSuperAdmin != $this->usType) {
return ['ROLE_INACTIVE'];
}
$return = ['ROLE_INACTIVE'];
if ($this->getDeleted() == false) {
if ($this->usStatus == static::STATUS_ACTIVE) {
if ($this->usType == static::USER_ADMINISTRATOR) {
$return = ['ROLE_ADMINISTRATOR'];
} elseif ($this->usType == static::USER_SUPER_ADMIN) {
$return = ['ROLE_SUPER_ADMIN'];
} elseif ($this->usType == static::USER_LICENSE_MANAGER) {
$return = ['ROLE_LICENSE_MANAGER'];
} elseif ($this->usType == static::USER_REPORT_VIEWER) {
$return = ['ROLE_REPORT_VIEWER'];
} elseif ($this->usType == static::USER_ADMIN_DATABASES) {
$return = ['ROLE_ADMIN_DATABASES'];
} elseif ($this->usType == static::USER_TICKET_SUPPORT) {
$return = ['ROLE_TICKET_SUPPORT'];
} elseif ($this->usType == static::USER_AGENT_MANAGER) {
$return = ['ROLE_AGENT_MANAGER'];
} elseif ($this->usType == static::USER_AGENT) {
$return = ['ROLE_AGENT'];
} elseif ($this->usType == static::USER_RESELLER) {
$return = ['ROLE_RESELLER'];
} elseif ($this->usType == static::USER_SUB_RESELLER) {
$return = ['ROLE_SUB_RESELLER'];
} elseif ($this->usType == static::USER_SUB_SUB_RESELLER) {
$return = ['ROLE_SUB_SUB_RESELLER'];
} elseif ($this->usType == static::USER_INTERNAL_SUPPORT) {
$return = ['ROLE_INTERNAL_SUPPORT'];
}
} elseif ($this->usStatus == static::STATUS_INACTIVE) {
$return = ['ROLE_INACTIVE'];
}
}
return $return;
}
/**
* get text status Active Inactive
* @return string
*/
public function getTextStatus() {
$text = '';
switch ($this->usStatus) {
case static::STATUS_ACTIVE: $text = 'Active';
break;
case static::STATUS_INACTIVE: $text = 'Inactive';
break;
default:
$text = 'Inactive';
}
return $text;
}
/**
* Get text type super_admin, administrator, license_manager,
* report_viewer, data_bases_administrator
* @return string
*/
public function getTextType() {
$text = '';
switch ($this->usType) {
case static::USER_SUPER_ADMIN: $text = 'Super Admin';
break;
case static::USER_ADMINISTRATOR: $text = 'Administrator';
break;
case static::USER_LICENSE_MANAGER: $text = 'License Manager';
break;
case static::USER_REPORT_VIEWER: $text = 'Report Viewer';
break;
case static::USER_ADMIN_DATABASES: $text = 'Data Bases Administrator';
break;
case static::USER_TICKET_SUPPORT: $text = 'Ticket Support';
break;
case static::USER_AGENT_MANAGER: $text = 'Agent Manager';
break;
case static::USER_AGENT: $text = 'Agent';
break;
case static::USER_RESELLER: $text = 'Reseller';
break;
case static::USER_SUB_RESELLER: $text = 'Sub-reseller';
break;
case static::USER_SUB_SUB_RESELLER: $text = 'Sub-Sub-reseller';
break;
case static::USER_INTERNAL_SUPPORT: $text = 'Internal Support';
break;
default:
$text = 'Report Viewer';
}
return $text;
}
/**
* @return type
*/
public function serialize() {
return serialize([
$this->id,
$this->usType,
$this->usName,
$this->usLastName,
$this->usEmail,
$this->usPhoneNumber,
$this->usStatus,
$this->usDateCreated,
$this->usCompany,
$this->username,
$this->password,
$this->salt
]);
}
/**
* @param type $serialized
*/
public function unserialize($serialized) {
list(
$this->id,
$this->usType,
$this->usName,
$this->usLastName,
$this->usEmail,
$this->usPhoneNumber,
$this->usStatus,
$this->usDateCreated,
$this->usCompany,
$this->username,
$this->password,
$this->salt
) = unserialize($serialized);
}
/**
* @param type $usPassword
*/
public function setPassword($usPassword) {
$this->password = $usPassword;
}
/**
* @return type
*/
public function getPassword() {
return $this->password;
}
/**
* @param type $credentials
*/
public function setCredentials($credentials) {
$this->credentials = $credentials;
}
/**
* @return type
*/
public function getCredentials() {
return $this->credentials;
}
/**
* @param type $salt
*/
public function setSalt($salt) {
$this->salt = $salt;
}
/**
* @return type
*/
public function getSalt() {
return $this->salt;
}
public function eraseCredentials() {
}
/**
* @return type
*/
public function __toString() {
return $this->getUsName();
}
/**
* Filter Searach Parameters organiza el WHERE
* @param String $alias
* @param Array $search
* @return Array
*/
public static function filterSearchParameters($alias, $search) {
$textParameters = $join = '';
$parameters = [];
if (isset($search['usName']) && $search['usName'] != '') {
$textParameters .= " AND " . $alias . ".usName LIKE :usName";
$parameters['usName'] = "%" . $search['usName'] . "%";
}
if (isset($search['usLastName']) && $search['usLastName'] != '') {
$textParameters .= " AND " . $alias . ".usLastName LIKE :usLastName";
$parameters['usLastName'] = "%" . $search['usLastName'] . "%";
}
if (isset($search['usEmail']) && $search['usEmail'] != '') {
$textParameters .= " AND " . $alias . ".usEmail LIKE :usEmail";
$parameters['usEmail'] = "%" . $search['usEmail'] . "%";
}
if (isset($search['usPhoneNumber']) && $search['usPhoneNumber'] != '') {
$textParameters .= " AND " . $alias . ".usPhoneNumber LIKE :usPhoneNumber";
$parameters['usPhoneNumber'] = "%" . $search['usPhoneNumber'] . "%";
}
if (isset($search['usStatus']) && $search['usStatus'] != '') {
$textParameters .= " AND " . $alias . ".usStatus = :usStatus";
$parameters['usStatus'] = $search['usStatus'];
}
if (isset($search['usType']) && $search['usType'] != '') {
$textParameters .= " AND " . $alias . ".usType = :usType";
$parameters['usType'] = $search['usType'];
}
if (isset($search['deleted'])) {
$textParameters .= " AND " . $alias . ".deleted = :deleted";
$parameters['deleted'] = $search['deleted'];
}
if (isset($search['assignedState'])) {
$textParameters .= " AND " . "AAS.state = :assignedState";
$parameters['assignedState'] = $search['assignedState'];
$join .= " INNER JOIN App\Entity\AgentsAssignedStates AAS WITH AAS.agent = $alias.id ";
}
return ['text' => $textParameters, 'parameters' => $parameters, 'join' =>$join];
}
/**
* filter order parameters para consulta DQL segun el order solicitado
* @param String $alias
* @param Array $order
* @return string el ORDER BY adecuado segun corresponda
*/
public static function filterOrderParameters($alias, $order) {
$orderBy = ' ORDER BY ' . $alias . '.usName ASC';
if (isset($order ['order_by_user_name']) && $order ['order_by_user_name'] != '') {
if ($order ['order_by_user_name'] % 2) {
$orderBy = " ORDER BY " . $alias . ".usName DESC";
} else {
$orderBy = " ORDER BY " . $alias . ".usName ASC";
}
} elseif (isset($order ['order_by_user_email']) && $order ['order_by_user_email'] != '') {
if ($order ['order_by_user_email'] % 2) {
$orderBy = " ORDER BY " . $alias . ".usEmail DESC";
} else {
$orderBy = " ORDER BY " . $alias . ".usEmail ASC";
}
} elseif (isset($order ['order_by_user_status']) && $order ['order_by_user_status'] != '') {
if ($order ['order_by_user_status'] % 2) {
$orderBy = " ORDER BY " . $alias . ".usStatus DESC";
} else {
$orderBy = " ORDER BY " . $alias . ".usStatus ASC";
}
} elseif (isset($order ['order_by_user_type']) && $order ['order_by_user_type'] != '') {
if ($order ['order_by_user_type'] % 2) {
$orderBy = " ORDER BY " . $alias . ".usType DESC";
} else {
$orderBy = " ORDER BY " . $alias . ".usType ASC";
}
}
return $orderBy;
}
public function getState()
{
return $this->state;
}
public function setState($state)
{
$this->state = $state;
return $this;
}
public function getCountry()
{
return $this->country;
}
public function setCountry($country)
{
$this->country = $country;
return $this;
}
public function getTimeZone()
{
return $this->timeZone;
}
public function setTimeZone($timeZone)
{
$this->timeZone = $timeZone;
return $this;
}
public function getWorktime()
{
return $this->worktime;
}
public function setWorktime($worktime){
$this->worktime = $worktime;
}
/**
* @return string
*/
public function getUserIdentifier() {
return $this->username;
}
/**
* Get the value of defaultCalendar
*
* @return string
*/
public function getDefaultCalendar()
{
return $this->defaultCalendar;
}
/**
* Set the value of defaultCalendar
*
* @param string $defaultCalendar
*
* @return self
*/
public function setDefaultCalendar(string $defaultCalendar)
{
$this->defaultCalendar = $defaultCalendar;
return $this;
}
/**
* Función para pasar a de tipo objeto-entidad a json
*/
public function showEverything() {
return get_object_vars($this);
}
public function getValidatePhone()
{
return $this->validatePhone;
}
public function setValidatePhone($validatePhone)
{
$this->validatePhone = $validatePhone;
return $this;
}
/**
* Get Partner
*/
public function getPartner(){
return $this->partner;
}
/**
* Set Partner
*/
public function setPartner(Partner $partner){
$this->partner = $partner;
}
/**
* Get the value of isSubagent
*/
public function getIsSubagent()
{
return $this->isSubagent;
}
/**
* Set the value of isSubagent
* @param $isSubagent
*/
public function setIsSubagent($isSubagent)
{
$this->isSubagent = $isSubagent;
}
/**
* Get the value of isSuperAgentManager
*/
public function getIsSuperAgentManager()
{
return $this->isSuperAgentManager;
}
/**
* Set the value of isSuperAgentManager
* @param $isSuperAgentManager
*/
public function setIsSuperAgentManager($isSuperAgentManager)
{
$this->isSuperAgentManager = $isSuperAgentManager;
}
/**
* Get the value of authToken
*/
public function getAuthToken()
{
return $this->authToken;
}
/**
* Set the value of authToken
* @param $authToken
*/
public function setAuthToken($authToken)
{
$this->authToken = $authToken;
}
/**
* Get the value of dateActiveSession
*/
public function getDateActiveSession()
{
return $this->dateActiveSession;
}
/**
* Set the value of dateActiveSession
*/
public function setDateActiveSession($dateActiveSession)
{
$this->dateActiveSession = $dateActiveSession;
}
}