Coverage for modules\erp\admin.py: 100%
38 statements
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 09:19 +0800
« prev ^ index » next coverage.py v7.16.0, created at 2026-09-05 09:19 +0800
1from django.contrib import admin
2from .models import Account, JournalEntry, JournalItem, Product, Warehouse, StockMove, Invoice, InvoiceLine, Shipment
4class JournalItemInline(admin.TabularInline):
5 model = JournalItem
6 extra = 2
8@admin.register(Account)
9class AccountAdmin(admin.ModelAdmin):
10 list_display = ('code', 'name', 'type', 'currency', 'is_active', 'tenant_id')
11 list_filter = ('type', 'is_active', 'tenant_id')
12 search_fields = ('code', 'name')
14@admin.register(JournalEntry)
15class JournalEntryAdmin(admin.ModelAdmin):
16 list_display = ('entry_number', 'date', 'status', 'reference_type', 'posted_at', 'tenant_id')
17 list_filter = ('status', 'reference_type', 'tenant_id')
18 inlines = [JournalItemInline]
20@admin.register(Product)
21class ProductAdmin(admin.ModelAdmin):
22 list_display = ('sku', 'name', 'category', 'cost_price', 'selling_price', 'current_stock', 'is_active', 'tenant_id')
23 search_fields = ('sku', 'name')
24 list_filter = ('category', 'is_active', 'tenant_id')
26@admin.register(StockMove)
27class StockMoveAdmin(admin.ModelAdmin):
28 list_display = ('product', 'move_type', 'quantity', 'unit_cost', 'source_warehouse', 'dest_warehouse', 'created_at', 'tenant_id')
29 list_filter = ('move_type', 'tenant_id')
31class InvoiceLineInline(admin.TabularInline):
32 model = InvoiceLine
33 extra = 1
35@admin.register(Invoice)
36class InvoiceAdmin(admin.ModelAdmin):
37 list_display = ('invoice_number', 'customer_name', 'issue_date', 'due_date', 'status', 'total_amount', 'amount_paid', 'tenant_id')
38 list_filter = ('status', 'tenant_id')
39 search_fields = ('invoice_number', 'customer_name')
40 inlines = [InvoiceLineInline]
43@admin.register(Shipment)
44class ShipmentAdmin(admin.ModelAdmin):
45 list_display = ('reference_number', 'customer_name', 'shipment_type', 'status', 'origin', 'destination', 'estimated_arrival', 'tenant_id')
46 list_filter = ('shipment_type', 'status', 'tenant_id')
47 search_fields = ('reference_number', 'customer_name', 'tracking_number', 'bill_of_lading')