def calcola_crediti(prezzo, nomeTeam, op, allenatore): fanta_team = FantaSquadra.query.filter_by(TeamName=nomeTeam).first() # fantaAllenatoreJoin= FantaAllenatore.query.join(FantaSquadra).filter(FantaAllenatore.id == FantaSquadra.IdFantaAllenatore) if op == 'add': players = Giocatore.query.filter_by(nomeFantasquadra=nomeTeam) team = [] for el in players: players_team = str(el).split('|') team.append(players_team) # print("players: ", str(el).split('|')) # Il prezzo d'acquisto inserito deve essere minore dei crediti residui della fantasquadra + 1 credito per ogni buco rimasto per giocatori e allenatore (squadre da 26) if fanta_team.crediti - int(prezzo) > 26 - len(team): fanta_team.crediti = fanta_team.crediti - int(prezzo) if allenatore: fanta_team.valAcquistoAll = prezzo db_session.add(fanta_team) db_session.commit() return True else: return False elif op == 'del': if fanta_team.crediti + int(prezzo) > 300: return Falses else: fanta_team.crediti = fanta_team.crediti + int(prezzo) db_session.add(fanta_team) db_session.commit() return True
def initFileData(): # Leggo file xslx contenente i dati di giocatori e squadre df = pd.read_csv( r'C:\Users\lucap\OneDrive\Desktop\Codici\FantaDB\FantaDB\Quotazioni_Fantacalcio.csv', skiprows=1) # Leggo le squadre già presenti nel DB all'avvio del programma teams = Squadra.query.all() # print(df) #------------------------ Init delle Squadre(SeriaA) nel DB----------------------------------------------------------------------- # Incomincio a inserire i nomi delle squadre di SerieA nel DB se non sono già presenti # Ho dovuto usare due liste di appoggio perchè nonostante nel model ho messo che squadre torna una stringa, non riuscivo a far la comparazione tra le squadre già presenti nel db # e quelle lette dal file e mi dava errore perchè ogni volta che facevo partire il programma, # il codice provava a reinserire tutte le squadre lette dal file .csv anche quelle già presenti nel DB dandomi quindi errore d'integrità # perchè aggiungo qualcosa che è gia presente (il nome della squadra è l'unico attributo nonchè PK) readTeam = [] # Lista di team letti dal file csv strTeam = [] # Trasformo in Stringa le squadre lette dal DB # Inizializzo le due liste con cui opererò for el in teams: strTeam.append(str(el)) for team in df['Squadra']: if team not in readTeam: readTeam.append(str(team)) # Per mantenere la lista squadre sempre aggiornate, una volta lette le squadre presenti nel DB e quelle lette dal file .csv, elimino le squadre presenti nel DB che non sono anche presenti nel file .csv letto # questo perchè se nel db ho squadre della stagione precedente che sono retrocesse, esse non saranno presenti nel file .csv della stagione corrente for team in strTeam: if team not in readTeam: Squadra.query.filter_by(nome=team).delete() try: db_session.commit() except exc.SQLAlchemyError as e: print("Error: ", e) # print("Teams: ", strTeam) # print("Team: ", readTeam) # Inserimento delle squadre mancanti lette dal .csv nel database for team in readTeam: if team not in strTeam: db_session.add(Squadra(team)) try: db_session.commit() except exc.SQLAlchemyError as e: print("Error: ", e) #----------------------- Init dei giocatori nel DB--------------------------------------------------------------------------- giocatoriList = [] giocatoriDB = Giocatore.query.all() for el in giocatoriDB: giocatoriList.append(str(el).split('|')) if len(giocatoriList) == 0: # print(df) n = df['Id'].count() i = 0 # print('Numero giocatori: ', n) # Inizializzo le liste in cui inserirò i dati dei giocatori letti da .csv id_pl = [] name_pl = [] r = [] sq_pl = [] valI = [] valAtt = [] for element in df['Id']: id_pl.append(element) for element in df['R']: r.append(element) for element in df['Nome']: name_pl.append(element) for element in df['Squadra']: sq_pl.append(element) for element in df['Qt. A']: valI.append(element) for element in df['Qt. I']: valAtt.append(element) for i in range(n): giocatore = Giocatore(id_pl[i], name_pl[i], r[i], sq_pl[i], valI[i], valAtt[i], 0) db_session.add(giocatore) db_session.commit() else: print("Giocatori gia inseriti") # ----------------------------------- Lettura Allenatori ------------------------------------------------------------------------ # df= pd.read_csv(r'C:\Users\lucap\OneDrive\Desktop\Codici\FantaDB\FantaDB\Quotazioni_Fantacalcio.csv', skiprows=1) dfAll = pd.read_csv( r'C:\Users\lucap\OneDrive\Desktop\Codici\FantaDB\FantaDB\allenatori2020\21.csv' ) allenatoreList = [] allenatoreDB = Allenatore.query.all() for mister in allenatoreDB: allenatoreList.append(str(mister).split('|')) n = dfAll['Allenatore'].count() if len(allenatoreList) == 0: nomeAll = [] squadra_All = [] for el in dfAll['Allenatore']: nomeAll.append(el) for el in dfAll['Squadra']: squadra_All.append(el) for i in range(n): allenatore = Allenatore(nomeAll[i], squadra_All[i]) db_session.add(allenatore) db_session.commit() else: print("Allenatori già inseriti")
def fanta_asta(): '''for el in request.form: print(el, ":", request.form[el]) ''' if request.method == 'POST': response = False responseAll = False nome_FTeam = request.form['nomeFantaSquadra'] op = request.form['op'] # in entrambi devo fare le operazioni coi crediti if op == "del": selected_idPlayer = request.form['selected_idplayer'] prezzo = request.form['prezzo'] giocatore = Giocatore.query.filter_by( player_id=selected_idPlayer).first() giocatore.nomeFantasquadra = None response = calcola_crediti(prezzo, nome_FTeam, op, False) elif op == "add": prezzo = request.form['prezzo'] selected_idPlayer = request.form['selected_idplayer'] if selected_idPlayer == "Giocatori..." or prezzo == "Prezzo...": fanta_Squadre, giocatoriFA, allenatoriFA = get_asta_view() return render_template('fanta_asta.html', fanta_Squadre=fanta_Squadre, giocatoriFADict=giocatoriFA, user_image=full_filename, allenatoriFA=allenatoriFA, messages="") giocatore = Giocatore.query.filter_by( player_id=selected_idPlayer).first() response = calcola_crediti(int(prezzo), nome_FTeam, op, False) giocatore.nomeFantasquadra = nome_FTeam giocatore.valAcquisto = int(prezzo) elif op == "updtAll": print("dentro updtAll") prezzo = request.form['prezzo'] nAllenatore = request.form['selected_allenatore'] if nAllenatore == "Scegli..." or prezzo == "Prezzo...": fanta_Squadre, giocatoriFA, allenatoriFA = get_asta_view() return render_template('fanta_asta.html', fanta_Squadre=fanta_Squadre, giocatoriFADict=giocatoriFA, user_image=full_filename, allenatoriFA=allenatoriFA, messages="") team = FantaSquadra.query.filter_by(TeamName=nome_FTeam).first() responseAll = calcola_crediti(int(prezzo), nome_FTeam, 'add', True) team.allenatore = nAllenatore elif op == "delAll": nAllenatore = request.form['selected_allenatore'] team = FantaSquadra.query.filter_by(TeamName=nome_FTeam).first() team.allenatore = None prezzo = team.valAcquistoAll responseAll = calcola_crediti(prezzo, nome_FTeam, 'del', True) if response: db_session.add(giocatore) db_session.commit() elif responseAll: db_session.add(team) db_session.commit() else: fanta_Squadre, giocatoriFA, allenatoriFA = get_asta_view() return render_template('fanta_asta.html', fanta_Squadre=fanta_Squadre, giocatoriFADict=giocatoriFA, user_image=full_filename, allenatoriFA=allenatoriFA, messages="Crediti Insufficenti!") fanta_Squadre, giocatoriFA, allenatoriFA = get_asta_view() return render_template('fanta_asta.html', fanta_Squadre=fanta_Squadre, giocatoriFADict=giocatoriFA, user_image=full_filename, allenatoriFA=allenatoriFA, messages="")
def home(): # Spezzo la rappresentazione di FantaAllenatore per l'elaborazione usernames, emails, results = getFantaMisterDB() # print("Mister presenti nel database: ", results) # POST suddiviso in più parti, la prima parte verifica se si arriva in post sulla home per cancellare dei fantallenatori, la seconda è per vedere se si arriva in post per aggiungere fantallenatori if request.method == 'POST': op = request.form['op'] if op == 'delete': # cancello utente idForm = request.form['Id'] # print("idForm :", idForm) # Bisogna resettare l'attributo fantasquadra di tutti i giocatori facenti parte di questa fantasquadra in quanto è una chiave esterna verso la fantasquadra che si vuole cancellare fantaTeam = request.form['fantaTeam'] giocatoriList = Giocatore.query.filter_by( nomeFantasquadra=fantaTeam).all() for player in giocatoriList: print("player: ", str(player)) player.nomeFantasquadra = None db_session.add( player ) # di fatto è un op di update in quanto aggiorno i dati di una tupla gia presente db_session.commit() # Se il fantaAllenatore che vogliamo eliminare ha una fantasquadra prima eliminiamo questa poi lui # Avendo già effettuato una query e avendo ottenuto già i risultati riguardo i mister, non sto a reinterrogare il DB ma uso i dati che ho già letto for mister in results: if int(idForm) == int(mister[0]): FantaSquadra.query.filter_by( IdFantaAllenatore=idForm).delete() db_session.commit() FantaAllenatore.query.filter_by(id=idForm).delete() db_session.commit() return redirect('/') else: # aggiungo utente # Controllo il formato dell'email # print("username :"******"" and request.form['username'] != "": print("email: ", request.form['Email']) if '@' not in request.form['Email'] or ( '.it' not in request.form['Email'] and '.com' not in request.form['Email']): return render_template( 'homescreen.html', data=results, user_image=full_filename, messages= "Formato email sbagliato, controllare che '@' o '.it' o '.com' siano presenti!" ) if request.form['Email'] not in emails and request.form[ 'username'] not in usernames: IDmister = CreateID(FantaAllenatore) if IDmister != 'F': mister = FantaAllenatore(IDmister, request.form['Email'], request.form['username']) db_session.add(mister) db_session.commit() return redirect('/') else: message = "Numero d'iscrizioni massimo raggiunto!" render_template('homescreen.html', data=results, user_image=full_filename, messages=message) elif request.form['Email'] in emails: message = "Email già utilizzata!" return render_template('homescreen.html', data=results, user_image=full_filename, messages=message) else: message = "Username già utilizzato!" return render_template('homescreen.html', data=results, user_image=full_filename, messages=message) else: return render_template('homescreen.html', data=results, user_image=full_filename, messages="Inserire Username e/o Email!") return render_template('homescreen.html', data=results, user_image=full_filename, messages="")
def updateFAll(): # aggiornamento fanta allenatore # qui ci si arriva solo in POST, sia da homescreen che da updateFAll # richiedo i dati necessari al DB ( uso solo nomeFantaTeam e idFantaAll ) ( sicuramente c'è un modo più efficente per reperire le cose di cui ho bisogno senza usare getFantaSquadre) nomeFantaTeam, idFantaAll, crediti, dictTeam = getFantaSquadre() # print("nomeFantaTeam: ", nomeFantaTeam) # print("\nidFantaAll: ", idFantaAll) op = request.form['op'] # print("op: ", op) if request.method == 'POST': if op == "update": # Arrivo da homescreen con i dati del fantallenatore che voglio modificare iDForm = request.form[ 'Id'] # questo Id qui è quello che viene dalla form di homescreen iD = int(iDForm) # Se non faccio cosi' iD = ' 9' con lo spazio nameAllenatore = request.form['name'] email = request.form['email'] if int(iD) in idFantaAll: # Se l'allenatore ha una fantasquadra non metto la possibilità d'inserirla e quindi posso solo vedere la squadra o cancellarla return render_template('updateFAll.html', op=op, id=iD, nAllenatore=nameAllenatore, email=email, fantaT='y', dictTeam=dictTeam, messages="") # Se l'allenatore non ha una fantasquadra abilito la possibilità di aggiungerla return render_template('updateFAll.html', op=op, id=iD, nAllenatore=nameAllenatore, email=email, fantaT='n', messages="") elif op == "addFTeam": # print("nTeam ricevuto: ", request.form['nTeam']) # Creazione della FantaSquadra if request.form['nTeam'] not in nomeFantaTeam: iD = request.form['iD'] fantaTeam = FantaSquadra(request.form['nTeam'], int(iD)) db_session.add(fantaTeam) db_session.commit() return redirect('/') else: username = request.form['username'] email = request.form['email'] iD = request.form['iD'] message = "Nome Squadra gia presente!" return render_template('updateFAll.html', messages=message, nAllenatore=username, email=email, fantaT='n', id=iD) elif op == "deleteFTeam": FantaSquadra.query.filter_by( TeamName=request.form['nFTeam'] ).delete( ) # Volendo eventuale controllo su nFTeam dato che viene direttamente dalla form db_session.commit() return redirect('/') elif op == "updating": # Arrivo da updataFAll con i nuovi dati per effettuare la modifica iD = request.form['iD'] nameAllenatore = request.form['username'] emailAll = request.form['email'] # Operazione di Update fAllenatore = FantaAllenatore.query.filter( FantaAllenatore.id == iD).one() fAllenatore.username = nameAllenatore fAllenatore.email = emailAll db_session.commit( ) # non ho bisogno di fare db_session.add() perchè ho gia sistemato gli attributi dall'oggetto fAllenatore # print("Utente modificato con successo") return redirect('/') return render_template('homescreen.html', messages="Errore, modifica cancellata")