From 57ed691aa53c92743a1bc93a05e6436b20e92199 Mon Sep 17 00:00:00 2001 From: Alexey Kudelko Date: Mon, 18 Mar 2024 18:48:51 +0300 Subject: [PATCH] loadout of leader emails and vacancies --- .../vacancies/vacancies_change_list.html | 15 ++++++ vacancy/admin.py | 48 ++++++++++++++++++- 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 templates/vacancies/vacancies_change_list.html diff --git a/templates/vacancies/vacancies_change_list.html b/templates/vacancies/vacancies_change_list.html new file mode 100644 index 00000000..f934d094 --- /dev/null +++ b/templates/vacancies/vacancies_change_list.html @@ -0,0 +1,15 @@ +{% extends "admin/change_list.html" %} +{% load i18n %} + +{% block object-tools-items %} + {{ block.super }} + + Emal лидеров у проектов с вакансиями + + + +{% endblock %} \ No newline at end of file diff --git a/vacancy/admin.py b/vacancy/admin.py index d76d5db1..698e783e 100644 --- a/vacancy/admin.py +++ b/vacancy/admin.py @@ -1,4 +1,7 @@ +import tablib from django.contrib import admin +from django.http import HttpResponse +from django.urls import path from vacancy.models import Vacancy, VacancyResponse @@ -7,7 +10,6 @@ class VacancyAdmin(admin.ModelAdmin): list_display = [ "role", - "required_skills", "description", "project", "is_active", @@ -16,6 +18,50 @@ class VacancyAdmin(admin.ModelAdmin): ] list_display_links = ["role"] + change_list_template = "vacancies/vacancies_change_list.html" + + def get_urls(self): + default_urls = super(VacancyAdmin, self).get_urls() + custom_urls = [ + path( + "email-vacancies/", + self.admin_site.admin_view(self.email_leaders_vacancies), + name="vacancy_leaders_email", + ) + ] + return custom_urls + default_urls + + def email_leaders_vacancies(self, request): + data = list( + Vacancy.objects.select_related("project", "project__leader").values_list( + "project__leader__email", "datetime_created", "project__id", "role" + ) + ) + return self.excel_email_leaders_vacancies(data) + + def excel_email_leaders_vacancies(self, data: list): + response_data = tablib.Dataset( + headers=["email", "дата", "ссылка на проект", "название вакансии"] + ) + + for row in data: + row_to_add = [ + row[0], + row[1].strftime("%d-%m-%Y %S:%M:%H %Z"), + f"https://app.procollab.ru/office/projects/{row[2]}", + row[3], + ] + response_data.append(row_to_add) + + binary_data = response_data.export("xlsx") + file_name = "email_of_leaders_with_users" + response = HttpResponse( + content_type="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + headers={"Content-Disposition": f'attachment; filename="{file_name}.xlsx"'}, + ) + response.write(binary_data) + return response + @admin.register(VacancyResponse) class VacancyResponseAdmin(admin.ModelAdmin):