mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 01:12:08 +01:00 
			
		
		
		
	Memberships are optional for clubs
This commit is contained in:
		@@ -5,6 +5,7 @@
 | 
				
			|||||||
        "fields": {
 | 
					        "fields": {
 | 
				
			||||||
            "name": "BDE",
 | 
					            "name": "BDE",
 | 
				
			||||||
            "email": "tresorerie.bde@example.com",
 | 
					            "email": "tresorerie.bde@example.com",
 | 
				
			||||||
 | 
					            "require_memberships":  true,
 | 
				
			||||||
            "membership_fee": 500,
 | 
					            "membership_fee": 500,
 | 
				
			||||||
            "membership_duration": "396 00:00:00",
 | 
					            "membership_duration": "396 00:00:00",
 | 
				
			||||||
            "membership_start": "213 00:00:00",
 | 
					            "membership_start": "213 00:00:00",
 | 
				
			||||||
@@ -17,6 +18,7 @@
 | 
				
			|||||||
        "fields": {
 | 
					        "fields": {
 | 
				
			||||||
            "name": "Kfet",
 | 
					            "name": "Kfet",
 | 
				
			||||||
            "email": "tresorerie.bde@example.com",
 | 
					            "email": "tresorerie.bde@example.com",
 | 
				
			||||||
 | 
					            "require_memberships":  true,
 | 
				
			||||||
            "membership_fee": 3500,
 | 
					            "membership_fee": 3500,
 | 
				
			||||||
            "membership_duration": "396 00:00:00",
 | 
					            "membership_duration": "396 00:00:00",
 | 
				
			||||||
            "membership_start": "213 00:00:00",
 | 
					            "membership_start": "213 00:00:00",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,22 +77,34 @@ class Club(models.Model):
 | 
				
			|||||||
    )
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Memberships
 | 
					    # 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(
 | 
					    membership_fee = models.PositiveIntegerField(
 | 
				
			||||||
 | 
					        default=0,
 | 
				
			||||||
        verbose_name=_('membership fee'),
 | 
					        verbose_name=_('membership fee'),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    membership_duration = models.DurationField(
 | 
					    membership_duration = models.DurationField(
 | 
				
			||||||
 | 
					        blank=True,
 | 
				
			||||||
        null=True,
 | 
					        null=True,
 | 
				
			||||||
        verbose_name=_('membership duration'),
 | 
					        verbose_name=_('membership duration'),
 | 
				
			||||||
        help_text=_('The longest time a membership can last '
 | 
					        help_text=_('The longest time a membership can last '
 | 
				
			||||||
                    '(NULL = infinite).'),
 | 
					                    '(NULL = infinite).'),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    membership_start = models.DurationField(
 | 
					    membership_start = models.DurationField(
 | 
				
			||||||
 | 
					        blank=True,
 | 
				
			||||||
        null=True,
 | 
					        null=True,
 | 
				
			||||||
        verbose_name=_('membership start'),
 | 
					        verbose_name=_('membership start'),
 | 
				
			||||||
        help_text=_('How long after January 1st the members can renew '
 | 
					        help_text=_('How long after January 1st the members can renew '
 | 
				
			||||||
                    'their membership.'),
 | 
					                    'their membership.'),
 | 
				
			||||||
    )
 | 
					    )
 | 
				
			||||||
    membership_end = models.DurationField(
 | 
					    membership_end = models.DurationField(
 | 
				
			||||||
 | 
					        blank=True,
 | 
				
			||||||
        null=True,
 | 
					        null=True,
 | 
				
			||||||
        verbose_name=_('membership end'),
 | 
					        verbose_name=_('membership end'),
 | 
				
			||||||
        help_text=_('How long the membership can last after January 1st '
 | 
					        help_text=_('How long the membership can last after January 1st '
 | 
				
			||||||
@@ -100,6 +112,15 @@ class Club(models.Model):
 | 
				
			|||||||
                    'membership.'),
 | 
					                    '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:
 | 
					    class Meta:
 | 
				
			||||||
        verbose_name = _("club")
 | 
					        verbose_name = _("club")
 | 
				
			||||||
        verbose_name_plural = _("clubs")
 | 
					        verbose_name_plural = _("clubs")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -842,7 +842,7 @@
 | 
				
			|||||||
        35,
 | 
					        35,
 | 
				
			||||||
        36,
 | 
					        36,
 | 
				
			||||||
        39,
 | 
					        39,
 | 
				
			||||||
        40,
 | 
					        40
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,3 +9,23 @@
 | 
				
			|||||||
<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
 | 
					<button class="btn btn-primary" type="submit">{% trans "Submit" %}</button>
 | 
				
			||||||
</form>
 | 
					</form>
 | 
				
			||||||
{% endblock %}
 | 
					{% 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 %}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,26 +18,25 @@
 | 
				
			|||||||
                <dd class="col-xl-6"> {{ club.parent_club.name}}</dd>
 | 
					                <dd class="col-xl-6"> {{ club.parent_club.name}}</dd>
 | 
				
			||||||
            {% endif %}
 | 
					            {% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <dt class="col-xl-6">{% trans 'membership start'|capfirst %}</dt>
 | 
					            {% if club.require_memberships %}
 | 
				
			||||||
            <dd class="col-xl-6">{{ club.membership_start }}</dd>
 | 
					                <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>
 | 
					                <dt class="col-xl-6">{% trans 'membership end'|capfirst %}</dt>
 | 
				
			||||||
            <dd class="col-xl-6">{{ club.membership_end }}</dd>
 | 
					                <dd class="col-xl-6">{{ club.membership_end }}</dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <dt class="col-xl-6">{% trans 'membership duration'|capfirst %}</dt>
 | 
					                <dt class="col-xl-6">{% trans 'membership duration'|capfirst %}</dt>
 | 
				
			||||||
            <dd class="col-xl-6">{{ club.membership_duration }}</dd>
 | 
					                <dd class="col-xl-6">{{ club.membership_duration }}</dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <dt class="col-xl-6">{% trans 'membership fee'|capfirst %}</dt>
 | 
					                <dt class="col-xl-6">{% trans 'membership fee'|capfirst %}</dt>
 | 
				
			||||||
            <dd class="col-xl-6">{{ club.membership_fee|pretty_money }}</dd>
 | 
					                <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>
 | 
					            <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>
 | 
					            <dd class="col-xl-6 text-truncate">{{ object.note.alias_set.all|join:", " }}</dd>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            <dt class="col-xl-3">{% trans 'email'|capfirst %}</dt>
 | 
					            <dt class="col-xl-3">{% trans 'email'|capfirst %}</dt>
 | 
				
			||||||
            <dd class="col-xl-9"><a href="mailto:{{ club.email }}">{{ club.email }}</a></dd>
 | 
					            <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>
 | 
					        </dl>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
    <div class="card-footer text-center">
 | 
					    <div class="card-footer text-center">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user