Merge branch 'hotfix/paid-more-bonuses-1-07-19' into 'master'

не начисляются бонусы за вторую покуппку

See merge request lilschool/site!336
remotes/origin/hotfix/auth-popup-fix-5-07-19
Danil 7 years ago
commit 9b87dda4a9
  1. 6
      apps/notification/tasks.py
  2. 52
      apps/payment/migrations/0037_add_paid_one_more_bonuses.py
  3. 4
      apps/user/models.py

@ -160,10 +160,12 @@ def send_gift_certificate(user_gift_certificate):
@app.task
def send_child_birthday_email_and_bonuses():
for user_id, email in set(Child.objects.filter(birthday=now().date()).select_related('user')
today = now().date()
for user_id, email in set(Child.objects.filter(birthday__day=today.day, birthday__month=today.month).select_related('user')
.values_list('user_id', 'user__email')):
print('user', email)
if not UserBonus.objects.filter(user=user_id, is_service=True, action_name=UserBonus.ACTION_CHILD_BIRTHDAY).count():
if not UserBonus.objects.filter(user=user_id, is_service=True, action_name=UserBonus.ACTION_CHILD_BIRTHDAY,
created_at__year=today.year).count():
UserBonus.objects.create(user=user_id, amount=UserBonus.AMOUNT_CHILD_BIRTHDAY, is_service=True,
action_name=UserBonus.ACTION_CHILD_BIRTHDAY)
try:

@ -0,0 +1,52 @@
# Generated by Django 2.0.7 on 2019-07-02 12:33
from django.db import migrations
from paymentwall import Pingback
def add_bonuses(apps, schema_editor):
def paid_one_more(user):
payments_cnt = SchoolPayment.objects.filter(status__in=PW_PAID_STATUSES, user=user,
add_days=False).count()
if payments_cnt > 1:
return True
payments_cnt += CoursePayment.objects.filter(status__in=PW_PAID_STATUSES, user=user).count()
if payments_cnt > 1:
return True
payments_cnt += DrawingCampPayment.objects.filter(status__in=PW_PAID_STATUSES, user=user).count()
return payments_cnt > 1
User = apps.get_model('user', 'User')
UserBonus = apps.get_model('payment', 'UserBonus')
Payment = apps.get_model('payment', 'Payment')
SchoolPayment = apps.get_model('payment', 'SchoolPayment')
CoursePayment = apps.get_model('payment', 'CoursePayment')
DrawingCampPayment = apps.get_model('payment', 'DrawingCampPayment')
ACTION_PAID_ONE_MORE = 'paid_one_more'
AMOUNT_PAID_ONE_MORE = 100
PW_PAID_STATUSES = [
Pingback.PINGBACK_TYPE_REGULAR,
Pingback.PINGBACK_TYPE_GOODWILL,
Pingback.PINGBACK_TYPE_RISK_REVIEWED_ACCEPTED,
]
users = set(Payment.objects.filter(status__in=PW_PAID_STATUSES).values_list('user_id', flat=True))
exclude_users = set(UserBonus.objects.filter(is_service=True, action_name=ACTION_PAID_ONE_MORE,
user_id__in=users).values_list('user_id', flat=True))
for user in User.objects.filter(id__in=users - exclude_users):
if paid_one_more(user):
print('email', user.email)
UserBonus.objects.create(user=user, amount=AMOUNT_PAID_ONE_MORE, is_service=True,
action_name=ACTION_PAID_ONE_MORE)
class Migration(migrations.Migration):
dependencies = [
('payment', '0036_drawingcamppayment'),
]
operations = [
migrations.RunPython(add_bonuses),
]

@ -154,7 +154,11 @@ class User(AbstractUser):
from apps.payment.models import SchoolPayment, CoursePayment, Payment, DrawingCampPayment
payments_cnt = SchoolPayment.objects.filter(status__in=Payment.PW_PAID_STATUSES, user=self,
add_days=False).count()
if payments_cnt > 1:
return True
payments_cnt += CoursePayment.objects.filter(status__in=Payment.PW_PAID_STATUSES, user=self).count()
if payments_cnt > 1:
return True
payments_cnt += DrawingCampPayment.objects.filter(status__in=Payment.PW_PAID_STATUSES, user=self).count()
return payments_cnt > 1

Loading…
Cancel
Save