# 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'].split(' ') themes.remove('') for t in themes: t = int(t) except Exception: return '0' try: teachj, status = TeacherJ.objects.get_or_create(student=user, course=course) if themes: course_themes = CourseTheme.objects.filter(course=course, sort__in=themes) else: course_themes = CourseTheme.objects.filter(course=course) for t in course_themes: 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']) themes = request.GET['themes'].split(' ') themes.remove('') for t in themes: t = int(t) except Exception: return'0' try: if themes: course_themes = CourseTheme.objects.filter(course=course, sort__in=themes) else: course_themes = CourseTheme.objects.filter(course=course) for t in course_themes: 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): try: user = User.objects.get(id=request.GET['user']) password = request.GET.get('pass') except Exception: return '0' try: user.set_password(password) user.save() except Exception: return '1' return '2'