From 1fe8228d1b71119b4622dd4ea39d46a209cc45a0 Mon Sep 17 00:00:00 2001 From: Ambulance Clerc Date: Wed, 31 May 2023 18:45:16 +0200 Subject: [PATCH] Dev module Carnet_rouge --- .gitignore | 3 ++ carnet_rouge/admin.py | 91 ++++++++++++++++++++++++++++++++++++++---- carnet_rouge/models.py | 25 ++++++++++-- 3 files changed, 108 insertions(+), 11 deletions(-) diff --git a/.gitignore b/.gitignore index 6e9774d..7f77b0c 100644 --- a/.gitignore +++ b/.gitignore @@ -367,3 +367,6 @@ db.sqlite3 /mycaldav/export.pdf /vehicles/migrations/ +/vehicles/migrations_save/ +/carnet_rouge/migrations/ +/collabs/migrations/ diff --git a/carnet_rouge/admin.py b/carnet_rouge/admin.py index 623dbd7..619c7eb 100644 --- a/carnet_rouge/admin.py +++ b/carnet_rouge/admin.py @@ -1,21 +1,98 @@ from django.contrib import admin from carnet_rouge.models import cr_Category, cr_Message +from django.contrib.auth.models import User +from django.contrib.admin import SimpleListFilter +from django.utils.encoding import force_str +from django.utils.translation import gettext_lazy as _ + + +class DefaultListFilter(SimpleListFilter): + all_value = '_all' + + def default_value(self): + raise NotImplementedError() + + def queryset(self, request, queryset): + if self.parameter_name in request.GET and request.GET[self.parameter_name] == self.all_value: + return queryset + + if self.parameter_name in request.GET: + return queryset.filter(**{self.parameter_name:request.GET[self.parameter_name]}) + + return queryset.filter(**{self.parameter_name:self.default_value()}) + + def choices(self, cl): + yield { + 'selected': self.value() == self.all_value, + 'query_string': cl.get_query_string({self.parameter_name: self.all_value}, []), + 'display': _('All'), + } + for lookup, title in self.lookup_choices: + yield { + 'selected': self.value() == force_str(lookup) or (self.value() == None and force_str(self.default_value()) == force_str(lookup)), + 'query_string': cl.get_query_string({ + self.parameter_name: lookup, + }, []), + 'display': title, + } + +class StatusFilter(DefaultListFilter): + title = _('Actif ') + parameter_name = 'bEnabled__exact' + + def lookups(self, request, model_admin): + return ((0,'Désactivé'), (1,'Activé')) + + def default_value(self): + return 1 class cr_Message_Admin(admin.ModelAdmin): - always_show_username = True - list_display = ('id', 'Author', 'sTitle', 'dtCreated') - list_filter = [('Author', admin.RelatedOnlyFieldListFilter)] -""" - + class Meta: + verbose_name = 'Message carnet rouge' + verbose_name_plural = 'Messages carnet rouge' + def save_model(self, request,obj , form, change): + obj.Author = request.user + obj.sAuthor = request.user.first_name + " " + request.user.last_name + #Get all user of selected group + obj.sDestUsers = "" # reset + users_all = User.objects.filter(groups__name=obj.DestGroup.name) + _con = "" + for usr in users_all: + obj.sDestUsers += f"{_con}[{usr.id}]" + _con = ";" + + + obj.save() + + def has_change_permission(self, request, obj=None): + if obj is not None and obj.Author != request.user: + return False + return True + + def has_delete_permission(self, request, obj=None): + if obj is not None and obj.Author != request.user: + return False + return True + + + + + always_show_username = True + list_display = ('id', 'DestGroup', 'sTitle', 'dtCreated', 'sAuthor','bEnabled', 'calc_read_quotas') + list_filter = ["sAuthor", StatusFilter] + fields = ["Caterogy", "DestGroup", 'sTitle', "sText", "dtValidityFrom", "dtValidityTo", "bEnabled"] + + """ list_filter = [('dtDate', DateRangeFilter), ('user', admin.RelatedOnlyFieldListFilter),'sBases','type', 'bNoticed'] search_fields = ['userName'] readonly_fields = ["userName"] - fields = ["sBases", "dtDate",'type', "user","nHour", "nMinutes", "sRemarques"] -""" + + """ + # Register your models here. admin.site.register(cr_Category) diff --git a/carnet_rouge/models.py b/carnet_rouge/models.py index ac7acfc..535df14 100644 --- a/carnet_rouge/models.py +++ b/carnet_rouge/models.py @@ -4,6 +4,9 @@ from django.conf import settings from django.contrib.auth.models import Group from django.utils import timezone +from django.dispatch import receiver +from django.db.models.signals import pre_save + # Create your models here. class cr_Category(models.Model): @@ -27,16 +30,30 @@ class cr_Message(models.Model): sTitle = models.CharField("Titre", max_length=120) sText = models.TextField("Corps de texte") dtValidityFrom = models.DateField("Validité depuis",default=timezone.now) - dtValidityTo = models.DateField("Validité jusqu'à", blank=True) + dtValidityTo = models.DateField("Validité jusqu'à", blank=True, null=True) bEnabled = models.BooleanField("Actif", default=True) + Author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="Auteur", on_delete=models.SET_NULL, null=True) + sAuthor = models.CharField("Auteur", max_length=120) - sAuthor = models.CharField("auteur string", max_length=120) - Author = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name="Auteur", on_delete=models.DO_NOTHING) dtUpdated = models.DateTimeField('date updated', auto_now=True) dtCreated = models.DateTimeField('date published', auto_now_add=True) + def calc_read_quotas(self): + obj = self + n_dest = obj.sDestUsers.count('[') + n_readed = obj.sReadedUsers.count('[') + + if n_dest == 0: + return "No dest" + + + print(f"{n_dest}/{n_readed}") + return f"{(n_readed/n_dest)*100}%" + + class Meta: verbose_name = "message" - verbose_name_plural = "messages" \ No newline at end of file + verbose_name_plural = "messages" +