mirror of
				https://gitlab.crans.org/bde/nk20
				synced 2025-11-04 09:12:11 +01:00 
			
		
		
		
	Merge branch 'master' into rights
This commit is contained in:
		@@ -6,7 +6,15 @@ from django.contrib.auth.forms import UserChangeForm, UserCreationForm
 | 
			
		||||
from django.contrib.auth.models import User
 | 
			
		||||
from django import forms
 | 
			
		||||
 | 
			
		||||
from .models import Profile, Club
 | 
			
		||||
from .models import Profile, Club, Membership
 | 
			
		||||
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
 | 
			
		||||
from crispy_forms.helper import FormHelper
 | 
			
		||||
from crispy_forms import layout, bootstrap
 | 
			
		||||
from crispy_forms.bootstrap import InlineField, FormActions, StrictButton, Div, Field
 | 
			
		||||
from crispy_forms.layout import Layout
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ProfileForm(forms.ModelForm):
 | 
			
		||||
    """
 | 
			
		||||
@@ -21,3 +29,33 @@ class ClubForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Club
 | 
			
		||||
        fields ='__all__'
 | 
			
		||||
 | 
			
		||||
class AddMembersForm(forms.Form):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        fields = ('',)
 | 
			
		||||
 | 
			
		||||
class MembershipForm(forms.ModelForm):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        model = Membership
 | 
			
		||||
        fields = ('user','roles','date_start')
 | 
			
		||||
 | 
			
		||||
MemberFormSet = forms.modelformset_factory(Membership,
 | 
			
		||||
                                           form=MembershipForm,
 | 
			
		||||
                                           extra=2,
 | 
			
		||||
                                           can_delete=True)
 | 
			
		||||
 | 
			
		||||
class FormSetHelper(FormHelper):
 | 
			
		||||
    def __init__(self,*args,**kwargs):
 | 
			
		||||
        super().__init__(*args,**kwargs)
 | 
			
		||||
        self.form_tag = False
 | 
			
		||||
        self.form_method = 'POST'
 | 
			
		||||
        self.form_class='form-inline'
 | 
			
		||||
        # self.template = 'bootstrap/table_inline_formset.html'
 | 
			
		||||
        self.layout = Layout(
 | 
			
		||||
            Div(
 | 
			
		||||
                Div('user',css_class='col-sm-2'),
 | 
			
		||||
                Div('roles',css_class='col-sm-2'),
 | 
			
		||||
                Div('date_start',css_class='col-sm-2'),
 | 
			
		||||
                css_class="row formset-row",
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ from django.db import models
 | 
			
		||||
from django.db.models.signals import post_save
 | 
			
		||||
from django.dispatch import receiver
 | 
			
		||||
from django.utils.translation import gettext_lazy as _
 | 
			
		||||
from django.urls import reverse
 | 
			
		||||
from django.urls import reverse, reverse_lazy
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Profile(models.Model):
 | 
			
		||||
@@ -100,7 +100,7 @@ class Club(models.Model):
 | 
			
		||||
        return self.name
 | 
			
		||||
 | 
			
		||||
    def get_absolute_url(self):
 | 
			
		||||
        return reverse('member:club_detail', args=(self.pk,))
 | 
			
		||||
        return reverse_lazy('member:club_detail', args=(self.pk,))
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class Role(models.Model):
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								apps/member/tables.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								apps/member/tables.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
#!/usr/bin/env python
 | 
			
		||||
 | 
			
		||||
import django_tables2 as tables
 | 
			
		||||
from .models import Club
 | 
			
		||||
 | 
			
		||||
class ClubTable(tables.Table):
 | 
			
		||||
    class Meta:
 | 
			
		||||
        attrs = {'class':'table table-bordered table-condensed table-striped table-hover'}
 | 
			
		||||
        model = Club
 | 
			
		||||
        template_name = 'django_tables2/bootstrap.html'
 | 
			
		||||
        fields= ('id','name','email')
 | 
			
		||||
        row_attrs = {'class':'table-row',
 | 
			
		||||
                     'data-href': lambda record: record.pk }
 | 
			
		||||
@@ -13,6 +13,7 @@ urlpatterns = [
 | 
			
		||||
    path('signup/',views.UserCreateView.as_view(),name="signup"),
 | 
			
		||||
    path('club/',views.ClubListView.as_view(),name="club_list"),
 | 
			
		||||
    path('club/<int:pk>/',views.ClubDetailView.as_view(),name="club_detail"),
 | 
			
		||||
    path('club/<int:pk>/add_member/',views.ClubAddMemberView.as_view(),name="club_add_member"),
 | 
			
		||||
    path('club/create/',views.ClubCreateView.as_view(),name="club_create"),
 | 
			
		||||
    path('user/<int:pk>',views.UserDetailView.as_view(),name="user_detail")
 | 
			
		||||
]
 | 
			
		||||
 
 | 
			
		||||
@@ -9,10 +9,16 @@ from django.views.generic import CreateView, ListView, DetailView
 | 
			
		||||
from django.http import HttpResponseRedirect
 | 
			
		||||
from django.contrib.auth.forms import UserCreationForm
 | 
			
		||||
from django.urls import reverse_lazy
 | 
			
		||||
from django.db.models import Q
 | 
			
		||||
 | 
			
		||||
from .models import Profile, Club
 | 
			
		||||
from .forms import ProfileForm, ClubForm
 | 
			
		||||
from django_tables2.views import SingleTableView
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
from .models import Profile, Club, Membership
 | 
			
		||||
from .forms import ProfileForm, ClubForm,MembershipForm, MemberFormSet,FormSetHelper
 | 
			
		||||
from .tables import ClubTable
 | 
			
		||||
from note.models.transactions import Transaction
 | 
			
		||||
from note.tables import HistoryTable
 | 
			
		||||
class UserCreateView(CreateView):
 | 
			
		||||
    """
 | 
			
		||||
    Une vue pour inscrire un utilisateur et lui créer un profile
 | 
			
		||||
