示例#1
0
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
示例#2
0
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")
示例#3
0
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="")
示例#4
0
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="")
示例#5
0
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")