diff --git a/apps/notification/templates/notification/email/accept_author.html b/apps/notification/templates/notification/email/accept_author.html
new file mode 100644
index 00000000..44221ba5
--- /dev/null
+++ b/apps/notification/templates/notification/email/accept_author.html
@@ -0,0 +1,13 @@
+{% extends "notification/email/_base.html" %}
+
+{% block content %}
+
Поздравляем! Вам одобрено назначение преподавателем!
+
+
Теперь вы можете публиковать курсы.
+ {% if password and email %}
+
Параметры входа:
+
email: {{ email }}
+
пароль: {{ password }}
+ {% endif %}
+
+{% endblock content %}
diff --git a/apps/notification/templates/notification/email/decline_author.html b/apps/notification/templates/notification/email/decline_author.html
new file mode 100644
index 00000000..d67dfe3e
--- /dev/null
+++ b/apps/notification/templates/notification/email/decline_author.html
@@ -0,0 +1,8 @@
+{% extends "notification/email/_base.html" %}
+
+{% block content %}
+ К сожалению вам отказано в назначении преподавателем!
+
+{% endblock content %}
diff --git a/apps/user/admin.py b/apps/user/admin.py
index be63ec0e..5440f146 100644
--- a/apps/user/admin.py
+++ b/apps/user/admin.py
@@ -28,6 +28,8 @@ class AuthorRequestAdmin(admin.ModelAdmin):
'first_name',
'last_name',
'status',
+ 'accepted_send_at',
+ 'declined_send_at',
'created_at',
'update_at',
)
diff --git a/apps/user/models.py b/apps/user/models.py
index b1f34217..7ccbf2dc 100644
--- a/apps/user/models.py
+++ b/apps/user/models.py
@@ -6,9 +6,11 @@ from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.postgres import fields as pgfields
+from django.utils.timezone import now
from django.utils.translation import gettext_lazy as _
from api.v1 import serializers
+from apps.notification.utils import send_email
class User(AbstractUser):
@@ -130,3 +132,47 @@ class AuthorRequest(models.Model):
verbose_name = 'Заявка не преподавателя'
verbose_name_plural = 'Заявки не преподавателя'
ordering = ('-created_at',)
+
+
+@receiver(post_save, sender=AuthorRequest)
+def handle_authorrequest_update(sender, instance=None, created=False, update_fields=[], **kwargs):
+ if not created:
+ if instance.status == AuthorRequest.DECLINED and not instance.declined_send_at:
+ send_email.delay(
+ 'Отказ заявки на преподавателя',
+ instance.email,
+ 'notification/email/decline_author.html',
+ cause=instance.cause,
+ )
+ instance.declined_send_at = now()
+ instance.save()
+ elif instance.status == AuthorRequest.ACCEPTED and not instance.accepted_send_at:
+ email = None
+ password = None
+ try:
+ user = User.objects.get(email=instance.email)
+ except User.DoesNotExist:
+ email = instance.email
+ password = User.objects.make_random_password()
+ user = User.objects.create(
+ first_name=instance.first_name,
+ last_name=instance.last_name,
+ username=instance.email,
+ email=instance.email,
+ about=instance.about,
+ facebook=instance.facebook,
+ is_active=True,
+ is_email_proved=True,
+ )
+ user.set_password(password)
+ user.role = User.AUTHOR_ROLE
+ user.save()
+ send_email.delay(
+ 'Заявка на преподавателя одобрена',
+ instance.email,
+ 'notification/email/accept_author.html',
+ email=email,
+ password=password,
+ )
+ instance.accepted_send_at = now()
+ instance.save()