def p_portail_home(request): """ Portail d'accueil de CRUDY """ crudy = Crudy(request, "portail") title = crudy.application["title"] crudy.folder_id = None crudy.layout = "portail" return render(request, 'p_portail_home.html', locals())
def f_tarot_jeu_prime(request, record_id): """ Saisie des primes """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" obj = get_object_or_404(TarotJeu, id=record_id) title = "Saisie des primes pour %s" % ( obj.participant.joueur.pseudo.upper()) form = forms.TarotJeuPrimeForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() # un seul ptbout par jeu if obj.ptbout: jeux = TarotJeu.objects.all().filter( participant__partie__id=obj.participant.partie_id, jeu=obj.jeu) for jeu in jeux: if jeu.id != obj.id: jeu.ptbout = False jeu.save() partie = get_object_or_404(TarotPartie, id=crudy.folder_id) partie.modified = True partie.save() return redirect("v_tarot_jeu_list", obj.jeu) return render(request, "f_crudy_form.html", locals())
def f_tarot_jeu_pari(request, record_id): """ Saisie pari d'un joueur """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" obj = get_object_or_404(TarotJeu, id=record_id) title = "Enchère de %s" % (obj.participant.joueur.pseudo.upper()) form = forms.TarotJeuPariForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() partie = get_object_or_404(TarotPartie, id=crudy.folder_id) jeu_courant = get_object_or_404(TarotJeu, id=record_id) jeu_courant.prenneur = True if partie.qparticipant < 5: jeu_courant.partenaire = True jeu_courant.real = 0 jeu_courant.save() if jeu_courant.pari != "...": # Nettoyage des enchères des autres joueurs jeux = TarotJeu.objects.all().filter( participant__partie__id=obj.participant.partie_id, jeu=obj.jeu) for jeu in jeux: if jeu.id != jeu_courant.id: jeu.pari = "..." jeu.prenneur = False if partie.qparticipant < 5: jeu.partenaire = False jeu.real = 99 jeu.save() return redirect("v_tarot_jeu_list", obj.jeu) return render(request, "f_crudy_form.html", locals())
def p_whist_help(request): """ Guide """ crudy = Crudy(request, APP_NAME) title = crudy.application.get("title") crudy.url_actions = [] crudy.layout = "help" form = None return render(request, 'p_crudy_help.html', locals())
def f_tarot_partie_folder(request, record_id): """ Enregistrement d'une partie dans folder""" crudy = Crudy(request, APP_NAME) crudy.layout = "form" obj = get_object_or_404(TarotPartie, id=record_id) crudy.folder_id = obj.id crudy.folder_name = obj.name return redirect("v_tarot_participant_select")
def f_whist_partie_folder(request, record_id): """ Sélection d'une partie dans folder""" crudy = Crudy(request, APP_NAME) crudy.layout = "form" obj = get_object_or_404(WhistPartie, id=record_id) crudy.folder_id = obj.id crudy.folder_name = obj.name return redirect("v_whist_participant_select")
def f_whist_jeu_pari(request, record_id): """ Saisie pari d'un joueur """ crudy = Crudy(request, APP_NAME) obj = get_object_or_404(WhistJeu, id=record_id) title = "Pari de %s" % (obj.participant.joueur.pseudo.upper()) crudy.message = "**%s**, Combien penses-tu faire de plis ?" % ( obj.participant.joueur.pseudo.upper()) form = forms.WhistJeuPariForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() return redirect(crudy.url_view, obj.jeu) return render(request, "f_crudy_form.html", locals())
def f_whist_joueur_update(request, record_id): """ mise à jour d'un joueur """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" crudy.url_delete = "f_whist_joueur_delete" title = "Modification d'un Joueur" crudy.message = "" obj = get_object_or_404(WhistJoueur, id=record_id) form = forms.WhistJoueurForm(request.POST or None, instance=obj, request=request) if form.is_valid(): form.save() return redirect("v_whist_participant_select") return render(request, "f_crudy_form.html", locals())
def get_queryset(self): """ queryset générique """ crudy = Crudy(self.request, APP_NAME) objs = self.meta.model.objects.all()\ .filter(partie_id=crudy.folder_id)\ .order_by(*self.meta.order_by)\ .values(*self.meta.cols_ordered) # tri des colonnes si version python 3.5 self.objs = self.sort_cols(objs) crudy.url_participant_update = 'f_whist_participant_update' crudy.action_param = 0 if len(self.objs) == 0: self.meta.url_actions = [] return self.objs
def f_whist_partie_update(request, record_id): """ Modification d'une partie """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" title = "Modification d'une Partie" crudy.message = "" crudy.url_delete = "f_whist_partie_delete" obj = get_object_or_404(WhistPartie, id=record_id) model = WhistPartie form = forms.WhistPartieForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() return redirect("v_whist_partie_select") return render(request, "f_crudy_form.html", locals())
def f_whist_jeu_create(request, id): """ création des jeux (tours) de la partie """ crudy = Crudy(request, APP_NAME) jeu = WhistJeu() jeu.create_jeux(crudy) return redirect("v_whist_jeu_list", 1)
def p_portail_help(request): """ Aide de CRUDY """ crudy = Crudy(request, "portail") readme = "" with open(os.path.dirname(__file__) + "/../README.md", mode="r", encoding='utf-8') as fichier: readme = fichier.read() return render(request, 'p_portail_help.html', locals())
def f_tarot_jeu_real(request, record_id): """ Saisie du réalisé 0 1 2 """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" obj = get_object_or_404(TarotJeu, id=record_id) title = "Nombre de points réalisé par %s" % ( obj.participant.joueur.pseudo.upper()) form = forms.TarotJeuRealForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() partie = get_object_or_404(TarotPartie, id=crudy.folder_id) partie.modified = True partie.save() return redirect("v_tarot_jeu_list", obj.jeu) return render(request, "f_crudy_form.html", locals())
def f_tarot_jeu_add(request): """ ajout d'un jeu dans la partie """ crudy = Crudy(request, APP_NAME) jeu = TarotJeu() jeu.add_jeux(crudy) partie = get_object_or_404(TarotPartie, id=crudy.folder_id) return redirect("v_tarot_jeu_list", partie.jeu)
def get_queryset(self): """ queryset générique """ crudy = Crudy(self.request, "whist") objs = self.meta.model.objects.all().filter(owner=self.request.user.username)\ .filter(**self.meta.filters)\ .order_by(*self.meta.order_by)\ .values(*self.meta.cols_ordered) # tri des colonnes si version python 3.5 self.objs = self.sort_cols(objs) # Cochage des participants dans la liste des joueurs participants = WhistParticipant.objects.all().filter( partie__id__exact=crudy.folder_id) crudy.joined = [] for obj in self.objs: for participant in participants: if participant.joueur_id == obj["id"]: crudy.joined.append(obj["id"]) return self.objs
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) crudy = Crudy(self.request, "whist") whistJeu = kwargs["instance"] choices = [] for i in range(0, whistJeu.carte + 1): choices.append((i, "%s pli" % (i, ))) self.fields['real'].choices = choices self.fields['real'].label = ""
def f_whist_joueur_create(request): """ création d'un joueur """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" title = "Nouveau Joueur" crudy.message = "" model = WhistJoueur if request.POST: form = forms.WhistJoueurForm(request.POST, request=request) if form.is_valid(): post = form.save(commit=False) post.owner = request.user.username post.pseudo = post.pseudo.upper() post.save() return redirect("v_whist_participant_select") else: form = forms.WhistJoueurForm(request=request) return render(request, 'f_crudy_form.html', locals())
def f_tarot_jeu_partenaire(request, record_id, checked): """ Saisie du partenaire """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" tarotJeu = get_object_or_404(TarotJeu, id=record_id) jeux = TarotJeu.objects.all().filter( participant__partie_id=tarotJeu.participant.partie_id, jeu=tarotJeu.jeu) for jeu in jeux: if jeu.id == int(record_id): jeu.partenaire = False if checked == "True" else True else: jeu.partenaire = False jeu.save() partie = get_object_or_404(TarotPartie, id=crudy.folder_id) partie.modified = True partie.save() return redirect("v_tarot_jeu_list", tarotJeu.jeu)
def f_whist_partie_create(request): """ Nouvelle partie """ crudy = Crudy(request, APP_NAME) crudy.layout = "form" title = "Nouvelle Partie" model = WhistPartie crudy.message = "" if request.POST: form = forms.WhistPartieForm(request.POST, request=request) if form.is_valid(): form.save() post = form.save(commit=False) post.owner = request.user.username post.name = post.name.upper() post.save() return redirect("v_whist_partie_select") else: form = forms.WhistPartieForm(request=request) return render(request, 'f_crudy_form.html', locals())
def v_whist_participant_order(request, record_id, orientation): """ On remonte le joueur dans la liste """ crudy = Crudy(request, APP_NAME) iid = int(record_id) participant = get_object_or_404(WhistParticipant, id=iid) participant.order += int(orientation) * 3 participant.save() participant.compute_order() return redirect("v_whist_participant_list")
def f_whist_jeu_real(request, record_id): """ Saisie du réalisé 0 1 2 """ crudy = Crudy(request, APP_NAME) obj = get_object_or_404(WhistJeu, id=record_id) title = "Réalisé de %s" % (obj.participant.joueur.pseudo.upper()) if obj.pari > 1: crudy.message = "**%s**, combien de plis as-tu réalisé ? (**%d** plis avaient été demandés) ?"\ % (obj.participant.joueur.pseudo.upper(), obj.pari) else: crudy.message = "**%s**, combien de plis as-tu réalisé ? (**%d** pli avait été demandé) ?"\ % (obj.participant.joueur.pseudo.upper(), obj.pari) form = forms.WhistJeuRealForm(request.POST or None, request=request, instance=obj) if form.is_valid(): form.save() partie = get_object_or_404(WhistPartie, id=crudy.folder_id) partie.modified = True partie.save() return redirect(crudy.url_view, obj.jeu) return render(request, "f_crudy_form.html", locals())
def get_queryset(self): """ queryset générique """ objs = self.meta.model.objects.all().filter(owner=self.request.user.username)\ .filter(**self.meta.filters)\ .order_by(*self.meta.order_by)\ .values(*self.meta.cols_ordered) # tri des colonnes si version python 3.5 self.objs = self.sort_cols(objs) crudy = Crudy(self.request, APP_NAME) if not crudy.folder_id: self.meta.url_next_page = None return self.objs
def f_whist_participant_update(request, record_id, checked): """ Mise à jour du donneur """ crudy = Crudy(request, APP_NAME) participants = WhistParticipant.objects.all().filter( partie__id=crudy.folder_id) for participant in participants: if participant.id == int(record_id): participant.donneur = False if checked == "True" else True else: participant.donneur = False participant.save() return redirect("v_whist_participant_list")
def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) crudy = Crudy(self.request, "whist") whistJeu = kwargs["instance"] # nre de plis demandés plis = 0 for jeu in WhistJeu.objects.all().filter( participant__partie_id=crudy.folder_id, jeu=whistJeu.jeu): if jeu.donneur != 1: plis += jeu.pari choices = [] for i in range(0, whistJeu.carte + 1): if whistJeu.carte - plis == i and whistJeu.donneur == 1: continue choices.append((i, "%s pli" % (i, ))) self.fields['pari'].choices = choices self.fields['pari'].label = ""
def f_portail_login(request): """ Login """ crudy = Crudy(request, "portail") title = "" if request.user.is_authenticated: print(request.user.email, 'is connected') else: print('not connected') form = AuthenticationForm(data=request.POST) if request.POST and form.is_valid(): login(request, form.get_user()) if request.user.is_authenticated: print(request.user.email, 'connected') return redirect('p_portail_home') return render(request, 'f_portail_login.html', locals())
def v_whist_participant_join(request, record_id): """ Création d'un participant à partir de la sélection dans la vue des joueurs """ crudy = Crudy(request, APP_NAME) iid = int(record_id) if iid in crudy.joined: participant = WhistParticipant.objects.all().filter( partie_id=crudy.folder_id, joueur_id=iid) participant.delete() crudy.joined.remove(iid) else: participant = WhistParticipant(partie_id=crudy.folder_id, joueur_id=iid) participant.save() participant.compute_order() crudy.joined.append(iid) return redirect("v_whist_participant_select")
def get_queryset(self): """ fournir les données à afficher dans la vue """ crudy = Crudy(self.request, APP_NAME) self.meta.url_back = "/tarot/jeu/list/%s" % self.participant_id prise = TarotJeu.objects.filter(participant__partie__id=crudy.folder_id, jeu=OuterRef('jeu'), prenneur=True)\ .exclude(pk=OuterRef('pk')) partie = get_object_or_404(TarotPartie, id=crudy.folder_id) objs = TarotJeu.objects.filter(participant__partie__id=crudy.folder_id, participant__id=self.participant_id)\ .order_by('jeu')\ .values(*self.meta.cols_ordered, prise=Subquery(prise.values('pari'))) # tri des colonnes si version python 3.5 self.objs = self.sort_cols(objs) # Tri des colonnes dans l'ordre de cols + remplissage des colonnes calculées participant_name = "" for row in self.objs: participant_name = row["participant__joueur__pseudo"] primes = [] for key, col in self.meta.cols_list: # on remplit la colonne prime avec la catégorie prime if col.get("category") == "prime": if row[key]: primes.append((col.get("title"))) if len(primes) == 0: primes.append(("0")) row["primes"] = primes # on cache la colonne partenaire si jeu à 4 ou 3 qparticipant = TarotParticipant.objects.all().filter( partie__id__exact=crudy.folder_id).count() self.meta.title = 'Jeux de "%s"' % participant_name if qparticipant == 3 or qparticipant == 4: self.meta.cols["partenaire"]["hide"] = True else: self.meta.cols["partenaire"]["hide"] = False return self.objs
def get_queryset(self): """ fournir les données à afficher dans la vue """ crudy = Crudy(self.request, APP_NAME) self.meta.url_back = "/whist/jeu/list/%s" % self.participant_id partie = get_object_or_404(WhistPartie, id=crudy.folder_id) objs = WhistJeu.objects.all()\ .filter(participant__partie__id=crudy.folder_id, participant__id=self.participant_id, jeu__lt=partie.jeu)\ .order_by('jeu')\ .values(*self.meta.cols_ordered) # tri des colonnes si version python 3.5 self.objs = self.sort_cols(objs) # Tri des colonnes dans l'ordre de cols participant_name = "" for row in self.objs: participant_name = row["participant__joueur__pseudo"] self.meta.title = 'Jeux de "%s"' % participant_name return self.objs
def f_whist_jeu_compute(request, ijeu): """ Calcul des points du jeux, du score et du rang du joueur """ crudy = Crudy(request, APP_NAME) jeux = WhistJeu.objects.all()\ .filter(participant__partie__id=crudy.folder_id)\ .order_by("jeu") score = {} for jeu in jeux: joueur_id = jeu.participant.joueur_id if jeu.jeu <= int(ijeu): if jeu.pari == jeu.real: jeu.points = 10 + 2 * jeu.pari else: jeu.points = -10 score[joueur_id] = score.get(joueur_id, 0) + jeu.points jeu.score = score[joueur_id] jeu.save() # Attribution des médailles jeux = WhistJeu.objects.all()\ .filter(participant__partie__id=crudy.folder_id)\ .order_by("jeu", "-score") gold = 1000 silver = 1000 bronze = 1000 rupt_jeu = 0 last_pk = 0 for jeu in jeux: if rupt_jeu != jeu.jeu: # changement de jeu rupt_jeu = jeu.jeu gold = 1000 silver = 1000 bronze = 1000 # Médaille de chocolat if last_pk != 0: last_jeu = get_object_or_404(WhistJeu, pk=last_pk) last_jeu.medal = 9 last_jeu.save() last_pk = jeu.pk jeu.medal = 0 if gold == 1000: gold = jeu.score jeu.medal = 1 elif gold == jeu.score: jeu.medal = 1 elif silver == 1000: silver = jeu.score jeu.medal = 2 elif silver == jeu.score: jeu.medal = 2 elif bronze == 1000: bronze = jeu.score jeu.medal = 3 elif bronze == jeu.score: jeu.medal = 3 jeu.save() # Médaille de chocolat if last_pk != 0: last_jeu = get_object_or_404(WhistJeu, pk=last_pk) last_jeu.medal = 9 last_jeu.save() # maj partie jeu en cours partie = get_object_or_404(WhistPartie, id=crudy.folder_id) if partie.jeu == int(ijeu) and int(ijeu) <= last_jeu.jeu: partie.jeu = int(ijeu) + 1 partie.modified = False partie.save() return redirect("v_whist_jeu_list", partie.jeu)
def get_queryset(self): """ fournir les données à afficher dans la vue """ crudy = Crudy(self.request, APP_NAME) # prise en compte de la colonne à trier en fonction de sort if self.sort == "score": crudy.sort = "score" if self.sort == "participant": crudy.sort = "participant" if crudy.sort == "score": order_by = ( 'jeu', '-score', ) else: order_by = ( 'jeu', 'participant__order', ) partie = get_object_or_404(WhistPartie, id=crudy.folder_id) self.meta.whist_carte = partie.cartes crudy.modified = partie.modified objs = self.meta.model.objects.all()\ .filter(participant__partie__id__exact=crudy.folder_id)\ .order_by(*order_by)\ .values(*self.meta.cols_ordered) objs_all = self.sort_cols(objs) qparticipant = WhistParticipant.objects.all().filter( partie__id__exact=crudy.folder_id).count() if qparticipant > 0: self.paginator = Paginator(objs_all, qparticipant) self.objs = self.paginator.page(self.page) # comptage de nombre de plis demandés et réalisés qplis = 0 qreal = 0 qcarte = 0 for obj in self.objs: qplis += obj["pari"] qreal += obj["real"] qcarte = obj["carte"] crudy.cartes = [] for pp in range(1, self.paginator.num_pages + 1): if pp <= self.paginator.num_pages / 2: crudy.cartes.append((pp, pp)) else: crudy.cartes.append( (pp, self.paginator.num_pages - pp + 1)) crudy.action_param = self.page crudy.jeu = int(self.page) partie = get_object_or_404(WhistPartie, id=crudy.folder_id) crudy.jeu_current = partie.jeu if int(crudy.jeu) > partie.jeu + 1: self.meta.url_actions = [] if qreal != qcarte: self.meta.url_actions = [] self.meta.cols["pari"]["subtitle"] = "%s / %s" % (qplis, qcarte) self.meta.cols["real"]["subtitle"] = "%s / %s" % (qreal, qcarte) else: self.meta.url_actions = [] self.meta.url_actions = [] if crudy.modified: self.meta.url_actions.append( ("f_whist_jeu_compute", "Calculer les points")) crudy.url_sort = 'v_whist_jeu_sort' return self.objs