/**
  * Método para salvar as contas que são obrigatórias
  *
  * @param array $aContas
  *
  * @return boolean
  * @throws Exception
  */
 public function salvarObrigatorio(array $aContas = null)
 {
     if (!is_array($aContas)) {
         throw new Exception('Erro ao salvar as Contas Obrigatórias!');
     }
     $oDoctrine = Zend_Registry::get('em');
     try {
         $oDoctrine->getConnection()->beginTransaction();
         if (!empty($aContas)) {
             $aParams = array('sets' => array('obrigatorio' => 'true'), 'where' => array('id' => $aContas));
             Contribuinte_Model_PlanoContaAbrasf::update($aParams['sets'], $aParams['where']);
         }
         $oDoctrine->getConnection()->commit();
         return TRUE;
     } catch (Exception $oErro) {
         $oDoctrine->getConnection()->rollback();
         throw new Exception('Erro ao salvar as Contas Obrigatórias!' . $oErro->getMessage());
     }
 }
 /**
  * Action responsável por listar as contas
  */
 public function listarContasAction()
 {
     if ($this->getRequest()->isPost()) {
         parent::noTemplate();
         $aRecord = array();
         $iLimit = $this->_request->getParam('rows');
         $iPage = $this->_request->getParam('page');
         $sSord = $this->_request->getParam('sord');
         $oPaginatorAdapter = new DBSeller_Controller_Paginator(Contribuinte_Model_PlanoContaAbrasf::getQuery(), 'Contribuinte_Model_PlanoContaAbrasf', 'Contribuinte\\PlanoContaAbrasf');
         /**
          * Ordena os registros
          */
         $oPaginatorAdapter->orderBy("e.id, e.conta_abrasf", $sSord);
         /**
          * Monta a paginação do GridPanel
          */
         $oResultado = new Zend_Paginator($oPaginatorAdapter);
         $oResultado->setItemCountPerPage($iLimit);
         $oResultado->setCurrentPageNumber($iPage);
         $iTotal = $oResultado->getTotalItemCount();
         $iTotalPages = $iTotal > 0 && $iLimit > 0 ? ceil($iTotal / $iLimit) : 0;
         foreach ($oResultado as $oPlanoContaAbrasf) {
             $oDadosColuna = new StdClass();
             $oDadosColuna->id = $oPlanoContaAbrasf->getId();
             $oDadosColuna->conta_abrasf = $oPlanoContaAbrasf->getContaAbrasf();
             $oDadosColuna->titulo_contabil_desc = $oPlanoContaAbrasf->getTituloContabilDesc();
             $oDadosColuna->tributavel = $oPlanoContaAbrasf->getTributavel();
             $oDadosColuna->obrigatorio = $oPlanoContaAbrasf->getObrigatorio();
             $aRecord[] = $oDadosColuna;
         }
         /**
          * Parametros de retorno do AJAX
          */
         $aRetornoJson = array('total' => $iTotalPages, 'page' => $iPage, 'records' => $iTotal, 'rows' => $aRecord);
         echo $this->getHelper('json')->sendJson($aRetornoJson);
     }
 }
 /**
  * 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!');
         }
     }
 }
 /**
  * Action responsável por salvar as alterações das obrigatoriedades das contas 
  */
 public function salvarContasAction()
 {
     parent::noTemplate();
     $aDados = $this->getRequest()->getParam('selecionados');
     if ($this->getRequest()->isPost()) {
         try {
             $oPlanoContaAbrasf = new Contribuinte_Model_PlanoContaAbrasf();
             if (!empty($aDados)) {
                 $oPlanoContaAbrasf->salvarObrigatorio($aDados);
             }
             $aRetornoJson['status'] = TRUE;
             $aRetornoJson['success'] = 'Alterações realizadas com sucesso';
         } catch (Exception $oErro) {
             $aRetornoJson['error'][] = $oErro->getMessage();
             $aRetornoJson['status'] = FALSE;
         }
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }