This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
from django import forms
|
||||
from django.urls import reverse_lazy
|
||||
from django.views.generic import DetailView, ListView, UpdateView
|
||||
|
||||
from backoffice.mixins import BackofficeCRUDMixin, BackofficeHtmxMixin
|
||||
from shop.models import Order
|
||||
|
||||
SECTION = 'orders'
|
||||
|
||||
|
||||
class ShippingStatusForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = Order
|
||||
fields = ('shipping_status',)
|
||||
widgets = {'shipping_status': forms.Select(attrs={'class': 'select select-bordered w-full'})}
|
||||
|
||||
|
||||
class OrderListView(BackofficeCRUDMixin, BackofficeHtmxMixin, ListView):
|
||||
model = Order
|
||||
permission_required = 'shop.view_order'
|
||||
section = SECTION
|
||||
paginate_by = 20
|
||||
template_name = 'backoffice/generic/list.html'
|
||||
fragment_template_name = 'backoffice/generic/_list_fragment.html'
|
||||
|
||||
def get_queryset(self):
|
||||
queryset = super().get_queryset()
|
||||
status = self.request.GET.get('status')
|
||||
|
||||
if status:
|
||||
queryset = queryset.filter(status=status)
|
||||
|
||||
return queryset
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(
|
||||
{
|
||||
'title': 'Pedidos',
|
||||
'columns': [('Código', 'code'), ('Cliente', 'email'), ('Estado', 'get_status_display'), ('Total', 'total')],
|
||||
'detail_url_name': 'backoffice:order_detail',
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
class OrderDetailView(BackofficeCRUDMixin, DetailView):
|
||||
model = Order
|
||||
permission_required = 'shop.view_order'
|
||||
section = SECTION
|
||||
template_name = 'backoffice/orders/order_detail.html'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update(
|
||||
{
|
||||
'lines': self.object.lines.all(),
|
||||
'payments': self.object.payments.all(),
|
||||
'shipping_status_form': ShippingStatusForm(instance=self.object),
|
||||
}
|
||||
)
|
||||
return context
|
||||
|
||||
|
||||
class OrderUpdateShippingStatusView(BackofficeCRUDMixin, UpdateView):
|
||||
model = Order
|
||||
form_class = ShippingStatusForm
|
||||
permission_required = 'shop.change_order'
|
||||
section = SECTION
|
||||
|
||||
def get_success_url(self):
|
||||
return reverse_lazy('backoffice:order_detail', args=[self.object.pk])
|
||||
|
||||
def form_invalid(self, form):
|
||||
return self.render_to_response(self.get_context_data(shipping_status_form=form))
|
||||
|
||||
def get_template_names(self):
|
||||
return ['backoffice/orders/order_detail.html']
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super().get_context_data(**kwargs)
|
||||
context.update({'lines': self.object.lines.all(), 'payments': self.object.payments.all()})
|
||||
context.setdefault('shipping_status_form', ShippingStatusForm(instance=self.object))
|
||||
return context
|
||||
Reference in New Issue
Block a user