# Path: project/encefal/models.py
# class Exemplaire(Metadata):
#     facture = models.ForeignKey(Facture, db_column='facture',
#                                 related_name='exemplaires', null=True,
#                                 blank=True)
#     livre = models.ForeignKey(Livre, db_column='livre',
#                               related_name='exemplaires',)
#     vendeur = models.ForeignKey(Vendeur, db_column='vendeur',
#                                 related_name='exemplaires',)
#     etat = models.CharField(max_length=4, choices=ETAT_LIVRE_CHOICES,
#                             default='VENT', verbose_name='État', )
#     prix = models.IntegerField(help_text="Le prix doit être un entier!")
# 
#     def __unicode__(self):
#         return self.livre.__unicode__()
# 
#     def titre(self):
#         return (self.livre.titre)
#     titre.short_description = 'Titre'
# 
#     def code_permanent_vendeur(self):
#         return (self.vendeur.code_permanent)
#     code_permanent_vendeur.short_description = 'Vendeur'
# 
#     def save(self,*args,**kwargs):
# 
#         code_permanent = self.vendeur.code_permanent
#         pk_vendeur_temp = self.vendeur.id
#         vendeur = None
# 
#         try:
#             self.vendeur = (
#                             Vendeur.objects.all().
#                             exclude(pk=pk_vendeur_temp).
#                             get(code_permanent=code_permanent)
#                            )
#         except Vendeur.DoesNotExist:
#             pass
# 
#         super(Exemplaire,self).save(*args,**kwargs)
# 
# class Vendeur(Metadata):
#     class Meta:
#         verbose_name = "Vendeur (Vrai)"
#         verbose_name_plural = "Vendeurs (Vrai)"
# 
#     # En attendant les scanners, ce champ est inutile.
#     #code_carte_etudiante = models.IntegerField(null=False, blank=False,
#                                        #verbose_name="Code carte étudiante",
#                                        #help_text="Scannez la carte étudiante")
#     nom = models.CharField(max_length=255)
#     prenom = models.CharField(max_length=255, verbose_name='Prénom', )
#     code_permanent = models.CharField(max_length=12)
#     email = models.EmailField(max_length=255, blank=False)
#     telephone = models.CharField(max_length=255, verbose_name='Téléphone',
#                                  blank=True)
# 
#     def __unicode__(self):
#         return '%s, %s' % (self.nom, self.prenom)
# 
#     def nb_livres(self):
#         return self.exemplaires.count()
#     nb_livres.short_description = 'Nombre de livres'
# 
#     def envoyer_recu(self):
#         '''
#         lorsque le vendeur apporte des livres, on envoie le contrat par email.
#         '''
#         plaintext = get_template('encefal/vendeur/initial.txt')
#         htmly     = get_template('encefal/vendeur/initial.html')
# 
#         d = Context({ 'vendeur': self })
# 
#         subject, from_email, to = 'contrat', 'aess@aessuqam.org', self.email
#         text_content = plaintext.render(d)
#         html_content = htmly.render(d)
#         msg = EmailMultiAlternatives(subject, text_content, from_email, [to],)
#         msg.attach_alternative(html_content, "text/html")
#         msg.send(fail_silently=True)
# 
# class Livre(Metadata):
#     vendeur = models.ManyToManyField(Vendeur, db_column='vendeur',
#                                      related_name='livres', through='Exemplaire')
#     isbn = models.CharField(max_length=13, blank=True, null=False, unique=True)
#     titre = models.CharField(max_length=255, blank=True, )
#     auteur = models.CharField(max_length=255, blank=True)
#     edition = models.PositiveIntegerField(verbose_name='Édition', default=1,
#                                           blank=True, null=False,)
# 
#     def exemplaires_en_vente(self):
#         return [e for e in self.exemplaires.all() if e.etat == 'VENT']
#     exemplaires_en_vente.short_description = 'Exemplaires en vente'
# 
#     def nb_exemplaires_en_vente(self):
#         return len(self.exemplaires_en_vente())
#     nb_exemplaires_en_vente.short_description = 'Nombre d\'exemplaires en vente'
# 
#     def prix_moyen(self):
#         exemplaires = self.exemplaires_en_vente()
#         return (sum([e.prix for e in exemplaires]) / len(exemplaires))
# 
#     def __unicode__(self):
#       return '%s [%s]' % (self.titre, self.auteur)
# 
# ETAT_LIVRE_CHOICES = (
#     ('VENT', 'En vente'),
#     ('VEND', 'Vendu'),
#     ('PERD', 'Perdu'),
#     ('VOLE', 'Volé'),
#     ('REND', 'Rendu'),
#     ('REMB', 'Remboursé'),
# )


from django.forms import ModelForm,Form, TextInput
from django.forms import IntegerField, CharField, DecimalField
from project.encefal.models import Exemplaire,Vendeur,Livre,ETAT_LIVRE_CHOICES
        model = Exemplaire

class ExemplaireVenteForm(ModelForm):

    exclude = ( 'actif', 'livre', 'etat',)

    isbn = CharField(required=True, 
                        help_text="Scannez le code barre du livre",
                        label="ISBN",
                        max_length=13)

    titre = CharField(required=True, 
                      label="Titre",
                      help_text="Titre")

    identifiant = IntegerField(required=True, 
                      label="Identifiant",
                      help_text="Identifiant",
                      widget=IdentifiantTextInput)

    auteur = CharField(required=True, 
                       label="Auteur",
                       help_text="Auteur")
    
    prix = DecimalField(required=True, 
                        label="Prix demandé",
                        help_text="Prix")

    def clean(self):
        cleaned_data = super(ExemplaireVenteForm, self).clean()

