From 312ed577143c454a7c85a49198c62a2f9c6e3a0d Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Wed, 22 Mar 2017 19:09:58 +0200 Subject: [PATCH] Move changes from feature-member --- members/models.py | 122 ++++++++++++---------------------------------- members/views.py | 1 - 2 files changed, 31 insertions(+), 92 deletions(-) diff --git a/members/models.py b/members/models.py index aa52019..7fefdd0 100644 --- a/members/models.py +++ b/members/models.py @@ -4,115 +4,55 @@ from datetime import datetime from io import StringIO import csv - -class Member(models.Model): +class BaseMember(models.Model): ''' - Member model represets one member on the registry + Base model for member. ''' - first_name = models.CharField(max_length=127) last_name = models.CharField(max_length=127) email = models.EmailField() POR = models.CharField(max_length=255) # place of residence AYY = models.BooleanField(default=False) jas = models.BooleanField(default=False) - created = models.DateTimeField(default=timezone.now) - paid = models.DateTimeField(default=datetime.fromtimestamp(0)) - - def get_dict(self): - return { - 'id': self.id, - 'first_name': self.first_name, - 'last_name': self.last_name, - 'email': self.email, - 'POR': self.POR, - 'AYY': self.AYY, - 'jas': self.jas, - 'created': date2str(self.created), - 'paid': date2str(self.paid), - } - @classmethod - def create_from_dict(cls, d): - mbr = cls() - mbr.update_from_dict(d) - return mbr - - def update_from_dict(self, d): - dmap = { - 'first_name': reverse_map('first_name'), - 'last_name': reverse_map('last_name'), - 'email': reverse_map('email'), - 'POR': reverse_map('POR'), - 'AYY': reverse_map('AYY'), - 'jas': reverse_map('jas'), - 'paid': reverse_map('paid', str2date), - } - for k, v in d.items(): - try: - self.__setattr__(dmap[k].key, dmap[k].parser(v)) - except KeyError: - pass - self.save() - - @classmethod - def import_csv(cls, csv_string): - reader = csv.reader(StringIO(csv_string.strip())) - response = {"status": "success", "errors": []} - try: - data = list(reader) - except ValueError: - return {"status": "failure", "errors": ["could not parse csv file"]} - - affirmative_answers = ['yes', 'y', '1', 'true', "kyllä", "khyl"] - for row in data: - - try: - obj = cls.objects.create( - first_name=row[0], - last_name=row[1], - email=row[2], - POR=row[3], - AYY=row[4].lower() in affirmative_answers, - jas=row[5].lower() in affirmative_answers, - paid=timezone.now() - ) - print("added obj {}".format(obj)) - - except: - response["status"] = "failure" - response["errors"].append("failure adding item {}".format(", ".join(row))) - - return response - - def __str__(self): - return "{} {}".format(self.first_name, self.last_name) + class Meta: + abstract = True -class MemberRequest(models.Model): - member = models.ForeignKey(Member) +class MemberRequest(BaseMember): + ''' + Member request model represents one member request. + ''' + submitted = models.DateTimeField(default=timezone.now) + + +class Payment(models.Model): + ''' + Payment model representing one payment event + ''' + date = models.DateTimeField(default=datetime.fromtimestamp(0)) + source = models.CharField(max_length=255) + first_name = models.CharField(max_length=255) + last_name = models.CharField(max_length=255) + email = models.EmailField(max_length=255) + member = models.ForeignKey('Member', on_delete=models.SET_NULL, blank=True, null=True) def get_dict(self): return { 'id': self.id, - 'member': self.member.get_dict(), + 'date': date2str(self.date), + 'source': self.source, + 'first_name': self.first_name, + 'last_name': self.last_name, + 'email': self.email, + 'member': self.member.get_dict() if self.member else {} } -def date2str(date): +class Member(BaseMember): ''' - Convert date to a standard date string + Member model represets one member on the registry. ''' - if date is None: - return None - return date.strftime("%Y-%m-%d %H:%M:%S") + created = models.DateTimeField(default=timezone.now) + paid = models.DateTimeField(default=timezone.now) #this needs to be assigned as Payment.date - -def str2date(s): - return datetime.strptime(s,"%Y-%m-%d %H:%M:%S") - - -class reverse_map: - def __init__(self, key, parser=lambda x: x): - self.key = key - self.parser = parser diff --git a/members/views.py b/members/views.py index f710860..c4a5920 100644 --- a/members/views.py +++ b/members/views.py @@ -32,7 +32,6 @@ class MembersList(generics.ListCreateAPIView): permission_classes = (HasRights, permissions.IsAuthenticated, ) throttle_classes = (BurstRateThrottle, SustainedRateThrottle, ) - class MemberDetails(generics.RetrieveUpdateDestroyAPIView): queryset = Member.objects.all() serializer_class = MemberSerializer