Merge branch 'feature/new-management-cabinet' into 'develop'

Feature/new management cabinet

See merge request !33
remotes/origin/pm_task_31703
Zolotarev Alexander 9 years ago
commit 8ac7e06109
  1. 115
      management/api.py
  2. 5
      management/forms.py
  3. 9
      management/urls.py
  4. 47
      management/views.py
  5. 238
      templates/cabinet.html
  6. 14
      templates/diplomscab.html

@ -7,7 +7,8 @@ from lms.tools import out_date_format, condition_factory, user_fabric
from finance.models import Price, Bill, ServiceRequest from finance.models import Price, Bill, ServiceRequest
from management.letters import sent_new_bill, sent_clean_letter, send_burning_course_letter from management.letters import sent_new_bill, sent_clean_letter, send_burning_course_letter
from management.models import News, Feedback, Comment 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) @api_decor(without_auth=False, need_keys=['title', 'content', 'to'], method='POST', check_request=True)
def self_sent_letter(request, context): def self_sent_letter(request, context):
@ -172,3 +173,115 @@ def burning_course(request):
send_burning_course_letter(user, course) 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(' ')
if '' in themes:
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(' ')
if '' in themes:
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'

@ -0,0 +1,5 @@
from django import forms
class UploadFileForm(forms.Form):
service_id = forms.CharField(max_length=50, label=u'id услуги')
file = forms.FileField()

@ -36,5 +36,12 @@ urlpatterns = [
url(r'reports_api/get_process_report/$', reports.get_process_report), url(r'reports_api/get_process_report/$', reports.get_process_report),
url(r'reports_api/now_success_hw/$', reports.now_success_hw), url(r'reports_api/now_success_hw/$', reports.now_success_hw),
url(r'reports_api/now_second_hw/$', reports.now_second_hw), url(r'reports_api/now_second_hw/$', reports.now_second_hw),
url(r'self_sent_letter/$', api.self_sent_letter) url(r'self_sent_letter/$', api.self_sent_letter),
url(r'workcabinet/$', views.render_management_cabinet),
url(r'diplomscabinet/$', views.render_diplom_cabinet),
url(r'find_user/$', api.find_user),
url(r'find_course/$', api.find_course),
url(r'open_lessons/$', api.open_lessons),
url(r'open_homes/$', api.open_homes),
url(r'change_pass/$', api.change_pass),
] ]

@ -9,7 +9,9 @@ from finance.models import Bill, ServiceRequest, Price
from management.models import News, Faq, FaqTitle from management.models import News, Faq, FaqTitle
from courses.models import Course, CourseTheme from courses.models import Course, CourseTheme
from management.reports import get_now_success_hw, get_second_success_hw from management.reports import get_now_success_hw, get_second_success_hw
from access.models import User
from finance.models import Bill, Price
from .forms import UploadFileForm
@response_decor(template='super_bill.html') @response_decor(template='super_bill.html')
def super_bill(request): def super_bill(request):
@ -129,3 +131,46 @@ def progress_report(request):
'journals': []} 'journals': []}
map.append(c) map.append(c)
return {'map': map, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()} return {'map': map, 'get_now_success_hw': get_now_success_hw(), 'get_second_success_hw': get_second_success_hw()}
@response_decor(template='cabinet.html')
def render_management_cabinet(request):
if request.user.in_role != 'A':
raise Http404
else:
courses = Course.objects.filter(hidden=False).order_by('id')
return {'courses': courses}
@response_decor(template='diplomscab.html')
def render_diplom_cabinet(request):
context = {}
if request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
for l in request.FILES['file'].readlines():
try:
user = User.objects.get(email=l.rstrip().lower())
except User.DoesNotExist:
context['error'] = 'Плохая почта %s' % l
try:
data = form.cleaned_data
id_ = int(data['service_id'])
service = Price.objects.get(id=id_)
bill = Bill.objects.create(user=user, status='F', service=service)
bill.save()
except Exception:
context['error'] = 'Не получилось создать счет для %s' % l
context['form'] = form
return context
else:
form = UploadFileForm()
context['form'] = form
return context

