Sugestões

This commit is contained in:
Clóvis Fabrício Costa 2023-06-14 17:09:16 -03:00
parent 0fb2d868b5
commit cefc72c5ba
2 changed files with 25 additions and 1 deletions

View File

@ -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))

View File

@ -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()