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