From 15ed7ca1c683902cab830980be164594f8d652ff Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Mon, 10 Apr 2017 18:57:16 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=20=D0=BA=20=D1=81=D0=B5?= =?UTF-8?q?=D1=80=D0=B2=D0=B5=D1=80=D1=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- static/js/bill.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/static/js/bill.js b/static/js/bill.js index a16ce59..8d0d89c 100755 --- a/static/js/bill.js +++ b/static/js/bill.js @@ -139,6 +139,15 @@ function open_service_request_window(course){ } } +function send_letter_to_manager(course){ + if ($('[name=REQUEST_USER_ID]').val() != 'None'){ + $.ajax({ + type: 'GET', + url: '/management/send_letter_to_manager', + data: {'id': $('[name=REQUEST_USER_ID]').val(), 'course': course} + }) + } +} function open_journal_request_window() { $('#journalAccess').modal('show'); } From 47825e53ef66746811747be3134319710ca29865 Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Mon, 10 Apr 2017 18:58:18 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=B0=D0=BF=D0=B8=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BD=D1=8F=D1=82=D0=B8=D1=8F=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BF=D1=80=D0=BE=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- management/api.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/management/api.py b/management/api.py index 3f8b508..f6c6b01 100755 --- a/management/api.py +++ b/management/api.py @@ -5,7 +5,7 @@ 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 +from management.letters import sent_new_bill, sent_clean_letter, send_burning_course_letter from management.models import News, Feedback, Comment @@ -164,3 +164,11 @@ def read_comment(request, context): 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.POST['course']) + user = User.objects.get(id=request.POST['id']) + + send_burning_course_letter(user, course) + From 9a073eeab9eb32778a511401d037c070aa460257 Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Mon, 10 Apr 2017 18:59:14 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BF=D0=B8=D1=81=D1=8C=D0=BC=D0=B0=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=89=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- management/letters.py | 66 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/management/letters.py b/management/letters.py index 9396cbf..665c698 100755 --- a/management/letters.py +++ b/management/letters.py @@ -469,3 +469,69 @@ def free_week_end(bill, email): 'type': u'Продажи' } return data + +@letter_decor() +def exam_is_nearly(user, course): + name = user.get_full_name() + email = user.get_email() + + data = { + 'title': u'Студент близится к экзамену', + 'email': SUPPORT, + 'text': u'' + student +' закончил 15 тему. Скоро будет сдавать экзамен. Готовьтесь' + u'Почта: ' + email + u'id: ' + user.id + u'Курс: ' + course, + 'type': u'Оповещения', + } + + return data + +@letter_decor() +def exam_successfull(user, course): + student = user.get_full_name() + email = user.get_email() + phone = user.get_phone() + + data = { + 'title': u'Студент сдал экзамен', + 'email': SUPPORT, + 'text': u'' + student + 'сдал экзамен. Позвони ему и поздравь' + u'Информация о студенте:' + u'Почта: ' + email + u'id: ' + user.id + u'Телефон: ' + phone + u'Курс: ' + course, + 'type': u'Оповещения' + } + return data + + +@letter_decor() +def long_time_no_see(): + + data = { + 'title': u'', + 'email': TEST_EMAIL, + 'text': u'', + 'type': u'Оповещения' + } + + return data + +@letter_decor() +def send_burning_course_letter(user, course): + data = { + 'title': u'Студент закончил временный курс', + 'email': MANAGERS, + 'text': u'Чувак закончил временный курс: ' + course + u'Ему стоит предложить купить весь курс', + u'Информация о студенте:' + u'Почта: ' + user.email + u'Имя: ' + user.get_full_name() + u'Телефон: ' + user.get_phone() + u'Курс: ' + course, + 'type': u'Оповещения' + } + + return data \ No newline at end of file From 1a4b94c56f669ba34905665b51eeaa9d64f60a6a Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Mon, 10 Apr 2017 19:07:07 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=B2=D0=B5=D1=89=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BE=20=D0=BA=D1=83=D1=80=D1=81=D0=B5=20?= =?UTF-8?q?=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/settings.py | 10 ++++++++++ management/api.py | 4 ++-- management/letters.py | 4 ++-- management/urls.py | 1 + static/js/bill.js | 3 ++- 5 files changed, 17 insertions(+), 5 deletions(-) diff --git a/lms/settings.py b/lms/settings.py index 5d838d4..3f747a0 100644 --- a/lms/settings.py +++ b/lms/settings.py @@ -22,6 +22,16 @@ TEST_EMAIL = 'bez.b.unix@gmail.com' TEACHER = 't@skillbox.ru' SUPERVISOR = 's@skillbox.ru' MANAGER = 'm@skillbox.ru' +MANAGERS = [ + 'maksim.shachkov@skillbox.ru', + 'aleksey.zelentsov@skillbox.ru', + '​roman.fatullaev@skillbox.ru​', + 'vladimir.kakaulin@skillbox.ru​', +​ 'dmitry.perepelitsa@skillbox.ru​', + 'timofey.trifonov@skillbox.ru', +​ 'sergej.gavrilovich@skillbox.ru', +] + SUPPORT = 'hello@skillbox.ru' SUPPORT_PHONE = '+7 (495) 984-41-77' SUPPORT_TIME = '(с 10 до 19 по Москве)' diff --git a/management/api.py b/management/api.py index f6c6b01..9045c27 100755 --- a/management/api.py +++ b/management/api.py @@ -167,8 +167,8 @@ def read_comment(request, context): @api_decor(without_auth=False) def burning_course(request): - course = Course.objects.get(id=request.POST['course']) - user = User.objects.get(id=request.POST['id']) + course = Course.objects.get(id=request.GET['course']) + user = User.objects.get(id=request.GET['id']) send_burning_course_letter(user, course) diff --git a/management/letters.py b/management/letters.py index 665c698..8de9979 100755 --- a/management/letters.py +++ b/management/letters.py @@ -5,7 +5,7 @@ from django.template.loader import get_template from lms.tools import out_date_format from lms.settings import DOMAIN, DEFAULT_FROM_EMAIL, NAME from management.mails import letter_decor - +from random import choice TEST_EMAIL = 'bez.b.unix@gmail.com' @@ -523,7 +523,7 @@ def long_time_no_see(): def send_burning_course_letter(user, course): data = { 'title': u'Студент закончил временный курс', - 'email': MANAGERS, + 'email': choice(MANAGERS), 'text': u'Чувак закончил временный курс: ' + course u'Ему стоит предложить купить весь курс', u'Информация о студенте:' diff --git a/management/urls.py b/management/urls.py index 0df421e..dcf5331 100755 --- a/management/urls.py +++ b/management/urls.py @@ -20,6 +20,7 @@ urlpatterns = [ url(r'sent_charge$', api.sent_charge), url(r'new_feedback/$', api.new_feedback), url(r'read_comment$', api.read_comment), + url(r'burning_course/$', api.burning_course), url(r'faq/([0-9]{1,99})$', views.faq_one), url(r'faq/$', views.faq), url(r'progress_report/$', views.progress_report), diff --git a/static/js/bill.js b/static/js/bill.js index 8d0d89c..debc3e8 100755 --- a/static/js/bill.js +++ b/static/js/bill.js @@ -144,7 +144,8 @@ function send_letter_to_manager(course){ $.ajax({ type: 'GET', url: '/management/send_letter_to_manager', - data: {'id': $('[name=REQUEST_USER_ID]').val(), 'course': course} + data: {'id': $('[name=REQUEST_USER_ID]').val(), 'course': course}, + success: function(){}, }) } } From db1b40e91af422b92d1d359a9c64954f62e4421c Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Tue, 11 Apr 2017 13:48:34 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B1=D0=B0=D0=B3=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- courses/models.py | 2 +- management/letters.py | 32 ++++++++++++++++---------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/courses/models.py b/courses/models.py index 24b2e3f..b6ae36d 100755 --- a/courses/models.py +++ b/courses/models.py @@ -76,7 +76,7 @@ class Course(models.Model): public = models.BooleanField(verbose_name=u'Опубликовать', default=False) title = models.CharField(verbose_name=u"Заголовок", max_length=255) description = RedactorField(verbose_name=u'Описание', blank=True) - description_file = models.FileField(verbose_name='Файл писания курса', black=True, null=True, upload_to='course', + description_file = models.FileField(verbose_name='Файл писания курса', blank=True, null=True, upload_to='course', help_text=u'Файл, который будет отправляться в письме со счетом') image = models.ImageField(verbose_name=u'Изображение', upload_to='course', blank=True) big_image = models.ImageField(verbose_name=u'Большое изображение', upload_to='course', blank=True) diff --git a/management/letters.py b/management/letters.py index 8de9979..300cb09 100755 --- a/management/letters.py +++ b/management/letters.py @@ -478,10 +478,10 @@ def exam_is_nearly(user, course): data = { 'title': u'Студент близится к экзамену', 'email': SUPPORT, - 'text': u'' + student +' закончил 15 тему. Скоро будет сдавать экзамен. Готовьтесь' - u'Почта: ' + email - u'id: ' + user.id - u'Курс: ' + course, + 'text': u'' + student +' закончил 15 тему. Скоро будет сдавать экзамен. Готовьтесь \n' + u'Почта: ' + email + '\n' + u'id: ' + user.id + '\n' + u'Курс: ' + course + '\n', 'type': u'Оповещения', } @@ -498,10 +498,10 @@ def exam_successfull(user, course): 'email': SUPPORT, 'text': u'' + student + 'сдал экзамен. Позвони ему и поздравь' u'Информация о студенте:' - u'Почта: ' + email - u'id: ' + user.id - u'Телефон: ' + phone - u'Курс: ' + course, + u'Почта: ' + email + '\n' + u'id: ' + user.id + '\n' + u'Телефон: ' + phone + '\n' + u'Курс: ' + course + '\n', 'type': u'Оповещения' } return data @@ -524,14 +524,14 @@ def send_burning_course_letter(user, course): data = { 'title': u'Студент закончил временный курс', 'email': choice(MANAGERS), - 'text': u'Чувак закончил временный курс: ' + course - u'Ему стоит предложить купить весь курс', - u'Информация о студенте:' - u'Почта: ' + user.email - u'Имя: ' + user.get_full_name() - u'Телефон: ' + user.get_phone() - u'Курс: ' + course, - 'type': u'Оповещения' + 'text': u'Чувак закончил временный курс или хочет посмотреть урок, который недоступен: ' + course + '\n' + u'Может стоит предложить купить весь курс?\n', + u'Информация о студенте:\n' + u'Почта: ' + user.email + '\n' + u'Имя: ' + user.get_full_name() + '\n' + u'Телефон: ' + user.get_phone() + '\n' + u'Курс: ' + course + '\n' + 'type': u'Продажи' } return data \ No newline at end of file From 243aa78977589487cc65c83250df09c42f26badd Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Tue, 11 Apr 2017 14:58:10 +0300 Subject: [PATCH 6/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=20=D0=BD=D0=B0=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lms/settings.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lms/settings.py b/lms/settings.py index 3f747a0..629279d 100644 --- a/lms/settings.py +++ b/lms/settings.py @@ -25,11 +25,11 @@ MANAGER = 'm@skillbox.ru' MANAGERS = [ 'maksim.shachkov@skillbox.ru', 'aleksey.zelentsov@skillbox.ru', - '​roman.fatullaev@skillbox.ru​', - 'vladimir.kakaulin@skillbox.ru​', -​ 'dmitry.perepelitsa@skillbox.ru​', + 'roman.fatullaev@skillbox.ru', + 'vladimir.kakaulin@skillbox.ru', + 'dmitry.perepelitsa@skillbox.ru', 'timofey.trifonov@skillbox.ru', -​ 'sergej.gavrilovich@skillbox.ru', + 'sergej.gavrilovich@skillbox.ru', ] SUPPORT = 'hello@skillbox.ru' From d06800d0139223ddc3591c58571a8e6454860cec Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Tue, 11 Apr 2017 16:23:08 +0300 Subject: [PATCH 7/8] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D1=83=D0=B6=D0=BD=D0=BE=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- courses/models.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/courses/models.py b/courses/models.py index b6ae36d..11233b7 100755 --- a/courses/models.py +++ b/courses/models.py @@ -76,8 +76,6 @@ class Course(models.Model): public = models.BooleanField(verbose_name=u'Опубликовать', default=False) title = models.CharField(verbose_name=u"Заголовок", max_length=255) description = RedactorField(verbose_name=u'Описание', blank=True) - description_file = models.FileField(verbose_name='Файл писания курса', blank=True, null=True, upload_to='course', - help_text=u'Файл, который будет отправляться в письме со счетом') image = models.ImageField(verbose_name=u'Изображение', upload_to='course', blank=True) big_image = models.ImageField(verbose_name=u'Большое изображение', upload_to='course', blank=True) big_mobile_image = models.ImageField(verbose_name=u'Под мобилку', upload_to='course', blank=True, null=True, From 0ddcb76960f041b73521b3c22e25f2b969c79890 Mon Sep 17 00:00:00 2001 From: Mikhail Bortnikov Date: Tue, 11 Apr 2017 16:38:08 +0300 Subject: [PATCH 8/8] =?UTF-8?q?=D1=83=D0=B1=D1=80=D0=B0=D0=BB=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=20=D1=87=D0=B5=D0=B3=D0=BE=20=D0=BD=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BB=D0=B6=D0=BD=D0=BE=20=D0=B1=D1=8B=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- courses/models.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/courses/models.py b/courses/models.py index 11233b7..adeeae6 100755 --- a/courses/models.py +++ b/courses/models.py @@ -159,9 +159,6 @@ class Course(models.Model): def get_description(self): # Получить описание курса return self.description - - def get_description_file(self): - return self.description_file.url or None def get_skills(self): # Получить скилы темы