diff --git a/copanier/__init__.py b/copanier/__init__.py index 8968f41..f11f08a 100644 --- a/copanier/__init__.py +++ b/copanier/__init__.py @@ -106,7 +106,16 @@ async def auth_required(request, response): if not email: response.redirect = f"/sésame?next={request.path}" return response - user = Person(email=email) + + groups = Groups.load() + request["groups"] = groups + + group = groups.get_user_group(email) + user = Person( + email=email, + group_id=group.id, + group_name=group.name) + request["user"] = user session.user.set(user) @@ -183,14 +192,14 @@ async def home(request, response): @app.route("/groupes", methods=["GET"]) async def handle_groups(request, response): - response.html("groups.html", {"groups": Groups.load()}) + response.html("groups.html", {"groups": request["groups"]}) + @app.route("/groupes/{id}/rejoindre", method=["GET"]) async def join_group(request, response, id): - groups = Groups.load() user = session.user.get(None) - group = groups.add_user(user.email, id) - groups.persist() + group = request["groups"].add_user(user.email, id) + request['groups'].persist() response.message(f"Vous avez bien rejoint le groupe '{group.name}'") response.redirect = "/groupes" @@ -207,9 +216,8 @@ async def create_group(request, response): id=slugify(form.get('name')), name=form.get('name'), members=members) - groups = Groups.load() - groups.add_group(group) - groups.persist() + request["groups"].add_group(group) + request["groups"].persist() response.message(f"Le groupe {group.name} à bien été créé") response.redirect = "/groupes" response.html("edit_group.html", group=group) @@ -217,9 +225,8 @@ async def create_group(request, response): @app.route("/groupes/{id}/éditer", methods=["GET", "POST"]) async def edit_group(request, response, id): - groups = Groups.load() - assert id in groups.groups, "Impossible de trouver le groupe" - group = groups.groups[id] + assert id in request["groups"].groups, "Impossible de trouver le groupe" + group = request["groups"].groups[id] if request.method == "POST": form = request.form members = [] @@ -227,20 +234,21 @@ async def edit_group(request, response, id): members = [m.strip() for m in form.get('members').split(',')] group.members = members group.name = form.get('name') - groups.groups[id] = group - groups.persist() + request["groups"].groups[id] = group + request["groups"].persist() response.redirect = "/groupes" response.html("edit_group.html", group=group) + @app.route("/groupes/{id}/supprimer", methods=["GET"]) async def delete_group(request, response, id): - groups = Groups.load() - assert id in groups.groups, "Impossible de trouver le groupe" - deleted = groups.groups.pop(id) - groups.persist() + assert id in request["groups"].groups, "Impossible de trouver le groupe" + deleted = request["groups"].groups.pop(id) + request["groups"].persist() response.message(f"Le groupe {deleted.name} à bien été supprimé") response.redirect = "/groupes" + @app.route("/archives", methods=["GET"]) async def view_archives(request, response): response.html("archive.html", {"deliveries": Delivery.all(is_archived=True)}) diff --git a/copanier/models.py b/copanier/models.py index a8c5f5f..77910e8 100644 --- a/copanier/models.py +++ b/copanier/models.py @@ -87,11 +87,14 @@ class Person(Base): email: str first_name: str = "" last_name: str = "" + group_id: str = "" + group_name: str = "" @property def is_staff(self): return not config.STAFF or self.email in config.STAFF + @dataclass class Group(Base): id: str @@ -136,6 +139,12 @@ class Groups(PersistedBase): if email in group.members: group.members.remove(email) + def get_user_group(self, email): + for group in self.groups.values(): + if email in group.members: + return group + return None + @classmethod def init_fs(cls): cls.get_root().mkdir(parents=True, exist_ok=True) diff --git a/copanier/templates/base.html b/copanier/templates/base.html index 454ae48..7527d54 100644 --- a/copanier/templates/base.html +++ b/copanier/templates/base.html @@ -23,7 +23,7 @@ {% if request.user.is_staff %}  Nouvelle livraison  {% endif %} -  {{ request["user"].email }} +  {{ request["user"].email }} {% if request["user"].group_name %}({{ request["user"].group_name }}){% endif %} {% endif %} diff --git a/copanier/templates/home.html b/copanier/templates/home.html index d57ebb3..74265cc 100644 --- a/copanier/templates/home.html +++ b/copanier/templates/home.html @@ -9,4 +9,10 @@ {% include "includes/delivery_list.html" %} {% endwith %} Voir les livraisons archivées +
+ {% endblock body %}