diff --git a/apps/member/forms.py b/apps/member/forms.py index 9c25f2c2..80c2b49e 100644 --- a/apps/member/forms.py +++ b/apps/member/forms.py @@ -7,7 +7,6 @@ from crispy_forms.layout import Layout from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm from django.contrib.auth.models import User -from note.models.notes import NoteActivity from note_kfet.inputs import Autocomplete, AmountInput from permission.models import PermissionMask @@ -59,28 +58,6 @@ class ClubForm(forms.ModelForm): } -class NoteActivityForm(forms.ModelForm): - class Meta: - model = NoteActivity - fields = ('note_name', 'club', 'controller', ) - widgets = { - "club": Autocomplete( - Club, - attrs={ - 'api_url': '/api/members/club/', - } - ), - "controller": Autocomplete( - User, - attrs={ - 'api_url': '/api/user/', - 'name_field': 'username', - 'placeholder': 'Nom ...', - } - ) - } - - class AddMembersForm(forms.Form): class Meta: fields = ('',) diff --git a/apps/member/urls.py b/apps/member/urls.py index f1a5c2bd..7f4bf0d5 100644 --- a/apps/member/urls.py +++ b/apps/member/urls.py @@ -16,14 +16,6 @@ urlpatterns = [ path('club//update/', views.ClubUpdateView.as_view(), name="club_update"), path('club//update_pic/', views.ClubPictureUpdateView.as_view(), name="club_update_pic"), path('club//aliases/', views.ClubAliasView.as_view(), name="club_alias"), - path('club//linked_notes/', views.ClubLinkedNotesView.as_view(), - name="club_linked_note_list"), - path('club//linked_notes/create/', views.ClubLinkedNoteCreateView.as_view(), - name="club_linked_note_create"), - path('club//linked_notes//', views.ClubLinkedNoteDetailView.as_view(), - name="club_linked_note_detail"), - path('club//linked_notes//update/', views.ClubLinkedNoteUpdateView.as_view(), - name="club_linked_note_update"), path('user/', views.UserListView.as_view(), name="user_list"), path('user/', views.UserDetailView.as_view(), name="user_detail"), diff --git a/apps/member/views.py b/apps/member/views.py index 932899ff..9ca7d76a 100644 --- a/apps/member/views.py +++ b/apps/member/views.py @@ -18,15 +18,14 @@ from django_tables2.views import SingleTableView from rest_framework.authtoken.models import Token from note.forms import ImageForm from note.models import Alias, NoteUser -from note.models.notes import NoteActivity from note.models.transactions import Transaction -from note.tables import HistoryTable, AliasTable, NoteActivityTable +from note.tables import HistoryTable, AliasTable from permission.backends import PermissionBackend from permission.views import ProtectQuerysetMixin from .filters import UserFilter, UserFilterFormHelper from .forms import SignUpForm, ProfileForm, ClubForm, MembershipForm, MemberFormSet, FormSetHelper, \ - CustomAuthenticationForm, NoteActivityForm + CustomAuthenticationForm from .models import Club, Membership from .tables import ClubTable, UserTable @@ -357,82 +356,3 @@ class ClubAddMemberView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): def form_valid(self, formset): formset.save() return super().form_valid(formset) - - -class ClubLinkedNotesView(ProtectQuerysetMixin, LoginRequiredMixin, SingleTableView): - model = NoteActivity - table_class = NoteActivityTable - - def get_queryset(self): - return super().get_queryset().filter(club=self.get_object()) - - def get_object(self): - if hasattr(self, 'object'): - return self.object - self.object = Club.objects.filter(PermissionBackend.filter_queryset(self.request.user, Club, "view"))\ - .get(pk=int(self.kwargs["pk"])) - return self.object - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - - club = ctx["object"] = ctx["club"] = self.get_object() - - empty_note = NoteActivity(note_name="", club=club, controller=self.request.user) - ctx["can_create"] = PermissionBackend().has_perm(self.request.user, "note.add_noteactivity", empty_note) - - return ctx - - -class ClubLinkedNoteCreateView(ProtectQuerysetMixin, LoginRequiredMixin, CreateView): - model = NoteActivity - form_class = NoteActivityForm - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - - club = Club.objects.filter(PermissionBackend.filter_queryset(self.request.user, Club, "view"))\ - .get(pk=self.kwargs["club_pk"]) - ctx["object"] = ctx["club"] = club - ctx["form"].fields["club"].initial = club - - return ctx - - def get_success_url(self): - self.object.refresh_from_db() - return reverse_lazy('member:club_linked_note_detail', - kwargs={"club_pk": self.object.club.pk, "pk": self.object.pk}) - - -class ClubLinkedNoteUpdateView(ProtectQuerysetMixin, LoginRequiredMixin, UpdateView): - model = NoteActivity - form_class = NoteActivityForm - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - - ctx["club"] = Club.objects.filter(PermissionBackend.filter_queryset(self.request.user, Club, "view"))\ - .get(pk=self.kwargs["club_pk"]) - - return ctx - - def get_success_url(self): - return reverse_lazy('member:club_linked_note_detail', - kwargs={"club_pk": self.object.club.pk, "pk": self.object.pk}) - - -class ClubLinkedNoteDetailView(ProtectQuerysetMixin, LoginRequiredMixin, DetailView): - model = NoteActivity - - def get_context_data(self, **kwargs): - ctx = super().get_context_data(**kwargs) - - note = self.get_queryset().filter(pk=self.kwargs["pk"]).get() - - transactions = Transaction.objects.filter(Q(source=note) | Q(destination=note))\ - .filter(PermissionBackend.filter_queryset(self.request.user, Transaction, "view")).order_by("-id") - ctx['history_list'] = HistoryTable(transactions) - ctx["note"] = note - ctx["club"] = note.club - - return ctx diff --git a/apps/note/admin.py b/apps/note/admin.py index f0dede17..702d3350 100644 --- a/apps/note/admin.py +++ b/apps/note/admin.py @@ -6,7 +6,7 @@ from django.utils.translation import gettext_lazy as _ from polymorphic.admin import PolymorphicChildModelAdmin, \ PolymorphicChildModelFilter, PolymorphicParentModelAdmin -from .models.notes import Alias, Note, NoteClub, NoteSpecial, NoteUser, NoteActivity +from .models.notes import Alias, Note, NoteClub, NoteSpecial, NoteUser from .models.transactions import Transaction, TemplateCategory, TransactionTemplate, \ RecurrentTransaction, MembershipTransaction @@ -24,7 +24,7 @@ class NoteAdmin(PolymorphicParentModelAdmin): """ Parent regrouping all note types as children """ - child_models = (NoteClub, NoteSpecial, NoteUser, NoteActivity) + child_models = (NoteClub, NoteSpecial, NoteUser) list_filter = ( PolymorphicChildModelFilter, 'is_active', @@ -74,14 +74,6 @@ class NoteSpecialAdmin(PolymorphicChildModelAdmin): readonly_fields = ('balance',) -@admin.register(NoteActivity) -class NoteActivityAdmin(PolymorphicChildModelAdmin): - """ - Child for a special note, see NoteAdmin - """ - readonly_fields = ('balance',) - - @admin.register(NoteUser) class NoteUserAdmin(PolymorphicChildModelAdmin): """ diff --git a/apps/note/api/serializers.py b/apps/note/api/serializers.py index a445fef9..5625e5b5 100644 --- a/apps/note/api/serializers.py +++ b/apps/note/api/serializers.py @@ -4,7 +4,7 @@ from rest_framework import serializers from rest_polymorphic.serializers import PolymorphicSerializer -from ..models.notes import Note, NoteClub, NoteSpecial, NoteUser, Alias, NoteActivity +from ..models.notes import Note, NoteClub, NoteSpecial, NoteUser, Alias from ..models.transactions import TransactionTemplate, Transaction, MembershipTransaction, TemplateCategory, \ RecurrentTransaction, SpecialTransaction @@ -69,22 +69,6 @@ class NoteUserSerializer(serializers.ModelSerializer): return str(obj) -class NoteActivitySerializer(serializers.ModelSerializer): - """ - REST API Serializer for User's notes. - The djangorestframework plugin will analyse the model `NoteActivity` and parse all fields in the API. - """ - name = serializers.SerializerMethodField() - - class Meta: - model = NoteActivity - fields = '__all__' - read_only_fields = ('note', 'user', ) - - def get_name(self, obj): - return str(obj) - - class AliasSerializer(serializers.ModelSerializer): """ REST API Serializer for Aliases. @@ -107,7 +91,6 @@ class NotePolymorphicSerializer(PolymorphicSerializer): NoteUser: NoteUserSerializer, NoteClub: NoteClubSerializer, NoteSpecial: NoteSpecialSerializer, - NoteActivity: NoteActivitySerializer, } class Meta: diff --git a/apps/note/models/__init__.py b/apps/note/models/__init__.py index dd024963..e9c8a0a9 100644 --- a/apps/note/models/__init__.py +++ b/apps/note/models/__init__.py @@ -1,13 +1,13 @@ # Copyright (C) 2018-2020 by BDE ENS Paris-Saclay # SPDX-License-Identifier: GPL-3.0-or-later -from .notes import Alias, Note, NoteClub, NoteSpecial, NoteUser, NoteActivity +from .notes import Alias, Note, NoteClub, NoteSpecial, NoteUser from .transactions import MembershipTransaction, Transaction, \ TemplateCategory, TransactionTemplate, RecurrentTransaction, SpecialTransaction __all__ = [ # Notes - 'Alias', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser', 'NoteActivity', + 'Alias', 'Note', 'NoteClub', 'NoteSpecial', 'NoteUser', # Transactions 'MembershipTransaction', 'Transaction', 'TemplateCategory', 'TransactionTemplate', 'RecurrentTransaction', 'SpecialTransaction', diff --git a/apps/note/models/notes.py b/apps/note/models/notes.py index 1228ca00..9282bde9 100644 --- a/apps/note/models/notes.py +++ b/apps/note/models/notes.py @@ -4,13 +4,11 @@ import unicodedata from django.conf import settings -from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.core.validators import RegexValidator from django.db import models from django.utils.translation import gettext_lazy as _ from polymorphic.models import PolymorphicModel -from member.models import Club """ Defines each note types @@ -176,40 +174,6 @@ class NoteSpecial(Note): return self.special_type -class NoteActivity(Note): - """ - A :model:`note.Note` for accounts that are not attached to a user neither to a club, - that only need to store and transfer money (notes for activities, departments, ...) - """ - - note_name = models.CharField( - verbose_name=_('name'), - max_length=255, - unique=True, - ) - - club = models.ForeignKey( - Club, - on_delete=models.PROTECT, - related_name="linked_notes", - verbose_name=_("club"), - ) - - controller = models.ForeignKey( - User, - on_delete=models.PROTECT, - related_name="+", - verbose_name=_("controller"), - ) - - class Meta: - verbose_name = _("activity note") - verbose_name_plural = _("activity notes") - - def __str__(self): - return self.note_name - - class Alias(models.Model): """ points toward a :model:`note.NoteUser` or :model;`note.NoteClub` instance. diff --git a/apps/note/tables.py b/apps/note/tables.py index 2aba4684..0d83e3cc 100644 --- a/apps/note/tables.py +++ b/apps/note/tables.py @@ -9,7 +9,7 @@ from django.utils.html import format_html from django_tables2.utils import A from django.utils.translation import gettext_lazy as _ -from .models.notes import Alias, NoteActivity +from .models.notes import Alias from .models.transactions import Transaction, TransactionTemplate from .templatetags.pretty_money import pretty_money @@ -121,24 +121,6 @@ class AliasTable(tables.Table): attrs={'td': {'class': 'col-sm-1'}}) -class NoteActivityTable(tables.Table): - note_name = tables.LinkColumn( - "member:club_linked_note_detail", - args=[A("club.pk"), A("pk")], - ) - - def render_balance(self, value): - return pretty_money(value) - - class Meta: - attrs = { - 'class': 'table table-condensed table-striped table-hover' - } - model = NoteActivity - fields = ('note_name', 'balance',) - template_name = 'django_tables2/bootstrap4.html' - - class ButtonTable(tables.Table): class Meta: attrs = { diff --git a/apps/permission/backends.py b/apps/permission/backends.py index f838fc1f..30a273cc 100644 --- a/apps/permission/backends.py +++ b/apps/permission/backends.py @@ -5,7 +5,7 @@ from django.contrib.auth.backends import ModelBackend from django.contrib.auth.models import User, AnonymousUser from django.contrib.contenttypes.models import ContentType from django.db.models import Q, F -from note.models import Note, NoteUser, NoteClub, NoteSpecial, NoteActivity +from note.models import Note, NoteUser, NoteClub, NoteSpecial from note_kfet.middlewares import get_current_session from member.models import Membership, Club @@ -49,7 +49,6 @@ class PermissionBackend(ModelBackend): NoteUser=NoteUser, NoteClub=NoteClub, NoteSpecial=NoteSpecial, - NoteActivity=NoteActivity, F=F, Q=Q ) diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index e0430530..04920cfb 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -176,7 +176,7 @@ "note", "alias" ], - "query": "[\"OR\", {\"note__in\": [\"NoteUser\", \"objects\", [\"filter\", {\"user__membership__club__name\": \"Kfet\"}], [\"all\"]]}, {\"note__in\": [\"NoteClub\", \"objects\", [\"all\"]]}, {\"note__in\": [\"NoteActivity\", \"objects\", [\"all\"]]}]", + "query": "[\"OR\", {\"note__in\": [\"NoteUser\", \"objects\", [\"filter\", {\"user__membership__club__name\": \"Kfet\"}], [\"all\"]]}, {\"note__in\": [\"NoteClub\", \"objects\", [\"all\"]]}]", "type": "view", "mask": 1, "field": "", @@ -798,96 +798,6 @@ "description": "Update club" } }, - { - "model": "permission.permission", - "pk": 48, - "fields": { - "model": [ - "note", - "noteactivity" - ], - "query": "{\"club\": [\"club\"]}", - "type": "change", - "mask": 1, - "field": "", - "description": "Manage notes that are linked to a club" - } - }, - { - "model": "permission.permission", - "pk": 49, - "fields": { - "model": [ - "note", - "noteactivity" - ], - "query": "{\"club\": [\"club\"]}", - "type": "view", - "mask": 1, - "field": "", - "description": "View notes that are linked to a club" - } - }, - { - "model": "permission.permission", - "pk": 50, - "fields": { - "model": [ - "note", - "transaction" - ], - "query": "[\"AND\", [\"OR\", {\"source__noteactivity__controller\": [\"user\"]}, {\"destination__noteactivity__controller\": [\"user\"]}], [\"OR\", {\"amount__lte\": {\"F\": [\"ADD\", [\"F\", \"source__balance\"], 5000]}}, {\"valid\": false}]]", - "type": "add", - "mask": 2, - "field": "", - "description": "Add transactions linked to a noteactivity" - } - }, - { - "model": "permission.permission", - "pk": 51, - "fields": { - "model": [ - "note", - "transaction" - ], - "query": "[\"AND\", [\"OR\", {\"source__noteactivity__controller\": [\"user\"]}, {\"destination__noteactivity__controller\": [\"user\"]}]]", - "type": "view", - "mask": 1, - "field": "", - "description": "View transactions linked to a noteactivity" - } - }, - { - "model": "permission.permission", - "pk": 52, - "fields": { - "model": [ - "note", - "note" - ], - "query": "{\"noteactivity__controller\": [\"user\"]}", - "type": "view", - "mask": 1, - "field": "", - "description": "View note activity" - } - }, - { - "model": "permission.permission", - "pk": 53, - "fields": { - "model": [ - "note", - "noteactivity" - ], - "query": "{\"controller\": [\"user\"]}", - "type": "view", - "mask": 1, - "field": "", - "description": "View note activity" - } - }, { "model": "permission.rolepermissions", "pk": 1, @@ -915,6 +825,7 @@ 3, 4, 5, + 6, 7, 8, 9, @@ -932,11 +843,6 @@ 36, 39, 40, - 6, - 52, - 53, - 51, - 50 ] } }, @@ -947,9 +853,9 @@ "role": 8, "permissions": [ 19, + 20, 21, - 22, - 20 + 22 ] } }, @@ -997,9 +903,7 @@ "role": 7, "permissions": [ 22, - 47, - 48, - 49 + 47 ] } } diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index c83bf321..695bdf95 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -456,18 +456,6 @@ msgstr "" msgid "special notes" msgstr "" -#: apps/note/models/notes.py:202 templates/note/noteactivity_detail.html:22 -msgid "controller" -msgstr "" - -#: apps/note/models/notes.py:206 -msgid "activity note" -msgstr "" - -#: apps/note/models/notes.py:207 -msgid "activity notes" -msgstr "" - #: apps/note/models/notes.py:230 msgid "Invalid alias" msgstr "" @@ -626,7 +614,7 @@ msgstr "" #: templates/activity/activity_form.html:9 #: templates/activity/activity_invite.html:8 #: templates/django_filters/rest_framework/form.html:5 -#: templates/member/club_form.html:9 templates/note/noteactivity_form.html:14 +#: templates/member/club_form.html:9 #: templates/treasury/invoice_form.html:46 msgid "Submit" msgstr "" @@ -903,7 +891,6 @@ msgid "Add member" msgstr "" #: templates/member/club_info.html:45 templates/note/conso_form.html:121 -#: templates/note/noteactivity_detail.html:31 msgid "Edit" msgstr "" @@ -932,7 +919,6 @@ msgid "Member of the Club" msgstr "" #: templates/member/club_tables.html:22 templates/member/profile_tables.html:22 -#: templates/note/noteactivity_detail.html:42 msgid "Transaction history" msgstr "" @@ -965,7 +951,6 @@ msgid "Change password" msgstr "" #: templates/member/profile_info.html:33 -#: templates/note/noteactivity_detail.html:25 msgid "balance" msgstr "" @@ -1014,22 +999,6 @@ msgstr "" msgid "Recent transactions history" msgstr "" -#: templates/note/noteactivity_detail.html:15 -msgid "Linked note:" -msgstr "" - -#: templates/note/noteactivity_detail.html:19 -msgid "attached club" -msgstr "" - -#: templates/note/noteactivity_list.html:15 -msgid "linked notes of club" -msgstr "" - -#: templates/note/noteactivity_list.html:24 -msgid "Add new note" -msgstr "" - #: templates/note/transaction_form.html:15 msgid "Gift" msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index cd01499d..d2a78d06 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -457,18 +457,6 @@ msgstr "note spéciale" msgid "special notes" msgstr "notes spéciales" -#: apps/note/models/notes.py:202 templates/note/noteactivity_detail.html:22 -msgid "controller" -msgstr "contrôleur" - -#: apps/note/models/notes.py:206 -msgid "activity note" -msgstr "note d'activité" - -#: apps/note/models/notes.py:207 -msgid "activity notes" -msgstr "notes d'activité" - #: apps/note/models/notes.py:230 msgid "Invalid alias" msgstr "Alias invalide" @@ -627,7 +615,7 @@ msgstr "Trésorerie" #: templates/activity/activity_form.html:9 #: templates/activity/activity_invite.html:8 #: templates/django_filters/rest_framework/form.html:5 -#: templates/member/club_form.html:9 templates/note/noteactivity_form.html:14 +#: templates/member/club_form.html:9 #: templates/treasury/invoice_form.html:46 msgid "Submit" msgstr "Envoyer" @@ -906,7 +894,6 @@ msgid "Add member" msgstr "Ajouter un membre" #: templates/member/club_info.html:45 templates/note/conso_form.html:121 -#: templates/note/noteactivity_detail.html:31 msgid "Edit" msgstr "Éditer" @@ -935,7 +922,6 @@ msgid "Member of the Club" msgstr "Membre du club" #: templates/member/club_tables.html:22 templates/member/profile_tables.html:22 -#: templates/note/noteactivity_detail.html:42 msgid "Transaction history" msgstr "Historique des transactions" @@ -968,7 +954,6 @@ msgid "Change password" msgstr "Changer le mot de passe" #: templates/member/profile_info.html:33 -#: templates/note/noteactivity_detail.html:25 msgid "balance" msgstr "solde du compte" @@ -1017,22 +1002,6 @@ msgstr "Consommations doubles" msgid "Recent transactions history" msgstr "Historique des transactions récentes" -#: templates/note/noteactivity_detail.html:15 -msgid "Linked note:" -msgstr "note attachée :" - -#: templates/note/noteactivity_detail.html:19 -msgid "attached club" -msgstr "club lié" - -#: templates/note/noteactivity_list.html:15 -msgid "linked notes of club" -msgstr "Notes liées au club" - -#: templates/note/noteactivity_list.html:24 -msgid "Add new note" -msgstr "Ajouter une note" - #: templates/note/transaction_form.html:15 msgid "Gift" msgstr "Don" diff --git a/templates/note/noteactivity_detail.html b/templates/note/noteactivity_detail.html deleted file mode 100644 index aab9e055..00000000 --- a/templates/note/noteactivity_detail.html +++ /dev/null @@ -1,60 +0,0 @@ -{% extends "member/noteowner_detail.html" %} - -{% load i18n %} -{% load render_table from django_tables2 %} -{% load pretty_money %} -{% load perms %} - -{% block profile_info %} -{% include "member/club_info.html" %} -{% endblock %} - -{% block profile_content %} -
-
-

{% trans "Linked note:" %} {{ note.note_name }}

-
-
-
-
{% trans 'attached club'|capfirst %}
-
{{ club }}
- -
{% trans 'controller'|capfirst %}
-
{{ note.controller }}
- -
{% trans 'balance'|capfirst %}
-
{{ note.balance|pretty_money }}
-
- - {% if "change_"|has_perm:note %} - - {% endif %} -
- - -
- -
-
- {% render_table history_list %} -
-
-
-{% endblock %} - -{% block extrajavascript %} - -{% endblock %} diff --git a/templates/note/noteactivity_form.html b/templates/note/noteactivity_form.html deleted file mode 100644 index 5088c790..00000000 --- a/templates/note/noteactivity_form.html +++ /dev/null @@ -1,16 +0,0 @@ -{% extends "member/noteowner_detail.html" %} - -{% load i18n %} -{% load crispy_forms_tags %} - -{% block profile_info %} -{% include "member/club_info.html" %} -{% endblock %} - -{% block profile_content %} -
- {% csrf_token %} - {{ form|crispy }} - -
-{% endblock %} diff --git a/templates/note/noteactivity_list.html b/templates/note/noteactivity_list.html deleted file mode 100644 index 3cd5b786..00000000 --- a/templates/note/noteactivity_list.html +++ /dev/null @@ -1,29 +0,0 @@ -{% extends "member/noteowner_detail.html" %} - -{% load i18n %} -{% load render_table from django_tables2 %} - -{% block profile_info %} -{% include "member/club_info.html" %} -{% endblock %} - -{% block profile_content %} -
-
-
-
-
{% trans "linked notes of club"|capfirst %} {{ club.name }}
-
-
- {% render_table table %} -
-
- - {% if can_create %} - - - - {% endif %} -
-
-{% endblock %}