mirror of
https://github.com/nanoy42/coope
synced 2024-11-22 11:23:11 +00:00
318 lines
No EOL
13 KiB
Python
318 lines
No EOL
13 KiB
Python
import simplejson as json
|
|
|
|
from django.shortcuts import render, redirect, get_object_or_404
|
|
from django.contrib import messages
|
|
from django.urls import reverse
|
|
from django.contrib.auth.decorators import login_required, permission_required
|
|
from django.http import HttpResponse
|
|
from django.forms.models import model_to_dict
|
|
from django.http import Http404
|
|
from django.core.mail import mail_admins
|
|
|
|
from coopeV3.acl import active_required
|
|
|
|
from .models import GeneralPreferences, Cotisation, PaymentMethod, PriceProfile, Improvement
|
|
|
|
from .forms import CotisationForm, PaymentMethodForm, GeneralPreferencesForm, PriceProfileForm, ImprovementForm
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.change_generalpreferences')
|
|
def generalPreferences(request):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.GeneralPreferencesForm` to edit the :class:`~preferences.models.GeneralPreferences`.
|
|
"""
|
|
gp,_ = GeneralPreferences.objects.get_or_create(pk=1)
|
|
form = GeneralPreferencesForm(request.POST or None, request.FILES or None, instance=gp)
|
|
if(form.is_valid()):
|
|
form.save()
|
|
messages.success(request, "Les préférences générales ont bien été mises à jour")
|
|
return render(request, "preferences/general_preferences.html", {"form": form})
|
|
|
|
########## Cotisations ##########
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_cotisation')
|
|
def cotisationsIndex(request):
|
|
"""
|
|
View which lists all the :class:`~preferences.models.Cotisation`.
|
|
"""
|
|
cotisations = Cotisation.objects.all()
|
|
return render(request, "preferences/cotisations_index.html", {"cotisations": cotisations})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.add_cotisation')
|
|
def addCotisation(request):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.CotisationForm` to create a :class:`~preferences.models.Cotisation`.
|
|
"""
|
|
form = CotisationForm(request.POST or None)
|
|
if(form.is_valid()):
|
|
cotisation = form.save()
|
|
messages.success(request, "La cotisation (" + str(cotisation.duration) + " jours, " + str(cotisation.amount) + "€) a bien été créée")
|
|
return redirect(reverse('preferences:cotisationsIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Création d'une cotisation", "form_button": "Créer", "form_button_icon": "plus-square"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.change_cotisation')
|
|
def editCotisation(request, pk):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.CotisationForm` to edit a :class:`~preferences.models.Cotisation`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.Cotisation` to edit.
|
|
"""
|
|
cotisation = get_object_or_404(Cotisation, pk=pk)
|
|
form = CotisationForm(request.POST or None, instance=cotisation)
|
|
if(form.is_valid()):
|
|
cotisation = form.save()
|
|
messages.success(request, "La cotisation (" + str(cotisation.duration) + " jours, " + str(cotisation.amount) + "€) a bien été modifiée")
|
|
return redirect(reverse('preferences:cotisationsIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Modification d'une cotisation", "form_button": "Modifier", "form_button_icon": "pencil-alt"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.delete_cotisation')
|
|
def deleteCotisation(request, pk):
|
|
"""
|
|
Delete a :class:`~preferences.models.Cotisation`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.Cotisation` to delete.
|
|
"""
|
|
cotisation = get_object_or_404(Cotisation, pk=pk)
|
|
message = "La cotisation (" + str(cotisation.duration) + " jours, " + str(cotisation.amount) + "€) a bien été supprimée"
|
|
cotisation.delete()
|
|
messages.success(request, message)
|
|
return redirect(reverse('preferences:cotisationsIndex'))
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_cotisation')
|
|
def get_cotisation(request, pk):
|
|
"""
|
|
Return the requested :class:`~preferences.models.Cotisation` in json format.
|
|
|
|
pk
|
|
The primary key of the requested :class:`~preferences.models.Cotisation`.
|
|
"""
|
|
cotisation = get_object_or_404(Cotisation, pk=pk)
|
|
data = json.dumps({"pk": cotisation.pk, "duration": cotisation.duration, "amount" : cotisation.amount, "needQuantityButton": False})
|
|
return HttpResponse(data, content_type='application/json')
|
|
|
|
########## Payment Methods ##########
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_paymentmethod')
|
|
def paymentMethodsIndex(request):
|
|
"""
|
|
View which lists all the :class:`~preferences.models.PaymentMethod`.
|
|
"""
|
|
paymentMethods = PaymentMethod.objects.all()
|
|
return render(request, "preferences/payment_methods_index.html", {"paymentMethods": paymentMethods})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.add_paymentmethod')
|
|
def addPaymentMethod(request):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.PaymentMethodForm` to create a :class:`~preferences.models.PaymentMethod`.
|
|
"""
|
|
form = PaymentMethodForm(request.POST or None)
|
|
if(form.is_valid()):
|
|
paymentMethod = form.save()
|
|
messages.success(request, "Le moyen de paiement " + paymentMethod.name + " a bien été crée")
|
|
return redirect(reverse('preferences:paymentMethodsIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Création d'un moyen de paiement", "form_button": "Créer", "form_button_icon": "plus-square"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.change_paymentmethod')
|
|
def editPaymentMethod(request, pk):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.PaymentMethodForm` to edit a :class:`~preferences.models.PaymentMethod`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.PaymentMethod` to edit.
|
|
"""
|
|
paymentMethod = get_object_or_404(PaymentMethod, pk=pk)
|
|
form = PaymentMethodForm(request.POST or None, instance=paymentMethod)
|
|
if(form.is_valid()):
|
|
paymentMethod = form.save()
|
|
messages.success(request, "Le moyen de paiment " + paymentMethod.name + " a bien été modifié")
|
|
return redirect(reverse('preferences:paymentMethodsIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Modification d'un moyen de paiement", "form_button": "Modifier", "form_button_icon": "pencil-alt"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.delete_paymentmethod')
|
|
def deletePaymentMethod(request,pk):
|
|
"""
|
|
Delete a :class:`~preferences.models.PaymentMethod`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.PaymentMethod` to delete.
|
|
"""
|
|
paymentMethod = get_object_or_404(PaymentMethod, pk=pk)
|
|
message = "Le moyen de paiement " + paymentMethod.name + " a bien été supprimé"
|
|
paymentMethod.delete()
|
|
messages.success(request, message)
|
|
return redirect(reverse('preferences:paymentMethodsIndex'))
|
|
|
|
########## Active Site ##########
|
|
|
|
def inactive(request):
|
|
"""
|
|
View which displays the inactive message (if the site is inactive).
|
|
"""
|
|
gp, _ = GeneralPreferences.objects.get_or_create(pk=1)
|
|
return render(request, 'preferences/inactive.html', {"message": gp.active_message})
|
|
|
|
########## Config ##########
|
|
|
|
def get_config(request):
|
|
"""
|
|
Load the :class:`~preferences.models.GeneralPreferences` and return it in json format (except for :attr:`~preferences.models.GeneralPreferences.statutes`, :attr:`~preferences.models.GeneralPreferences.rules` and :attr:`~preferences.models.GeneralPreferences.menu`)
|
|
"""
|
|
gp, _ = GeneralPreferences.objects.defer("statutes", "rules", "menu").get_or_create(pk=1)
|
|
gp_dict = model_to_dict(gp)
|
|
del gp_dict["statutes"]
|
|
del gp_dict["rules"]
|
|
del gp_dict["menu"]
|
|
del gp_dict["alcohol_charter"]
|
|
data = json.dumps(gp_dict)
|
|
return HttpResponse(data, content_type='application/json')
|
|
|
|
########## Price Profiles ##########
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_priceprofile')
|
|
def price_profiles_index(request):
|
|
"""
|
|
View which lists all the :class:`~preferences.models.PriceProfile`.
|
|
"""
|
|
price_profiles = PriceProfile.objects.all()
|
|
return render(request, "preferences/price_profiles_index.html", {"price_profiles": price_profiles})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.add_priceprofile')
|
|
def add_price_profile(request):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.PriceProfileForm` to create a :class:`~preferences.models.PriceProfile`.
|
|
"""
|
|
form = PriceProfileForm(request.POST or None)
|
|
if form.is_valid():
|
|
price_profile = form.save()
|
|
messages.success(request, "Le profil de prix " + price_profile.name + " a bien été crée")
|
|
return redirect(reverse('preferences:priceProfilesIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Création d'un profil de prix", "form_button": "Créer", "form_button_icon": "plus-square"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.change_priceprofile')
|
|
def edit_price_profile(request, pk):
|
|
"""
|
|
View which displays a :class:`~preferences.forms.PriceProfile` to edit a :class:`~preferences.models.PriceProfile`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.PriceProfile` to edit.
|
|
"""
|
|
price_profile = get_object_or_404(PriceProfile, pk=pk)
|
|
form = PriceProfileForm(request.POST or None, instance=price_profile)
|
|
if form.is_valid():
|
|
price_profile = form.save()
|
|
messages.success(request, "Le profil de prix " + price_profile.name + " a bien été modifié")
|
|
return redirect(reverse('preferences:priceProfilesIndex'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Modification d'un profil de prix", "form_button": "Modifier", "form_button_icon": "pencil-alt"})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.delete_priceprofile')
|
|
def delete_price_profile(request,pk):
|
|
"""
|
|
Delete a :class:`~preferences.models.PriceProfile`.
|
|
|
|
pk
|
|
The primary key of the :class:`~preferences.models.PriceProfile` to delete.
|
|
"""
|
|
price_profile = get_object_or_404(PriceProfile, pk=pk)
|
|
message = "Le profil de prix " + price_profile.name + " a bien été supprimé"
|
|
price_profile.delete()
|
|
messages.success(request, message)
|
|
return redirect(reverse('preferences:priceProfilesIndex'))
|
|
|
|
|
|
########## Improvements ##########
|
|
|
|
@active_required
|
|
@login_required
|
|
def add_improvement(request):
|
|
"""
|
|
Display a form to create an improvement. Any logged user can access it
|
|
"""
|
|
form = ImprovementForm(request.POST or None)
|
|
if form.is_valid():
|
|
improvement = form.save(commit=False)
|
|
improvement.coopeman = request.user
|
|
improvement.save()
|
|
mail_admins("Nouvelle proposition d'amélioration", "Une nouvelle proposition d'amélioration a été postée (" + improvement.title + ", " + improvement.get_mode_display() + "). Le corps est le suivant : " + improvement.description)
|
|
messages.success(request, "Votre proposition a bien été envoyée")
|
|
return redirect(reverse('home'))
|
|
return render(request, "form.html", {"form": form, "form_title": "Proposition d'amélioration", "form_button": "Envoyer", "form_button_icon": "bug"})
|
|
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_improvement')
|
|
def improvements_index(request):
|
|
"""
|
|
Display all improvements
|
|
"""
|
|
todo_improvements = Improvement.objects.filter(done=False).order_by('-date')
|
|
done_improvements = Improvement.objects.filter(done=True).order_by('-date')
|
|
return render(request, "preferences/improvements_index.html", {"todo_improvements": todo_improvements, "done_improvements": done_improvements})
|
|
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.view_improvement')
|
|
@permission_required('preferences.change_improvement')
|
|
def improvement_profile(request, pk):
|
|
"""
|
|
Display an improvement
|
|
"""
|
|
improvement = get_object_or_404(Improvement, pk=pk)
|
|
improvement.seen = 1
|
|
improvement.save()
|
|
return render(request, "preferences/improvement_profile.html", {"improvement": improvement})
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.change_improvement')
|
|
def change_improvement_state(request, pk):
|
|
"""
|
|
Change done state of an improvement
|
|
"""
|
|
improvement = get_object_or_404(Improvement, pk=pk)
|
|
improvement.done = 1 - improvement.done
|
|
improvement.save()
|
|
messages.success(request, "L'état a bien été changé")
|
|
return redirect(reverse('preferences:improvementsIndex'))
|
|
|
|
@active_required
|
|
@login_required
|
|
@permission_required('preferences.delete_improvement')
|
|
def delete_improvement(request, pk):
|
|
"""
|
|
Delete an improvement
|
|
"""
|
|
improvement = get_object_or_404(Improvement, pk=pk)
|
|
improvement.delete()
|
|
messages.success(request, "L'amélioration a bien été supprimée.")
|
|
return redirect(reverse('preferences:improvementsIndex')) |