parent
faa1a76e15
commit
347455ced7
7 changed files with 158 additions and 63 deletions
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2017-11-08 14:33 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0006_remove_invoice_out_id'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.RenameField( |
||||
model_name='invoice', |
||||
old_name='bill_method', |
||||
new_name='method', |
||||
), |
||||
] |
||||
@ -0,0 +1,20 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# Generated by Django 1.11.6 on 2017-11-08 14:35 |
||||
from __future__ import unicode_literals |
||||
|
||||
from django.db import migrations, models |
||||
|
||||
|
||||
class Migration(migrations.Migration): |
||||
|
||||
dependencies = [ |
||||
('finance', '0007_auto_20171108_1433'), |
||||
] |
||||
|
||||
operations = [ |
||||
migrations.AlterField( |
||||
model_name='invoice', |
||||
name='key', |
||||
field=models.CharField(blank=True, default='', max_length=255, verbose_name='Ключ платежа'), |
||||
), |
||||
] |
||||
@ -0,0 +1,27 @@ |
||||
from rest_framework import serializers |
||||
|
||||
from finance.models import Bill, Invoice |
||||
|
||||
|
||||
class BillSerializer(serializers.ModelSerializer): |
||||
opener = serializers.SerializerMethodField() |
||||
user = serializers.SerializerMethodField() |
||||
|
||||
class Meta: |
||||
model = Bill |
||||
fields = '__all__' |
||||
|
||||
@staticmethod |
||||
def get_user(self): |
||||
return self.user.email |
||||
|
||||
@staticmethod |
||||
def get_opener(self): |
||||
return self.opener.email |
||||
|
||||
|
||||
class InvoiceSerializer(serializers.ModelSerializer): |
||||
|
||||
class Meta: |
||||
model = Invoice |
||||
exclude = ('bill', ) |
||||
@ -1,28 +1,7 @@ |
||||
from finance import views |
||||
from finance import api, amo |
||||
from finance import yandex_pay |
||||
from django.conf.urls import url |
||||
from finance import views |
||||
|
||||
urlpatterns = [ |
||||
url(r'pay/result/$', yandex_pay.aviso), |
||||
url(r'pay/check/$', yandex_pay.check), |
||||
url(r'pay/check_materials_access/$', api.check_materials_access), |
||||
#url(r'pay/result/$', pay.result), |
||||
#url(r'pay/success/$', pay.success), |
||||
#url(r'pay/fail', pay.fail), |
||||
url(r'pay/cancel_order/', api.cancel_order), |
||||
url(r'pay/sent_order', api.sent_order), |
||||
url(r'pay/change_service_request_status', api.change_service_request_status), |
||||
url(r'pay/check_service_request', api.check_service_request), |
||||
url(r'pay/traffic_map/([0-9]{1,99})', views.traffic_map), |
||||
url(r'check_bill$', api.check_bill), |
||||
url(r'create_service_request$', api.create_service_request), |
||||
url(r'cancel_service_request$', api.cancel_service_request), |
||||
url(r'remove_service_request/$', api.remove_service_request), |
||||
url(r'pay/reply_bill$', api.reply_bill), |
||||
url(r'pay/self_bill/([A-Za-z0-9]{1,99})$', views.self_bill), |
||||
url(r'pay/self_bill/$', api.send_self_bill), |
||||
url(r'get_user_from_bill_id$', api.get_user_from_bill_id), |
||||
url(r'bill_out/([A-Za-z0-9]{1,99})$', views.bill_out), |
||||
url(r'amo/new_request$', amo.new_request) |
||||
url(r'bills/([0-9]{1,99})/$', views.BillDetailView.as_view()), |
||||
url(r'bills/$', views.BillListView.as_view()), |
||||
] |
||||
@ -1,36 +1,84 @@ |
||||
# coding=utf-8 |
||||
from django.http import Http404 |
||||
from lms.decors import response_decor |
||||
from django.contrib.auth import get_user_model |
||||
|
||||
from courses.models import Course |
||||
from finance.models import Price, Bill |
||||
from lms.global_decorators import transaction_decorator |
||||
from rest_framework.views import APIView |
||||
from rest_framework.renderers import JSONRenderer |
||||
from rest_framework.response import Response |
||||
from django.db.models import Q |
||||
|
||||
from finance.models import Bill, Invoice |
||||
from finance.serializers import BillSerializer, InvoiceSerializer |
||||
from lms.tools import get_real_name |
||||
|
||||
@response_decor(template='traffic_map.html') |
||||
def traffic_map(request, course): |
||||
# Страница цен |
||||
_course = Course.objects.get(id=course) |
||||
return {'course': _course.title, 'traffic': Price.objects.filter(course=_course)} |
||||
|
||||
class BillListView(APIView): |
||||
renderer_classes = (JSONRenderer,) |
||||
|
||||
@response_decor(template='selfbill.html', without_auth=True) |
||||
def self_bill(request, key): |
||||
# Страница формирования собственного счета |
||||
try: |
||||
req = Price.objects.get(key=key) |
||||
except Price.DoesNotExist: |
||||
raise Http404 |
||||
else: |
||||
return {'sum': req.cost, 'name': req.get_name(), 'key': key} |
||||
@staticmethod |
||||
def get(request): |
||||
if request.user.is_authenticated: |
||||
return Response( |
||||
[BillSerializer(i).data for i in Bill.objects.filter(Q(user=request.user) | Q(opener=request.user))], |
||||
status=200, |
||||
) |
||||
return Response("Permission denied", status=403) |
||||
|
||||
@transaction_decorator |
||||
def post(self, request): |
||||
if request.user.is_authenticated and (request.user.groups.filter(name__in=['managers','lead_managers']).exists() |
||||
or request.user.is_superuser): |
||||
bill = request.JSON.get('bill') |
||||
children = request.JSON.get('children', []) |
||||
|
||||
if bill: |
||||
bill['user'] = get_user_model().objects.get(email=bill['user']) |
||||
bill['opener'] = get_user_model().objects.get(email=bill['opener']) |
||||
bill['course'] = Course.objects.get(title=bill['course']) |
||||
bill_obj, is_create = Bill.objects.update_or_create(**bill) |
||||
invoices = bill_obj.invoice_set.all() |
||||
|
||||
for i in children: |
||||
i['method'] = get_real_name(elem=i['method'], array=Invoice.BILL_METHOD) |
||||
i['status'] = get_real_name(elem=i['status'], array=Invoice.BILL_STATUSES) |
||||
i['bill'] = bill_obj |
||||
invoice, _is_create = Invoice.objects.update_or_create(**i) |
||||
invoices = [j for j in invoices if not j.id == invoice.id] |
||||
if invoice.method == 'Y' and invoice.status == 'P': |
||||
print("Отправить письмо") |
||||
|
||||
[i.delete() for i in invoices] |
||||
|
||||
res = { |
||||
"bill": BillSerializer(bill_obj).data, |
||||
"children": [InvoiceSerializer(i).data for i in bill_obj.invoice_set.all()], |
||||
} |
||||
|
||||
return Response(res, status=200) |
||||
|
||||
@response_decor(template='bill_out.html', without_auth=True) |
||||
def bill_out(request, salt): |
||||
return Response("Bill not set", status=400) |
||||
|
||||
return Response("Course detail access only for manager users", status=403) |
||||
|
||||
|
||||
class BillDetailView(APIView): |
||||
renderer_classes = (JSONRenderer,) |
||||
status_code = 200 |
||||
|
||||
def get(self, request, pk): |
||||
if request.user.is_authenticated: |
||||
try: |
||||
bill = Bill.objects.get(salt=salt) |
||||
bill = Bill.objects.get(id=pk) |
||||
except Bill.DoesNotExist: |
||||
raise Http404 |
||||
else: |
||||
if bill.status == 'W': |
||||
bill.status = 'P' |
||||
bill.save() |
||||
return {'data': bill.gen_yandex_data(), 'price': bill.price} |
||||
return Response("Bill not found", status=404) |
||||
|
||||
res = { |
||||
"bill": BillSerializer(bill).data, |
||||
"children": [InvoiceSerializer(i).data for i in bill.invoice_set.all()], |
||||
} |
||||
|
||||
return Response( |
||||
res, |
||||
status=self.status_code, |
||||
) |
||||
return Response("Permission denied", status=403) |
||||
Loading…
Reference in new issue