<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Entity\NotificationInLicensorBell;
use Symfony\Component\Validator\Constraints as Assert;
/**
* Partner
* @ORM\Table(name="partner")
* @ORM\Entity(repositoryClass="App\Repository\PartnerRepository")
*/
class Partner {
// Contantes de eliminación lógica
const NOT_DELETED = 0;
const DELETED = 1;
// Constantes de estado
const ACTIVE =1;
const INACTIVE =2;
// Constantes de notificación de primer registro que se le envía al agente
const PARTNER_NOT_NOTIFIED = 1;
const PARTNER_NOTIFIED = 1;
// Constantes que representa si un partner ya fue visualizado y seleccionado en la tabla de new leads en dashboard
const NOT_CHECKED_BY_AGENT = 0;
const CHECKED_BY_AGENT = 1;
CONST VIEW_CHECK_BY_AGENT = 2;
// constante que indica el nombre del tag por defecto que recibirá y validara LEVELPOS
const DEFAULT_TAG_NAME_FOR_LEVELPOS = 'DEMO';
const TAG_FOR_LEVELPOS_RESTAURANT_DEMO = 'RESTAURANT DEMO';
/**
* @var integer
* @ORM\Column(name="p_id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @var string
* @ORM\Column(name="p_full_name", type="string", nullable=false)
*/
private $fullName;
/**
* @var string
* @ORM\Column(name="p_company_name", type="string", nullable=true)
*/
private $companyName;
/**
* @var int|null
* @var \App\Entity\Company
* @ORM\ManyToOne(targetEntity="App\Entity\Company")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_company", referencedColumnName="co_id", nullable=true, onDelete="CASCADE")
* })
*/
private $company;
/**
* @var int|null
* @var \App\Entity\Account
* @ORM\ManyToOne(targetEntity="App\Entity\Account")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_account", referencedColumnName="ac_id", nullable=true, onDelete="CASCADE")
* })
*/
private $account;
/**
* @var string
* @ORM\Column(name="p_email", type="string", nullable=true)
* @Assert\Email(message = "The email '{{ value }}' is not valid")
*/
private $email;
/**
* @var string
* @ORM\Column(name="p_zip", type="string", length=50, nullable=true)
*/
private $zip;
/**
* @var string
* @ORM\Column(name="p_phone", type="string", length=50, nullable=true)
*/
private $phone;
/**
* @var string
* @ORM\Column(name="p_landline_phone", type="string", length=50, nullable=true)
*/
private $landlinePhone;
/**
* @var string
* @ORM\Column(name="p_landline_phone_ext", type="string", length=50, nullable=true)
*/
private $landlinePhoneExt;
/**
* @var integer
* @ORM\Column(name="p_portafolio_size", type="string", nullable=true)
*/
private $portafolioSize;
/**
* @var integer
* @ORM\Column(name="p_monthly_restaurant_sales", type="string", nullable=true)
*/
private $monthlyRestaurantSales;
/**
* @var string
* @ORM\Column(name="p_number_agent", type="string", nullable=true)
*/
private $numberAgent;
/**
* @var \DateTime
* @ORM\Column(name="p_created_time_frame", type="datetime", nullable=true)
*/
private $createdTimeFrame;
/**
* @var integer
* @ORM\Column(name="p_time_frame", type="integer", nullable=true)
*/
private $timeFrame;
/**
* @var \App\Entity\User
* @ORM\ManyToOne(targetEntity="App\Entity\User")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_user", referencedColumnName="us_id", nullable=true, onDelete="CASCADE")
* })
*/
private $user;
/**
* @var string
* @ORM\Column(name="p_deleted", type="boolean", nullable=true)
*/
private $deleted = 0;
/**
* @var \App\Entity\Country
* @ORM\ManyToOne(targetEntity="App\Entity\Country")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_country", referencedColumnName="co_id", nullable=true)
* })
*/
private $country;
/**
* @var \App\Entity\State
* @ORM\ManyToOne(targetEntity="App\Entity\State")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_state", referencedColumnName="st_id", nullable=true)
* })
*/
private $state;
/**
* @var boolean
* @ORM\Column(name="p_is_other_country", type="boolean", nullable=true)
*/
private $isOtherCountry;
/**
* @var string
* @ORM\Column(name="p_other_country", type="string", length=50, nullable=true)
*/
private $otherCountry;
/**
* @var \App\Entity\Timezone
* @ORM\ManyToOne(targetEntity="App\Entity\Timezone")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="p_time_zone", referencedColumnName="tm_id", nullable=true)
* })
*/
private $timeZone;
/**
* @var integer
* @ORM\Column(name="p_notified", type="integer", nullable=true)
*/
private $notified;
/**
* @var integer
* @ORM\Column(name="p_is_checked_by_agent", type="integer", nullable=true)
*/
private $isCheckedByAgent = 0;
/**
* @var \DateTime
* @ORM\Column(name="p_date_attempted_registration", type="datetime", nullable=true)
*/
private $dateAttemptedRegistration;
/**
* @var boolean
* @ORM\Column(name="p_lead_need_demo", type="boolean", nullable=false, options={"default":false})
*/
private $leadNeedDemo = false;
/**
* @var boolean
* @ORM\Column(name="p_lead_perspect_account", type="boolean", nullable=false, options={"default":false})
*/
private $leadPerspectAccount = false;
/**
* @var boolean
* @ORM\Column(name="p_restraurant_demo", type="boolean", nullable=false, options={"default":false})
*/
private $isRestraurantDemo = false;
/**
* @var string
* @ORM\Column(name="p_number_locations", type="string", nullable=true)
*/
private $numberLocations;
/**
* @var string
* @ORM\Column(name="p_type_business", type="string", nullable=true)
*/
private $typeBusiness;
/**
* @var string
* @ORM\Column(name="p_number_stations", type="string", nullable=true)
*/
private $numberStations;
/**
* @var string
* @ORM\Column(name="p_res_time_frame", type="string", nullable=true)
*/
private $resTimeFrame;
/**
* @return string
*/
public function __toString() {
return "" . $this->getFullName();
}
public function getId(){
return $this->id;
}
public function getFullName(){
return $this->fullName;
}
public function setFullName(string $fullName){
$this->fullName = $fullName;
}
public function setCompanyName(string $companyName){
$this->companyName = $companyName;
}
public function getCompanyName(){
return $this->companyName;
}
public function getCompany(){
return $this->company;
}
public function setCompany($company){
$this->company = $company;
}
public function getEmail(){
return $this->email;
}
public function setEmail(string $email){
$this->email = $email;
}
public function getZip(){
return $this->zip;
}
public function setZip(string $zip){
$this->zip = $zip;
}
public function getPhone(){
return $this->phone;
}
public function setPhone(string $phone){
$this->phone = $phone;
}
public function getLandlinePhone(){
return $this->landlinePhone;
}
public function setLandlinePhone(string $landlinePhone){
$this->landlinePhone = $landlinePhone;
}
public function getLandlinePhoneExt(){
return $this->landlinePhoneExt;
}
public function setLandlinePhoneExt(string $landlinePhoneExt){
$this->landlinePhoneExt = $landlinePhoneExt;
}
public function getPortafolioSize(){
return $this->portafolioSize;
}
public function setPortafolioSize($portafolioSize){
$this->portafolioSize = $portafolioSize;
}
public function getMonthlyRestaurantSales(){
return $this->monthlyRestaurantSales;
}
public function setMonthlyRestaurantSales($monthlyRestaurantSales){
$this->monthlyRestaurantSales = $monthlyRestaurantSales;
return $this;
}
public function getNumberAgent(){
return $this->numberAgent;
}
public function setNumberAgent(string $numberAgent){
$this->numberAgent = $numberAgent;
}
public function getCreatedTimeFrame(){
return $this->createdTimeFrame;
}
public function setCreatedTimeFrame(\DateTime $createdTimeFrame){
$this->createdTimeFrame = $createdTimeFrame;
}
public function getTimeFrame(){
return $this->timeFrame;
}
public function setTimeFrame($timeFrame){
$this->timeFrame = $timeFrame;
}
public function getUser(){
return $this->user;
}
public function setUser($user){
$this->user = $user;
}
public function getDeleted() {
return $this->deleted;
}
public function setDeleted($deleted) {
$this->deleted = $deleted;
}
public static function filterSearchParameters($alias, $otherAlias, $search) {
$textParameters = $join = '';
$parameters = [];
if (isset($search['fullName']) && $search['fullName'] != '') {
$textParameters .= " AND $alias.p_full_name LIKE ? ";
$parameters[] = "%" . $search['fullName'] . "%";
}
if (isset($search['companyName']) && $search['companyName'] != '') {
$textParameters .= " AND $alias.p_company_name LIKE ? ";
$parameters[] = "%" . $search['companyName'] . "%";
}
if (isset($search['email']) && $search['email'] != '') {
$textParameters .= " AND $alias.p_email LIKE ? ";
$parameters[] = "%" . $search['email'] . "%";
}
if (isset($search['phone']) && $search['phone'] != '') {
$textParameters .= " AND $alias.p_phone = ? ";
$parameters[] = $search['phone'];
}
if (isset($search['zip']) && $search['zip'] != '') {
$textParameters .= " AND $alias.p_zip = ? ";
$parameters[] = $search['zip'];
}
if (isset($search['timeFrame']) && $search['timeFrame'] != '') {
$textParameters .= " AND $alias.p_time_frame = ? ";
$parameters[] = $search['timeFrame'];
}
if (isset($search['status']) && (int) $search['status'] == self::ACTIVE) {
$textParameters .= " AND (CASE WHEN {$otherAlias['asPlanningTask']}.pt_id IS NULL THEN false ELSE true END) = ? ";
$parameters[] = true;
}
if (isset($search['status']) && (int) $search['status'] == self::INACTIVE) {
$textParameters .= " AND (CASE WHEN {$otherAlias['asPlanningTask']}.pt_id IS NULL THEN false ELSE true END) = ? ";
$parameters[] = false;
}
if (isset($search['leadPerspectAccount']) && is_bool($search['leadPerspectAccount'])) {
$textParameters .= " AND P.p_lead_perspect_account = ? ";
$parameters[] = $search['leadPerspectAccount'];
}
if (isset($search['user']) && $search['user'] != '') {
$textParameters .= " AND {$otherAlias['asUser']}.us_id = ? ";
$parameters[] = $search['user'];
$join .= " JOIN user {$otherAlias['asUser']} ON {$otherAlias['asUser']}.us_id = $alias.p_user ";
}
if (isset($search['company']) && $search['company'] != '') {
$textParameters .= " AND {$otherAlias['asUser']}.us_company_id = ? ";
$parameters[] = $search['company'];
if(isset($search['user']) && $search['user'] != ''){
$join .= " JOIN company {$otherAlias['asCompany']} ON {$otherAlias['asCompany']}.co_id = {$otherAlias['asUser']}.us_company_id";
}else{
$join .= " JOIN user {$otherAlias['asUser']} ON {$otherAlias['asUser']}.us_id = $alias.p_user
JOIN company {$otherAlias['asCompany']} ON {$otherAlias['asCompany']}.co_id = {$otherAlias['asUser']}.us_company_id ";
}
}
return ['text' => $textParameters, 'parameters' => $parameters, 'join' => $join];
}
/**
* filter order parameters para consulta DQL segun el order solicitado
* @param String $alias
* @param String $secondAlias
* @param Array $order
* @return string el ORDER BY adecuado segun corresponda
*/
public static function filterOrderParameters($alias, $order) {
// se tiene que enviar '0' para que el ordenamiento sea ASC y '1' para que sea DESC
$orderBy = " ORDER BY $alias.p_created_time_frame DESC, $alias.p_full_name ASC ";
if (isset($order['fullName']) && $order['fullName'] != '') {
$orderBy = " ORDER BY $alias.p_full_name ";
$orderBy .= ($order['fullName'] % 2) ? "DESC" : "ASC";
}
if (isset($order['companyName']) && $order['companyName'] != '') {
$orderBy = " ORDER BY $alias.p_company_name ";
$orderBy .= ($order['companyName'] % 2) ? "DESC" : "ASC";
}
if (isset($order['email']) && $order['email'] != '') {
$orderBy = " ORDER BY $alias.p_email ";
$orderBy .= ($order['email'] % 2) ? "DESC" : "ASC";
}
if (isset($order['createdTimeFrame']) && $order['createdTimeFrame'] != '') {
$orderBy = " ORDER BY $alias.p_created_time_frame ";
$orderBy .= ($order['createdTimeFrame'] % 2) ? "DESC" : "ASC";
}
if (isset($order['user']) && $order['user'] != '') {
$orderBy = " ORDER BY $alias.p_user ";
$orderBy .= ($order['user'] % 2) ? "DESC" : "ASC";
}
if (isset($order['company']) && $order['company'] != '') {
$orderBy = " ORDER BY $alias.p_company ";
$orderBy .= ($order['company'] % 2) ? "DESC" : "ASC";
}
return $orderBy;
}
public function getCountry()
{
return $this->country;
}
public function setCountry($country)
{
$this->country = $country;
}
public function getState()
{
return $this->state;
}
public function setState($state)
{
$this->state = $state;
}
public function getIsOtherCountry()
{
return $this->isOtherCountry;
}
public function setIsOtherCountry($isOtherCountry)
{
$this->isOtherCountry = $isOtherCountry;
}
public function getOtherCountry()
{
return $this->otherCountry;
}
public function setOtherCountry(string $otherCountry)
{
$this->otherCountry = $otherCountry;
return $this;
}
public function getTimeZone()
{
return $this->timeZone;
}
public function setTimeZone($timeZone)
{
$this->timeZone = $timeZone;
return $this;
}
public function getNotified() {
return $this->notified;
}
public function setNotified(int $notified) {
$this->notified = $notified;
return $this;
}
public function getIsCheckedByAgent() {
return $this->isCheckedByAgent;
}
public function setIsCheckedByAgent(int $isCheckedByAgent) {
$this->isCheckedByAgent = $isCheckedByAgent;
return $this;
}
public function getDateAttemptedRegistration(){
return $this->dateAttemptedRegistration;
}
public function setDateAttemptedRegistration($dateAttemptedRegistration){
$this->dateAttemptedRegistration = $dateAttemptedRegistration;
return $this;
}
/**
* Función para pasar a de tipo objeto-entidad a json
*/
public function showEverything() {
return get_object_vars($this);
}
/**
* Get the value of leadNeedDemo
*/
public function getLeadNeedDemo(){
return $this->leadNeedDemo;
}
/**
* Set the value of leadNeedDemo
*/
public function setLeadNeedDemo($leadNeedDemo){
$this->leadNeedDemo = $leadNeedDemo;
}
/**
* Get the value of leadPerspectAccount
*/
public function getLeadPerspectAccount(){
return $this->leadPerspectAccount;
}
/**
* Set the value of leadPerspectAccount
*/
public function setLeadPerspectAccount($leadPerspectAccount){
$this->leadPerspectAccount = $leadPerspectAccount;
}
public function getAccount()
{
return $this->account;
}
public function setAccount($account)
{
$this->account = $account;
}
public function getIsRestraurantDemo(){
return $this->isRestraurantDemo;
}
public function setIsRestraurantDemo($isRestraurantDemo){
$this->isRestraurantDemo = $isRestraurantDemo;
}
public function getNumberLocations(){
return $this->numberLocations;
}
public function setNumberLocations(string $numberLocations){
$this->numberLocations = $numberLocations;
}
public function getTypeBusiness(){
return $this->typeBusiness;
}
public function setTypeBusiness(string $typeBusiness){
$this->typeBusiness = $typeBusiness;
}
public function getNumberStations(){
return $this->numberStations;
}
public function setNumberStations(string $numberStations){
$this->numberStations = $numberStations;
}
public function getResTimeFrame(){
return $this->resTimeFrame;
}
public function setResTimeFrame(string $resTimeFrame){
$this->resTimeFrame = $resTimeFrame;
}
}