Remove conflict resolver and add dynamic payments

This commit is contained in:
Jan Tuomi
2017-09-20 23:17:55 +03:00
parent 7a435bcbc6
commit b0edaae32e
10 changed files with 197 additions and 129 deletions
+70 -1
View File
@@ -3,12 +3,81 @@ 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):
class Meta:
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):