Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################################################################################################
- #
- # Visualisation des sondages parti Admin.
- #
- #
- class StatisqueQCM(objet_sondage):
- class Meta:
- proxy=True
- class question_sondage_QCMForm(forms.ModelForm):
- def __init__(self, *args, **kwargs):
- super(question_sondage_QCMForm, self).__init__(*args, **kwargs)
- instance = None
- for key, value in kwargs.items():
- if key == 'instance':
- instance = value
- self.val = self.statistique_de_reponse(instance)
- self.fields['test'] = forms.CharField(widget = forms.TextInput())
- self.fields['graphe'] = forms.ChoiceField(required=False, choices=self.val, label='Graphe')
- def get_initial_for_field(self, field, field_name):
- return super(question_sondage_QCMForm, self).get_initial_for_field(field, field_name)
- def is_valid(self):
- return super(question_sondage_QCMForm, self).is_valid()
- def save(self, commit=True):
- return super(question_sondage_QCMForm, self).save(commit=commit)
- def save_m2m(self):
- return super(question_sondage_QCMForm, self).save_m2m()
- def statistique_de_reponse(self, instance):
- print(instance)
- val = list()
- for element in instance._meta.get_fields():
- nom = element.name.split('_')
- if nom[0] == "choix" and getattr(instance, element.name) is not None:
- try:
- res = resultat_sondage.objects.filter(sondage__sondage=instance.sondage, ordre=instance.ordre, position=nom[1]).count()
- except resultat_sondage.DoesNotExist:
- res = 0
- val.append((nom[1], res, getattr(instance, element.name)))
- print(val)
- return val
- class Meta:
- model = question_sondage_QCM
- exclude = ()
- #fields = '__all__'
- class statisque_QCM_inline(admin.StackedInline):
- model = question_sondage_QCM
- form = question_sondage_QCMForm
- extra = 0
- fk_name = 'sondage'
- readonly_fields = ['analyse_bar_resutat',]
- exclude = ['creation', 'modification']
- #fields = ['ordre', 'question', 'obligatoire', 'analyse_bar_resutat',]
- def get_form(self, request, obj=None, **kwargs):
- form = self.form
- print(form)
- return form
- def analyse_bar_resutat(self, request, obj=None):
- return 'vide'
- def has_delete_permission(self, request, obj=None):
- return False
- def has_add_permission(self, request, obj=None):
- return False
- def has_change_permission(self, request, obj=None):
- return False
- class StatisqueQCMAdmin(admin.ModelAdmin):
- readonly_fields = [ 'uuid', 'creation', 'modification', 'nombre_de_question', 'nom','sujet', 'langue', 'nombre_de_participant']
- #fields = ('nom', 'sujet', 'actif', 'langue', 'creation', 'modification', 'nombre_de_question', 'texte_courriel', 'debut', 'indication_gereral', 'conclusion')
- list_display = ('nom', 'creation', 'modification')
- fieldsets = (
- (None, {
- 'fields': (
- ('nom',),
- ('sujet',),
- ('creation', 'langue', 'actif',),
- ( 'modification', 'nombre_de_question', 'nombre_de_participant'),
- )
- }),
- )
- inlines = [
- statisque_QCM_inline,
- ]
- def nombre_de_participant(self, obj=None):
- res = 0
- if obj is not None:
- try:
- res = liens_sondage.objects.filter(sondage=obj).count()
- except liens_sondage.DoesNotExist:
- res = "Erreur"
- return res
- def has_delete_permission(self, request, obj=None):
- return False
- def has_add_permission(self, request, obj=None):
- return False
- ########################################################################################################################
- #
- # Modéle pour le sondage QCM
- #
- #
- class objet_sondage(models.Model):
- #
- # Reférence sodnage
- #
- uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
- nom = models.CharField(max_length=80, blank=True, null=True, verbose_name="Nom sondage")
- sujet = models.TextField(max_length=1024, blank=True, null=True, verbose_name="sujet")
- texte_courriel = models.TextField(max_length=1024, blank=True, null=True, verbose_name="Texte du courriel a envoyer")
- debut = models.TextField(max_length=1024, blank=True, null=True, verbose_name="Texte invitation")
- indication_gereral = models.TextField(max_length=1024, blank=True, null=True, verbose_name="indication general")
- conclusion = models.TextField(max_length=1024, blank=True, null=True, verbose_name="conclusion sodnage")
- creation = models.DateTimeField(auto_now_add=True, verbose_name="Date création")
- modification = models.DateTimeField(auto_now=True, verbose_name="Date de modification")
- actif = models.BooleanField(default=True, verbose_name="Actif")
- nombre_de_question = models.PositiveSmallIntegerField(default=0, verbose_name="Nombre de question")
- langue = models.ForeignKey(TypeLangue, on_delete=models.DO_NOTHING, null=True, verbose_name="Choix de la langue")
- def __unicode__(self):
- return self.nom
- def __str__(self):
- return self.__unicode__()
- def save(self):
- # self.modification = datetime.now()
- self.nombre_de_question = question_sondage_base.objects.filter(sondage=self.uuid, active=True).count()
- super(objet_sondage, self).save()
- class Meta:
- verbose_name = "Crée un Sondage"
- verbose_name_plural = "Crée des Sondages"
- class question_sondage_base(models.Model):
- #
- # Base générique pour les autres types de question
- #
- sondage = models.ForeignKey('objet_sondage', on_delete=models.CASCADE, null=False, verbose_name="Sondage")
- ordre = models.PositiveSmallIntegerField(default=0, verbose_name="Ordre de la question")
- question = models.CharField(max_length=260, blank=True, null=True, verbose_name="Question")
- obligatoire = models.BooleanField(default=True, verbose_name="Réponse obligatoire")
- creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
- modification = models.DateTimeField(auto_now=True, verbose_name="Date de modification")
- active = models.BooleanField(default=True, verbose_name="Active")
- def __unicode__(self):
- return "{0} et question {1}".format(self.sondage.nom, self.question)
- def __str__(self):
- return self.__unicode__()
- class question_sondage_QCM(question_sondage_base):
- #
- # Extension QCM
- #
- choix_1 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 1")
- choix_2 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 2")
- choix_3 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 3")
- choix_4 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 4")
- choix_5 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 5")
- choix_6 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 6")
- choix_7 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 7")
- choix_8 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 8")
- choix_9 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 9")
- def __unicode__(self):
- return "{0} et question {1}".format(self.sondage.nom, self.question)
- def __str__(self):
- return self.__unicode__()
- class liens_sondage(models.Model):
- #
- # Liens avec l'utilisateur
- #
- uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
- courriel = models.EmailField(max_length=80, blank=True, null=True, verbose_name="Courriel")
- creation = models.DateTimeField(auto_now=True, verbose_name="date fiche")
- sondage = models.ForeignKey('objet_sondage', on_delete=models.CASCADE, null=True, verbose_name="Sondage")
- question_courante = models.PositiveSmallIntegerField(default=0, verbose_name="Question en cours")
- courriel_notification = models.BooleanField(default=False, verbose_name="Courriel de notification envoyé")
- creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
- def __unicode__(self):
- return "Sondage {0} pour le compte de {1}".format(self.sondage,self.courriel)
- def __str__(self):
- return self.__unicode__()
- def envoie_courriel_notification(self):
- liens = "https://" + settings.URL + "/" +self.sondage.langue.predicat + settings.SONDAGE + "?uuid=" +str(self.uuid)
- messageCourriel = self.sondage.texte_courriel.format(liens)
- destinataire = [self.courriel]
- sujet = '{0}'.format(self.sondage.nom)
- expediteur = '[email protected]'
- envoie = send_mail(sujet, messageCourriel, expediteur, destinataire , fail_silently=False)
- return envoie
- def save(self):
- if self.courriel_notification is False:
- self.envoie_courriel_notification()
- self.courriel_notification = True
- super(liens_sondage, self).save()
- class Meta:
- verbose_name = "Ajout & visalisation"
- verbose_name_plural = "Ajouts & visalisations"
- class resultat_sondage(models.Model):
- sondage = models.ForeignKey('liens_sondage', on_delete=models.CASCADE, null=True, verbose_name="Sondage")
- question = models.CharField(max_length=260, blank=True, null=True, verbose_name="Question")
- reponse = models.CharField(max_length=80, blank=True, null=True , verbose_name="Réponse")
- position = models.PositiveSmallIntegerField(default=0, verbose_name="position")
- nombre_choix = models.PositiveSmallIntegerField(default=0, verbose_name="nombre de choix")
- ordre = models.PositiveSmallIntegerField(default=0, verbose_name="Ordre de la question")
- creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
- def __unicode__(self):
- #return "{0} pour {1}".format(self.sondage.courriel,self.question)
- #return " question numeros {}".format(self.ordre)
- return "{0}---> {1}".format(self.ordre,self.question)
- def __str__(self):
- return self.__unicode__()
- class Meta:
- verbose_name = "Gestion de réponse numero"
- verbose_name_plural = "Gestions des Reponses numéros"
Advertisement
Add Comment
Please, Sign In to add comment