/** * (non-PHPdoc) * @see Zend_Form::init() */ public function init() { $oBaseUrlHelper = new Zend_View_Helper_BaseUrl(); $this->setName('form-exportacao-arquivo'); $this->setMethod(Zend_form::METHOD_POST); $this->setAction($oBaseUrlHelper->baseUrl('/contribuinte/exportacao-arquivo/rps-consultar/')); $aMeses = DBSeller_Helper_Date_Date::getMesesArray(); $aAnos = array(date('Y') - 0 => date('Y') - 0, date('Y') - 1 => date('Y') - 1, date('Y') - 2 => date('Y') - 2, date('Y') - 3 => date('Y') - 3, date('Y') - 4 => date('Y') - 4); $oElm = $this->createElement('select', 'mes_competencia', array('divspan' => '4', 'multiOptions' => $aMeses)); $oElm->setLabel('Mês:'); $oElm->setAttrib('class', 'span2'); $oElm->setValue(date('m')); $this->addElement($oElm); $oElm = $this->createElement('select', 'ano_competencia', array('divspan' => '6', 'multiOptions' => $aAnos)); $oElm->setLabel('Ano:'); $oElm->setAttrib('class', 'span2'); $this->addElement($oElm); $oElm = $this->createElement('text', 'numero_rps', array('divspan' => '10')); $oElm->setLabel('Número da NFS-e:'); $oElm->setAttrib('class', 'span2'); $this->addElement($oElm); $this->addElement('button', 'btn_consultar', array('divspan' => 4, 'label' => 'Consultar', 'class' => 'input-medium btn', 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_PRIMARY)); $this->addElement('button', 'btn_exportar', array('divspan' => 6, 'label' => 'Exportar', 'class' => 'input-medium btn', 'disabled' => TRUE, 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_SUCCESS)); $this->addDisplayGroup(array('mes_competencia', 'ano_competencia', 'numero_rps', 'btn_consultar', 'btn_exportar'), 'dados_consulta', array('legend' => 'Parâmetros')); return $this; }
/** * Verifica se deve emitir a guia considerando: * 1 - as características do contribuinte no alvará * 2 - tributação dentro ou fora do municipio * * * @param stdClass $oParametro * $oParametro->inscricao_municipal * $oParametro->data * @throws Exception * @return boolean * * @tutorial: Abaixo constam as regras para emissão de guia * * Regime(4)/Exigibilidade(5) |Exigível(23)|Não Incide(24)|Isento(25)|Export.(26)|Imune(27)|Susp.Judic(28)|Susp.Adm(29) * ------------------------------------------------------------------------------------------------------------------ * (--)Optante Simples |Não |Não |Não |Não |Não |Não |Não * (14)Normal |Sim |Não |Não |sim |Não |Não |Não * (15)Cooperativa |Sim |Não |Não |sim |Não |Não |Não * (16)EPP |Sim |Não |Não |sim |Não |Não |Não * (17)Estimativa |Sim |Não |Não |sim |Não |Não |Não * (18)Fixado |Não |Não |Não |Não |Não |Não |Não * (19)ME municipal |Sim |Não |Não |sim |Não |Não |Não * (20)MEI |Não |Não |Não |Não |Não |Não |Não * (21)ME |Sim |Não |Não |sim |Não |Não |Não * (22)Sociedade profissional |Não |Não |Não |Não |Não |Não |Não */ public static function checarEmissaoGuia($oParametro = NULL) { $oValidaData = new Zend_Validate_Date(); if (!is_object($oParametro)) { throw new Exception('O parâmetro informado deve ser um objeto.'); } else { if (!isset($oParametro->data) || !isset($oParametro->inscricao_municipal)) { throw new Exception('Verifique os parâmetros informados.'); } else { if (!$oValidaData->isValid($oParametro->data)) { throw new Exception('Parâmetro "data" inválido.'); } } } // Busca os dados do contribuinte da sessão $oContribuinte = Contribuinte_Model_Contribuinte::getByInscricaoMunicipal($oParametro->inscricao_municipal); if (!is_object($oContribuinte)) { throw new Exception('Nenhum contribuinte foi encontrado.'); } // Optante pelo simples no período pesquisado, não emite guia $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($oParametro->data)); if ($oContribuinte->isOptanteSimples($oDataSimples)) { return FALSE; } // Verifica se deve emitir a guia conforme as regras de emissão $iRegimeTributario = $oContribuinte->getRegimeTributario(); $iExigibilidade = $oContribuinte->getExigibilidade(); switch ("{$iRegimeTributario}-{$iExigibilidade}") { case '14-23': case '14-26': case '15-23': case '15-26': case '16-23': case '16-26': case '17-23': case '17-26': case '19-23': case '19-26': case '21-23': case '21-26': return TRUE; break; default: return FALSE; } return FALSE; }
/** * Método construtor * * (non-PHPdoc) * @see Zend_Form::init() */ public function init() { $oBaseUrlHelper = new Zend_View_Helper_BaseUrl(); $this->setName('form-guias-geracao-utomatica'); $this->setMethod(Zend_form::METHOD_POST); $this->setAction($oBaseUrlHelper->baseUrl('/fiscal/guias/consultar/')); $aMeses = DBSeller_Helper_Date_Date::getMesesArray(); $oElm = $this->createElement('select', 'mes_competencia', array('divspan' => '3', 'multiOptions' => $aMeses)); $oElm->setLabel('Mês:'); $oElm->setAttrib('class', 'span2'); $oElm->setValue(date('m')); $this->addElement($oElm); $aAnos = array(date('Y') - 0 => date('Y') - 0, date('Y') - 1 => date('Y') - 1, date('Y') - 2 => date('Y') - 2, date('Y') - 3 => date('Y') - 3, date('Y') - 4 => date('Y') - 4); $oElm = $this->createElement('select', 'ano_competencia', array('divspan' => '3', 'multiOptions' => $aAnos)); $oElm->setLabel('Ano:'); $oElm->setAttrib('class', 'span2'); $this->addElement($oElm); $this->addElement('button', 'btn_consultar', array('divspan' => 3, 'label' => 'Consultar', 'class' => 'span2', 'buttonType' => Twitter_Bootstrap_Form_Element_Button::BUTTON_PRIMARY)); $this->addElement('button', 'btn_gerar', array('divspan' => 2, 'label' => 'Gerar', 'class' => 'span2', 'disabled' => TRUE, 'buttonType' => Twitter_Bootstrap_Form_Element_Submit::BUTTON_SUCCESS)); $this->addDisplayGroup(array('mes_competencia', 'ano_competencia', 'btn_consultar', 'btn_gerar'), 'group_guias_geracao', array('legend' => 'Consultar por Data')); }
/** * Emite e gera as guias conforme a receita e aliquota informadas */ public function emitirGuiaAction() { parent::noTemplate(); $aParametros = $this->getAllParams(); try { $iIdImportacao = $aParametros['id']; $fAliquota = $aParametros['aliq_issqn'] ? $aParametros['aliq_issqn'] : NULL; $oContribuinte = $this->_session->contribuinte; $aReceitaDesif = Contribuinte_Model_ImportacaoDesif::getTotalReceitaGuiaDesif($oContribuinte, $iIdImportacao, $fAliquota); $sTotalReceita = DBSeller_Helper_Number_Format::toMoney($aReceitaDesif->total_receita, 2, 'R$ '); $sTotalIss = DBSeller_Helper_Number_Format::toMoney($aReceitaDesif->total_iss, 2, 'R$ '); $oFormEmitirGuia = new Contribuinte_Form_GuiaCompetencia(); $oFormEmitirGuia->setName('form-emitir-guia'); $oFormEmitirGuia->setAction('/contribuinte/guia-desif/emitir-guia'); $oFormEmitirGuia->getElement('ano')->setValue($aReceitaDesif->ano_competencia); $oFormEmitirGuia->getElement('mes')->setValue($aReceitaDesif->mes_competencia); $oFormEmitirGuia->getElement('aliq_issqn')->setValue($fAliquota); $oFormEmitirGuia->getElement('total_servico')->setValue($sTotalReceita); $oFormEmitirGuia->getElement('total_iss')->setValue($sTotalIss); $oFormEmitirGuia->getElement('data_guia')->setValue(date('d/m/Y')); $this->view->form = $oFormEmitirGuia; // Verifica se for enviado os dados via $_POST if ($this->getRequest()->isPost()) { // Formata a data de pagamento da guia $sDataInvertida = DBSeller_Helper_Date_Date::invertDate($this->getRequest()->getParam('data_guia')); $oDataPagamento = new DateTime($sDataInvertida); // Gera a guia e emite o PDF da geração $oGuia = Contribuinte_Model_GuiaEcidade::gerarGuiaDesif($oContribuinte, $aParametros['ano'], $aParametros['mes'], $oDataPagamento, $fAliquota, true); $this->view->arquivo = $oGuia->arquivo_guia; } } catch (Exception $oErro) { $this->view->mensagem_erro = $oErro->getMessage(); } }
/** * Geração do relatório de empresas omissas */ public function empresasOmissasGerarAction() { parent::noLayout(); $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio2::TIPO6); if (is_array($aValidacaoFormulario)) { exit($this->getHelper('json')->sendJson($aValidacaoFormulario)); } try { // Parâmetros do formulário $sOrdenacaoCampo = $this->getRequest()->getParam('ordenacao'); $sOrdenacaoDirecao = $this->getRequest()->getParam('ordem'); $sCompetenciaInicial = $this->getRequest()->getParam('data_competencia_inicial'); $sCompetenciaFinal = $this->getRequest()->getParam('data_competencia_final'); // Separa os meses e anos $iCompetenciaInicialMes = intval(substr($sCompetenciaInicial, 0, 2)); $iCompetenciaFinalMes = intval(substr($sCompetenciaFinal, 0, 2)); $iCompetenciaInicialAno = intval(substr($sCompetenciaInicial, -4)); $iCompetenciaFinalAno = intval(substr($sCompetenciaFinal, -4)); $sNomeArquivo = 'relatorio_empresas_omissas_' . date('YmdHis') . '.pdf'; $aDescricaoFiltros = array('inscricao_municipal' => 'Inscrição Municipal', 'nome' => 'Nome', 'asc' => 'Crescente', 'desc' => 'Decrescente'); $oPdf = new Fiscal_Model_Relatoriopdfmodelo1('L'); $oPdf->Open(APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}"); $oPdf->setLinhaFiltro('Relatório de Empresas Omissas'); $oPdf->setLinhaFiltro(''); $oPdf->setLinhaFiltro("FILTRO: Competência de {$sCompetenciaInicial} até {$sCompetenciaFinal}"); $oPdf->setLinhaFiltro("ORDEM: {$aDescricaoFiltros[$sOrdenacaoCampo]} ({$aDescricaoFiltros[$sOrdenacaoDirecao]})"); $oPdf->carregaDados(); $aUsuarioContribuintes = Administrativo_Model_UsuarioContribuinte::getPrestadores(); $aInscricoesMunicipaisContribuintes = array(); // Verifica se existem usuários contribuinte cadastrados if (count($aUsuarioContribuintes) == 0) { throw new Exception($this->translate->_('Não existem contribuintes cadastrados no sistema.')); } $aDeclaracaoIsentoValidos = array(); for ($iAno = 0; $iAno <= $iCompetenciaFinalAno - $iCompetenciaInicialAno; $iAno++) { $iAnoLoop = intval($iCompetenciaInicialAno) + $iAno; // Varre os meses for ($iMesLoop = 1; $iMesLoop <= 12; $iMesLoop++) { // Ignora os meses anteriores e seguintes aos meses inicial e final if ($iAnoLoop == $iCompetenciaInicialAno && $iMesLoop < $iCompetenciaInicialMes || $iAnoLoop == $iCompetenciaFinalAno && $iMesLoop > $iCompetenciaFinalMes) { continue; } // Varre a lista de usuários contribuintes, verificando quem tem movimentações foreach ($aUsuarioContribuintes as $oContribuinte) { // Verifica se tem movimentação $sSql = "SELECT 1 AS existe_movimento\n FROM view_nota_mais_dms\n WHERE (dms_operacao = 's' OR dms_operacao IS NULL) AND\n prestador_cnpjcpf = '{$oContribuinte->getCnpjCpf()}' AND\n documento_competencia_ano = {$iAnoLoop} AND\n documento_competencia_mes = {$iMesLoop}"; $oStatement = $this->oConexao->prepare($sSql); $oStatement->execute(); // Adiciona na lista somente os contribuinte sem movimentação no sistema if ($oStatement->rowCount() == 0) { // Informações complementares do contribuinte $oDadosContribuinteComplemento = Administrativo_Model_UsuarioContribuinteComplemento::getById($oContribuinte->getCnpjCpf()); // Variaveis do contribuinte $iInscricaoMunicipal = $oContribuinte->getIm(); $sRazaoSocial = $oDadosContribuinteComplemento->getRazaoSocial(); $sEndereco = $oDadosContribuinteComplemento->getEnderecoDescricao(); if (strlen(trim($iInscricaoMunicipal)) > 0) { // Dados dos contribuintes $aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop][$iInscricaoMunicipal] = array('inscricao_municipal' => $iInscricaoMunicipal, 'nome' => DBSeller_Helper_String_Format::wordsCap($sRazaoSocial), 'endereco' => DBSeller_Helper_String_Format::wordsCap($sEndereco), 'telefone' => $oDadosContribuinteComplemento->getContatoTelefone(), 'competencia_ano' => $iAnoLoop, 'competencia_mes' => $iMesLoop); } // Lista para consulta no webservice $aInscricoesMunicipaisContribuintes[$iInscricaoMunicipal] = $iInscricaoMunicipal; } } } } // Mosta a lista de inscrições do contribuintes para verificação no webservice (separados por vírgula) $sInscricoesMunicipaisContribuintes = implode("','", $aInscricoesMunicipaisContribuintes); // Retorna apenas os contribuintes com declaração de insento $aDeclaracaoIsento = Contribuinte_Model_Competencia::getDeclaracaoSemMovimentoPorContribuintes($sInscricoesMunicipaisContribuintes); // Limpa as inscricoes com declaração de isenção foreach ($aDeclaracaoIsento as $oDeclaracaoIsento) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes][$oDeclaracaoIsento->inscricao_municipal]); // Limpa dados do mes, caso não possua registros if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]) == 0) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano][$oDeclaracaoIsento->mes]); } // Limpa dados do ano, caso não possua registros if (isset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) && count($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]) == 0) { unset($aDeclaracaoIsentoValidos[$oDeclaracaoIsento->ano]); } } if (count($aDeclaracaoIsentoValidos) == 0) { $sMensagemErro = 'Nenhuma informação foi encontrada neste período para geração do relatório.'; throw new Exception($this->translate->_($sMensagemErro)); } // Varre os anos for ($iAno = 0; $iAno <= $iCompetenciaFinalAno - $iCompetenciaInicialAno; $iAno++) { $iAnoLoop = intval($iCompetenciaInicialAno) + $iAno; // Varre os meses for ($iMesLoop = 1; $iMesLoop <= 12; $iMesLoop++) { // Ignora os meses anteriores e seguintes aos meses inicial e final if ($iAnoLoop == $iCompetenciaInicialAno && $iMesLoop < $iCompetenciaInicialMes || $iAnoLoop == $iCompetenciaFinalAno && $iMesLoop > $iCompetenciaFinalMes) { continue; } // Ordena o array pelo índice informado if (isset($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop])) { // Formata para mês por extenso $sMesExtenso = DBSeller_Helper_Date_Date::mesExtenso($iMesLoop); $oPdf->SetFont('Arial', 'B', 8); $oPdf->Cell(20, 5, utf8_decode('Competência:')); $oPdf->SetFont('Arial', NULL, 8); $oPdf->Cell(0, 5, utf8_decode("{$sMesExtenso}/{$iAnoLoop}")); $oPdf->Ln(5); $oPdf->SetFont('Arial', 'B', 8); $oPdf->Cell(28, 5, utf8_decode('Inscrição Municipal'), 1); $oPdf->Cell(100, 5, utf8_decode('Nome'), 1); $oPdf->Cell(117, 5, utf8_decode('Endereço'), 1); $oPdf->Cell(32, 5, utf8_decode('Telefone'), 1); $oPdf->Ln(5); $aDeclaracaoIsentoOrdenado = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDeclaracaoIsentoValidos[$iAnoLoop][$iMesLoop], $sOrdenacaoCampo, $sOrdenacaoDirecao, TRUE); $oPdf->SetFont('Arial', NULL, 8); foreach ($aDeclaracaoIsentoOrdenado as $oDeclaracaoIsentoOrdenado) { $oPdf->Cell(28, 5, utf8_decode($oDeclaracaoIsentoOrdenado['inscricao_municipal']), 1); $oPdf->Cell(100, 5, utf8_decode($oDeclaracaoIsentoOrdenado['nome']), 1); $oPdf->Cell(117, 5, utf8_decode($oDeclaracaoIsentoOrdenado['endereco']), 1); $oPdf->Cell(32, 5, utf8_decode($oDeclaracaoIsentoOrdenado['telefone']), 1); $oPdf->Ln(5); } $oPdf->Ln(5); $oPdf->proximaPagina(10); } } } $oPdf->Output(); $aRetornoJson['status'] = TRUE; $aRetornoJson['url'] = $this->view->baseUrl("tmp/{$sNomeArquivo}"); $aRetornoJson['success'] = $this->translate->_('Arquivo importado com sucesso.'); } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $oErro->getMessage(); } echo $this->getHelper('json')->sendJson($aRetornoJson); }
/** * Reemite a guia de pagamento das Guias de DMS */ public function reemitirDmsGuiaAction() { parent::noTemplate(); $iIdGuia = $this->getRequest()->getParam('guia', NULL); $sDataGuia = $this->getRequest()->getParam('data_guia', NULL); $oGuia = Contribuinte_Model_Guia::getById($iIdGuia); $oDadosGuia = $oGuia->getEntity(); if ($this->getRequest()->isPost()) { $oValidaDatas = new Zend_Validate_Date(); $sDataValidacao = DBSeller_Helper_Date_Date::invertDate($sDataGuia, ''); if ($sDataValidacao < date('Ymd')) { $this->view->message = $this->translate->_('Informe uma data posterior a data atual.'); } else { if (!$oValidaDatas->isValid($sDataGuia)) { $this->view->message = $this->translate->_('Informe uma data para pagamento válida.'); } else { $aNovaGuia = $oGuia->reemitir($sDataGuia); $this->view->arquivo = $aNovaGuia['arquivo']; $this->view->guia = $aNovaGuia['objeto']; } } } $oFormCompetencia = new Contribuinte_Form_GuiaCompetencia(); $oFormCompetencia->setAction('/contribuinte/guia/reemitir-dms-guia'); $oFormCompetencia->removeElement('total_iss'); $oFormCompetencia->removeElement('total_servico'); $oFormCompetencia->getElement('data_guia')->setValue(date('d/m/Y')); $oFormCompetencia->preencheDms($oDadosGuia); $this->view->form = $oFormCompetencia; }
/** * Geração do relatório de valores por atividade / serviço */ public function valoresAtividadeServicoGerarAction() { parent::noLayout(); try { $aValidacaoFormulario = self::validarFormulario(Fiscal_Form_Relatorio1::TIPO5); if (is_array($aValidacaoFormulario)) { exit($this->getHelper('json')->sendJson($aValidacaoFormulario)); } $sNomeArquivo = 'evolucao_arrecadacao_ ' . date('YmdHis') . '.pdf'; $sCaminhoArquivo = APPLICATION_PATH . "/../public/tmp/{$sNomeArquivo}"; $aParametros = $this->getRequest()->getParams(); $aFiltros = array('atividade_servico' => 'Atividade / Serviço'); $sOrdenacao = 'Crescente'; if (strtoupper($aParametros['ordem']) == 'DESC') { $sOrdenacao = 'Decrescente'; } $sFiltro = "Competência {$aParametros['data_competencia_inicial']} até {$aParametros['data_competencia_final']}"; $sOrdem = $aFiltros[$aParametros['ordenacao']] . " ({$sOrdenacao})"; $oFpdf = new Fiscal_Model_Relatoriopdfmodelo1('L'); $oFpdf->setLinhaFiltro('Relatório Evolução de Arrecadação por Atividade/Serviço'); $oFpdf->setLinhaFiltro(''); $oFpdf->setLinhaFiltro("FILTRO : {$sFiltro}"); $oFpdf->setLinhaFiltro("ORDEM : {$sOrdem}"); $oFpdf->Open($sCaminhoArquivo); $oFpdf->carregadados(); $aDataCompetenciaInicial = explode('/', $aParametros['data_competencia_inicial']); $aDataCompetenciaFinal = explode('/', $aParametros['data_competencia_final']); $sSql = "SELECT SUM(servico_valor_iss) AS valor_imposto,\n servico_codigo_cnae,\n documento_competencia_ano,\n documento_competencia_mes\n FROM view_nota_mais_dms\n WHERE documento_emite_guia = TRUE\n AND (dms_operacao = 's' OR dms_operacao IS NULL)\n AND documento_situacao NOT IN ('c', 'e')\n AND documento_status_cancelamento = FALSE\n AND (documento_competencia_ano || LPAD(CAST(documento_competencia_mes AS VARCHAR), 2, '0'))\n BETWEEN ? AND ?\n GROUP BY servico_codigo_cnae,\n documento_competencia_ano,\n documento_competencia_mes "; $aDadosRelatorio = array(); $oEntityManager = Zend_Registry::get('em'); $oConexao = $oEntityManager->getConnection(); $oStatement = $oConexao->prepare($sSql); $oStatement->execute(array("{$aDataCompetenciaInicial[1]}{$aDataCompetenciaInicial[0]}", "{$aDataCompetenciaFinal[1]}{$aDataCompetenciaFinal[0]}")); if ($oStatement->rowCount() < 1) { throw new Exception('Nenhum Registro encontrado.'); } while ($aNota = $oStatement->fetch()) { $oServicos = Contribuinte_Model_Servico::getServicoPorCnae($aNota['servico_codigo_cnae']); if (!$oServicos) { throw new Exception("Erro: {$aNota['servico_codigo_cnae']}"); } $sIndice = md5($aNota['servico_codigo_cnae'] . $oServicos->attr('atividade')); $aDadosRelatorio[$sIndice]['estrutural'] = $oServicos->attr('estrutural'); $aDadosRelatorio[$sIndice]['descricao'] = DBSeller_Helper_String_Format::wordsCap($oServicos->attr('atividade')); if (!isset($aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']])) { $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] = 0; } $aDadosRelatorio[$sIndice]['totalAnoMes'][$aNota['documento_competencia_ano']][$aNota['documento_competencia_mes']] += $aNota['valor_imposto']; if (!isset($aDadosRelatorio[$sIndice]['totalAcumulado'])) { $aDadosRelatorio[$sIndice]['totalAcumulado'] = 0; } $aDadosRelatorio[$sIndice]['totalAcumulado'] += $aNota['valor_imposto']; } switch ($aParametros['ordenacao']) { case 'atividade_servico': $sOrdenacao = 'estrutural'; break; case 'valor_total': $sOrdenacao = 'totalAcumulado'; break; } $iComprimentoPagina = $oFpdf->w - $oFpdf->rMargin - $oFpdf->lMargin; $aDadosRelatorio = DBSeller_Helper_Array_Abstract::ordenarPorIndice($aDadosRelatorio, $sOrdenacao, $aParametros['ordem'], TRUE); // Percorre os registros do relatório foreach ($aDadosRelatorio as $aRegistro) { $sAtividadeServico = "Atividade / Serviço: {$aRegistro['estrutural']} - {$aRegistro['descricao']}"; $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell($iComprimentoPagina, 5, utf8_decode($sAtividadeServico), 0, 1, 'J'); $oFpdf->SetFont('Arial', '', 8); $aMeses = DBSeller_Helper_Date_Date::getMesesArray(); $iTamanhoMes = $iComprimentoPagina / count($aMeses); // Ordena a lista pelo índice ksort($aRegistro['totalAnoMes']); // Percorre a lista pelo total por ano/mes foreach ($aRegistro['totalAnoMes'] as $iAno => $aAnos) { // Percorre os meses para gerar o cabeçalho de meses foreach ($aMeses as $iMes => $sDescricaoMes) { $oFpdf->SetFont('Arial', 'B', 8); $oFpdf->Cell($iTamanhoMes, 5, utf8_decode(substr($aMeses[$iMes], 0, 3)) . '/' . $iAno . '(R$)', 1, 0, 'C'); } $oFpdf->ln(); // Percorre os meses para gerar os dados por mês foreach ($aMeses as $iMes => $sMes) { $oFpdf->SetFont('Arial', '', 8); if (!empty($aAnos[$iMes])) { $oFpdf->Cell($iTamanhoMes, 5, DBSeller_Helper_Number_Format::toMoney($aAnos[$iMes], 2), 1, 0, 'R'); } else { $oFpdf->Cell($iTamanhoMes, 5, 'S / M', 1, 0, 'C'); } } $oFpdf->proximaPagina(1); if (!$oFpdf->lQuebrouPagina) { $oFpdf->Ln(6); } } if (!$oFpdf->lQuebrouPagina) { $oFpdf->Ln(2); } } $oFpdf->Output(); $aRetornoJson['status'] = TRUE; $aRetornoJson['url'] = $this->view->baseUrl('tmp/' . $sNomeArquivo); $aRetornoJson['success'] = $this->translate->_('Relatório gerado com sucesso.'); } catch (Exception $oErro) { $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $this->translate->_($oErro->getMessage()); } echo $this->getHelper('json')->sendJson($aRetornoJson); }
/** * Verifica se o contribuinte é optante pelo simples na data especificada * Utiliza o mesmo método utilizado no DMS * * @see Contribuinte_Lib_Controller_AbstractController::verificarContribuinteOptanteSimplesAction() * @throws Exception */ public function verificarContribuinteOptanteSimplesAction() { try { $sData = $this->getRequest()->getParam('data'); if (!$sData) { throw new Exception('Informe a data para verificar.'); } $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($sData, '-')); if (!$oDataSimples instanceof DateTime) { throw new Exception('Data inválida'); } $oContribuinte = $this->_session->contribuinte; $aRetorno['status'] = $oContribuinte->isOptanteSimples($oDataSimples) ? TRUE : FALSE; echo $this->getHelper('json')->sendJson($aRetorno); } catch (Exception $e) { $aRetorno['erro'] = TRUE; if ($e->getCode() == Global_Lib_Model_WebService::CODIGO_ERRO_CONSULTA_WEBSERVICE) { $aRetorno['mensagem'] = "E-cidade temporariamente insdisponível. Emissão bloqueada!"; } else { $aRetorno['mensagem'] = $e->getMessage(); } echo $this->getHelper('json')->sendJson($aRetorno); } }
/** * Define os dados do contribuinte * * @param Contribuinte_Model_Contribuinte $oContribuinte * @param $iMesCompetencia * @param $iAnoCompetencia * @param bool $lLivroFiscal */ public function setDadosContribuinte(Contribuinte_Model_Contribuinte $oContribuinte, $iMesCompetencia, $iAnoCompetencia, $lLivroFiscal = TRUE) { if (!$lLivroFiscal) { $this->AddPage(); } // Mês e ano da competnência por extenso $sCompetencia = DBSeller_Helper_Date_Date::mesExtenso($iMesCompetencia) . "/{$iAnoCompetencia}"; $sCompetencia = utf8_decode($sCompetencia); // Mostra os campos referentes à guia somente para contribuintes NFSe if ($oContribuinte->getTipoEmissao() == Contribuinte_Model_Contribuinte::TIPO_EMISSAO_NOTA || !$lLivroFiscal) { // Situação da Guia $sDataFechamentoGuia = '-'; $sSituacaoGuia = 'Em aberto'; $oGuia = new Contribuinte_Model_Guia(); $aGuia = $oGuia->getByCompetenciaAndContribuinte($iAnoCompetencia, $iMesCompetencia, $oContribuinte, Contribuinte_Model_Guia::$PRESTADOR); if (count($aGuia) > 0) { $oGuia = $aGuia[0]->getEntity(); $sDataFechamentoGuia = $oGuia->getDataFechamento()->format('d/m/Y'); $sSituacaoGuia = Contribuinte_Model_Guia::$SITUACAO[$oGuia->getSituacao()]; } $aLarguraCelulas = array(57, 55, 55, 55, 55, 45, 50); $this->SetFont('Arial', 'B', 8); if ($lLivroFiscal) { // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1); } else { $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1); } $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1); $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1); $this->Cell($aLarguraCelulas[3], 5, utf8_decode('Situação:'), 1); $this->Cell($aLarguraCelulas[4], 5, utf8_decode('Encerramento:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1); } else { $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1); } $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()); $this->Cell($aLarguraCelulas[1], 5, $sCpfCnpjContribuinte, 1); $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1); $this->Cell($aLarguraCelulas[3], 5, $sSituacaoGuia, 1); $this->Cell($aLarguraCelulas[4], 5, $sDataFechamentoGuia, 1); $this->Ln(6); } else { // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CGM / Inscrição Municipal:'), 1); } else { $this->Cell($aLarguraCelulas[1], 5, utf8_decode('Inscrição Municipal:'), 1); } $this->Cell($aLarguraCelulas[6], 5, utf8_decode('CPF / CNPJ:'), 1); $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Inicial:'), 1); $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Competencia Final:'), 1); $this->Cell($aLarguraCelulas[5], 5, utf8_decode('Situação:'), 1); $this->Cell(0, 5, utf8_decode('Encerramento:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getCgm(), 1); } else { $this->Cell($aLarguraCelulas[1], 5, $oContribuinte->getInscricaoMunicipal(), 1); } $sCpfCnpjContribuinte = DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()); $sCompetenciaInicial = $iMesCompetencia['inicial'] . '/' . $iAnoCompetencia['inicial']; $sCompetenciaFinal = $iMesCompetencia['final'] . '/' . $iAnoCompetencia['final']; $this->Cell($aLarguraCelulas[6], 5, $sCpfCnpjContribuinte, 1); $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaInicial, 1); $this->Cell($aLarguraCelulas[5], 5, $sCompetenciaFinal, 1); $this->Cell($aLarguraCelulas[5], 5, $sSituacaoGuia, 1); $this->Cell(0, 5, $sDataFechamentoGuia, 1); $this->Ln(6); } } else { $aLarguraCelulas = array(93, 92, 92); $this->SetFont('Arial', 'B', 8); // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[0], 5, utf8_decode('CGM / Inscrição Municipal:'), 1); } else { $this->Cell($aLarguraCelulas[0], 5, utf8_decode('Inscrição Municipal:'), 1); } $this->Cell($aLarguraCelulas[1], 5, utf8_decode('CPF / CNPJ:'), 1); $this->Cell($aLarguraCelulas[2], 5, utf8_decode('Mês Referência:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); // Mostra CGM ou Inscrição Municipal if ($oContribuinte->getCgm()) { $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getCgm(), 1); } else { $this->Cell($aLarguraCelulas[0], 5, $oContribuinte->getInscricaoMunicipal(), 1); } $this->Cell($aLarguraCelulas[1], 5, DBSeller_Helper_Number_Format::maskCPF_CNPJ($oContribuinte->getCgcCpf()), 1); $this->Cell($aLarguraCelulas[2], 5, $sCompetencia, 1); $this->Ln(6); } $this->SetFont('Arial', 'B', 8); $this->Cell(0, 5, utf8_decode('Razão Social:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); $this->Cell(0, 5, utf8_decode($oContribuinte->getNome()), 1); $this->Ln(6); $this->SetFont('Arial', 'B', 8); $this->Cell(242, 5, utf8_decode('Endereço:'), 1); $this->Cell(35, 5, utf8_decode('Número:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); $this->Cell(242, 5, utf8_decode($oContribuinte->getDescricaoLogradouro()), 1); $this->Cell(35, 5, utf8_decode($oContribuinte->getLogradouroNumero()), 1); $this->Ln(6); $this->SetFont('Arial', 'B', 8); $this->Cell(90, 5, utf8_decode('Complemento:'), 1); $this->Cell(80, 5, utf8_decode('Bairro:'), 1); $this->Cell(72, 5, utf8_decode('Cidade:'), 1); $this->Cell(35, 5, utf8_decode('Estado:'), 1); $this->Ln(); $this->SetFont('Arial', NULL, 8); $this->Cell(90, 5, utf8_decode($oContribuinte->getLogradouroComplemento()), 1); $this->Cell(80, 5, utf8_decode($oContribuinte->getLogradouroBairro()), 1); $this->Cell(72, 5, utf8_decode($oContribuinte->getDescricaoMunicipio()), 1); $this->Cell(35, 5, utf8_decode($oContribuinte->getEstado()), 1); $this->Ln(6); $oDataAtual = new DateTime(); $sEnderecoIp = $_SERVER['REMOTE_ADDR']; $this->SetFont('Arial', 'B', 8); $this->Cell(139, 5, utf8_decode("Endereço IP: {$sEnderecoIp}"), 1); $this->Cell(138, 5, utf8_decode("Data da impressão: {$oDataAtual->format('d/m/Y H:i:s')}"), 1); $this->Ln(7); }
/** * Verifica se a competencia é corrente * * @return boolean */ public function isCorrente() { $oDataAtual = new DateTime(); $oDataCompetencia = new DateTime(DBSeller_Helper_Date_Date::invertDate('01/' . $this->getCompetencia(), '/')); $sCompetenciaAtual = $oDataAtual->format('Ym'); $sCompetencia = $oDataCompetencia->format('Ym'); return $sCompetencia === $sCompetenciaAtual; }
/** * Prepara os dados da guia a ser gerada * * @param Administrativo_Model_UsuarioContribuinte $oContribuinte * @param int $iAnoCompetencia * @param int $iMesCompetencia * @param array $aNotas * @param int $iIdGuia * @return object $oGuiaGerar */ public static function montaDadosGuia(Administrativo_Model_UsuarioContribuinte $oContribuinte, $iAnoCompetencia, $iMesCompetencia, $aNotas, $sDataPagamento, $iIdGuia) { $sData = DBSeller_Helper_Date_Date::invertDate($sDataPagamento); $oData = new DateTime($sData); $oGuiaGerar = new StdClass(); $oGuiaGerar->inscricao_municipal = $oContribuinte->getIm(); $oGuiaGerar->cpf_cnpj = $oContribuinte->getCnpjCpf(); $oGuiaGerar->numcgm = $oContribuinte->getCgm(); $oGuiaGerar->mes_competencia = $iMesCompetencia; $oGuiaGerar->ano_competencia = $iAnoCompetencia; $oGuiaGerar->codigo_guia = $iIdGuia; $aListaNotas = array(); foreach ($aNotas as $oDocumentoNota) { $oNota = new stdClass(); $oNota->numero_nota_fiscal = $oDocumentoNota->getNotaNumero(); $oNota->codigo_documento = $oDocumentoNota->getId(); $oNota->data_nota_fiscal = $oDocumentoNota->getNotaData()->format('Y-m-d'); $oNota->serie_nota_fiscal = $oDocumentoNota->getNotaSerie(); $oNota->valor_base_calculo = $oDocumentoNota->getServicoBaseCalculo(); $oNota->valor_deducao = $oDocumentoNota->getServicoValorDeducao(); $oNota->valor_imposto_retido = $oDocumentoNota->getServicoValorImposto(); $oNota->valor_servico_prestado = $oDocumentoNota->getServicoValorPagar(); $oNota->aliquota = $oDocumentoNota->getServicoAliquota(); $oNota->data_pagamento = $oData->format('Y-m-d'); $oNota->retido = $oDocumentoNota->getServicoImpostoRetido(); $oNota->situacao = $oDocumentoNota->getSituacaoDocumento() == 'N' ? '0' : '1'; $oNota->status = 1; $oNota->servico_prestado = urlencode($oDocumentoNota->getDescricaoServico()); // Serviços prestados if ($oDocumentoNota->getOperacao() == self::SERVICO_PRESTADO) { $oNota->cnpj_prestador = $oDocumentoNota->getPrestadorCpfCnpj(); $oNota->inscricao_prestador = $oDocumentoNota->getPrestadorInscricaoMunicipal(); $oNota->nome = urlencode($oDocumentoNota->getPrestadorRazaoSocial()); $oNota->operacao = 2; } else { $oNota->cnpj_prestador = $oDocumentoNota->getTomadorCpfCnpj(); $oNota->inscricao_prestador = $oDocumentoNota->getTomadorInscricaoMunicipal(); $oNota->nome = $oDocumentoNota->getTomadorRazaoSocial(); $oNota->operacao = 1; } // Limita para o tamanho do campo no ecidade if (strlen($oNota->nome) > 60) { $oNota->nome = substr($oNota->nome, 57) . '...'; } // Adiciona a nota na lista $aListaNotas[] = $oNota; } $oGuiaGerar->notas = $aListaNotas; return $oGuiaGerar; }
/** * Verifica se o contribuinte é optante pelo simples na data especificada * Utiliza o mesmo método utilizado no DMS * * @see Contribuinte_Lib_Controller_AbstractController::verificarContribuinteOptanteSimplesAction() * @throws Exception */ public function verificarContribuinteOptanteSimplesAction() { try { $sData = $this->getRequest()->getParam('data'); if (!$sData) { throw new Exception('Informe a data para verificar.'); } $oDataSimples = new DateTime(DBSeller_Helper_Date_Date::invertDate($sData, '-')); if (!$oDataSimples instanceof DateTime) { throw new Exception('Data inválida'); } $oContribuinte = $this->_session->contribuinte; $oParametros = Contribuinte_Model_ParametroContribuinte::getById($oContribuinte->getIdUsuarioContribuinte()); $aRetorno['optante_simples_nacional'] = $oContribuinte->isOptanteSimples($oDataSimples) ? TRUE : FALSE; $aRetorno['optante_simples_categoria'] = $oContribuinte->getOptanteSimplesCategoria(); if ($oParametros instanceof Contribuinte_Model_ParametroContribuinte) { $fAliquota = $oParametros->getEntity()->getValorIssFixo(); $aRetorno['valor_iss_fixo'] = DBSeller_Helper_Number_Format::toMoney($fAliquota); } echo $this->getHelper('json')->sendJson($aRetorno); } catch (Exception $oError) { $aRetorno['erro'] = TRUE; $aRetorno['mensagem'] = $oError->getMessage(); echo $this->getHelper('json')->sendJson($aRetorno); } }
/** * Remove os Meses que existe movimentacao ou foi declarado sem movimento * * @return $this */ public function removerMesesComMovimentacaoDeNotas() { $oSession = new Zend_Session_Namespace('nfse'); $iMesCompetencia = (int) date('m') - 1; $iAnoCompetencia = (int) ((int) date('m') == 1 ? date('Y') - 1 : date('Y')); $oContribuinte = $oSession->contribuinte; $oCompetencia = new Contribuinte_Model_Competencia($iAnoCompetencia, $iMesCompetencia, $oContribuinte); $aMeses = DBSeller_Helper_Date_Date::getMesesAnterioresArray($iMesCompetencia); $aDeclaracaoSemMovimento = $oCompetencia->getDeclaracaoSemMovimento(); // Remove os meses que já tem declaracao sem movimento if (count($aDeclaracaoSemMovimento) > 0) { foreach ($aDeclaracaoSemMovimento as $oDeclaracaoSemMovimento) { unset($aMeses[$oDeclaracaoSemMovimento->mes]); } } // Verifica se existem notas lancadas no NFSE if (count($aMeses) > 0) { foreach ($aMeses as $iMes => $sMes) { $aResultadoDms = Contribuinte_Model_Dms::getDadosPorCompetencia($oContribuinte->getContribuintes(), $iAnoCompetencia, $iMes, Contribuinte_Model_Dms::SAIDA); // Verifica se tem NFSe lancadas na competência $oParametros = new stdClass(); $oParametros->iMes = $iMes; $oParametros->iAno = $iAnoCompetencia; $aResultadoNota = Contribuinte_Model_Nota::getByContribuinteAndCompetencia($oContribuinte->getContribuintes(), $oParametros); // Limpa os meses if (count($aResultadoDms) > 0 || count($aResultadoNota) > 0) { unset($aMeses[$iMes]); } } } // Desabilita geração quando não possuir meses válidos if (count($aMeses) == 0) { $this->getElement('mes_competencia')->setAttrib('disabled', TRUE); $this->getElement('btn_competencia')->setAttrib('disabled', TRUE); } $this->getElement('mes_competencia')->setMultiOptions($aMeses); return $this; }