Sugestões
This commit is contained in:
parent
0fb2d868b5
commit
cefc72c5ba
|
|
@ -2,6 +2,7 @@ import functools
|
||||||
import itertools
|
import itertools
|
||||||
import operator
|
import operator
|
||||||
import os
|
import os
|
||||||
|
import random
|
||||||
|
|
||||||
from flask import Flask, render_template, request, url_for, redirect, flash, session, make_response
|
from flask import Flask, render_template, request, url_for, redirect, flash, session, make_response
|
||||||
from flask.cli import with_appcontext
|
from flask.cli import with_appcontext
|
||||||
|
|
@ -119,6 +120,21 @@ def seller_screen():
|
||||||
return render_template('seller_screen.html')
|
return render_template('seller_screen.html')
|
||||||
|
|
||||||
|
|
||||||
|
def suggest_numbers(raffle_id, amount=3):
|
||||||
|
suggestions = []
|
||||||
|
tickets = iter(Ticket.query.filter_by(raffle_id=raffle_id).order_by(Ticket.chosen_number.asc()))
|
||||||
|
next_ticket = next(tickets, None)
|
||||||
|
candidate_number = 1
|
||||||
|
while len(suggestions) < max(amount, 50) and next_ticket:
|
||||||
|
if candidate_number < next_ticket.chosen_number:
|
||||||
|
suggestions.append(candidate_number)
|
||||||
|
else:
|
||||||
|
next_ticket = next(tickets, None)
|
||||||
|
candidate_number += 1
|
||||||
|
suggestions.extend(range(candidate_number, candidate_number + (max(amount, 50) - len(suggestions))))
|
||||||
|
return sorted(random.sample(suggestions, amount))
|
||||||
|
|
||||||
|
|
||||||
@app.route('/numeros/<purchase_id>', methods=['GET', 'POST'])
|
@app.route('/numeros/<purchase_id>', methods=['GET', 'POST'])
|
||||||
def numbers_screen(purchase_id):
|
def numbers_screen(purchase_id):
|
||||||
purchase = Purchase.query.get_or_404(purchase_id)
|
purchase = Purchase.query.get_or_404(purchase_id)
|
||||||
|
|
@ -146,10 +162,17 @@ def numbers_screen(purchase_id):
|
||||||
try:
|
try:
|
||||||
purchase.decrease_numbers()
|
purchase.decrease_numbers()
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
session['failed_attempts'] = 0
|
||||||
flash(f"Número reservado: {request.form['number']}", 'success')
|
flash(f"Número reservado: {request.form['number']}", 'success')
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
db.session.rollback()
|
db.session.rollback()
|
||||||
|
session['failed_attempts'] = session.get('failed_attempts', 0) + 1
|
||||||
|
if session['failed_attempts'] < 3:
|
||||||
flash(f"O número {request.form['number']} já foi escolhido para {raffle.description}!", 'warning')
|
flash(f"O número {request.form['number']} já foi escolhido para {raffle.description}!", 'warning')
|
||||||
|
else:
|
||||||
|
suggested_numbers = suggest_numbers(raffle.id)
|
||||||
|
flash(f"{request.form['number']} também já foi! Sugestões para {raffle.description}: "
|
||||||
|
f"{', '.join(map(str, suggested_numbers))}", 'warning')
|
||||||
session['buyer_data'] = {'name': request.form['name'], 'contact': request.form['contact']}
|
session['buyer_data'] = {'name': request.form['name'], 'contact': request.form['contact']}
|
||||||
return redirect(url_for('numbers_screen', purchase_id=purchase_id))
|
return redirect(url_for('numbers_screen', purchase_id=purchase_id))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,7 @@ class Purchase(db.Model):
|
||||||
total_numbers = db.Column(db.Integer, default=0)
|
total_numbers = db.Column(db.Integer, default=0)
|
||||||
numbers_left = db.Column(db.Integer, default=0)
|
numbers_left = db.Column(db.Integer, default=0)
|
||||||
remarks = db.Column(db.Text)
|
remarks = db.Column(db.Text)
|
||||||
|
# timestamp = db.Column(db.DateTime)
|
||||||
|
|
||||||
def generate_id(self):
|
def generate_id(self):
|
||||||
self.id = hashlib.sha256(os.urandom(60)).hexdigest()
|
self.id = hashlib.sha256(os.urandom(60)).hexdigest()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue