Merge branch 'develop' into feature-pep8-fixes
This commit is contained in:
+70
-1
@@ -5,6 +5,15 @@ from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from members.models import Member, Payment, Request
|
||||
|
||||
import csv
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
|
||||
class CSVValidationError(Exception):
|
||||
def __init__(self, form_errors):
|
||||
self.form_errors = form_errors
|
||||
|
||||
|
||||
class MemberForm(forms.ModelForm):
|
||||
"""Member model form."""
|
||||
@@ -13,7 +22,67 @@ class MemberForm(forms.ModelForm):
|
||||
"""Meta for Member model form."""
|
||||
|
||||
model = Member
|
||||
fields = ['first_name', 'last_name', 'email', 'AYY', 'jas', 'POR']
|
||||
fields = ['first_name', 'last_name', 'email', 'POR', 'AYY', 'jas']
|
||||
|
||||
class ImportResult:
|
||||
def __init__(self, members, payments):
|
||||
self.members = members
|
||||
self.payments = payments
|
||||
|
||||
def clean_email(self):
|
||||
email = self.cleaned_data['email']
|
||||
|
||||
if Member.objects.filter(email=email).exists():
|
||||
raise forms.ValidationError('Member with email "{}" already exists.'.format(email), code='exists')
|
||||
|
||||
return email
|
||||
|
||||
def clean_jas(self):
|
||||
return bool(int(self.data['jas']))
|
||||
|
||||
def clean_AYY(self):
|
||||
return bool(int(self.data['AYY']))
|
||||
|
||||
@staticmethod
|
||||
def csv_to_models(data, payment_source='AYY'):
|
||||
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)
|
||||
|
||||
members = []
|
||||
payments = []
|
||||
for line in csv_reader:
|
||||
for key, value in line.items():
|
||||
line[key] = value.strip()
|
||||
|
||||
email = line['email']
|
||||
member_exists = False
|
||||
if Member.objects.filter(email=email).exists():
|
||||
member_exists = True
|
||||
|
||||
if not member_exists:
|
||||
form = MemberForm(line)
|
||||
if not form.is_valid():
|
||||
raise CSVValidationError(form.errors)
|
||||
|
||||
model = form.save(commit=False)
|
||||
members.append(model)
|
||||
|
||||
else:
|
||||
member = Member.objects.get(email=email)
|
||||
payment_data = {
|
||||
'source': payment_source,
|
||||
'member': member.id,
|
||||
'date': datetime.datetime.now(),
|
||||
}
|
||||
form = PaymentForm(payment_data)
|
||||
if not form.is_valid():
|
||||
raise CSVValidationError(form.errors)
|
||||
|
||||
model = form.save(commit=False)
|
||||
payments.append(model)
|
||||
|
||||
return MemberForm.ImportResult(members, payments)
|
||||
|
||||
|
||||
class PaymentForm(forms.ModelForm):
|
||||
|
||||
Reference in New Issue
Block a user