summaryrefslogtreecommitdiff
path: root/postgresqleu/accounting/admin.py
blob: da75c8d1cd9b7c3589bab56f4bdc27e167d3abbf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from django.contrib import admin
from django.core.exceptions import ValidationError
from django.forms.models import BaseInlineFormSet

from .models import AccountClass, AccountGroup, Account, IncomingBalance
from .models import JournalEntry, JournalItem, JournalUrl, Object, Year


class AccountClassAdmin(admin.ModelAdmin):
    list_display = ('name', 'inbalance', 'balancenegative')


class AccountAdmin(admin.ModelAdmin):
    list_display = ('num', 'name')


class JournalItemFormset(BaseInlineFormSet):
    def clean(self):
        super(JournalItemFormset, self).clean()
        if len(self.forms) == 0:
            raise ValidationError("Cannot save with no entries")
        s = sum([f.cleaned_data['amount'] for f in self.forms if hasattr(f, 'cleaned_data') and f.cleaned_data and not f.cleaned_data.get('DELETE', False)])
        if s != 0:
            raise ValidationError("Journal entry does not balance!")


class JournalItemInline(admin.TabularInline):
    model = JournalItem
    formset = JournalItemFormset


class JournalUrlInline(admin.TabularInline):
    model = JournalUrl


class JournalEntryAdmin(admin.ModelAdmin):
    inlines = [JournalItemInline, JournalUrlInline]
    list_display = ('__str__', 'year', 'seq', 'date', 'closed')


class IncomingBalanceAdmin(admin.ModelAdmin):
    list_display = ('__str__', 'year', 'account', 'amount')


class ObjectAdmin(admin.ModelAdmin):
    list_display = ('name', 'active')


class YearAdmin(admin.ModelAdmin):
    readonly_fields = ('year',)


admin.site.register(AccountClass, AccountClassAdmin)
admin.site.register(AccountGroup)
admin.site.register(Account, AccountAdmin)
admin.site.register(IncomingBalance, IncomingBalanceAdmin)
admin.site.register(JournalEntry, JournalEntryAdmin)
admin.site.register(Object, ObjectAdmin)
admin.site.register(Year, YearAdmin)