Merge branch 'master' of gitlab.com:skillbox/go.skillbox.ru into hotfix/homework_button

Вмержил мастер для актуальной версии
remotes/origin/pm_task_31703
Mikhail Bortnikov 9 years ago
commit 6183c3b2b6
  1. 2
      _utils/check_course_map.py
  2. 2
      _utils/check_journals.py
  3. 2
      _utils/check_prices.py
  4. 2
      _utils/clean_twice_journals.py
  5. 4
      _utils/open_lesson.py
  6. 78
      courses/views.py
  7. 25
      finance/migrations/0070_auto_20170424_1638.py
  8. 11
      finance/models.py
  9. 5
      finance/tasks.py
  10. 9
      journals/api.py
  11. 2
      management/letters.py

@ -4,7 +4,7 @@ import os
import datetime import datetime
import django import django
import sys import sys
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
from courses.models import Course from courses.models import Course

@ -5,7 +5,7 @@ import sys
import datetime import datetime
import os import os
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
os.system('python check_course_map.py') os.system('python check_course_map.py')

@ -6,7 +6,7 @@ import datetime
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()

@ -5,7 +5,7 @@ import sys
import datetime import datetime
start = datetime.datetime.now() start = datetime.datetime.now()
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()

@ -4,14 +4,14 @@ import django
import sys import sys
import datetime import datetime
sys.path.append("/var/www/projects/codemy/") sys.path.append("/var/www/skillbox/")
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings") os.environ.setdefault("DJANGO_SETTINGS_MODULE", "lms.settings")
django.setup() django.setup()
from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry from journals.models import CourseMap, LessonJ, TeacherJ, HomeworkTry
from lms.tools import show_progress from lms.tools import show_progress
_NEED_OPEN = LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com'.lower()) _NEED_OPEN = None#LessonJ.objects.get(material__id='1154', student__email='parabellum07@gmail.com'.lower())
_TEACHERJ_FILTER = {'progress__gte': 0} _TEACHERJ_FILTER = {'progress__gte': 0}
_TEACHERJ_EXCLUDE = {'teacher': None} _TEACHERJ_EXCLUDE = {'teacher': None}

