feat: backoffice setup
CI / ci (ubuntu-24.04, 3.13) (push) Has been cancelled

This commit is contained in:
2026-07-23 13:31:53 +02:00
parent 87405f31fa
commit 2a9407e676
45 changed files with 2148 additions and 1 deletions
+84
View File
@@ -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