diff --git a/apps/notification/tasks.py b/apps/notification/tasks.py index 462e22bc..de75dd64 100644 --- a/apps/notification/tasks.py +++ b/apps/notification/tasks.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: diff --git a/apps/payment/migrations/0037_add_paid_one_more_bonuses.py b/apps/payment/migrations/0037_add_paid_one_more_bonuses.py new file mode 100644 index 00000000..0a7aba82 --- /dev/null +++ b/apps/payment/migrations/0037_add_paid_one_more_bonuses.py @@ -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), + ] diff --git a/apps/user/models.py b/apps/user/models.py index 4ae7e2f8..0e910b99 100644 --- a/apps/user/models.py +++ b/apps/user/models.py @@ -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