@@ -24,7 +30,7 @@ class UserCreateView(CreateView):
 | 
			
		||||
    second_form = UserCreationForm
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self,**kwargs):
 | 
			
		||||
        context = super(SignUp,self).get_context_data(**kwargs)
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
        context["user_form"] = self.second_form
 | 
			
		||||
 | 
			
		||||
        return context
 | 
			
		||||
@@ -39,9 +45,20 @@ class UserCreateView(CreateView):
 | 
			
		||||
        return super().form_valid(form)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class UserDetailView(LoginRequiredMixin,DetailView):
 | 
			
		||||
    model = Profile
 | 
			
		||||
    context_object_name = "profile"
 | 
			
		||||
    def get_context_data(slef,**kwargs):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
        user = context['profile'].user
 | 
			
		||||
       
 | 
			
		||||
        history_list = \
 | 
			
		||||
            Transaction.objects.all().filter(Q(source=user.note) | Q(destination=user.note))
 | 
			
		||||
        context['history_list'] = HistoryTable(history_list)
 | 
			
		||||
        club_list = \
 | 
			
		||||
            Membership.objects.all().filter(user=user).only("club")
 | 
			
		||||
        context['club_list'] = ClubTable(club_list)
 | 
			
		||||
        return context
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ClubCreateView(LoginRequiredMixin,CreateView):
 | 
			
		||||
@@ -54,14 +71,46 @@ class ClubCreateView(LoginRequiredMixin,CreateView):
 | 
			
		||||
    def form_valid(self,form):
 | 
			
		||||
        return super().form_valid(form)
 | 
			
		||||
   
 | 
			
		||||
class ClubListView(LoginRequiredMixin,ListView):
 | 
			
		||||
class ClubListView(LoginRequiredMixin,SingleTableView):
 | 
			
		||||
    """
 | 
			
		||||
    List TransactionsTemplates
 | 
			
		||||
    List existing tables
 | 
			
		||||
    """
 | 
			
		||||
    model = Club
 | 
			
		||||
    form_class = ClubForm
 | 
			
		||||
    table_class = ClubTable
 | 
			
		||||
 | 
			
		||||
class ClubDetailView(LoginRequiredMixin,DetailView):
 | 
			
		||||
    """
 | 
			
		||||
    """
 | 
			
		||||
    model = Club
 | 
			
		||||
    context_object_name="club"
 | 
			
		||||
 | 
			
		||||
    def get_context_data(self,**kwargs):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
        club = context["club"]
 | 
			
		||||
        club_transactions =  \
 | 
			
		||||
            Transaction.objects.all().filter(Q(source=club.note) | Q(destination=club.note))
 | 
			
		||||
        context['history_list'] = HistoryTable(club_transactions)
 | 
			
		||||
        club_member = \
 | 
			
		||||
            Membership.objects.all().filter(club=club)
 | 
			
		||||
        # TODO: consider only valid Membership
 | 
			
		||||
        context['member_list'] = club_member
 | 
			
		||||
        return context
 | 
			
		||||
  
 | 
			
		||||
class ClubAddMemberView(LoginRequiredMixin,CreateView):
 | 
			
		||||
    model = Membership
 | 
			
		||||
    form_class = MembershipForm
 | 
			
		||||
    template_name = 'member/add_members.html'
 | 
			
		||||
    def get_context_data(self,**kwargs):
 | 
			
		||||
        context = super().get_context_data(**kwargs)
 | 
			
		||||
        context['formset'] = MemberFormSet()
 | 
			
		||||
        context['helper'] = FormSetHelper()
 | 
			
		||||
        return context
 | 
			
		||||
   
 | 
			
		||||
    def post(self,request,*args,**kwargs):
 | 
			
		||||
        formset = MembershipFormset(request.POST)
 | 
			
		||||
        if formset.is_valid():
 | 
			
		||||
            return self.form_valid(formset)
 | 
			
		||||
        else:
 | 
			
		||||
            return self.form_invalid(formset)
 | 
			
		||||
 | 
			
		||||
    def form_valid(self,formset):
 | 
			
		||||
        formset.save()
 | 
			
		||||
        return super().form_valid(formset)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user