Changer le statut du consommable au moment du retrait
[ongolaboy.git] / projets_django / bacgl_utils / bureautique / models.py
1 # -*-coding:utf-8 -*-
2
3 import datetime
4 from django.db import models
5 from django.utils import timezone
6
7
8 # Create your models here.
9 class Personnel(models.Model):
10 """Infos générique sur le personnel du bureau"""
11
12 nom = models.CharField(max_length=200,primary_key=True)
13
14 def __unicode__(self):
15 return self.nom
16
17
18 class Equipement(models.Model):
19 marque = models.CharField(max_length=200,default="HP")
20 modele = models.CharField(max_length=200,blank=True)
21 num_serie = models.CharField("Numéro de série",
22 max_length=200,unique=True)
23 date_acquisition = models.DateField("Date d'acquisition")
24
25
26 class Imprimante(Equipement):
27 """Informations sur les imprimantes du bureau"""
28
29 CATEGORIE_IMPRIMANTE = (
30 ("encre","Jet d'encre"),
31 ("laser","Laser"),
32 ("multifonction","Multifonction"),
33 )
34
35 emplacement = models.CharField(max_length=200)
36 fqdn = models.CharField("Nom DNS",max_length=200)
37 categorie = \
38 models.CharField(\
39 "Type d'imprimante",
40 max_length=20,
41 choices=CATEGORIE_IMPRIMANTE
42 )
43
44 def __unicode__(self):
45 return "Imprimante: %s %s (%s)" %\
46 (self.marque,self.modele,self.emplacement)
47
48
49 class Consommable(Equipement):
50 """Informations sur les consommables du bureau"""
51
52 CATEGORIE_CONSOMMABLE = (
53 ("encre","Jet d'encre"),
54 ("toner","Laser"),
55 ("autre","autres types"),
56 )
57
58 NOM_CONSOMMABLE = (
59 ("45","45"),
60 ("56","56"),
61 ("57","57"),
62 ("78","78"),
63 ("130","130"),
64 ("134","134"),
65 ("339","339"),
66 ("344","344"),
67 ("05A","05A"),
68 ("501A","501A"),
69 ("920XL","920XL"),
70 )
71
72 NOM_COULEUR = (
73 ("noir","noir"),
74 ("jaune","jaune"),
75 ("cyan","cyan"),
76 ("magenta","magenta"),
77 ("mixte","mixte"),
78 )
79
80 nom = models.CharField(max_length=20,choices=NOM_CONSOMMABLE)
81 couleur = models.CharField(max_length=20,choices=NOM_COULEUR)
82 categorie = \
83 models.CharField(max_length=20,choices=CATEGORIE_CONSOMMABLE)
84 date_expiration = models.DateField()
85 disponible = models.BooleanField(default=True)
86
87 def __unicode__(self):
88 return "%s %s (%s)" %(self.nom,self.couleur,self.num_serie)
89
90 class RetraitConsommable(models.Model):
91 demandeur = models.ForeignKey(Personnel)
92 date_retrait = models.DateField("date du retrait",auto_now_add=True)
93 code_consommable = models.OneToOneField(Consommable)
94 imprimante_utilisee = models.ForeignKey(Imprimante)
95
96 def __unicode__(self):
97 annee_date_retrait = self.date_retrait.year
98 mois_date_retrait = self.date_retrait.month
99 jour_date_retrait = self.date_retrait.day
100 return "%s retire pour %s le %s/%s/%s" % (self.code_consommable,
101 self.demandeur,jour_date_retrait,mois_date_retrait,
102 annee_date_retrait)
103
104 def save(self,*args,**kwargs):
105 """
106 Lorsqu'on effectue un retrait, il faut absolument changer
107 le statut du consommable afin qu'il soit vu comme
108 non disponible
109 """
110 c = Consommable.objects.get(pk=self.code_consommable)
111 c.disponible = False
112 c.save()
113 super(RetraitConsommable,self).save(*args,**kwargs)