public function getUltimaCotacao(Titulo $objTitulo)
 {
     $arrHistoricos = $this->getEntityManager()->createQueryBuilder()->select('tituloHistorico')->from('RafaelSantiagoTesouroDiretoBundle:TituloHistorico', 'tituloHistorico')->where('tituloHistorico.titulo = :tituloTesouroId')->setParameter('tituloTesouroId', $objTitulo->getTitulo()->getId())->orderBy('tituloHistorico.data', 'DESC')->getQuery()->execute();
     return count($arrHistoricos) ? $arrHistoricos[0] : false;
 }
 public function getRentabilidadeTitulo(Titulo $objTitulo)
 {
     $arrRentabilidades = array();
     $objDataHoje = new Carbon('today');
     // Busca último historico de preço
     $query = $this->getEntityManager()->createQueryBuilder()->select('tituloHistorico')->from('RafaelSantiagoTesouroDiretoBundle:TituloHistorico', 'tituloHistorico')->where('tituloHistorico.data <= :data')->andWhere('tituloHistorico.titulo = :tituloTesouroId')->orderBy('tituloHistorico.data', 'DESC')->setParameter('tituloTesouroId', $objTitulo->getTitulo()->getId())->setParameter('data', $objDataHoje);
     $arrTitulosHistorico = $query->getQuery()->execute();
     if (count($arrTitulosHistorico) > 0) {
         $objTituloHistoricoHoje = $arrTitulosHistorico[0];
         $objDataUltimaCotacao = Carbon::instance($objTituloHistoricoHoje->getData());
         $arrRentabilidades['today'] = array('date' => $objDataUltimaCotacao->format('Y-m-d'), 'value' => $objTituloHistoricoHoje->getValorVenda() * $objTitulo->getQuantidade());
     } else {
         return null;
     }
     // Query para busca das cotações antigas
     $query = $this->getEntityManager()->createQueryBuilder()->select('tituloHistorico')->from('RafaelSantiagoTesouroDiretoBundle:TituloHistorico', 'tituloHistorico')->where('tituloHistorico.data >= :data')->andWhere('tituloHistorico.data >= :data_compra')->andWhere('tituloHistorico.titulo = :tituloTesouroId')->orderBy('tituloHistorico.data', 'ASC')->setParameter('tituloTesouroId', $objTitulo->getTitulo()->getId())->setParameter('data_compra', $objTitulo->getDataCompra());
     // 1 day
     $objDataOntem = clone $objDataUltimaCotacao;
     $objDataOntem = $objDataOntem->subDay();
     $query->setParameter('data', $objDataOntem);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['1day'] = array('date' => $objDataOntem->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     } else {
         $arrRentabilidades['1day'] = array('date' => $objDataUltimaCotacao->format('Y-m-d'), 'value' => $arrRentabilidades['today']);
     }
     // Week
     $objDataWeek = clone $objDataUltimaCotacao;
     $objDataWeek = $objDataWeek->startOfWeek();
     $query->setParameter('data', $objDataWeek);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['week'] = array('date' => $objDataWeek->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     }
     // month
     $objDataMonth = clone $objDataUltimaCotacao;
     $objDataMonth = $objDataMonth->firstOfMonth();
     $query->setParameter('data', $objDataMonth);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['month'] = array('date' => $objDataMonth->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     }
     // 30 days
     $objData30days = clone $objDataUltimaCotacao;
     $objData30days = $objData30days->subDays(30);
     $query->setParameter('data', $objData30days);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['30days'] = array('date' => $objData30days->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     }
     // year
     $objDataYear = clone $objDataUltimaCotacao;
     $objDataYear = $objDataYear->firstOfYear();
     $query->setParameter('data', $objDataYear);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['year'] = array('date' => $objDataYear->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     }
     // 12 months
     $objData12months = $objDataUltimaCotacao->subMonths(12);
     $query->setParameter('data', $objData12months);
     $arrTituloHistorico = $query->getQuery()->execute();
     if (Count($arrTituloHistorico) > 0) {
         /** @var TituloHistorico $objTituloHistorico */
         $objTituloHistorico = $arrTituloHistorico[0];
         $arrRentabilidades['12months'] = array('date' => $objData12months->format('Y-m-d'), 'value' => $objTituloHistorico->getValorVenda() * $objTitulo->getQuantidade());
     }
     return $arrRentabilidades;
 }