2022-11-02 23:10:48 +01:00
|
|
|
from django.db import models
|
2022-11-03 00:02:28 +01:00
|
|
|
from django.db.models import Q
|
2022-11-19 10:23:01 +01:00
|
|
|
from django.urls import reverse
|
2022-11-02 23:10:48 +01:00
|
|
|
from django_extensions.db.models import TimeStampedModel
|
|
|
|
|
2022-11-02 23:52:28 +01:00
|
|
|
from character.models import Character
|
|
|
|
from common.models import UniquelyNamedModel, UniquelyNamedModelManager
|
|
|
|
|
|
|
|
|
|
|
|
class PartyQuerySet(models.QuerySet):
|
|
|
|
def managed_by(self, user):
|
|
|
|
return self.filter(game_master=user)
|
|
|
|
|
|
|
|
def played_by(self, user):
|
|
|
|
return self.filter(characters__in=Character.objects.filter(player=user))
|
|
|
|
|
2022-11-03 00:02:28 +01:00
|
|
|
def related_to(self, user):
|
|
|
|
return self.filter(
|
|
|
|
Q(game_master=user)
|
|
|
|
| Q(characters__in=Character.objects.filter(player=user))
|
2022-11-09 17:38:37 +01:00
|
|
|
| Q(invited_characters__in=Character.objects.filter(player=user))
|
2022-11-03 00:02:28 +01:00
|
|
|
).distinct()
|
|
|
|
|
2022-11-06 15:35:32 +01:00
|
|
|
def invited_to(self, user):
|
|
|
|
return self.filter(invited_characters__in=Character.objects.filter(player=user))
|
|
|
|
|
2022-11-02 23:52:28 +01:00
|
|
|
|
|
|
|
class PartyManager(UniquelyNamedModelManager):
|
|
|
|
pass
|
2022-11-02 23:10:48 +01:00
|
|
|
|
|
|
|
|
|
|
|
class Party(UniquelyNamedModel, TimeStampedModel, models.Model):
|
|
|
|
game_master = models.ForeignKey(
|
|
|
|
"common.User",
|
|
|
|
on_delete=models.PROTECT,
|
|
|
|
related_name="parties",
|
|
|
|
verbose_name="meneur de jeu",
|
|
|
|
)
|
2022-11-06 15:19:21 +01:00
|
|
|
invited_characters = models.ManyToManyField(
|
|
|
|
"character.Character",
|
|
|
|
blank=True,
|
|
|
|
related_name="invites",
|
|
|
|
verbose_name="personnages invités",
|
|
|
|
)
|
2022-11-02 23:10:48 +01:00
|
|
|
characters = models.ManyToManyField(
|
|
|
|
"character.Character",
|
|
|
|
blank=True,
|
|
|
|
related_name="parties",
|
|
|
|
verbose_name="personnages",
|
|
|
|
)
|
|
|
|
|
2022-11-02 23:52:28 +01:00
|
|
|
objects = PartyManager.from_queryset(PartyQuerySet)()
|
|
|
|
|
2022-11-02 23:10:48 +01:00
|
|
|
class Meta(UniquelyNamedModel.Meta, TimeStampedModel.Meta):
|
|
|
|
verbose_name = "Groupe"
|
|
|
|
verbose_name_plural = "Groupes"
|
2022-11-19 10:23:01 +01:00
|
|
|
|
|
|
|
def get_absolute_url(self) -> str:
|
|
|
|
return reverse("party:details", kwargs={"pk": self.pk})
|
|
|
|
|
|
|
|
def reset_stats(self):
|
|
|
|
for character in self.characters.all():
|
|
|
|
character.reset_stats()
|