/** * Método responsável pela inserção dos dados no Banco de Dados * @throws Exception */ public function processarArquivo() { if ($this->validacao()) { $oDoctrine = Zend_Registry::get('em'); try { $oDoctrine->getConnection()->beginTransaction(); $oDataSistema = new DateTime(); $oImportacaoDesif = new Contribuinte_Model_ImportacaoDesif(); $oImportacaoDesif->setContribuinte($this->oContribuinte->getEntity()); $oImportacaoDesif->setDataImportacao($oDataSistema); $oImportacaoDesif->setCompetenciaInicial($this->oDadosDesif->sCompetenciaInicial); $oImportacaoDesif->setCompetenciaFinal($this->oDadosDesif->sCompetenciaFinal); $oImportacaoDesif->setVersao($this->oDadosDesif->sVersao); $oImportacaoDesif->setNomeArquivo($this->oDadosDesif->sNomeArquivo); $oImportacaoDesif->persist(); //Retornar o id para gerar o protocolo de sucesso $iImportacaoDesifId = $oImportacaoDesif->getId(); // Grava as contas que ainda não estão salvas no plano de contas do DESIF foreach ($this->aDadosDesifContas as $oDadosConta) { $aDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDadosConta->sConta, 'contribuinte' => $this->oContribuinte->getEntity())); $oDesifConta = array_shift($aDesifConta); if (empty($oDesifConta)) { $oPlanoContaAbrasf = Contribuinte_Model_PlanoContaAbrasf::getByAttribute('conta_abrasf', $oDadosConta->sContaCosif); //Verifica se existe conta no plano abrasf para fazer o vínculo if (empty($oPlanoContaAbrasf)) { throw new Exception('Conta informada ' . $oDadosConta->sContaCosif . ' inexistente no plano de conta da ABRASF.', self::EXCEPTION_CONTA_INEXISTENTE_NO_PLANO_ABRASF); } $oImportacaoDesifConta = new Contribuinte_Model_ImportacaoDesifConta(); $oImportacaoDesifConta->setConta($oDadosConta->sConta); $oImportacaoDesifConta->setNome($oDadosConta->sNome); $oImportacaoDesifConta->setDescricaoConta($oDadosConta->sDescricaoConta); $oImportacaoDesifConta->setPlanoContaAbrasf($oPlanoContaAbrasf->getEntity()); $oImportacaoDesifConta->setContribuinte($this->oContribuinte->getEntity()); if (!empty($oDadosConta->sContaPai)) { $aContaPai = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDadosConta->sContaPai, 'contribuinte' => $this->oContribuinte->getEntity())); $oContaPai = array_shift($aContaPai); $oImportacaoDesifConta->setImportacaoDesifConta($oContaPai->getEntity()); } $oImportacaoDesifConta->persist(); } } // Adiciona os dados das tarifas do banco foreach ($this->aDadosDesifTarifas as $oDesifTarifa) { $aImportacaoDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oDesifTarifa->sConta, 'contribuinte' => $this->oContribuinte->getEntity())); $oImportacaoDesifConta = array_shift($aImportacaoDesifConta); if (!empty($oImportacaoDesifConta)) { $oImportacaoDesifTarifa = new Contribuinte_Model_ImportacaoDesifTarifa(); $oImportacaoDesifTarifa->setImportacaoDesif($oImportacaoDesif->getEntity()); $oImportacaoDesifTarifa->setImportacaoDesifConta($oImportacaoDesifConta->getEntity()); $oImportacaoDesifTarifa->setTarifaBanco($oDesifTarifa->sTarifaConta); $oImportacaoDesifTarifa->setDescricao($oDesifTarifa->sDescricao); $oImportacaoDesifTarifa->persist(); } } // Adiciona os dados das receitas informadas foreach ($this->aDadosDesifReceitas as $oReceita) { $aImportacaoDesifConta = Contribuinte_Model_ImportacaoDesifConta::getByAttributes(array('conta' => $oReceita->sConta, 'contribuinte' => $this->oContribuinte->getEntity())); $oImportacaoDesifConta = array_shift($aImportacaoDesifConta); if (empty($oImportacaoDesifConta)) { throw new Exception("Conta {$oReceita->sConta} é inválida!"); } $oImportacaoDesifReceita = new Contribuinte_Model_ImportacaoDesifReceita(); $oImportacaoDesifReceita->setImportacaoDesif($oImportacaoDesif->getEntity()); $oImportacaoDesifReceita->setImportacaoDesifConta($oImportacaoDesifConta->getEntity()); $oImportacaoDesifReceita->setSubTitu($oReceita->sConta); $oImportacaoDesifReceita->setCodTribDesif($oReceita->sCodTribDesif); $oImportacaoDesifReceita->setValrCredMens($oReceita->fValrCredMens); $oImportacaoDesifReceita->setValrDebtMens($oReceita->fValrDebtMens); $oImportacaoDesifReceita->setReceDecl($oReceita->fReceDecl); $oImportacaoDesifReceita->setDeduReceDecl($oReceita->fDeduReceDecl); $oImportacaoDesifReceita->setDescDedu($oReceita->fDescDedu); $oImportacaoDesifReceita->setBaseCalc($oReceita->fBaseCalc); $oImportacaoDesifReceita->setAliqIssqn($oReceita->fAliqIssqn); $oImportacaoDesifReceita->setInctFisc($oReceita->fInctFisc); $oImportacaoDesifReceita->persist(); } $oDoctrine->getConnection()->commit(); return $iImportacaoDesifId; } catch (Exception $oErro) { $oDoctrine->getConnection()->rollback(); if ($oErro->getCode() == self::EXCEPTION_CONTA_INEXISTENTE_NO_PLANO_ABRASF) { throw $oErro; } throw new Exception('Erro ao processar os arquivos da DES-IF!'); } } }