Merge pull request #1063 from emanuelschuetze/fix-1023
Improved motion csv import messages (fixes #1023)
This commit is contained in:
commit
962636f84c
@ -56,13 +56,13 @@ class Assignment(SlideMixin, models.Model):
|
|||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
permissions = (
|
permissions = (
|
||||||
('can_see_assignment', ugettext_noop('Can see assignments')), # TODO: Add plural s to the codestring
|
('can_see_assignment', ugettext_noop('Can see elections')), # TODO: Add plural s to the codestring
|
||||||
('can_nominate_other', ugettext_noop('Can nominate another person')),
|
('can_nominate_other', ugettext_noop('Can nominate another person')),
|
||||||
('can_nominate_self', ugettext_noop('Can nominate oneself')),
|
('can_nominate_self', ugettext_noop('Can nominate oneself')),
|
||||||
('can_manage_assignment', ugettext_noop('Can manage assignments')), # TODO: Add plural s also to the codestring
|
('can_manage_assignment', ugettext_noop('Can manage elections')), # TODO: Add plural s also to the codestring
|
||||||
)
|
)
|
||||||
ordering = ('name',)
|
ordering = ('name',)
|
||||||
verbose_name = ugettext_noop('Assignment')
|
verbose_name = ugettext_noop('Election')
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.name
|
return self.name
|
||||||
@ -88,7 +88,7 @@ class Assignment(SlideMixin, models.Model):
|
|||||||
raise ValueError(_('%s is not a valid status.') % html_strong(status))
|
raise ValueError(_('%s is not a valid status.') % html_strong(status))
|
||||||
if self.status == status:
|
if self.status == status:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
_('The assignment status is already %s.') % html_strong(status_dict[status]))
|
_('The election status is already %s.') % html_strong(status_dict[status]))
|
||||||
self.status = status
|
self.status = status
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<a href="{{ assignment|absolute_url }}">{{ assignment }}</a>
|
<a href="{{ assignment|absolute_url }}">{{ assignment }}</a>
|
||||||
</li>
|
</li>
|
||||||
{% empty %}
|
{% empty %}
|
||||||
<li>{% trans 'No assignments available.' %}</li>
|
<li>{% trans 'No elections available.' %}</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2013-11-12 10:56+0100\n"
|
"POT-Creation-Date: 2013-11-16 20:18+0100\n"
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
@ -314,7 +314,7 @@ msgstr ""
|
|||||||
#: motion/templates/motion/category_form.html:27
|
#: motion/templates/motion/category_form.html:27
|
||||||
#: motion/templates/motion/motion_form.html:67
|
#: motion/templates/motion/motion_form.html:67
|
||||||
#: motion/templates/motion/motion_form_csv_import.html:42
|
#: motion/templates/motion/motion_form_csv_import.html:42
|
||||||
#: motion/templates/motion/poll_form.html:73
|
#: motion/templates/motion/poll_form.html:74
|
||||||
#: participant/templates/participant/edit.html:56
|
#: participant/templates/participant/edit.html:56
|
||||||
#: participant/templates/participant/group_edit.html:31
|
#: participant/templates/participant/group_edit.html:31
|
||||||
#: participant/templates/participant/import.html:44
|
#: participant/templates/participant/import.html:44
|
||||||
@ -415,7 +415,7 @@ msgid "Do you want to save the changed order of agenda items?"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: agenda/templates/agenda/overview.html:33
|
#: agenda/templates/agenda/overview.html:33
|
||||||
#: agenda/templates/agenda/view.html:86 assignment/models.py:288
|
#: agenda/templates/agenda/view.html:86 assignment/models.py:289
|
||||||
#: assignment/views.py:565
|
#: assignment/views.py:565
|
||||||
#: assignment/templates/assignment/assignment_detail.html:210
|
#: assignment/templates/assignment/assignment_detail.html:210
|
||||||
#: assignment/templates/assignment/assignment_detail.html:214
|
#: assignment/templates/assignment/assignment_detail.html:214
|
||||||
@ -423,18 +423,18 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/slide.html:72 motion/models.py:699
|
#: assignment/templates/assignment/slide.html:72 motion/models.py:699
|
||||||
#: motion/pdf.py:124 motion/pdf.py:269
|
#: motion/pdf.py:124 motion/pdf.py:269
|
||||||
#: motion/templates/motion/motion_detail.html:215
|
#: motion/templates/motion/motion_detail.html:215
|
||||||
#: motion/templates/motion/slide.html:21 utils/views.py:333
|
#: motion/templates/motion/slide.html:23 utils/views.py:333
|
||||||
msgid "Yes"
|
msgid "Yes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: agenda/templates/agenda/overview.html:34
|
#: agenda/templates/agenda/overview.html:34
|
||||||
#: agenda/templates/agenda/view.html:87 assignment/models.py:288
|
#: agenda/templates/agenda/view.html:87 assignment/models.py:289
|
||||||
#: assignment/views.py:566
|
#: assignment/views.py:566
|
||||||
#: assignment/templates/assignment/assignment_detail.html:211
|
#: assignment/templates/assignment/assignment_detail.html:211
|
||||||
#: assignment/templates/assignment/slide.html:69 motion/models.py:699
|
#: assignment/templates/assignment/slide.html:69 motion/models.py:699
|
||||||
#: motion/pdf.py:124 motion/pdf.py:270
|
#: motion/pdf.py:124 motion/pdf.py:270
|
||||||
#: motion/templates/motion/motion_detail.html:216
|
#: motion/templates/motion/motion_detail.html:216
|
||||||
#: motion/templates/motion/slide.html:22 utils/views.py:333
|
#: motion/templates/motion/slide.html:24 utils/views.py:333
|
||||||
msgid "No"
|
msgid "No"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/assignment_detail.html:113
|
#: assignment/templates/assignment/assignment_detail.html:113
|
||||||
#: assignment/templates/assignment/poll_view.html:87
|
#: assignment/templates/assignment/poll_view.html:87
|
||||||
#: mediafile/templates/mediafile/pdfs_widget.html:32
|
#: mediafile/templates/mediafile/pdfs_widget.html:32
|
||||||
#: motion/templates/motion/poll_form.html:70
|
#: motion/templates/motion/poll_form.html:71
|
||||||
#: projector/templates/projector/overlay_message_widget.html:10
|
#: projector/templates/projector/overlay_message_widget.html:10
|
||||||
#: templates/formbuttons_saveapply.html:7
|
#: templates/formbuttons_saveapply.html:7
|
||||||
msgid "Apply"
|
msgid "Apply"
|
||||||
@ -670,7 +670,7 @@ msgid "Comment on the ballot paper"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:59
|
#: assignment/models.py:59
|
||||||
msgid "Can see assignments"
|
msgid "Can see elections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:60
|
#: assignment/models.py:60
|
||||||
@ -682,52 +682,61 @@ msgid "Can nominate oneself"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:62
|
#: assignment/models.py:62
|
||||||
msgid "Can manage assignments"
|
msgid "Can manage elections"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:87
|
#: assignment/models.py:65 assignment/views.py:497 assignment/views.py:515
|
||||||
|
#: assignment/templates/assignment/assignment_detail.html:8
|
||||||
|
#: assignment/templates/assignment/assignment_list.html:33
|
||||||
|
#: assignment/templates/assignment/poll_view.html:7
|
||||||
|
#: assignment/templates/assignment/slide.html:18
|
||||||
|
#: assignment/templates/search/assignment-results.html:7
|
||||||
|
msgid "Election"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: assignment/models.py:88
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s is not a valid status."
|
msgid "%s is not a valid status."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:90
|
#: assignment/models.py:91
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The assignment status is already %s."
|
msgid "The election status is already %s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:103
|
#: assignment/models.py:104
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "<b>%s</b> is already a candidate."
|
msgid "<b>%s</b> is already a candidate."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:105 assignment/views.py:157
|
#: assignment/models.py:106 assignment/views.py:157
|
||||||
msgid "The candidate list is already closed."
|
msgid "The candidate list is already closed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:112
|
#: assignment/models.py:113
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s does not want to be a candidate."
|
msgid "%s does not want to be a candidate."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:126
|
#: assignment/models.py:127
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s is no candidate"
|
msgid "%s is no candidate"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:235 assignment/views.py:309
|
#: assignment/models.py:236 assignment/views.py:309
|
||||||
msgid "Assignment"
|
msgid "Assignment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:259
|
#: assignment/models.py:260
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Ballot %d"
|
msgid "Ballot %d"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:288 motion/models.py:699
|
#: assignment/models.py:289 motion/models.py:699
|
||||||
msgid "Abstain"
|
msgid "Abstain"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/models.py:290 motion/templates/motion/poll_form.html:38
|
#: assignment/models.py:291 motion/templates/motion/poll_form.html:39
|
||||||
msgid "Votes"
|
msgid "Votes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -848,7 +857,7 @@ msgstr ""
|
|||||||
msgid "Ballot was successfully deleted."
|
msgid "Ballot was successfully deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/views.py:332 assignment/templates/assignment/widget.html:22
|
#: assignment/views.py:332
|
||||||
msgid "No assignments available."
|
msgid "No assignments available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -897,7 +906,7 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/assignment_detail.html:228
|
#: assignment/templates/assignment/assignment_detail.html:228
|
||||||
#: assignment/templates/assignment/poll_view.html:55
|
#: assignment/templates/assignment/poll_view.html:55
|
||||||
#: assignment/templates/assignment/slide.html:86
|
#: assignment/templates/assignment/slide.html:86
|
||||||
#: motion/templates/motion/poll_form.html:47
|
#: motion/templates/motion/poll_form.html:48
|
||||||
msgid "Invalid votes"
|
msgid "Invalid votes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -908,20 +917,11 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/slide.html:99
|
#: assignment/templates/assignment/slide.html:99
|
||||||
#: assignment/templates/assignment/slide.html:104 motion/pdf.py:125
|
#: assignment/templates/assignment/slide.html:104 motion/pdf.py:125
|
||||||
#: motion/templates/motion/motion_detail.html:220
|
#: motion/templates/motion/motion_detail.html:220
|
||||||
#: motion/templates/motion/poll_form.html:51
|
#: motion/templates/motion/poll_form.html:52
|
||||||
#: motion/templates/motion/slide.html:26 poll/models.py:67
|
#: motion/templates/motion/slide.html:28 poll/models.py:67
|
||||||
msgid "Votes cast"
|
msgid "Votes cast"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/views.py:497 assignment/views.py:515
|
|
||||||
#: assignment/templates/assignment/assignment_detail.html:8
|
|
||||||
#: assignment/templates/assignment/assignment_list.html:33
|
|
||||||
#: assignment/templates/assignment/poll_view.html:7
|
|
||||||
#: assignment/templates/assignment/slide.html:18
|
|
||||||
#: assignment/templates/search/assignment-results.html:7
|
|
||||||
msgid "Election"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: assignment/views.py:522
|
#: assignment/views.py:522
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%d. ballot"
|
msgid "%d. ballot"
|
||||||
@ -945,7 +945,7 @@ msgstr[1] ""
|
|||||||
#: assignment/templates/assignment/assignment_detail.html:212
|
#: assignment/templates/assignment/assignment_detail.html:212
|
||||||
#: assignment/templates/assignment/slide.html:70 motion/pdf.py:124
|
#: assignment/templates/assignment/slide.html:70 motion/pdf.py:124
|
||||||
#: motion/pdf.py:271 motion/templates/motion/motion_detail.html:217
|
#: motion/pdf.py:271 motion/templates/motion/motion_detail.html:217
|
||||||
#: motion/templates/motion/slide.html:23
|
#: motion/templates/motion/slide.html:25
|
||||||
msgid "Abstention"
|
msgid "Abstention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1040,7 +1040,7 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/assignment_detail.html:233
|
#: assignment/templates/assignment/assignment_detail.html:233
|
||||||
#: assignment/templates/assignment/slide.html:90 motion/pdf.py:124
|
#: assignment/templates/assignment/slide.html:90 motion/pdf.py:124
|
||||||
#: motion/templates/motion/motion_detail.html:218
|
#: motion/templates/motion/motion_detail.html:218
|
||||||
#: motion/templates/motion/slide.html:24
|
#: motion/templates/motion/slide.html:26
|
||||||
msgid "Invalid"
|
msgid "Invalid"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1053,7 +1053,7 @@ msgstr ""
|
|||||||
#: assignment/templates/assignment/slide.html:8
|
#: assignment/templates/assignment/slide.html:8
|
||||||
#: motion/templates/motion/motion_detail.html:197
|
#: motion/templates/motion/motion_detail.html:197
|
||||||
#: motion/templates/motion/motion_list.html:41
|
#: motion/templates/motion/motion_list.html:41
|
||||||
#: motion/templates/motion/slide.html:7
|
#: motion/templates/motion/slide.html:8
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1090,33 +1090,37 @@ msgid "Short description (for ballot paper)"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/templates/assignment/poll_view.html:33
|
#: assignment/templates/assignment/poll_view.html:33
|
||||||
#: motion/templates/motion/poll_form.html:30
|
#: motion/templates/motion/poll_form.html:31
|
||||||
msgid "Special values"
|
msgid "Special values"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/templates/assignment/poll_view.html:33
|
#: assignment/templates/assignment/poll_view.html:33
|
||||||
#: motion/templates/motion/poll_form.html:30 poll/models.py:225
|
#: motion/templates/motion/poll_form.html:31 poll/models.py:225
|
||||||
msgid "majority"
|
msgid "majority"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/templates/assignment/poll_view.html:33
|
#: assignment/templates/assignment/poll_view.html:33
|
||||||
#: motion/templates/motion/poll_form.html:30 poll/models.py:227
|
#: motion/templates/motion/poll_form.html:31 poll/models.py:227
|
||||||
#: poll/models.py:229
|
#: poll/models.py:229
|
||||||
msgid "undocumented"
|
msgid "undocumented"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/templates/assignment/poll_view.html:78
|
#: assignment/templates/assignment/poll_view.html:78
|
||||||
#: motion/templates/motion/poll_form.html:61
|
#: motion/templates/motion/poll_form.html:62
|
||||||
msgid "Ballot paper as PDF"
|
msgid "Ballot paper as PDF"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: assignment/templates/assignment/poll_view.html:84
|
#: assignment/templates/assignment/poll_view.html:84
|
||||||
#: motion/templates/motion/poll_form.html:67
|
#: motion/templates/motion/poll_form.html:68
|
||||||
#: projector/templates/projector/select_widgets.html:28
|
#: projector/templates/projector/select_widgets.html:28
|
||||||
#: templates/formbuttons_save.html:4 templates/formbuttons_saveapply.html:4
|
#: templates/formbuttons_save.html:4 templates/formbuttons_saveapply.html:4
|
||||||
msgid "Save"
|
msgid "Save"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: assignment/templates/assignment/widget.html:22
|
||||||
|
msgid "No elections available."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: config/models.py:21
|
#: config/models.py:21
|
||||||
msgid "Can manage configuration"
|
msgid "Can manage configuration"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1271,7 +1275,7 @@ msgstr ""
|
|||||||
#: motion/templates/motion/motion_detail.html:21
|
#: motion/templates/motion/motion_detail.html:21
|
||||||
#: motion/templates/motion/motion_diff.html:35
|
#: motion/templates/motion/motion_diff.html:35
|
||||||
#: motion/templates/motion/motion_diff.html:39
|
#: motion/templates/motion/motion_diff.html:39
|
||||||
#: motion/templates/motion/slide.html:59
|
#: motion/templates/motion/slide.html:61
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1365,48 +1369,56 @@ msgstr ""
|
|||||||
msgid "No PDFs available."
|
msgid "No PDFs available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:39 participant/api.py:104
|
#: motion/csv_import.py:37 participant/api.py:104
|
||||||
msgid "Import file has wrong character encoding, only UTF-8 is supported!"
|
msgid "Import file has wrong character encoding, only UTF-8 is supported!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:57 motion/csv_import.py:70 motion/csv_import.py:108
|
#: motion/csv_import.py:51
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Line %d of import file:"
|
msgid "Line %d:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:58
|
#: motion/csv_import.py:57
|
||||||
msgid ""
|
msgid ""
|
||||||
"Line is malformed. Motion not imported. Please check the required values."
|
"Line is malformed. Motion not imported. Please check the required values."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:71
|
#: motion/csv_import.py:69
|
||||||
msgid "Identifier already exists. Motion not imported."
|
msgid "Identifier already exists. Motion not imported."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:85
|
#: motion/csv_import.py:83
|
||||||
msgid "Category unknown. No category is used."
|
msgid "Category unknown. No category is used."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:87
|
#: motion/csv_import.py:85
|
||||||
msgid "Several suitable categories found. No category is used."
|
msgid "Several suitable categories found. No category is used."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:96
|
#: motion/csv_import.py:94
|
||||||
msgid "Several suitable submitters found."
|
msgid "Several suitable submitters found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:103
|
#: motion/csv_import.py:101
|
||||||
msgid "Submitter unknown. Default submitter is used."
|
msgid "Submitter unknown. Default submitter is used."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/csv_import.py:117
|
#: motion/csv_import.py:114
|
||||||
msgid "Motion imported"
|
msgid "Motion imported"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: motion/csv_import.py:121
|
||||||
|
msgid "Errors"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: motion/csv_import.py:129
|
||||||
|
msgid "Warnings"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: motion/forms.py:37 motion/models.py:539 motion/pdf.py:147
|
#: motion/forms.py:37 motion/models.py:539 motion/pdf.py:147
|
||||||
#: motion/templates/motion/motion_detail.html:88
|
#: motion/templates/motion/motion_detail.html:88
|
||||||
#: motion/templates/motion/motion_diff.html:54
|
#: motion/templates/motion/motion_diff.html:54
|
||||||
#: motion/templates/motion/slide.html:67
|
#: motion/templates/motion/slide.html:69
|
||||||
msgid "Reason"
|
msgid "Reason"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1417,7 +1429,7 @@ msgstr ""
|
|||||||
#: motion/forms.py:75 motion/pdf.py:48
|
#: motion/forms.py:75 motion/pdf.py:48
|
||||||
#: motion/templates/motion/motion_detail.html:177
|
#: motion/templates/motion/motion_detail.html:177
|
||||||
#: motion/templates/motion/motion_list.html:42
|
#: motion/templates/motion/motion_list.html:42
|
||||||
#: motion/templates/motion/slide.html:39
|
#: motion/templates/motion/slide.html:41
|
||||||
msgid "Submitter"
|
msgid "Submitter"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1437,7 +1449,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: motion/forms.py:119 motion/templates/motion/motion_detail.html:242
|
#: motion/forms.py:119 motion/templates/motion/motion_detail.html:242
|
||||||
#: motion/templates/motion/motion_list.html:40
|
#: motion/templates/motion/motion_list.html:40
|
||||||
#: motion/templates/motion/slide.html:48
|
#: motion/templates/motion/slide.html:50
|
||||||
msgid "Category"
|
msgid "Category"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1506,9 +1518,9 @@ msgstr ""
|
|||||||
#: motion/templates/motion/motion_detail.html:19
|
#: motion/templates/motion/motion_detail.html:19
|
||||||
#: motion/templates/motion/motion_diff.html:6
|
#: motion/templates/motion/motion_diff.html:6
|
||||||
#: motion/templates/motion/motion_diff.html:19
|
#: motion/templates/motion/motion_diff.html:19
|
||||||
#: motion/templates/motion/poll_form.html:6
|
#: motion/templates/motion/poll_form.html:7
|
||||||
#: motion/templates/motion/poll_form.html:14
|
#: motion/templates/motion/poll_form.html:15
|
||||||
#: motion/templates/motion/slide.html:58
|
#: motion/templates/motion/slide.html:60
|
||||||
#: motion/templates/search/motion-results.html:7
|
#: motion/templates/search/motion-results.html:7
|
||||||
msgid "Motion"
|
msgid "Motion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -1861,7 +1873,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: motion/templates/motion/motion_detail.html:32
|
#: motion/templates/motion/motion_detail.html:32
|
||||||
#: motion/templates/motion/motion_list.html:78
|
#: motion/templates/motion/motion_list.html:78
|
||||||
#: motion/templates/motion/poll_form.html:21
|
#: motion/templates/motion/poll_form.html:22
|
||||||
msgid "Show motion"
|
msgid "Show motion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -1988,7 +2000,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: motion/templates/motion/motion_diff.html:27
|
#: motion/templates/motion/motion_diff.html:27
|
||||||
#: motion/templates/motion/motion_form.html:56
|
#: motion/templates/motion/motion_form.html:56
|
||||||
#: motion/templates/motion/poll_form.html:18
|
#: motion/templates/motion/poll_form.html:19
|
||||||
msgid "Back to motion"
|
msgid "Back to motion"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -2073,15 +2085,15 @@ msgstr ""
|
|||||||
msgid "Needs supporters"
|
msgid "Needs supporters"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/templates/motion/poll_form.html:37
|
#: motion/templates/motion/poll_form.html:38
|
||||||
msgid "Option"
|
msgid "Option"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/templates/motion/slide.html:13
|
#: motion/templates/motion/slide.html:19
|
||||||
msgid "Poll result"
|
msgid "Poll result"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: motion/templates/motion/slide.html:31
|
#: motion/templates/motion/slide.html:33
|
||||||
msgid "No poll results available."
|
msgid "No poll results available."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -27,8 +27,6 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
when the flag 'override' is true. If no or multiple categories found,
|
when the flag 'override' is true. If no or multiple categories found,
|
||||||
the category is set to None.
|
the category is set to None.
|
||||||
"""
|
"""
|
||||||
error_messages = []
|
|
||||||
warning_messages = []
|
|
||||||
count_success = 0
|
count_success = 0
|
||||||
count_lines = 0
|
count_lines = 0
|
||||||
|
|
||||||
@ -43,20 +41,21 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
dialect = csv.Sniffer().sniff(csv_file.readline())
|
dialect = csv.Sniffer().sniff(csv_file.readline())
|
||||||
dialect = csv_ext.patchup(dialect)
|
dialect = csv_ext.patchup(dialect)
|
||||||
csv_file.seek(0)
|
csv_file.seek(0)
|
||||||
|
all_error_messages = []
|
||||||
|
all_warning_messages = []
|
||||||
for (line_no, line) in enumerate(csv.reader(csv_file, dialect=dialect)):
|
for (line_no, line) in enumerate(csv.reader(csv_file, dialect=dialect)):
|
||||||
warnings = []
|
warning = []
|
||||||
if line_no < 1:
|
if line_no < 1:
|
||||||
# Do not read the header line
|
# Do not read the header line
|
||||||
continue
|
continue
|
||||||
|
importline = html_strong(_('Line %d:') % (line_no + 1))
|
||||||
count_lines += 1
|
count_lines += 1
|
||||||
# Check format
|
# Check format
|
||||||
try:
|
try:
|
||||||
(identifier, title, text, reason, submitter, category) = line[:6]
|
(identifier, title, text, reason, submitter, category) = line[:6]
|
||||||
except ValueError:
|
except ValueError:
|
||||||
error_line = html_strong(_('Line %d of import file:') % (line_no + 1))
|
|
||||||
msg = _('Line is malformed. Motion not imported. Please check the required values.')
|
msg = _('Line is malformed. Motion not imported. Please check the required values.')
|
||||||
error_messages.append("%s<br>%s" % (error_line, msg))
|
all_error_messages.append("%s %s" % (importline, msg))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Check existing motions according to the identifier
|
# Check existing motions according to the identifier
|
||||||
@ -67,9 +66,8 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
motion = Motion(identifier=identifier)
|
motion = Motion(identifier=identifier)
|
||||||
else:
|
else:
|
||||||
if not override:
|
if not override:
|
||||||
error_line = html_strong(_('Line %d of import file:') % (line_no + 1))
|
|
||||||
msg = _('Identifier already exists. Motion not imported.')
|
msg = _('Identifier already exists. Motion not imported.')
|
||||||
error_messages.append("%s<br>%s" % (error_line, msg))
|
all_error_messages.append("%s %s" % (importline, msg))
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
motion = Motion()
|
motion = Motion()
|
||||||
@ -82,9 +80,9 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
try:
|
try:
|
||||||
motion.category = Category.objects.get(name=category)
|
motion.category = Category.objects.get(name=category)
|
||||||
except Category.DoesNotExist:
|
except Category.DoesNotExist:
|
||||||
warnings.append(_('Category unknown. No category is used.'))
|
warning.append(_('Category unknown. No category is used.'))
|
||||||
except Category.MultipleObjectsReturned:
|
except Category.MultipleObjectsReturned:
|
||||||
warnings.append(_('Several suitable categories found. No category is used.'))
|
warning.append(_('Several suitable categories found. No category is used.'))
|
||||||
motion.save()
|
motion.save()
|
||||||
|
|
||||||
# Add submitter
|
# Add submitter
|
||||||
@ -93,24 +91,22 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
for person in Persons():
|
for person in Persons():
|
||||||
if person.clean_name == submitter.decode('utf8'):
|
if person.clean_name == submitter.decode('utf8'):
|
||||||
if person_found:
|
if person_found:
|
||||||
warnings.append(_('Several suitable submitters found.'))
|
warning.append(_('Several suitable submitters found.'))
|
||||||
person_found = False
|
person_found = False
|
||||||
break
|
break
|
||||||
else:
|
else:
|
||||||
new_submitter = person
|
new_submitter = person
|
||||||
person_found = True
|
person_found = True
|
||||||
if not person_found:
|
if not person_found:
|
||||||
warnings.append(_('Submitter unknown. Default submitter is used.'))
|
warning.append(_('Submitter unknown. Default submitter is used.'))
|
||||||
new_submitter = default_submitter
|
new_submitter = default_submitter
|
||||||
|
|
||||||
# show summarized warning message for each import line
|
# add all warnings of each csv line to one warning message
|
||||||
if warnings:
|
if warning:
|
||||||
warning_line = _('Line %d of import file:') % (line_no + 1)
|
warning_message_string = "%s " % importline
|
||||||
warning_message_string = "%s<ul>" % html_strong(warning_line)
|
warning_message_string += " ".join(warning)
|
||||||
for w in warnings:
|
all_warning_messages.append(warning_message_string)
|
||||||
warning_message_string += "<li>%s</li>" % w
|
|
||||||
warning_message_string += "</ul>"
|
|
||||||
warning_messages.append(warning_message_string)
|
|
||||||
motion.clear_submitters()
|
motion.clear_submitters()
|
||||||
motion.add_submitter(new_submitter)
|
motion.add_submitter(new_submitter)
|
||||||
|
|
||||||
@ -118,4 +114,20 @@ def import_motions(csv_file, default_submitter, override=False, importing_person
|
|||||||
person=importing_person)
|
person=importing_person)
|
||||||
count_success += 1
|
count_success += 1
|
||||||
|
|
||||||
return (count_success, count_lines, error_messages, warning_messages)
|
# Build final error message with all error items (one bullet point for each csv line)
|
||||||
|
full_error_message = None
|
||||||
|
if all_error_messages:
|
||||||
|
full_error_message = "%s <ul>" % html_strong(_("Errors"))
|
||||||
|
for error in all_error_messages:
|
||||||
|
full_error_message += "<li>%s</li>" % error
|
||||||
|
full_error_message += "</ul>"
|
||||||
|
|
||||||
|
# Build final warning message with all warning items (one bullet point for each csv line)
|
||||||
|
full_warning_message = None
|
||||||
|
if all_warning_messages:
|
||||||
|
full_warning_message = "%s <ul>" % html_strong(_("Warnings"))
|
||||||
|
for warning in all_warning_messages:
|
||||||
|
full_warning_message += "<li>%s</li>" % warning
|
||||||
|
full_warning_message += "</ul>"
|
||||||
|
|
||||||
|
return (count_success, count_lines, [full_error_message], [full_warning_message])
|
||||||
|
Loading…
Reference in New Issue
Block a user