Membership table improvements

This commit is contained in:
Oliver Marks 2018-10-11 07:49:18 +01:00
parent 47aa81fb1d
commit a4f629885d
7 changed files with 42 additions and 7 deletions

View File

@ -31,6 +31,8 @@ def create_or_update_membership(user, signup_details, complete=False):
member.email = signup_details.get('email') member.email = signup_details.get('email')
member.reference = signup_details.get('reference') member.reference = signup_details.get('reference')
member.payment = signup_details.get('amount') member.payment = signup_details.get('amount')
member.payment_date = signup_details.get('last_payment')
member.join_date = start_date
member.date = start_date member.date = start_date
member.save() member.save()

View File

@ -56,11 +56,12 @@ class Command(BaseCommand):
signup_details=sub, signup_details=sub,
complete=True) complete=True)
message = '\t{prefix}{date} - {reference} - {payment} - {status} - {email}'.format(**{ message = '\t{prefix}{date} - {reference} - {payment} - {last_payment} - {status} - {email} '.format(**{
'prefix': prefix, 'prefix': prefix,
'date': sub.get('start_date'), 'date': sub.get('start_date'),
'reference': sub.get('reference'), 'reference': sub.get('reference'),
'payment': sub.get('amount'), 'payment': sub.get('amount'),
'last_payment': sub.get('last_payment'),
'status': sub.get('status'), 'status': sub.get('status'),
'email': sub.get('email') 'email': sub.get('email')
}) })

View File

@ -51,14 +51,16 @@ class gocardless_provider:
# for paying_member in self.client.mandates.list().records: # for paying_member in self.client.mandates.list().records:
for paying_member in self.client.subscriptions.list().records: for paying_member in self.client.subscriptions.list().records:
mandate = self.client.mandates.get(paying_member.links.mandate) mandate = self.client.mandates.get(paying_member.links.mandate)
user = self.client.customers.get(mandate.links.customer) customer = self.client.customers.get(mandate.links.customer)
# TODO get the last couple of months not all time payments
payments = self.client.payments.list(params={"customer": customer.id}).records
# gocardless does not have a reference so we use the id instead # gocardless does not have a reference so we use the id instead
yield { yield {
'status': paying_member.status, 'status': paying_member.status,
'email': user.email, 'email': customer.email,
'start_date': paying_member.created_at, 'start_date': paying_member.created_at,
'reference': paying_member.id, 'reference': paying_member.id,
'last_payment': payments[0].charge_date,
'amount': paying_member.amount * 0.01} 'amount': paying_member.amount * 0.01}
def get_redirect_url(self): def get_redirect_url(self):

View File

@ -25,9 +25,9 @@
{% if membership %} {% if membership %}
<h3>Membership status</h3> <h3>Membership status</h3>
<p>Member since {{membership.date}}</p> <p>Member since {{membership.join_date}}</p>
<p>Membership Status: {{ membership.get_status }}</p> <p>Membership Status: {{ membership.get_status }}</p>
<p>Last Payment: {{membership.date}}</p> <p>Last Payment: {{membership.payment_date}}</p>
<p>Amount: &pound;{{membership.payment}}</p> <p>Amount: &pound;{{membership.payment}}</p>
{% else %} {% else %}
You are not currently a member consider signing up. You are not currently a member consider signing up.

View File

@ -50,7 +50,7 @@ class MyUserAdmin(AuthUserAdmin):
@admin.register(Membership) @admin.register(Membership)
class MembershipAdmin(ModelAdmin): class MembershipAdmin(ModelAdmin):
list_display = ('user_id', 'email', 'payment', 'date', 'status') list_display = ('user_id', 'join_date','email', 'payment', 'payment_date', 'status')
list_filter = ('status',) list_filter = ('status',)
def get_urls(self): def get_urls(self):

View File

@ -0,0 +1,24 @@
# Generated by Django 2.1.1 on 2018-10-11 07:52
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('users', '0010_membership_over_18'),
]
operations = [
migrations.AddField(
model_name='membership',
name='join_date',
field=models.DateTimeField(default=django.utils.timezone.now),
),
migrations.AddField(
model_name='membership',
name='payment_date',
field=models.DateTimeField(default=None),
),
]

View File

@ -5,6 +5,7 @@ from django.conf import settings
from django.contrib.auth.models import AbstractUser from django.contrib.auth.models import AbstractUser
from django.urls import reverse from django.urls import reverse
from django.db import models from django.db import models
from django.utils import timezone
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from stdimage.models import StdImageField from stdimage.models import StdImageField
from django.db.models.signals import post_save from django.db.models.signals import post_save
@ -85,6 +86,11 @@ class Membership(models.Model):
on_delete=models.CASCADE, on_delete=models.CASCADE,
) )
payment = models.DecimalField(max_digits=6, decimal_places=2, default=0.0) payment = models.DecimalField(max_digits=6, decimal_places=2, default=0.0)
payment_date = models.DateTimeField(default=None)
join_date = models.DateTimeField(default=timezone.now)
# date not specific enough
date = models.DateTimeField() date = models.DateTimeField()
reference = models.CharField(max_length=255) reference = models.CharField(max_length=255)
status = models.PositiveSmallIntegerField( status = models.PositiveSmallIntegerField(