Skip to content

Commit

Permalink
Merge pull request #196 from PROCOLLAB-github/dev
Browse files Browse the repository at this point in the history
Dev
  • Loading branch information
Yakser authored Sep 20, 2023
2 parents 203e8c9 + 84eeb3c commit 7fda482
Show file tree
Hide file tree
Showing 6 changed files with 150 additions and 3 deletions.
71 changes: 71 additions & 0 deletions partner_programs/admin.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
import tablib

from django.contrib import admin
from django.http import HttpResponse
from django.urls import path
from django.utils import timezone

from partner_programs.models import PartnerProgram, PartnerProgramUserProfile

Expand Down Expand Up @@ -28,10 +33,76 @@ class PartnerProgramAdmin(admin.ModelAdmin):

filter_horizontal = ("users",)
date_hierarchy = "datetime_started"
change_form_template = "partner_programs/admin/programs_change_form.html"

def get_urls(self):
default_urls = super(PartnerProgramAdmin, self).get_urls()
custom_urls = [
path(
"export/<int:object_id>/",
self.admin_site.admin_view(self.get_export_file_view),
name="export_profiles",
)
]
return custom_urls + default_urls

def changeform_view(self, request, object_id=None, form_url="", extra_context=None):
extra_context = {"object_id": int(object_id)}
res = super(PartnerProgramAdmin, self).changeform_view(
request, object_id, extra_context=extra_context
)
return res

def get_export_file_view(self, request, object_id):
program = PartnerProgram.objects.get(pk=object_id)
return self.get_export_file(program)

def get_export_file(self, partner_program: PartnerProgram):
json_schema = partner_program.data_schema
profiles = PartnerProgramUserProfile.objects.filter(
partner_program=partner_program
)
to_delete_from_json_scheme = []
column_names = ["Имя", "Фамилия", "Отчество", "Почта", "Дата рождения"]
for field_key in json_schema:
if "name" not in json_schema[field_key]:
to_delete_from_json_scheme.append(field_key)
else:
column_names.append(json_schema[field_key]["name"])

for field_key in to_delete_from_json_scheme:
del json_schema[field_key]

response_data = tablib.Dataset(headers=column_names)
for profile in profiles:
row = [
profile.user.first_name,
profile.user.last_name,
profile.user.patronymic,
profile.user.email,
str(profile.user.birthday),
]

json_data = profile.partner_program_data
for key in json_schema:
row.append(json_data.get(key, ""))
response_data.append(row)

binary_data = response_data.export("xlsx")
file_name = (
f'{partner_program.name} {timezone.now().strftime("%d-%m-%Y %H:%M:%S")}'
)
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(PartnerProgramUserProfile)
class PartnerProgramUserProfileAdmin(admin.ModelAdmin):

list_display = (
"id",
"user",
Expand Down
51 changes: 50 additions & 1 deletion poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion projects/admin.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
from django.contrib import admin

from projects.models import DefaultProjectCover, Project, Achievement, Collaborator, ProjectLink, ProjectNews
from projects.models import (
DefaultProjectCover,
Project,
Achievement,
Collaborator,
ProjectLink,
ProjectNews,
)


@admin.register(Project)
Expand Down
2 changes: 1 addition & 1 deletion projects/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class Meta:
"views_count",
"likes_count",
"cover",
"partner_programs_tags"
"partner_programs_tags",
]
read_only_fields = [
"leader",
Expand Down
1 change: 1 addition & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ coreapi = "^2.3.3"
webp = "^0.1.6"
django-prometheus = "^2.3.1"
loguru = "^0.7.1"
tablib = {extras = ["xlsx"], version = "^3.5.0"}


[build-system]
Expand Down
19 changes: 19 additions & 0 deletions templates/partner_programs/admin/programs_change_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{% extends "admin/change_form.html" %}
{% load i18n %}

{% block submit_buttons_bottom %}


{{ block.super }}
<div class="submit-row">
<input type="button" class="export-btn" value="Экспорт" onclick="export_profiles()"/>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
function export_profiles(){
window.open("{% url 'admin:export_profiles' object_id %}", '_blank').focus()
}
</script>

{% endblock %}

0 comments on commit 7fda482

Please sign in to comment.