Example #1
0
 public function editar(Receita $receita)
 {
     $dados = array_filter($receita->getArrayCopy());
     $id = (int) $receita->getId();
     $objReceitaBd = $this->buscarUm($id);
     if ($objReceitaBd) {
         $dados['valor'] = str_replace(['.', ','], ['', '.'], $dados['valor']);
         $dados['data_vencimento'] = $this->converterData($receita->getDataVencimento());
         $dados['pagamento_data'] = !empty($receita->getPagamentoData()) ? $this->converterData($receita->getPagamentoData()) : null;
         $dados['modificado'] = $this->converterData();
         $conecao = $this->adapter->getDriver()->getConnection();
         $conecao->beginTransaction();
         try {
             $retorno = $this->update($dados, ['id' => $id]);
             if (!$retorno) {
                 $conecao->rollback();
                 return false;
             }
             $objContaAtual = $this->getConta()->buscarUm($objReceitaBd->getFkConta());
             $contaAtualSaldo = str_replace(['.', ','], ['', '.'], $objContaAtual->getSaldo());
             $receitaAtualSaldo = str_replace(['.', ','], ['', '.'], $objReceitaBd->getValor());
             if ($receita->getFkConta() != $objReceitaBd->getFkConta()) {
                 $saldoContaAtual = $contaAtualSaldo - $receitaAtualSaldo;
                 $objContaAtual->setSaldo($saldoContaAtual);
                 $retornoContaAtual = $this->getConta()->salvar($objContaAtual);
                 if ($retornoContaAtual) {
                     $objContaNova = $this->getConta()->buscarUm($receita->getFkConta());
                     $contaNovaSaldo = str_replace(['.', ','], ['', '.'], $objContaNova->getSaldo());
                     $saldoContaNova = $contaNovaSaldo + $dados['valor'];
                     $objContaNova->setSaldo($saldoContaNova);
                     $retornoContaNova = $this->getConta()->salvar($objContaNova);
                     if ($retornoContaNova) {
                         $conecao->commit();
                         return true;
                     }
                 }
                 $conecao->rollback();
                 return false;
             } elseif ($receita->getValor() != $objReceitaBd->getValor()) {
                 $novoSaldo = $contaAtualSaldo - $receitaAtualSaldo + $dados['valor'];
                 $objContaAtual->setSaldo($novoSaldo);
                 $retornoContaAtual = $this->getConta()->salvar($objContaAtual);
                 if ($retornoContaAtual) {
                     $conecao->commit();
                     return true;
                 }
                 $conecao->rollback();
                 return false;
             }
             $conecao->commit();
             return true;
         } catch (Exception $exc) {
             $conecao->rollback();
         }
     }
 }