You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.3 KiB
71 lines
2.3 KiB
from django.contrib import admin
|
|
from django.contrib.admin import register
|
|
from django.urls import reverse_lazy
|
|
from django.utils.html import format_html
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
# Register your models here.
|
|
from rangefilter.filter import DateRangeFilter, DateTimeRangeFilter
|
|
|
|
from core.admin import SafeModelAdmin
|
|
from .models import Referral, ReferralStats
|
|
from .forms import ReferralAdminForm, ReferralStatsAdminForm
|
|
|
|
|
|
class ReferralAdminInline(admin.TabularInline):
|
|
model = Referral
|
|
verbose_name = 'Реферальная ссылка'
|
|
verbose_name_plural = 'Реферальные ссылки'
|
|
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def has_delete_permission(self, request, obj=None):
|
|
return False
|
|
|
|
@register(Referral)
|
|
class ReferralAdmin(SafeModelAdmin):
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def referral_stats(self, referral):
|
|
try:
|
|
link = reverse_lazy(
|
|
'admin:{}_{}_changelist'.format(referral.referralstats._meta.app_label,
|
|
referral.referralstats._meta.object_name.lower())
|
|
)
|
|
link += '?q={}'.format(referral.code)
|
|
except Exception as e:
|
|
link = '#'
|
|
name = _('Details')
|
|
|
|
return format_html('<a href="{}">{}</a>', link, name)
|
|
|
|
referral_stats.short_description = _('Stats')
|
|
form = ReferralAdminForm
|
|
list_display = ('code', 'create_at', 'updated_at', 'status', 'referral_stats')
|
|
search_fields = ('code',)
|
|
list_filter = ('status', ('create_at', DateRangeFilter), ('updated_at', DateTimeRangeFilter))
|
|
ordering = ('-create_at',)
|
|
|
|
|
|
@register(ReferralStats)
|
|
class ReferralStatsAdmin(SafeModelAdmin):
|
|
def has_add_permission(self, request):
|
|
return False
|
|
|
|
def referral_code(self, stats):
|
|
return stats.referral.code
|
|
|
|
referral_code.short_description = _('Code')
|
|
|
|
def converted_earnings(self, stats):
|
|
return stats.earnings if stats.earnings > 0 else 0
|
|
|
|
converted_earnings.short_description = _('Earnings')
|
|
|
|
form = ReferralStatsAdminForm
|
|
list_display = ('referral_code', 'visits', 'registrations')
|
|
list_select_related = ('referral',)
|
|
search_fields = ('referral__name', 'referral__code',)
|
|
ordering = ('-create_at',)
|
|
|