/** * 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; } }
/** * Lista de DMS emitidos manualmente */ public function emissaoManualSaidaListaDmsAction() { try { // Parametros request $iMes = $this->getRequest()->getParam('mes'); $iAno = $this->getRequest()->getParam('ano'); // Perfil do usuario logado $iIdPerfil = $this->oUsuario->getPerfil()->getId(); // Dados do DMS $oDms = new Contribuinte_Model_Dms(); $aDms = $oDms->getCompetenciaByCpfCnpj($this->oContribuinte->getCgcCpf(), $iMes, $iAno); $aResultado = array(); if (count($aDms) > 0) { foreach ($aDms as $oDms) { $fValorDms = 0; if ($oDms->getStatus() == 'emitida') { $iNumpre = Contribuinte_Model_DmsNota::getNumpreByIdDms($oDms->getId()); $sStatus = Contribuinte_Model_GuiaEcidade::atualizaSituacao($iNumpre, $iMes); if ($sStatus == 'ABERTO') { $sStatus = 'Emitida Guia'; } } else { $sStatus = $oDms->getStatus(); } foreach ($oDms->getDmsNotas() as $oNota) { $fValorDms += $oNota->getServicoValorImposto(); } // Formata os dados $sMesCompetencia = DBSeller_Helper_Date_Date::mesExtenso($oDms->getMesCompetencia()); // Dados do dms para a view $oDmsView = new stdClass(); $oDmsView->id = $oDms->getId(); $oDmsView->data_operacao = $oDms->getDataOperacao()->format('d/m/Y'); $oDmsView->fechado = $oDms->getStatus() == 'fechado'; $oDmsView->competencia = "{$sMesCompetencia}/{$oDms->getAnoCompetencia()}"; $oDmsView->status_guia = ucfirst(strtolower($sStatus)); $oDmsView->valor_imposto = DBSeller_Helper_Number_Format::toMoney($fValorDms, 2, 'R$ '); // Lista de DMS da view $aResultado[] = $oDmsView; } } // Verifica se tem requisicoes liberadas (ignora para contribuinte eventual) if ($iIdPerfil != self::PERFIL_PRESTADOR_EVENTUAL) { // Verifica se tem requisicoes liberadas $iTiposLiberados = 0; $aTiposDocumentosLiberados = Administrativo_Model_RequisicaoAidof::getRequisicoesAidof($this->oContribuinte->getInscricaoMunicipal()); if (count($aTiposDocumentosLiberados) > 0) { foreach ($aTiposDocumentosLiberados as $oTiposDocumentos) { if (in_array($oTiposDocumentos->status, array('', 'L'))) { $iTiposLiberados++; } } } if (count($aTiposDocumentosLiberados) <= 0 || $iTiposLiberados == 0) { $this->view->sem_requisicao = TRUE; } } // Verifica se o contribuinte declarou sem movimento $aDeclaracaoSemMovimento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes(array($this->oContribuinte->getInscricaoMunicipal()), $iAno, $iMes); if (count($aDeclaracaoSemMovimento) > 0) { $this->view->declarado_sem_movimento = TRUE; } // Dados da competência $oCompetencia = new stdClass(); $oCompetencia->mes = $iMes; $oCompetencia->ano = $iAno; // Dados da view $this->view->aDms = $aResultado; $this->view->competencia = $oCompetencia; } catch (Exception $oError) { $this->view->messages[] = array('error' => $this->translate->_($oError->getMessage())); } }
/** * Geração do relatório de empresas omissas */ public function empresasOmissasGerarAction() { parent::noLayout(); $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio2::TIPO6); if (is_array($aValidacaoFormulario)) { exit($this->getHelper('json')->sendJson($aValidacaoFormulario)); } try { // Parâmetros do formulário $sOrdenacaoCampo = $this->getRequest()->getParam('ordenacao'); $sOrdenacaoDirecao = $this->getRequest()->getParam('ordem'); $sCompetenciaInicial = $this->getRequest()->getParam('data_competencia_inicial'); $sCompetenciaFinal = $this->getRequest()->getParam('data_competencia_final'); // Separa os meses e anos $iCompetenciaInicialMes = intval(substr($sCompetenciaInicial, 0, 2)); $iCompetenciaFinalMes = intval(substr($sCompetenciaFinal, 0, 2)); $iCompetenciaInicialAno = intval(substr($sCompetenciaInicial, -4)); $iCompetenciaFinalAno = intval(substr($sCompetenciaFinal, -4)); $sNomeArquivo = 'relatorio_empresas_omissas_' . date('YmdHis') . '.pdf'; $aDescricaoFiltros = array('inscricao_municipal' => 'Inscrição Municipal', 'nome' => 'Nome', 'asc' => 'Crescente', 'desc' => 'Decrescente'); $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L'); $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}"); $oPdf->setLinhaFiltro('Relatório de Empresas Omissas'); $oPdf->setLinhaFiltro(''); $oPdf->setLinhaFiltro("FILTRO: Competência de {$sCompetenciaInicial} até {$sCompetenciaFinal}"); $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})"); $oPdf->carregaDados(); $aUsuarioContribuintes = Administrativo_Model_UsuarioContribuinte::getPrestadores(); $aInscricoesMunicipaisContribuintes = array(); // Verifica se existem usuários contribuinte cadastrados if (count($aUsuarioContribuintes) == 0) { throw new Exception($this->translate->_('Não existem contribuintes cadastrados no sistema.')); } $aDeclaracaoIsentoValidos = array(); for ($iAno = 0; $iAno <= $iCompetenciaFinalAno - $iCompetenciaInicialAno; $iAno++) { $iAnoLoop = intval($iCompetenciaInicialAno) + $iAno; // Varre os meses for ($iMesLoop = 1; $iMesLoop <= 12; $iMesLoop++) { // Ignora os meses anteriores e seguintes aos meses inicial e final if ($iAnoLoop == $iCompetenciaInicialAno && $iMesLoop < $iCompetenciaInicialMes || $iAnoLoop == $iCompetenciaFinalAno && $iMesLoop > $iCompetenciaFinalMes) { continue; } // Varre a lista de usuários contribuintes, verificando quem tem movimentações foreach ($aUsuarioContribuintes as $oContribuinte) { // Verifica se tem movimentação $sSql = "SELECT 1 AS existe_movimento\n FROM view_nota_mais_dms\n WHERE (dms_operacao = 's' OR dms_operacao IS NULL) AND\n prestador_cnpjcpf = '{$oContribuinte->getCnpjCpf()}' AND\n documento_competencia_ano = {$iAnoLoop} AND\n documento_competencia_mes = {$iMesLoop}"; $oStatement = $this->oConexao->prepare($sSql); $oStatement->execute(); // Adiciona na lista somente os contribuinte sem movimentação no sistema if ($oStatement->rowCount() == 0) { // Informações complementares do contribuinte $oDadosContribuinteComplemento = Administrativo_Model_UsuarioContribuinteComplemento::getById($oContribuinte->getCnpjCpf()); // Variaveis do contribuinte $iInscricaoMunicipal = $oContribuinte->getIm(); $sRazaoSocial = $oDadosContribuinteComplemento->getRazaoSocial(); $sEndereco = $oDadosContribuinteComplemento->getEnderecoDescricao(); if (strlen(trim($iInscricaoMunicipal)) > 0) { // Dados dos contribuintes $aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop][$iInscricaoMunicipal] = array('inscricao_municipal' => $iInscricaoMunicipal, 'nome' => DBSeller_Helper_String_Format::wordsCap($sRazaoSocial), 'endereco' => DBSeller_Helper_String_Format::wordsCap($sEndereco), 'telefone' => $oDadosContribuinteComplemento->getContatoTelefone(), 'competencia_ano' => $iAnoLoop, 'competencia_mes' => $iMesLoop); } // Lista para consulta no webservice $aInscricoesMunicipaisContribuintes[$iInscricaoMunicipal] = $iInscricaoMunicipal; } } } } // Mosta a lista de inscrições do contribuintes para verificação no webservice (separados por vírgula) $sInscricoesMunicipaisContribuintes = implode("','", $aInscricoesMunicipaisContribuintes); // Retorna apenas os contribuintes com declaração de insento $aDeclaracaoIsento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($sInscricoesMunicipaisContribuintes); // Limpa as inscricoes com declaração de isenção foreach ($aDeclaracaoIsento as $oDeclaracaoIsento) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes][$oDeclaracaoIsento->inscricao_municipal]); // Limpa dados do mes, caso não possua registros if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) == 0) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]); } // Limpa dados do ano, caso não possua registros if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) == 0) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]); } } if (count($aDeclaracaoIsentoValidos) == 0) { $sMensagemErro = 'Nenhuma informação foi encontrada neste período para geração do relatório.'; throw new Exception($this->translate->_($sMensagemErro)); } // Varre os anos for ($iAno = 0; $iAno <= $iCompetenciaFinalAno - $iCompetenciaInicialAno; $iAno++) { $iAnoLoop = intval($iCompetenciaInicialAno) + $iAno; // Varre os meses for ($iMesLoop = 1; $iMesLoop <= 12; $iMesLoop++) { // Ignora os meses anteriores e seguintes aos meses inicial e final if ($iAnoLoop == $iCompetenciaInicialAno && $iMesLoop < $iCompetenciaInicialMes || $iAnoLoop == $iCompetenciaFinalAno && $iMesLoop > $iCompetenciaFinalMes) { continue; } // Ordena o array pelo índice informado if (isset($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop])) { // Formata para mês por extenso $sMesExtenso = DBSeller_Helper_Date_Date::mesExtenso($iMesLoop); $oPdf->SetFont('Arial', 'B', 8); $oPdf->Cell(20, 5, utf8_decode('Competência:')); $oPdf->SetFont('Arial', NULL, 8); $oPdf->Cell(0, 5, utf8_decode("{$sMesExtenso}/{$iAnoLoop}")); $oPdf->Ln(5); $oPdf->SetFont('Arial', 'B', 8); $oPdf->Cell(28, 5, utf8_decode('Inscrição Municipal'), 1); $oPdf->Cell(100, 5, utf8_decode('Nome'), 1); $oPdf->Cell(117, 5, utf8_decode('Endereço'), 1); $oPdf->Cell(32, 5, utf8_decode('Telefone'), 1); $oPdf->Ln(5); $aDeclaracaoIsentoOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop], $sOrdenacaoCampo, $sOrdenacaoDirecao, TRUE); $oPdf->SetFont('Arial', NULL, 8); foreach ($aDeclaracaoIsentoOrdenado as $oDeclaracaoIsentoOrdenado) { $oPdf->Cell(28, 5, utf8_decode($oDeclaracaoIsentoOrdenado['inscricao_municipal']), 1); $oPdf->Cell(100, 5, utf8_decode($oDeclaracaoIsentoOrdenado['nome']), 1); $oPdf->Cell(117, 5, utf8_decode($oDeclaracaoIsentoOrdenado['endereco']), 1); $oPdf->Cell(32, 5, utf8_decode($oDeclaracaoIsentoOrdenado['telefone']), 1); $oPdf->Ln(5); } $oPdf->Ln(5); $oPdf->proximaPagina(10); } } } $oPdf->Output(); $aRetornoJson['status'] = TRUE; $aRetornoJson['url'] = $this->view->baseUrl("tmp/{$sNomeArquivo}"); $aRetornoJson['success'] = $this->translate->_('Arquivo importado com sucesso.'); } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $oErro->getMessage(); } echo $this->getHelper('json')->sendJson($aRetornoJson); }
/** * 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; } }