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 from apps.course.models import Course from apps.school.models import SchoolSchedule 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 = 'Платежи за школу'