diff --git a/api/v1/serializers/payment.py b/api/v1/serializers/payment.py index 0ac2d12a..8d50f217 100644 --- a/api/v1/serializers/payment.py +++ b/api/v1/serializers/payment.py @@ -3,7 +3,7 @@ from rest_framework import serializers from apps.payment.models import ( AuthorBalance, Payment, CoursePayment, SchoolPayment, -) + GiftCertificatePayment) from .user import UserSerializer from .course import CourseSerializer @@ -114,6 +114,8 @@ class PaymentSerializer(serializers.ModelSerializer): return CoursePaymentSerializer(instance, context=self.context).to_representation(instance) elif isinstance(instance, SchoolPayment): return SchoolPaymentSerializer(instance, context=self.context).to_representation(instance) + elif isinstance(instance, GiftCertificatePayment): + return GiftCertificatePaymentSerializer(instance, context=self.context).to_representation(instance) class CoursePaymentCreateSerializer(serializers.ModelSerializer): @@ -181,3 +183,20 @@ class SchoolPaymentSerializer(serializers.ModelSerializer): 'created_at', 'update_at', ) + + +class GiftCertificatePaymentSerializer(serializers.ModelSerializer): + user = UserSerializer() + + class Meta: + model = GiftCertificatePayment + fields = BASE_PAYMENT_FIELDS + ( + 'gift_certificate', + ) + read_only_fields = ( + 'id', + 'user', + 'course', + 'created_at', + 'update_at', + ) diff --git a/apps/payment/management/commands/send_transactions_to_roistat.py b/apps/payment/management/commands/send_transactions_to_roistat.py new file mode 100644 index 00000000..f5569984 --- /dev/null +++ b/apps/payment/management/commands/send_transactions_to_roistat.py @@ -0,0 +1,38 @@ +from django.core.management.base import BaseCommand, CommandError +from django.utils.timezone import now +from paymentwall.pingback import Pingback + +from apps.payment.tasks import transaction_to_roistat +from apps.payment.models import Payment + +import logging +logger = logging.getLogger(__name__) + + +class Command(BaseCommand): + help = 'Send ' + + def add_arguments(self, parser): + parser.add_argument( + 'start_id', type=int, + help='Start payment id', + ) + + def handle(self, *args, **options): + start_id = options.get('start_id') + print('start_id=' + str(start_id)) + + payments = Payment.objects.filter(id__gte=start_id, status__in=Payment.PW_PAID_STATUSES) + for payment in payments: + print('TRANSACTION: ' + str(payment.id)) + + transaction_to_roistat.delay( + payment.user.id, + payment.id, + f'School payment', + payment.amount, + payment.created_at.strftime('%Y-%m-%d %H:%M:%S'), + 0, + f'school', + payment.roistat_visit, + ) diff --git a/apps/payment/templates/payment/gift_certificate_item.html b/apps/payment/templates/payment/gift_certificate_item.html index 5f4a318e..7d4d3d8f 100644 --- a/apps/payment/templates/payment/gift_certificate_item.html +++ b/apps/payment/templates/payment/gift_certificate_item.html @@ -8,9 +8,8 @@
- {% if user_gift_certificate and not user_gift_certificate.bonuses_sent %} - подарочный сертификат - {% else %}подарочный сертификат{% endif %} + Подарочный сертификат +
{{ gift_certificate.price|floatformat:"-2" }}₽
{% if user_gift_certificate %} @@ -22,7 +21,7 @@ {% else %}
- Ожидает получения + Ожидает получения | Код {{ user_gift_certificate.code }}
{% endif %} {% else %} diff --git a/apps/payment/views.py b/apps/payment/views.py index ec9bef56..b9491321 100644 --- a/apps/payment/views.py +++ b/apps/payment/views.py @@ -211,8 +211,8 @@ class PaymentwallCallbackView(View): pingback = Pingback(payment_raw_data, self.get_request_ip()) if pingback.validate(): - spltted = pingback.get_product().get_id().split('_') - product_type_name, payment_id = '_'.join(spltted[:-1]), spltted[-1] + splitted = pingback.get_product().get_id().split('_') + product_type_name, payment_id = '_'.join(splitted[:-1]), splitted[-1] if product_type_name == 'course': product_payment_class = CoursePayment diff --git a/apps/user/templates/user/bonus-history.html b/apps/user/templates/user/bonus-history.html index d0035b54..11c67381 100644 --- a/apps/user/templates/user/bonus-history.html +++ b/apps/user/templates/user/bonus-history.html @@ -49,6 +49,8 @@ {% with payment=bonus.payment %} {% if payment.course %}
Курс. {{ payment.course.title }}
+ {% elif payment.giftcertificate %} +
Подарочный сертификат
{% else %}
{% if request.user_agent.is_mobile %} diff --git a/docker/conf/nginx/conf.d/default.conf b/docker/conf/nginx/conf.d/default.conf index b20174f6..f78513ae 100644 --- a/docker/conf/nginx/conf.d/default.conf +++ b/docker/conf/nginx/conf.d/default.conf @@ -1,3 +1,24 @@ +server { + listen 80; + server_name ~^flower.+; + + root /dev/null; + + access_log off; + error_log /dev/stdout; + + log_not_found off; + + location / { + proxy_pass http://127.0.0.1:5555; + proxy_set_header Host $host; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } +} + server { listen 80 default_server; diff --git a/docker/conf/supervisor/flower.conf b/docker/conf/supervisor/flower.conf new file mode 100644 index 00000000..d89b494d --- /dev/null +++ b/docker/conf/supervisor/flower.conf @@ -0,0 +1,14 @@ +[program:flower] +command=/usr/local/bin/flower -A project +directory=/app/ +environment=HOME="/var/www" +autostart=true +autorestart=true +user=www-data +redirect_stderr=true +stopsignal=KILL +stopasgroup=true +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stdout +stderr_logfile_maxbytes=0 diff --git a/docker/docker-compose-review.yml b/docker/docker-compose-review.yml index 9413f978..69540427 100644 --- a/docker/docker-compose-review.yml +++ b/docker/docker-compose-review.yml @@ -48,7 +48,7 @@ services: - internal - review labels: - - traefik.frontend.rule=Host:${REVIEW_HOST} + - traefik.frontend.rule=Host:${REVIEW_HOST},flower-${REVIEW_HOST} - traefik.docker.network=review networks: diff --git a/requirements.txt b/requirements.txt index 1e16fc89..6107112a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,6 @@ # Python-3.6 arrow==0.12.1 +redis==2.10.6 celery[redis]==4.2.0 Django==2.0.7 django-active-link==0.1.5 @@ -34,3 +35,4 @@ pusher==2.0.1 short_url sendgrid drf_dynamic_fields +flower==0.9.2