# coding=utf-8 from django.db.models import Q from django.http import Http404 from access.models import User from lms.decors import api_decor from courses.models import Course, Exam, Lesson, Homework from finance.models import ServiceRequest, Bill, Price from finance.tools import system_check_bill from lms.settings import DOMAIN @api_decor(without_auth=False, need_keys=['id', 'type'], method='POST', check_request=True) def check_materials_access(request, context): if request.user.is_authenticated() and request.user.is_admin: context['code'] = '1' return context material = None theme_type = 'B' if request.POST['type'] == 'homework': material = Homework.objects.get(id=request.POST['id']) theme_type = material.theme.price_type elif request.POST['type'] == 'exam': material = Exam.objects.get(id=request.POST['id']) theme_type = material.theme.price_type elif request.POST['type'] == 'lesson': material = Lesson.objects.get(id=request.POST['id']) if material.free: context['code'] = '1' return context theme_type = material.theme.price_type if material and system_check_bill(material.token, request.user, theme_type=theme_type): context['code'] = '1' else: context['code'] = '0' context['response'] = material.token return context @api_decor(without_auth=True, method='POST', need_keys=['key'], check_request=True) def send_self_bill(request, context): context['code'] = '0' if not request.POST.get('fname'): context['response'] = u'Фамилия не указана' return context if not request.POST.get('name'): context['response'] = u'Имя не указано' return context if not request.POST.get('oname'): context['response'] = u'Очество не указано' return context if not request.POST.get('phone'): context['response'] = u'Телефон не указан' return context if not request.POST.get('email'): context['response'] = u'Электронный адрес не указан' return context try: price = Price.objects.get(key=request.POST['key']) except Price.DoesNotExist: raise Http404 else: context['code'] = '1' user, c = User.objects.get_or_create(email=request.POST['email']) if not user.phone: user.phone = request.POST['phone'] if not user.name: user.name = request.POST['name'] if not user.oname: user.oname = request.POST['oname'] if not user.fname: user.fname = request.POST['fname'] if c: user.in_role = 'F' user.save() try: bill = Bill.objects.get(service=price, price=price.cost, user=user) except Bill.DoesNotExist: bill = Bill.objects.create(service=price, price=price.cost, user=user, manager=User.objects.get(id=1325)) context['data'] = bill.gen_robokassa_url() else: if bill.status == 'F': context['code'] = '0' context['response'] = u'Счет уже оплачен ID счета: %s' % bill.id else: context['data'] = bill.gen_robokassa_url() return context @api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) def cancel_order(request, context): try: bill = Bill.objects.get(id=request.GET['id']) except Bill.DoesNotExist: pass else: bill.status = 'C' bill.save() return context @api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) def sent_order(request, context): try: bill = Bill.objects.get(id=request.GET['id']) except Bill.DoesNotExist: context['data'] = DOMAIN context['code'] = '0' else: if bill.status in ['F', 'H']: context['code'] = '0' context['response'] = u'Оплата счета не возможна' else: bill.status = 'P' context['code'] = '1' bill.save() context['data'] = bill.get_face() return context @api_decor(without_auth=False, need_keys=['id', 'status'], method='GET', check_request=True) def change_service_request_status(request, context): s = ServiceRequest.objects.get(id=request.GET['id']) s.status = request.GET['status'] s.manager = request.user if request.GET.get('description'): s.cancel_description = request.GET['description'] s.save() return context @api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) def check_service_request(request, context): s = ServiceRequest.objects.get(id=request.GET['id']) if s.manager and s.manager != request.user: context['code'] = '0' else: context['code'] = '1' return context @api_decor(without_auth=False, need_keys=['course', 'user'], method='GET', check_request=True) def check_bill(request, context): if Bill.objects.filter(service__course=Course.objects.get(id=request.GET['course']), user=User.objects.get(id=request.GET['user']), status='F').exists(): context['code'] = '1' else: context['code'] = '0' return context @api_decor(without_auth=False, need_keys=['type'], method='POST', check_request=True) def create_service_request(request, context): if request.POST.get('course'): course = Course.objects.get(id=request.POST['course']) if ServiceRequest.objects.filter( Q(status='S', student=request.user, course=course) | Q(status='W', student=request.user, course=course)).exists(): context['code'] = '0' context['response'] = u'Вы уже отправляли запрос на покупку этого курса. Запрос еще не обработан.' elif Bill.objects.filter(user=request.user, status='W', service__course=course).exists(): context['code'] = '0' context['response'] = u'Счет на покупку этого курса уже был выставлен.' else: context['code'] = '1' ServiceRequest.objects.create(student=request.user, course=course, _type=request.POST['type']) context['data'] = {'course': course.title} context['data']['phone'] = request.user.get_phone() else: context['code'] = '1' ServiceRequest.objects.get_or_create(student=request.user, _type=request.POST['type']) context['data'] = {'course': ''} context['data']['phone'] = request.user.get_phone() return context @api_decor(without_auth=False, need_keys=['id'], method='POST', check_request=True) def cancel_service_request(request, context): bill = ServiceRequest.objects.get(id=request.POST['id']) bill.status = 'B' bill.save() return context @api_decor(without_auth=False, need_keys=['ID'], method='POST', check_request=True) def remove_service_request(request, context): try: service_request = ServiceRequest.objects.get(id=request.POST['ID']) except ServiceRequest.DoesNotExist: context['code'] = '0' context['response'] = u'Запрос не найден' else: if request.user.in_role in ['A', 'S', 'S2']: service_request.delete() context['code'] = '1' else: context['code'] = '0' context['response'] = u'Не достаточно прав' return context @api_decor(without_auth=False, need_keys=['id'], method='GET', check_request=True) def reply_bill(request, context): try: bill = Bill.objects.get(id=request.GET['id']) except Bill.DoesNotExist: context['code'] = '0' else: bill.status = 'W' bill.save() context['code'] = '1' return context @api_decor(without_auth=False) def get_user_from_bill_id(request, context): # Получение пользователя привязанного к счету if request.user.in_role == 'S': try: bill = Bill.objects.get(id=request.GET['id']) except Bill.DoesNotExist: context['code'] = '0' context['response'] = 'Счет с таким ID не найден' else: context['data'] = bill.get_face() context['code'] = '1' else: raise Http404 return context