Consommables:meilleure présentation
authorWilly MANGA <willy.manga@auf.org>
Wed, 5 Oct 2016 17:54:45 +0000 (18:54 +0100)
committerWilly MANGA <willy.manga@auf.org>
Wed, 5 Oct 2016 17:54:45 +0000 (18:54 +0100)
projets_django/bacgl_utils/bureautique/admin.py
projets_django/bacgl_utils/bureautique/models.py
projets_django/bacgl_utils/bureautique/views.py

index 48ad5ba..aeff98d 100644 (file)
@@ -4,29 +4,20 @@ from django.contrib import admin
 from bureautique.models import Personnel, Imprimante, Consommable
 from bureautique.models import RetraitConsommable
 
-class RetraitConsommableInline(admin.TabularInline):
-    model = RetraitConsommable
-    extra = 2
-
-class PersonnelAdmin(admin.ModelAdmin):
-    fieldsets = [
-            (None, {'fields': ['nom']}),
-            ]
-    inlines = [RetraitConsommableInline]
-
 class ConsommableAdmin(admin.ModelAdmin):
     list_display = ('__unicode__',
-            'date_acquisition','disponible','date_retrait')
-    list_filter = ['disponible']
-    ordering = ['-disponible','date_acquisition']
+            'couleur',
+            'date_expiration','disponible','date_retrait')
+    list_filter = ['disponible','date_expiration','modele']
+    ordering = ['-disponible','couleur','date_expiration']
 
 class RetraitConsommableAdmin(admin.ModelAdmin):
     list_display = ('date_retrait','demandeur','imprimante_utilisee',
             'code_consommable')
-    list_filter = ['demandeur']
+    list_filter = ['demandeur','imprimante_utilisee']
     ordering = ['-date_retrait']
 
-admin.site.register(Personnel,PersonnelAdmin)
+admin.site.register(Personnel)
 admin.site.register(Imprimante)
 admin.site.register(Consommable,ConsommableAdmin)
 admin.site.register(RetraitConsommable,RetraitConsommableAdmin)
index 350effc..488781d 100644 (file)
@@ -21,6 +21,9 @@ class Equipement(models.Model):
             max_length=200,unique=True,default='x')
     date_acquisition = models.DateField("Date d'acquisition")
 
+    def __unicode__(self):
+        return "%s %s" % (self.marque,self.modele)
+
 
 class Imprimante(Equipement):
     """Informations sur les imprimantes du bureau"""
@@ -31,8 +34,8 @@ class Imprimante(Equipement):
             ("multifonction","Multifonction"),
             )
 
-    emplacement = models.CharField(max_length=200,default="Bureau")
-    fqdn = models.CharField("Nom DNS",max_length=200,default="imprimante")
+    emplacement = models.CharField(max_length=200,default='Bureau')
+    fqdn = models.CharField("Nom DNS",max_length=200,default='imprimante')
     categorie = \
             models.CharField(\
             "Type d'imprimante",
@@ -42,7 +45,7 @@ class Imprimante(Equipement):
             )
 
     def __unicode__(self):
-        return " %s (%s)" %\
+        return "%s (%s)" %\
             (self.modele,self.emplacement)
 
 
@@ -59,25 +62,32 @@ class Consommable(Equipement):
 
     couleur = models.CharField(max_length=20,choices=NOM_COULEUR,
             default='noir')
-    date_expiration=models.DateField(
-            default=date.today().replace(year=date.today().year+1))
+    date_expiration = models.DateField(
+            default=date.today().replace(year=date.today().year+1),
+    help_text="ou date de fin de garantie"
+    )
     disponible = models.BooleanField(default=True)
     date_retrait = models.DateField("date du retrait",\
             null=True,blank=True)
     imprimante_compatible = models.ManyToManyField(Imprimante,blank=True)
+    commentaire = models.TextField(blank=True)
 
     class Meta:
-        ordering = ['-disponible','modele','date_acquisition']
+        ordering = ['-disponible','disponible','date_expiration']
 
     def __unicode__(self):
         return "%s %s (%s)" %(self.modele,self.couleur,self.num_serie)
 
+
 class RetraitConsommable(models.Model):
     demandeur = models.ForeignKey(Personnel)
     date_retrait = models.DateField("date du retrait",auto_now_add=True)
-    code_consommable = models.OneToOneField(Consommable,)
+    code_consommable = models.OneToOneField(Consommable)
     imprimante_utilisee = models.ForeignKey(Imprimante)
 
+    class Meta:
+        verbose_name = verbose_name_plural = "Retrait des consommables"
+
     def __unicode__(self):
         annee_date_retrait = self.date_retrait.year
         mois_date_retrait = self.date_retrait.month
