コード例 #1
0
 /**
  * Geração do relatório de retenções
  */
 public function comparativoRetencoesGerarAction()
 {
     parent::noLayout();
     // Parâmetros do formulário
     $sOrdenacaoCampo = $this->getRequest()->getParam('ordenacao');
     $sOrdenacaoDirecao = $this->getRequest()->getParam('ordem');
     $sTipoRelatorio = $this->getRequest()->getParam('tipo_relatorio');
     $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
     // Valida formulário
     $aValidacaoFormulario = self::validarFormulario($sTipoRelatorio);
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'comparativo_retencoes_' . date('YmdHis') . '.pdf';
         $aDescricaoFiltros = array('cabecalho_contribuinte_cnpjcpf' => 'CNPJ/CPF', 'cabecalho_contribuinte_razao_social' => 'Nome/Razão', 'asc' => 'Crescente', 'desc' => 'Decrescente');
         $aDescricaoRelatorio[Fiscal_Form_Relatorio4::TIPO9] = array('titulo' => 'Documentos Não retidos pelo Tomador e retidos pelo Prestador', 'descricao_cabecalho' => 'Tomador', 'descricao_lista' => 'Prestador');
         $aDescricaoRelatorio[Fiscal_Form_Relatorio4::TIPO10] = array('titulo' => 'Documentos Não retidos pelo Prestador e retidos pelo Tomador', 'descricao_cabecalho' => 'Prestador', 'descricao_lista' => 'Tomador');
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório Comparativo de Retenções');
         $oPdf->setLinhaFiltro($aDescricaoRelatorio[$sTipoRelatorio]['titulo']);
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio($sTipoRelatorio);
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array($iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception($this->translate->_('Nenhum registro encontrado.'));
             }
             $aRelatorio = NULL;
             // Varre os registros do relatório
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 $sContribuinteCnpj = $aRelatorio['cabecalho_contribuinte_cnpjcpf'];
                 $oTipoNota = Contribuinte_Model_Nota::getTipoNota($aRelatorio['lista_documento_tipo']);
                 $aDadosRelatorio[$sContribuinteCnpj]['cabecalho_contribuinte_cnpjcpf'] = $sContribuinteCnpj;
                 $aDadosRelatorio[$sContribuinteCnpj]['cabecalho_contribuinte_razao_social'] = DBSeller_Helper_String_Format::wordsCap($aRelatorio['cabecalho_contribuinte_razao_social']);
                 $aDadosRelatorio[$sContribuinteCnpj]['documentos'][] = array('lista_documento_numero' => $aRelatorio['lista_documento_numero'], 'lista_documento_tipo' => DBSeller_Helper_String_Format::wordsCap($oTipoNota->descricao), 'lista_contribuinte_cnpjcpf' => DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorio['lista_contribuinte_cnpjcpf']), 'lista_contribuinte_razao_social' => DBSeller_Helper_String_Format::wordsCap($aRelatorio['lista_contribuinte_razao_social']), 'lista_contribuinte_contato_telefone' => DBSeller_Helper_Number_Format::maskPhoneNumber($aRelatorio['lista_contribuinte_contato_telefone']), 'lista_servico_valor_servicos' => DBSeller_Helper_Number_Format::toMoney($aRelatorio['lista_servico_valor_servicos'], 2));
             } while ($aRelatorio);
             // Dados do relatorio na ordem informada
             if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                 $aDadosRelatorioOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacaoCampo, $sOrdenacaoDirecao, FALSE);
             } else {
                 throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
             }
             // Percorre os dados do relatório
             foreach ($aDadosRelatorioOrdenado as $aRelatorioOrdenado) {
                 $sContribuinteCnpj = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorioOrdenado['cabecalho_contribuinte_cnpjcpf']);
                 $sContribuinteRazao = $aRelatorioOrdenado['cabecalho_contribuinte_razao_social'];
                 $sDescricaoCabecalho = $aDescricaoRelatorio[$sTipoRelatorio]['descricao_cabecalho'];
                 // Divisor com as informações do tomador
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(30, 5, utf8_decode("CPNJ/CPF {$sDescricaoCabecalho}:"));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(30, 5, utf8_decode($sContribuinteCnpj));
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(33, 5, utf8_decode("Razão Social {$sDescricaoCabecalho}:"));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(0, 5, utf8_decode($sContribuinteRazao));
                 $oPdf->Ln();
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $sDescricaoLista = $aDescricaoRelatorio[$sTipoRelatorio]['descricao_lista'];
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(28, 5, utf8_decode('Nº do Documento'), 1, 0, 'C');
                     $oPdf->Cell(50, 5, utf8_decode('Tipo de Documento'), 1, 0, 'L');
                     $oPdf->Cell(35, 5, utf8_decode("CNPJ/CPF do {$sDescricaoLista}"), 1, 0, 'L');
                     $oPdf->Cell(110, 5, utf8_decode("Razão Social do {$sDescricaoLista}"), 1, 0, 'L');
                     $oPdf->Cell(30, 5, utf8_decode('Telefone'), 1, 0, 'L');
                     $oPdf->Cell(24, 5, utf8_decode('Valor (R$)'), 1, 0, 'R');
                     $oPdf->Ln(5);
                     foreach ($aRelatorioOrdenado['documentos'] as $aRelatorioDocumento) {
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(28, 5, utf8_decode($aRelatorioDocumento['lista_documento_numero']), 1, 0, 'C');
                         $oPdf->Cell(50, 5, utf8_decode($aRelatorioDocumento['lista_documento_tipo']), 1, 0, 'L');
                         $oPdf->Cell(35, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_cnpjcpf']), 1, 0, 'L');
                         $oPdf->Cell(110, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_razao_social']), 1, 0, 'L');
                         $oPdf->Cell(30, 5, utf8_decode($aRelatorioDocumento['lista_contribuinte_contato_telefone']), 1, 0, 'L');
                         $oPdf->Cell(24, 5, utf8_decode($aRelatorioDocumento['lista_servico_valor_servicos']), 1, 0, 'R');
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         $oPdf->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'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
コード例 #2
0
 /**
  * Geração do relatório de NFSe's
  */
 public function nfseGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Parâmetros do formulário
         $sCompetenciaInicial = $this->getRequest()->getParam('data_competencia_inicial');
         $sCompetenciaFinal = $this->getRequest()->getParam('data_competencia_final');
         $sPrestadorCnpj = $this->getRequest()->getParam('prestador_cnpj');
         $lGuiaEmitida = $this->getRequest()->getParam('guia_emitida') == 1 ? TRUE : FALSE;
         $sGuiaEmitida = $lGuiaEmitida ? 'Sim' : 'Não';
         // Prestador
         $oPrestador = Contribuinte_Model_Contribuinte::getByCpfCnpj($sPrestadorCnpj);
         // 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_nfse_' . date('YmdHis') . '.pdf';
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('P');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório de NFSe');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro('FILTROS:');
         $oPdf->setLinhaFiltro("  CNPJ Prestador {$sPrestadorCnpj}");
         $oPdf->setLinhaFiltro("  Competência de {$sCompetenciaInicial} à {$sCompetenciaFinal}");
         $oPdf->setLinhaFiltro("  Guia Emitida? {$sGuiaEmitida}");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $lExistemRegistros = FALSE;
             // Prepara a consulta na base de dados
             $sSql = self::getSqlRelatorio2($lGuiaEmitida);
             $oStatement = $oConexao->prepare($sSql);
             // Limpa as máscaras do CNPJ
             $sPrestadorCnpj = DBSeller_Helper_Number_Format::getNumbers($sPrestadorCnpj);
             // 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;
                     }
                     // Executa a consulta na base de dados com os parâmetros: cnpj, mês e ano da competência
                     $oStatement->execute(array($iMesLoop, $iAnoLoop, $sPrestadorCnpj, $iMesLoop, $iAnoLoop, $sPrestadorCnpj));
                     // Ignora loop caso não possua registros
                     if ($oStatement->rowCount() < 1) {
                         continue;
                     }
                     $lExistemRegistros = TRUE;
                     // Zera os dados
                     $aRelatorio = NULL;
                     $aDadosRelatorio = NULL;
                     // Monta os dados do relatório com o índice para ordenação
                     do {
                         // Busca os dados na base de dados
                         $aRelatorio = $oStatement->fetch();
                         // Ignora a busca caso não existam resultados
                         if (empty($aRelatorio)) {
                             continue;
                         }
                         // Dados do Prestador
                         $sPrestadorCnpjCpf = $aRelatorio['prestador_cnpjcpf'];
                         $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sPrestadorCnpjCpf);
                         $sPrestadorInscricaoMunicipal = $aRelatorio['prestador_inscricao_municipal'];
                         $sPrestadorRazaoSocial = $aRelatorio['prestador_razao_social'];
                         $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sPrestadorRazaoSocial);
                         $sPrestadorMunicipioUf = $aRelatorio['prestador_endereco_municipio'];
                         $sPrestadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sPrestadorMunicipioUf);
                         $sPrestadorMunicipioUf = "{$sPrestadorMunicipioUf}/{$aRelatorio['prestador_endereco_uf']}";
                         $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                         $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                         $sPrestadorDocumentoNumero = $aRelatorio['prestador_documento_numero'];
                         $oPrestadorDocumentoData = new DateTime($aRelatorio['prestador_documento_data']);
                         $sPrestadorDocumentoTipo = $aRelatorio['prestador_documento_tipo'];
                         $sPrestadorDocumentoValor = $aRelatorio['prestador_valor_servico'];
                         $sPrestadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoValor, 2);
                         $sPrestadorDocumentoAliquota = $aRelatorio['prestador_valor_aliquota'];
                         $sPrestadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoAliquota, 2);
                         $sPrestadorDocumentoIss = $aRelatorio['prestador_valor_iss'];
                         $sPrestadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoIss, 2);
                         $sPrestadorDocumentoIssRetido = $aRelatorio['prestador_iss_retido'] ? 'Não' : 'Sim';
                         // Dados Tomador
                         $sTomadorCnpjCpf = $aRelatorio['tomador_cnpjcpf'];
                         $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sTomadorCnpjCpf);
                         $sTomadorInscricaoMunicipal = $aRelatorio['tomador_inscricao_municipal'];
                         $sTomadorRazaoSocial = $aRelatorio['tomador_razao_social'];
                         $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sTomadorRazaoSocial);
                         $sTomadorMunicipioUf = $aRelatorio['tomador_endereco_municipio'];
                         $sTomadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sTomadorMunicipioUf);
                         $sTomadorMunicipioUf = "{$sTomadorMunicipioUf}/{$aRelatorio['tomador_endereco_uf']}";
                         $sTomadorTelefone = $aRelatorio['tomador_contato_telefone'];
                         $sTomadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sTomadorTelefone);
                         $sTomadorDocumentoNumero = $aRelatorio['tomador_documento_numero'];
                         $oTomadorDocumentoData = new DateTime($aRelatorio['tomador_documento_data']);
                         $sTomadorDocumentoTipo = $aRelatorio['tomador_documento_tipo'];
                         $sTomadorDocumentoValor = $aRelatorio['tomador_valor_servico'];
                         $sTomadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoValor, 2);
                         $sTomadorDocumentoAliquota = $aRelatorio['tomador_valor_aliquota'];
                         $sTomadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoAliquota, 2);
                         $sTomadorDocumentoIss = $aRelatorio['tomador_valor_iss'];
                         $sTomadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoIss, 2);
                         $sTomadorDocumentoIssRetido = $aRelatorio['tomador_iss_retido'] ? 'Sim' : 'Não';
                         // Descrição do tipo de documento
                         $oPrestadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sPrestadorDocumentoTipo);
                         $sPrestadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oPrestadorDocumentoTipo->descricao);
                         $oTomadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sTomadorDocumentoTipo);
                         $sTomadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oTomadorDocumentoTipo->descricao);
                         // Indice para evitar a repetição do cabeçalho por prestador+tomador
                         $sIndiceRelatorio = "{$aRelatorio['prestador_cnpjcpf']}_{$aRelatorio['tomador_cnpjcpf']}";
                         // Dados do relatório
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_cnpjcpf'] = $sPrestadorCnpjCpf;
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_inscricao_municipal'] = $sPrestadorInscricaoMunicipal;
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_razao_social'] = utf8_decode($sPrestadorRazaoSocial);
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_municipio_uf'] = utf8_decode($sPrestadorMunicipioUf);
                         $aDadosRelatorio[$sIndiceRelatorio]['prestador_telefone'] = $sPrestadorTelefone;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_cnpjcpf'] = $sTomadorCnpjCpf;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_inscricao_municipal'] = $sTomadorInscricaoMunicipal;
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_razao_social'] = utf8_decode($sTomadorRazaoSocial);
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_municipio_uf'] = utf8_decode($sTomadorMunicipioUf);
                         $aDadosRelatorio[$sIndiceRelatorio]['tomador_telefone'] = $sTomadorTelefone;
                         $aDadosRelatorio[$sIndiceRelatorio]['documentos'][] = array('prestador_doc_numero' => utf8_decode($sPrestadorDocumentoNumero), 'prestador_doc_data' => $oPrestadorDocumentoData, 'prestador_doc_tipo' => utf8_decode($sPrestadorDocumentoTipo), 'prestador_doc_valor_servico' => utf8_decode($sPrestadorDocumentoValor), 'prestador_doc_valor_aliquota' => utf8_decode($sPrestadorDocumentoAliquota), 'prestador_doc_valor_iss' => utf8_decode($sPrestadorDocumentoIss), 'prestador_doc_iss_retido' => utf8_decode($sPrestadorDocumentoIssRetido), 'tomador_doc_numero' => utf8_decode($sTomadorDocumentoNumero), 'tomador_doc_data' => $oTomadorDocumentoData, 'tomador_doc_tipo' => utf8_decode($sTomadorDocumentoTipo), 'tomador_doc_valor_servico' => utf8_decode($sTomadorDocumentoValor), 'tomador_doc_valor_aliquota' => utf8_decode($sTomadorDocumentoAliquota), 'tomador_doc_valor_iss' => utf8_decode($sTomadorDocumentoIss), 'tomador_doc_iss_retido' => utf8_decode($sTomadorDocumentoIssRetido));
                     } while ($aRelatorio);
                     // Ordena a lista de documentos por número
                     $aDocumentosOrdenados = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio[$sIndiceRelatorio]['documentos'], 'prestador_doc_numero');
                     $aDadosRelatorio[$sIndiceRelatorio]['documentos'] = $aDocumentosOrdenados;
                     // Ordena os dados do relatorio
                     if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                         $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, 'prestador_cnpjcpf');
                     } else {
                         throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
                     }
                     // Calcula a metade da página
                     $iMeiaPaginaX = $oPdf->w / 2 - $oPdf->lMargin;
                     // Percorre os dados do relatório
                     foreach ($aDadosRelatorio as $aRelatorioOrdenado) {
                         // Formata o texto da competência
                         $sCompetencia = str_pad($iMesLoop, 2, 0, STR_PAD_LEFT) . "/{$iAnoLoop}";
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 5, utf8_decode('Competência: '));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(22, 5, $sCompetencia);
                         // Dados da guia do prestador
                         if ($lGuiaEmitida) {
                             $oGuiaPrestador = Contribuinte_Model_Guia::getByCompetenciaAndContribuinte($iAnoLoop, $iMesLoop, $oPrestador, Contribuinte_Model_Guia::$PRESTADOR);
                             if (is_array($oGuiaPrestador) && count($oGuiaPrestador) > 0 && $oGuiaPrestador[0] instanceof Contribuinte_Model_Guia) {
                                 $oGuiaPrestador = reset($oGuiaPrestador);
                                 $oPdf->SetFont('Arial', 'B', 8);
                                 $oPdf->Cell(13, 5, utf8_decode('Numpre: '));
                                 $oPdf->SetFont('Arial', '', 8);
                                 $oPdf->Cell(20, 5, $oGuiaPrestador->getNumpre());
                             }
                         }
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell($iMeiaPaginaX, 5, 'PRESTADOR', 1, 0, 'L', 1);
                         $oPdf->Cell($iMeiaPaginaX, 5, 'TOMADOR', 1, 0, 'L', 1);
                         $oPdf->Ln();
                         $oPdf->Rect($oPdf->GetX(), $oPdf->GetY(), $iMeiaPaginaX, 25);
                         $oPdf->Rect($iMeiaPaginaX + $oPdf->lMargin, $oPdf->GetY(), $iMeiaPaginaX, 25);
                         $oPdf->Ln(2);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(28, 4, utf8_decode('Inscrição Municipal:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 28, 4, $aRelatorioOrdenado['prestador_inscricao_municipal']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(28, 4, utf8_decode('Inscrição Municipal:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 28, 4, $aRelatorioOrdenado['tomador_inscricao_municipal']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(16, 4, 'CPNJ/CPF:');
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 16, 4, $aRelatorioOrdenado['prestador_cnpjcpf']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(16, 4, 'CPNJ/CPF:');
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 16, 4, $aRelatorioOrdenado['tomador_cnpjcpf']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Razão Social:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_razao_social']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Razão Social:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_razao_social']);
                         $oPdf->Ln();
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_municipio_uf']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_municipio_uf']);
                         $oPdf->Ln(5);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(14, 4, utf8_decode('Telefone:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 14, 4, $aRelatorioOrdenado['prestador_telefone']);
                         $oPdf->SetFont('Arial', 'B', 8);
                         $oPdf->Cell(14, 4, utf8_decode('Telefone:'));
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell($iMeiaPaginaX - 14, 4, $aRelatorioOrdenado['tomador_telefone']);
                         $oPdf->Ln(5);
                         if (count($aRelatorioOrdenado['documentos']) > 0) {
                             $aLarguraColuna = array(25, 14, 16, 51, 26, 18, 27, 13);
                             $oPdf->SetFont('Arial', 'B', 8);
                             $oPdf->Cell($aLarguraColuna[0], 5, utf8_decode('Nº do Documento'), 1, 0, 'C', 1);
                             $oPdf->Cell($aLarguraColuna[1], 5, utf8_decode('Origem'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[2], 5, utf8_decode('Data'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[3], 5, utf8_decode('Tipo de Documento'), 1, 0, 'L', 1);
                             $oPdf->Cell($aLarguraColuna[4], 5, utf8_decode('Valor Serviço (R$)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[5], 5, utf8_decode('Alíquota (%)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[6], 5, utf8_decode('Valor Imposto (R$)'), 1, 0, 'R', 1);
                             $oPdf->Cell($aLarguraColuna[7], 5, utf8_decode('Retido'), 1, 0, 'L', 1);
                             $oPdf->Ln(5);
                             // Flag para exibir a cor de fundo nas células
                             $iFundoLinha = 0;
                             // Percorre a lista de documentos
                             foreach ($aRelatorioOrdenado['documentos'] as $aDocumento) {
                                 $lFundoLinha = $iFundoLinha++ % 2 == 0 ? 0 : 1;
                                 // Cor de fundo das linhas (zebra)
                                 $oPdf->SetFont('Arial', '', 8);
                                 $oPdf->MultiCell($aLarguraColuna[0], 10, $aDocumento['prestador_doc_numero'], 1, 'C', $lFundoLinha);
                                 $oPdf->SetY($oPdf->getY() - 10);
                                 $oPdf->SetX($oPdf->getX() + $aLarguraColuna[0]);
                                 $oPdf->Cell($aLarguraColuna[1], 5, 'Prestador', 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['prestador_doc_data']->format('d/m/Y'), 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['prestador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['prestador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['prestador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['prestador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[7], 5, $aDocumento['prestador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Ln(5);
                                 $oPdf->Cell($aLarguraColuna[0], 5, '');
                                 $oPdf->Cell($aLarguraColuna[1], 5, 'Tomador', 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['tomador_doc_data']->format('d/m/Y'), 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['tomador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['tomador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['tomador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['tomador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                                 $oPdf->Cell($aLarguraColuna[7], 5, $aDocumento['tomador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                                 $oPdf->Ln(5);
                             }
                             $oPdf->Ln();
                         }
                     }
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         // Verifica se existem registro para gerar o relatório
         if ($lExistemRegistros) {
             $oPdf->Output();
         } else {
             throw new Exception($this->translate->_('Nenhum registro encontrado.'));
         }
         $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'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
コード例 #3
0
 /**
  * Geração do relatório de declarações sem movimento
  */
 public function comparativoDeclaracoesGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     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');
         $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'relatorio_comparativo_declaracoes_' . date('YmdHis') . '.pdf';
         $aDescricaoFiltros = array('tomador_cnpjcpf' => 'CPF/CNPJ', 'tomador_razao_social' => 'Nome/Razão Social Tomador', 'asc' => 'Crescente', 'desc' => 'Decrescente');
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L');
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório Comparativo de Declarações');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio();
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array(Contribuinte_Model_Dms::ENTRADA, $iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception('Nenhum registro encontrado.');
             }
             $aRelatorio = NULL;
             // Monta o array com o registros formatados
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 // Tipo de documento
                 $oDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($aRelatorio['documento_tipo']);
                 $sDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oDocumentoTipo->descricao);
                 // Formata os dados
                 $iTomadorCnpj = $aRelatorio['tomador_cnpjcpf'];
                 $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($aRelatorio['tomador_razao_social']);
                 $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorio['prestador_cnpjcpf']);
                 $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($aRelatorio['prestador_razao_social']);
                 $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                 $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                 $sValorServico = DBSeller_Helper_Number_Format::toMoney($aRelatorio['servico_valor_servicos'], 2);
                 // Dados do relatorio organizado por índice
                 $aDadosRelatorio[$iTomadorCnpj]['tomador_cnpjcpf'] = $iTomadorCnpj;
                 $aDadosRelatorio[$iTomadorCnpj]['tomador_razao_social'] = $sTomadorRazaoSocial;
                 $aDadosRelatorio[$iTomadorCnpj]['documentos'][] = array('documento_numero' => $aRelatorio['documento_numero'], 'documento_tipo' => $sDocumentoTipo, 'prestador_cnpjcpf' => $sPrestadorCnpjCpf, 'prestador_razao_social' => $sPrestadorRazaoSocial, 'prestador_contato_telefone' => $sPrestadorTelefone, 'servico_valor_servicos' => $sValorServico);
             } while ($aRelatorio);
             // Dados do relatorio na ordem informada
             $aDadosRelatorioOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacaoCampo, $sOrdenacaoDirecao, FALSE);
             // Percorre os dados do relatório, já ordenado
             foreach ($aDadosRelatorioOrdenado as $aRelatorioOrdenado) {
                 $sCpfCnpjTomador = DBSeller_Helper_Number_Format::maskCPF_CNPJ($aRelatorioOrdenado['tomador_cnpjcpf']);
                 $sRazaoTomador = $aRelatorioOrdenado['tomador_razao_social'];
                 // Divisor com as informações do tomador
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(29, 5, utf8_decode('CPNJ/CPF Tomador:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(30, 5, utf8_decode($sCpfCnpjTomador));
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(32, 5, utf8_decode('Razão Social Tomador:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell(0, 5, utf8_decode($sRazaoTomador));
                 $oPdf->Ln();
                 // Cabeçalho com a lista de documentos do tomador
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell(28, 5, utf8_decode('Nº do Documento'), 1, 0, 'C');
                     $oPdf->Cell(50, 5, utf8_decode('Tipo de Documento'), 1, 0, 'L');
                     $oPdf->Cell(35, 5, utf8_decode('CNPJ/CPF do Prestador'), 1, 0, 'L');
                     $oPdf->Cell(110, 5, utf8_decode('Razão Social do Prestador'), 1, 0, 'L');
                     $oPdf->Cell(30, 5, utf8_decode('Telefone'), 1, 0, 'L');
                     $oPdf->Cell(24, 5, utf8_decode('Valor (R$)'), 1, 0, 'R');
                     $oPdf->Ln(5);
                     // Percorre os documentos do tomador
                     foreach ($aRelatorioOrdenado['documentos'] as $aRelatorioDocumento) {
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->Cell(28, 5, utf8_decode($aRelatorioDocumento['documento_numero']), 1, 0, 'C');
                         $oPdf->Cell(50, 5, utf8_decode($aRelatorioDocumento['documento_tipo']), 1, 0, 'L');
                         $oPdf->Cell(35, 5, utf8_decode($aRelatorioDocumento['prestador_cnpjcpf']), 1, 0, 'L');
                         $oPdf->Cell(110, 5, utf8_decode($aRelatorioDocumento['prestador_razao_social']), 1, 0, 'L');
                         $oPdf->Cell(30, 5, utf8_decode($aRelatorioDocumento['prestador_contato_telefone']), 1, 0, 'L');
                         $oPdf->Cell(24, 5, utf8_decode($aRelatorioDocumento['servico_valor_servicos']), 1, 0, 'R');
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         // Renderiza o arquivo PDF
         $oPdf->Output();
         // Mensagem de retorno com o link do arquivo PDF
         $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);
 }
コード例 #4
0
 /**
  * Acao Salvar DMS
  *
  * @return boolean
  */
 public function emissaoManualSaidaSalvarAction()
 {
     // Perfil do usuario logado
     $iIdPerfil = $this->oUsuario->getPerfil()->getId();
     // Dados Request
     $aDados = $this->getRequest()->getParams();
     // Prestador eventual
     if ($iIdPerfil == 6) {
         $oForm = new Contribuinte_Form_DmsSaidaEventual();
     } else {
         $oForm = new Contribuinte_Form_DmsSaida();
     }
     // Popula o formulario
     $oForm->populate($aDados);
     // Valida o formulario
     if ($oForm->isValid($aDados)) {
         // Verifica se ja existe uma nota com o numero e se tem AIDOF
         self::emissaoManualSaidaVerificarDocumentoAction();
         // Valida se a data da nota esta no mes corrente
         $oValidaDataNota = new DBSeller_Validator_DateCurrentMonth();
         $oValidaDataNota->setMes($aDados['mes_comp']);
         $oValidaDataNota->setAno($aDados['ano_comp']);
         if (!$oValidaDataNota->isValid($aDados['s_nota_data'])) {
             $aErros = $oValidaDataNota->getMessages();
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $aErros[$oValidaDataNota::COMPETENCIA_INVALIDA];
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Aplica filtro de mascaras
         $aDados['s_cpf_cnpj'] = $oForm->s_cpf_cnpj->getValue();
         // SALVAR DADOS DA DMS (INI)
         if (isset($aDados['id_dms']) && !empty($aDados['id_dms'])) {
             $oDms = Contribuinte_Model_Dms::getById($aDados['id_dms']);
         } else {
             $oDms = new Contribuinte_Model_Dms();
             $oDms->setAnoCompetencia($aDados['ano_comp']);
             $oDms->setMesCompetencia($aDados['mes_comp']);
             $oDms->setOperacao(Contribuinte_Model_Dms::SAIDA);
         }
         if (!is_object($oDms)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código DMS não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         $oDms->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         $oDms->setIdUsuario($this->usuarioLogado->getId());
         $oDms->setDataOperacao(new DateTime());
         $oDms->setStatus('aberto');
         // SALVAR DADOS DA DMS (FIM)
         // SALVAR DADOS DA NOTA (INI)
         if (isset($aDados['id']) && !empty($aDados['id'])) {
             $oDmsNota = Contribuinte_Model_DmsNota::getById($aDados['id']);
         } else {
             $oDmsNota = new Contribuinte_Model_DmsNota();
         }
         if (!is_object($oDmsNota)) {
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['error'][] = $this->translate->_('Código Dms Nota não encontrado.');
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         // Dados Nota
         $oDataNota = new DateTime(str_replace('/', '-', $aDados['s_nota_data']));
         $oDataNota->format('Y-m-d');
         $oDmsNota->setNotaNumero($aDados['s_nota']);
         $oDmsNota->setNotaSerie($aDados['s_nota_serie']);
         $oDmsNota->setNotaData($oDataNota);
         $oDmsNota->setSituacaoDocumento($aDados['situacao_documento']);
         $oDmsNota->setNaturezaOperacao($aDados['natureza_operacao']);
         $oDmsNota->setEmiteGuia(TRUE);
         $oDmsNota->setServicoImpostoRetido(FALSE);
         // Verifica o flag para substituição tributária
         if (isset($aDados['s_imposto_retido']) && $aDados['s_imposto_retido'] == 1) {
             $oDmsNota->setServicoImpostoRetido(TRUE);
         }
         // Prestador eventual
         if ($iIdPerfil != 6) {
             $oGrupoDocumento = Contribuinte_Model_Nota::getTipoNota($aDados['tipo_documento']);
             $oDmsNota->setGrupoDocumento($oGrupoDocumento->codigo_grupo);
             $oDmsNota->setTipoDocumento($aDados['tipo_documento']);
             /*
              * Verifica se emite guia:
              *   Se a natureza da operacao for 2 (fora da prefeitura) não emite guia
              *   Se for substituto tributário (retido pelo tomador) não emite guia
              */
             if ($aDados['natureza_operacao'] == 2 || $aDados['s_imposto_retido']) {
                 $oDmsNota->setEmiteGuia(FALSE);
             } else {
                 // Configura o parametro para emitir a guia
                 $oChecaEmissaoGuiaStdClass = new stdClass();
                 $oChecaEmissaoGuiaStdClass->data = $aDados['s_nota_data'];
                 $oChecaEmissaoGuiaStdClass->inscricao_municipal = $this->oContribuinte->getInscricaoMunicipal();
                 $oDmsNota->setEmiteGuia(Contribuinte_Model_EmissorGuia::checarEmissaoGuia($oChecaEmissaoGuiaStdClass));
             }
         } else {
             $oDmsNota->setTipoDocumentoDescricao($aDados['tipo_documento_descricao']);
         }
         // Dados Servico
         $oDataServico = new DateTime(str_replace('/', '-', $aDados['s_data']));
         $oDataServico->format('Y-m-d');
         // Formatando dados
         $sServicoValorPagar = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_bruto']);
         $sServicoValorDeducao = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_deducao']);
         $sServicoValorCondicionado = DBSeller_Helper_Number_Format::toFloat($aDados['s_vl_condicionado']);
         $sServicoDescontoIncondicionado = DBSeller_Helper_Number_Format::toFloat($aDados['s_vl_desc_incondicionado']);
         $sServicoAliquota = DBSeller_Helper_Number_Format::toFloat($aDados['s_aliquota']);
         $sServicoBaseCalculo = DBSeller_Helper_Number_Format::toFloat($aDados['s_base_calculo']);
         $sServicoValorImposto = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_imposto']);
         $sServicoValorLiquido = DBSeller_Helper_Number_Format::toFloat($aDados['s_valor_pagar']);
         // Populando o documento de dms
         $oDmsNota->setNumpre(0);
         $oDmsNota->setServicoData($oDataServico);
         $oDmsNota->setServicoImpostoRetido($aDados['s_imposto_retido']);
         $oDmsNota->setServicoValorPagar($sServicoValorPagar);
         $oDmsNota->setServicoValorDeducao($sServicoValorDeducao);
         $oDmsNota->setServicoValorCondicionado($sServicoValorCondicionado);
         $oDmsNota->setServicoDescontoIncondicionado($sServicoDescontoIncondicionado);
         $oDmsNota->setServicoAliquota($sServicoAliquota);
         $oDmsNota->setServicoBaseCalculo($sServicoBaseCalculo);
         $oDmsNota->setServicoValorImposto($sServicoValorImposto);
         $oDmsNota->setServicoValorLiquido($sServicoValorLiquido);
         $oDmsNota->setServicoCodigoCnae($aDados['s_dados_cod_cnae']);
         $oDmsNota->setServicoCodigoServico($aDados['s_servico_prestado']);
         $oDmsNota->setDescricaoServico($aDados['s_observacao']);
         $oDmsNota->setServicoCodigoObra($aDados['s_codigo_obra']);
         $oDmsNota->setServicoArt($aDados['s_art']);
         $oDmsNota->setServicoInformacoesComplementares($aDados['s_informacoes_complementares']);
         // Dados Prestador eventual
         if ($iIdPerfil == 6) {
             $oDadosPrestador = Contribuinte_Model_ContribuinteEventual::getById($this->oContribuinte->getIdUsuarioContribuinte());
             // Salva o código CNAE do serviço quando for prestador eventual
             $aServicoPrestado = Contribuinte_Model_Servico::getByCodServico($aDados['s_servico_prestado'], FALSE);
             $oServicoPrestado = is_array($aServicoPrestado) ? reset($aServicoPrestado) : $aServicoPrestado;
             $oDmsNota->setServicoCodigoCnae($oServicoPrestado->attr('estrut_cnae'));
         } else {
             $oDadosPrestador = Contribuinte_Model_Contribuinte::getById($this->oContribuinte->getIdUsuarioContribuinte());
         }
         $oDmsNota->setPrestadorCpfCnpj($oDadosPrestador->getCgcCpf());
         $oDmsNota->setPrestadorInscricaoMunicipal($oDadosPrestador->getInscricaoMunicipal());
         $oDmsNota->setPrestadorInscricaoEstadual($oDadosPrestador->getInscricaoEstadual());
         $oDmsNota->setPrestadorRazaoSocial($oDadosPrestador->getNome());
         $oDmsNota->setPrestadorNomeFantasia($oDadosPrestador->getNomeFantasia());
         $oDmsNota->setPrestadorEnderecoRua($oDadosPrestador->getDescricaoLogradouro());
         $oDmsNota->setPrestadorEnderecoNumero($oDadosPrestador->getLogradouroNumero());
         $oDmsNota->setPrestadorEnderecoComplemento($oDadosPrestador->getLogradouroComplemento());
         $oDmsNota->setPrestadorEnderecoBairro($oDadosPrestador->getLogradouroBairro());
         $oDmsNota->setPrestadorEnderecoCodigoMunicipio($oDadosPrestador->getCodigoIbgeMunicipio());
         $oDmsNota->setPrestadorEnderecoEstado($oDadosPrestador->getEstado());
         $oDmsNota->setPrestadorEnderecoCodigoPais($oDadosPrestador->getCodigoPais());
         $oDmsNota->setPrestadorEnderecoCEP($oDadosPrestador->getCep());
         $oDmsNota->setPrestadorTelefone($oDadosPrestador->getTelefone());
         $oDmsNota->setPrestadorEmail($oDadosPrestador->getEmail());
         $oDmsNota->setIdUsuario($this->usuarioLogado->getId());
         $oDmsNota->setIdContribuinte($this->oContribuinte->getIdUsuarioContribuinte());
         // Dados Tomador
         if ($aDados['s_cpf_cnpj'] != NULL) {
             $oDadosTomador = Contribuinte_Model_Empresa::getByCgcCpf($aDados['s_cpf_cnpj']);
         }
         if ($aDados['s_imposto_retido'] && (!isset($oDadosTomador) || !isset($oDadosTomador->eCidade))) {
             $sMensagem = 'Tomador com CPF/CNPJ %s não cadastrado.';
             $sMensagemParametro = '"<b>' . $this->getRequest()->getParam('s_cpf_cnpj') . '</b>"';
             $aRetornoJson['status'] = FALSE;
             $aRetornoJson['fields'] = array_keys($oForm->getMessages());
             $aRetornoJson['error'][] = sprintf($this->translate->_($sMensagem), $sMensagemParametro);
             echo $this->getHelper('json')->sendJson($aRetornoJson);
             exit;
         }
         if (isset($oDadosTomador) && is_object($oDadosTomador) && isset($oDadosTomador->eCidade)) {
             $oDadosTomadorEcidade = $oDadosTomador->eCidade[0];
             $oDmsNota->setTomadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setTomadorNomeFantasia($oDadosTomadorEcidade->attr('nome_fanta'));
             $oDmsNota->setTomadorRazaoSocial($oDadosTomadorEcidade->attr('nome'));
             $oDmsNota->setTomadorInscricaoMunicipal($oDadosTomadorEcidade->attr('inscricao'));
             $oDmsNota->setTomadorInscricaoEstadual($oDadosTomadorEcidade->attr('inscr_est'));
             $oDmsNota->setTomadorEnderecoRua($oDadosTomadorEcidade->attr('endereco'));
             $oDmsNota->setTomadorEnderecoNumero($oDadosTomadorEcidade->attr('numero'));
             $oDmsNota->setTomadorEnderecoComplemento($oDadosTomadorEcidade->attr('complemento'));
             $oDmsNota->setTomadorEnderecoBairro($oDadosTomadorEcidade->attr('bairro'));
             $oDmsNota->setTomadorEnderecoCodigoMunicipio($oDadosTomadorEcidade->attr('cod_ibge'));
             $oDmsNota->setTomadorEnderecoEstado($oDadosTomadorEcidade->attr('uf'));
             $oDmsNota->setTomadorEnderecoCodigoPais($oDadosTomadorEcidade->attr('cod_pais'));
             $oDmsNota->setTomadorEnderecoCEP($oDadosTomadorEcidade->attr('cep'));
             $oDmsNota->setTomadorTelefone($oDadosTomadorEcidade->attr('telefone'));
             $oDmsNota->setTomadorEmail($oDadosTomadorEcidade->attr('email'));
         } else {
             if ($aDados['s_cpf_cnpj'] && (!isset($oDadosTomador) || !isset($oDadosTomador->eNota))) {
                 $oDadosTomadorNFSE = new Contribuinte_Model_EmpresaBase();
                 $aDadosTomador['t_cnpjcpf'] = $aDados['s_cpf_cnpj'];
                 $aDadosTomador['t_razao_social'] = $aDados['s_razao_social'];
                 $oDadosTomadorNFSE->persist($aDadosTomador);
             }
             $oDmsNota->setTomadorInscricaoMunicipal($aDados['s_inscricao_municipal']);
             $oDmsNota->setTomadorCpfCnpj($aDados['s_cpf_cnpj']);
             $oDmsNota->setTomadorRazaoSocial($aDados['s_razao_social']);
         }
         // Vincula o DMS ao documento
         $oDmsNota->setDms($oDms->getEntity());
         // Adiciona o documento ao DMS
         $oDms->addDmsNotas($oDmsNota->getEntity());
         // Salva o DMS e o Documento
         $iCodigoDms = $oDms->persist();
         // Configura a mensagem de sucesso
         $aRetornoJson['status'] = TRUE;
         $aRetornoJson['success'] = $this->translate->_('Documento lançado com sucesso!');
         $aRetornoJson['id_dms'] = $iCodigoDms;
         // Configura a mensagem para edição
         if (isset($aDados['id']) && $aDados['id']) {
             $aRetornoJson['success'] = $this->translate->_('Documento alterado com sucesso!');
             $aRetornoJson['url'] = $this->view->baseUrl("/contribuinte/dms/emissao-manual-saida/id_dms/{$iCodigoDms}");
         }
     } else {
         $aRetornoJson['status'] = FALSE;
         $aRetornoJson['fields'] = array_keys($oForm->getMessages());
         $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.');
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }
コード例 #5
0
 /**
  * Geração do relatório de insconstências nas declarações
  */
 public function inconsistenciasDeclaracoesGerarAction()
 {
     parent::noLayout();
     $aValidacaoFormulario = self::validarFormulario();
     if (is_array($aValidacaoFormulario)) {
         exit($this->getHelper('json')->sendJson($aValidacaoFormulario));
     }
     try {
         // Parâmetros do formulário
         $sCompetencia = $this->getRequest()->getParam('data_competencia_inicial');
         // Separa os meses e anos
         $iCompetenciaMes = intval(substr($sCompetencia, 0, 2));
         $iCompetenciaAno = intval(substr($sCompetencia, -4));
         $sNomeArquivo = 'relatorio_inconsistencias_declaracoes_' . date('YmdHis') . '.pdf';
         $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('P');
         $oPdf->SetFillColor(220, 220, 220);
         $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}");
         $oPdf->setLinhaFiltro('Relatório de Inconsistências nas Declarações');
         $oPdf->setLinhaFiltro('');
         $oPdf->setLinhaFiltro("FILTRO: Competência {$sCompetencia}");
         $oPdf->carregaDados();
         $oEntityManager = Zend_Registry::get('em');
         $oConexao = $oEntityManager->getConnection();
         try {
             $sSql = self::getSqlRelatorio();
             $oStatement = $oConexao->prepare($sSql);
             $oStatement->execute(array($iCompetenciaMes, $iCompetenciaAno));
             if ($oStatement->rowCount() < 1) {
                 throw new Exception($this->translate->_('Nenhum registro encontrado.'));
             }
             $aRelatorio = NULL;
             // Monta os dados do relatório com o índice para ordenação
             do {
                 $aRelatorio = $oStatement->fetch();
                 if (empty($aRelatorio)) {
                     continue;
                 }
                 // Dados do Prestador
                 $sPrestadorCnpjCpf = $aRelatorio['prestador_cnpjcpf'];
                 $sPrestadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sPrestadorCnpjCpf);
                 $sPrestadorRazaoSocial = $aRelatorio['prestador_razao_social'];
                 $sPrestadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sPrestadorRazaoSocial);
                 $sPrestadorMunicipioUf = $aRelatorio['prestador_endereco_municipio'];
                 $sPrestadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sPrestadorMunicipioUf);
                 $sPrestadorMunicipioUf = "{$sPrestadorMunicipioUf}/{$aRelatorio['prestador_endereco_uf']}";
                 $sPrestadorTelefone = $aRelatorio['prestador_contato_telefone'];
                 $sPrestadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sPrestadorTelefone);
                 $sPrestadorDocumentoNumero = $aRelatorio['prestador_documento_numero'];
                 $sPrestadorDocumentoTipo = $aRelatorio['prestador_documento_tipo'];
                 $sPrestadorDocumentoValor = $aRelatorio['prestador_valor_servico'];
                 $sPrestadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoValor, 2);
                 $sPrestadorDocumentoAliquota = $aRelatorio['prestador_valor_aliquota'];
                 $sPrestadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoAliquota, 2);
                 $sPrestadorDocumentoIss = $aRelatorio['prestador_valor_iss'];
                 $sPrestadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sPrestadorDocumentoIss, 2);
                 $sPrestadorDocumentoIssRetido = $aRelatorio['prestador_iss_retido'] ? 'Sim' : 'Não';
                 // Dados Tomador
                 $sTomadorCnpjCpf = $aRelatorio['tomador_cnpjcpf'];
                 $sTomadorCnpjCpf = DBSeller_Helper_Number_Format::maskCPF_CNPJ($sTomadorCnpjCpf);
                 $sTomadorRazaoSocial = $aRelatorio['tomador_razao_social'];
                 $sTomadorRazaoSocial = DBSeller_Helper_String_Format::wordsCap($sTomadorRazaoSocial);
                 $sTomadorMunicipioUf = $aRelatorio['tomador_endereco_municipio'];
                 $sTomadorMunicipioUf = DBSeller_Helper_String_Format::wordsCap($sTomadorMunicipioUf);
                 $sTomadorMunicipioUf = "{$sTomadorMunicipioUf}/{$aRelatorio['tomador_endereco_uf']}";
                 $sTomadorTelefone = $aRelatorio['tomador_contato_telefone'];
                 $sTomadorTelefone = DBSeller_Helper_Number_Format::maskPhoneNumber($sTomadorTelefone);
                 $sTomadorDocumentoNumero = $aRelatorio['tomador_documento_numero'];
                 $sTomadorDocumentoTipo = $aRelatorio['tomador_documento_tipo'];
                 $sTomadorDocumentoValor = $aRelatorio['tomador_valor_servico'];
                 $sTomadorDocumentoValor = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoValor, 2);
                 $sTomadorDocumentoAliquota = $aRelatorio['tomador_valor_aliquota'];
                 $sTomadorDocumentoAliquota = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoAliquota, 2);
                 $sTomadorDocumentoIss = $aRelatorio['tomador_valor_iss'];
                 $sTomadorDocumentoIss = DBSeller_Helper_Number_Format::toMoney($sTomadorDocumentoIss, 2);
                 $sTomadorDocumentoIssRetido = $aRelatorio['tomador_iss_retido'] ? 'Sim' : 'Não';
                 // Pega a descrição do documento tomado, pois NFSE não tem tipo definido
                 $sPrestadorDocumentoTipo = $sPrestadorDocumentoTipo ?: $sTomadorDocumentoTipo;
                 // Descrição do tipo de documento
                 $oPrestadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sPrestadorDocumentoTipo);
                 $sPrestadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oPrestadorDocumentoTipo->descricao);
                 $oTomadorDocumentoTipo = Contribuinte_Model_Nota::getTipoNota($sTomadorDocumentoTipo);
                 $sTomadorDocumentoTipo = DBSeller_Helper_String_Format::wordsCap($oTomadorDocumentoTipo->descricao);
                 // Indice para evitar a repetição do cabeçalho por prestador+tomador
                 $sIndiceRelatorio = "{$aRelatorio['prestador_cnpjcpf']}_{$aRelatorio['tomador_cnpjcpf']}";
                 // Dados do relatório
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_cnpjcpf'] = utf8_decode($sPrestadorCnpjCpf);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_razao_social'] = utf8_decode($sPrestadorRazaoSocial);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_municipio_uf'] = utf8_decode($sPrestadorMunicipioUf);
                 $aDadosRelatorio[$sIndiceRelatorio]['prestador_telefone'] = utf8_decode($sPrestadorTelefone);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_cnpjcpf'] = utf8_decode($sTomadorCnpjCpf);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_razao_social'] = utf8_decode($sTomadorRazaoSocial);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_municipio_uf'] = utf8_decode($sTomadorMunicipioUf);
                 $aDadosRelatorio[$sIndiceRelatorio]['tomador_telefone'] = utf8_decode($sTomadorTelefone);
                 $aDadosRelatorio[$sIndiceRelatorio]['documentos'][] = array('prestador_doc_numero' => utf8_decode($sPrestadorDocumentoNumero), 'prestador_doc_tipo' => utf8_decode($sPrestadorDocumentoTipo), 'prestador_doc_valor_servico' => utf8_decode($sPrestadorDocumentoValor), 'prestador_doc_valor_aliquota' => utf8_decode($sPrestadorDocumentoAliquota), 'prestador_doc_valor_iss' => utf8_decode($sPrestadorDocumentoIss), 'prestador_doc_iss_retido' => utf8_decode($sPrestadorDocumentoIssRetido), 'tomador_doc_numero' => utf8_decode($sTomadorDocumentoNumero), 'tomador_doc_tipo' => utf8_decode($sTomadorDocumentoTipo), 'tomador_doc_valor_servico' => utf8_decode($sTomadorDocumentoValor), 'tomador_doc_valor_aliquota' => utf8_decode($sTomadorDocumentoAliquota), 'tomador_doc_valor_iss' => utf8_decode($sTomadorDocumentoIss), 'tomador_doc_iss_retido' => utf8_decode($sTomadorDocumentoIssRetido));
             } while ($aRelatorio);
             // Ordena os dados do relatorio
             if (isset($aDadosRelatorio) && is_array($aDadosRelatorio)) {
                 $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, 'prestador_cnpjcpf');
             } else {
                 throw new Exception($this->translate->_('Erro ao gerar o relatório.'));
             }
             $iMeiaPaginaX = $oPdf->w / 2 - $oPdf->lMargin;
             // Percorre os dados do relatório
             foreach ($aDadosRelatorio as $aRelatorioOrdenado) {
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell($iMeiaPaginaX, 5, 'PRESTADOR');
                 $oPdf->Cell($iMeiaPaginaX, 5, 'TOMADOR');
                 $oPdf->Ln();
                 $oPdf->Rect($oPdf->GetX(), $oPdf->GetY(), $iMeiaPaginaX, 15);
                 $oPdf->Rect($iMeiaPaginaX + $oPdf->lMargin, $oPdf->GetY(), $iMeiaPaginaX, 15);
                 $oPdf->Ln(2);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, 'CPNJ/CPF:');
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_cnpjcpf']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, 'CPNJ/CPF:');
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_cnpjcpf']);
                 $oPdf->Ln();
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Razão Social'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_razao_social']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Razão Social'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_razao_social']);
                 $oPdf->Ln();
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['prestador_municipio_uf']);
                 $oPdf->SetFont('Arial', 'B', 8);
                 $oPdf->Cell(20, 4, utf8_decode('Município/UF:'));
                 $oPdf->SetFont('Arial', '', 8);
                 $oPdf->Cell($iMeiaPaginaX - 20, 4, $aRelatorioOrdenado['tomador_municipio_uf']);
                 $oPdf->Ln(5);
                 if (count($aRelatorioOrdenado['documentos']) > 0) {
                     $aLarguraColuna = array(28, 15, 64, 26, 19, 27, 11);
                     $oPdf->SetFont('Arial', 'B', 8);
                     $oPdf->Cell($aLarguraColuna[0], 5, utf8_decode('Nº do Documento'), 1, 0, 'C', 1);
                     $oPdf->Cell($aLarguraColuna[1], 5, utf8_decode('Origem'), 1, 0, 'L', 1);
                     $oPdf->Cell($aLarguraColuna[2], 5, utf8_decode('Tipo de Documento'), 1, 0, 'L', 1);
                     $oPdf->Cell($aLarguraColuna[3], 5, utf8_decode('Valor Serviço (R$)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[4], 5, utf8_decode('Alíquota (%)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[5], 5, utf8_decode('Valor Imposto (R$)'), 1, 0, 'R', 1);
                     $oPdf->Cell($aLarguraColuna[6], 5, utf8_decode('Subst.'), 1, 0, 'L', 1);
                     $oPdf->Ln(5);
                     $iFundo = 0;
                     // Alterador do fundo da linha (Zebra)
                     // Percorre os documentos do relatório
                     foreach ($aRelatorioOrdenado['documentos'] as $aDocumento) {
                         $lFundoLinha = $iFundo++ % 2 == 0 ? 0 : 1;
                         $oPdf->SetFont('Arial', '', 8);
                         $oPdf->MultiCell($aLarguraColuna[0], 10, $aDocumento['prestador_doc_numero'], 1, 'C', $lFundoLinha);
                         $oPdf->SetY($oPdf->getY() - 10);
                         $oPdf->SetX($oPdf->getX() + $aLarguraColuna[0]);
                         $oPdf->Cell($aLarguraColuna[1], 5, 'Prestador', 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['prestador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['prestador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['prestador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['prestador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['prestador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Ln(5);
                         $oPdf->Cell($aLarguraColuna[0], 5, '');
                         $oPdf->Cell($aLarguraColuna[1], 5, 'Tomador', 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[2], 5, $aDocumento['tomador_doc_tipo'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[3], 5, $aDocumento['tomador_doc_valor_servico'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[4], 5, $aDocumento['tomador_doc_valor_aliquota'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[5], 5, $aDocumento['tomador_doc_valor_iss'], 1, 0, 'R', $lFundoLinha);
                         $oPdf->Cell($aLarguraColuna[6], 5, $aDocumento['tomador_doc_iss_retido'], 1, 0, 'L', $lFundoLinha);
                         $oPdf->Ln(5);
                     }
                     $oPdf->Ln();
                 }
             }
         } catch (Exception $oErro) {
             throw new Exception($oErro->getMessage());
         }
         $oPdf->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'][] = $oErro->getMessage();
     }
     echo $this->getHelper('json')->sendJson($aRetornoJson);
 }