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

# 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'