@@ -88,22 +98,12 @@ class RetraitConsommable(models.Model):
 
     def save(self,*args,**kwargs):
         """
-        Lorsqu'on effectue un retrait, il faut absolument changer:
-
-        1. le statut du consommable afin qu'il soit vu comme
+        Lorsqu'on effectue un retrait, il faut absolument changer
+        le statut du consommable afin qu'il soit vu comme
         non disponible
-
-        2. la date de retrait
-
         """
         c = Consommable.objects.get(pk=self.code_consommable)
         c.disponible = False
-        c.date_retrait= date.today()
+        c.date_retrait = date.today()
         c.save()
         super(RetraitConsommable,self).save(*args,**kwargs)
-
-def quantite_disponible(modele):
-    nombre = 0
-    c = Consommable.objects.filter(modele__exact=modele)
-    nombre = c.filter(disponible__exact=True).count()
-    return nombre
index deb6751..c1aa82e 100644 (file)
@@ -1,26 +1,96 @@
-from django.shortcuts import render_to_response
-from django.http import HttpResponse
-from django.template import Context, loader
-from bureautique.models import Imprimante,Consommable
+# -*- coding:utf-8 -*-
+
+from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
+from django.shortcuts import render_to_response,render
+from bureautique.models import Consommable,Imprimante,RetraitConsommable,\
+        Personnel
 
 def home(request):
-    imprimantes = Imprimante.objects.all()
-    consomm_list = Consommable.objects.all()
-    listing_complet = {'imprimantes':imprimantes,
-            'consomm_list':consomm_list,
+#    req = Consommable.objects.filter(modele__exact=self.modele).filter(disponible__exact=True).count()
+    modeles = ['05A','920XL','950XL','951XL']
+    stock = {}
+    imprimantes_modele = []
+    imprimante_emplacement = []
+    usage_imprimante = {}
+    employer = {}
+
+    for i in modeles :
+        for j in Consommable.NOM_COULEUR :
+            composant = "%s %s" % (i,j[0])
+            v =\
+            Consommable.objects.filter(modele=i).filter(couleur=j[0]).filter(disponible=True).count()
+            if v > 0 :
+                stock[composant] = v
+
+    imprimantes = Imprimante.objects.order_by(\
+            'modele','emplacement').all()
+
+    derniers_retraits =\
+    RetraitConsommable.objects.order_by('-date_retrait')[:5]
+
+    #avoir des stats sur l'usage des imprimantes
+    for k in Imprimante.objects.all():
+        imprimantes_modele.append(k.modele)
+        place = "%s %s" % (k.modele,k.emplacement)
+
+        usage_imprimante[place] =\
+    RetraitConsommable.objects.filter(\
+    imprimante_utilisee__modele=k.modele).filter(\
+    imprimante_utilisee__emplacement=k.emplacement).count()
+
+    for k in Personnel.objects.all():
+        frequence =\
+        RetraitConsommable.objects.filter(demandeur__nom=k.nom).count()
+        if frequence == 0 : 
+            pass
+        else :
+            employer[k.nom] = frequence
+
+    contexte = {'stock' : stock,
+            'imprimantes': imprimantes,
+            'derniers_retraits' : derniers_retraits,
+            'usage_imprimante' : usage_imprimante,
+            'employer' : employer,
             }
-    t = loader.get_template('bureautique/index.html')
-    c = Context(
-            listing_complet,
-            )
-    return HttpResponse(t.render(c))
+    
+    return render(request,'bureautique/index.html',contexte)
 #    return render_to_response('bureautique/index.html',
-#            {'imprimantes':imprimantes})
+#            {'imprimantes':imprimantes},
+#            )
+
+def consommable(request):
+    consommable_dispo = Consommable.objects.filter(disponible__exact=True)
+    return render_to_response('bureautique/consommable.html',
+            {'consommable_dispo':consommable_dispo},
+            )
+
+def consommable_detail(request,consommable_modele):
+    """
+    Il s'agit des consommables d'un modèle précis ET
+    qui sont disponibles
+    """
 
-def detail(request):
-    consomm_list = Consommable.objects.all()
-    t = loader.get_template('bureautique/detail.html')
-    c = Context(
-            {'consomm_list':consomm_list},
+    consommable_dispo = Consommable.objects.filter(disponible__exact=True)
+    consommable_dispo = consommable_dispo.filter(\
+            modele__exact=consommable_modele)
+    return render_to_response('bureautique/consommable_detail.html',
+            {'consommable_dispo':consommable_dispo},
             )
-    return HttpResponse(t.render(c))
+
+def retrait(request):
+    retrait_list = RetraitConsommable.objects.all()
+    paginator_ret = Paginator(retrait_list,30)
+    page = request.GET.get('page')
+    try:
+        retrait_p = paginator_ret.page(page)
+    except PageNotAnInteger:
+        retrait_p = paginator_ret.page(1)
+    except EmptyPage:
+        retrait_p = paginator_ret.page(paginator.num_pages)
+
+    contexte = {
+            'retrait_p': retrait_p,
+            'retrait_list': retrait_list,
+            }
+
+    return render(request,'bureautique/retrait.html',contexte)