/**
  * Valida e salva as informações do RPS na base de dados
  * 
  * @throws Exception
  * @return integer|NULL
  */
 public function processarImportacaoRps()
 {
     // Dados da sessão
     $oSessao = new Zend_Session_Namespace('nfse');
     $oDoctrine = Zend_Registry::get('em');
     $oDoctrine->getConnection()->beginTransaction();
     try {
         // Dados da importação
         $oImportacao = new \Contribuinte\ImportacaoArquivo();
         $oImportacao->setData(new DateTime());
         $oImportacao->setHora(new DateTime());
         $oImportacao->setTipo('RPS');
         $oImportacao->setQuantidadeDocumentos($this->oImportacao->lote->quantidade_rps);
         $oImportacao->setVersaoLayout('modelo1');
         $oImportacao->setIdUsuario($this->iUsuarioLogado);
         $oImportacao->setNumeroLote($this->oImportacao->lote->numero);
         // Totalizadores
         $fValorTotalServico = 0;
         $fValorTotalImpostos = 0;
         // Processa a lista de rps
         foreach ($this->oImportacao->rps as $oRps) {
             if ($oRps->servico->valores->valor_iss_retido > 0) {
                 $oRps->servico->valores->valor_iss = $oRps->servico->valores->valor_iss_retido;
                 $oRps->servico->valores->iss_retido = 1;
             }
             $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($oRps->prestador->cnpj);
             $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal();
             // Dados dos Usuários
             $aDados['id_contribuinte'] = $oSessao->contribuinte->getIdUsuarioContribuinte();
             $aDados['id_usuario'] = $this->iUsuarioLogado;
             // Dados da RPS
             $aDados['grupo_nota'] = Contribuinte_Model_Nota::GRUPO_NOTA_RPS;
             $aDados['tipo_nota'] = $oRps->tipo;
             $aDados['n_rps'] = $oRps->numero;
             $aDados['data_rps'] = $oRps->data_emissao;
             $aDados['dt_nota'] = $oRps->data_emissao;
             $aDados['hr_nota'] = $oRps->data_emissao;
             $aDados['ano_comp'] = $oRps->data_emissao->format('Y');
             $aDados['mes_comp'] = $oRps->data_emissao->format('m');
             $aDados['natureza_operacao'] = $oRps->natureza_operacao;
             // Dados do Prestador
             $aDados['p_im'] = $iInscricaoMunicipal;
             $aDados['p_cnpjcpf'] = $oRps->prestador->cnpj;
             // Dados do Tomador
             $aDados['t_cnpjcpf'] = $oRps->tomador->cpf_cnpj;
             $aDados['t_razao_social'] = $oRps->tomador->razao_social;
             $aDados['t_cep'] = $oRps->tomador->endereco->cep;
             $aDados['t_endereco'] = $oRps->tomador->endereco->descricao;
             $aDados['t_endereco_numero'] = $oRps->tomador->endereco->numero;
             $aDados['t_endereco_comp'] = $oRps->tomador->endereco->complemento;
             $aDados['t_bairro'] = $oRps->tomador->endereco->bairro;
             $aDados['t_cod_municipio'] = $oRps->tomador->endereco->ibge_municipio;
             $aDados['t_uf'] = $oRps->tomador->endereco->uf;
             $aDados['t_telefone'] = $oRps->tomador->contato->telefone;
             $aDados['t_email'] = $oRps->tomador->contato->email;
             // Dados da construção civil
             $aDados['s_codigo_obra'] = $oRps->construcao_civil->codigo_obra;
             $aDados['s_art'] = $oRps->construcao_civil->art;
             // Dados do Serviço
             $iAtividade = $oRps->servico->atividade;
             $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $iAtividade);
             if (empty($oServico)) {
                 throw new Exception('O código de atividade do serviço inválido.');
             }
             $aDados['descricao'] = $oRps->servico->discriminacao;
             $aDados['s_dados_cod_tributacao'] = $oServico->attr('cod_atividade');
             $aDados['s_dados_cod_municipio'] = $oRps->servico->ibge_municipio;
             $aDados['s_dados_municipio_incidencia'] = $oRps->servico->ibge_municipio;
             $aDados['s_dados_cod_pais'] = 1058;
             //brasil
             // Verifica se o tomador retem o ISS
             $lTomadorRetemIss = $oRps->servico->valores->iss_retido == 1 ? TRUE : FALSE;
             // Valores do Serviço
             $aDados['s_vl_servicos'] = self::converterValor($oRps->servico->valores->valor_servicos);
             $aDados['s_vl_deducoes'] = self::converterValor($oRps->servico->valores->valor_deducoes);
             $aDados['s_vl_pis'] = self::converterValor($oRps->servico->valores->valor_pis);
             $aDados['s_vl_cofins'] = self::converterValor($oRps->servico->valores->valor_cofins);
             $aDados['s_vl_inss'] = self::converterValor($oRps->servico->valores->valor_inss);
             $aDados['s_vl_ir'] = self::converterValor($oRps->servico->valores->valor_ir);
             $aDados['s_vl_csll'] = self::converterValor($oRps->servico->valores->valor_csll);
             $aDados['s_vl_iss'] = self::converterValor($oRps->servico->valores->valor_iss);
             $aDados['s_dados_iss_retido'] = $lTomadorRetemIss ? 1 : 0;
             $aDados['s_vl_outras_retencoes'] = self::converterValor($oRps->servico->valores->outras_retencoes);
             $aDados['s_vl_bc'] = self::converterValor($oRps->servico->valores->base_calculo);
             $aDados['s_vl_aliquota'] = self::converterValor($oRps->servico->valores->aliquota * 100);
             $aDados['s_vl_liquido'] = self::converterValor($oRps->servico->valores->valor_liquido);
             $aDados['vl_liquido_nfse'] = self::converterValor($oRps->servico->valores->valor_liquido);
             $aDados['s_vl_condicionado'] = self::converterValor($oRps->servico->valores->desconto_condicionado);
             $aDados['s_vl_desc_incondicionado'] = self::converterValor($oRps->servico->valores->desconto_incondicionado);
             // Salva o RPS
             $oNotaRps = new Contribuinte_Model_Nota();
             $oNotaRps->persist($aDados);
             // Adiciona os documento aos dados da importação
             $oImportacaoArquivoDocumento = new \Contribuinte\ImportacaoArquivoDocumento();
             $oImportacaoArquivoDocumento->setImportacaoDms($oImportacao);
             $oImportacaoArquivoDocumento->addNota($oNotaRps->getEntity());
             $oImportacaoArquivoDocumento->setValorImposto($oRps->servico->valores->valor_iss);
             $oImportacaoArquivoDocumento->setValorTotal($oRps->servico->valores->valor_servicos);
             // Vincula o documento aos dados da importação
             $oImportacao->addImportacaoArquivoDocumentos($oImportacaoArquivoDocumento);
             // Incrementa os totalizadores
             $fValorTotalServico += $oRps->servico->valores->valor_servicos;
             $fValorTotalImpostos += $oRps->servico->valores->valor_iss;
         }
         // Completa e salva os dados da importação
         $oImportacao->setValorTotal($fValorTotalServico);
         $oImportacao->setValorImposto($fValorTotalImpostos);
         $oDoctrine->persist($oImportacao);
         $oDoctrine->flush();
         $oDoctrine->getConnection()->commit();
         return $oImportacao;
     } catch (Exception $oErro) {
         $oDoctrine->getConnection()->rollback();
         throw new Exception('Ocorreu um erro ao importar o arquivo: ' . $oErro->getMessage());
     }
 }
 /**
  * Monta a tela para emissão do RPS
  *
  * @return void
  */
 public function indexAction()
 {
     try {
         $aDados = $this->getRequest()->getParams();
         $oContribuinte = $this->_session->contribuinte;
         $this->view->empresa_nao_prestadora = FALSE;
         $this->view->empresa_nao_emissora_nfse = FALSE;
         $this->view->bloqueado_msg = FALSE;
         $oForm = $this->formNota(NULL, $oContribuinte);
         // Verifica se o contribuinte tem permissão para emitir nfse/rps
         if ($oContribuinte->getTipoEmissao() != Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA) {
             $this->view->empresa_nao_emissora_nfse = TRUE;
             return;
         }
         // Verifica se a empresa é prestadora de serviços
         $aServicos = Contribuinte_Model_Servico::getByIm($oContribuinte->getInscricaoMunicipal());
         if ($aServicos == NULL || empty($aServicos)) {
             $this->view->empresa_nao_prestadora = TRUE;
             return;
         }
         // Verifica o prazo de emissão de documentos e retorna as mensagens de erro
         self::mensagemPrazoEmissao();
         // Configura o formulário
         $oForm->preenche($aDados);
         $oForm->setListaServicos($aServicos);
         $this->view->form = $oForm;
         // Validadores
         $oValidaData = new Zend_Validate_Date(array('format' => 'yyyy-MM-dd'));
         // Bloqueia a emissão se possuir declarações sem movimento
         if (isset($aDados['dt_nota']) && $oValidaData->isValid($aDados['dt_nota'])) {
             $oDataSimples = new DateTime($aDados['dt_nota']);
             $aDeclaracaoSemMovimento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($oContribuinte->getInscricaoMunicipal(), $oDataSimples->format('Y'), $oDataSimples->format('m'));
             if (count($aDeclaracaoSemMovimento) > 0) {
                 $sMensagemErro = 'Não é possível emitir um documento nesta data, pois a competência foi declarada como ';
                 $sMensagemErro .= 'sem movimento.<br>Entre em contato com o setor de arrecadação da prefeitura.';
                 $this->view->messages[] = array('error' => $sMensagemErro);
                 return;
             }
         }
         // Trata o post do formulário
         if ($this->getRequest()->isPost()) {
             $oNota = new Contribuinte_Model_Nota();
             // Valida os dados informados no formulário
             if (!$oForm->isValid($aDados)) {
                 $this->view->form = $oForm;
                 $this->view->messages[] = array('error' => $this->translate->_('Preencha os dados corretamente.'));
             } else {
                 if ($oNota::existeRps($oContribuinte, $aDados['n_rps'], $aDados['tipo_nota'])) {
                     $this->view->form = $oForm;
                     $this->view->messages[] = array('error' => $this->translate->_('Já existe um RPS com esta numeração.'));
                 } else {
                     $oAidof = new Administrativo_Model_Aidof();
                     $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal();
                     /*
                      * Verifica se a numeração do AIDOF é válida
                      */
                     $lVerificaNumeracao = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($iInscricaoMunicipal, $aDados['n_rps'], $aDados['tipo_nota']);
                     if (!$lVerificaNumeracao) {
                         $sMensagem = 'A numeração do RPS não confere com os AIDOFs liberados.';
                         $this->view->messages[] = array('error' => $this->translate->_($sMensagem));
                         return;
                     }
                     // Remove chaves inválidas
                     unset($aDados['enviar'], $aDados['action'], $aDados['controller'], $aDados['module'], $aDados['estado']);
                     // Filtro para retornar somente numeros
                     $aFilterDigits = new Zend_Filter_Digits();
                     $aDados['p_im'] = $oContribuinte->getInscricaoMunicipal();
                     $aDados['grupo_nota'] = Contribuinte_Model_Nota::GRUPO_NOTA_RPS;
                     $aDados['t_cnpjcpf'] = $aFilterDigits->filter($aDados['t_cnpjcpf']);
                     $aDados['t_cep'] = $aFilterDigits->filter($aDados['t_cep']);
                     $aDados['t_telefone'] = $aFilterDigits->filter($aDados['t_telefone']);
                     $aDados['id_contribuinte'] = $oContribuinte->getIdUsuarioContribuinte();
                     $aDados['id_usuario'] = $this->usuarioLogado->getId();
                     if (!$oNota->persist($aDados)) {
                         $this->view->form = $oForm;
                         $this->view->messages[] = array('error' => $this->translate->_('Houver um erro ao tentar emitir a nota.'));
                         return NULL;
                     }
                     $this->view->messages[] = array('success' => $this->translate->_('Nota emitida com sucesso.'));
                     $this->_redirector->gotoSimple('dadosnota', 'nota', NULL, array('id' => $oNota->getId(), 'tipo_nota' => 'rps'));
                 }
             }
         }
     } catch (Exception $oError) {
         $this->view->messages[] = array('error' => $oError->getMessage());
         return;
     }
 }
 /**
  * Emissao de NFSE
  */
 public function indexAction()
 {
     $oContribuinte = $this->_session->contribuinte;
     $sCodigoVerificacao = NULL;
     $oForm = $this->formNota($sCodigoVerificacao, $oContribuinte);
     try {
         $this->view->bloqueado_msg = FALSE;
         $aServicos = Contribuinte_Model_Servico::getByIm($oContribuinte->getInscricaoMunicipal());
         $oForm->setListaServicos($aServicos);
         // Verifica se o contribuinte é prestador de serviços
         if ($aServicos == NULL || empty($aServicos)) {
             $this->view->bloqueado_msg = $this->translate->_('Empresa não prestadora de serviço.');
             return;
         }
         // Verifica se o contribuinte é emissor de NFSe
         if ($oContribuinte->getTipoEmissao() != Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA) {
             $this->view->bloqueado_msg = $this->translate->_('Empresa não emissora de NFS-E.');
             return;
         }
         // Dados do formulário
         $aDados = $this->getRequest()->getParams();
         // Preeenche da nota copiada
         if (isset($aDados['id_copia'])) {
             $iIdCopiaNota = $aDados['id_copia'];
             $aCopiaDadosNota = Contribuinte_Model_Nota::getByAttribute('id', $iIdCopiaNota, '=', Contribuinte_Model_Nota::TIPO_RETORNO_ARRAY);
             $aDados = $aCopiaDadosNota[0];
             $aDados['id_copia_nota'] = $iIdCopiaNota;
         }
         $oForm->preenche($aDados);
         $oForm->getElement('nota_substituida')->setRequired($oForm->getElement('nota_substituta')->isChecked());
         // Processa o formulário
         if ($this->getRequest()->isPost()) {
             // Verifica se é tomador é
             if (!$this->podeReterPessoaFisica($aDados)) {
                 $sMensagemErro = 'Permitido reter apenas para Pessoa Jurídica.';
                 $this->view->form = $oForm;
                 $this->view->messages[] = array('error' => $sMensagemErro);
                 return;
             }
             // Limpa espaços no email
             $aDados['t_email'] = trim($aDados['t_email']);
             // Validadores
             $oValidaData = new Zend_Validate_Date(array('format' => 'yyyy-MM-dd'));
             // Bloqueia a emissão se possuir declarações sem movimento
             if (isset($aDados['dt_nota']) && $oValidaData->isValid($aDados['dt_nota'])) {
                 $oDataSimples = new DateTime($aDados['dt_nota']);
                 $aDeclaracaoSemMovimento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($oContribuinte->getInscricaoMunicipal(), $oDataSimples->format('Y'), $oDataSimples->format('m'));
                 if (count($aDeclaracaoSemMovimento) > 0 && $oContribuinte->getOptanteSimplesCategoria() != Contribuinte_Model_ContribuinteAbstract::OPTANTE_SIMPLES_TIPO_MEI) {
                     $sMensagemErro = 'Não é possível emitir um documento nesta data, pois a competência foi declarada como ';
                     $sMensagemErro .= 'sem movimento.<br>Entre em contato com o setor de arrecadação da prefeitura.';
                     $this->view->form = $oForm;
                     $this->view->messages[] = array('error' => $sMensagemErro);
                     return;
                 }
             }
             // Valida os dados do formulário
             if (!$oForm->isValid($aDados)) {
                 $this->view->form = $oForm;
                 $this->view->messages[] = array('error' => $this->translate->_('Preencha os dados corretamente.'));
             } else {
                 // Remova chaves inválidas
                 unset($aDados['enviar'], $aDados['action'], $aDados['controller'], $aDados['module'], $aDados['estado']);
                 // filtro para retornar somente numeros
                 $aFilterDigits = new Zend_Filter_Digits();
                 $aDados['p_im'] = $oContribuinte->getInscricaoMunicipal();
                 $aDados['t_cnpjcpf'] = $aFilterDigits->filter($aDados['t_cnpjcpf']);
                 $aDados['t_cep'] = $aFilterDigits->filter($aDados['t_cep']);
                 $aDados['t_telefone'] = $aFilterDigits->filter($aDados['t_telefone']);
                 $aDados['tipo_nota'] = self::TIPO_NOTA;
                 // Recalcula valores para garantir a integridade dos cálculos
                 $aServico = Contribuinte_Model_Servico::getByCodServico($aDados['s_dados_cod_tributacao']);
                 $oServico = reset($aServico);
                 /* caso a atividade sejá retida no municipio de acordo com a legislação
                  * envia para o teste de guia um parametro = true
                  */
                 $aDados['s_tributacao_municipio'] = $oServico->attr('tributacao_municipio');
                 $oParametros = new stdClass();
                 $oParametros->vlr_servico = $oForm->getElement('s_vl_servicos')->getValue();
                 $oParametros->s_vl_deducoes = $oForm->getElement('s_vl_deducoes')->getValue();
                 $oParametros->perc_aliquota = $oForm->getElement('s_vl_aliquota')->getValue();
                 $oParametros->vlr_pis = $oForm->getElement('s_vl_pis')->getValue();
                 $oParametros->vlr_cofins = $oForm->getElement('s_vl_cofins')->getValue();
                 $oParametros->vlr_inss = $oForm->getElement('s_vl_inss')->getValue();
                 $oParametros->vlr_ir = $oForm->getElement('s_vl_ir')->getValue();
                 $oParametros->vlr_csll = $oForm->getElement('s_vl_csll')->getValue();
                 $oParametros->vlr_outras_retencoes = $oForm->getElement('s_vl_outras_retencoes')->getValue();
                 $oParametros->vlr_desc_condicionado = $oForm->getElement('s_vl_condicionado')->getValue();
                 $oParametros->vlr_desc_incondicionado = $oForm->getElement('s_vl_desc_incondicionado')->getValue();
                 $oParametros->imposto_retido_tomador = $oForm->getElement('s_dados_iss_retido')->getValue() == 1;
                 $oParametros->deducao_editavel = $oServico->attr('deducao') == 't';
                 $oParametros->formatar_valores_ptbr = TRUE;
                 // Calcula os valores da nota
                 $oCalculoValores = Contribuinte_Model_Nota::calcularValores($oParametros);
                 // Valores calculados
                 $aDados['s_vl_deducoes'] = $oCalculoValores->s_vl_deducoes;
                 $aDados['s_vl_bc'] = $oCalculoValores->vlr_base;
                 $aDados['s_vl_iss'] = $oCalculoValores->vlr_iss;
                 $aDados['s_vl_pis'] = $oCalculoValores->vlr_pis;
                 $aDados['s_vl_cofins'] = $oCalculoValores->vlr_cofins;
                 $aDados['s_vl_inss'] = $oCalculoValores->vlr_inss;
                 $aDados['s_vl_ir'] = $oCalculoValores->vlr_ir;
                 $aDados['s_vl_csll'] = $oCalculoValores->vlr_csll;
                 $aDados['s_vl_outras_retencoes'] = $oCalculoValores->vlr_outras_retencoes;
                 $aDados['s_vl_condicionado'] = $oCalculoValores->vlr_desc_condicionado;
                 $aDados['s_vl_desc_incondicionado'] = $oCalculoValores->vlr_desc_incondicionado;
                 $aDados['s_vl_liquido'] = $oCalculoValores->vlr_liquido;
                 $aDados['dt_nota'] = Contribuinte_Model_Nota::getDateTime($aDados['dt_nota']);
                 $aDados['id_contribuinte'] = $oContribuinte->getIdUsuarioContribuinte();
                 $aDados['id_usuario'] = $this->usuarioLogado->getId();
                 if ($oForm->getElement('nota_substituta')->isChecked()) {
                     $aAtributosPesquisaNotaSubstituida = array('id_contribuinte' => $oContribuinte->getIdUsuarioContribuinte(), 'nota' => $aDados['nota_substituida'], 'cancelada' => FALSE);
                     $oNotaSubstituida = Contribuinte_Model_Nota::getByAttributes($aAtributosPesquisaNotaSubstituida);
                     $oNotaSubstituida = reset($oNotaSubstituida);
                     /*
                      * Caso exista a nota a ser substituida, verifica:
                      *  - Se já não possue nota substituta
                      *  - Se não possui guia emitida
                      */
                     if ($oNotaSubstituida instanceof Contribuinte_Model_Nota && !$oNotaSubstituida->getIdNotaSubstituta() && !Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNotaSubstituida->getMes_comp(), $oNotaSubstituida->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE)) {
                         // Seta os dados da nota
                         $aDados['idNotaSubstituida'] = $oNotaSubstituida->getId();
                     } else {
                         $sMensagemErro = '<b>Erro ao substituir a nota, verifique se:</b><br>';
                         $sMensagemErro .= '- A nota informada já foi emitida no sistema.<br>';
                         $sMensagemErro .= '- A nota informada não foi substituida.<br>';
                         $sMensagemErro .= '- A nota informada não possui guia emitida.';
                         $this->view->messages[] = array('error' => $this->translate->_($sMensagemErro));
                         $this->view->form = $oForm;
                         return NULL;
                     }
                     unset($aDados['nota_substituta'], $aDados['nota_substituida']);
                 }
                 // Verifica se a nota é substituta
                 // Persiste os dados na base de dados
                 $oNota = new Contribuinte_Model_Nota();
                 if ($oNota->persist($aDados)) {
                     // Se for nota substituta
                     if (isset($oNotaSubstituida) && $oNotaSubstituida instanceof Contribuinte_Model_Nota) {
                         $sMensagemCancelamento = "Substituida pela Nota nº {$oNota->getNota()}";
                         $oNotaSubstituida->setIdNotaSubstituta($oNota->getId());
                         $oNotaSubstituida->setCancelada(TRUE);
                         $oNotaSubstituida->setCancelamentoJustificativa($this->translate->_($sMensagemCancelamento));
                         $oNotaSubstituida->setEmite_guia(FALSE);
                         $oNotaSubstituida->persist($oNotaSubstituida->getEntity());
                     }
                 } else {
                     $this->view->form = $oForm;
                     $this->view->messages[] = array('error' => $this->translate->_('Ocorreu um erro emitir a nota.'));
                     return NULL;
                 }
                 // Envia email para o tomador
                 $oValidaEmail = new Zend_Validate_EmailAddress();
                 if ($oValidaEmail->isValid($aDados['t_email'])) {
                     $iInscricaoMunicipal = $aDados['p_im'];
                     $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($iInscricaoMunicipal);
                     // Informações da view
                     $this->view->nota = $oNota;
                     $this->view->tomadorNome = $aDados['t_razao_social'];
                     $this->view->prestadorNome = $oContribuinte->getNome('nome');
                     $this->view->prestadorCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf());
                     $this->view->nfseNumero = $oNota->getNota();
                     $this->view->nfseUrl = $oNota->getUrlVerificacaoNota();
                     // Renderiza o email com o texto diferente para notas substitutas
                     if (isset($oNotaSubstituida) && $oNotaSubstituida instanceof Contribuinte_Model_Nota) {
                         // Informações da View
                         $this->view->sUrlNotaSubstituida = $oNotaSubstituida->getUrlVerificacaoNota();
                         $this->view->oNotaSubstituida = $oNotaSubstituida;
                         $sMensagemEmail = $this->view->render('nota/email-emissao-substituida.phtml');
                     } else {
                         $sMensagemEmail = $this->view->render('nota/email-emissao.phtml');
                     }
                     $sArquivoPdfNfse = $this->getNotaImpressao($oNota->getCod_verificacao(), TRUE, TRUE);
                     // Envia Email
                     DBSeller_Helper_Mail_Mail::sendAttachment($aDados['t_email'], "Nota Fiscal Eletrônica nº {$oNota->getNota()}", $sMensagemEmail, $sArquivoPdfNfse);
                 }
                 $this->view->messages[] = array('success' => $this->translate->_('Nota emitida com sucesso.'));
                 $this->_redirector->gotoSimple('dadosnota', NULL, NULL, array('id' => $oNota->getId()));
             }
         } else {
             $this->view->form = $oForm;
             $this->view->form->setListaServicos($aServicos);
         }
     } catch (Exception $oError) {
         $this->view->form = $oForm;
         $this->view->messages[] = array('error' => $this->translate->_($oError->getMessage()));
         return NULL;
     }
 }