feat: add daily report functionality and settlement status to shop orders

This commit is contained in:
Parsa Nazer
2026-02-09 11:08:39 +03:30
parent 0771a286b2
commit bd7c7252c7
6 changed files with 78 additions and 11 deletions
+37 -6
View File
@@ -1,6 +1,7 @@
from django.contrib import admin, messages
from .models import *
from unfold.admin import TabularInline, StackedInline
from unfold.contrib.inlines.admin import NonrelatedTabularInline
from django.db.models import Q
from import_export.admin import ImportExportModelAdmin
from unfold.contrib.import_export.forms import ExportForm, ImportForm, SelectableFieldsExportForm
@@ -60,19 +61,50 @@ class CartAdmin(ModelAdmin):
inlines = [CartItemInline]
class ShopOrderInline(StackedInline):
model = ShopOrderModel
extra = 0
max_num = 0
tab = True
class ShopOrderItemInline(NonrelatedTabularInline): # NonrelatedStackedInline is available as well
model = ShopOrderItem
tab = True
extra = 0
show_change_link = True
def get_form_queryset(self, obj):
"""
Gets all nonrelated objects needed for inlines. Method must be implemented.
"""
shop_orders = obj.shop_orders.all()
return ShopOrderItem.objects.filter(shop_order__in=shop_orders)
def save_new_instance(self, parent, instance):
"""
Extra save method which can for example update inline instances based on current
main model object. Method must be implemented.
"""
pass
from .models import ShopDailyReport, ShopOrderModel
@admin.register(ShopDailyReport)
class ShopDailyReportAdmin(ModelAdmin):
pass
list_display = ['shop', 'date', 'is_settled',]
inlines = [ShopOrderInline, ShopOrderItemInline]
def get_queryset(self, request):
if request.user.is_superuser:
return ShopOrderModel.objects.all()
return self.model.objects.all()
if not hasattr(request.user, 'shop'):
return ShopOrderModel.objects.none()
return self.model.objects.none()
queryset = ShopOrderModel.objects.filter(shop=request.user.shop)
queryset = self.model.objects.filter(shop=request.user.shop)
return queryset
def has_view_permission(self, request, obj=None):
@@ -95,11 +127,10 @@ class ShopOrderItemInline(StackedInline):
@admin.register(ShopOrderModel)
class ShopOrderModelAdmin(ShopOrderAdminPermission, ModelAdmin):
inlines = [ShopOrderItemInline]
list_display = ['id', 'shop', 'order', 'customer_name', 'status', 'is_paid', 'is_settled', 'download_invoice_button']
list_display = ['id', 'shop', 'order', 'customer_name', 'status', 'is_paid', 'is_settled', 'created_at', 'download_invoice_button']
readonly_fields = ['download_invoice_link']
def download_invoice_button(self, obj):