/**
  * Processa uma transação recebida por um gateway de pagamento
  * @param $servico
  * @param Object $transaction
  * @return Inscricao em caso de sucesso, ou a string com a falha
  * @internal param $string
  */
 public function processarTransacaoPagSeguro($transaction)
 {
     // Iniciar variáveis
     $id_inscricao = null;
     if (get_class($transaction) != 'PagSeguroTransactionSummary' && get_class($transaction) != 'PagSeguroTransaction') {
         return "Registro do tipo " . get_class($transaction);
     }
     //        Plib::var_dump($servico);
     //        Plib::var_dump($transaction);
     $status = $transaction->getStatus()->getValue();
     $id_inscricao = $transaction->getReference();
     $valorBruto = $transaction->getGrossAmount();
     $valorLiquido = $transaction->getNetAmount();
     $taxa = $valorBruto - $valorLiquido;
     $data = $transaction->getDate();
     $data_pagseguro = $transaction->getLastEventDate();
     $codigo = $transaction->getCode();
     if ($transaction->getPaymentMethod() != null) {
         $forma_pagamento = $transaction->getPaymentMethod()->getType()->getValue();
     }
     //if ($transaction->getPaymentMethod()->getCode())
     //$forma_pagamento = $transaction->getPaymentMethod()->getCode()->getValue();
     //        if ($id_inscricao!=546) return null;
     //        Plib::var_dump($transaction);
     if ($id_inscricao == null) {
         //            PLib::var_dump($transaction);
         //            die();
         return "Id da inscrição nulo. Codigo Transação: " . $codigo . ". Valor: " . PLib::format_cash($valorBruto) . ". Data: " . $data;
     }
     /** @var $inscricao Inscricao */
     $inscricao = Inscricoes::getInstance()->getById($id_inscricao);
     if ($inscricao == null) {
         return "Transação de inscrição não encontrada no banco de dados: " . $id_inscricao . " - Codigo Transação: " . $codigo;
     }
     // Pago?
     if ($status == 3 || $status == 4) {
         // Sim
         //            echo $inscricao->pessoa()->nome."<br>";
         //            var_dump($inscricao->forma_pagamento);
         //            echo "<br>";
         if ($inscricao->confirmado != 1 || $inscricao->forma_pagamento_gateway != $forma_pagamento || $inscricao->valor_liquido != $valorLiquido || $inscricao->forma_pagamento != 'Gateway' || $inscricao->confirmado == 0 && strtotime($inscricao->data_cancelamento) < strtotime($data_pagseguro)) {
             $inscricao->_observacao = "Inscrição confirmada";
             $inscricao->confirmarPagamento($status, $data, $valorBruto, $valorLiquido, $taxa, $codigo, $data_pagseguro, $forma_pagamento);
         }
         if ($inscricao->status_gateway != $status) {
             $inscricao = $inscricao->registrarStatusGateway($data_pagseguro, $codigo, $status, $forma_pagamento);
         }
     } else {
         if ($status == 6 || $status == 7) {
             // 6 - Estorno / 7 - Cancelada
             // Ainda não - Registrar o que? A situação né...
             // Se já estava pago e foi para Cancelada, alterar registro, avisar
             // Se já estava pago, registrar falha, pois é um estorno ou coisa do tipo
             // Pensar, porque pode ter sido paga em dinheiro, ai tem que reativar e tal, ignorar o cancelado
             echo "<hr>";
             var_dump(strtotime($inscricao->data_confirmacao));
             var_dump($inscricao->data_confirmacao);
             echo "<br>";
             var_dump(strtotime($data_pagseguro));
             var_dump($data_pagseguro);
             echo "<br>";
             var_dump(strtotime($inscricao->data_confirmacao) < strtotime($data_pagseguro));
             echo "<br>";
             echo "<br>";
             // Cancelada
             if ($inscricao->confirmado == '1' && $inscricao->forma_pagamento != 'Dinheiro' && $inscricao->forma_pagamento != 'Depósito' && strtotime($inscricao->data_confirmacao) < strtotime($data_pagseguro)) {
                 $inscricao->_observacao = "Pagamento cancelado (desfeito)";
                 $inscricao->cancelarFalhaPagamento(true);
             } else {
                 if ($inscricao->confirmado === null) {
                     $inscricao->_observacao = "Pagamento cancelado";
                     $inscricao->cancelarFalhaPagamento();
                 }
             }
             // Se foi pago em dinheiro, a inscrição permanece confirmada
         } else {
             // Registrar status apenas quando não confirmado
             if ($inscricao->confirmado == null && $inscricao->vencido == null) {
                 $inscricao = $inscricao->registrarStatusGateway($data_pagseguro, $codigo, $status, $forma_pagamento);
             }
         }
     }
     $inscricao->_status_gateway = $status . " - " . \lib\PagSeguroUtil::getStatusTituloString($status);
     $inscricao->save();
     return $inscricao;
 }
 /**
  * @param bool|true $considerarDados Irá considerar a forma de pagamento, se está confirmado, para então retornar o título mais realista
  * @return mixed
  */
 public function titulo_status_gateway($considerarDados = true)
 {
     if ($considerarDados) {
         if ($this->forma_pagamento != 'Gateway') {
             return null;
         } else {
             return PagSeguroUtil::getStatusTituloString($this->status_gateway);
         }
     } else {
         return PagSeguroUtil::getStatusTituloString($this->status_gateway);
     }
 }