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.
262 lines
10 KiB
262 lines
10 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, send_burning_course_letter
|
|
from management.models import News, Feedback, Comment
|
|
from courses.models import Course, CourseTheme
|
|
from journals.models import TeacherJ, CourseThemeJ, LessonJ, HomeworkJ
|
|
|
|
@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
|
|
|
|
@api_decor(without_auth=False)
|
|
def burning_course(request):
|
|
course = Course.objects.get(id=request.GET['course'])
|
|
user = User.objects.get(id=request.GET['id'])
|
|
|
|
send_burning_course_letter(user, course)
|
|
|
|
|
|
"""
|
|
Все функции снизу используются в подобии кабинета для отдела по работе с персоналом.
|
|
Если хочешь переписать - перепиши.
|
|
"""
|
|
@api_decor(without_auth=False)
|
|
def find_user(request, context):
|
|
try:
|
|
user = User.objects.get(id=request.GET['user'])
|
|
data = "%s | %s %s" % (user.id, user.name, user.fname)
|
|
except User.DoesNotExist:
|
|
data = '0'
|
|
except ValueError:
|
|
data = '0'
|
|
|
|
return data
|
|
|
|
@api_decor(without_auth=False)
|
|
def find_course(request, context):
|
|
try:
|
|
course = Course.objects.get(id=request.GET['course'])
|
|
data = course.title
|
|
except Course.DoesNotExist:
|
|
data = '0'
|
|
except ValueError:
|
|
data = '0'
|
|
|
|
return data
|
|
|
|
@api_decor(without_auth=False)
|
|
def open_lessons(request, context):
|
|
try:
|
|
user = User.objects.get(id=request.GET['user'])
|
|
course = Course.objects.get(id=request.GET['course'])
|
|
checkbox = True if request.GET.get('homes') == 'on' else False
|
|
themes = request.GET['themes']
|
|
except Exception:
|
|
return '0'
|
|
|
|
try:
|
|
teachj, status = TeacherJ.objects.get_or_create(student=user, course=course)
|
|
for t in CourseTheme.objects.filter(course=course):
|
|
for l in LessonJ.objects.filter(student=user, parent__material=t):
|
|
l.success = True
|
|
l.save()
|
|
if open_homes:
|
|
if HomeworkJ.objects.filter(student=user, parent__material=t).exists():
|
|
homej = HomeworkJ.objects.get(student=user, parent__material=t)
|
|
homej.success = True
|
|
homej.save()
|
|
themej, status = CourseThemeJ.objects.get_or_create(student=user, material=t)
|
|
themej.success = True
|
|
themej.save()
|
|
teachj.reload_progress()
|
|
except Exception:
|
|
return '1'
|
|
|
|
return '2'
|
|
|
|
@api_decor(without_auth=False)
|
|
def open_homes(request, context):
|
|
try:
|
|
user = User.objects.get(id=request.GET['user'])
|
|
course = Course.objects.get(id=request.GET['course'])
|
|
except Exception:
|
|
return'0'
|
|
|
|
try:
|
|
for t in CourseTheme.objects.filter(course=course):
|
|
if HomeworkJ.objects.filter(student=user, parent__material=t).exists():
|
|
homej = HomeworkJ.objects.get(student=user, parent__material=t)
|
|
homej.success = True
|
|
homej.save()
|
|
except Exception:
|
|
return '1'
|
|
|
|
return '2'
|
|
|
|
@api_decor(without_auth=False)
|
|
def change_pass(request, context):
|
|
user = User.objects.get(id=request.GET['user'])
|
|
password = request.GET.get('pass')
|
|
|
|
user.set_password(password)
|
|
user.save()
|
|
|
|
return '2'
|
|
|