1
0
forked from erp-dev/erp
Files
erpnew/basic_info/admin.py

131 lines
3.8 KiB
Python

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(AdminBase):
list_display = ('name', 'area', 'email', 'mobile')
search_fields = ('name', 'area', 'email', 'mobile')
@admin.register(models.ProductCategory)
class ProductCategoryAdmin(AdminBase):
list_display = ('name', 'product_prefix', 'description')
search_fields = ('name',)
@admin.register(models.Product)
class ProductAdmin(AdminBase):
list_display = (
'name',
'category',
'human_id',
'color',
'width_size',
'transform_rate',
'single_price_in',
'single_price_out',
)
search_fields = ('name', 'human_id')
list_filter = ('category',)
@admin.register(models.BankAccount)
class BankAccountAdmin(AdminBase):
list_display = ('name', 'auto_number')
search_fields = ('name', 'auto_number')
@admin.register(models.WareHouse)
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(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(AdminBase):
list_display = ('name', 'mobile', 'status', 'job_type', 'sys_user')
search_fields = ('name', 'mobile')
list_filter = (
'job_type',
'status',
)
@admin.register(models.DeviceInfo)
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(AdminBase):
list_display = ('name', 'description')
search_fields = ('name',)
@admin.register(models.VehicleTransportRecord)
class VehicleTransportRecordAdmin(AdminBase):
list_display = ('driver_name', 'contact_number', 'delivery_date')
search_fields = ('driver_name', 'contact_number')
list_filter = ('vehicle_type',)