@ -0,0 +1,238 @@
{% extends 'base_index.html' %}
{% block title %}Рабочий кабинет{% endblock %}
{% block content %}
<style type="text/css">
.functions{
width: 500px;
}
.themes, .homes, .password-change, .open-diplom{
width: 600px;
height: auto;
margin-left: 100px;
border: 1px solid #000;
margin-bottom: 5px;
}
.name{
width: 600px;
height: 60px;
line-height: 60px;
color: #0c0c0c;
font-size: 24px;
font-style: bold;
text-align: center;
}
.input-block{
width: 100%;
height: 60px;
}
form{
width: 450px;
margin: auto;
}
input{
float: right;
}
textarea{
float: right;
width: 200px;
height: 300px;
}
.submit{
float: none;
margin-left: 190px;
margin-bottom: 20px;
margin-top: 10px;
}
.responce{
font-size: 16px;
font-style: bold;
}
.courses{
position: absolute;
right: 300px;
top: 70px;
font-size: 18px;
}
</style>
<div class="functions">
<div class="themes">
<div class="name">Открыть уроки</div>
<form id='lessons'>
<div class="input-block">
<span>Введите id пользователя</span>
<input type="text" class="id-user" name='user' required>
<div id='output-user'></div>
</div>
<div class="input-block">
<span>Введите id курса</span>
<input type="text" class="id-course" name="course" required>
<div class="output-course"></div>
</div>
<div class="input-block">
<span>Открыть домашки</span>
<input type="checkbox" id="open-homes" name="homes">
</div>
<div class="input-block">
<span>Отдельные темы</span>
<input type="text" id="themes" name="themes">
</div>
<div class="lresp responce"></div>
<input type="submit" class='submit'>
</form>
</div>
<div class="homes">
<div class="name">Открыть домашки</div>
<form id='homes'>
<div class="input-block">
<span>Введите id пользователя</span>
<input type="text" class="id-user" name="user" required>
<div id='output-user'></div>
</div>
<div class="input-block">
<span>Введите id курса</span>
<input type="text" class="id-course" name="course" required>
<div class="output-course"></div>
</div>
<div class="input-block">
<span>Отдельные темы</span>
<input type="text" id="themes" name="themes">
</div>
<div class="hresp responce"></div>
<input type="submit" class='submit'>
</form>
</div>
<div class="password-change">
<div class="name">Поменять пароль</div>
<form id='pass'>
<div class="input-block">
<span>Введите id пользователя</span>
<input type="text" name="user" class="id-user">
<div id='output-user'></div>
</div>
<div class="input-block">
<span>Введите новый пароль</span>
<input type="text" name="pass">
</div>
<div class="presp responce"></div>
<input type="submit" name="" class='submit'>
</form>
</div>
</div>
<div class="courses">
{% for c in courses %}
<div class="course">{{ c.id }}: {{ c.title }}</div>
{% endfor %}
</div>
<script type="text/javascript">
$('.id-user').on('focusout', function(){
outblock = $(this).next()
value = $(this).val()
console.log(value)
$.ajax({
url: 'find_user/',
type: 'GET',
data: {'user': value },
success: function(data){
console.log(data)
if (data == 0){
$(outblock).html('Пользователь не найден') // передлать элемент
}
else {
$(outblock).html(data)
}
}
})
})
$('.id-course').on('focusout', function(){
value = $(this).val()
outblock = $(this).next()
console.log(outblock)
$.ajax({
url: 'find_course/',
type: 'GET',
data: {'course': value},
success: function(data){
if (data == 0){
$(outblock).html('Курс не найден')
}
else {
$(outblock).html(data)
}
}
})
})
$('#lessons').on('submit', function(event){
event.preventDefault()
data = $(this).serialize()
console.log(data)
$.ajax({
url: 'open_lessons/',
type: 'GET',
data: data,
success: function(data){
console.log(data)
if (data == '0'){
$('.lresp').html('Не получается обработать данные')
}
if (data == '1'){
$('.lresp').html('Ошибка в работе')
}
if (data == '2'){
$('.lresp').html('Уроки открыты')
}
}
})
})
$('#homes').on('submit', function(event){
event.preventDefault()
data = $(this).serialize()
console.log(data)
$.ajax({
url: 'open_homes/',
type: 'GET',
data: data,
success: function(data){
console.log(data)
if (data == 0){
$('.hresp').html('Не получается обработать данные')
}
if (data == 1){
$('.hresp').html('Ошибка в работе')
}
if (data == 2){
$('.hresp').html('Домашки открыты')
}
}
})
})
$('#pass').on('submit', function(event){
event.preventDefault()
data = $(this).serialize()
console.log(data)
$.ajax({
url: 'change_pass/',
type: 'GET',
data: data,
success: function(data){
console.log(data)
if (data == 0){
$('.presp').html('Не получается обработать данные')
}
if (data == 1){
$('.presp').html('Ошибка в работе')
}
if (data == 2){
$('.presp').html('Пароль сменен')
}
}
})
})
</script>
{% endblock %}

@ -0,0 +1,14 @@
{% extends 'base_index.html' %}
{% block title %}Рабочий кабинет{% endblock %}
{% block content %}
<div class="name">Массовое открытие дипломов</div>
<form enctype="multipart/form-data" method="post" >
{% csrf_token %}
<table>
{{form.as_table}}
</table>
<div class="errors">{{ ERROR }}</div>
<input type="submit" value="Submit" id="Save"/>
</form>
{% endblock %}
Loading…
Cancel
Save