public function indexAction()
 {
     $this->_helper->layout->setLayoutPath(APPLICATION_PATH . '/modules/contribuinte/views/scripts/layouts');
     $this->_helper->layout->setLayout('layout-modal');
     $oForm = new Contribuinte_Form_Empresa();
     if ($this->getRequest()->isPost()) {
         $aDados = $this->getRequest()->getPost();
         $oForm->preenche($aDados);
         if (!$oForm->isValid($aDados)) {
             $this->view->form = $oForm;
             $this->getResponse()->setHttpResponseCode(406);
             // Evita o Fechamento da Modal JS
         } else {
             $iCodigoIbge = Administrativo_Model_Prefeitura::getDadosPrefeituraBase()->getIbge();
             if ($aDados['z01_munic'] == $iCodigoIbge) {
                 $aDados['z01_bairro'] = $aDados['z01_bairro_munic'];
                 $aDados['z01_ender'] = $aDados['z01_ender_munic'];
             } else {
                 $aDados['z01_bairro'] = $aDados['z01_bairro_fora'];
                 $aDados['z01_ender'] = $aDados['z01_ender_fora'];
             }
             // Salva Nova Empresa (NFSE)
             $aDadosEmpresa = array();
             $aDadosEmpresa['t_cnpjcpf'] = DBSeller_Helper_Number_Format::getNumbers($aDados['z01_cgccpf']);
             $aDadosEmpresa['t_razao_social'] = $aDados['z01_nome'];
             $aDadosEmpresa['t_cod_pais'] = $aDados['z01_nome'];
             $aDadosEmpresa['t_uf'] = $aDados['z01_uf'];
             $aDadosEmpresa['t_cod_municipio'] = $aDados['z01_munic'];
             $aDadosEmpresa['t_cep'] = $aDados['z01_cep'];
             $aDadosEmpresa['t_bairro'] = $aDados['z01_bairro_fora'];
             $aDadosEmpresa['t_endereco'] = $aDados['z01_ender_fora'];
             $aDadosEmpresa['t_endereco_numero'] = $aDados['z01_numero'];
             $aDadosEmpresa['t_endereco_comp'] = $aDados['z01_compl'];
             $aDadosEmpresa['t_telefone'] = $aDados['z01_telef'];
             $aDadosEmpresa['t_email'] = $aDados['z01_email'];
             $oEmpresa = new Contribuinte_Model_EmpresaBase();
             $oEmpresa->persist($aDadosEmpresa);
             $this->_helper->getHelper('FlashMessenger')->addMessage(array('success' => 'Empresa cadastrada com sucesso.'));
             return TRUE;
         }
     } else {
         $this->view->form = $oForm;
     }
 }
 /**
  * Busca informações da empresa pelo CGC/CPF
  *
  * @param      $sCgcCpf
  * @param bool $lSubstituto
  * @return null|StdClass
  */
 public static function getByCgcCpf($sCgcCpf, $lSubstituto = FALSE)
 {
     if (!$sCgcCpf) {
         return NULL;
     }
     // Busca dados do e-Cidade
     $aEmpresa = Contribuinte_Model_EmpresaEcidade::getByCgcCpf($sCgcCpf);
     if (!empty($aEmpresa)) {
         foreach ($aEmpresa as $oDadosEmpresa) {
             $aDadosRetorno[] = $oDadosEmpresa;
         }
         $oDadosRetorno = new StdClass();
         $oDadosRetorno->eCidade = array(new self($aDadosRetorno[0]));
         return $oDadosRetorno;
     }
     // Busca dados da Base Local
     $aEmpresa = Contribuinte_Model_EmpresaBase::getByAttribute('cpfcnpj', $sCgcCpf);
     if (!empty($aEmpresa)) {
         $oDadosRetorno = new StdClass();
         $oDadosRetorno->eNota = array(new self($aEmpresa));
         return $oDadosRetorno;
     }
     return NULL;
 }
 /**
  * Salva a nota (por array)
  *
  * @param array $aDados
  * @throws Exception
  * @return boolean|NULL
  */
 public function notaPersist(array $aDados)
 {
     // Se o numero da nota vier no vetor nao precisa salvar a nota porque provavelmente é um refresh do navegador
     if (isset($aDados['nota'])) {
         return FALSE;
     }
     // Nova verificação de alguns dados obrigatórios que a nota não seja emitida caso o cliente mude algum valor pelo
     // firebug
     if (empty($aDados['natureza_operacao']) || empty($aDados['s_dados_cod_tributacao']) || empty($aDados['s_vl_liquido']) || empty($aDados['descricao'])) {
         return FALSE;
     }
     // Limpa mascaras
     $aFilterDigits = new Zend_Filter_Digits();
     // filtro para retornar somente numeros
     $aDados['t_cnpjcpf'] = $aFilterDigits->filter($aDados['t_cnpjcpf']);
     $aDados['t_cep'] = $aFilterDigits->filter($aDados['t_cep']);
     $aDados['t_telefone'] = $aFilterDigits->filter($aDados['t_telefone']);
     // Converte para o formato do DB
     $aDados['s_vl_servicos'] = $this->toFloat($aDados['s_vl_servicos']);
     $aDados['s_vl_liquido'] = $this->toFloat($aDados['s_vl_liquido']);
     $aDados['s_vl_deducoes'] = $this->toFloat($aDados['s_vl_deducoes']);
     $aDados['s_vl_bc'] = $this->toFloat($aDados['s_vl_bc']);
     $aDados['s_vl_aliquota'] = $this->toFloat($aDados['s_vl_aliquota']);
     $aDados['s_vl_iss'] = $this->toFloat($aDados['s_vl_iss']);
     $aDados['s_vl_pis'] = $this->toFloat($aDados['s_vl_pis']);
     $aDados['s_vl_cofins'] = $this->toFloat($aDados['s_vl_cofins']);
     $aDados['s_vl_inss'] = $this->toFloat($aDados['s_vl_inss']);
     $aDados['s_vl_ir'] = $this->toFloat($aDados['s_vl_ir']);
     $aDados['vl_liquido_nfse'] = $aDados['s_vl_liquido'];
     $aDados['s_vl_csll'] = $this->toFloat($aDados['s_vl_csll']);
     $aDados['s_vl_condicionado'] = $this->toFloat($aDados['s_vl_condicionado']);
     $aDados['s_vl_desc_incondicionado'] = $this->toFloat($aDados['s_vl_desc_incondicionado']);
     $aDados['s_vl_outras_retencoes'] = $this->toFloat($aDados['s_vl_outras_retencoes']);
     $aDados['s_dados_discriminacao'] = $aDados['descricao'];
     // Converte a data/hora de emissão da nota
     $aDados['dt_nota'] = self::getDateTime($aDados['dt_nota']);
     $aDados['hr_nota'] = self::getDateTime($aDados['dt_nota']);
     $aDados['ano_comp'] = $aDados['dt_nota']->format('Y');
     $aDados['mes_comp'] = $aDados['dt_nota']->format('m');
     // Flag marcado ou nao
     $lPrestadorRetemISS = $aDados['s_dados_iss_retido'] == 0 ? TRUE : FALSE;
     $aDados['s_dados_iss_retido'] = $lPrestadorRetemISS ? self::PRESTADOR_RETEM_ISS : self::TOMADOR_RETEM_ISS;
     // Salva o email do tomador
     $this->salvaEmailTomador($aDados['t_cnpjcpf'], utf8_encode($aDados['t_email']));
     $oServico = Contribuinte_Model_Servico::getByCodServico($aDados['s_dados_cod_tributacao']);
     $oServico = is_array($oServico) ? $oServico[0] : $oServico;
     if (!is_object($oServico)) {
         throw new Exception('O código do serviço é inválido.');
     }
     // Outros dados do serviço
     $aDados['s_dados_cod_cnae'] = utf8_encode($oServico->attr('estrut_cnae'));
     $aDados['s_dados_item_lista_servico'] = utf8_encode($oServico->attr('cod_item_servico'));
     try {
         // Dados do prestador
         $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($aDados['p_im']);
     } catch (Exception $e) {
         throw new Exception('E-cidade temporariamente indisponível. Emissão bloqueada!', WebService_Model_Ecidade::CODIGO_ERRO_CONSULTA_WEBSERVICE);
     }
     $aDados['p_cnpjcpf'] = $oContribuinte->getCgcCpf();
     $aDados['p_razao_social'] = $oContribuinte->getNome();
     $aDados['p_nome_fantasia'] = $oContribuinte->getNomeFantasia();
     $aDados['p_ie'] = $oContribuinte->getInscricaoEstadual();
     $aDados['p_cod_pais'] = $oContribuinte->getCodigoPais();
     $aDados['p_uf'] = $oContribuinte->getEstado();
     $aDados['p_cod_municipio'] = $oContribuinte->getCodigoIbgeMunicipio();
     $aDados['p_cep'] = $oContribuinte->getCep();
     $aDados['p_bairro'] = $oContribuinte->getLogradouroBairro();
     $aDados['p_endereco_numero'] = $oContribuinte->getLogradouroNumero();
     $aDados['p_endereco_comp'] = $oContribuinte->getLogradouroComplemento();
     $aDados['p_telefone'] = $oContribuinte->getTelefone();
     $aDados['p_email'] = $oContribuinte->getEmail();
     $aDados['p_endereco'] = $oContribuinte->getTipoLogradouro() . ' ' . $oContribuinte->getDescricaoLogradouro();
     /*
      * Dados do RPS
      */
     if (isset($aDados['data_rps'])) {
         if (is_string($aDados['data_rps'])) {
             $aDataRps = explode('/', $aDados['data_rps']);
             $oDataRps = new DateTime($aDataRps[2] . '-' . $aDataRps[1] . '-' . $aDataRps[0]);
             $aDados['data_rps'] = $oDataRps;
         }
         if ($aDados['n_rps'] == '') {
             $aDados['n_rps'] = $this->getNRpsByCnpj($aDados['p_cnpjcpf']) + 1;
         } else {
             // Se o numero do RPS ja existe para este contribuinte, retorna erro
             if (self::existeRps($oContribuinte, $aDados['n_rps'], $aDados['tipo_nota'])) {
                 return NULL;
             }
         }
     }
     /*
      * Dados do tomador
      */
     // Se o tomador for substituto então busca CGM apenas do e-cidade
     $oTomador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['t_cnpjcpf']);
     /*
      * @todo Refatorar esse trecho de codigo
      */
     if (!empty($oTomador->eCidade)) {
         $oTomador = is_array($oTomador->eCidade) ? reset($oTomador->eCidade) : $oTomador->eCidade;
     } else {
         if (!empty($oTomador->eNota)) {
             $oTomador = is_array($oTomador->eNota) ? reset($oTomador->eNota) : $oTomador->eNota;
         }
     }
     // Se nao encontrou tomador, entao cadastra no banco do sistema
     if (!is_object($oTomador) || empty($oTomador)) {
         $oTomador = new Contribuinte_Model_EmpresaBase();
         if ($oTomador instanceof Contribuinte_Model_EmpresaBase && $oTomador->isEntity()) {
             $oTomador->persist($aDados);
         }
     }
     // Dados da tributacao
     $aDados['s_dec_reg_esp_tributacao'] = (int) $oContribuinte->getRegimeTributario();
     $aDados['s_dados_exigibilidadeiss'] = (int) $oContribuinte->getExigibilidade();
     $aDados['s_dec_incentivo_fiscal'] = (int) $oContribuinte->getIncentivoFiscal();
     $aDados['s_dec_simples_nacional'] = $oContribuinte->getDescricaoOptanteSimples() == 'Sim' ? 1 : 2;
     // Busca a proxima numeracao da nota para o contribuinte
     $aDados['nota'] = $this->proximaNotaByContribuinte($oContribuinte->getContribuintes());
     // Configura o parametro para checar se deve adicionar a nota na guia de pagamento
     $oChecaEmissaoGuia = new stdClass();
     $oChecaEmissaoGuia->data = $aDados['dt_nota']->format('d/m/Y');
     $oChecaEmissaoGuia->inscricao_municipal = $oContribuinte->getInscricaoMunicipal();
     // Se for RPS pega a data do mesmo
     if (isset($aDados['data_rps'])) {
         $oChecaEmissaoGuia->data = $aDados['data_rps']->format('d/m/Y');
     }
     /*
      * Verifica se deve incluir a nota na guia de pagamento, conforme as
      * regras de emissão do contribuinte (sobrescreve todas as regras anteriores)
      */
     $lEmiteGuia = Contribuinte_Model_EmissorGuia::checarEmissaoGuia($oChecaEmissaoGuia);
     $lTributacaoMunicipio = $aDados['s_tributacao_municipio'] == 't' ? TRUE : FALSE;
     $iNaturezaOperacao = $aDados['natureza_operacao'];
     if ($lEmiteGuia && $iNaturezaOperacao == 2 && $lTributacaoMunicipio) {
         $aDados['s_dados_iss_retido'] = '1';
         $lEmiteGuia = TRUE;
     }
     $aDados['emite_guia'] = $lEmiteGuia;
     // Se o prestador não for responsável pela retenção não inclui a nota na guia de pagamento
     if ((!$lPrestadorRetemISS || $iNaturezaOperacao == 2 && !$lTributacaoMunicipio) && $aDados['emite_guia']) {
         $aDados['emite_guia'] = FALSE;
     }
     // Persiste na base de dados
     $this->setAttributes($aDados);
     $this->em->persist($this->entity);
     $this->em->flush();
     // Gera o código hash para autenticação
     $this->salvarCodigoHash($this->getNota());
     return TRUE;
 }
 /**
  * Acao Salvar DMS Entrada
  *
  * @return mixed bool|json
  */
 public function emissaoManualEntradaSalvarAction()
 {
     // Dados Request
     $aDados = $this->getRequest()->getParams();
     // Formulario
     $oForm = new Contribuinte_Form_DmsEntrada();
     $oForm->populate($aDados);
     // Valida o formulario
     if ($oForm->isValid($aDados)) {
         // Verifica se ja existe uma nota com o numero e se tem AIDOF
         self::emissaoManualEntradaVerificarDocumentoAction();
         // Valida se a data da nota esta no mes corrente
         $oValidaDataNota = new DBSeller_Validator_DateCurrentMonth();
         $oValidaDataNota->setMes($aDados['mes_comp']);
         $oValidaDataNota->setAno($aDados['ano_comp']);
         if (!$oValidaDataNota->isValid($aDados['s_nota_data'])) {
             $aErros = $oValidaDataNota->getMessages();
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $aErros[$oValidaDataNota::COMPETENCIA_INVALIDA];
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Aplica filtro de mascaras
         $aDados['s_cpf_cnpj'] = $oForm->getElement('s_cpf_cnpj')->getValue();
         // SALVAR DADOS DA DMS (INI)
         if (isset($aDados['id_dms']) && !empty($aDados['id_dms'])) {
             $oDms = Contribuinte_Model_Dms::getById($aDados['id_dms']);
         } else {
             $oDms = new Contribuinte_Model_Dms();
             $oDms->setAnoCompetencia($aDados['ano_comp']);
             $oDms->setMesCompetencia($aDados['mes_comp']);
             $oDms->setOperacao('e');
         }
         if (!is_object($oDms)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código DMS não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         $oDms->setDataOperacao(new DateTime());
         $oDms->setStatus('aberto');
         $oDms->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         $oDms->setIdUsuario($this->usuarioLogado->getId());
         // SALVAR DADOS DA DMS (FIM)
         // SALVAR DADOS DA NOTA (INI)
         if (isset($aDados['id']) && !empty($aDados['id'])) {
             $oDmsNota = Contribuinte_Model_DmsNota::getById($aDados['id']);
         } else {
             $oDmsNota = new Contribuinte_Model_DmsNota();
         }
         if (!is_object($oDmsNota)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código Dms Nota não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Dados Nota
         $oGrupoDocumento = Contribuinte_model_nota::getTipoNota($aDados['tipo_documento']);
         $oDataNota = new DateTime(str_replace('/', '-', $aDados['s_nota_data']));
         $oDataNota->format('Y-m-d');
         $oDmsNota->setNotaNumero($aDados['s_nota']);
         $oDmsNota->setNotaSerie($aDados['s_nota_serie']);
         $oDmsNota->setNotaData($oDataNota);
         $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo);
         $oDmsNota->setTipoDocumento($aDados['tipo_documento']);
         $oDmsNota->setSituacaoDocumento($aDados['situacao_documento']);
         $oDmsNota->setNaturezaOperacao($aDados['natureza_operacao']);
         $oDmsNota->setEmiteGuia(TRUE);
         $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido'] == 1);
         // Se a natureza da operação for 2 (fora da prefeitura), NÃO emite guia
         if ($aDados['natureza_operacao'] == 2) {
             $oDmsNota->setEmiteGuia(FALSE);
         }
         // Dados Servico
         $oDataServico = new DateTime(str_replace('/', '-', $aDados['s_data']));
         $oDataServico->format('Y-m-d');
         // Formata dados
         $sServicoValorPagar = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_bruto']);
         $sServicoValorDeducao = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_deducao']);
         $sServicoValorCondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_condicionado']);
         $sServicoDescontoIncondicionado = DBSeller_Helper_Number_Format::toDataBase($aDados['s_vl_desc_incondicionado']);
         $sServicoAliquota = str_replace(',', '.', $aDados['s_aliquota']);
         $sServicoBaseCalculo = DBSeller_Helper_Number_Format::toDataBase($aDados['s_base_calculo']);
         $sServicoValorImposto = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_imposto']);
         $sServicoValorLiquido = DBSeller_Helper_Number_Format::toDataBase($aDados['s_valor_pagar']);
         // Seta os dados do Documento de DMS
         $oDmsNota->setNumpre(0);
         $oDmsNota->setServicoData($oDataServico);
         $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido']);
         $oDmsNota->setServicoValorPagar($sServicoValorPagar);
         $oDmsNota->setServicoValorDeducao($sServicoValorDeducao);
         $oDmsNota->setServicoValorCondicionado($sServicoValorCondicionado);
         $oDmsNota->setServicoDescontoIncondicionado($sServicoDescontoIncondicionado);
         $oDmsNota->setServicoAliquota($sServicoAliquota);
         $oDmsNota->setServicoBaseCalculo($sServicoBaseCalculo);
         $oDmsNota->setServicoValorImposto($sServicoValorImposto);
         $oDmsNota->setServicoValorLiquido($sServicoValorLiquido);
         $oDmsNota->setDescricaoServico($aDados['s_observacao']);
         $oDmsNota->setServicoCodigoObra($aDados['s_codigo_obra']);
         $oDmsNota->setServicoArt($aDados['s_art']);
         $oDmsNota->setServicoInformacoesComplementares($aDados['s_informacoes_complementares']);
         if ($this->oContribuinte->getInscricaoMunicipal()) {
             $oDadosTomador = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($this->oContribuinte->getInscricaoMunicipal());
         } else {
             $oDadosTomador = Contribuinte_Model_ContribuinteEventual::getByCpfCnpj($this->oContribuinte->getCgcCpf());
         }
         $oDmsNota->setTomadorCpfCnpj($oDadosTomador->getCgcCpf());
         $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomador->getInscricaoMunicipal());
         $oDmsNota->setTomadorInscricaoEstadual($oDadosTomador->getInscricaoEstadual());
         $oDmsNota->setTomadorRazaoSocial($oDadosTomador->getNome());
         $oDmsNota->setTomadorNomeFantasia($oDadosTomador->getNomeFantasia());
         $oDmsNota->setTomadorEnderecoRua($oDadosTomador->getDescricaoLogradouro());
         $oDmsNota->setTomadorEnderecoNumero($oDadosTomador->getLogradouroNumero());
         $oDmsNota->setTomadorEnderecoComplemento($oDadosTomador->getLogradouroComplemento());
         $oDmsNota->setTomadorEnderecoBairro($oDadosTomador->getLogradouroBairro());
         $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomador->getCodigoIbgeMunicipio());
         $oDmsNota->setTomadorEnderecoEstado($oDadosTomador->getEstado());
         $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomador->getCodigoPais());
         $oDmsNota->setTomadorEnderecoCEP($oDadosTomador->getCep());
         $oDmsNota->setTomadorTelefone($oDadosTomador->getTelefone());
         $oDmsNota->setTomadorEmail($oDadosTomador->getEmail());
         // Dados Tomador
         $oDadosPrestador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['s_cpf_cnpj']);
         if (empty($oDadosPrestador->eCidade)) {
             // Se não for cadastrado no eCidade, salva prestador no NFSE
             if (empty($oDadosPrestador->eNota) && !empty($aDados['s_cpf_cnpj'])) {
                 $aDadosPrestador['t_cnpjcpf'] = $aDados['s_cpf_cnpj'];
                 $aDadosPrestador['t_razao_social'] = $aDados['s_razao_social'];
                 $oDadosPrestadorNota = new Contribuinte_Model_EmpresaBase();
                 $oDadosPrestadorNota->persist($aDadosPrestador);
             }
             $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setPrestadorRazaoSocial($aDados['s_razao_social']);
         } else {
             $oDadosPrestadorEcidade = $oDadosPrestador->eCidade[0];
             $oDmsNota->setPrestadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setPrestadorNomeFantasia($oDadosPrestadorEcidade->attr('nome_fanta'));
             $oDmsNota->setPrestadorRazaoSocial($oDadosPrestadorEcidade->attr('nome'));
             $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestadorEcidade->attr('inscricao'));
             $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestadorEcidade->attr('inscr_est'));
             $oDmsNota->setPrestadorEnderecoRua($oDadosPrestadorEcidade->attr('endereco'));
             $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestadorEcidade->attr('numero'));
             $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestadorEcidade->attr('complemento'));
             $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestadorEcidade->attr('bairro'));
             $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestadorEcidade->attr('cod_ibge'));
             $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestadorEcidade->attr('uf'));
             $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestadorEcidade->attr('cod_pais'));
             $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestadorEcidade->attr('cep'));
             $oDmsNota->setPrestadorTelefone($oDadosPrestadorEcidade->attr('telefone'));
             $oDmsNota->setPrestadorEmail($oDadosPrestadorEcidade->attr('email'));
         }
         $oDmsNota->setIdUsuario($this->usuarioLogado->getId());
         $oDmsNota->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         $oDmsNota->setDms($oDms->getEntity());
         // Adiciona o documento ao DMS
         $oDms->addDmsNotas($oDmsNota->getEntity());
         // Salva o DMS e o documento
         $iCodigoDms = $oDms->persist();
         // Configura a mensagem de retorno
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['success'] = $this->translate->_('Documento lançado com sucesso!');
         $aRetornoJson['id_dms'] = $iCodigoDms;
         // Quando for alteração, configura a mensagem de alteração
         if (isset($aDados['id']) && $aDados['id']) {
             $sUrlDmsAlterado = "/contribuinte/dms/emissao-manual-entrada/id_dms/{$iCodigoDms}";
             $aRetornoJson['success'] = $this->translate->_('Documento alterado com sucesso!');
             $aRetornoJson['url'] = $this->view->baseUrl($sUrlDmsAlterado);
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }