Миграция диалогов под домашками

feature/fix_generate_pass
Andrey 8 years ago
parent faa1a76e15
commit 347455ced7
  1. 1
      api_v1/urls.py
  2. 20
      finance/migrations/0007_auto_20171108_1433.py
  3. 20
      finance/migrations/0008_auto_20171108_1435.py
  4. 4
      finance/models.py
  5. 27
      finance/serializers.py
  6. 27
      finance/urls.py
  7. 118
      finance/views.py

@ -5,4 +5,5 @@ urlpatterns = [
url(r'users/', include('access.urls')),
url(r'journals/', include('journals.urls')),
url(r'library/', include('library.urls')),
url(r'finance/', include('finance.urls')),
]

@ -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='Ключ платежа'),
),
]

@ -42,8 +42,8 @@ class Invoice(models.Model):
price = models.IntegerField(verbose_name='Сумма', null=True, blank=True)
real_price = models.IntegerField(verbose_name='Полученная сумма', null=True, blank=True,
help_text='Сумма, минус комиссия')
bill_method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD)
key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, default='', editable=False)
method = models.CharField(verbose_name='Способ оплаты', max_length=2, default='Y', choices=BILL_METHOD)
key = models.CharField(verbose_name='Ключ платежа', blank=True, max_length=255, default='')
comment = models.TextField(verbose_name='Комментарий продавца', help_text='Будет показано пользователю',
blank=True, editable=False)
bill = models.ForeignKey(to=Bill, 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
@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)}
@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}
@response_decor(template='bill_out.html', without_auth=True)
def bill_out(request, salt):
try:
bill = Bill.objects.get(salt=salt)
except Bill.DoesNotExist:
raise Http404
else:
if bill.status == 'W':
bill.status = 'P'
bill.save()
return {'data': bill.gen_yandex_data(), 'price': bill.price}
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
class BillListView(APIView):
renderer_classes = (JSONRenderer,)
@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)
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(id=pk)
except Bill.DoesNotExist:
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…
Cancel
Save