diff --git a/cotisations/views.py b/cotisations/views.py
index a4a35825..ae95ec23 100644
--- a/cotisations/views.py
+++ b/cotisations/views.py
@@ -148,7 +148,7 @@ def new_facture(request, user, userid):
p.facture = new_invoice_instance
p.save()
- send_mail_invoice(new_invoice_instance)
+ #send_mail_invoice(new_invoice_instance)
return new_invoice_instance.paiement.end_payment(
new_invoice_instance,
diff --git a/preferences/admin.py b/preferences/admin.py
index 5ca90095..809a4b6d 100644
--- a/preferences/admin.py
+++ b/preferences/admin.py
@@ -35,6 +35,7 @@ from .models import (
GeneralOption,
Service,
MailContact,
+ Reminder,
AssoOption,
MailMessageOption,
HomeOption
@@ -85,6 +86,9 @@ class HomeOptionAdmin(VersionAdmin):
"""Class admin options home"""
pass
+class ReminderAdmin(VersionAdmin):
+ """Class reminder"""
+ pass
admin.site.register(OptionalUser, OptionalUserAdmin)
admin.site.register(OptionalMachine, OptionalMachineAdmin)
@@ -93,5 +97,6 @@ admin.site.register(GeneralOption, GeneralOptionAdmin)
admin.site.register(HomeOption, HomeOptionAdmin)
admin.site.register(Service, ServiceAdmin)
admin.site.register(MailContact, MailContactAdmin)
+admin.site.register(Reminder, ReminderAdmin)
admin.site.register(AssoOption, AssoOptionAdmin)
admin.site.register(MailMessageOption, MailMessageOptionAdmin)
diff --git a/preferences/forms.py b/preferences/forms.py
index 73731750..5b2660d3 100644
--- a/preferences/forms.py
+++ b/preferences/forms.py
@@ -24,6 +24,7 @@ Formulaire d'edition des réglages : user, machine, topologie, asso...
"""
from __future__ import unicode_literals
+from re2o.mixins import FormRevMixin
from django.forms import ModelForm, Form
from django import forms
@@ -39,6 +40,7 @@ from .models import (
HomeOption,
Service,
MailContact
+ Reminder
)
@@ -211,7 +213,7 @@ class EditHomeOptionForm(ModelForm):
self.fields['twitter_account_name'].label = _("Twitter account name")
-class ServiceForm(ModelForm):
+class ServiceForm(FormRevMixin, ModelForm):
"""Edition, ajout de services sur la page d'accueil"""
class Meta:
model = Service
@@ -269,3 +271,12 @@ class DelMailContactForm(Form):
else:
self.fields['mailcontacts'].queryset = MailContact.objects.all()
+class ReminderForm(FormRevMixin, ModelForm):
+ """Edition, ajout de rappel"""
+ class Meta:
+ model = Reminder
+ fields = '__all__'
+
+ def __init__(self, *args, **kwargs):
+ prefix = kwargs.pop('prefix', self.Meta.model.__name__)
+ super(ReminderForm, self).__init__(*args, prefix=prefix, **kwargs)
diff --git a/preferences/models.py b/preferences/models.py
index 3199dd6c..adcd2e37 100644
--- a/preferences/models.py
+++ b/preferences/models.py
@@ -215,6 +215,32 @@ def optionaltopologie_post_save(**kwargs):
topologie_pref.set_in_cache()
+class Reminder(AclMixin, models.Model):
+ """Options pour les mails de notification de fin d'adhésion.
+ Days: liste des nombres de jours pour lesquells un mail est envoyé
+ optionalMessage: message additionel pour le mail
+ """
+ PRETTY_NAME="Options pour le mail de fin d'adhésion"
+
+ days = models.IntegerField(
+ default=7,
+ unique=True,
+ help_text="Délais entre le mail et la fin d'adhésion"
+ )
+ message = models.CharField(
+ max_length=255,
+ default="",
+ null=True,
+ blank=True,
+ help_text="Message affiché spécifiquement pour ce rappel"
+ )
+
+ class Meta:
+ permissions = (
+ ("view_reminder", "Peut voir un objet reminder"),
+ )
+
+
class GeneralOption(AclMixin, PreferencesModel):
"""Options générales : nombre de resultats par page, nom du site,
temps où les liens sont valides"""
diff --git a/preferences/templates/preferences/display_preferences.html b/preferences/templates/preferences/display_preferences.html
index 6a499969..05154246 100644
--- a/preferences/templates/preferences/display_preferences.html
+++ b/preferences/templates/preferences/display_preferences.html
@@ -224,8 +224,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% acl_end %}
{% trans "Delete one or several addresses" %}
{% include "preferences/aff_mailcontact.html" with mailcontact_list=mailcontact_list %}
-
-
+
{% trans "Twitter account URL" %} |
@@ -238,5 +237,26 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{{ homeoptions.facebook_url }} |
+
+ {% for line in assooptions %}
+
+ {% for text, field in line %}
+ {{ field }} |
+ {{ text }} |
+ {% endfor %}
+
+ {% endfor %}
+
+
+
+Options pour le mail de fin d'adhésion
+ {% can_create preferences.Reminder%}
+ Ajouter un rappel
+ {% acl_end %}
+ {% include "preferences/aff_reminder.html" with reminder_list=reminder_list %}
+
+
+
+
{% endblock %}
diff --git a/preferences/urls.py b/preferences/urls.py
index a89fcdf3..1f6dffdd 100644
--- a/preferences/urls.py
+++ b/preferences/urls.py
@@ -74,6 +74,13 @@ urlpatterns = [
),
url(r'^del_service/$', views.del_service, name='del-service'),
url(r'^add_mailcontact/$', views.add_mailcontact, name='add-mailcontact'),
+ url(r'^add_reminder/$', views.add_reminder, name='add-reminder'),
+ url(
+ r'^edit_reminder/(?P[0-9]+)$',
+ views.edit_reminder,
+ name='edit-reminder'
+ ),
+ url(r'^del_reminder/$', views.del_reminder, name='del-reminder'),
url(
r'^edit_mailcontact/(?P[0-9]+)$',
views.edit_mailcontact,
diff --git a/preferences/views.py b/preferences/views.py
index 559cdfef..a4724be1 100644
--- a/preferences/views.py
+++ b/preferences/views.py
@@ -41,11 +41,12 @@ from django.utils.translation import ugettext as _
from reversion import revisions as reversion
from re2o.views import form
-from re2o.acl import can_create, can_edit, can_delete_set, can_view_all
+from re2o.acl import can_create, can_edit, can_delete, can_view_all
from .forms import (
- ServiceForm, DelServiceForm, MailContactForm, DelMailContactForm
+ ServiceForm, DelServiceForm, MailContactForm, DelMailContactForm, ReminderForm
)
+
from .models import (
Service,
MailContact,
@@ -133,11 +134,8 @@ def add_service(request):
"""Ajout d'un service de la page d'accueil"""
service = ServiceForm(request.POST or None, request.FILES or None)
if service.is_valid():
- with transaction.atomic(), reversion.create_revision():
- service.save()
- reversion.set_user(request.user)
- reversion.set_comment("Creation")
- messages.success(request, _("The service was added."))
+ service.save()
+ messages.success(request, "Ce service a été ajouté")
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': service, 'action_name': _("Add a service")},
@@ -156,15 +154,8 @@ def edit_service(request, service_instance, **_kwargs):
instance=service_instance
)
if service.is_valid():
- with transaction.atomic(), reversion.create_revision():
- service.save()
- reversion.set_user(request.user)
- reversion.set_comment(
- "Field(s) edited: %s" % ', '.join(
- field for field in service.changed_data
- )
- )
- messages.success(request, _("The service was edited."))
+ service.save()
+ messages.success(request, "Service modifié")
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': service, 'action_name': _("Edit")},
@@ -172,6 +163,34 @@ def edit_service(request, service_instance, **_kwargs):
request
)
+@login_required
+@can_delete(Service)
+def del_service(request, service_instance, **_kwargs):
+ """Destruction d'un service"""
+ if request.method == "POST":
+ service_instance.delete()
+ messages.success(request, "Le service a été détruit")
+ return redirect(reverse('preferences:display-options'))
+ return form(
+ {'objet': service_instance, 'objet_name': 'service'},
+ 'preferences/delete.html',
+ request
+ )
+
+@login_required
+@can_create(Reminder)
+def add_reminder(request):
+ """Ajout d'un rappel"""
+ reminder = ReminderForm(request.POST or None)
+ if reminder.is_valid():
+ reminder.save()
+ messages.success(request, "Ce rappel a été ajouté")
+ return redirect(reverse('preferences:display-options'))
+ return form(
+ {'preferenceform': reminder, 'action_name': 'Ajouter'},
+ 'preferences/preferences.html',
+ request
+ )
@login_required
@can_delete_set(Service)
@@ -232,6 +251,17 @@ def edit_mailcontact(request, mailcontact_instance, **_kwargs):
return redirect(reverse('preferences:display-options'))
return form(
{'preferenceform': mailcontact, 'action_name': _("Edit")},
+
+@can_edit(Reminder)
+def edit_reminder(request, reminder_instance, **_kwargs):
+ """Edition des rappels"""
+ reminder = ReminderForm(request.POST or None, instance=reminder_instance)
+ if reminder.is_valid():
+ reminder.save()
+ messages.success(request, "Service modifié")
+ return redirect(reverse('preferences:display-options'))
+ return form(
+ {'preferenceform': reminder, 'action_name': 'Editer'},
'preferences/preferences.html',
request
)
@@ -258,3 +288,18 @@ def del_mailcontact(request, instances):
request
)
+@login_required
+@can_delete(Reminder)
+def del_reminder(request, reminder_instance, **_kwargs):
+ """Destruction d'un reminder"""
+ if request.method == "POST":
+ reminder_instance.delete()
+ messages.success(request, "Le reminder a été détruit")
+ return redirect(reverse('preferences:display-options'))
+ return form(
+ {'objet': reminder_instance, 'objet_name': 'reminder'},
+ 'preferences/delete.html',
+ request
+ )
+
+
diff --git a/re2o/templatetags/acl.py b/re2o/templatetags/acl.py
index 6fd00e19..54352e59 100644
--- a/re2o/templatetags/acl.py
+++ b/re2o/templatetags/acl.py
@@ -79,6 +79,65 @@ from django.contrib.contenttypes.models import ContentType
register = template.Library()
+MODEL_NAME = {
+ # cotisations
+ 'Facture': cotisations.models.Facture,
+ 'Vente': cotisations.models.Vente,
+ 'Article': cotisations.models.Article,
+ 'Banque': cotisations.models.Banque,
+ 'Paiement': cotisations.models.Paiement,
+ 'Cotisation': cotisations.models.Cotisation,
+ # machines
+ 'Machine': machines.models.Machine,
+ 'MachineType': machines.models.MachineType,
+ 'IpType': machines.models.IpType,
+ 'Vlan': machines.models.Vlan,
+ 'Nas': machines.models.Nas,
+ 'SOA': machines.models.SOA,
+ 'Extension': machines.models.Extension,
+ 'Mx': machines.models.Mx,
+ 'Ns': machines.models.Ns,
+ 'Txt': machines.models.Txt,
+ 'Srv': machines.models.Srv,
+ 'Interface': machines.models.Interface,
+ 'Domain': machines.models.Domain,
+ 'IpList': machines.models.IpList,
+ 'Ipv6List': machines.models.Ipv6List,
+ 'machines.Service': machines.models.Service,
+ 'Service_link': machines.models.Service_link,
+ 'OuverturePortList': machines.models.OuverturePortList,
+ 'OuverturePort': machines.models.OuverturePort,
+ # preferences
+ 'OptionalUser': preferences.models.OptionalUser,
+ 'OptionalMachine': preferences.models.OptionalMachine,
+ 'OptionalTopologie': preferences.models.OptionalTopologie,
+ 'GeneralOption': preferences.models.GeneralOption,
+ 'preferences.Service': preferences.models.Service,
+ 'preferences.Reminder': preferences.models.Reminder,
+ 'AssoOption': preferences.models.AssoOption,
+ 'MailMessageOption': preferences.models.MailMessageOption,
+ # topologie
+ 'Stack': topologie.models.Stack,
+ 'Switch': topologie.models.Switch,
+ 'AccessPoint': topologie.models.AccessPoint,
+ 'ModelSwitch': topologie.models.ModelSwitch,
+ 'ConstructorSwitch': topologie.models.ConstructorSwitch,
+ 'Port': topologie.models.Port,
+ 'Room': topologie.models.Room,
+ 'Building': topologie.models.Building,
+ 'SwitchBay': topologie.models.SwitchBay,
+ # users
+ 'User': users.models.User,
+ 'Adherent': users.models.Adherent,
+ 'Club': users.models.Club,
+ 'ServiceUser': users.models.ServiceUser,
+ 'School': users.models.School,
+ 'ListRight': users.models.ListRight,
+ 'ListShell': users.models.ListShell,
+ 'Ban': users.models.Ban,
+ 'Whitelist': users.models.Whitelist,
+}
+
def get_model(model_name):
"""Retrieve the model object from its name"""