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 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):
@ -172,3 +173,115 @@ def burning_course(request):
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/now_success_hw/$', reports.now_success_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 courses.models import Course, CourseTheme
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')
def super_bill(request):
@ -129,3 +131,46 @@ def progress_report(request):
'journals': []}
map.append(c)
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