1
0
forked from erp-dev/erp
Files
erpnew/stock/admin.py
2025-11-04 18:04:27 +08:00

106 lines
3.3 KiB
Python

from django.contrib import admin
from django.contrib.admin import action
from . import models, services
@admin.register(models.PurchaseOrder)
class PurchaseOrderAdmin(admin.ModelAdmin):
list_display = ('id', 'supplier', 'order_date', 'total_amount')
search_fields = ('supplier__name',)
list_filter = ('order_date',)
ordering = ('-order_date',)
@admin.register(models.Inventory)
class InventoryAdmin(admin.ModelAdmin):
list_display = (
'id',
'product',
'product_color',
'warehouse',
'quantity',
'num_of_rolls',
'minimum_quantity',
'updated_at',
)
search_fields = ('product__name', 'warehouse__name')
list_filter = ('warehouse',)
ordering = ('-updated_at',)
@admin.display(description='颜色')
def product_color(self, obj):
return obj.product.color
@admin.register(models.StockSnapshot)
class StockSnapshotAdmin(admin.ModelAdmin):
list_display = (
'id',
'product__name',
'warehouse__name',
'delta',
'quantity_before',
'quantity_after',
'stock_change_record',
'created_at',
)
search_fields = ('product__name', 'warehouse__name', 'stock_change_record__id')
list_filter = ('stock_change_record__type',)
ordering = ('-created_at', )
def has_add_permission(self, request):
# 禁止通过admin界面添加库存快照
return False
def has_change_permission(self, request, obj = ...):
# 禁止通过admin界面修改库存快照
return False
def has_delete_permission(self, request, obj = ...):
# 禁止通过admin界面删除库存快照
return False
def get_readonly_fields(self, request, obj = ...):
# 所有字段均为只读
return [field.name for field in self.model._meta.fields]
@admin.register(models.StockChangeRecord)
class StockChangeRecordAdmin(admin.ModelAdmin):
list_display = (
'id',
'type',
'product',
'warehouse',
'quantity',
'source_type',
'source_id',
'is_finished',
'finished_at',
'created_by',
'created_at',
)
search_fields = ('product__name', 'warehouse__name', 'source_id')
list_filter = ('type', 'source_type', 'type', 'is_finished', 'created_at')
ordering = ('-created_at', '-updated_at')
readonly_fields = ('created_by', 'is_finished', 'finished_at')
def save_model(self, request, obj: models.StockChangeRecord, form, change):
if not change:
if obj.is_finished is True:
# Prevent setting is_finished to True on creation
obj.is_finished = False
if not obj.created_by:
# 新建记录时,设置创建人
obj.created_by = request.user
return super().save_model(request, obj, form, change)
@action(description='标记选中的库存变动记录为已完成')
def make_selected_stock_changes_completed(self, request, queryset):
if queryset.count() > 1:
self.message_user(request, '一次只能处理一条库存变动记录。', level='error')
return
record = queryset.first()
services.make_stock_change_completed(record)
actions = [make_selected_stock_changes_completed]