first commit
This commit is contained in:
commit
b71ea45681
898 changed files with 138202 additions and 0 deletions
65
invoices/admin.py
Normal file
65
invoices/admin.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
from django.contrib import admin
|
||||
from simple_history.admin import SimpleHistoryAdmin
|
||||
from django.utils.html import format_html
|
||||
from django.utils.safestring import mark_safe
|
||||
from .models import Item, Quote, QuoteItem, Invoice, InvoiceItem, Payment
|
||||
|
||||
@admin.register(Item)
|
||||
class ItemAdmin(SimpleHistoryAdmin):
|
||||
list_display = ['name', 'unit_price', 'default_quantity', 'is_default_in_quotes', 'is_active', 'created_by']
|
||||
list_filter = ['is_default_in_quotes', 'is_active', 'created_by']
|
||||
search_fields = ['name', 'description']
|
||||
prepopulated_fields = {'slug': ('name',)}
|
||||
readonly_fields = ['deleted_at', 'created', 'updated']
|
||||
|
||||
class QuoteItemInline(admin.TabularInline):
|
||||
model = QuoteItem
|
||||
extra = 1
|
||||
fields = ['item', 'quantity', 'unit_price', 'total_price', 'notes']
|
||||
|
||||
@admin.register(Quote)
|
||||
class QuoteAdmin(SimpleHistoryAdmin):
|
||||
list_display = ['name', 'process_instance', 'customer', 'status_display', 'total_amount', 'final_amount', 'valid_until', 'created_by']
|
||||
list_filter = ['status', 'created', 'valid_until', 'process_instance__process']
|
||||
search_fields = ['name', 'customer__username', 'customer__first_name', 'customer__last_name', 'notes']
|
||||
prepopulated_fields = {'slug': ('name',)}
|
||||
readonly_fields = ['deleted_at', 'created', 'updated', 'total_amount', 'discount_amount', 'final_amount']
|
||||
inlines = [QuoteItemInline]
|
||||
ordering = ['-created']
|
||||
|
||||
def status_display(self, obj):
|
||||
return mark_safe(obj.get_status_display_with_color())
|
||||
status_display.short_description = "وضعیت"
|
||||
|
||||
class InvoiceItemInline(admin.TabularInline):
|
||||
model = InvoiceItem
|
||||
extra = 1
|
||||
fields = ['item', 'quantity', 'unit_price', 'total_price', 'notes']
|
||||
|
||||
class PaymentInline(admin.TabularInline):
|
||||
model = Payment
|
||||
extra = 1
|
||||
fields = ['amount', 'payment_method', 'reference_number', 'payment_date', 'notes']
|
||||
readonly_fields = ['created_by', 'created']
|
||||
|
||||
@admin.register(Invoice)
|
||||
class InvoiceAdmin(SimpleHistoryAdmin):
|
||||
list_display = ['name', 'process_instance', 'customer', 'status_display', 'final_amount', 'paid_amount', 'remaining_amount', 'due_date']
|
||||
list_filter = ['status', 'created', 'due_date', 'process_instance__process']
|
||||
search_fields = ['name', 'customer__username', 'customer__first_name', 'customer__last_name', 'notes']
|
||||
prepopulated_fields = {'slug': ('name',)}
|
||||
readonly_fields = ['deleted_at', 'created', 'updated', 'total_amount', 'discount_amount', 'final_amount', 'paid_amount', 'remaining_amount']
|
||||
inlines = [InvoiceItemInline, PaymentInline]
|
||||
ordering = ['-created']
|
||||
|
||||
def status_display(self, obj):
|
||||
return mark_safe(obj.get_status_display_with_color())
|
||||
status_display.short_description = "وضعیت"
|
||||
|
||||
@admin.register(Payment)
|
||||
class PaymentAdmin(SimpleHistoryAdmin):
|
||||
list_display = ['invoice', 'amount', 'payment_method', 'payment_date', 'created_by']
|
||||
list_filter = ['payment_method', 'payment_date', 'created_by']
|
||||
search_fields = ['invoice__name', 'reference_number', 'notes']
|
||||
readonly_fields = ['created']
|
||||
ordering = ['-payment_date']
|
Loading…
Add table
Add a link
Reference in a new issue