/** * Define CNPJ * @param string $sCnpj */ public function setCNPJ($sCnpj) { $this->cnpj = DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($sCnpj); }
/** * 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; }
/** * Método para confirmação do usuário eventual [json] * * @throws Exception * @return void */ public function confirmarAction() { $oFiltro = new Zend_Filter_Digits(); $aDados = $this->getRequest()->getParams(); $sCpfCnpj = DBSeller_Helper_Number_Format::unmaskCPF_CNPJ($aDados['cnpjcpf']); // Popula o formulario $oForm = new Default_Form_LiberacaoCadastro(); $oForm->populate($aDados); // Valida o formulario if ($oForm->isValid($aDados)) { if ($aDados['hash'] == NULL || $sCpfCnpj == NULL) { throw new Exception($this->translate->_('Campo(s) obrigatório(s) não informado(s).')); } $oDoctrine = Zend_Registry::get('em'); $oDoctrine->getConnection()->beginTransaction(); try { $oCadastroPessoa = Contribuinte_Model_CadastroPessoa::getByAttribute('hash', $aDados['hash']); if ($oCadastroPessoa == NULL) { $sMensagemErro = 'Dados informados não encontrados. Favor entrar em contato com o suporte da prefeitura.'; throw new Exception($this->translate->_($sMensagemErro)); } $iTipoLiberacaoUsuarioBloqueado = Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_BLOQUEADO; if ($oCadastroPessoa->getTipoLiberacao() == $iTipoLiberacaoUsuarioBloqueado) { $sMensagemErro = 'Cadastro foi recusado. Favor entrar em contato com o setor de fiscalização.'; throw new Exception($this->translate->_($sMensagemErro)); } if ($sCpfCnpj != $oCadastroPessoa->getCpfcnpj()) { throw new Exception($this->translate->_('CNPJ/CPF informado não é o mesmo informado no cadastro.')); } $oUsuarioCadastrado = Administrativo_Model_Usuario::getByAttribute('email', $oCadastroPessoa->getEmail()); if ($oUsuarioCadastrado instanceof Administrativo_Model_Usuario) { $sLink = '<a href="' . $this->view->serverUrl('/auth/login/esqueci-minha-senha/') . '">Clique Aqui</a>'; $sMensagemErro = "Já encontramos um cadastro com este email.<br>Caso tenha esquecido sua senha. {$sLink}"; throw new Exception($this->translate->_($sMensagemErro)); } $oCgm = Contribuinte_Model_Cgm::getDadosCgm($sCpfCnpj); if ($oCadastroPessoa->getTipoLiberacao() == Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO && $oCgm == NULL) { $sErro = $this->translate->_('Parametros estão inválidos (CGM não existe), '); $sErro .= $this->translate->_('favor entrar em contato com o setor de fiscalização.'); throw new Exception($sErro); } if ($oCadastroPessoa->getTipoLiberacao() == Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_CGM && $oCgm == NULL) { $oNovoCgm = new Contribuinte_Model_Cgm(); if (strlen($oCadastroPessoa->getCpfCnpj()) >= 14) { $oNovoCgm->setJuridico(TRUE); $oNovoCgm->setCNPJ($oCadastroPessoa->getCpfCnpj()); } else { $oNovoCgm->setJuridico(FALSE); $oNovoCgm->setCPF($oCadastroPessoa->getCpfCnpj()); } $sDescricaoMunicipio = Default_Model_Cadendermunicipio::getById($oCadastroPessoa->getCidade())->getNome(); $oNovoCgm->setNome($oCadastroPessoa->getNome()); $oNovoCgm->setEmail($oCadastroPessoa->getEmail()); $oNovoCgm->setCodigoIbgeCidade($oCadastroPessoa->getCidade()); $oNovoCgm->setDescricaoMunicipio($sDescricaoMunicipio); $oNovoCgm->setEstado($oCadastroPessoa->getEstado()); $oNovoCgm->setTelefone($oFiltro->filter($oCadastroPessoa->getTelefone())); $oNovoCgm->setCep($oFiltro->filter($oCadastroPessoa->getCep())); $oNovoCgm->setEnderecoEcidade(FALSE); if ($oCadastroPessoa->getCodBairro()) { $oNovoCgm->setEnderecoEcidade(TRUE); } $oNovoCgm->setCodigoBairro($oCadastroPessoa->getCodBairro()); $oNovoCgm->setCodigoLogradouro($oCadastroPessoa->getCodEndereco()); $oNovoCgm->setDescricaoBairro($oCadastroPessoa->getBairro()); $oNovoCgm->setDescricaoLogradouro($oCadastroPessoa->getEndereco()); $oNovoCgm->setNumeroLogradouro($oCadastroPessoa->getNumero()); $oNovoCgm->setComplemento($oCadastroPessoa->getComplemento()); $oCodigoCgm = $oNovoCgm->persist(); $iCodigoCgm = $oCodigoCgm->codigo_cgm; } else { $iCodigoCgm = $oCgm->getCodigoCgm(); } $aArraTipoLiberacao = array(Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO_CGM, Contribuinte_Model_CadastroPessoa::TIPO_LIBERACAO_USUARIO); if (in_array($oCadastroPessoa->getTipoLiberacao(), $aArraTipoLiberacao)) { // Usuário do sistema $oUsuarioSistema = new Administrativo_Model_Usuario(); $oUsuarioSistema->setNome($oCadastroPessoa->getNome()); $oUsuarioSistema->setTelefone($oFiltro->filter($oCadastroPessoa->getTelefone())); $oUsuarioSistema->setLogin($oCadastroPessoa->getCpfCnpj()); $oUsuarioSistema->setSenha($aDados['senha']); $oUsuarioSistema->setEmail($oCadastroPessoa->getEmail()); $oUsuarioSistema->setHabilitado(TRUE); $oUsuarioSistema->setAdministrativo(FALSE); $oUsuarioSistema->setTipo(Administrativo_Model_TipoUsuario::$CONTRIBUINTE); $oUsuarioSistema->setCgm($iCodigoCgm); $oUsuarioSistema->setCnpj($oCadastroPessoa->getCpfCnpj()); $oUsuarioSistema->setPerfil($oCadastroPessoa->getPerfil()->getEntity()); $oUsuarioSistema->adicionaAcoes($oCadastroPessoa->getPerfil()->getAcoes()); $oUsuarioSistema->persist(); // Criamos o usuario eventual; $oUsuarioEventual = new Administrativo_Model_UsuarioContribuinte(); $oUsuarioEventual->setCGM($iCodigoCgm); $oUsuarioEventual->setHabilitado(TRUE); $oUsuarioEventual->setTipoContribuinte(2); $oUsuarioEventual->setCnpjCpf($oCadastroPessoa->getCpfCnpj()); $oUsuarioEventual->setUsuario($oUsuarioSistema->getEntity()); $oUsuarioEventual->copiaPerfilAcoes($oCadastroPessoa->getPerfil()); $oUsuarioEventual->persist(); // Cadastro de Pessoa $oCadastroPessoa->setHash(NULL); $oCadastroPessoa->persist(); } $oDoctrine->getConnection()->commit(); $aRetornoJson['status'] = TRUE; $aRetornoJson['success'] = $this->translate->_('Cadastro efetuado com sucesso.'); $aRetornoJson['url'] = $this->view->serverUrl(); } catch (Exception $oErro) { $oDoctrine->getConnection()->rollback(); if (isset($oCodigoCgm) && isset($oCodigoCgm->codigo_cgm) && Contribuinte_Model_Cgm::removerCgm($oCodigoCgm->codigo_cgm)) { $oLog = Zend_Registry::get('logger'); $oLog->log("Erro ao excluir o CGM: {$oCodigoCgm->codigo_cgm}", Zend_Log::INFO, ' '); } $aRetornoJson['status'] = FALSE; $aRetornoJson['error'][] = $oErro->getMessage(); } } else { $aRetornoJson['status'] = FALSE; $aRetornoJson['fields'] = array_keys($oForm->getMessages()); $aRetornoJson['error'][] = $this->translate->_('Preencha os dados corretamente.'); } echo $this->getHelper('json')->sendJson($aRetornoJson); }