regluit/admin.py

215 lines
6.7 KiB
Python

from django import forms
from django.contrib.auth.models import User
from django.contrib.admin import ModelAdmin
from django.contrib.admin.sites import AdminSite
from selectable.forms import AutoCompleteSelectWidget,AutoCompleteSelectField
from regluit.core import models
from regluit import payment
from regluit.core.lookups import PublisherNameLookup, WorkLookup, OwnerLookup
from djcelery.admin import TaskState, WorkerState, TaskMonitor, WorkerMonitor, \
IntervalSchedule, CrontabSchedule, PeriodicTask, PeriodicTaskAdmin
from notification.admin import NoticeTypeAdmin, NoticeSettingAdmin, NoticeAdmin
from notification.models import NoticeType, NoticeSetting, Notice, ObservedItem, NoticeQueueBatch
import pickle
class RegluitAdmin(AdminSite):
login_template = 'registration/login.html'
class UserAdmin(ModelAdmin):
search_fields = ['username', 'email']
list_display = ('username', 'email')
class ClaimAdminForm(forms.ModelForm):
work = AutoCompleteSelectField(
WorkLookup,
widget=AutoCompleteSelectWidget(WorkLookup),
required=True,
)
user = AutoCompleteSelectField(
OwnerLookup,
widget=AutoCompleteSelectWidget(OwnerLookup),
required=True,
)
class Meta(object):
model = models.Claim
class ClaimAdmin(ModelAdmin):
list_display = ('work', 'rights_holder', 'status')
date_hierarchy = 'created'
form = ClaimAdminForm
class RightsHolderAdminForm(forms.ModelForm):
owner = AutoCompleteSelectField(
OwnerLookup,
widget=AutoCompleteSelectWidget(OwnerLookup),
required=True,
)
class Meta(object):
model = models.RightsHolder
class RightsHolderAdmin(ModelAdmin):
date_hierarchy = 'created'
form = RightsHolderAdminForm
class PremiumAdmin(ModelAdmin):
list_display = ('campaign', 'amount', 'description')
date_hierarchy = 'created'
class CampaignAdmin(ModelAdmin):
list_display = ('work', 'created', 'status')
date_hierarchy = 'created'
exclude = ('edition', 'work', 'managers', 'publisher')
search_fields = ['work']
class WorkAdmin(ModelAdmin):
search_fields = ['title']
ordering = ('title',)
list_display = ('title', 'created')
date_hierarchy = 'created'
fields = ('title',)
class AuthorAdmin(ModelAdmin):
search_fields = ('name',)
date_hierarchy = 'created'
ordering = ('name',)
exclude = ('editions',)
class SubjectAdmin(ModelAdmin):
search_fields = ('name',)
date_hierarchy = 'created'
ordering = ('name',)
exclude = ('works',)
class EditionAdminForm(forms.ModelForm):
work = AutoCompleteSelectField(
WorkLookup,
label='Work',
widget=AutoCompleteSelectWidget(WorkLookup),
required=True,
)
publisher_name = AutoCompleteSelectField(
PublisherNameLookup,
label='Name',
widget=AutoCompleteSelectWidget(PublisherNameLookup),
required=True,
)
class Meta(object):
model = models.Edition
class EditionAdmin(ModelAdmin):
list_display = ('title', 'publisher_name', 'created')
date_hierarchy = 'created'
ordering = ('title',)
form = EditionAdminForm
class PublisherAdminForm(forms.ModelForm):
name = AutoCompleteSelectField(
PublisherNameLookup,
label='Name',
widget=AutoCompleteSelectWidget(PublisherNameLookup),
required=True,
)
class Meta(object):
model = models.Publisher
class PublisherAdmin(ModelAdmin):
list_display = ('name', 'url', 'logo_url', 'description')
ordering = ('name',)
form = PublisherAdminForm
class PublisherNameAdmin(ModelAdmin):
list_display = ('name', 'publisher')
ordering = ('name',)
search_fields = ['name']
class EbookAdmin(ModelAdmin):
search_fields = ('edition__title',)
list_display = ('__unicode__','created', 'user','edition')
date_hierarchy = 'created'
ordering = ('edition__title',)
exclude = ('edition','user')
class WishlistAdmin(ModelAdmin):
date_hierarchy = 'created'
class UserProfileAdmin(ModelAdmin):
search_fields = ('user__username',)
date_hierarchy = 'created'
exclude = ('user',)
class CeleryTaskAdmin(ModelAdmin):
pass
class TransactionAdmin(ModelAdmin):
list_display = ('campaign', 'user', 'amount', 'status', 'error')
date_hierarchy = 'date_created'
class PaymentResponseAdmin(ModelAdmin):
pass
class ReceiverAdmin(ModelAdmin):
ordering = ('email',)
def notice_queue_batch_data(obj):
return pickle.loads(str(obj.pickled_data).decode("base64"))
notice_queue_batch_data.short_description = 'unpickled_data'
class NoticeQueueBatchAdmin(ModelAdmin):
# show the pickled data in a form humans can parse more easily
list_display = (notice_queue_batch_data,)
pass
class PressAdmin(ModelAdmin):
list_display = ('title', 'source', 'date')
ordering = ('-date',)
admin_site = RegluitAdmin("Admin")
admin_site.register(User, UserAdmin)
admin_site.register(models.Work, WorkAdmin)
admin_site.register(models.Claim, ClaimAdmin)
admin_site.register(models.RightsHolder, RightsHolderAdmin)
admin_site.register(models.Premium, PremiumAdmin)
admin_site.register(models.Campaign, CampaignAdmin)
admin_site.register(models.Author, AuthorAdmin)
admin_site.register(models.Publisher, PublisherAdmin)
admin_site.register(models.PublisherName, PublisherNameAdmin)
admin_site.register(models.Subject, SubjectAdmin)
admin_site.register(models.Edition, EditionAdmin)
admin_site.register(models.Ebook, EbookAdmin)
admin_site.register(models.Wishlist, WishlistAdmin)
admin_site.register(models.UserProfile, UserProfileAdmin)
admin_site.register(models.CeleryTask, CeleryTaskAdmin)
admin_site.register(models.Press, PressAdmin)
# payments
admin_site.register(payment.models.Transaction, TransactionAdmin)
admin_site.register(payment.models.PaymentResponse, PaymentResponseAdmin)
admin_site.register(payment.models.Receiver, ReceiverAdmin)
# add the djcelery admin interface
# https://raw.github.com/ask/django-celery/2.4/djcelery/admin.py
admin_site.register(TaskState, TaskMonitor)
admin_site.register(WorkerState, WorkerMonitor)
admin_site.register(IntervalSchedule)
admin_site.register(CrontabSchedule)
admin_site.register(PeriodicTask, PeriodicTaskAdmin)
# add the django-notification admin panel
# https://github.com/jtauber/django-notification/blob/master/notification/admin.py
admin_site.register(NoticeQueueBatch, NoticeQueueBatchAdmin)
admin_site.register(NoticeType, NoticeTypeAdmin)
admin_site.register(NoticeSetting, NoticeSettingAdmin)
admin_site.register(Notice, NoticeAdmin)
admin_site.register(ObservedItem)