@ -55,21 +55,7 @@ def course(request, slug):
journal.start_date = datetime.datetime.now() journal.start_date = datetime.datetime.now()
journal.save() journal.save()
waiting_materials = [] return {'course': journal.get_face(user_fabric(request.user)), 'user': user_fabric(request.user)}
if journal.waiting.exists():
for n in journal.waiting.all():
_obj = n.get_obj()
__type = n.get_type()
_type = None
if __type == 'L':
_type = 'lesson'
elif __type == 'H':
_type = 'homework'
elif __type == 'E':
_type = 'exam'
waiting_materials.append({'obj': _obj, 'type': _type})
return {'course': journal.get_face(user_fabric(request.user)), 'user': user_fabric(request.user), 'waiting_materials': waiting_materials}
@response_decor(template='lesson.html') @response_decor(template='lesson.html')
@ -86,27 +72,12 @@ def lesson(request, lesson):
check_journal(j) check_journal(j)
lj = LessonJ.objects.get(material=lesson, student=request.user) lj = LessonJ.objects.get(material=lesson, student=request.user)
waiting_materials = []
if lj.parent.parent.waiting.exists():
for n in lj.parent.parent.waiting.all():
_obj = n.get_obj()
__type = n.get_type()
_type = None
if __type == 'L':
_type = 'lesson'
elif __type == 'H':
_type = 'homework'
elif __type == 'E':
_type = 'exam'
waiting_materials.append({'obj': _obj, 'type': _type})
if request.user.is_authenticated() and request.user.is_admin or request.user in lesson.course.teachers.all(): if request.user.is_authenticated() and request.user.is_admin or request.user in lesson.course.teachers.all():
return {'lesson': lj.get_face(user_fabric(request.user)), return {'lesson': lj.get_face(user_fabric(request.user)),
'course': {'head': lj.parent.parent.get_head_face(), 'course': {'head': lj.parent.parent.get_head_face(),
'level': lj.parent.parent.course.get_level(), 'level': lj.parent.parent.course.get_level(),
'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'journal': lj.parent.parent.get_face(user_fabric(request.user))},
'bought': True, 'accept': True, 'waiting_materials': waiting_materials} 'bought': True, 'accept': True}
if not lesson.free and not system_check_bill(lesson.token, request.user, theme_type=lesson.theme._type): if not lesson.free and not system_check_bill(lesson.token, request.user, theme_type=lesson.theme._type):
return {'redirect': '/access/by_error/'} return {'redirect': '/access/by_error/'}
@ -122,7 +93,7 @@ def lesson(request, lesson):
lj.date = datetime.datetime.now() lj.date = datetime.datetime.now()
lj.save() lj.save()
if result: if result:
return {'lesson': lj.get_face(user_fabric(request.user)), 'course': {'head': lj.parent.parent.get_head_face(), 'level': lj.parent.parent.course.get_level(), 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'bought': True, 'accept': True, 'waiting_materials': waiting_materials} return {'lesson': lj.get_face(user_fabric(request.user)), 'course': {'head': lj.parent.parent.get_head_face(), 'level': lj.parent.parent.course.get_level(), 'journal': lj.parent.parent.get_face(user_fabric(request.user))}, 'bought': True, 'accept': True}
@response_decor(template='homework.html') @response_decor(template='homework.html')
@ -138,27 +109,12 @@ def homework(request, homework):
check_journal(j) check_journal(j)
hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user) hj = HomeworkJ.objects.get(material=Homework.objects.get(id=homework), student=request.user)
waiting_materials = []
if hj.parent.parent.waiting.exists():
for n in hj.parent.parent.waiting.all():
_obj = n.get_obj()
__type = n.get_type()
_type = None
if __type == 'L':
_type = 'lesson'
elif __type == 'H':
_type = 'homework'
elif __type == 'E':
_type = 'exam'
waiting_materials.append({'obj': _obj, 'type': _type})
if request.user.is_authenticated() and request.user.is_admin: if request.user.is_authenticated() and request.user.is_admin:
return {'homework': hj.get_face(user_fabric(request.user)), return {'homework': hj.get_face(user_fabric(request.user)),
'course': {'head': hj.parent.parent.get_head_face(), 'course': {'head': hj.parent.parent.get_head_face(),
'level': hj.parent.parent.course.get_level(), 'level': hj.parent.parent.course.get_level(),
'journal': hj.parent.parent.get_face(user_fabric(request.user))}, 'journal': hj.parent.parent.get_face(user_fabric(request.user))}
'waiting_materials': waiting_materials} }
if not system_check_bill(hj.material.token, request.user, theme_type=hj.material.theme._type): if not system_check_bill(hj.material.token, request.user, theme_type=hj.material.theme._type):
return {'redirect': '/access/by_error/'} return {'redirect': '/access/by_error/'}
@ -177,8 +133,7 @@ def homework(request, homework):
if result: if result:
return {'homework': hj.get_face(user_fabric(request.user)), return {'homework': hj.get_face(user_fabric(request.user)),
'course': {'head': hj.parent.parent.get_head_face(), 'course': {'head': hj.parent.parent.get_head_face(),
'level': hj.parent.parent.course.get_level(), 'journal': hj.parent.parent.get_face(user_fabric(request.user))}, 'level': hj.parent.parent.course.get_level(), 'journal': hj.parent.parent.get_face(user_fabric(request.user))},}
'waiting_materials': waiting_materials}
@response_decor(template='exam.html') @response_decor(template='exam.html')
@ -194,25 +149,10 @@ def exam(request, exam):
check_journal(j) check_journal(j)
exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user) exam = ExamJ.objects.get(material=Exam.objects.get(id=exam), student=request.user)
waiting_materials = []
if exam.parent.parent.waiting.all().exists():
for n in exam.parent.parent.waiting.all():
_obj = n.get_obj()
__type = n.get_type()
_type = None
if __type == 'L':
_type = 'lesson'
elif __type == 'H':
_type = 'homework'
elif __type == 'E':
_type = 'exam'
waiting_materials.append({'obj': _obj, 'type': _type})
if request.user.is_authenticated() and request.user.is_admin: if request.user.is_authenticated() and request.user.is_admin:
return {'exam': exam.get_face(user_fabric(request.user)), return {'exam': exam.get_face(user_fabric(request.user)),
'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}
'waiting_materials': waiting_materials} }
if not system_check_bill(exam.material.token, request.user): if not system_check_bill(exam.material.token, request.user):
return {'redirect': '/access/by_error/'} return {'redirect': '/access/by_error/'}
@ -229,7 +169,7 @@ def exam(request, exam):
exam.save() exam.save()
if result: if result:
return {'exam': exam.get_face(user_fabric(request.user)), 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}, 'waiting_materials': waiting_materials} return {'exam': exam.get_face(user_fabric(request.user)), 'course': {'head': exam.parent.parent.get_head_face(), 'level': exam.parent.parent.course.get_level()}}
@response_decor(template='all_achievements.html', without_auth=True) @response_decor(template='all_achievements.html', without_auth=True)

