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' %} + + + + + + + {% for setting in settings %} + + + + + + {% endfor %} +
    NomValeur
    Modifier{{ setting.name }}{% firstof setting.value_decimal setting.value_duration setting.value_account %}
    + +{% 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 %} + +
    + {% csrf_token %} + {{ form.as_p }} + +
    + +{% 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) +