/** * 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); }
/** * 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); }
/** * 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); }
/** * 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); }
/** * 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); }