new: basic email template with csv attachments for the orded and each line
This commit is contained in:
parent
5848134067
commit
0148d193ee
8 changed files with 126 additions and 143 deletions
|
|
@ -1,9 +1,9 @@
|
|||
from django.core.mail import EmailMessage
|
||||
from django.core.mail import EmailMessage, EmailMultiAlternatives
|
||||
from django.shortcuts import render
|
||||
from django.template.loader import render_to_string
|
||||
from rest_framework import viewsets, permissions, status
|
||||
from rest_framework.decorators import action
|
||||
from rest_framework.response import Response
|
||||
|
||||
from bernini import settings
|
||||
from order.models import SaleOrder, SaleOrderLine, Product
|
||||
from order.serializers import (
|
||||
|
|
@ -33,7 +33,7 @@ class SaleOrderViewSet(viewsets.ModelViewSet):
|
|||
if request.data.get(field) != SaleOrderSerializer(order).data[field]:
|
||||
return Response(
|
||||
data=f"You can't manually set the field {field}",
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
||||
return super(SaleOrderViewSet, self).update(request, *args, **kwargs)
|
||||
|
|
@ -44,7 +44,7 @@ class SaleOrderViewSet(viewsets.ModelViewSet):
|
|||
if request.data.get(field) != SaleOrderSerializer(order).data[field]:
|
||||
return Response(
|
||||
data=f"You can't manually set the field {field}",
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
status=status.HTTP_400_BAD_REQUEST,
|
||||
)
|
||||
|
||||
return super(SaleOrderViewSet, self).partial_update(request, *args, **kwargs)
|
||||
|
|
@ -73,30 +73,46 @@ class SaleOrderViewSet(viewsets.ModelViewSet):
|
|||
@action(detail=True)
|
||||
def sent(self, request, pk=None):
|
||||
order: SaleOrder = self.get_object()
|
||||
|
||||
if order.sold_at and order.sold_to.email and settings.EMAIL_HOST_USER:
|
||||
mail = EmailMessage(
|
||||
f'Order {order.name} from Zapatos Bernini',
|
||||
render(
|
||||
'order_sold.html',
|
||||
{
|
||||
'order': order
|
||||
},
|
||||
),
|
||||
settings.EMAIL_HOST_USER,
|
||||
[order.sold_to.email],
|
||||
reply_to=[settings.EMAIL_HOST_USER]
|
||||
mail = EmailMultiAlternatives(
|
||||
subject=f"Order {order.name} from Zapatos Bernini",
|
||||
from_email=settings.EMAIL_HOST_USER,
|
||||
to=[order.sold_to.email],
|
||||
reply_to=[settings.EMAIL_HOST_USER],
|
||||
)
|
||||
mail.attach_alternative(
|
||||
render_to_string(
|
||||
template_name="order_sold.html",
|
||||
context={"order": order},
|
||||
),
|
||||
mimetype="text/html",
|
||||
)
|
||||
mail.attach(
|
||||
filename=f"Bernini order {order.name}.csv",
|
||||
content=order.as_csv(),
|
||||
mimetype="text/csv",
|
||||
)
|
||||
for line in order.saleorderline_set.all():
|
||||
mail.attach(
|
||||
filename=f"Bernini order {order.name}/{line.name}.csv",
|
||||
content=line.as_csv(),
|
||||
mimetype="text/csv",
|
||||
)
|
||||
mail.send()
|
||||
return Response(status=status.HTTP_200_OK,
|
||||
data=f"Email sent! You should receive it at {order.sold_to.email}")
|
||||
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data="Something went wrong on our end")
|
||||
return Response(
|
||||
status=status.HTTP_200_OK,
|
||||
data=f"Email sent! You should receive it at {order.sold_to.email}",
|
||||
)
|
||||
return Response(
|
||||
status=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
data="Something went wrong on our end",
|
||||
)
|
||||
|
||||
|
||||
class SaleOrderLineViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
API endpoint that allows orders to be viewed or edited.
|
||||
"""
|
||||
API endpoint that allows orders to be viewed or edited.
|
||||
"""
|
||||
|
||||
queryset = SaleOrderLine.objects.all().order_by("name")
|
||||
serializer_class = SaleOrderLineSerializer
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue