/**
  * 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;
 }
コード例 #2
0
 /**
  * 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);
 }
コード例 #3
0
 /**
  * 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);
 }