You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

164 lines
7.3 KiB

# coding=utf-8
import re
from django.db.models import Q
from access.models import User
from lms.decors import api_decor
from lms.tools import out_date_format, condition_factory, user_fabric
from finance.models import Price, Bill, ServiceRequest
from management.letters import sent_new_bill, sent_clean_letter
from management.models import News, Feedback, Comment
@api_decor(without_auth=False, need_keys=['title', 'content', 'to'], method='POST', check_request=True)
def self_sent_letter(request, context):
# Отправки письма из интерфейса
if user_fabric(request.user) and request.user.is_admin or request.user.is_staff:
sent_clean_letter(request.POST['title'], request.POST['content'], request.POST['to'])
context['code'] = '1'
else:
context['code'] = '0'
context['response'] = u'Только администраторы системы могут отправлять письма через данную функцию'
return context
@api_decor(without_auth=True)
def get_news(request, context):
result_len = 3
news = News.objects.filter(public=True)[0:result_len]
context['data'] = {}
context['data'] = [
{'id': i.id, 'title': i.title, 'content': i.content, 'author': i.author.get_short_name(),
'public_date': out_date_format(i.public_date, no_time=True),
'icon': i.icon.url if i.icon else '/static/img/1438629985_paper_plane_fly_freedom_flat_icon.png'}
for i in news]
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['phone'], method='POST', check_request=True)
def search_users(request, context):
context['data'] = []
if request.user.in_role != 'U':
email = request.POST['phone'].lower()
if User.objects.filter(phone__contains=re.sub(r'\W+', r'', email)).exists():
for i in User.objects.filter(phone__contains=re.sub(r'\W+', r'', email).strip()[1:]):
context['data'].append(
{'id': i.id, 'user': i.get_full_name(), 'phone': i.phone, 'user_role': i.get_in_role_display(),
'email': i.email})
elif User.objects.filter(email__contains=email).exists():
for i in User.objects.filter(email__contains=email):
context['data'].append(
{'id': i.id, 'user': i.get_full_name(), 'phone': i.phone, 'user_role': i.get_in_role_display(),
'email': i.email})
else:
context['code'] = '0'
return context
context['code'] = '1'
else:
context['code'] = '0'
return context
@api_decor(without_auth=False)
def get_managers(request, context):
context['data'] = []
if request.user.in_role == 'A' or request.user.in_role == 'S':
for i in User.objects.filter(
Q(is_active=True, deactivate=False, in_role='M') | Q(is_active=True, deactivate=False,
in_role='S')):
context['data'].append({'id': i.id, 'name': i.get_short_name()})
context['code'] = '1'
return context
@api_decor(without_auth=False, need_keys=['id'], method='POST', check_request=True)
def get_services_for_user(request, context):
context['data'] = []
for i in Price.objects.filter(public=True):
service = ''
if i.course:
service = str(i.course.get_direction())
context['data'].append({'service': service, 'name': i.get_name(), 'id': i.id})
context['code'] = '1'
return context
@api_decor(without_auth=False)
def new_bill(request, context):
if request.POST.get('new_bill_user_id'):
if request.POST.get('new_bill_service'):
user = User.objects.get(id=request.POST['new_bill_user_id'])
service = Price.objects.get(id=request.POST['new_bill_checked_service'])
bill = Bill.objects.create(user=user,
service=service,
manager=request.user, price=request.POST['new_bill_cost'],
description=request.POST.get('new_bill_comment') if request.POST.get(
'new_bill_comment') else '')
sent_new_bill(bill)
if ServiceRequest.objects.filter(
Q(student=bill.user, course=bill.service.course, manager=request.user, status='S') | Q(
student=bill.user, course=bill.service.course, manager=request.user,
status='W')).exists():
req = ServiceRequest.objects.filter(
Q(student=bill.user, course=bill.service.course, manager=request.user, status='S') | Q(
student=bill.user, course=bill.service.course, manager=request.user, status='W')).first()
req.status = 'F'
req.save()
context['code'] = '1'
else:
context['code'] = '0'
context['response'] = u'Ошибка получение предоставляемой услуги'
else:
context['code'] = '0'
context['response'] = u'Ошибка получения пользователя'
return context
@api_decor(without_auth=False)
def sent_charge(request, context):
if request.user.in_role == 'S' or request.user.in_role == 'A':
if request.POST.get('charge_request_seller_checked'):
manager = User.objects.get(id=request.POST['charge_request_seller_checked'])
s_request = ServiceRequest.objects.get(id=request.POST['charge_request_object_id'])
s_request.manager = manager
s_request.status = 'S'
if request.POST.get('charge_request_description'):
s_request.charge = request.POST['charge_request_description']
s_request.save()
return context
@api_decor(without_auth=True)
def new_feedback(request, context):
condition = condition_factory([
{'condition': request.POST.get('email'), 'error': u'Email не указан'},
{'condition': request.POST.get('phone'), 'error': u'Телефон не указан'},
{'condition': request.POST.get('name'), 'error': u'Имя не указано'},
{'condition': request.POST.get('text'), 'error': u'Текст обращения не указан'},
{'condition': not Feedback.objects.filter(
Q(email=request.POST['email']) | Q(phone=request.POST['phone'])).exclude(closed=True).exists(),
'error': u'Ваше прошлое обращение еще не обработано. Дождитесь решения.'}
])
if condition['code'] == '1':
context['code'] = '1'
Feedback.objects.create(name=request.POST['name'], email=request.POST['email'], phone=request.POST['phone'],
text=request.POST['text'])
else:
context['code'] = '0'
context['response'] = condition['response']
return context
@api_decor(without_auth=False, check_request=True, need_keys=['comment'], method='POST')
def read_comment(request, context):
try:
comment = Comment.objects.get(id=request.POST['comment'])
except Comment.DoesNotExist:
pass
else:
if not comment.saw.filter(id=request.user.id).exists():
comment.saw.add(request.user)
return context