/**
  * Processa os dados do formulário de importação de RPS [json]
  * 
  * @return void
  */
 public function rpsProcessarAction()
 {
     parent::noLayout();
     $oForm = new Contribuinte_Form_ImportacaoArquivo();
     $oForm->renderizaCamposRPS();
     // Adiciona a validação do arquivo junto ao restante das mensagens de erro do form
     $aDados = array_merge($this->getRequest()->getPost(), array('isUploaded' => $oForm->arquivo->isUploaded()));
     // Valida o formulario e processa a importação
     if ($this->getRequest()->isPost() && $oForm->arquivo->isUploaded()) {
         $oArquivoUpload = new Zend_File_Transfer_Adapter_Http();
         try {
             $oArquivoUpload->setDestination(APPLICATION_PATH . '/../public/tmp/');
             // Confirma o upload e processa o arquivo
             if ($oArquivoUpload->receive()) {
                 $oImportacaoModelo1 = new Contribuinte_Model_ImportacaoArquivoRpsModelo1();
                 $oImportacaoModelo1->setArquivoCarregado($oArquivoUpload->getFileName());
                 $oArquivoCarregado = $oImportacaoModelo1->carregar();
                 if ($oArquivoCarregado != NULL && $oImportacaoModelo1->validaArquivoCarregado()) {
                     // Valida as regras de negócio e processa a importação
                     $oImportacaoProcessamento = new Contribuinte_Model_ImportacaoArquivoProcessamento();
                     $oImportacaoProcessamento->setCodigoUsuarioLogado($this->usuarioLogado->getId());
                     $oImportacaoProcessamento->setArquivoCarregado($oArquivoCarregado);
                     // Processa a importação
                     $oImportacao = $oImportacaoProcessamento->processarImportacaoRps();
                     if ($oImportacao->getId()) {
                         $sUrlRecibo = "/contribuinte/importacao-arquivo/rps-recibo/id/{$oImportacao->getId()}";
                         $aRetornoJson['status'] = TRUE;
                         $aRetornoJson['url'] = $this->view->baseUrl($sUrlRecibo);
                         $aRetornoJson['success'] = $this->translate->_('Arquivo importado com sucesso.');
                     } else {
                         throw new Exception($this->translate->_('Ocorreu um erro ao importar o arquivo.'));
                     }
                 } else {
                     throw new Exception($oImportacaoModelo1->processaErroSistema());
                 }
             }
         } catch (DBSeller_Exception_ImportacaoXmlException $oErro) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'] = array_merge(array('<b>' . $this->translate->_('Ocorreu um erro ao importar o arquivo:') . '</b><br>'), $oErro->getErrors());
         } catch (Exception $oErro) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $oErro->getMessage();
         }
         if (is_file($oArquivoUpload->getFileName())) {
             unlink($oArquivoUpload->getFileName());
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
 /**
  * Processa o arquivo Webservice
  *
  * @return string
  * @throws Exception
  */
 public function processamentoArquivo()
 {
     try {
         /**
          * Verifica o nome do arquivo
          */
         if (!$this->sNomeArquivo) {
             $this->oModeloImportacao->setMensagemErro('E160');
         }
         /**
          * Verifica se existe algum registro de usuário
          */
         if (!is_object($this->oDadosUsuario)) {
             throw new Exception('Usuario não encontrado!', 157);
         }
         /**
          * Verifica se o usuário está autenticado
          */
         if (!$this->autenticaUsuario($this->oDadosUsuario->getLogin())) {
             $this->oModeloImportacao->setMensagemErro('E157', 'Usuario: ' . $this->oDadosUsuario->getLogin());
         }
         $this->oModeloImportacao->setArquivoCarregado($this->sCaminhoNomeArquivo);
         $oArquivoCarregado = $this->oModeloImportacao->carregar();
         /**
          * Verifica se o modelo está válido e processa o arquivo de importação
          */
         if ($oArquivoCarregado && !$this->oModeloImportacao->getErro() && $this->oModeloImportacao->validaArquivoCarregado()) {
             /**
              * Valida as regras de negócio e processa a importação
              */
             $oImportacaoProcessamento = new Contribuinte_Model_ImportacaoArquivoProcessamento();
             $oImportacaoProcessamento->setCodigoUsuarioLogado($this->oDadosUsuario->getId());
             $oImportacaoProcessamento->setArquivoCarregado($oArquivoCarregado);
             /**
              * Processa a importação
              */
             $oDadosImportacao = $oImportacaoProcessamento->processarImportacaoRps();
             return $this->oModeloImportacao->processaSucessoWebService($oDadosImportacao);
         } else {
             return $this->oModeloImportacao->processaErroWebService($oArquivoCarregado->lote->numero);
         }
     } catch (Exception $oErro) {
         throw new Exception($oErro->getMessage(), $oErro->getCode());
     }
 }