commit
12554c71e6
@ -160,6 +160,7 @@ class Assignment(models.Model, SlideMixin):
|
|||||||
participants = []
|
participants = []
|
||||||
for candidate in candidates.all():
|
for candidate in candidates.all():
|
||||||
participants.append(candidate.person)
|
participants.append(candidate.person)
|
||||||
|
participants.sort(key=lambda person: person.sort_name)
|
||||||
return participants
|
return participants
|
||||||
#return candidates.values_list('person', flat=True)
|
#return candidates.values_list('person', flat=True)
|
||||||
|
|
||||||
@ -178,7 +179,6 @@ class Assignment(models.Model, SlideMixin):
|
|||||||
poll.set_options([{'candidate': person} for person in self.candidates])
|
poll.set_options([{'candidate': person} for person in self.candidates])
|
||||||
return poll
|
return poll
|
||||||
|
|
||||||
|
|
||||||
def vote_results(self, only_published):
|
def vote_results(self, only_published):
|
||||||
"""
|
"""
|
||||||
returns a table represented as a list with all candidates from all
|
returns a table represented as a list with all candidates from all
|
||||||
|
@ -539,7 +539,7 @@ class AssignmentPollPDF(PDFView):
|
|||||||
stylesheet['Ballot_title']))
|
stylesheet['Ballot_title']))
|
||||||
cell.append(Paragraph(self.poll.assignment.polldescription,
|
cell.append(Paragraph(self.poll.assignment.polldescription,
|
||||||
stylesheet['Ballot_subtitle']))
|
stylesheet['Ballot_subtitle']))
|
||||||
options = self.poll.get_options().order_by('candidate')
|
options = self.poll.get_options()
|
||||||
|
|
||||||
ballot_string = _("%d. ballot") % self.poll.get_ballot()
|
ballot_string = _("%d. ballot") % self.poll.get_ballot()
|
||||||
candidate_string = ungettext("%d candidate", "%d candidates",
|
candidate_string = ungettext("%d candidate", "%d candidates",
|
||||||
|
@ -162,8 +162,8 @@ class Motion(models.Model, SlideMixin):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def supporters(self):
|
def supporters(self):
|
||||||
for object in self.motionsupporter_set.all():
|
return sorted([object.person for object in self.motionsupporter_set.all()],
|
||||||
yield object.person
|
key=lambda person: person.sort_name)
|
||||||
|
|
||||||
def is_supporter(self, person):
|
def is_supporter(self, person):
|
||||||
try:
|
try:
|
||||||
|
@ -83,6 +83,12 @@ class User(DjangoUser, PersonMixin, Person, SlideMixin):
|
|||||||
self.set_password(password)
|
self.set_password(password)
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sort_name(self):
|
||||||
|
if config['participant_sort_users_by_first_name']:
|
||||||
|
return self.first_name.lower()
|
||||||
|
return self.last_name.lower()
|
||||||
|
|
||||||
@models.permalink
|
@models.permalink
|
||||||
def get_absolute_url(self, link='view'):
|
def get_absolute_url(self, link='view'):
|
||||||
"""
|
"""
|
||||||
|
@ -29,6 +29,14 @@ class Person(object):
|
|||||||
"""
|
"""
|
||||||
return str(self.person_id)
|
return str(self.person_id)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def sort_name(self):
|
||||||
|
"""
|
||||||
|
Return the part of the name, which is used for sorting.
|
||||||
|
For example the pre-name or the last-name
|
||||||
|
"""
|
||||||
|
return self.clean_name.lower()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def clean_name(self):
|
def clean_name(self):
|
||||||
"""
|
"""
|
||||||
|
@ -22,7 +22,7 @@ class PersonChoices(object):
|
|||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
if self.field.empty_label is not None:
|
if self.field.empty_label is not None:
|
||||||
yield (u"", self.field.empty_label)
|
yield (u"", self.field.empty_label)
|
||||||
for person in Persons():
|
for person in sorted(Persons(), key=lambda person: person.sort_name):
|
||||||
yield (person.person_id, person)
|
yield (person.person_id, person)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user