/** * Action para montar o formulario de requisica de AIDOF * * @return void */ public function requisicaoAction() { $oBaseUrlHelper = new Zend_View_Helper_BaseUrl(); $oContribuinte = $this->_session->contribuinte; $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal(); $aServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal); // Verifica se a empresa é prestadora de serviços if ($aServicos == NULL || empty($aServicos)) { $this->view->sMensagemBloqueio = $this->translate->_('Empresa não prestadora de serviço.'); return; } // Verifica se a empresa é emissora de NFSe $iTipoEmissaoNota = Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA; if ($oContribuinte->getTipoEmissao($iInscricaoMunicipal) != $iTipoEmissaoNota) { $this->view->sMensagemBloqueio = $this->translate->_('Empresa não emissora de NFS-E.'); return; } $oFormRequisicao = new Contribuinte_Form_RequisicaoRps(); $oFormRequisicao->setAction($oBaseUrlHelper->baseUrl('/contribuinte/rps/gerar-requisicao')); $this->view->oFormRequisicao = $oFormRequisicao; $this->view->aTipoDocumento = Contribuinte_Model_nota::getTiposNota(Contribuinte_Model_Nota::GRUPO_NOTA_RPS); $this->view->aListaRequisicao = Administrativo_Model_RequisicaoAidof::getRequisicoeseAidofs($iInscricaoMunicipal, NULL, Contribuinte_Model_Nota::GRUPO_NOTA_RPS); }
/** * Método abstrato para validar o formulário em ambos os relatórios * * @return array|boolean */ protected function validarFormulario() { $aDados = $this->getRequest()->getPost(); $aRetornoErros = array(); $oForm = new Fiscal_Form_Relatorio6(); $oForm->render(); // Verifica se os parâmetros do formulário são válidos if ($oForm->isValid($aDados)) { // Parâmetros do formulário $sCompetenciaInicial = $oForm->getValue('data_competencia_inicial'); $sCompetenciaFinal = $oForm->getValue('data_competencia_final'); $sPrestadorCnpj = $oForm->getValue('prestador_cnpj'); // Valida se é cadastrado e se é prestador de servico $oPrestador = Contribuinte_Model_Contribuinte::getByCpfCnpj($sPrestadorCnpj); if (!$oPrestador instanceof Contribuinte_Model_Contribuinte) { $sMensagemErro = $this->translate->_('Contribuinte não cadastrado no sistema.'); $aRetornoErros['status'] = FALSE; $aRetornoErros['fields'] = array('prestador_cnpj'); $aRetornoErros['error'][] = $this->translate->_($sMensagemErro); return $aRetornoErros; } else { if (!Contribuinte_Model_Servico::getByIm($oPrestador->getInscricaoMunicipal())) { $sMensagemErro = $this->translate->_('O contribuinte não é prestador de serviços.'); $aRetornoErros['status'] = FALSE; $aRetornoErros['fields'] = array('prestador_cnpj'); $aRetornoErros['error'][] = $this->translate->_($sMensagemErro); return $aRetornoErros; } } // Objeto para validação das competências inicial e final $oValidaCompetencia = new DBSeller_Validator_Competencia(); $oValidaCompetencia->setCompetenciaInicial($sCompetenciaInicial); $oValidaCompetencia->setCompetenciaFinal($sCompetenciaFinal); // Valida a competência inicial e final if (!$oValidaCompetencia->isValid($sCompetenciaInicial)) { $aRetornoErros['status'] = FALSE; $aRetornoErros['fields'] = array('data_competencia_inicial', 'data_competencia_final'); $aMensagensErro = $oValidaCompetencia->getMessages(); $aIndicesErro = array_keys($aMensagensErro); foreach ($aIndicesErro as $sIndiceErro) { if (array_key_exists($sIndiceErro, $aMensagensErro)) { $aRetornoErros['error'][] = $this->translate->_($aMensagensErro[$sIndiceErro]); } } return $aRetornoErros; } return TRUE; } else { $aCamposComErro = array_keys($oForm->getMessages()); $sMensagemErro = $this->translate->_('Preencha os dados corretamente.'); if (count($aCamposComErro) > 1) { $sMensagemErro = $this->translate->_('Preencha os dados corretamente.'); } else { if (in_array('data_competencia_final', $aCamposComErro)) { $sMensagemErro = $this->translate->_('Informe a Competência Final corretamente.'); } else { if (in_array('data_competencia_inicial', $aCamposComErro)) { $sMensagemErro = $this->translate->_('Informe a Competência Inicial corretamente.'); } } } $aRetornoErros['status'] = FALSE; $aRetornoErros['fields'] = array_keys($oForm->getMessages()); $aRetornoErros['error'][] = $this->translate->_($sMensagemErro); } return $aRetornoErros; }
/** * Valida a importação de arquivo do tipo RPS modelo 1 (ABRASF 1.0) */ public function validaArquivoCarregado() { $oSessao = new Zend_Session_Namespace('nfse'); if (empty($this->oDadosPrefeitura)) { $aParametrosPrefeitura = Administrativo_Model_ParametroPrefeitura::getAll(0, 1); if (count($aParametrosPrefeitura) == 0) { throw new Exception('Parâmetros da prefeitura não configurados. Processamento Abortado'); } $this->oDadosPrefeitura = $aParametrosPrefeitura[0]; } if (empty($this->oArquivoXmlRetorno->lote->numero)) { $this->setMensagemErro('E88'); } if (empty($this->oArquivoXmlRetorno->lote->cnpj)) { $this->setMensagemErro('E46'); } $oContribuinte = Contribuinte_Model_Contribuinte::getByCpfCnpj($this->oArquivoXmlRetorno->lote->cnpj); if (empty($oContribuinte)) { $this->setMensagemErro('E45', 'Contribuinte: ' . $this->oArquivoXmlRetorno->lote->cnpj); } else { if ($oContribuinte->getCgcCpf() != $oSessao->contribuinte->getCgcCpf()) { $this->setMensagemErro('E156', '', true); } } if ($this->oArquivoXmlRetorno->lote->quantidade_rps != count($this->oArquivoXmlRetorno->rps)) { $this->setMensagemErro('E69'); } if (strlen($this->oArquivoXmlRetorno->lote->quantidade_rps) > 4) { $this->setMensagemErro('E72'); } $aNumeracaoRPS = array(); foreach ($this->oArquivoXmlRetorno->rps as $oRps) { if ($this->oArquivoXmlRetorno->lote->inscricao_municipal != $oRps->prestador->inscricao_municipal) { $this->setMensagemErro('E70', 'RPS: ' . $oRps->numero); } if (empty($oRps->numero)) { $this->setMensagemErro('E11'); } else { if (is_int($oRps->numero) && strlen($oRps->numero) > 15) { $this->setMensagemErro('E96', 'RPS: ' . $oRps->numero); } if (in_array($oRps->numero, $aNumeracaoRPS)) { $this->setMensagemErro('E71', 'RPS: ' . $oRps->numero); } $aNumeracaoRPS[$oRps->numero] = NULL; } if (strlen($oRps->serie) > 5) { $this->setMensagemErro('E97', 'RPS: ' . $oRps->numero); } if (empty($oRps->tipo)) { $this->setMensagemErro('E12', 'RPS: ' . $oRps->numero); } if (empty($oRps->natureza_operacao)) { $this->setMensagemErro('E3', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->natureza_operacao, array(1, 2, 3, 4, 5, 6))) { $this->setMensagemErro('E144', 'RPS: ' . $oRps->numero); } } if (empty($oRps->optante_simples_nacional)) { $this->setMensagemErro('E8', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->optante_simples_nacional, array(1, 2))) { $this->setMensagemErro('E146', 'RPS: ' . $oRps->numero); } } if (empty($oRps->incentivador_cultural)) { $this->setMensagemErro('E9', 'RPS: ' . $oRps->numero); } else { if (!in_array($oRps->incentivador_cultural, array(1, 2))) { $this->setMensagemErro('E147', 'RPS: ' . $oRps->numero); } } if (empty($oRps->data_emissao)) { $this->setMensagemErro('E14', 'RPS: ' . $oRps->numero); } if (!in_array($oRps->status, array(1, 2))) { $this->setMensagemErro('E68', 'RPS: ' . $oRps->numero); } if ($oRps->data_emissao->format('Ymd') > date('Ymd')) { $this->setMensagemErro('E16', 'RPS: ' . $oRps->numero); } if ($oRps->prestador->cnpj == $oRps->tomador->cpf_cnpj) { $this->setMensagemErro('E52', 'RPS: ' . $oRps->numero); } // validação dos valores se float $oNumeroFloat = new Zend_Validate_Float(); if ($oRps->servico->valores->valor_servicos <= 0) { $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_servicos)) { $this->setMensagemErro('E100', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_servicos <= 0) { $this->setMensagemErro('E18', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_deducoes > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E19', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_deducoes < 0) { $this->setMensagemErro('E20', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_deducoes)) { $this->setMensagemErro('E101', 'RPS: ' . $oRps->numero); } $fTotalDesconto = $oRps->servico->valores->desconto_incondicionado + $oRps->servico->valores->desconto_condicionado; if ($fTotalDesconto > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E21', 'RPS: ' . $oRps->numero); } if ($fTotalDesconto < 0) { $this->setMensagemErro('E22', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($fTotalDesconto)) { $this->setMensagemErro('E102', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_pis < 0) { $this->setMensagemErro('E23', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_pis)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_cofins < 0) { $this->setMensagemErro('E24', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_cofins)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_inss < 0) { $this->setMensagemErro('E25', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_inss)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_ir < 0) { $this->setMensagemErro('E26', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_ir)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->valor_csll < 0) { $this->setMensagemErro('E27', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_csll)) { $this->setMensagemErro('E103', 'RPS: ' . $oRps->numero); } if (!in_array($oRps->servico->valores->iss_retido, array(1, 2))) { $this->setMensagemErro('E36', 'RPS: ' . $oRps->numero); } if ($oRps->servico->valores->iss_retido == 1) { if ($oRps->servico->valores->valor_iss_retido <= 0) { $this->setMensagemErro('E40', 'RPS: ' . $oRps->numero); } if (!$oNumeroFloat->isValid($oRps->servico->valores->valor_iss_retido)) { $this->setMensagemErro('E153', 'RPS: ' . $oRps->numero); } if (strlen(DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($oRps->tomador->cpf_cnpj)) != 14) { $this->setMensagemErro('E39', 'RPS: ' . $oRps->numero . ". Serviços tomados por pessoa Física não pode reter iss"); } } if ($oRps->servico->valores->iss_retido == 1 && $oRps->servico->valores->valor_iss_retido > $oRps->servico->valores->valor_servicos) { $this->setMensagemErro('E99', 'RPS: ' . $oRps->numero); } if (empty($oRps->servico->discriminacao)) { $this->setMensagemErro('E41', 'RPS: ' . $oRps->numero); } if (!empty($oContribuinte)) { $iInscricaoMunicipal = $oContribuinte->getInscricaoMunicipal(); $aServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal); // Valida se o prestador de serviço pode atuar no município if (empty($aServicos)) { $this->setMensagemErro('E17', 'RPS: ' . $oRps->numero); } // Valida se o prestador do serviço é emissor de NFSE $iTipoEmissaoNfse = Contribuinte_Model_ContribuinteAbstract::TIPO_EMISSAO_NOTA; if ($oContribuinte->getTipoEmissao($iInscricaoMunicipal) != $iTipoEmissaoNfse) { $this->setMensagemErro('E138', 'RPS: ' . $oRps->numero); } // Valida a competência $oCompetencia = new Contribuinte_Model_Competencia($oRps->data_emissao->format('Y'), $oRps->data_emissao->format('m'), $oContribuinte); if (empty($oCompetencia) || $oCompetencia->existeGuiaEmitida()) { $this->setMensagemErro(null, "A competência da RPS \"{$oRps->numero}\" é inválida, já existe Guia Emitida."); } } // Valida se a data é maior que a atual if ($oRps->data_emissao->format('Y-m') > date('Y-m')) { $this->setMensagemErro('E2', 'RPS: ' . $oRps->numero); } // Valida se já existe na base de dados $oTipoRps = Administrativo_Model_ParametroPrefeituraRps::getByTipoNfse($oRps->tipo); $iTipoRps = 0; // Valida o tipo de RPS if (is_object($oTipoRps)) { $iTipoRps = $oTipoRps->getEntity()->getTipoEcidade($oRps->tipo); } if ($iTipoRps == 0) { $this->setMensagemErro('E13', 'RPS: ' . $oRps->numero); } // Verifica se a numeração do AIDOF é válida $oAidof = new Administrativo_Model_Aidof(); $lVerificaNumeracaoRps = $oAidof->verificarNumeracaoValidaParaEmissaoDocumento($oSessao->contribuinte->getInscricaoMunicipal(), $oRps->numero, $iTipoRps); if ($lVerificaNumeracaoRps === FALSE) { $this->setMensagemErro('E90', 'RPS: ' . $oRps->numero); } $lExisteRps = Contribuinte_Model_Nota::existeRps($oSessao->contribuinte, $oRps->numero, $oRps->tipo); if ($lExisteRps) { $this->setMensagemErro('E10', 'RPS: ' . $oRps->numero); } if (empty($oRps->servico->atividade)) { $this->setMensagemErro('E31', 'RPS: ' . $oRps->numero); } else { if (strlen($oRps->servico->atividade) > 5) { $this->setMensagemErro('E104', 'RPS: ' . $oRps->numero); } // Valida Grupo de Serviço/Atividade if (!empty($iInscricaoMunicipal)) { $oServico = Contribuinte_Model_Servico::getServicoPorAtividade($iInscricaoMunicipal, $oRps->servico->atividade); if (!$oServico) { $this->setMensagemErro('E30', 'RPS: ' . $oRps->numero); } } } if (empty($oRps->servico->codigo_cnae)) { $this->setMensagemErro('E33', 'RPS: ' . $oRps->numero); } else { if (strlen($oRps->servico->codigo_cnae) > 7) { $this->setMensagemErro('E105', 'RPS: ' . $oRps->numero); } } if (!empty($oRps->servico->ibge_municipio)) { if (strlen($oRps->servico->ibge_municipio) > 7) { $this->setMensagemErro('E108', 'RPS: ' . $oRps->numero); } // 2 = fora do municipio if ($oRps->natureza_operacao == 2 && $oRps->servico->ibge_municipio == $this->oDadosPrefeitura->getIbge()) { $this->setMensagemErro('E110', 'RPS: ' . $oRps->numero); } } // Validar IBGE Prefeitura if ($oRps->natureza_operacao == 1 && $this->oDadosPrefeitura->getIbge() !== $oRps->servico->ibge_municipio) { $this->setMensagemErro('E42', 'RPS: ' . $oRps->numero); } if (strlen($oRps->construcao_civil->art) > 15) { $this->setMensagemErro('E130', 'RPS: ' . $oRps->numero); } if (strlen($oRps->construcao_civil->codigo_obra) > 15) { $this->setMensagemErro('E129', 'Rps: ' . $oRps->numero); } if (count($this->aMensagensErroValidacao) >= 50) { $this->setMensagemErro('E49', '', TRUE); } } // Se existirem erros executa uma exceção com a lista de erros if (count($this->aMensagensErroValidacao) > 0) { return FALSE; } return TRUE; }
/** * Popula o combo de serviços * * @param integer|null $iCodigoServico código do serviço * @return $this */ public function setServico($iCodigoServico = NULL) { $aServicos = Contribuinte_Model_Servico::getByIm($this->oContribuinte->getInscricaoMunicipal()); $aDados = array('' => '-- Escolha o Serviço --'); if (is_array($aServicos)) { foreach ($aServicos as $oServico) { $sAtividade = strtolower($oServico->attr('atividade')); $aDados[$oServico->attr('cod_atividade')] = DBSeller_Helper_String_Format::wordsCap($sAtividade); } } $this->getElement('s_servico_prestado')->addMultiOptions($aDados)->setValue($iCodigoServico); return $this; }
/** * Metodo para verificar os parametros da empresa * testes: * 1 - empresa emissora de dms * 2 - empresa prestadora de serviços * * @param integer * @return boolean */ private function verificaParametrosEmpresa($iInscricaoMunicipal) { $oServicos = Contribuinte_Model_Servico::getByIm($iInscricaoMunicipal, FALSE); $oRetorno = new stdClass(); $oRetorno->lStatus = TRUE; if ($this->view->contribuinte && ($oServicos == NULL || empty($oServicos))) { $oRetorno->sMensagem = 'Empresa não prestadora de serviços.'; $oRetorno->lStatus = TRUE; } if (!$this->view->contribuinte) { $oRetorno->sMensagem = 'Empresa não emissora de DMS.'; $oRetorno->lStatus = TRUE; } return $oRetorno; }
/** * Busca os dados do servico [Json] */ public function getServicoAction() { $iIdServico = $this->getParam('servico'); try { $aServicos = Contribuinte_Model_Servico::getByIm($this->_session->contribuinte->getInscricaoMunicipal(), FALSE); $aDados = array(); foreach ($aServicos as $oServico) { if ($oServico->attr('cod_atividade') == $iIdServico) { $aDados = array('item_servico' => $oServico->attr('desc_item_servico'), 'cod_item_servico' => $oServico->attr('cod_item_servico'), 'estrut_cnae' => $oServico->attr('estrut_cnae'), 'desc_cnae' => $oServico->attr('desc_cnae'), 'deducao' => $oServico->attr('deducao'), 'aliq' => $oServico->attr('aliq'), 'tributacao_municipio' => $oServico->attr('tributacao_municipio')); break; } } echo $this->getHelper('json')->sendJson($aDados); } catch (Exception $oError) { $aRetorno['erro'] = TRUE; if ($oError->getCode() == Global_Lib_Model_WebService::CODIGO_ERRO_CONSULTA_WEBSERVICE) { $aRetorno['mensagem'] = "E-cidade temporariamente insdisponível. Emissão bloqueada!"; $aRetorno['servico'] = $iIdServico; } else { $aRetorno['mensagem'] = $oError->getMessage(); } echo $this->getHelper('json')->sendJson($aRetorno); } }