davlefou

Untitled

Nov 18th, 2021
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 10.56 KB | None | 0 0
  1. ########################################################################################################################
  2. #
  3. # Visualisation des sondages parti Admin.
  4. #
  5. #
  6. class StatisqueQCM(objet_sondage):
  7.     class Meta:
  8.         proxy=True
  9.  
  10. class question_sondage_QCMForm(forms.ModelForm):
  11.  
  12.     def __init__(self, *args, **kwargs):
  13.         super(question_sondage_QCMForm, self).__init__(*args, **kwargs)
  14.         instance = None
  15.         for key, value in kwargs.items():
  16.             if key == 'instance':
  17.                 instance = value
  18.  
  19.         self.val = self.statistique_de_reponse(instance)
  20.         self.fields['test'] = forms.CharField(widget = forms.TextInput())
  21.         self.fields['graphe'] = forms.ChoiceField(required=False, choices=self.val, label='Graphe')
  22.  
  23.     def get_initial_for_field(self, field, field_name):
  24.         return super(question_sondage_QCMForm, self).get_initial_for_field(field, field_name)
  25.  
  26.     def is_valid(self):
  27.         return super(question_sondage_QCMForm, self).is_valid()
  28.  
  29.     def save(self, commit=True):
  30.         return super(question_sondage_QCMForm, self).save(commit=commit)
  31.  
  32.     def save_m2m(self):
  33.         return super(question_sondage_QCMForm, self).save_m2m()
  34.  
  35.     def statistique_de_reponse(self, instance):
  36.         print(instance)
  37.         val = list()
  38.         for element in instance._meta.get_fields():
  39.             nom = element.name.split('_')
  40.             if nom[0] == "choix" and getattr(instance, element.name) is not None:
  41.                 try:
  42.                     res = resultat_sondage.objects.filter(sondage__sondage=instance.sondage, ordre=instance.ordre, position=nom[1]).count()
  43.                 except resultat_sondage.DoesNotExist:
  44.                     res = 0
  45.                 val.append((nom[1], res, getattr(instance, element.name)))
  46.  
  47.         print(val)
  48.         return val
  49.  
  50.  
  51.     class Meta:
  52.         model = question_sondage_QCM
  53.         exclude = ()
  54.         #fields = '__all__'
  55.  
  56. class statisque_QCM_inline(admin.StackedInline):
  57.     model = question_sondage_QCM
  58.     form = question_sondage_QCMForm
  59.     extra = 0
  60.     fk_name = 'sondage'
  61.     readonly_fields = ['analyse_bar_resutat',]
  62.     exclude = ['creation', 'modification']
  63.     #fields = ['ordre', 'question', 'obligatoire', 'analyse_bar_resutat',]
  64.  
  65.     def get_form(self, request, obj=None, **kwargs):
  66.         form = self.form
  67.         print(form)
  68.         return form
  69.  
  70.     def analyse_bar_resutat(self, request, obj=None):
  71.         return 'vide'
  72.  
  73.     def has_delete_permission(self, request, obj=None):
  74.         return False
  75.  
  76.     def has_add_permission(self, request, obj=None):
  77.         return False
  78.  
  79.     def has_change_permission(self, request, obj=None):
  80.         return False
  81.  
  82.  
  83. class StatisqueQCMAdmin(admin.ModelAdmin):
  84.     readonly_fields = [ 'uuid', 'creation', 'modification', 'nombre_de_question', 'nom','sujet', 'langue', 'nombre_de_participant']
  85.     #fields = ('nom', 'sujet', 'actif', 'langue', 'creation', 'modification', 'nombre_de_question', 'texte_courriel', 'debut', 'indication_gereral', 'conclusion')
  86.     list_display = ('nom', 'creation', 'modification')
  87.     fieldsets = (
  88.         (None, {
  89.              'fields': (
  90.                 ('nom',),
  91.                 ('sujet',),
  92.                 ('creation', 'langue', 'actif',),
  93.                 ( 'modification', 'nombre_de_question', 'nombre_de_participant'),
  94.              )
  95.         }),
  96.     )
  97.  
  98.     inlines = [
  99.         statisque_QCM_inline,
  100.     ]
  101.  
  102.  
  103.     def nombre_de_participant(self, obj=None):
  104.         res = 0
  105.         if obj is not None:
  106.             try:
  107.                 res = liens_sondage.objects.filter(sondage=obj).count()
  108.             except liens_sondage.DoesNotExist:
  109.                 res = "Erreur"
  110.         return res
  111.  
  112.     def has_delete_permission(self, request, obj=None):
  113.         return False
  114.  
  115.     def has_add_permission(self, request, obj=None):
  116.         return False
  117.  
  118.  
  119.  
  120. ########################################################################################################################
  121. #
  122. # Modéle pour le sondage QCM
  123. #
  124. #
  125. class objet_sondage(models.Model):
  126.     #
  127.     # Reférence sodnage
  128.     #
  129.     uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  130.     nom = models.CharField(max_length=80, blank=True, null=True, verbose_name="Nom sondage")
  131.     sujet = models.TextField(max_length=1024, blank=True, null=True, verbose_name="sujet")
  132.     texte_courriel = models.TextField(max_length=1024, blank=True, null=True, verbose_name="Texte du courriel a envoyer")
  133.     debut = models.TextField(max_length=1024, blank=True, null=True, verbose_name="Texte invitation")
  134.     indication_gereral = models.TextField(max_length=1024, blank=True, null=True, verbose_name="indication general")
  135.     conclusion = models.TextField(max_length=1024, blank=True, null=True, verbose_name="conclusion sodnage")
  136.     creation = models.DateTimeField(auto_now_add=True, verbose_name="Date création")
  137.     modification = models.DateTimeField(auto_now=True,  verbose_name="Date de modification")
  138.     actif = models.BooleanField(default=True, verbose_name="Actif")
  139.     nombre_de_question = models.PositiveSmallIntegerField(default=0, verbose_name="Nombre de question")
  140.     langue = models.ForeignKey(TypeLangue, on_delete=models.DO_NOTHING, null=True, verbose_name="Choix de la langue")
  141.  
  142.     def __unicode__(self):
  143.         return self.nom
  144.  
  145.     def __str__(self):
  146.         return self.__unicode__()
  147.  
  148.     def save(self):
  149.     #    self.modification = datetime.now()
  150.         self.nombre_de_question = question_sondage_base.objects.filter(sondage=self.uuid, active=True).count()
  151.         super(objet_sondage, self).save()
  152.  
  153.     class Meta:
  154.         verbose_name = "Crée un Sondage"
  155.         verbose_name_plural = "Crée des Sondages"
  156.  
  157.  
  158. class question_sondage_base(models.Model):
  159.     #
  160.     # Base générique pour les autres types de question
  161.     #
  162.     sondage = models.ForeignKey('objet_sondage', on_delete=models.CASCADE, null=False, verbose_name="Sondage")
  163.     ordre = models.PositiveSmallIntegerField(default=0, verbose_name="Ordre de la question")
  164.     question = models.CharField(max_length=260, blank=True, null=True, verbose_name="Question")
  165.     obligatoire = models.BooleanField(default=True, verbose_name="Réponse obligatoire")
  166.     creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
  167.     modification = models.DateTimeField(auto_now=True,  verbose_name="Date de modification")
  168.     active = models.BooleanField(default=True, verbose_name="Active")
  169.  
  170.     def __unicode__(self):
  171.         return "{0} et question {1}".format(self.sondage.nom, self.question)
  172.  
  173.     def __str__(self):
  174.         return self.__unicode__()
  175.  
  176.  
  177. class question_sondage_QCM(question_sondage_base):
  178.     #
  179.     # Extension QCM
  180.     #
  181.     choix_1 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 1")
  182.     choix_2 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 2")
  183.     choix_3 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 3")
  184.     choix_4 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 4")
  185.     choix_5 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 5")
  186.     choix_6 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 6")
  187.     choix_7 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 7")
  188.     choix_8 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 8")
  189.     choix_9 = models.CharField(max_length=80, blank=True, null=True , verbose_name="Choix 9")
  190.  
  191.     def __unicode__(self):
  192.         return "{0} et question {1}".format(self.sondage.nom, self.question)
  193.  
  194.     def __str__(self):
  195.         return self.__unicode__()
  196.  
  197.  
  198. class liens_sondage(models.Model):
  199.     #
  200.     # Liens avec l'utilisateur
  201.     #
  202.     uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  203.     courriel = models.EmailField(max_length=80, blank=True, null=True, verbose_name="Courriel")
  204.     creation = models.DateTimeField(auto_now=True, verbose_name="date fiche")
  205.     sondage = models.ForeignKey('objet_sondage', on_delete=models.CASCADE, null=True, verbose_name="Sondage")
  206.     question_courante = models.PositiveSmallIntegerField(default=0, verbose_name="Question en cours")
  207.     courriel_notification = models.BooleanField(default=False, verbose_name="Courriel de notification envoyé")
  208.     creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
  209.  
  210.     def __unicode__(self):
  211.         return "Sondage {0} pour le compte de {1}".format(self.sondage,self.courriel)
  212.  
  213.     def __str__(self):
  214.         return self.__unicode__()
  215.  
  216.     def envoie_courriel_notification(self):
  217.  
  218.         liens = "https://" + settings.URL + "/" +self.sondage.langue.predicat + settings.SONDAGE + "?uuid=" +str(self.uuid)
  219.         messageCourriel = self.sondage.texte_courriel.format(liens)
  220.         destinataire = [self.courriel]
  221.         sujet = '{0}'.format(self.sondage.nom)
  222.         expediteur = '[email protected]'
  223.  
  224.         envoie = send_mail(sujet, messageCourriel, expediteur, destinataire , fail_silently=False)
  225.  
  226.         return  envoie
  227.  
  228.     def save(self):
  229.         if self.courriel_notification is False:
  230.             self.envoie_courriel_notification()
  231.             self.courriel_notification = True
  232.         super(liens_sondage, self).save()
  233.  
  234.  
  235.     class Meta:
  236.         verbose_name = "Ajout & visalisation"
  237.         verbose_name_plural = "Ajouts & visalisations"
  238.  
  239.  
  240.  
  241. class resultat_sondage(models.Model):
  242.     sondage = models.ForeignKey('liens_sondage', on_delete=models.CASCADE, null=True, verbose_name="Sondage")
  243.     question = models.CharField(max_length=260, blank=True, null=True, verbose_name="Question")
  244.     reponse = models.CharField(max_length=80, blank=True, null=True , verbose_name="Réponse")
  245.     position = models.PositiveSmallIntegerField(default=0, verbose_name="position")
  246.     nombre_choix = models.PositiveSmallIntegerField(default=0, verbose_name="nombre de choix")
  247.     ordre = models.PositiveSmallIntegerField(default=0, verbose_name="Ordre de la question")
  248.     creation = models.DateTimeField(auto_now=True, verbose_name="Date de creation")
  249.  
  250.     def __unicode__(self):
  251.         #return "{0} pour {1}".format(self.sondage.courriel,self.question)
  252.         #return " question numeros {}".format(self.ordre)
  253.         return "{0}---> {1}".format(self.ordre,self.question)
  254.  
  255.     def __str__(self):
  256.         return self.__unicode__()
  257.  
  258.     class Meta:
  259.         verbose_name = "Gestion de réponse numero"
  260.         verbose_name_plural = "Gestions des Reponses numéros"
Advertisement
Add Comment
Please, Sign In to add comment