/** * Gera pdf apartir dos valores retornados do action * * @param $aDados * @return object */ private function gerarPdf($aDados) { $aParametros = $this->getRequest()->getParams(); $sNomeArquivo = 'relatorio_nfse_periodo_' . date('YmdHis') . '.pdf'; $sCaminhoArquivo = TEMP_PATH . "/{$sNomeArquivo}"; $sFiltroPeriodo = $this->translate->_("De {$aParametros['data_nota_inicial']} até {$aParametros['data_nota_final']}"); $oFpdf = new Fiscal_Model_Relatoriopdfmodelo1('L'); $oFpdf->setLinhaFiltro($this->translate->_('Relatório de NFS-e por Período')); $oFpdf->setLinhaFiltro(''); $oFpdf->setLinhaFiltro($this->translate->_("FILTRO : {$sFiltroPeriodo}")); if (!empty($aParametros['natureza_operacao'])) { $sLabelNaturezaOperacao = $aParametros['natureza_operacao'] == 1 ? 'Tributação no Município' : 'Tributação Fora do Município'; $sFiltroNastureza = $this->translate->_("Natureza da operação: {$sLabelNaturezaOperacao}"); $oFpdf->setLinhaFiltro($sFiltroNastureza); } if (!empty($aParametros['s_dados_iss_retido'])) { $sLabelRetido = $aParametros['s_dados_iss_retido'] == 1 ? 'Sim' : 'Não'; $sFiltroRetido = $this->translate->_("Subst. Tributário (Retido): {$sLabelRetido}"); $oFpdf->setLinhaFiltro($sFiltroRetido); } $oFpdf->Open($sCaminhoArquivo); $oFpdf->carregadados(); $oFpdf->Ln(2); $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell(30, 5, utf8_decode($this->translate->_('Inscrição')), 1, 0, 'C', 1); $oFpdf->Cell(127, 5, utf8_decode($this->translate->_('Razão Social')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Qtd. Notas')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Valor Serviço')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Valor ISS')), 1, 1, 'C', 1); $iFundo = 0; $iTotalLiquido = 0; $iTotalISS = 0; $iTotalQtdNotas = 0; foreach ($aDados as $aNota) { $lFundoLinha = $iFundo++ % 2 == 0 ? 0 : 1; $iTotalQtdNotas = $iTotalQtdNotas + $aNota['notas']; $iTotalLiquido = $iTotalLiquido + $aNota['vl_liquido_nfse']; $iTotalISS = $iTotalISS + $aNota['s_vl_iss']; $sValorLiquido = 'R$ ' . number_format($aNota['vl_liquido_nfse'], 2, ',', '.'); $sValorISS = 'R$ ' . number_format($aNota['s_vl_iss'], 2, ',', '.'); $oFpdf->SetFont('Arial', '', 8); $oFpdf->Cell(30, 5, $aNota['p_im'], 1, 0, 'C', $lFundoLinha); $oFpdf->Cell(127, 5, $aNota['p_razao_social'], 1, 0, 'L', $lFundoLinha); $oFpdf->Cell(40, 5, $aNota['notas'], 1, 0, 'R', $lFundoLinha); $oFpdf->Cell(40, 5, $sValorLiquido, 1, 0, 'R', $lFundoLinha); $oFpdf->Cell(40, 5, $sValorISS, 1, 1, 'R', $lFundoLinha); $oFpdf->proximaPagina(1); if ($oFpdf->lQuebrouPagina) { $iFundo = 0; $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell(30, 5, utf8_decode($this->translate->_('Inscrição')), 1, 0, 'C', 1); $oFpdf->Cell(127, 5, utf8_decode($this->translate->_('Razão Social')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Qtd. Notas')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Valor Serviço')), 1, 0, 'C', 1); $oFpdf->Cell(40, 5, utf8_decode($this->translate->_('Valor ISS')), 1, 1, 'C', 1); } } $sTotalLiquido = 'R$ ' . number_format($iTotalLiquido, 2, ',', '.'); $sTotalISS = 'R$ ' . number_format($iTotalISS, 2, ',', '.'); $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell(157, 5, utf8_decode($this->translate->_('Totais')), 1, 0, 'R', 0); $oFpdf->Cell(40, 5, $iTotalQtdNotas, 1, 0, 'R', 0); $oFpdf->Cell(40, 5, $sTotalLiquido, 1, 0, 'R', 0); $oFpdf->Cell(40, 5, $sTotalISS, 1, 1, 'R', 0); $oFpdf->Output(); /** * Opções de retorno */ $aRetorno = array('location' => $sCaminhoArquivo, 'filename' => $sNomeArquivo, 'type' => 'application/pdf'); return (object) $aRetorno; }
/** * 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); }
/** * Geração do relatório de valores por atividade / serviço */ public function valoresAtividadeServicoGerarAction() { parent::noLayout(); try { $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio1::TIPO5); if (is_array($aValidacaoFormulario)) { exit($this->getHelper('json')->sendJson($aValidacaoFormulario)); } $sNomeArquivo = 'evolucao_arrecadacao_ ' . date('YmdHis') . '.pdf'; $sCaminhoArquivo = APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}"; $aParametros = $this->getRequest()->getParams(); $aFiltros = array('atividade_servico' => 'Atividade / Serviço'); $sOrdenacao = 'Crescente'; if (strtoupper($aParametros['ordem']) == 'DESC') { $sOrdenacao = 'Decrescente'; } $sFiltro = "Competência {$aParametros['data_competencia_inicial']} até {$aParametros['data_competencia_final']}"; $sOrdem = $aFiltros[$aParametros['ordenacao']] . " ({$sOrdenacao})"; $oFpdf = new Fiscal_Model_Relatoriopdfmodelo1('L'); $oFpdf->setLinhaFiltro('Relatório Evolução de Arrecadação por Atividade/Serviço'); $oFpdf->setLinhaFiltro(''); $oFpdf->setLinhaFiltro("FILTRO : {$sFiltro}"); $oFpdf->setLinhaFiltro("ORDEM : {$sOrdem}"); $oFpdf->Open($sCaminhoArquivo); $oFpdf->carregadados(); $aDataCompetenciaInicial = explode('/', $aParametros['data_competencia_inicial']); $aDataCompetenciaFinal = explode('/', $aParametros['data_competencia_final']); $sSql = "SELECT SUM(servico_valor_iss) AS valor_imposto,\n servico_codigo_cnae,\n documento_competencia_ano,\n documento_competencia_mes\n FROM view_nota_mais_dms\n WHERE documento_emite_guia = TRUE\n AND (dms_operacao = 's' OR dms_operacao IS NULL)\n AND documento_situacao NOT IN ('c', 'e')\n AND documento_status_cancelamento = FALSE\n AND (documento_competencia_ano || LPAD(CAST(documento_competencia_mes AS VARCHAR), 2, '0'))\n BETWEEN ? AND ?\n GROUP BY servico_codigo_cnae,\n documento_competencia_ano,\n documento_competencia_mes "; $aDadosRelatorio = array(); $oEntityManager = Zend_Registry::get('em'); $oConexao = $oEntityManager->getConnection(); $oStatement = $oConexao->prepare($sSql); $oStatement->execute(array("{$aDataCompetenciaInicial[1]}{$aDataCompetenciaInicial[0]}", "{$aDataCompetenciaFinal[1]}{$aDataCompetenciaFinal[0]}")); if ($oStatement->rowCount() < 1) { throw new Exception('Nenhum Registro encontrado.'); } while ($aNota = $oStatement->fetch()) { $oServicos = Contribuinte_Model_Servico::getServicoPorCnae($aNota['servico_codigo_cnae']); if (!$oServicos) { throw new Exception("Erro: {$aNota['servico_codigo_cnae']}"); } $sIndice = md5($aNota['servico_codigo_cnae'] . $oServicos->attr('atividade')); $aDadosRelatorio[$sIndice]['estrutural'] = $oServicos->attr('estrutural'); $aDadosRelatorio[$sIndice]['descricao'] = DBSeller_Helper_String_Format::wordsCap($oServicos->attr('atividade')); if (!isset($aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']])) { $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] = 0; } $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] += $aNota['valor_imposto']; if (!isset($aDadosRelatorio[$sIndice]['totalAcumulado'])) { $aDadosRelatorio[$sIndice]['totalAcumulado'] = 0; } $aDadosRelatorio[$sIndice]['totalAcumulado'] += $aNota['valor_imposto']; } switch ($aParametros['ordenacao']) { case 'atividade_servico': $sOrdenacao = 'estrutural'; break; case 'valor_total': $sOrdenacao = 'totalAcumulado'; break; } $iComprimentoPagina = $oFpdf->w - $oFpdf->rMargin - $oFpdf->lMargin; $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacao, $aParametros['ordem'], TRUE); // Percorre os registros do relatório foreach ($aDadosRelatorio as $aRegistro) { $sAtividadeServico = "Atividade / Serviço: {$aRegistro['estrutural']} - {$aRegistro['descricao']}"; $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell($iComprimentoPagina, 5, utf8_decode($sAtividadeServico), 0, 1, 'J'); $oFpdf->SetFont('Arial', '', 8); $aMeses = DBSeller_Helper_Date_Date::getMesesArray(); $iTamanhoMes = $iComprimentoPagina / count($aMeses); // Ordena a lista pelo índice ksort($aRegistro['totalAnoMes']); // Percorre a lista pelo total por ano/mes foreach ($aRegistro['totalAnoMes'] as $iAno => $aAnos) { // Percorre os meses para gerar o cabeçalho de meses foreach ($aMeses as $iMes => $sDescricaoMes) { $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell($iTamanhoMes, 5, utf8_decode(substr($aMeses[$iMes], 0, 3)) . '/' . $iAno . '(R$)', 1, 0, 'C'); } $oFpdf->ln(); // Percorre os meses para gerar os dados por mês foreach ($aMeses as $iMes => $sMes) { $oFpdf->SetFont('Arial', '', 8); if (!empty($aAnos[$iMes])) { $oFpdf->Cell($iTamanhoMes, 5, DBSeller_Helper_Number_Format::toMoney($aAnos[$iMes], 2), 1, 0, 'R'); } else { $oFpdf->Cell($iTamanhoMes, 5, 'S / M', 1, 0, 'C'); } } $oFpdf->proximaPagina(1); if (!$oFpdf->lQuebrouPagina) { $oFpdf->Ln(6); } } if (!$oFpdf->lQuebrouPagina) { $oFpdf->Ln(2); } } $oFpdf->Output(); $aRetornoJson['status'] = TRUE; $aRetornoJson['url'] = $this->view->baseUrl('tmp/' . $sNomeArquivo); $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.'); } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $this->translate->_($oErro->getMessage()); } echo $this->getHelper('json')->sendJson($aRetornoJson); }