/** * Gera a guia do prestador no eCidade * * @param $oContribuinte * @param Contribuinte_Model_Competencia $oCompetencia * @param DateTime $oDataPagamento * @param bool $lGerarPdf * @return mixed */ public static function gerarGuiaNFSE($oContribuinte, Contribuinte_Model_Competencia $oCompetencia, DateTime $oDataPagamento, $lGerarPdf = TRUE) { try { $iMesCompetencia = $oCompetencia->getMesComp(); $iAnoCompetencia = $oCompetencia->getAnoComp(); $aNotas = $oCompetencia->getNotas(); $sDataPagamento = $oDataPagamento->format('d/m/Y'); $oUsuarioContribuinte = Administrativo_Model_UsuarioContribuinte::getById($oContribuinte->getIdUsuarioContribuinte()); $oDoctrine = Zend_Registry::get('em'); $oDoctrine->getConnection()->beginTransaction(); // Salva guia antes de ser gerada $oGuia = new Contribuinte_Model_Guia(); $oGuia->gerarGuiaPrestador($oContribuinte, $oCompetencia, $oDataPagamento); $oGuiaGerar = self::montaDadosGuia($oUsuarioContribuinte, $iAnoCompetencia, $iMesCompetencia, $aNotas, $sDataPagamento, $oGuia->getId()); $oGuiaGerada = NULL; $oGuiaGerada = self::gerarGuia($oGuiaGerar, $sDataPagamento, Contribuinte_Model_GuiaEcidade::TIPO_DEBITO_VARIAVEL); // Complementa a guia com os dados retornados do webservice $oGuia->complementaGuiaPrestador($oGuiaGerada); if ($lGerarPdf) { $oGuiaGerada->arquivo_guia = Contribuinte_Model_GuiaEcidade::salvarPdf($oGuiaGerada->debito->dados_boleto->arquivo_guia, 'guia_substituto'); } $oDoctrine->getConnection()->commit(); return $oGuiaGerada; } catch (Exception $oError) { $oDoctrine->getConnection()->rollback(); throw new Exception($oError->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; } }
/** * Competencia referente a esta guia * * @return \Contribuinte_Model_Competencia */ private function getCompetencia() { if ($this->competencia === NULL) { $this->competencia = Contribuinte_Model_Competencia::getByImCompetencia($this->getAnoComp(), $this->getMesComp(), $this->getIm()); } return $this->competencia; }
/** * Método para ver se a nota pode ser cancelada ou não * @param object $oContribuinte Model do contribuinte * @return boolean */ public function podeCancelar($oContribuinte) { $oNota = $this->getEntity(); $lExisteGuia = Contribuinte_Model_Guia::existeGuia($oContribuinte, $oNota->getMes_comp(), $oNota->getAno_comp(), Contribuinte_Model_Guia::$DOCUMENTO_ORIGEM_NFSE); $oSolicitacaoCancelamento = Contribuinte_Model_SolicitacaoCancelamento::getByAttribute('nota', $oNota); $uDataUltimaNota = Contribuinte_Model_Nota::getUltimaNotaEmitidaByContribuinte($oContribuinte->getContribuintes()); $oDataUltimaNota = new DateTime($uDataUltimaNota); $oCompetencia = new Contribuinte_Model_Competencia($oNota->getAno_comp(), $oNota->getMes_comp(), $oContribuinte); $aCompetenciaSemMovimento = $oCompetencia->getDeclaracaoSemMovimento(); if ($oNota->getAno_comp() < $oDataUltimaNota->format('Y')) { return FALSE; } else { if ($oNota->getAno_comp() == $oDataUltimaNota->format('Y') && $oNota->getMes_comp() < $oDataUltimaNota->format('m')) { return FALSE; } else { if ($oNota->getCancelada() || $lExisteGuia || $oNota->getImportada() || !empty($oSolicitacaoCancelamento)) { return FALSE; } else { if (isset($aCompetenciaSemMovimento[0]) && $oNota->getAno_comp() < $aCompetenciaSemMovimento[0]->ano) { return FALSE; } else { if (isset($aCompetenciaSemMovimento[0]) && $oNota->getAno_comp() == $aCompetenciaSemMovimento[0]->ano && $oNota->getMes_comp() <= $aCompetenciaSemMovimento[0]->mes) { return FALSE; } } } } } return TRUE; }
/** * 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); }
/** * Formulário de impressão automatica das guias */ public function impressaoGeracaoAutomaticaAction() { $oForm = new Fiscal_Form_Guias(); $oForm->getElement('btn_gerar')->setAttrib('style', 'display:none;'); $oForm->getElement('btn_consultar')->setLabel('Imprimir'); $oForm->getElement('btn_consultar')->setAttrib('type', 'submit'); $oForm->setAction($this->action); $this->view->oForm = $oForm; if ($this->getRequest()->isPost()) { $aParametros = $this->getRequest()->getParams(); parent::noTemplate(); $iMesCompetencia = str_pad($aParametros['mes_competencia'], 2, '0', STR_PAD_LEFT); $iAnoCompetencia = $aParametros['ano_competencia']; $aGuiasCompetencia = Contribuinte_Model_Competencia::getByGuiasContribuinteAndCompetencia($iMesCompetencia, $iAnoCompetencia); $oPrefeitura = Administrativo_Model_Prefeitura::getDadosPrefeituraBase(); $aDadosRelatorio = array(); foreach ($aGuiasCompetencia as $oGuia) { $oDados = new stdClass(); $oDados->competencia = $oGuia->getCompetencia(); $oDados->valorTotal = $oGuia->getFormatedTotalServico(); $oDados->valorIss = $oGuia->getFormatedTotalIss(); $oDados->razaoSocial = $oGuia->getContribuinte()->getNome(); $oDados->im = $oGuia->getContribuinte()->getInscricaoMunicipal(); $oDados->cnpj = $oGuia->getContribuinte()->getCgcCpf(); $aDadosRelatorio[] = $oDados; } $oImpressaoRelatorio = new Fiscal_Model_ImpressaoRelatorioDeGuias(); $oImpressaoRelatorio->setAmbiente(getenv("APPLICATION_ENV")); $oImpressaoRelatorio->setPrefeitura($oPrefeitura->getNome()); $oImpressaoRelatorio->setDados($aDadosRelatorio); $aArquivo = $oImpressaoRelatorio->montaRelatorio(); parent::download($aArquivo['filename']); } }
/** * Valida a importação de arquivo do tipo RPS modelo 1 (ABRASF 1.0) */ public function validaArquivoCarregado() { $oSessao = new Zend_Session_Namespace('nfse'); if (empty($this->oDadosPrefeitura)) { $aParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll(0, 1); if (count($aParametrosPrefeitura) == 0) { throw new Exception('Parâmetros da prefeitura não configurados. Processamento Abortado'); } $this->oDadosPrefeitura = $aParametrosPrefeitura[0]; } if (empty($this->oArquivoXmlRetorno->lote->numero)) { $this->setMensagemErro('E88'); } if (empty($this->oArquivoXmlRetorno->lote->cnpj)) { $this->setMensagemErro('E46'); } $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($this->oArquivoXmlRetorno->lote->cnpj); if (empty($oContribuinte)) { $this->setMensagemErro('E45', 'Contribuinte: ' . $this->oArquivoXmlRetorno->lote->cnpj); } else { if ($oContribuinte->getCgcCpf() != $oSessao->contribuinte->getCgcCpf()) { $this->setMensagemErro('E156', '', true); } } if ($this->oArquivoXmlRetorno->lote->quantidade_rps != count($this->oArquivoXmlRetorno->rps)) { $this->setMensagemErro('E69'); } if (strlen($this->oArquivoXmlRetorno->lote->quantidade_rps) > 4) { $this->setMensagemErro('E72'); } $aNumeracaoRPS = array(); foreach ($this->oArquivoXmlRetorno->rps as $oRps) { if ($this->oArquivoXmlRetorno->lote->inscricao_municipal != $oRps->prestador->inscricao_municipal) { $this->setMensagemErro('E70', 'RPS: ' . $oRps->numero); } if (empty($oRps->numero)) { $this->setMensagemErro('E11'); } else { if (is_int($oRps->numero) && strlen($oRps->numero) > 15) { $this->setMensagemErro('E96', 'RPS: ' . $oRps->numero); } if (in_array($oRps->numero, $aNumeracaoRPS)) { $this->setMensagemErro('E71', 'RPS: ' . $oRps->numero); } $aNumeracaoRPS[$oRps->numero] = NULL; } if (strlen($oRps->serie) > 5) { $this->setMensagemErro('E97', 'RPS: ' . $oRps->numero); } if (empty($oRps->tipo)) { $this->setMensagemErro('E12', 'RPS: ' . $oRps->numero); } if (empty($oRps->natureza_operacao)) { $this->setMensagemErro('E3', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->natureza_operacao, array(1, 2, 3, 4, 5, 6))) { $this->setMensagemErro('E144', 'RPS: ' . $oRps->numero); } } if (empty($oRps->optante_simples_nacional)) { $this->setMensagemErro('E8', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->optante_simples_nacional, array(1, 2))) { $this->setMensagemErro('E146', 'RPS: ' . $oRps->numero); } } if (empty($oRps->incentivador_cultural)) { $this->setMensagemErro('E9', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->incentivador_cultural, array(1, 2))) { $this->setMensagemErro('E147', 'RPS: ' . $oRps->numero); } } if (empty($oRps->data_emissao)) { $this->setMensagemErro('E14', 'RPS: ' . $oRps->numero); } if (!in_array($oRps->status, array(1, 2))) { $this->setMensagemErro('E68', 'RPS: ' . $oRps->numero); } if ($oRps->data_emissao->format('Ymd') > date('Ymd')) { $this->setMensagemErro('E16', 'RPS: ' . $oRps->numero); } if ($oRps->prestador->cnpj == $oRps->tomador->cpf_cnpj) { $this->setMensagemErro('E52', 'RPS: ' . $oRps->numero); } // validação dos valores se float $oNumeroFloat = new Zend_Validate_Float(); if ($oRps->servico->valores->valor_servicos <= 0) { $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_servicos)) { $this->setMensagemErro('E100', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_servicos <= 0) { $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_deducoes > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E19', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_deducoes < 0) { $this->setMensagemErro('E20', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_deducoes)) { $this->setMensagemErro('E101', 'RPS: ' . $oRps->numero); } $fTotalDesconto = $oRps->servico->valores->desconto_incondicionado + $oRps->servico->valores->desconto_condicionado; if ($fTotalDesconto > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E21', 'RPS: ' . $oRps->numero); } if ($fTotalDesconto < 0) { $this->setMensagemErro('E22', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($fTotalDesconto)) { $this->setMensagemErro('E102', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_pis < 0) { $this->setMensagemErro('E23', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_pis)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_cofins < 0) { $this->setMensagemErro('E24', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_cofins)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_inss < 0) { $this->setMensagemErro('E25', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_inss)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_ir < 0) { $this->setMensagemErro('E26', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_ir)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_csll < 0) { $this->setMensagemErro('E27', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_csll)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if (!in_array($oRps->servico->valores->iss_retido, array(1, 2))) { $this->setMensagemErro('E36', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->iss_retido == 1) { if ($oRps->servico->valores->valor_iss_retido <= 0) { $this->setMensagemErro('E40', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_iss_retido)) { $this->setMensagemErro('E153', 'RPS: ' . $oRps->numero); } if (strlen(DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($oRps->tomador->cpf_cnpj)) != 14) { $this->setMensagemErro('E39', 'RPS: ' . $oRps->numero . ". Serviços tomados por pessoa Física não pode reter iss"); } } if ($oRps->servico->valores->iss_retido == 1 && $oRps->servico->valores->valor_iss_retido > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E99', 'RPS: ' . $oRps->numero); } if (empty($oRps->servico->discriminacao)) { $this->setMensagemErro('E41', 'RPS: ' . $oRps->numero); } if (!empty($oContribuinte)) { $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal(); $aServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal); // Valida se o prestador de serviço pode atuar no município if (empty($aServicos)) { $this->setMensagemErro('E17', 'RPS: ' . $oRps->numero); } // Valida se o prestador do serviço é emissor de NFSE $iTipoEmissaoNfse = Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA; if ($oContribuinte->getTipoEmissao($iInscricaoMunicipal) != $iTipoEmissaoNfse) { $this->setMensagemErro('E138', 'RPS: ' . $oRps->numero); } // Valida a competência $oCompetencia = new Contribuinte_Model_Competencia($oRps->data_emissao->format('Y'), $oRps->data_emissao->format('m'), $oContribuinte); if (empty($oCompetencia) || $oCompetencia->existeGuiaEmitida()) { $this->setMensagemErro(null, "A competência da RPS \"{$oRps->numero}\" é inválida, já existe Guia Emitida."); } } // Valida se a data é maior que a atual if ($oRps->data_emissao->format('Y-m') > date('Y-m')) { $this->setMensagemErro('E2', 'RPS: ' . $oRps->numero); } // Valida se já existe na base de dados $oTipoRps = Administrativo_Model_ParametroPrefeituraRps::getByTipoNfse($oRps->tipo); $iTipoRps = 0; // Valida o tipo de RPS if (is_object($oTipoRps)) { $iTipoRps = $oTipoRps->getEntity()->getTipoEcidade($oRps->tipo); } if ($iTipoRps == 0) { $this->setMensagemErro('E13', 'RPS: ' . $oRps->numero); } // Verifica se a numeração do AIDOF é válida $oAidof = new Administrativo_Model_Aidof(); $lVerificaNumeracaoRps = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($oSessao->contribuinte->getInscricaoMunicipal(), $oRps->numero, $iTipoRps); if ($lVerificaNumeracaoRps === FALSE) { $this->setMensagemErro('E90', 'RPS: ' . $oRps->numero); } $lExisteRps = Contribuinte_Model_Nota::existeRps($oSessao->contribuinte, $oRps->numero, $oRps->tipo); if ($lExisteRps) { $this->setMensagemErro('E10', 'RPS: ' . $oRps->numero); } if (empty($oRps->servico->atividade)) { $this->setMensagemErro('E31', 'RPS: ' . $oRps->numero); } else { if (strlen($oRps->servico->atividade) > 5) { $this->setMensagemErro('E104', 'RPS: ' . $oRps->numero); } // Valida Grupo de Serviço/Atividade if (!empty($iInscricaoMunicipal)) { $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $oRps->servico->atividade); if (!$oServico) { $this->setMensagemErro('E30', 'RPS: ' . $oRps->numero); } } } if (empty($oRps->servico->codigo_cnae)) { $this->setMensagemErro('E33', 'RPS: ' . $oRps->numero); } else { if (strlen($oRps->servico->codigo_cnae) > 7) { $this->setMensagemErro('E105', 'RPS: ' . $oRps->numero); } } if (!empty($oRps->servico->ibge_municipio)) { if (strlen($oRps->servico->ibge_municipio) > 7) { $this->setMensagemErro('E108', 'RPS: ' . $oRps->numero); } // 2 = fora do municipio if ($oRps->natureza_operacao == 2 && $oRps->servico->ibge_municipio == $this->oDadosPrefeitura->getIbge()) { $this->setMensagemErro('E110', 'RPS: ' . $oRps->numero); } } // Validar IBGE Prefeitura if ($oRps->natureza_operacao == 1 && $this->oDadosPrefeitura->getIbge() !== $oRps->servico->ibge_municipio) { $this->setMensagemErro('E42', 'RPS: ' . $oRps->numero); } if (strlen($oRps->construcao_civil->art) > 15) { $this->setMensagemErro('E130', 'RPS: ' . $oRps->numero); } if (strlen($oRps->construcao_civil->codigo_obra) > 15) { $this->setMensagemErro('E129', 'Rps: ' . $oRps->numero); } if (count($this->aMensagensErroValidacao) >= 50) { $this->setMensagemErro('E49', '', TRUE); } } // Se existirem erros executa uma exceção com a lista de erros if (count($this->aMensagensErroValidacao) > 0) { return FALSE; } return TRUE; }
/** * Gera a declaracao mensal Sem Movimento para o e-cidade */ public function declaracaoSemMovimentoGerarAction() { try { $iMes = intval($this->_getParam('mes_competencia')); $iAno = (int) ((int) date('m') == 1 ? date('Y') - 1 : date('Y')); $oContribuinte = $this->_session->contribuinte; $oCompetencia = new Contribuinte_Model_Competencia($iAno, $iMes, $oContribuinte); $lGerarComptencia = $oCompetencia->gerarDeclaracaoSemMovimento(); if (!$lGerarComptencia) { throw new Exception($this->translate->_('Erro ao gerar declaração')); } $aRetornoJson['status'] = TRUE; $aRetornoJson['reload'] = TRUE; $aRetornoJson['success'] = $this->translate->_('Operação efetuada com sucesso'); echo $this->getHelper('json')->sendJson($aRetornoJson); } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = sprintf($this->translate->_('Erro: %s'), $oErro->getMessage()); echo $this->getHelper('json')->sendJson($aRetornoJson); } }
/** * 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())); } }
/** * Consulta todas as guias dos contribuintes por competência * @param $iMes * @param $iAno * @return array */ public static function getByGuiasContribuinteAndCompetencia($iMes, $iAno) { $oEntityManager = self::getEm(); $sSql = 'SELECT nota.id_contribuinte, nota.ano_comp, nota.mes_comp, SUM(nota.s_vl_iss) AS s_vl_iss , SUM(nota.s_vl_servicos) AS s_vl_servicos FROM Contribuinte\\Nota nota WHERE nota.mes_comp = :mes_comp AND nota.ano_comp = :ano_comp AND nota.cancelada = false AND nota.s_vl_iss > 0 AND nota.s_dados_iss_retido = 1 AND nota.emite_guia = true AND nota.importada = false AND NOT EXISTS(SELECT 1 FROM Contribuinte\\Guia guia WHERE guia.mes_comp = :mes_comp AND guia.ano_comp = :ano_comp AND guia.id_contribuinte = nota.id_contribuinte) GROUP BY nota.id_contribuinte, nota.ano_comp, nota.mes_comp ORDER BY nota.ano_comp, nota.mes_comp DESC'; $oQuery = $oEntityManager->createQuery($sSql); $oQuery->setParameter('mes_comp', $iMes); $oQuery->setParameter('ano_comp', $iAno); $aResultados = $oQuery->getResult(); $aRetorno = array(); foreach ($aResultados as $aGuiaCompetencia) { $oContribuinte = Contribuinte_Model_Contribuinte::getById($aGuiaCompetencia['id_contribuinte']); $oCompetencia = new Contribuinte_Model_Competencia($aGuiaCompetencia['ano_comp'], $aGuiaCompetencia['mes_comp'], $oContribuinte); $oCompetencia->setTotalIss($aGuiaCompetencia['s_vl_iss']); $oCompetencia->setTotalServico($aGuiaCompetencia['s_vl_servicos']); $lExisteGuia = Contribuinte_Model_Guia::existeGuia($oContribuinte, $aGuiaCompetencia['mes_comp'], $aGuiaCompetencia['ano_comp']); if ($lExisteGuia) { continue; } $aRetorno[] = $oCompetencia; } unset($aResultados); return $aRetorno; }
/** * 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; } }
/** * Remove os Meses que existe movimentacao ou foi declarado sem movimento * * @return $this */ public function removerMesesComMovimentacaoDeNotas() { $oSession = new Zend_Session_Namespace('nfse'); $iMesCompetencia = (int) date('m') - 1; $iAnoCompetencia = (int) ((int) date('m') == 1 ? date('Y') - 1 : date('Y')); $oContribuinte = $oSession->contribuinte; $oCompetencia = new Contribuinte_Model_Competencia($iAnoCompetencia, $iMesCompetencia, $oContribuinte); $aMeses = DBSeller_Helper_Date_Date::getMesesAnterioresArray($iMesCompetencia); $aDeclaracaoSemMovimento = $oCompetencia->getDeclaracaoSemMovimento(); // Remove os meses que já tem declaracao sem movimento if (count($aDeclaracaoSemMovimento) > 0) { foreach ($aDeclaracaoSemMovimento as $oDeclaracaoSemMovimento) { unset($aMeses[$oDeclaracaoSemMovimento->mes]); } } // Verifica se existem notas lancadas no NFSE if (count($aMeses) > 0) { foreach ($aMeses as $iMes => $sMes) { $aResultadoDms = Contribuinte_Model_Dms::getDadosPorCompetencia($oContribuinte->getContribuintes(), $iAnoCompetencia, $iMes, Contribuinte_Model_Dms::SAIDA); // Verifica se tem NFSe lancadas na competência $oParametros = new stdClass(); $oParametros->iMes = $iMes; $oParametros->iAno = $iAnoCompetencia; $aResultadoNota = Contribuinte_Model_Nota::getByContribuinteAndCompetencia($oContribuinte->getContribuintes(), $oParametros); // Limpa os meses if (count($aResultadoDms) > 0 || count($aResultadoNota) > 0) { unset($aMeses[$iMes]); } } } // Desabilita geração quando não possuir meses válidos if (count($aMeses) == 0) { $this->getElement('mes_competencia')->setAttrib('disabled', TRUE); $this->getElement('btn_competencia')->setAttrib('disabled', TRUE); } $this->getElement('mes_competencia')->setMultiOptions($aMeses); return $this; }