mirror of
https://framagit.org/la-chariotte/la-chariotte.git
synced 2025-05-01 11:22:24 +02:00
Refactor emails download
This commit is contained in:
parent
c4d46acd20
commit
cbc0a3b119
5 changed files with 42 additions and 63 deletions
|
@ -284,68 +284,35 @@
|
||||||
navigator.clipboard.writeText(copyText.value);
|
navigator.clipboard.writeText(copyText.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Download emails list to csv
|
// Download emails list
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
function downloadEmailToCSV() {
|
||||||
const downloadButton = document.getElementById('downloadButton');
|
fetch("{% url 'order:email_list' grouped_order.code %}?format=csv")
|
||||||
|
.then(response => response.text())
|
||||||
downloadButton.addEventListener('click', function () {
|
|
||||||
fetch("{% url 'order:email_list' grouped_order.code %}")
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
var blob = new Blob([data], {type: "text/csv;charset=utf-8"});
|
||||||
const orderName = data.order_name;
|
saveAs(blob, "liste_emails.csv");
|
||||||
|
|
||||||
const header = "Emails";
|
|
||||||
const emailList = data.email_list;
|
|
||||||
const csvText = [header].concat(emailList).join('\n');
|
|
||||||
|
|
||||||
const blob = new Blob([csvText], { type: 'text/csv' });
|
|
||||||
|
|
||||||
const url = window.URL.createObjectURL(blob);
|
|
||||||
|
|
||||||
const a = document.createElement('a');
|
|
||||||
a.href = url;
|
|
||||||
a.download = orderName + '-mails.csv';
|
|
||||||
document.body.appendChild(a);
|
|
||||||
|
|
||||||
a.click();
|
|
||||||
|
|
||||||
document.body.removeChild(a);
|
|
||||||
|
|
||||||
window.URL.revokeObjectURL(url);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Copy emails list to clipboard
|
// Copy emails list to clipboard
|
||||||
document.addEventListener('DOMContentLoaded', function () {
|
function copyEmailsToClipboard() {
|
||||||
const copyButton = document.getElementById('copyButton');
|
|
||||||
|
|
||||||
copyButton.addEventListener('click', function () {
|
|
||||||
fetch("{% url 'order:email_list' grouped_order.code %}")
|
fetch("{% url 'order:email_list' grouped_order.code %}")
|
||||||
.then(response => response.json())
|
.then(response => response.json())
|
||||||
.then(data => {
|
.then(data => {
|
||||||
|
var emailList = data.email_list;
|
||||||
const emailList = data.email_list;
|
console.log(emailList);
|
||||||
|
navigator.clipboard.writeText(emailList).then(function() {
|
||||||
const emailText = emailList.join('\n');
|
alert("La liste des e-mails a été copiée dans le presse-papiers !\nUtilisez Ctrl+V pour la coller.");
|
||||||
|
}, function(err) {
|
||||||
const textArea = document.createElement('textarea');
|
console.error('Erreur lors de la copie des emails : ', err);
|
||||||
textArea.value = emailText;
|
console.error('Liste des emails : ', emailList);
|
||||||
|
|
||||||
document.body.appendChild(textArea);
|
|
||||||
|
|
||||||
textArea.select();
|
|
||||||
|
|
||||||
document.execCommand('copy');
|
|
||||||
|
|
||||||
document.body.removeChild(textArea);
|
|
||||||
|
|
||||||
alert('Emails copiés depuis l\'URL dans le presse-papiers !');
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("copyButton").addEventListener("click", copyEmailsToClipboard);
|
||||||
|
|
||||||
|
document.getElementById("downloadButton").addEventListener("click", downloadEmailToCSV);
|
||||||
// Tabs
|
// Tabs
|
||||||
function openTab(idToOpen) {
|
function openTab(idToOpen) {
|
||||||
var i, tabcontent, tablinks;
|
var i, tabcontent, tablinks;
|
||||||
|
|
|
@ -69,7 +69,7 @@ urlpatterns = [
|
||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
"<str:code>/gerer/liste-mails",
|
"<str:code>/gerer/liste-mails",
|
||||||
views.ExportGroupOrderEmailAdressesToJSONView.as_view(),
|
views.ExportGroupOrderEmailAdressesToDownloadView.as_view(),
|
||||||
name="email_list",
|
name="email_list",
|
||||||
),
|
),
|
||||||
path(
|
path(
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from .grouped_order import (
|
from .grouped_order import (
|
||||||
DownloadGroupedOrderSheetView,
|
DownloadGroupedOrderSheetView,
|
||||||
ExportGroupedOrderToCSVView,
|
ExportGroupedOrderToCSVView,
|
||||||
ExportGroupOrderEmailAdressesToJSONView,
|
ExportGroupOrderEmailAdressesToDownloadView,
|
||||||
GroupedOrderAddItemsView,
|
GroupedOrderAddItemsView,
|
||||||
GroupedOrderCreateView,
|
GroupedOrderCreateView,
|
||||||
GroupedOrderDeleteView,
|
GroupedOrderDeleteView,
|
||||||
|
|
|
@ -322,7 +322,7 @@ class DownloadGroupedOrderSheetView(WeasyTemplateResponseMixin, GroupedOrderExpo
|
||||||
return f"{self.get_object().delivery_date} - {self.get_object().name}"
|
return f"{self.get_object().delivery_date} - {self.get_object().name}"
|
||||||
|
|
||||||
|
|
||||||
class ExportGroupOrderEmailAdressesToJSONView(UserPassesTestMixin, generic.View):
|
class ExportGroupOrderEmailAdressesToDownloadView(UserPassesTestMixin, generic.View):
|
||||||
def test_func(self):
|
def test_func(self):
|
||||||
# Restrict access to the manager
|
# Restrict access to the manager
|
||||||
origin = get_object_or_404(GroupedOrder, code=self.kwargs.get("code"))
|
origin = get_object_or_404(GroupedOrder, code=self.kwargs.get("code"))
|
||||||
|
@ -335,6 +335,17 @@ class ExportGroupOrderEmailAdressesToJSONView(UserPassesTestMixin, generic.View)
|
||||||
)
|
)
|
||||||
email_list = [participant.email for participant in participants]
|
email_list = [participant.email for participant in participants]
|
||||||
|
|
||||||
|
format = self.request.GET.get("format", "json")
|
||||||
|
if format == "csv":
|
||||||
|
response = http.HttpResponse(content_type="text/csv")
|
||||||
|
response['Content-Disposition'] = 'attachment; filename="emails.csv"'
|
||||||
|
writer = csv.writer(response)
|
||||||
|
writer.writerow(['order_name', 'email'])
|
||||||
|
for email in email_list:
|
||||||
|
writer.writerow([grouped_order.name, email])
|
||||||
|
return response
|
||||||
|
else:
|
||||||
|
email_list = ";\n".join(email_list)
|
||||||
return http.JsonResponse(
|
return http.JsonResponse(
|
||||||
{"order_name": grouped_order.name, "email_list": email_list}
|
{"order_name": grouped_order.name, "email_list": email_list}
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
<meta property="og:locale" content="fr_FR" />
|
<meta property="og:locale" content="fr_FR" />
|
||||||
<meta property="og:site_name" content="La chariotte">
|
<meta property="og:site_name" content="La chariotte">
|
||||||
<meta property="og:url" content="{{ BASE_URL }}{{ request.path }}">
|
<meta property="og:url" content="{{ BASE_URL }}{{ request.path }}">
|
||||||
|
<script src="https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.js"></script>
|
||||||
|
|
||||||
<title>{% block title %}{% endblock %} - La Chariotte</title>
|
<title>{% block title %}{% endblock %} - La Chariotte</title>
|
||||||
{% block css %}
|
{% block css %}
|
||||||
|
|
Loading…
Reference in a new issue