mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-05 13:21:49 +02:00
email list download
This commit is contained in:
parent
4b58d3c04b
commit
4d81dd7c15
4 changed files with 122 additions and 1 deletions
|
@ -128,6 +128,9 @@
|
|||
</div>
|
||||
|
||||
<div id="commandes" class="box tabcontent">
|
||||
<div class="buttons is-pulled-right">
|
||||
<a class="button is-info" href="{% url 'order:email_list' grouped_order.id %}" title="Afficher la liste des mails des participants">Liste des mails</a>
|
||||
</div>
|
||||
<p class="title">Liste des commandes</p>
|
||||
{% if grouped_order.order_set.all %}
|
||||
<table class="table">
|
||||
|
|
|
@ -24,7 +24,7 @@ def create_grouped_order(
|
|||
|
||||
|
||||
def order_items_in_grouped_order(grouped_order):
|
||||
"""Creates 2 OrderedItems and orders for those items in the given grouped order"""
|
||||
"""Creates 2 OrderedItems and orders in the given grouped order. Returns the order"""
|
||||
item_1 = grouped_order.item_set.create(name="test item", price="2")
|
||||
item_2 = grouped_order.item_set.create(name="test item 2", price="9")
|
||||
author = models.OrderAuthor.objects.create(
|
||||
|
@ -1208,3 +1208,72 @@ class TestGroupedOrderSheetView:
|
|||
assert response.context["items"].count() == 2
|
||||
assert response.context["orders_dict"][order] == [3, 2]
|
||||
assert response.context["total_price"] == 24
|
||||
|
||||
|
||||
class TestExportGroupedOrderEmailAddressesToCSVView:
|
||||
def test_user_not_logged_redirect(self, client, other_user):
|
||||
"""
|
||||
A user that is not logged access the email list. They get redirected to the login view
|
||||
"""
|
||||
grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="gr order test",
|
||||
orga_user=other_user,
|
||||
)
|
||||
email_list_view_url = reverse(
|
||||
"order:email_list",
|
||||
kwargs={
|
||||
"grouped_order_id": grouped_order.pk,
|
||||
},
|
||||
)
|
||||
assert auth.get_user(client).is_anonymous
|
||||
response = client.get(email_list_view_url)
|
||||
assert response.status_code == 302
|
||||
assert response.url.startswith(reverse("accounts:login"))
|
||||
assert response.url.endswith(email_list_view_url)
|
||||
|
||||
def test_user_not_orga_forbidden(self, client_log, other_user):
|
||||
"""
|
||||
A user that is not orga cannot access the email list.
|
||||
They get a 403 forbidden error
|
||||
"""
|
||||
grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="gr order test",
|
||||
orga_user=other_user,
|
||||
)
|
||||
email_list_view_url = reverse(
|
||||
"order:email_list",
|
||||
kwargs={
|
||||
"grouped_order_id": grouped_order.pk,
|
||||
},
|
||||
)
|
||||
response = client_log.get(email_list_view_url)
|
||||
assert response.status_code == 403
|
||||
|
||||
def test_email_addresses(self, client_log, other_user):
|
||||
"""
|
||||
The grouped order orga accesses the email addresses list
|
||||
"""
|
||||
grouped_order = create_grouped_order(
|
||||
days_before_delivery_date=5,
|
||||
days_before_deadline=2,
|
||||
name="gr order test",
|
||||
orga_user=auth.get_user(client_log),
|
||||
)
|
||||
email_list_view_url = reverse(
|
||||
"order:email_list",
|
||||
kwargs={
|
||||
"grouped_order_id": grouped_order.pk,
|
||||
},
|
||||
)
|
||||
response = client_log.get(email_list_view_url)
|
||||
assert response.status_code == 200
|
||||
assert response.content.decode() == "\r\n"
|
||||
|
||||
email = order_items_in_grouped_order(grouped_order).author.email
|
||||
response = client_log.get(email_list_view_url)
|
||||
assert response.status_code == 200
|
||||
assert email in response.content.decode()
|
||||
|
|
|
@ -40,4 +40,9 @@ urlpatterns = [
|
|||
views.GroupedOrderSheetView.as_view(),
|
||||
name="grouped_order_sheet",
|
||||
),
|
||||
path(
|
||||
"<int:grouped_order_id>/gerer/liste-mails",
|
||||
views.ExportGroupedOrderEmailAddressesToCSVView.as_view(),
|
||||
name="email_list",
|
||||
),
|
||||
]
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
import csv
|
||||
from io import BytesIO
|
||||
|
||||
from django import http
|
||||
|
@ -319,3 +320,46 @@ class GroupedOrderSheetView(GroupedOrderOverview, GroupedOrderSheetMixin):
|
|||
result = BytesIO()
|
||||
pdf = pisa.pisaDocument(BytesIO(html.encode("UTF-8")), result)
|
||||
return http.HttpResponse(result.getvalue(), content_type="application/pdf")
|
||||
|
||||
|
||||
class ExportGroupedOrderEmailAddressesToCSVView(UserPassesTestMixin, generic.View):
|
||||
# grouped_order_id = self.kwargs.get("grouped_order_id")
|
||||
# grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
|
||||
|
||||
def test_func(self):
|
||||
"""Accessible only if the requesting user is the grouped order organizer"""
|
||||
grouped_order_id = self.kwargs.get("grouped_order_id")
|
||||
return GroupedOrder.objects.get(pk=grouped_order_id).orga == self.request.user
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
grouped_order_id = self.kwargs.get("grouped_order_id")
|
||||
grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
|
||||
participants = OrderAuthor.objects.filter(
|
||||
order__in=grouped_order.order_set.all()
|
||||
)
|
||||
|
||||
response = http.HttpResponse(
|
||||
content_type="text/csv",
|
||||
headers={
|
||||
"Content-Disposition": f'attachment; filename="{ grouped_order.name }-mails.csv"'
|
||||
},
|
||||
)
|
||||
writer = csv.writer(response)
|
||||
row = [participant.email for participant in participants]
|
||||
writer.writerow(row)
|
||||
return response
|
||||
|
||||
|
||||
# def export_grouped_order_email_addresses_to_csv(request, grouped_order_id):
|
||||
# """Exports a csv list of participants email addresses - only for the organizer"""
|
||||
|
||||
# # Check if the user is orga
|
||||
# if request.user
|
||||
# grouped_order = get_object_or_404(GroupedOrder, pk=grouped_order_id)
|
||||
# participants = OrderAuthor.objects.filter(order__in=grouped_order.order_set.all())
|
||||
|
||||
# response = http.HttpResponse(content_type="text/csv", headers={'Content-Disposition': f'attachment; filename="{ grouped_order.name }-mails.csv"'},)
|
||||
# writer = csv.writer(response)
|
||||
# row = [participant.email for participant in participants]
|
||||
# writer.writerow(row)
|
||||
# return response
|
||||
|
|
Loading…
Reference in a new issue