27 |
27 |
from django import forms
|
28 |
28 |
from django.conf import settings
|
29 |
29 |
from django.contrib.auth.models import Group
|
|
30 |
from django.contrib.humanize.templatetags.humanize import ordinal
|
30 |
31 |
from django.core.exceptions import FieldDoesNotExist
|
31 |
32 |
from django.core.validators import URLValidator
|
32 |
33 |
from django.db import transaction
|
... | ... | |
1092 |
1093 |
if not csvline:
|
1093 |
1094 |
continue
|
1094 |
1095 |
if len(csvline) < 3:
|
1095 |
|
raise ValidationError(_('Invalid file format. (line %d)') % (i + 1))
|
|
1096 |
raise ValidationError(_('Invalid file format. (%s event)') % ordinal(i + 1))
|
1096 |
1097 |
if i == 0 and csvline[0].strip('#') in ('date', 'Date', _('date'), _('Date')):
|
1097 |
1098 |
continue
|
1098 |
1099 |
|
... | ... | |
1146 |
1147 |
event.start_datetime = event_datetime
|
1147 |
1148 |
break
|
1148 |
1149 |
else:
|
1149 |
|
raise ValidationError(_('Invalid file format. (date/time format, line %d)') % (i + 1))
|
|
1150 |
raise ValidationError(_('Invalid file format. (date/time format, %s event)') % ordinal(i + 1))
|
1150 |
1151 |
try:
|
1151 |
1152 |
event.places = int(csvline[2])
|
1152 |
1153 |
except ValueError:
|
1153 |
|
raise ValidationError(_('Invalid file format. (number of places, line %d)') % (i + 1))
|
|
1154 |
raise ValidationError(_('Invalid file format. (number of places, %s event)') % ordinal(i + 1))
|
1154 |
1155 |
if len(csvline) >= 4:
|
1155 |
1156 |
try:
|
1156 |
1157 |
event.waiting_list_places = int(csvline[3])
|
1157 |
1158 |
except ValueError:
|
1158 |
1159 |
raise ValidationError(
|
1159 |
|
_('Invalid file format. (number of places in waiting list, line %d)') % (i + 1)
|
|
1160 |
_('Invalid file format. (number of places in waiting list, %s event)')
|
|
1161 |
% ordinal(i + 1)
|
1160 |
1162 |
)
|
1161 |
1163 |
|
1162 |
1164 |
column_index = 7
|
... | ... | |
1183 |
1185 |
except ValueError:
|
1184 |
1186 |
continue
|
1185 |
1187 |
else:
|
1186 |
|
raise ValidationError(_('Invalid file format. (date/time format, line %d)') % (i + 1))
|
|
1188 |
raise ValidationError(
|
|
1189 |
_('Invalid file format. (date/time format, %s event)') % ordinal(i + 1)
|
|
1190 |
)
|
1187 |
1191 |
|
1188 |
1192 |
if len(csvline) >= 11 and csvline[10]: # duration is optional
|
1189 |
1193 |
try:
|
1190 |
1194 |
event.duration = int(csvline[10])
|
1191 |
1195 |
except ValueError:
|
1192 |
|
raise ValidationError(_('Invalid file format. (duration, line %d)') % (i + 1))
|
|
1196 |
raise ValidationError(_('Invalid file format. (duration, %s event)') % ordinal(i + 1))
|
1193 |
1197 |
|
1194 |
1198 |
try:
|
1195 |
1199 |
event.full_clean(exclude=['desk', 'meeting_type', 'primary_event'])
|
... | ... | |
1198 |
1202 |
for label, field_errors in e.message_dict.items():
|
1199 |
1203 |
label_name = self.get_verbose_name(label)
|
1200 |
1204 |
msg = _('%s: ') % label_name if label_name else ''
|
1201 |
|
msg += _('%(errors)s (line %(line)d)') % {
|
|
1205 |
msg += _('%(errors)s (event %(line)d)') % {
|
1202 |
1206 |
'errors': ', '.join(field_errors),
|
1203 |
1207 |
'line': i + 1,
|
1204 |
1208 |
}
|