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(); } } }