Sugestões
This commit is contained in:
parent
0fb2d868b5
commit
cefc72c5ba
|
|
@ -2,6 +2,7 @@ import functools
|
|||
import itertools
|
||||
import operator
|
||||
import os
|
||||
import random
|
||||
|
||||
from flask import Flask, render_template, request, url_for, redirect, flash, session, make_response
|
||||
from flask.cli import with_appcontext
|
||||
|
|
@ -119,6 +120,21 @@ def seller_screen():
|
|||
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'])
|
||||
def numbers_screen(purchase_id):
|
||||
purchase = Purchase.query.get_or_404(purchase_id)
|
||||
|
|
@ -146,10 +162,17 @@ def numbers_screen(purchase_id):
|
|||
try:
|
||||
purchase.decrease_numbers()
|
||||
db.session.commit()
|
||||
session['failed_attempts'] = 0
|
||||
flash(f"Número reservado: {request.form['number']}", 'success')
|
||||
except IntegrityError:
|
||||
db.session.rollback()
|
||||
flash(f"O número {request.form['number']} já foi escolhido para {raffle.description}!", 'warning')
|
||||
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')
|
||||
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']}
|
||||
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)
|
||||
numbers_left = db.Column(db.Integer, default=0)
|
||||
remarks = db.Column(db.Text)
|
||||
# timestamp = db.Column(db.DateTime)
|
||||
|
||||
def generate_id(self):
|
||||
self.id = hashlib.sha256(os.urandom(60)).hexdigest()
|
||||
|
|
|
|||
Loading…
Reference in New Issue