diff --git a/apps/member/fixtures/initial.json b/apps/member/fixtures/initial.json index bba1e7ac8de61ef1028e2eb99d306bc3032f62f2..649cbbc11f1de9c9d80877217422ac75285ef508 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 d0051e59d612019df3f4cb104857ba743c09e713..377cc010522429e4fe776d2dbde82c5a71e44a15 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 04920cfb7a1bcc967acdf373a3265e61c4607e70..5bf0d77dc58be23d1be76fbf04a00c64896222fa 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 99c254e3a2d550f39208a5f070fb7f7a8a328735..7abe9db9de6aaa1d461d7fad7951f8cfcec2f198 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 907914be1477ec9d8bb6e28e8ac94e8381017dd4..039583c5735f32d0f78f7f814fa952152241932f 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">