diff --git a/kfet/forms.py b/kfet/forms.py
index 2127e05b..fd2952ec 100644
--- a/kfet/forms.py
+++ b/kfet/forms.py
@@ -6,7 +6,7 @@ from django.contrib.admin.widgets import FilteredSelectMultiple
from django.forms import modelformset_factory
from django.utils import timezone
from kfet.models import (Account, Checkout, Article, OperationGroup, Operation,
- CheckoutStatement, ArticleCategory)
+ CheckoutStatement, ArticleCategory, Settings)
from gestioncof.models import CofProfile
# -----
@@ -236,3 +236,38 @@ KPsulOperationFormSet = modelformset_factory(
can_delete = True,
extra = 0,
min_num = 1, validate_min = True)
+
+# -----
+# Settings forms
+# -----
+
+class SettingsForm(forms.ModelForm):
+ class Meta:
+ model = Settings
+ fields = ['value_decimal', 'value_account', 'value_duration']
+
+ def clean(self):
+ name = self.instance.name
+ value_decimal = self.cleaned_data.get('value_decimal')
+ value_account = self.cleaned_data.get('value_account')
+ value_duration = self.cleaned_data.get('value_duration')
+
+ type_decimal = ['SUBVENTION_COF', 'ADDCOST_AMOUNT', 'OVERDRAFT_AMOUNT']
+ type_account = ['ADDCOST_FOR']
+ type_duration = ['OVERDRAFT_DURATION', 'CANCEL_DURATION']
+
+ self.cleaned_data['name'] = name
+ if name in type_decimal:
+ if not value_decimal:
+ raise ValidationError('Renseignez une valeur décimale')
+ self.cleaned_data['value_account'] = None
+ self.cleaned_data['value_duration'] = None
+ elif name in type_account:
+ self.cleaned_data['value_decimal'] = None
+ self.cleaned_data['value_duration'] = None
+ elif name in type_duration:
+ if not value_duration:
+ raise ValidationError('Renseignez une durée')
+ self.cleaned_data['value_decimal'] = None
+ self.cleaned_data['value_account'] = None
+ super(SettingsForm, self).clean()
diff --git a/kfet/templates/kfet/base_nav.html b/kfet/templates/kfet/base_nav.html
index a4f3836c..4e4a6345 100644
--- a/kfet/templates/kfet/base_nav.html
+++ b/kfet/templates/kfet/base_nav.html
@@ -37,6 +37,9 @@
{% if user.username != 'kfet_genericteam' %}
Connexion standard
{% endif %}
+ {% if perms.kfet.change_settings %}
+ Paramètres
+ {% endif %}
{% endif %}
diff --git a/kfet/templates/kfet/settings.html b/kfet/templates/kfet/settings.html
new file mode 100644
index 00000000..bf48f3bb
--- /dev/null
+++ b/kfet/templates/kfet/settings.html
@@ -0,0 +1,24 @@
+{% extends 'kfet/base.html' %}
+
+{% block title %}Paramètres{% endblock %}
+{% block content-header-title %}Paramètres{% endblock %}
+
+{% block content %}
+
+{% include 'kfet/base_messages.html' %}
+
+
+ |
+ Nom |
+ Valeur |
+
+ {% for setting in settings %}
+
+ Modifier |
+ {{ setting.name }} |
+ {% firstof setting.value_decimal setting.value_duration setting.value_account %} |
+
+ {% endfor %}
+
+
+{% endblock %}
diff --git a/kfet/templates/kfet/settings_update.html b/kfet/templates/kfet/settings_update.html
new file mode 100644
index 00000000..3d0596c2
--- /dev/null
+++ b/kfet/templates/kfet/settings_update.html
@@ -0,0 +1,14 @@
+{% extends 'kfet/base.html' %}
+
+{% block title %}Modification de {{ settings.name }}{% endblock %}
+{% block content-header-title %}Modification de {{ settings.name }}{% endblock %}
+
+{% block content %}
+
+
+
+{% endblock %}
diff --git a/kfet/urls.py b/kfet/urls.py
index 82b05af4..f41b2db9 100644
--- a/kfet/urls.py
+++ b/kfet/urls.py
@@ -118,5 +118,15 @@ urlpatterns = [
url('^k-psul/history$', views.kpsul_history,
name = 'kfet.kpsul.history'),
url('^k-psul/articles_data', views.kpsul_articles_data,
- name = 'kfet.kpsul.articles_data')
+ name = 'kfet.kpsul.articles_data'),
+
+ # -----
+ # Settings urls
+
+ url('^settings/$',
+ permission_required('kfet.change_settings')(views.SettingsList.as_view()),
+ name = 'kfet.settings'),
+ url('^settings/(?P\d+)/edit$',
+ permission_required('kfet.change_settings')(views.SettingsUpdate.as_view()),
+ name = 'kfet.settings.update'),
]
diff --git a/kfet/views.py b/kfet/views.py
index f6f88ebb..f6343d42 100644
--- a/kfet/views.py
+++ b/kfet/views.py
@@ -451,7 +451,7 @@ class ArticleRead(DetailView):
# Article - Update
-class ArticleUpdate(UpdateView):
+class ArticleUpdate(SuccessMessageMixin, UpdateView):
model = Article
template_name = 'kfet/article_update.html'
form_class = ArticleRestrictForm
@@ -868,3 +868,28 @@ def kpsul_articles_data(request):
.values('id', 'name', 'price', 'stock', 'category_id', 'category__name')
.filter(is_sold=True))
return JsonResponse({ 'articles': list(articles) })
+
+# -----
+# Settings views
+# -----
+
+class SettingsList(ListView):
+ model = Settings
+ context_object_name = 'settings'
+ template_name = 'kfet/settings.html'
+
+class SettingsUpdate(SuccessMessageMixin, UpdateView):
+ model = Settings
+ form_class = SettingsForm
+ template_name = 'kfet/settings_update.html'
+ success_message = 'Paramètre %(name)s mis à jour'
+ success_url = reverse_lazy('kfet.settings')
+
+ def form_valid(self, form):
+ # Checking permission
+ if not self.request.user.has_perm('kfet.change_settings'):
+ form.add_error(None, 'Permission refusée')
+ return self.form_invalid(form)
+ # Creating
+ return super(SettingsUpdate, self).form_valid(form)
+