def obter_ultimo(self): try: retorno = Retorno(False, self) # Valida se o cliente já está cadastrado. lista_clientes = Cliente.objects.filter() if lista_clientes: m_cliente = lista_clientes[lista_clientes.count() - 1] if m_cliente: o_cliente_iter = ClienteIter(self) # Obtem o cadastro na Iter. retorno = o_cliente_iter.obter(m_cliente) if not retorno.estado.ok: return retorno m_cliente.converter_de_cliente_iter(retorno.json()) m_cliente.nome_usuario = m_cliente.nome_usuario retorno.dados = self.definir_contexto(m_cliente) return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta dos dados cadastrais falhou.', None, None, e) return retorno
def alterar(self): try: retorno = self.validar_dados_obrigatorios() if not retorno.estado.ok: return retorno # Valida se o veiculo já está cadastrado. retorno = self.obter() if not retorno.estado.ok: return retorno vaiculo_cadastrado = retorno.dados self.cliente = vaiculo_cadastrado.cliente self.dt_hr_inclusao = vaiculo_cadastrado.dt_hr_inclusao self.save() retorno = Retorno(True, self, 'Cadastro atualizado com sucesso.', 200) retorno.dados = self return retorno except Exception as e: retorno = Retorno( False, self, 'A inclusão dos dados cadastrais do veículo falhou.', None, None, e) return retorno
def obter_ultimo(self): try: retorno = Retorno(False) # Valida se o cliente já está cadastrado. lista_clientes = Cliente.objects.filter() if lista_clientes: m_cliente = lista_clientes[lista_clientes.count() - 1] if m_cliente: # Obtem o cadastro na Iter. retorno_cliente_iter = ClienteIter.obter( self, m_cliente.id_cliente_iter) if not retorno_cliente_iter.estado.ok: return retorno_cliente_iter self.converter_de_cliente_iter(retorno_cliente_iter.json()) retorno = Retorno(True) retorno.dados = self return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno( False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def obter(self): try: retorno = self.validar_dados_obrigatorios_chaves() if not retorno.estado.ok: return retorno retorno = Retorno(False, self, 'Veiculo não cadastrado', 'NaoCadastrado', 406) m_veiculo = Veiculo.objects.get(placa=self.placa) if (m_veiculo and m_veiculo.placa): if m_veiculo: retorno = Retorno(True, self) retorno.dados = self.definir_contexto(m_veiculo) return retorno except Exception as e: retorno = Retorno( False, self, 'A consulta aos dados cadastrais do veículo falhou.', None, None, e) return retorno
def listar_especificos(self, chaves_produtos): try: msgNaoEncontrado = 'Cadastro do produto {0} ({1})) não encontrado.' produtos = list() retorno = Retorno(True) retorno.dados = produtos for chave_produto in chaves_produtos: lista_produtos = Produto.objects.filter(codigo = chave_produto['codigo']) if lista_produtos: m_produto = lista_produtos[0] if m_produto: produtos.append(m_produto) else: retorno = Retorno(False, msgNaoEncontrado.format(chave_produto['nome'], chave_produto['codigo']), 'NaoCadastrado', 406) break return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def __tratarRespostaHTTP(self, respostaHTTP): if respostaHTTP.status_code < 200 or respostaHTTP.status_code > 300: retorno = Retorno( False, self, 'Erro de comunicação com a Iter. %s' % respostaHTTP.text, 'ErroComunicacaoIter', respostaHTTP.status_code) else: retorno = Retorno(True, self) dadosRetorno = respostaHTTP.json() if isinstance(dadosRetorno, list): if len(dadosRetorno) > 0: dadosRetorno = dadosRetorno[0] else: dadosRetorno = None if dadosRetorno: retorno.dados = dadosRetorno if 'token' in dadosRetorno: self.credencial_iter.set_token_iter(dadosRetorno['token']) retorno.credencial = self.credencial_iter else: # nao localizado retorno = Retorno(False, self, respostaHTTP.text, '', 404) self.registrar_retorno(retorno, 'Retorno da Iter.') return retorno
def obter_url_contrato_pdf(self, chave_doc_clicksign): if (not self.headers_clicksign): return self.retorno_autenticacao retorno = self.obter(chave_doc_clicksign) if not retorno.estado.ok: return retorno d_dados_doc = retorno.dados tem_url = False if (d_dados_doc): if 'downloads' in d_dados_doc: d_downloads = d_dados_doc['downloads'] if 'signed_file_url' in d_downloads: url = d_downloads['signed_file_url'] if (url and len(str(url).strip()) > 0): tem_url = True if tem_url: retorno = Retorno(True, self) retorno.dados = url else: retorno = Retorno( False, self, 'Não foi possível obter o documento do contrato. Os dados retornaram vazios', '', 404) return retorno
def listar_especificos(self, chaves_produtos): try: msgNaoEncontrado = 'Cadastro do produto {0} ({1})) não encontrado.' produtos = list() retorno = Retorno(True, self) retorno.dados = produtos for chave_produto in chaves_produtos: lista_produtos = Produto.objects.filter(codigo = chave_produto['codigo']) if lista_produtos: m_produto = lista_produtos[0] if m_produto: produtos.append(m_produto) else: retorno = Retorno(False, self, msgNaoEncontrado.format(chave_produto['nome'], chave_produto['codigo']), 'NaoCadastrado', 406) break return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta a produtos Trisafe falhou.', None, None, e) return retorno
def __tratarRespostaHTTP(self, respostaHTTP): if respostaHTTP.status_code < 200 or respostaHTTP.status_code > 300: mensagem_erro = self.__extrairMensagemErro(respostaHTTP.text) retorno = Retorno( False, self, 'Erro de comunicacao com a Clicksign. %s' % mensagem_erro, 'ErroComunicacaoClicksign', respostaHTTP.status_code) else: dadosRetorno = respostaHTTP.text retorno = Retorno(True, self) if (dadosRetorno): dadosRetorno = respostaHTTP.json() if dadosRetorno: retorno.dados = dadosRetorno else: # nao localizado retorno = Retorno(False, respostaHTTP.text, '', 404) self.registrar_retorno(retorno, 'Retorno da Clicksign.') return retorno
def incluir(self): try: retorno = Cliente.validar_dados_obrigatorios(self) if not retorno.estado.ok: return retorno # Valida se o cliente já está cadastrado. retorno = Cliente.obter(self) if retorno.estado.excecao or ( len(retorno.estado.codMensagem) > 0 and retorno.estado.codMensagem != 'NaoCadastrado'): return Retorno( False, self, 'Erro ao validar cadastro. %s' % (retorno.estado.mensagem), retorno.estado.codMensagem, retorno.estado.excecao) o_cliente_iter = ClienteIter(self) # Inclusao na Iter. retorno = o_cliente_iter.obter(self) if not retorno.estado.ok and (retorno.estado.excecao or retorno.estado.httpStatus != 404): return Retorno( False, self, 'Erro ao validar cadastro na Iter. %s' % (retorno.estado.mensagem), retorno.estado.codMensagem, retorno.estado.excecao) # salva na base da Iter. elif retorno.estado.httpStatus == 404: retorno = o_cliente_iter.incluir(self) else: retorno = o_cliente_iter.alterar(self) if not retorno.estado.ok: return Retorno( False, self, 'Erro ao efetivar cadastro na Iter. %s' % (retorno.estado.mensagem), retorno.estado.codMensagem, retorno.estado.excecao) d_cliente_iter = retorno.json() self.id_cliente_iter = d_cliente_iter['dados']['id'] # salva na base da Trisafe self.save() retorno = Retorno(True, self, 'Cadastro realizado com sucesso.', '', 200, None) retorno.dados = self return retorno except Exception as e: retorno = Retorno(False, self, 'A inclusão dos dados cadastrais falhou.', None, None, e) return retorno
def tratarRespostaHTTP(cls, respostaHTTP): if respostaHTTP.status_code < 200 or respostaHTTP.status_code > 300: retorno = Retorno(False, respostaHTTP.text, respostaHTTP.status_code) else: retorno = Retorno(True) retorno.dados = respostaHTTP.json()['user'] return retorno
def contar_por_chave(self): try: retorno = Retorno(True, self) retorno.dados = Veiculo.objects.filter(placa=self.placa).count() return retorno except Exception as e: retorno = Retorno( False, self, 'A consulta aos dados cadastrais do veículo falhou.', None, None, e) return retorno
def alterar(self, chaves_produtos): try: retorno_cliente = self.cliente.obter() if not retorno_cliente.estado.ok: return retorno_cliente m_produto = self.definir_contexto(Produto()) retorno_produtos = m_produto.listar_especificos(chaves_produtos) if not retorno_produtos.estado.ok: return retorno_produtos d_dados_pedido = self.gerar_dados_pedido_transacao_gerencia_net( retorno_produtos.dados) m_transacao_gerencia_net = self.definir_contexto( TransacaoGerenciaNet()) retorno_transacao = m_transacao_gerencia_net.incluir( d_dados_pedido) if not retorno_transacao.estado.ok: return retorno_transacao self.chave_boleto_ext = m_transacao_gerencia_net.id self.cliente = retorno_cliente.dados self.calcular_valor_total(retorno_produtos.dados) self.aceito = False # Atualiza com os produtos self.produtos_contratados.set(retorno_produtos.dados) # Inclui na base self.save() retorno = Retorno( True, self, 'Contrato gerado com sucesso. Selecione "Contratar" para aceitá-lo.' ) retorno.dados = self return retorno except Exception as e: retorno = Retorno(False, self, 'A atualização do contrato falhou.', None, None, e) return retorno
def obter(self): try: retorno = Retorno(False, self, 'Contrato não localizado.') m_contratos = Contrato.objects.filter(id_contrato=self.id_contrato) if m_contratos: m_contrato = m_contratos[0] if m_contrato: retorno = Retorno(True, self) retorno.dados = self.definir_contexto(m_contrato) return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta do contrato falhou.', None, None, e) return retorno
def aceitar(self): try: m_contratos = Contrato.objects.filter(id_contrato=self.id_contrato) if m_contratos: m_contrato = m_contratos[0] if m_contrato: retorno = Retorno(True) retorno.dados = m_contrato return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def incluir_signatario_contrato(self, m_contrato): url = "https://sandbox.clicksign.com/api/v1/lists%s" % ( self.querystring_access_token) d_signatario_clicksign = self.__montar_dic_signatario_contrato( m_contrato) if (not self.headers_clicksign): return self.retorno_autenticacao r = requests.post(url, headers=self.headers_clicksign, data=d_signatario_clicksign) retorno = self.__tratarRespostaHTTP(r) if not retorno.estado.ok: return retorno d_dados_signatario = retorno.dados tem_chave = False chave_signatario = '' if (d_dados_signatario): if 'list' in d_dados_signatario: d_signatario = d_dados_signatario['list'] if 'request_signature_key' in d_signatario: chave_requisicao_assinatura = d_signatario[ 'request_signature_key'] if (chave_requisicao_assinatura and len(str(chave_requisicao_assinatura).strip()) > 0): tem_chave = True if tem_chave: retorno = Retorno(True, self, '', 'SignatarioCadastrado') retorno.dados = chave_requisicao_assinatura else: retorno = Retorno( False, self, 'Não foi possível obter o documento do contrato. Os dados retornaram vazios', '', 404) return retorno
def incluir(self, chaves_produtos): try: retorno_cliente = self.cliente.obter() if not retorno_cliente.estado.ok: return retorno_cliente m_produto = Produto() retorno_produtos = m_produto.listar_especificos(chaves_produtos) if not retorno_produtos.estado.ok: return retorno_produtos d_dados_pedido = self.gerar_dados_pedido_transacao_gerencia_net(retorno_produtos.dados) m_transacao_gerencia_net = TransacaoGerenciaNet() retorno_transacao = m_transacao_gerencia_net.incluir(d_dados_pedido) if not retorno_transacao.estado.ok: return retorno_transacao self.charge_id = m_transacao_gerencia_net.id self.id_contrato = str(self.cliente.id_cliente_iter).rjust(6, '0') + str(self.charge_id).rjust(10, '0') self.cliente = retorno_cliente.dados self.calcular_valor_total(retorno_produtos.dados) # Inclui na base self.save() # Atualiza com os produtos self.produtos_contratados.add(*retorno_produtos.dados) retorno = Retorno(True, 'Seu contrato foi gerado e será efetivado após o pagamento do boleto.') retorno.dados = self return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def alterar(self): try: retorno = Cliente.validar_dados_obrigatorios(self) if not retorno.estado.ok: return retorno # Valida se o cliente já está cadastrado. retorno = Cliente.obter(self) if not retorno.estado.ok: return retorno m_cliente = retorno.dados if (self.credencial_iter.chave_iter_cli and len(self.credencial_iter.chave_iter_cli) > 0): self.id_cliente_iter = m_cliente.id_cliente_iter o_cliente_iter = ClienteIter(self) # Alteracao na Iter. retorno = o_cliente_iter.alterar(self) if not retorno.estado.ok: return retorno m_cliente.converter_de_cliente_iter(retorno.json()) m_cliente.id_signatario_contrato = self.id_signatario_contrato m_cliente.save() retorno = Retorno(True, self, 'Cadastro atualizado com sucesso.', '', 200, None) retorno.dados = m_cliente return retorno except Exception as e: retorno = Retorno(False, self, 'A atualização dos dados cadastrais falhou.', None, None, e) return retorno
def listar(self): try: retorno = Retorno(False, self, 'Nenhum Produto TriSafe está cadastrado.', 'NaoCadastrado', 406) # Lista os produtos cadastrados. lista_produtos = Produto.objects.all() if lista_produtos: lista_produtos_json = [] for m_produto in lista_produtos: lista_produtos_json.append(m_produto) retorno = Retorno(True, self) retorno.dados = lista_produtos return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta a produtos Trisafe falhou.', None, None, e) return retorno
def incluir(self, d_dados_pedido): try: m_gerencia_net = Gerencianet(credentials) d_charge = m_gerencia_net.create_charge(body=d_dados_pedido) self.converter_de_gerencia_net(d_charge) retorno = Retorno(True) retorno.dados = self return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno( False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def listar_por_cliente(self): try: retorno = Retorno(False, self, 'Nenhum veículo cadastrado para rastreamento.', 'NaoCadastrado') m_veiculos = Veiculo.objects.filter(cliente__cpf=self.cliente.cpf) if m_veiculos: retorno = Retorno(True, self) retorno.dados = m_veiculos return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta aos veículos do cliente falhou.', None, None, e) return retorno
def __autenticar_clicksign(self): self.headers_clicksign = None chave_clicksign_cliente = '' chave_clicksign_servidor = config('CHAVE_CLICKSIGN') token_clicksign = '' if (self.credencial_clicksign): chave_clicksign_cliente = self.credencial_clicksign.chave_clicksign_cli token_clicksign = self.credencial_clicksign.token_clicksign # Cria uma credencial completa, com a chave parcial do servidor, # pois o atributo "self.credencial_clicksign" vem soh com a chave parcial do cliente. self.credencial_clicksign = Credencial(chave_clicksign_cliente, chave_clicksign_servidor) self.credencial_clicksign.token_clicksign = token_clicksign retorno = Retorno(True, self) if not self.credencial_clicksign.token_clicksign or len( self.credencial_clicksign.token_clicksign) <= 0: # Le o token criptografado do arquivo e atribui para a credencial. arquivo_iter = open('.env_access_clicksign', 'rb') token_clicksign = arquivo_iter.read() if (token_clicksign): self.credencial_clicksign.token_clicksign = token_clicksign retorno.dados = self.credencial_clicksign token = self.credencial_clicksign.get_token_clicksign() self.headers_clicksign = { 'Accept': 'application/json', 'Content-Type': 'application/json' } self.querystring_access_token = '?access_token=%s' % (token) self.chave_template_contrato = config('CHAVE_TEMPLATE_CONTRATO_CS') self.retorno_autenticacao = retorno
def obter(self): try: retorno = Cliente.validar_dados_obrigatorios_chaves(self) if not retorno.estado.ok: return retorno retorno = Retorno(False, self, 'Cliente não cadastrado', 'NaoCadastrado', 406) # Valida se o cliente já está cadastrado. lista_clientes = Cliente.objects.filter(cpf=self.cpf) if lista_clientes: m_cliente = lista_clientes[0] if m_cliente: self.definir_contexto(m_cliente) retorno = Retorno(True, self) if (self.credencial_iter.chave_iter_cli and len(self.credencial_iter.chave_iter_cli) > 0): o_cliente_iter = ClienteIter(self) # Obtem o cadastro na Iter. retorno = o_cliente_iter.obter(m_cliente) if not retorno.estado.ok: return retorno m_cliente.converter_de_cliente_iter(retorno.json()) m_cliente.nome_usuario = m_cliente.nome_usuario retorno.dados = self.definir_contexto(m_cliente) return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta dos dados cadastrais falhou.', None, None, e) return retorno
def listar(self): try: retorno = Retorno(False, 'Nenhum Produto TriSafe está cadastrado.', 'NaoCadastrado', 406) # Lista os produtos cadastrados. lista_produtos = Produto.objects.all() if lista_produtos: lista_produtos_json = [] for m_produto in lista_produtos: lista_produtos_json.append(m_produto) retorno = Retorno(True) retorno.dados = lista_produtos return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def incluir(self): try: retorno = Cliente.validar_dados_obrigatorios(self) if not retorno.estado.ok: return retorno # Valida se o cliente já está cadastrado. retorno = Cliente.obter(self) if retorno.estado.codMensagem != 'NaoCadastrado': return retorno # Inclusao na Iter. cIter = ClienteIter() retorno = cIter.incluir(self) if not retorno.estado.ok: return retorno d_cliente_iter = retorno.json() self.id_cliente_iter = d_cliente_iter['id'] if not retorno.estado.ok: return retorno self.save() retorno = Retorno(True, 'Cadastro realizado com sucesso.', 200) retorno.dados = self return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno( False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def obter(self): try: retorno = Produto.validar_dados_obrigatorios_chaves(self) if not retorno.estado.ok: return retorno retorno = Retorno(False, self, 'Produto não cadastrado', 'NaoCadastrado', 406) lista_produtos = Produto.objects.filter(nome=self.nome) if lista_produtos: m_produto = lista_produtos[0] if m_produto: retorno = Retorno(True, self) retorno.dados = m_produto return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta a produtos Trisafe falhou.', None, None, e) return retorno
def incluir(self): try: retorno = self.validar_dados_obrigatorios() if not retorno.estado.ok: return retorno # Valida se o veiculo já está cadastrado. retorno = self.contar_por_chave() if not retorno.estado.ok: return retorno if (retorno.dados > 0): return Retorno( False, self, 'Já existe um veículo cadastrado com esta placa.') # Obtem os dados do cliente para associar. retorno_cliente = self.cliente.obter() if not retorno_cliente.estado.ok: return retorno_cliente self.cliente = retorno_cliente.dados self.save() retorno = Retorno(True, self, 'Cadastro realizado com sucesso.', 200) retorno.dados = self return retorno except Exception as e: retorno = Retorno( False, self, 'A inclusão dos dados cadastrais do veículo falhou.', None, None, e) return retorno
def incluir(self): try: retorno = Produto.validar_dados_obrigatorios(self) if not retorno.estado.ok: return retorno # Valida se o produto já está cadastrado. retorno = Produto.obter(self) if retorno.estado.codMensagem != 'NaoCadastrado': return retorno self.save() retorno = Retorno(True, self, 'Cadastro realizado com sucesso.', 200) retorno.dados = self return retorno except Exception as e: retorno = Retorno(False, self, 'A inclusão de produto Trisafe falhou.', None, None, e) return retorno
def obter(self): try: retorno = Produto.validar_dados_obrigatorios_chaves(self) if not retorno.estado.ok: return retorno retorno = Retorno(False, 'Produto não cadastrado', 'NaoCadastrado', 406) lista_produtos = Produto.objects.filter(nome=self.nome) if lista_produtos: m_produto = lista_produtos[0] if m_produto: retorno = Retorno(True) retorno.dados = m_produto return retorno except Exception as e: print(traceback.format_exception(None, e, e.__traceback__), file=sys.stderr, flush=True) retorno = Retorno(False, 'Falha de comunicação. Em breve será normalizado.') return retorno
def obter_por_cliente(self): try: retorno = Retorno(False, self, 'Contrato não localizado.', 'NaoCadastrado') m_contratos = Contrato.objects.filter( cliente__cpf=self.cliente.cpf) if m_contratos: m_contrato = m_contratos[0] if m_contrato: retorno = Retorno(True, self) retorno.dados = self.definir_contexto(m_contrato) self.definir_contexto(m_contrato.cliente) return retorno except Exception as e: retorno = Retorno(False, self, 'A consulta do contrato falhou.', None, None, e) return retorno