Skip to content

Commit e035056

Browse files
authored
Merge pull request #327 from PROCOLLAB-github/hotfix_vacancy
you can get all users emails now with a button
2 parents e4bffbf + 606f4be commit e035056

3 files changed

Lines changed: 43 additions & 0 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{% extends "admin/change_list.html" %}
2+
{% load i18n %}
3+
4+
{% block object-tools-items %}
5+
{{ block.super }}
6+
<a href="#" class="addlink" previewlistener="true" onclick="get_users()">
7+
Выгрузка ФИО|Email всех пользователей
8+
</a>
9+
10+
<script>
11+
function get_users() {
12+
window.open("{% url 'admin:users_email_excel' %}", '_blank').focus();
13+
}
14+
</script>
15+
{% endblock %}

users/admin.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import tablib
12
from django.conf import settings
23
from django.contrib import admin
4+
from django.http import HttpResponse
35
from django.shortcuts import redirect
46
from django.urls import path
57

@@ -113,6 +115,7 @@ class CustomUserAdmin(admin.ModelAdmin):
113115

114116
readonly_fields = ("ordering_score",)
115117
change_form_template = "users/admin/users_change_form.html"
118+
change_list_template = "users/admin/users_change_list.html"
116119

117120
def save_model(self, request, obj, form, change):
118121
# if user_type changed, then delete all related fields
@@ -171,13 +174,22 @@ def get_urls(self):
171174
self.admin_site.admin_view(self.mass_mail),
172175
name="user_mass_mail",
173176
),
177+
path(
178+
"all-users-email-excel/",
179+
self.admin_site.admin_view(self.all_users_email_excel),
180+
name="users_email_excel",
181+
),
174182
]
175183
return custom_urls + default_urls
176184

177185
def mass_mail(self, request):
178186
users = CustomUser.objects.all()
179187
return MailingTemplateRender().render_template(request, None, users, None)
180188

189+
def all_users_email_excel(self, request):
190+
users = CustomUser.objects.only("first_name", "last_name", "email").iterator()
191+
return self.get_export_users_emails(users)
192+
181193
def mailing(self, request, user_object):
182194
user = CustomUser.objects.get(pk=user_object)
183195
users = [user]
@@ -188,6 +200,21 @@ def force_verify(self, request, object_id):
188200
force_verify_user(user)
189201
return redirect("admin:users_customuser_change", object_id)
190202

203+
def get_export_users_emails(self, users):
204+
response_data = tablib.Dataset(headers=["ФИО", "Email"])
205+
206+
for user in users:
207+
response_data.append([user.first_name + " " + user.last_name, user.email])
208+
209+
binary_data = response_data.export("xlsx")
210+
file_name = "all_users_names_emails"
211+
response = HttpResponse(
212+
content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
213+
headers={"Content-Disposition": f'attachment; filename="{file_name}.xlsx"'},
214+
)
215+
response.write(binary_data)
216+
return response
217+
191218

192219
@admin.register(UserAchievement)
193220
class UserAchievementAdmin(admin.ModelAdmin):

users/constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ class OnboardingStage(Enum):
3131

3232
VERIFY_EMAIL_REDIRECT_URL = "https://app.procollab.ru/auth/verification/"
3333

34+
3435
PROTOCOL = "https"
3536
if settings.DEBUG:
3637
PROTOCOL = "http"

0 commit comments

Comments
 (0)