diff --git a/locale/en/LC_MESSAGES/django.mo b/locale/en/LC_MESSAGES/django.mo index d8f27f1..cc3f55d 100644 Binary files a/locale/en/LC_MESSAGES/django.mo and b/locale/en/LC_MESSAGES/django.mo differ diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index afde5f3..7978039 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-28 23:40+0300\n" +"POT-Creation-Date: 2017-10-02 20:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -198,7 +198,7 @@ msgstr "English" msgid "Submit" msgstr "Submitted" -#: members/forms.py:110 members/tables.py:32 +#: members/forms.py:115 members/tables.py:32 msgid "Member" msgstr "Member" @@ -347,6 +347,16 @@ msgid "Cash payment" msgstr "List payments" #: members/templates/member_add_many.html:41 +msgid "CSV delimiter" +msgstr "" + +#: members/templates/member_add_many.html:44 +msgid "" +"The symbol that is used to separate items in one line. Defaults to " +"';' (semicolon)." +msgstr "" + +#: members/templates/member_add_many.html:48 #: members/templates/member_add_many_confirm.html:22 msgid "Send" msgstr "Send" @@ -526,7 +536,7 @@ msgstr "Successfully updated payment" msgid "Could not update payment object" msgstr "Could not update payment object" -#: members/views/utils.py:115 +#: members/views/utils.py:116 msgid "Missing \"textfield\" POST request field" msgstr "Missing \"textfield\" POST request field" diff --git a/locale/fi/LC_MESSAGES/django.mo b/locale/fi/LC_MESSAGES/django.mo index 619b7a6..fbdf6e5 100644 Binary files a/locale/fi/LC_MESSAGES/django.mo and b/locale/fi/LC_MESSAGES/django.mo differ diff --git a/locale/fi/LC_MESSAGES/django.po b/locale/fi/LC_MESSAGES/django.po index 758ca35..df65fb7 100644 --- a/locale/fi/LC_MESSAGES/django.po +++ b/locale/fi/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-09-28 23:40+0300\n" +"POT-Creation-Date: 2017-10-02 20:52+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -197,7 +197,7 @@ msgstr "englanti" msgid "Submit" msgstr "Lisää" -#: members/forms.py:110 members/tables.py:32 +#: members/forms.py:115 members/tables.py:32 msgid "Member" msgstr "Jäsen" @@ -343,6 +343,18 @@ msgid "Cash payment" msgstr "Käteismaksu" #: members/templates/member_add_many.html:41 +msgid "CSV delimiter" +msgstr "CSV-erotin" + +#: members/templates/member_add_many.html:44 +msgid "" +"The symbol that is used to separate items in one line. Defaults to " +"';' (semicolon)." +msgstr "" +"Merkki, jota käytetään rivin osien erottamiseen. Oletuksena " +"';' (puolipiste)." + +#: members/templates/member_add_many.html:48 #: members/templates/member_add_many_confirm.html:22 msgid "Send" msgstr "Lähetä" @@ -518,7 +530,7 @@ msgstr "Onnistuneesti päivitettiin maksutapahtuma" msgid "Could not update payment object" msgstr "Maksutapahtumaobjektia ei voitu päivittää" -#: members/views/utils.py:115 +#: members/views/utils.py:116 msgid "Missing \"textfield\" POST request field" msgstr "Puuttuva \"textfield\" POST-kenttä" @@ -640,7 +652,7 @@ msgstr "Fuksit" #: webapp/templates/guild.html:7 msgid "Kilta" -msgstr "" +msgstr "Kilta" #: webapp/templates/international.html:7 webapp/templates/navigation.html:30 msgid "International" diff --git a/members/forms.py b/members/forms.py index 0cd4a8c..9a573ee 100644 --- a/members/forms.py +++ b/members/forms.py @@ -52,16 +52,21 @@ class MemberForm(forms.ModelForm): return self._clean_boolean_field('AYY') @staticmethod - def csv_to_models(data, payment_source='AYY'): + def csv_to_models(data, payment_source='AYY', delimiter=','): clean_data = data.strip().split('\n') clean_data = [row.rstrip(',') for row in clean_data] - csv_reader = csv.DictReader(clean_data, fieldnames=MemberForm.Meta.fields) + csv_reader = csv.DictReader(clean_data, fieldnames=MemberForm.Meta.fields, delimiter=delimiter, quoting=csv.QUOTE_NONE) members = [] payments = [] for line in csv_reader: - for key, value in line.items(): - line[key] = value.strip() + try: + for key, value in line.items(): + line[key] = value.strip() + except AttributeError as ex: + logging.error('Invalid line in CSV: "{}"'.format(line)) + logging.error('Delimiter: {}'.format(delimiter)) + raise email = line['email'] member_exists = False diff --git a/members/templates/member_add_many.html b/members/templates/member_add_many.html index 9d9b4e8..148b1b4 100644 --- a/members/templates/member_add_many.html +++ b/members/templates/member_add_many.html @@ -37,6 +37,13 @@ +
+ + +

+ {% blocktrans %}The symbol that is used to separate items in one line. Defaults to ';' (semicolon).{% endblocktrans %} +

+
diff --git a/members/views/utils.py b/members/views/utils.py index 02ac5d2..89839c8 100644 --- a/members/views/utils.py +++ b/members/views/utils.py @@ -108,6 +108,7 @@ def import_csv(request, *args, **kwargs): """Get csv data imported to page and create members based on that.""" try: data = request.POST['textfield'] + delimiter = request.POST.get('delimiter', ',') payment_source = request.POST['payment_source'] except: return render(request, @@ -115,7 +116,7 @@ def import_csv(request, *args, **kwargs): {'error': _('Missing "textfield" POST request field')}) try: - result = MemberForm.csv_to_models(data, payment_source=payment_source) + result = MemberForm.csv_to_models(data, payment_source=payment_source, delimiter=delimiter) except CSVValidationError as ex: logging.exception('Model validation error') return error_view(request, ex.form_errors)