# Path: project/encefal/models.py
# class Exemplaire(Metadata):
#     facture = models.ForeignKey(Facture, db_column='facture',
#                                 related_name='exemplaires', null=True,
#                                 blank=True)
#     livre = models.ForeignKey(Livre, db_column='livre',
#                               related_name='exemplaires',)
#     vendeur = models.ForeignKey(Vendeur, db_column='vendeur',
#                                 related_name='exemplaires',)
#     etat = models.CharField(max_length=4, choices=ETAT_LIVRE_CHOICES,
#                             default='VENT', verbose_name='État', )
#     prix = models.IntegerField(help_text="Le prix doit être un entier!")
# 
#     def __unicode__(self):
#         return self.livre.__unicode__()
# 
#     def titre(self):
#         return (self.livre.titre)
#     titre.short_description = 'Titre'
# 
#     def code_permanent_vendeur(self):
#         return (self.vendeur.code_permanent)
#     code_permanent_vendeur.short_description = 'Vendeur'
# 
#     def save(self,*args,**kwargs):
# 
#         code_permanent = self.vendeur.code_permanent
#         pk_vendeur_temp = self.vendeur.id
#         vendeur = None
# 
#         try:
#             self.vendeur = (
#                             Vendeur.objects.all().
#                             exclude(pk=pk_vendeur_temp).
#                             get(code_permanent=code_permanent)
#                            )
#         except Vendeur.DoesNotExist:
#             pass
# 
#         super(Exemplaire,self).save(*args,**kwargs)
# 
# class Vendeur(Metadata):
#     class Meta:
#         verbose_name = "Vendeur (Vrai)"
#         verbose_name_plural = "Vendeurs (Vrai)"
# 
#     # En attendant les scanners, ce champ est inutile.
#     #code_carte_etudiante = models.IntegerField(null=False, blank=False,
#                                        #verbose_name="Code carte étudiante",
#                                        #help_text="Scannez la carte étudiante")
#     nom = models.CharField(max_length=255)
#     prenom = models.CharField(max_length=255, verbose_name='Prénom', )
#     code_permanent = models.CharField(max_length=12)
#     email = models.EmailField(max_length=255, blank=False)
#     telephone = models.CharField(max_length=255, verbose_name='Téléphone',
#                                  blank=True)
# 
#     def __unicode__(self):
#         return '%s, %s' % (self.nom, self.prenom)
# 
#     def nb_livres(self):
#         return self.exemplaires.count()
#     nb_livres.short_description = 'Nombre de livres'
# 
#     def envoyer_recu(self):
#         '''
#         lorsque le vendeur apporte des livres, on envoie le contrat par email.
#         '''
#         plaintext = get_template('encefal/vendeur/initial.txt')
#         htmly     = get_template('encefal/vendeur/initial.html')
# 
#         d = Context({ 'vendeur': self })
# 
#         subject, from_email, to = 'contrat', 'aess@aessuqam.org', self.email
#         text_content = plaintext.render(d)
#         html_content = htmly.render(d)
#         msg = EmailMultiAlternatives(subject, text_content, from_email, [to],)
#         msg.attach_alternative(html_content, "text/html")
#         msg.send(fail_silently=True)
# 
# class Livre(Metadata):
#     vendeur = models.ManyToManyField(Vendeur, db_column='vendeur',
#                                      related_name='livres', through='Exemplaire')
#     isbn = models.CharField(max_length=13, blank=True, null=False, unique=True)
#     titre = models.CharField(max_length=255, blank=True, )
#     auteur = models.CharField(max_length=255, blank=True)
#     edition = models.PositiveIntegerField(verbose_name='Édition', default=1,
#                                           blank=True, null=False,)
# 
#     def exemplaires_en_vente(self):
#         return [e for e in self.exemplaires.all() if e.etat == 'VENT']
#     exemplaires_en_vente.short_description = 'Exemplaires en vente'
# 
#     def nb_exemplaires_en_vente(self):
#         return len(self.exemplaires_en_vente())
#     nb_exemplaires_en_vente.short_description = 'Nombre d\'exemplaires en vente'
# 
#     def prix_moyen(self):
#         exemplaires = self.exemplaires_en_vente()
#         return (sum([e.prix for e in exemplaires]) / len(exemplaires))
# 
#     def __unicode__(self):
#       return '%s [%s]' % (self.titre, self.auteur)
# 
# ETAT_LIVRE_CHOICES = (
#     ('VENT', 'En vente'),
#     ('VEND', 'Vendu'),
#     ('PERD', 'Perdu'),
#     ('VOLE', 'Volé'),
#     ('REND', 'Rendu'),
#     ('REMB', 'Remboursé'),
# )


# Path: project/encefal/forms.py
from django.forms import ModelForm,Form, TextInput
from django.forms import IntegerField, CharField, DecimalField
from project.encefal.models import Exemplaire,Vendeur,Livre,ETAT_LIVRE_CHOICES

        model = Exemplaire

class ExemplaireVenteForm(ModelForm):

    exclude = ( 'actif', 'livre', 'etat',)

    isbn = CharField(required=True, 
                        help_text="Scannez le code barre du livre",
                        label="ISBN",
                        max_length=13)

    titre = CharField(required=True, 
                      label="Titre",
                      help_text="Titre")

    identifiant = IntegerField(required=True, 
                      label="Identifiant",
                      help_text="Identifiant",
                      widget=IdentifiantTextInput)

    auteur = CharField(required=True, 
                       label="Auteur",
                       help_text="Auteur")
    
    prix = DecimalField(required=True, 
                        label="Prix demandé",
                        help_text="Prix")

    def clean(self):
        cleaned_data = super(ExemplaireVenteForm, self).clean()

        self.instance = Exemplaire.objects.get(pk=cleaned_data['identifiant'])