1
0
forked from erp-dev/erp

feat: auto complete stock change

This commit is contained in:
2025-11-10 09:01:25 +08:00
parent 37c2e7d723
commit b2078dfa46
82 changed files with 1071 additions and 1336 deletions

View File

@@ -1,21 +1,63 @@
from django.contrib import admin
from basic_info.services import CustomerVisibilityService
from . import models
class AdminBase(admin.ModelAdmin):
"""管理员基础类,定义通用配置"""
def get_readonly_fields(self, request, obj = ...):
readonly_fields = list(super().get_readonly_fields(request, obj))
if request.user.is_superuser:
readonly_fields.append('merchant')
return readonly_fields
def get_list_display(self, request):
result = super().get_list_display(request)
result = list(result)
if 'id' not in result:
result = ['id'] + result
if request.user.is_superuser and 'merchant' not in result:
result = result + ['merchant']
return result
def save_model(self, request, obj, form, change):
if not change:
if not obj.merchant_id:
obj.merchant_id = request.user.employee.merchant.id
return super().save_model(request, obj, form, change)
@admin.register(models.QuickInput)
class QuickInputAdmin(admin.ModelAdmin):
list_display = ('name', 'value', 'group')
list_filter = ('group',)
@admin.register(models.Merchant)
class MerchantAdmin(admin.ModelAdmin):
list_display = ('name', 'type', 'email', 'mobile', 'auto_complete_stock_change')
search_fields = ('name', 'mobile')
list_filter = ('type', 'auto_complete_stock_change')
@admin.register(models.Supplier)
class SupplierAdmin(admin.ModelAdmin):
class SupplierAdmin(AdminBase):
list_display = ('name', 'area', 'email', 'mobile')
search_fields = ('name', 'area', 'email', 'mobile')
@admin.register(models.ProductCategory)
class ProductCategoryAdmin(admin.ModelAdmin):
class ProductCategoryAdmin(AdminBase):
list_display = ('name', 'product_prefix', 'description')
search_fields = ('name',)
@admin.register(models.Product)
class ProductAdmin(admin.ModelAdmin):
class ProductAdmin(AdminBase):
list_display = (
'name',
'category',
@@ -31,29 +73,35 @@ class ProductAdmin(admin.ModelAdmin):
@admin.register(models.BankAccount)
class BankAccountAdmin(admin.ModelAdmin):
class BankAccountAdmin(AdminBase):
list_display = ('name', 'auto_number')
search_fields = ('name', 'auto_number')
@admin.register(models.WareHouse)
class WareHouseAdmin(admin.ModelAdmin):
list_display = ('name', 'location', 'area', 'mobile')
search_fields = ('name', 'area')
class WareHouseAdmin(AdminBase):
list_display = ('name', 'location', 'area', 'mobile', 'mode')
list_filter = ('area', 'mode')
search_fields = ('name', 'location', 'mobile')
@admin.register(models.Customer)
class CustomerAdmin(admin.ModelAdmin):
list_display = ('name', 'area', 'email', 'mobile', 'total_debt')
class CustomerAdmin(AdminBase):
list_display = ('name', 'area', 'email', 'mobile', 'created_by', 'total_debt')
search_fields = ('name', 'area', 'email', 'mobile')
def get_queryset(self, request):
qs = super().get_queryset(request)
qs = CustomerVisibilityService.filter_customers_for_employee(qs, request.user)
return qs
@admin.display(boolean=False, description='累欠金额')
def total_debt(self, obj):
return '0 (动态逻辑字段待实现)'
@admin.register(models.Employee)
class EmployeeAdmin(admin.ModelAdmin):
class EmployeeAdmin(AdminBase):
list_display = ('name', 'mobile', 'status', 'job_type', 'sys_user')
search_fields = ('name', 'mobile')
list_filter = (
@@ -63,20 +111,20 @@ class EmployeeAdmin(admin.ModelAdmin):
@admin.register(models.DeviceInfo)
class DeviceInfoAdmin(admin.ModelAdmin):
class DeviceInfoAdmin(AdminBase):
list_display = ('name', 'type', 'is_occupied', 'status')
search_fields = ('name', 'start_working_at', 'stop_working_at')
list_filter = ('type', 'status')
@admin.register(models.VehicleType)
class VehicleTypeAdmin(admin.ModelAdmin):
class VehicleTypeAdmin(AdminBase):
list_display = ('name', 'description')
search_fields = ('name',)
@admin.register(models.VehicleTransportRecord)
class VehicleTransportRecordAdmin(admin.ModelAdmin):
class VehicleTransportRecordAdmin(AdminBase):
list_display = ('driver_name', 'contact_number', 'delivery_date')
search_fields = ('driver_name', 'contact_number')
list_filter = ('vehicle_type',)