parent
448748285d
commit
8b4bf99dd4
4 changed files with 136 additions and 11 deletions
@ -0,0 +1,16 @@ |
||||
# Generated by Django 2.0.2 on 2018-02-20 17:37 |
||||
|
||||
from django.db import migrations |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('payment', '0001_initial'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.DeleteModel( |
||||
name='Purchase', |
||||
), |
||||
] |
||||
@ -0,0 +1,71 @@ |
||||
# Generated by Django 2.0.2 on 2018-02-20 19:12 |
||||
|
||||
from django.conf import settings |
||||
import django.contrib.postgres.fields |
||||
import django.contrib.postgres.fields.jsonb |
||||
from django.db import migrations, models |
||||
import django.db.models.deletion |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
initial = True |
||||
|
||||
dependencies = [ |
||||
('course', '0034_auto_20180215_1503'), |
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL), |
||||
('contenttypes', '0002_remove_content_type_name'), |
||||
('payment', '0002_delete_purchase'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.CreateModel( |
||||
name='Payment', |
||||
fields=[ |
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), |
||||
('amount', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='Итого')), |
||||
('status', models.PositiveSmallIntegerField(choices=[(0, 'regular'), (1, 'goodwill'), (2, 'negative'), (200, 'risk under review'), (201, 'risk reviewed accepted'), (202, 'risk reviewed declined'), (203, 'risk authorization voided'), (12, 'subscription cancelation'), (13, 'subscription expired'), (14, 'subscription payment failed')], verbose_name='Статус платежа')), |
||||
('data', django.contrib.postgres.fields.jsonb.JSONField(default={}, verbose_name='Данные платежа от провайдера')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Платеж', |
||||
'verbose_name_plural': 'Платежи', |
||||
}, |
||||
), |
||||
migrations.CreateModel( |
||||
name='CoursePayment', |
||||
fields=[ |
||||
('payment_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='payment.Payment')), |
||||
('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='course.Course', verbose_name='Курс')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Платеж за курс', |
||||
'verbose_name_plural': 'Платежи за курсы', |
||||
}, |
||||
bases=('payment.payment',), |
||||
), |
||||
migrations.CreateModel( |
||||
name='SchoolPayment', |
||||
fields=[ |
||||
('payment_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='payment.Payment')), |
||||
('weekdays', django.contrib.postgres.fields.ArrayField(base_field=models.IntegerField(), size=7, verbose_name='Дни недели')), |
||||
('date_start', models.DateField(verbose_name='Дата начала подписки')), |
||||
('date_end', models.DateField(verbose_name='Дата окончания подписки')), |
||||
], |
||||
options={ |
||||
'verbose_name': 'Платеж за курс', |
||||
'verbose_name_plural': 'Платежи за курсы', |
||||
}, |
||||
bases=('payment.payment',), |
||||
), |
||||
migrations.AddField( |
||||
model_name='payment', |
||||
name='polymorphic_ctype', |
||||
field=models.ForeignKey(editable=False, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='polymorphic_payment.payment_set+', to='contenttypes.ContentType'), |
||||
), |
||||
migrations.AddField( |
||||
model_name='payment', |
||||
name='user', |
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, verbose_name='Пользователь'), |
||||
), |
||||
] |
||||
@ -1,15 +1,52 @@ |
||||
from django.db import models |
||||
from django.contrib.auth import get_user_model |
||||
from django.contrib.postgres.fields import ArrayField, JSONField |
||||
|
||||
from paymentwall import Pingback |
||||
from polymorphic.models import PolymorphicModel |
||||
|
||||
class Purchase(models.Model): |
||||
COMPLETE = 'COMPLETE' |
||||
CHARGEBACK = 'CHARGEBACK' |
||||
REFUNDED = 'REFUNDED' |
||||
ERROR = 'ERROR' |
||||
PENDING = 'PENDING' |
||||
from apps.course.models import Course |
||||
from apps.school.models import SchoolSchedule |
||||
|
||||
transaction_id = models.PositiveIntegerField() |
||||
status = models.CharField(max_length=50) |
||||
product_id = models.PositiveIntegerField() |
||||
created_at = models.DateTimeField(auto_now_add=True) |
||||
updated_at = models.DateTimeField(auto_now=True) |
||||
User = get_user_model() |
||||
|
||||
|
||||
class Payment(PolymorphicModel): |
||||
PW_STATUS_CHOICES = ( |
||||
(Pingback.PINGBACK_TYPE_REGULAR, 'regular',), |
||||
(Pingback.PINGBACK_TYPE_GOODWILL, 'goodwill',), |
||||
(Pingback.PINGBACK_TYPE_NEGATIVE, 'negative',), |
||||
(Pingback.PINGBACK_TYPE_RISK_UNDER_REVIEW, 'risk under review',), |
||||
(Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED, 'risk reviewed accepted',), |
||||
(Pingback.PINGBACK_TYPE_RISK_REVIEWED_DECLINED, 'risk reviewed declined',), |
||||
(Pingback.PINGBACK_TYPE_RISK_AUTHORIZATION_VOIDED, 'risk authorization voided',), |
||||
(Pingback.PINGBACK_TYPE_SUBSCRIPTION_CANCELLATION, 'subscription cancelation',), |
||||
(Pingback.PINGBACK_TYPE_SUBSCRIPTION_EXPIRED, 'subscription expired',), |
||||
(Pingback.PINGBACK_TYPE_SUBSCRIPTION_PAYMENT_FAILED, 'subscription payment failed',), |
||||
) |
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='Пользователь') |
||||
amount = models.DecimalField('Итого', max_digits=8, decimal_places=2, default=0) |
||||
status = models.PositiveSmallIntegerField('Статус платежа', choices=PW_STATUS_CHOICES) |
||||
data = JSONField('Данные платежа от провайдера', default={}) |
||||
|
||||
class Meta: |
||||
verbose_name = 'Платеж' |
||||
verbose_name_plural = 'Платежи' |
||||
|
||||
|
||||
class CoursePayment(Payment): |
||||
course = models.ForeignKey(Course, on_delete=models.CASCADE, verbose_name='Курс') |
||||
|
||||
class Meta: |
||||
verbose_name = 'Платеж за курс' |
||||
verbose_name_plural = 'Платежи за курсы' |
||||
|
||||
|
||||
class SchoolPayment(Payment): |
||||
weekdays = ArrayField(models.IntegerField(), size=7, verbose_name='Дни недели') |
||||
date_start = models.DateField('Дата начала подписки') |
||||
date_end = models.DateField('Дата окончания подписки') |
||||
|
||||
class Meta: |
||||
verbose_name = 'Платеж за курс' |
||||
verbose_name_plural = 'Платежи за курсы' |
||||
|
||||
@ -0,0 +1 @@ |
||||
Subproject commit 1b1f6c04088f5e7ab089c2179f3ab19ff8d81078 |
||||
Loading…
Reference in new issue