страница с ценами

remotes/origin/feature/packages-page-1-08-19
gzbender 7 years ago
parent 55c76b6863
commit 940d075759
  1. 7
      apps/notification/templates/notification/email/buy_email.html
  2. 30
      apps/payment/models.py
  3. 2
      apps/payment/templates/payment/package_payment_success.html
  4. 22
      apps/payment/views.py
  5. 2
      project/templates/lilcity/packages.html
  6. 6
      project/urls.py
  7. 4
      project/utils/__init__.py

@ -72,7 +72,12 @@
https://{% setting 'MAIN_HOST' %}{% url 'school:drawing-camp' %}</a></p>
{% endif %}
{% endif %}
<p>Так же вы можете найти ссылку в личном кабинете в разделе «Мои покупки».</p>
{% if product_type == 'package' %}
<p>Вы приобрели подписку с {{ date_start|date:'j-m-y' }} по {{ date_end|date:'j-m-y'}}</p>
{% else %}
<p>Так же вы можете найти ссылку в личном кабинете в разделе «Мои покупки».</p>
{% endif %}
<p>Занимайтесь с удовольствием!</p>

@ -23,6 +23,7 @@ from apps.course.models import Course
from apps.config.models import Config
from apps.school.models import SchoolSchedule
from apps.notification.utils import send_email
from project.utils import dates_overlap
config = Config.load()
@ -298,6 +299,35 @@ class Payment(PolymorphicModel):
self.weekdays = amount_data.get('weekdays')
super().save(*args, **kwargs)
if self.is_paid():
if isinstance(self, PackagePayment):
year_start = date(now().year, 1, 1)
year_end = date(now().year, 12, 31)
school_start = date(now().year, 9, 1)
school_end = date(now().year, 5, 31)
camp_start = date(now().year, 6, 1)
camp_end = date(now().year, 8, 31)
# TODO
if dates_overlap(self.date_start, self.date_end, camp_start, camp_end):
cp_amount_date = DrawingCampPayment.calc_amount()
DrawingCampPayment.objects.create(
user=self.user,
roistat_visit=self.roistat_visit,
date_start=self.date_start,
date_end=self.date_end,
amount=0,
status=self.status,
)
if dates_overlap(self.date_start, self.date_end, school_start, year_end)\
or dates_overlap(self.date_start, self.date_end, year_start, school_end):
SchoolPayment.objects.create(
user=self.user,
weekdays=[1, 2, 3, 4, 5, 6, 7],
roistat_visit=self.roistat_visit,
date_start=self.date_start,
date_end=self.date_end,
amount=0,
status=self.status,
)
if isinstance(self, CoursePayment):
if not getattr(self, 'authorbalance', None):
AuthorBalance.objects.create(

@ -4,7 +4,7 @@
<div class="done">
<div class="done__title title">Вы успешно приобрели подписку с {{ package.date_start }} по {{ package.date_end }}!</div>
<div class="done__foot">
<a class="done__btn btn btn_md btn_stroke" href="{{ course.url }}">ПЕРЕЙТИ К КУРСУ</a>
<a class="done__btn btn btn_md btn_stroke" href="{% url 'index' %}">НА ГЛАВНУЮ</a>
</div>
</div>
</div>

@ -297,6 +297,8 @@ class PaymentwallCallbackView(View):
product_payment_class = DrawingCampPayment
elif product_type_name == 'gift_certificate':
product_payment_class = GiftCertificatePayment
elif product_type_name == 'package':
product_payment_class = PackagePayment
else:
return HttpResponse(status=403)
@ -363,6 +365,17 @@ class PaymentwallCallbackView(View):
'created_at': payment.created_at,
'update_at': payment.update_at,
}
elif product_type_name == 'package':
properties = {
'payment_id': payment.id,
'amount': payment.amount,
'status': payment.status,
'date_start': payment.date_start,
'date_end': payment.date_end,
'created_at': payment.created_at,
'update_at': payment.update_at,
}
payment.save()
product_payment_to_mixpanel.delay(
@ -392,6 +405,9 @@ class PaymentwallCallbackView(View):
elif product_type_name != 'drawing_camp':
send_email.delay('Спасибо за покупку!', payment.user.email, 'notification/email/buy_email.html',
product_type=product_type_name, date_start=payment.date_start, date_end=payment.date_end)
elif product_type_name != 'package':
send_email.delay('Спасибо за покупку!', payment.user.email, 'notification/email/buy_email.html',
product_type=product_type_name, date_start=payment.date_start, date_end=payment.date_end)
author_balance = getattr(payment, 'author_balance', None)
if author_balance and author_balance.type == AuthorBalance.IN:
@ -519,7 +535,7 @@ class PackagePaymentBuyView(TemplateView):
'demo': 1,
'test_mode': 1,
'success_url': host + str(
reverse_lazy('gift-certificate-payment-success', args=[gift_certificate_payment.id])),
reverse_lazy('package-payment-success', args=[pp.id])),
'failure_url': host + str(reverse_lazy('payment-error')),
}
)
@ -530,7 +546,3 @@ class PackagePaymentBuyView(TemplateView):
@method_decorator(login_required, name='dispatch')
class PackagePaymentBuySuccessView(TemplateView):
template_name = 'payment/package_payment_success.html'
def get(self, request, pk=None, *args, **kwargs):
course = get_object_or_404(Course, pk=pk)
return self.render_to_response(context={'course': course})

@ -23,7 +23,7 @@
{% endif %}
</div>
<div class="package__options">
<b>Включает</b>
<b>Включает:</b>
<div>{{ package.options_html|safe }}</div>
</div>
<div>

@ -35,7 +35,8 @@ from apps.payment.views import (
CourseBuySuccessView, CourseBuyView,
PaymentwallCallbackView, SchoolBuySuccessView,
SchoolBuyView, GiftCertificatesView, GiftCertificateBuyView,
GiftCertificateBuySuccessView, GiftCertificateGetView, DrawingCampBuyView)
GiftCertificateBuySuccessView, GiftCertificateGetView, DrawingCampBuyView, PackagePaymentBuySuccessView,
PackagePaymentBuyView)
from .views import AboutView, IndexView, SchoolSchedulesView, LinksView, PackagesView
@ -104,6 +105,9 @@ urlpatterns = [
path('faq', FAQView.as_view(), name='faq'),
path('links', LinksView.as_view(), name='links'),
path('packages', PackagesView.as_view(), name='packages'),
path('package/<int:pk>/checkout', PackagePaymentBuyView.as_view(), name='package-checkout'),
path('payments/package/success', PackagePaymentBuySuccessView.as_view(),
name='package-payment-success'),
]

@ -15,3 +15,7 @@ def date_range(start, end):
def weekdays_in_date_range(start, end):
return Counter([d.isoweekday() for d in date_range(start, end)])
def dates_overlap(start, end, start2, end2):
return start <= end2 and start2 <= end

Loading…
Cancel
Save