@ -0,0 +1,25 @@
# -*- coding: utf-8 -*-
# Generated by Django 1.9.3 on 2017-04-24 16:38
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('finance', '0069_auto_20170203_1333'),
]
operations = [
migrations.AlterField(
model_name='bill',
name='_method',
field=models.CharField(choices=[('C', 'Наличные'), ('H', 'JustClick'), ('B', 'Банковский перевод'), ('G', 'На расчетный счет'), ('A', 'Альфа-Банк'), ('P', 'PayPal'), ('W', 'WebMoney'), ('S', 'SimplePay'), ('Y', 'YandexKassa')], default='Y', max_length=2, verbose_name='Способ оплаты'),
),
migrations.AlterField(
model_name='servicerequest',
name='status',
field=models.CharField(choices=[('S', 'Не обработан'), ('E', 'Ошибка контекста'), ('W', 'В работе'), ('F', 'Продан'), ('B', 'Не продал')], default='S', max_length=1, verbose_name='Статус'),
),
]

@ -2,6 +2,8 @@
import json import json
import urllib import urllib
import datetime import datetime
from simplejson import JSONDecodeError
from django.db import models from django.db import models
import django.utils.timezone import django.utils.timezone
from access.models import User, TrafHistory from access.models import User, TrafHistory
@ -304,6 +306,7 @@ class Bill(models.Model):
class ServiceRequest(models.Model): class ServiceRequest(models.Model):
SERVICE_REQUEST_STATUS = ( SERVICE_REQUEST_STATUS = (
('S', u'Не обработан'), ('S', u'Не обработан'),
('E', u'Ошибка контекста'),
('W', u'В работе'), ('W', u'В работе'),
('F', u'Продан'), ('F', u'Продан'),
('B', u'Не продал') ('B', u'Не продал')
@ -367,7 +370,11 @@ class ServiceRequest(models.Model):
def sent_to_amo(self): def sent_to_amo(self):
if self.data: if self.data:
data = json.loads(self.data.replace("'", "\"")) try:
data = json.loads(self.data.replace("'", "\""))
except JSONDecodeError:
self.status = "E"
else: else:
name = '' name = ''
phone = '' phone = ''
@ -399,7 +406,7 @@ class ServiceRequest(models.Model):
data['name'] = 'empty' data['name'] = 'empty'
urllib.request.urlopen(out_uri('https://skill-box.ru/amocrm/CreateLead.php', data)) urllib.request.urlopen(out_uri('https://skill-box.ru/amocrm/CreateLead.php', data))
if not self.send: if not self.send and self.status != 'E':
data['host'] = self.host data['host'] = self.host
self.send = True self.send = True
self.save() self.save()

@ -1,6 +1,9 @@
# coding=utf-8 # coding=utf-8
from celery.task import periodic_task from celery.task import periodic_task
from datetime import timedelta, datetime from datetime import timedelta, datetime
from django.db.models import Q
from finance.models import Price, Bill, ServiceRequest from finance.models import Price, Bill, ServiceRequest
from courses.models import CourseMap from courses.models import CourseMap
@ -32,6 +35,6 @@ def price_map_migrator():
@periodic_task(run_every=timedelta(minutes=1)) @periodic_task(run_every=timedelta(minutes=1))
def sent_service_request_to_amo(): def sent_service_request_to_amo():
sr = ServiceRequest.objects.filter(send=False, send_date__lt=datetime.now()).exclude(name='TEST').first() sr = ServiceRequest.objects.filter(send=False, send_date__lt=datetime.now()).exclude(Q(name='TEST')| Q(status='E')).first()
if sr: if sr:
sr.sent_to_amo() sr.sent_to_amo()

@ -102,14 +102,7 @@ def check_jaccess(request, context):
if request.user in journal[0].material.course.teachers.all(): if request.user in journal[0].material.course.teachers.all():
context['code'] = '1' context['code'] = '1'
return context return context
w = journal.first().parent.parent.waiting
if w.exists():
if w.first().token != journal.first().material.token:
if w.first().token > journal.first().material.token:
context['code'] = '1'
return context
context['code'] = '0'
return context
_before = journal.first().get_before() _before = journal.first().get_before()
if journal.first().get_status_flag() != 'N': if journal.first().get_status_flag() != 'N':
context['code'] = '1' context['code'] = '1'

@ -248,7 +248,7 @@ def sent_new_bill(bill):
'SERVICE': bill.get_name(), 'SERVICE': bill.get_name(),
'MANAGER': bill.manager.get_full_name(), 'MANAGER': bill.manager.get_full_name(),
'MANAGER_EMAIL': bill.manager.get_email(), 'MANAGER_EMAIL': bill.manager.get_email(),
'FILE': bill.service.course.get_description_file, 'FILE': None, #TODO: bill.service.course.get_description_file,
'DOMAIN': DOMAIN, 'DOMAIN': DOMAIN,
'NAME': NAME 'NAME': NAME
} }

Loading…
Cancel
Save