From e98693b21403d32f0e2d91a379f964ab8ef4f6f7 Mon Sep 17 00:00:00 2001 From: Yohann D'ANELLO <yohann.danello@gmail.com> Date: Tue, 31 Mar 2020 16:22:11 +0200 Subject: [PATCH] Memberships are optional for clubs --- apps/member/fixtures/initial.json | 2 ++ apps/member/models.py | 21 +++++++++++++++++++++ apps/permission/fixtures/initial.json | 2 +- templates/member/club_form.html | 20 ++++++++++++++++++++ templates/member/club_info.html | 21 ++++++++++----------- 5 files changed, 54 insertions(+), 12 deletions(-) diff --git a/apps/member/fixtures/initial.json b/apps/member/fixtures/initial.json index bba1e7ac..649cbbc1 100644 --- a/apps/member/fixtures/initial.json +++ b/apps/member/fixtures/initial.json @@ -5,6 +5,7 @@ "fields": { "name": "BDE", "email": "tresorerie.bde@example.com", + "require_memberships": true, "membership_fee": 500, "membership_duration": "396 00:00:00", "membership_start": "213 00:00:00", @@ -17,6 +18,7 @@ "fields": { "name": "Kfet", "email": "tresorerie.bde@example.com", + "require_memberships": true, "membership_fee": 3500, "membership_duration": "396 00:00:00", "membership_start": "213 00:00:00", diff --git a/apps/member/models.py b/apps/member/models.py index d0051e59..377cc010 100644 --- a/apps/member/models.py +++ b/apps/member/models.py @@ -77,22 +77,34 @@ class Club(models.Model): ) # Memberships + + # When set to False, the membership system won't be used. + # Useful to create notes for activities or departments. + require_memberships = models.BooleanField( + default=True, + verbose_name=_("require memberships"), + ) + membership_fee = models.PositiveIntegerField( + default=0, verbose_name=_('membership fee'), ) membership_duration = models.DurationField( + blank=True, null=True, verbose_name=_('membership duration'), help_text=_('The longest time a membership can last ' '(NULL = infinite).'), ) membership_start = models.DurationField( + blank=True, null=True, verbose_name=_('membership start'), help_text=_('How long after January 1st the members can renew ' 'their membership.'), ) membership_end = models.DurationField( + blank=True, null=True, verbose_name=_('membership end'), help_text=_('How long the membership can last after January 1st ' @@ -100,6 +112,15 @@ class Club(models.Model): 'membership.'), ) + def save(self, force_insert=False, force_update=False, using=None, + update_fields=None): + if not self.require_memberships: + self.membership_fee = 0 + self.membership_duration = None + self.membership_start = None + self.membership_end = None + super().save(force_insert, force_update, update_fields) + class Meta: verbose_name = _("club") verbose_name_plural = _("clubs") diff --git a/apps/permission/fixtures/initial.json b/apps/permission/fixtures/initial.json index 04920cfb..5bf0d77d 100644 --- a/apps/permission/fixtures/initial.json +++ b/apps/permission/fixtures/initial.json @@ -842,7 +842,7 @@ 35, 36, 39, - 40, + 40 ] } }, diff --git a/templates/member/club_form.html b/templates/member/club_form.html index 99c254e3..7abe9db9 100644 --- a/templates/member/club_form.html +++ b/templates/member/club_form.html @@ -9,3 +9,23 @@ <button class="btn btn-primary" type="submit">{% trans "Submit" %}</button> </form> {% endblock %} + +{% block extrajavascript %} + <script> + require_memberships_obj = $("#id_require_memberships"); + + if (!require_memberships_obj.is(":checked")) { + $("#div_id_membership_fee").toggle(); + $("#div_id_membership_duration").toggle(); + $("#div_id_membership_start").toggle(); + $("#div_id_membership_end").toggle(); + } + + require_memberships_obj.change(function () { + $("#div_id_membership_fee").toggle(); + $("#div_id_membership_duration").toggle(); + $("#div_id_membership_start").toggle(); + $("#div_id_membership_end").toggle(); + }); + </script> +{% endblock %} diff --git a/templates/member/club_info.html b/templates/member/club_info.html index 907914be..039583c5 100644 --- a/templates/member/club_info.html +++ b/templates/member/club_info.html @@ -18,26 +18,25 @@ <dd class="col-xl-6"> {{ club.parent_club.name}}</dd> {% endif %} - <dt class="col-xl-6">{% trans 'membership start'|capfirst %}</dt> - <dd class="col-xl-6">{{ club.membership_start }}</dd> + {% if club.require_memberships %} + <dt class="col-xl-6">{% trans 'membership start'|capfirst %}</dt> + <dd class="col-xl-6">{{ club.membership_start }}</dd> - <dt class="col-xl-6">{% trans 'membership end'|capfirst %}</dt> - <dd class="col-xl-6">{{ club.membership_end }}</dd> + <dt class="col-xl-6">{% trans 'membership end'|capfirst %}</dt> + <dd class="col-xl-6">{{ club.membership_end }}</dd> - <dt class="col-xl-6">{% trans 'membership duration'|capfirst %}</dt> - <dd class="col-xl-6">{{ club.membership_duration }}</dd> + <dt class="col-xl-6">{% trans 'membership duration'|capfirst %}</dt> + <dd class="col-xl-6">{{ club.membership_duration }}</dd> - <dt class="col-xl-6">{% trans 'membership fee'|capfirst %}</dt> - <dd class="col-xl-6">{{ club.membership_fee|pretty_money }}</dd> + <dt class="col-xl-6">{% trans 'membership fee'|capfirst %}</dt> + <dd class="col-xl-6">{{ club.membership_fee|pretty_money }}</dd> + {% endif %} <dt class="col-xl-6"><a href="{% url 'member:club_alias' club.pk %}">{% trans 'aliases'|capfirst %}</a></dt> <dd class="col-xl-6 text-truncate">{{ object.note.alias_set.all|join:", " }}</dd> <dt class="col-xl-3">{% trans 'email'|capfirst %}</dt> <dd class="col-xl-9"><a href="mailto:{{ club.email }}">{{ club.email }}</a></dd> - - <dt class="col-xl-6"><a href="{% url 'member:club_linked_note_list' pk=club.pk %}">{% trans 'linked notes'|capfirst %}</a></dt> - <dd class="col-xl-6 text-truncate">{{ club.linked_notes.all|join:", " }}</dd> </dl> </div> <div class="card-footer text-center"> -- GitLab