Repository: ciudadanointeligente/votainteligente-portal-electoral

Issue:
Candidate has_answered siempre en false
¿Cómo se hace para que deje de mostrar el enlace a twitter para candidatos que tienen todas las respuestas?
¿Cómo se hace para cambiar "pídele" por "pedile"?



Discussion:
Además, en los casos en que las respuestas ya están, podría decir "leer sus propuestas" o algo así, hoy un usuario se confundió creyendo que el sitio era para pedirle las posicones a los candidatos en vez de para leerlas.

"compáralo" con otro candidato. poner COMPARALO

Sabes tengo un poco la duda, por que antes teníamos un flag por cada candidato, te parece si colocamos este dato en el candidate.extra_info? Aún estoy pensando en cómo debe ser que un candidato está marcado como has_answered o no.

Quizás deba ser algo así como: Si al menos tiene una pregunta respondida entonces el has_answered = True. Qué piensan?

Si le falta alguna va en false, para que aparezca el link para pedirle su
posición
El jul 24, 2015 4:40 PM, "Luis Felipe Álvarez Burgos" <
notifications@github.com> escribió:

> Quizás deba ser algo así como: Si al menos tiene una pregunta respondida
> entonces el has_answered = True. Qué piensan?
> 
> —
> Reply to this email directly or view it on GitHub
> https://github.com/ciudadanointeligente/votainteligente-portal-electoral/issues/272#issuecomment-124670036
> .

Ya esa es mi pregunta, tenemos 2 opciones:
- Si tiene una respondida entonces el `has_answer = True`
- Sólo si tienen todas respondidas  `has_answer = True`


Resolving patch:
diff --git a/elections/models.py b/elections/models.py
--- a/elections/models.py
+++ b/elections/models.py
@@ -6,7 +6,7 @@
 from popolo.models import Person, Area
 from django.utils.translation import ugettext_lazy as _
 from markdown_deux.templatetags.markdown_deux_tags import markdown_allowed
-from candidator.models import Category, Topic as CanTopic
+from candidator.models import Category, Topic as CanTopic, TakenPosition
 from picklefield.fields import PickledObjectField
 from django.conf import settings
 from django.utils.encoding import python_2_unicode_compatible
@@ -38,6 +38,11 @@ def twitter(self):
         if links:
             return links.first()
 
+    @property
+    def has_answered(self):
+        are_there_answers = TakenPosition.objects.filter(person=self, position__isnull=False).exists()
+        return are_there_answers
+
     class Meta:
         verbose_name = _("Candidato")
         verbose_name_plural = _("Candidatos")


Test patch:
diff --git a/elections/tests/version2/models_tests.py b/elections/tests/version2/models_tests.py
--- a/elections/tests/version2/models_tests.py
+++ b/elections/tests/version2/models_tests.py
@@ -2,7 +2,7 @@
 from elections.tests import VotaInteligenteTestCase as TestCase
 from popolo.models import Person, ContactDetail
 from elections.models import Candidate, Election, QuestionCategory, PersonalData
-from candidator.models import Category
+from candidator.models import Category, Position, TakenPosition
 from django.template.loader import get_template
 from django.template import Context, Template
 from django.test import override_settings
@@ -111,6 +111,26 @@ def test_ranking_twitter_button(self):
         actual_twitter_button = actual_twitter_button_template.render(Context({"candidate": candidate}))
         self.assertEquals(actual_twitter_button, expected_twitter_button)
 
+    def test_candidate_has_answered(self):
+        TakenPosition.objects.all().delete()
+        candidate = Candidate.objects.get(id=1)
+        category = QuestionCategory.objects.create(name="Perros", election=self.election)
+        topic = Topic.objects.create(
+            label=u"Should marijuana be legalized?",
+            category=category,
+            description=u"This is a description of the topic of marijuana")
+        position = Position.objects.create(
+            topic=topic,
+            label=u"Yes",
+            description=u"Yes, means that it is considered a good thing for marijuana to be legalized"
+        )
+        taken_position = TakenPosition.objects.create(topic=topic,
+                                                      person=candidate)
+        self.assertFalse(candidate.has_answered)
+        taken_position.position = position
+        taken_position.save()
+        self.assertTrue(candidate.has_answered)
+
 
 class CandidateExtraInfoTestCase(Version2TestCase):
     def test_can_have_extra_info(self):