def RecibosCliente(): def sortData(val): data = val[4][6:] + val[4][3:5] + val[4][0:2] return int(data) def sortNome(val): return val[8] def sortArea(val): return val[9] def sortValor(val): valor = val[3].replace("R$", "").replace(",", "") return int(valor) id_cliente = session['id'] recibos = controler.select("*", "atendimentos", "id_cliente=" + id_cliente) recibosNew = [] for recibo in recibos: recibo = list(recibo) recibo.append( controler.select("nome", "usuarios", "id=" + str(recibo[1]))[0][0]) recibo.append( controler.select("profissao", "profissionais", "id_profissional=" + str(recibo[1]))[0][0]) recibosNew.append(recibo) recibo[4] = recibo[4].strftime("%d/%m/%Y") if request.method == "POST": # Handles os ordenadores if "data" in request.form: recibosNew.sort(key=sortData) elif "nome" in request.form: recibosNew.sort(key=sortNome) elif "area" in request.form: recibosNew.sort(key=sortArea) elif "valor" in request.form: recibosNew.sort(key=sortValor) if request.method == "POST": dic = request.form.to_dict() app.logger.warning(dic) dicInvertido = dict(zip(dic.values(), dic.keys())) if "Baixar recibo" in dicInvertido: index = int(dicInvertido["Baixar recibo"]) id_atendimento = str(recibosNew[index][0]) rendered = controler.gerar_pdf(id_atendimento) pdf = pdfkit.from_string(rendered, False) response = make_response(pdf) response.headers['Content-Type'] = 'applocation/pdf' response.headers[ 'Content-Disposition'] = 'inline; filename = recibo' + id_atendimento + '.pdf' return response return render_template('RecibosCliente.html', recibos=recibosNew)
def meusClientes(): def sortData(val): data = val[4][6:] + val[4][3:5] + val[4][0:2] return int(data) def sortNome(val): return val[8] def sortValor(val): valor = val[3].replace("R$", "").replace(",", "") return int(valor) id_profissional = session['id'] atendimentos = controler.select("*", "atendimentos", "id_profissional=" + id_profissional) clientes = [] #criar lista dos clientes atendidos, só o id buffer = [] for atendimento in atendimentos: if atendimento[2] not in buffer: clientes.append([atendimento[2]]) buffer.append(atendimento[2]) for cliente in clientes: cliente.append( controler.select("nome", "usuarios", "id=" + str(cliente[0]))[0][0]) data_ultima_consulta = (controler.ultima_consulta( id_profissional, cliente[0])).strftime("%d/%m/%Y") cliente.append(data_ultima_consulta) if request.method == "POST": # Handles os ordenadores if "data" in request.form: clientes.sort(key=sortData) elif "nome" in request.form: clientes.sort(key=sortNome) app.logger.info(clientes[0]) if request.method == "POST": dic = request.form.to_dict() app.logger.warning(dic) dicInvertido = dict(zip(dic.values(), dic.keys())) if "+" in dicInvertido: index = int(dicInvertido["+"]) id_cliente = str(clientes[index][0]) return redirect(url_for("DetalhesCliente", id_cliente=id_cliente)) return render_template('MeusClientes.html', recibos=clientes, lenRecibos=len(clientes))
def DetalhesCliente(id_cliente): if "user" in session: id_profissional = session["id"] cliente = Cliente(id_cliente) def sortData(val): data = val[4][6:] + val[4][3:5] + val[4][0:2] return int(data) def sortValor(val): valor = val[3].replace("R$", "").replace(",", "") return int(valor) where = str.format("id_cliente= {} and id_profissional = {}", id_cliente, id_profissional) recibos = controler.select("*", "atendimentos", where) recibosNew = [] for recibo in recibos: recibo = list(recibo) recibosNew.append(recibo) recibo[4] = recibo[4].strftime("%d/%m/%Y") if request.method == "POST": # Handles os ordenadores if "data" in request.form: recibosNew.sort(key=sortData) elif "valor" in request.form: recibosNew.sort(key=sortValor) return render_template("DetalhesCliente.html", nome_cliente=cliente.nome, telefone_cliente=cliente.telefone, email_cliente=cliente.email, recibos=recibosNew) return redirect(url_for('login'))
def DetalhesCliente(id_cliente): if "user" in session: id_profissional = session["id"] cliente = Cliente(id_cliente) def sortData(val): data = val[4][6:] + val[4][3:5] + val[4][0:2] return int(data) def sortValor(val): valor = val[3].replace("R$","").replace(",","") return int(valor) where = str.format("id_cliente= {} and id_profissional = {}", id_cliente, id_profissional) recibos = controler.select("*", "atendimentos", where) recibosNew = [] for recibo in recibos: recibo = list(recibo) recibosNew.append(recibo) recibo[4] = recibo[4].strftime("%d/%m/%Y") if request.method == "POST": # Handles os ordenadores if "data" in request.form: recibosNew.sort(key = sortData) elif "valor" in request.form: recibosNew.sort(key = sortValor) if request.method == "POST": dic = request.form.to_dict() app.logger.warning(dic) dicInvertido = dict(zip(dic.values(),dic.keys())) if "Baixar recibo" in dicInvertido: index = int(dicInvertido["Baixar recibo"]) id_atendimento = str(recibosNew[index][0]) rendered = gerar_pdf(id_atendimento) pdf = pdfkit.from_string(rendered, False) response = make_response(pdf) response.headers['Content-Type'] = 'applocation/pdf' response.headers['Content-Disposition'] = 'inline; filename = recibo' + id_atendimento + '.pdf' return response if "enviarEmail" in dicInvertido: index = int(dicInvertido["enviarEmail"]) id_atendimento = str(recibosNew[index][0]) cliente = Cliente(controler.cliente_atendido(id_atendimento)) msg = Message("Recibo", recipients=[cliente.email]) #msg.body= "Segue em anexo o recibo referente à sua consulta." rendered = gerar_pdf(id_atendimento) msg.html = rendered mail.send(msg) return render_template("DetalhesCliente.html", nome_cliente = cliente.nome, telefone_cliente = controler.formata_telefone(cliente.telefone), email_cliente = cliente.email, recibos=recibosNew) return redirect(url_for('login'))
def gerar_pdf(id_atendimento): id_profissional = str(controler.select("id_profissional", "atendimentos", "id_atendimento="+id_atendimento)[0][0]) id_cliente = str(controler.select("id_cliente", "atendimentos", "id_atendimento = " + id_atendimento)[0][0]) profissional = Profissional(id_profissional) # app.logger.info(profissional) nomeProfissional = profissional.nome # cpfProfissional = controler.formata_cpf(profissional.cpf) # regProf = profissional.registro_profissional # email = profissional.email # app.logger.warning(profissional.telefone_comercial) telefone = controler.formata_telefone(profissional.telefone_comercial) # enderecoComercial = profissional.endereco # numero = profissional.numero # complemento = profissional.complemento # cidade = profissional.cidade # estado = profissional.estado # cep = controler.formata_cep(profissional.cep) # profissao = profissional.profissao enderecoCompleto = enderecoComercial + ", " + numero if complemento != "-": enderecoCompleto = enderecoCompleto + ", " + complemento enderecoCompleto = enderecoCompleto + ", " + cidade + ", " + estado + ", " + cep cliente = Cliente(id_cliente) nomeCliente = cliente.nome cpfCliente = controler.formata_cpf(cliente.cpf) cpfRes = controler.select("cpf_responsavel", "clientes" , "id_cliente = " + id_cliente)[0][0] cpfRes = '{}.{}.{}-{}'.format(cpfRes[0:3],cpfRes[3:6],cpfRes[6:9],cpfRes[9:]) nomeRes = controler.select("nome_responsavel", "clientes" , "id_cliente = " + id_cliente)[0][0] precoConsulta = controler.select("valor", "atendimentos", "id_atendimento = " + id_atendimento)[0][0] dataDoAtendimento = (controler.select("data_consulta", "atendimentos" , "id_atendimento = " + id_atendimento)[0][0]).strftime("%d/%m/%Y") ano = str(datetime.now().year) mes = str(datetime.now().month) dia = str(datetime.now().day) if len(mes)==1: mes='0'+mes dia = str(datetime.day) if len(dia)==1: dia='0'+dia dataGerado = dia+'/'+mes+'/'+ano if nomeRes == '-' or nomeRes == None: rendered = render_template('pdf_template18+.html', nomeProfissional = nomeProfissional, cpfProfissional=cpfProfissional, regProf = regProf, nomeCliente=nomeCliente, cpfCliente=cpfCliente, precoConsulta=precoConsulta, dataDoAtendimento=dataDoAtendimento, email=email, telefone=telefone,enderecoCompleto=enderecoCompleto, enderecoComercial=enderecoComercial, numero=numero, cidade=cidade, estado=estado, CEP=cep, dataGerado=dataGerado) else: rendered = render_template('pdf_template18-.html', nomeProfissional = nomeProfissional, cpfProfissional=cpfProfissional, regProf = regProf, profissao = profissao, nome = nomeCliente, cpfRes = cpfRes, nomeRes = nomeRes, precoConsulta = precoConsulta, email=email, enderecoCompleto = enderecoCompleto, telefone = telefone, cep = cep , dataDoAtendimento = dataDoAtendimento) return rendered
def redf(token): error = None if request.method == 'POST': if controler.valida_token(token): senhanova = request.form['senhanova'] confirma_senhanova = request.form['confirma_senhanova'] if senhanova == confirma_senhanova: hashed_nova = generate_password_hash(senhanova) cpf = controler.select('cpf', 'pedido_mudanca_senha', 'chave= "'+token+'"')[0][0] if controler.verifica_cpf(cpf, 'usuarios'): ups = {'senha':hashed_nova} controler.update(ups, "usuarios", "cpf="+cpf) return redirect(url_for('login')) else: error = "As senhas não conferem." else: error = "O token expirou." return render_template('redefinir_senha.html', error = error)
def cadastro(): error = None if request.method == "POST": #cliente if request.form["radio"] == '0': nome = request.form["nome"] data_de_nascimento = request.form["nascimento"] cpf = request.form["cpf"] telefone = controler.limpa_telefone(request.form["telefone"]) email = request.form["email"] senha = request.form["senha"] cep = request.form["cep"] endereco = request.form["endereco"] numero = request.form["numero"] if request.form["complemento"] == "": complemento = "-" else: complemento = request.form["complemento"] cidade = request.form["cidade"] estado = request.form["estado"] if nome == '' or data_de_nascimento == '' or cpf == '' or telefone == '' or email == '' or senha == '' or cep == '' or endereco == '' or numero == '' or cidade == '' or estado == '': error = 'Preencha todos os campos!' elif cpf == "CPF Inválido" or len(cpf) != 14: error = 'Verifique seu CPF!' elif endereco == "CEP não encontrado": error = 'Verifique seu CEP!' elif controler.verifica_email(email, 'usuarios'): error = 'Ops! Email já cadastrado.' elif len(data_de_nascimento) != 10 or controler.valida_data( data_de_nascimento) or controler.verifica_idade( data_de_nascimento) == "erro": error = 'Data de nascimento inválida!' else: cpf = controler.limpa_cpf(request.form["cpf"]) if controler.verifica_cpf( cpf, 'usuarios' ): #verificar o tipo -> se for 0 -> apenas update tipo = controler.cpf_tipo(cpf, "usuarios") if tipo == 0: pass else: error = "Este CPF já está cadastrado." else: hashed_password = generate_password_hash(senha) if controler.verifica_idade( data_de_nascimento) == False: #maior de idade nome_responsavel = '-' cpf_responsavel = '-' tipo = 1 controler.cadastra_usuario( cpf, nome, email, telefone, controler.converte_data(data_de_nascimento), hashed_password, tipo) id_cliente = controler.select("id", "usuarios", "cpf=" + str(cpf))[0][0] controler.cadastra_cliente(id_cliente, cep, endereco, numero, complemento, cidade, estado, nome_responsavel, cpf_responsavel) return redirect(url_for('login')) else: #menor de idade nome_responsavel = request.form["nomeRes"] cpf_responsavel = request.form["cpfRes"] if nome_responsavel == '' or cpf_responsavel == '': error = 'Preencha todos os campos' elif cpf_responsavel == "CPF Inválido" or len( cpf_responsavel) != 14: error = "Verifique o CPF do responsável" else: tipo = 1 controler.cadastra_usuario( cpf, nome, email, telefone, controler.converte_data(data_de_nascimento), hashed_password, tipo) id_cliente = controler.select( "id", "usuarios", "cpf=" + str(cpf))[0][0] controler.cadastra_cliente(id_cliente, cep, endereco, numero, complemento, cidade, estado, nome_responsavel, cpf_responsavel) return redirect(url_for('login')) if request.form["radio"] == '1': #profissional nome = request.form["nomePro"] cpf = request.form["cpfPro"] profissao = request.form["profissaoPro"] registro_profissional = request.form["regProf"] telefone = controler.limpa_telefone(request.form["telefonePro"]) data_de_nascimento = request.form["nascimentoPro"] email = request.form["emailPro"] senha = request.form["senhaPro"] cep = request.form["cepPro"] endereco = request.form["enderecoPro"] numero = request.form["numeroPro"] if request.form["complemento"] == "": complemento = "-" else: complemento = request.form["complemento"] cidade = request.form["cidadePro"] estado = request.form["estadoPro"] if nome == '' or cpf == '' or profissao == '' or telefone == '' or data_de_nascimento == '' or email == '' or senha == '' or cep == '' or endereco == '' or numero == '' or cidade == '' or estado == '': error = 'Preencha todos os campos!' elif cpf == "CPF Inválido" or len(cpf) != 14: error = 'Verifique seu CPF!' elif endereco == "CEP não encontrado": error = 'Verifique seu CEP!' elif controler.verifica_email(email, 'usuarios'): error = 'Ops! Email já cadastrado.' elif len(data_de_nascimento) != 10 or controler.valida_data( data_de_nascimento) or controler.verifica_idade( data_de_nascimento) == "erro": error = 'Data de nascimento inválida' elif len(request.form["telefonePro"]) != 14 and len( request.form["telefonePro"]) != 13: error = 'Verifique seu telefone!' else: cpf = controler.limpa_cpf(request.form["cpfPro"]) if controler.verifica_cpf(cpf, 'usuarios'): if tipo == 0: #update pass else: error = 'Este CPF já está cadastrado!' else: hashed_password = generate_password_hash(senha) tipo = 2 controler.cadastra_usuario( cpf, nome, email, telefone, controler.converte_data(data_de_nascimento), hashed_password, tipo) id_profissional = controler.select("id", "usuarios", "cpf=" + str(cpf))[0][0] telefone_comercial = telefone controler.cadastra_profissional(id_profissional, profissao, registro_profissional, telefone_comercial, cep, endereco, numero, complemento, cidade, estado) return redirect(url_for('login')) return render_template('create.html', error=error)
def up_senha(self, senha): controler.update({'senha': senha}, 'clientes', 'id=' + self.id) self.senha = controler.select('senha', 'clientes', 'id=' + self.id)[0][0]
def up_nome(self, nome): controler.update({'nome': nome}, 'clientes', 'id=' + self.id) self.nome = controler.select('nome', 'clientes', 'id=' + self.id)[0][0]
def RecibosProfissional(): def sortData(val): data = val[4][6:] + val[4][3:5] + val[4][0:2] return int(data) def sortNome(val): return val[8] def sortValor(val): valor = val[3].replace("R$","").replace(",","") return int(valor) id_profissional = session['id'] recibos = controler.select("*", "atendimentos", "id_profissional="+id_profissional) recibosNew = [] for recibo in recibos: recibo = list(recibo) recibo.append(controler.select("nome", "usuarios", "id=" + str(recibo[2]))[0][0]) recibosNew.append(recibo) recibo[4] = recibo[4].strftime("%d/%m/%Y") if request.method == "POST": # Handles os ordenadores if "data" in request.form: app.logger.info("1") recibosNew.sort(key = sortData) elif "nome" in request.form: app.logger.info("2") recibosNew.sort(key = sortNome) elif "valor" in request.form: app.logger.info("3") recibosNew.sort(key = sortValor) elif "cadastrar" in request.form: return redirect(url_for('CadastrarAtendimentos')) app.logger.info(recibosNew[0]) if request.method == "POST": dic = request.form.to_dict() app.logger.warning(dic) dicInvertido = dict(zip(dic.values(),dic.keys())) if "Baixar recibo" in dicInvertido : index = int(dicInvertido["Baixar recibo"]) id_atendimento = str(recibosNew[index][0]) rendered = gerar_pdf(id_atendimento) pdf = pdfkit.from_string(rendered, False) response = make_response(pdf) response.headers['Content-Type'] = 'applocation/pdf' response.headers['Content-Disposition'] = 'inline; filename = recibo' + id_atendimento + '.pdf' return response if "enviarEmail" in dicInvertido: index = int(dicInvertido["enviarEmail"]) id_atendimento = str(recibosNew[index][0]) cliente = Cliente(controler.cliente_atendido(id_atendimento)) msg = Message("Recibo", recipients=[cliente.email]) #msg.body= "Segue em anexo o recibo referente à sua consulta." rendered = gerar_pdf(id_atendimento) msg.html = rendered mail.send(msg) ''' pdf = pdfkit.from_string(rendered, False) response = make_response(pdf) response.headers['Content-Type'] = 'applocation/pdf' response.headers['Content-Disposition'] = 'inline; filename = recibo' + id_atendimento + '.pdf' with app.open_resource(recibo_gerado) as recibo: msg.attach(recibo, "application/pdf", recibo.read()) mail.send(msg) ''' return render_template('RecibosProfissional.html', recibos=recibosNew, lenRecibos = len(recibosNew))