Skip to content

Commit 449bd2a

Browse files
committed
mail views logic out
1 parent 2d29f41 commit 449bd2a

2 files changed

Lines changed: 42 additions & 29 deletions

File tree

mailing/utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
from typing import Dict, List, Union
22
from .constants import QUANTITY_MAILING_USERS_IN_GROUP
3+
from .models import MailingSchema
4+
from users.models import CustomUser
35

46
import django.db.models
57
from django.contrib.auth import get_user_model
@@ -10,6 +12,26 @@
1012
User = get_user_model()
1113

1214

15+
def prepare_mail_data(post_data):
16+
users = post_data.getlist("users[]")
17+
schema_id = post_data["schemas"]
18+
subject = post_data["subject"]
19+
mail_schema = MailingSchema.objects.get(pk=schema_id)
20+
context = {}
21+
for variable_name in mail_schema.schema:
22+
key_in_post = "field-" + variable_name
23+
if key_in_post in post_data:
24+
context[variable_name] = post_data[key_in_post]
25+
users_to_send = CustomUser.objects.filter(pk__in=users)
26+
data_dict = {
27+
"users_to_send": users_to_send,
28+
"subject": subject,
29+
"mail_schema_template": mail_schema.template,
30+
"context": context,
31+
}
32+
return data_dict
33+
34+
1335
def new_connection(old_connection):
1436
old_connection.close()
1537
connection = mail.get_connection()

mailing/views.py

Lines changed: 20 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,22 @@
22
from django.http import JsonResponse
33
from django.shortcuts import render
44
from rest_framework.views import APIView
5-
from django.core import mail
65

76
from users.models import CustomUser
87
from .utils import send_mass_mail
98
from .models import MailingSchema
10-
from .utils import get_users_groups, new_connection
9+
from .utils import prepare_mail_data
1110

1211

1312
class SendMailView(APIView):
1413
def post(self, request):
15-
users = request.POST.getlist("users[]")
16-
schema_id = request.POST["schemas"]
17-
subject = request.POST["subject"]
18-
mail_schema = MailingSchema.objects.get(pk=schema_id)
19-
context = {}
20-
for variable_name in mail_schema.schema:
21-
key_in_post = "field-" + variable_name
22-
if key_in_post in request.POST:
23-
context[variable_name] = request.POST[key_in_post]
24-
users_to_send = CustomUser.objects.filter(pk__in=users)
25-
users_groups = get_users_groups(users_to_send)
26-
connection = mail.get_connection()
27-
for group in users_groups:
28-
send_mass_mail(users_to_send, subject, mail_schema.template, context, connection)
29-
connection = new_connection(connection)
14+
mail_data_dict = prepare_mail_data(request.POST)
15+
send_mass_mail(
16+
mail_data_dict["users_to_send"],
17+
mail_data_dict["subject"],
18+
mail_data_dict["mail_schema_template"],
19+
mail_data_dict["context"],
20+
)
3021
return JsonResponse({"detail": "ok"})
3122

3223

@@ -47,11 +38,11 @@ class MailingTemplateRender:
4738

4839
@classmethod
4940
def render_template(
50-
cls,
51-
request,
52-
schema_id: int | None = None,
53-
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
54-
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
41+
cls,
42+
request,
43+
schema_id: int | None = None,
44+
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
45+
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
5546
):
5647
return render(
5748
request,
@@ -65,10 +56,10 @@ def render_template(
6556

6657
@classmethod
6758
def _get_context(
68-
cls,
69-
schema_id: int | None = None,
70-
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
71-
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
59+
cls,
60+
schema_id: int | None = None,
61+
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
62+
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
7263
):
7364
context = cls._get_schema_context(schema_id)
7465
context += cls._get_users_context(picked_users, unpicked_users)
@@ -89,9 +80,9 @@ def _get_schema_context(cls, schema_id: int | None = None):
8980

9081
@classmethod
9182
def _get_users_context(
92-
cls,
93-
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
94-
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
83+
cls,
84+
picked_users: list[CustomUser] | django.db.models.QuerySet = None,
85+
unpicked_users: list[CustomUser] | django.db.models.QuerySet = None,
9586
):
9687
if picked_users is None:
9788
picked_users = []

0 commit comments

Comments
 (0)