Dev module Carnet_rouge
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -367,3 +367,6 @@ db.sqlite3
|
|||||||
|
|
||||||
/mycaldav/export.pdf
|
/mycaldav/export.pdf
|
||||||
/vehicles/migrations/
|
/vehicles/migrations/
|
||||||
|
/vehicles/migrations_save/
|
||||||
|
/carnet_rouge/migrations/
|
||||||
|
/collabs/migrations/
|
||||||
|
@@ -1,21 +1,98 @@
|
|||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from carnet_rouge.models import cr_Category, cr_Message
|
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):
|
class cr_Message_Admin(admin.ModelAdmin):
|
||||||
always_show_username = True
|
class Meta:
|
||||||
list_display = ('id', 'Author', 'sTitle', 'dtCreated')
|
verbose_name = 'Message carnet rouge'
|
||||||
list_filter = [('Author', admin.RelatedOnlyFieldListFilter)]
|
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']
|
list_filter = [('dtDate', DateRangeFilter), ('user', admin.RelatedOnlyFieldListFilter),'sBases','type', 'bNoticed']
|
||||||
|
|
||||||
search_fields = ['userName']
|
search_fields = ['userName']
|
||||||
readonly_fields = ["userName"]
|
readonly_fields = ["userName"]
|
||||||
|
|
||||||
fields = ["sBases", "dtDate",'type', "user","nHour", "nMinutes", "sRemarques"]
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
# Register your models here.
|
# Register your models here.
|
||||||
admin.site.register(cr_Category)
|
admin.site.register(cr_Category)
|
||||||
|
@@ -4,6 +4,9 @@ from django.conf import settings
|
|||||||
from django.contrib.auth.models import Group
|
from django.contrib.auth.models import Group
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from django.dispatch import receiver
|
||||||
|
from django.db.models.signals import pre_save
|
||||||
|
|
||||||
|
|
||||||
# Create your models here.
|
# Create your models here.
|
||||||
class cr_Category(models.Model):
|
class cr_Category(models.Model):
|
||||||
@@ -27,16 +30,30 @@ class cr_Message(models.Model):
|
|||||||
sTitle = models.CharField("Titre", max_length=120)
|
sTitle = models.CharField("Titre", max_length=120)
|
||||||
sText = models.TextField("Corps de texte")
|
sText = models.TextField("Corps de texte")
|
||||||
dtValidityFrom = models.DateField("Validité depuis",default=timezone.now)
|
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)
|
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)
|
dtUpdated = models.DateTimeField('date updated', auto_now=True)
|
||||||
dtCreated = models.DateTimeField('date published', auto_now_add=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:
|
class Meta:
|
||||||
verbose_name = "message"
|
verbose_name = "message"
|
||||||
verbose_name_plural = "messages"
|
verbose_name_plural = "messages"
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user