src/Application/Internit/LeadBundle/Entity/Product.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Application\Internit\LeadBundle\Entity;
  3. use App\Application\Internit\RealEstateBundle\Entity\RealEstate;
  4. use Doctrine\ORM\Mapping as ORM;
  5. use App\Application\Internit\ContentBundle\Entity\Entity;
  6. use Doctrine\Common\Collections\ArrayCollection;
  7. /**
  8.  * Product
  9.  *
  10.  * @ORM\Table(name="internit_lead_product")
  11.  * @ORM\Entity(repositoryClass="App\Application\Internit\LeadBundle\Repository\ProductRepository")
  12.  */
  13. class Product extends Entity
  14. {
  15.   /**
  16.    * @var string
  17.    *
  18.    * @ORM\Column(name="name", type="string", length=255)
  19.   */
  20.   protected $name;
  21.   /**
  22.    * @var string
  23.    *
  24.    * @ORM\Column(name="description", type="string", length=255, nullable=true)
  25.   */
  26.   protected $description;
  27.   /**
  28.    * @var string
  29.    *
  30.    * @ORM\Column(name="token", type="string", length=32, nullable=true)
  31.   */
  32.   protected $token 0;
  33.   /**
  34.    *  @ORM\OneToMany(targetEntity="ProductUser", mappedBy="product", cascade={"persist","remove"}) 
  35.    *  @ORM\OrderBy({"position" = "ASC"})
  36.    */
  37.   protected $productUsers;
  38.   /** 
  39.    * @ORM\OneToMany(targetEntity="Lead", mappedBy="product") 
  40.    **/
  41.   protected $leads;
  42.   /**
  43.    * @var null|string
  44.    *
  45.    * @ORM\Column(name="viva_real", type="string", nullable=true)
  46.    */
  47.   protected $vivaReal;
  48.   /**
  49.    * @var null|string
  50.    *
  51.    * @ORM\Column(name="zap", type="string", nullable=true)
  52.    */
  53.   protected $zap;
  54.   /**
  55.    * @var null|string
  56.    *
  57.    * @ORM\Column(name="olx", type="string", nullable=true)
  58.    */
  59.   protected $olx;
  60.   /**
  61.    * @var string
  62.    *
  63.    * @ORM\Column(name="turn", type="integer")
  64.   */
  65.   protected $turn 0;
  66.   /**
  67.    *  @ORM\OneToMany(targetEntity="realStatePercent", mappedBy="product", cascade={"persist","remove"}) 
  68.    *  @ORM\OrderBy({"percent" = "DESC"})
  69.    * */
  70.   protected $realStatePercents;
  71.   /**
  72.    * E-mail que recebe todos os leads captados nesta campanha.
  73.    * 
  74.    * @ORM\Column(name="email", type="string", length=255, nullable=true)
  75.    */
  76.   protected $email;
  77.   public function __construct() {
  78.       $this->productUsers = new ArrayCollection();
  79.       $this->realStatePercents = new ArrayCollection();
  80.       $this->leads = new ArrayCollection();
  81.   }
  82.   /**
  83.    * Get the value of name
  84.    *
  85.    * @return  string
  86.    */ 
  87.   public function getName()
  88.   {
  89.     return $this->name;
  90.   }
  91.   /**
  92.    * Set the value of name
  93.    *
  94.    * @param  string  $name
  95.    *
  96.    * @return  self
  97.    */ 
  98.   public function setName($name)
  99.   {
  100.     $this->name $name;
  101.     return $this;
  102.   }
  103.   /**
  104.    * Get the value of description
  105.    *
  106.    * @return  string
  107.    */ 
  108.   public function getDescription()
  109.   {
  110.     return $this->description;
  111.   }
  112.   /**
  113.    * Set the value of description
  114.    *
  115.    * @param  string  $description
  116.    *
  117.    * @return  self
  118.    */ 
  119.   public function setDescription($description)
  120.   {
  121.     $this->description $description;
  122.     return $this;
  123.   }
  124.   /**
  125.    * Get the value of token
  126.    *
  127.    * @return  string
  128.    */ 
  129.   public function getToken()
  130.   {
  131.     return $this->token;
  132.   }
  133.   /**
  134.    * Set the value of token
  135.    *
  136.    * @param  string  $token
  137.    *
  138.    * @return  self
  139.    */ 
  140.   public function setToken($token)
  141.   {
  142.     $this->token $token;
  143.     return $this;
  144.   }
  145.   /**
  146.    * Get the value of productUsers
  147.    */ 
  148.   public function getProductUsers()
  149.   {
  150.     return $this->productUsers;
  151.   }
  152.   /**
  153.    * Set the value of productUsers
  154.    *
  155.    * @return  self
  156.    */ 
  157.   public function setProductUsers($productUsers)
  158.   {
  159.     $this->productUsers $productUsers;
  160.     return $this;
  161.   }
  162.   public function addProductUsers($productUsers)
  163.   {      
  164.     if ($this->productUsers == null || $this->productUsers->contains($productUsers)) {
  165.       return;
  166.     }
  167.     $this->productUsers[] = $productUsers;
  168.     // $productUsers->setProduct($this);
  169.   }
  170.   public function removeProductUsers($productUsers)
  171.   {
  172.     $this->productUsers->removeElement($productUsers);
  173.     return $this;
  174.   }
  175.   /**
  176.    * Get the value of turn
  177.    *
  178.    * @return  string
  179.    */ 
  180.   public function getTurn()
  181.   {
  182.     return $this->turn;
  183.   }
  184.   /**
  185.    * Set the value of turn
  186.    *
  187.    * @param  string  $turn
  188.    *
  189.    * @return  self
  190.    */ 
  191.   public function setTurn(string $turn)
  192.   {
  193.     $this->turn $turn;
  194.     return $this;
  195.   }
  196.   /**
  197.    * Get the value of leads
  198.    */ 
  199.   public function getLeads()
  200.   {
  201.     return $this->leads;
  202.   }
  203.   /**
  204.    * Set the value of leads
  205.    *
  206.    * @return  self
  207.    */ 
  208.   public function setLeads($leads)
  209.   {
  210.     $this->leads $leads;
  211.     return $this;
  212.   }
  213.   /**
  214.    * Get the value of leads
  215.    */ 
  216.   public function getCorretores()
  217.   {
  218.     $corretores = [];
  219.     foreach ($this->productUsers as $corretor) {
  220.        // dump($corretor);
  221.       $corretores[] = $corretor->getUser()->getEmail();
  222.     }
  223.     return $corretores;
  224.   }
  225.   public function nextCorretor()
  226.   {
  227.       $email $this->getProductUsers()->slice($this->getTurn(), 1);
  228.       
  229.       if (count($email)) {
  230.           return current($email);
  231.       }
  232.       return false;
  233.   }
  234.   public function getCorretorPosition($position)
  235.     {
  236.         return $this->getProductUsers()->slice($position1)[0];
  237.     }
  238.   /**
  239.    * Get the value of realStatePercent
  240.    */ 
  241.   public function getRealStatePercents()
  242.   {
  243.     return $this->realStatePercents;
  244.   }
  245.   /**
  246.    * Set the value of realStatePercent
  247.    *
  248.    * @return  self
  249.    */ 
  250.   public function setRealStatePercents($realStatePercents)
  251.   {
  252.     $this->realStatePercents $realStatePercents;
  253.     return $this;
  254.   }
  255.   public function addRealStatePercents($realStatePercent)
  256.   {      
  257.     if ($this->realStatePercents == null || $this->realStatePercents->contains($realStatePercent)) {
  258.       return;
  259.     }
  260.     $this->realStatePercents[] = $realStatePercent;
  261.     // $productUsers->setProduct($this);
  262.   }
  263.   public function removeRealStatePercents($productUser)
  264.   {
  265.     $this->realStatePercents->removeElement($productUser);
  266.     return $this;
  267.   }
  268.   public function getTotalExtraLeads()
  269.   {
  270.       $total 0;
  271.       foreach ($this->realStatePercents as $realState) {
  272.           $total += $realState->getExtraLeads();
  273.       }
  274.       return $total;
  275.   }
  276.   public function getCorretorLeadsByRealState(RealEstate $realState)
  277.   {
  278.       $corretorLeads = [];
  279.       /** @var $productUser ProductUser */
  280.       foreach ($this->getProductUsers() as $productUser) {
  281.         if($productUser->getRealEstate() == $realState) {
  282.             $corretorLeads[] = [
  283.                 'id' => $productUser->getUser()->getId(),
  284.                 'name' => $productUser->getUser()->getFirstName(),
  285.                 'email' => $productUser->getUser()->getEmail(),
  286.                 'qtdLeads' => $this->getQtdCorretorLeads($productUser->getUser()),
  287.                 'position' => $productUser->getPosition(),
  288.             ];
  289.         }
  290.       }
  291.       return $corretorLeads;
  292.   }
  293.   public function getLeadsGroupByRealState()
  294.   {
  295.       $result = [];
  296.       $corretorLeads = [];
  297.       /** @var Lead $lead */
  298.       foreach ($this->getLeads() as $lead) {
  299.           if(!isset($corretorLeads[$lead->getBrokerEmail()]))
  300.               $corretorLeads[$lead->getBrokerEmail()] = 1;
  301.           else{
  302.               $corretorLeads[$lead->getBrokerEmail()] += 1;
  303.           }
  304.       }
  305.       /** @var realStatePercent $realStatePercent */
  306.  /*     foreach ($this->realStatePercents as $realStatePercent) {
  307.           $realState = $realState->getRealState();
  308.       }*/
  309.       return $corretorLeads;
  310.   }
  311.   public function getQtdCorretorLeads($corretor)
  312.   {
  313.       $qtdLeads 0;
  314.       /** @var $lead Lead */
  315.       foreach ($this->getLeads() as $lead) {
  316.           if($lead->getBrokerEmail() == $corretor->getEmail()) { $qtdLeads++; }
  317.       }
  318.       return $qtdLeads;
  319.   }
  320.   public function getRealStateProductInfo()
  321.   {
  322.       $realStates = [];
  323.       foreach ($this->realStatePercents as $realState) {
  324.           $qtdLeads 0;
  325.           $firstLead $lastLead null;
  326.           foreach($this->getLeads() as $lead) {
  327.               if ($lead->getBrokerRealState() == $realState->getRealEstate()->getName()) {
  328.                   $qtdLeads++;
  329.                   if(!$firstLead || $lead->getCreatedAt() < $firstLead)
  330.                     $firstLead $lead->getCreatedAt();
  331.                   if(!$lastLead || $lead->getCreatedAt() > $lastLead)
  332.                       $lastLead $lead->getCreatedAt();
  333.               }
  334.           }
  335.           $realStates[] =[
  336.               'id' => $realState->getRealEstate()->getId(),
  337.               'name' => $realState->getRealEstate()->getName(),
  338.               'percent' =>  $realState->getPercent(),
  339.               'qtdLeads' => $qtdLeads,
  340.               'extraLeads' => $realState->getExtraLeads(),
  341.               'firstLead' => $firstLead,
  342.               'lastLead' => $lastLead,
  343.               'turn' => $realState->getTurn(),
  344.               'corretores' => $this->getCorretorLeadsByRealState($realState->getRealEstate()),
  345.           ];
  346.       }
  347.       //shuffle($realStates);
  348.       usort($realStates, function($a$b) { return $a['percent'] <= $b['percent']; });
  349.       return $realStates;
  350.   }
  351.   public function getRealStatePercentByName()
  352.   {
  353.     $realStates = [];
  354.     foreach ($this->realStatePercents as $realState) {
  355.       $realStates[$realState->getRealEstate()->getName()] = $realState->getPercent();
  356.     }
  357.     return $realStates;
  358.   }
  359.     public function getRealStatePercentByName2()
  360.     {
  361.         $realStates = [];
  362.         foreach ($this->realStatePercents as $realState) {
  363.             $realStates[str_replace(' '''$realState->getRealEstate()->getName())] = $realState->getPercent();
  364.         }
  365.         return $realStates;
  366.     }
  367.   /**
  368.    * 
  369.    */
  370.   public function countLeadsPerRealState()
  371.   {
  372.     $realStateLeadCounts $this->getRealStateNames();
  373.     foreach($this->getLeads() as $lead) {
  374.       if (isset($realStateLeadCounts[$lead->getBrokerRealState()])) {
  375.         $realStateLeadCounts[$lead->getBrokerRealState()]++;
  376.       }
  377.     }
  378.     return $realStateLeadCounts;
  379.   }
  380.     public function countLeadsPerRealState2()
  381.     {
  382.         $realStateLeadCounts $this->getRealStateNames();
  383.         foreach($this->getLeads() as $lead) {
  384.             if (isset($realStateLeadCounts[$lead->getBrokerRealState()])) {
  385.                 $realStateLeadCounts[$lead->getBrokerRealState()]++;
  386.             }
  387.         }
  388.         foreach ($this->getRealStateProductInfo() as $realStateInfo) {
  389.             if (isset($realStateLeadCounts[$realStateInfo['name']])) {
  390.                 $realStateLeadCounts[$realStateInfo['name']]+=$realStateInfo['extraLeads'];
  391.             }
  392.         }
  393.         return $realStateLeadCounts;
  394.     }
  395.   /**
  396.    * Obtém a lista de nomes das imobiliárias envolvidas no produto
  397.    */
  398.   private function getRealStateNames()
  399.   {
  400.     $realStateNames =  array_keys($this->getRealStatePercentByName());
  401.     $counts = array();
  402.     foreach($realStateNames as $name) {
  403.       $counts[$name] = 0;
  404.     }
  405.     return $counts;
  406.   }
  407.   /**
  408.    * Get e-mail que recebe todos os leads captados nesta campanha.
  409.    */ 
  410.   public function getEmail()
  411.   {
  412.     return $this->email;
  413.   }
  414.   /**
  415.    * Set e-mail que recebe todos os leads captados nesta campanha.
  416.    *
  417.    * @return  self
  418.    */ 
  419.   public function setEmail($email)
  420.   {
  421.     $this->email $email;
  422.     return $this;
  423.   }
  424.     /**
  425.      * @return string|null
  426.      */
  427.     public function getVivaReal(): ?string
  428.     {
  429.         return $this->vivaReal;
  430.     }
  431.     /**
  432.      * @param string|null $vivaReal
  433.      */
  434.     public function setVivaReal(?string $vivaReal): void
  435.     {
  436.         $this->vivaReal $vivaReal;
  437.     }
  438.     /**
  439.      * @return string|null
  440.      */
  441.     public function getZap(): ?string
  442.     {
  443.         return $this->zap;
  444.     }
  445.     /**
  446.      * @param string|null $zap
  447.      */
  448.     public function setZap(?string $zap): void
  449.     {
  450.         $this->zap $zap;
  451.     }
  452.     /**
  453.      * @return string|null
  454.      */
  455.     public function getOlx(): ?string
  456.     {
  457.         return $this->olx;
  458.     }
  459.     /**
  460.      * @param string|null $olx
  461.      */
  462.     public function setOlx(?string $olx): void
  463.     {
  464.         $this->olx $olx;
  465.     }
  466. }