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, PartnerStats from .forms import ReferralAdminForm, ReferralStatsAdminForm, PartnerStatsAdminForm class RefarralAdminInline(admin.TabularInline): model = Referral readonly_fields = ('code',) def has_add_permission(self, request): return False def has_change_permission(self, request, obj=None): 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('{}', 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',) @register(PartnerStats) class PartnerStatsAdmin(SafeModelAdmin): def has_add_permission(self, request): return False def stats_owner(self, stats): try: link = reverse_lazy( 'admin:{}_{}_change'.format(stats.user._meta.app_label, stats.user._meta.object_name.lower()), args=(stats.user.id,) ) name = stats.user.email except Exception as e: link = '#' name = "None" return format_html('{}', link, name) stats_owner.short_description = _('User') def formatted_total_conversion(self, stats): return str(stats.formatted_total_conversion) + "%" formatted_total_conversion.short_description = _('Total conversion') def converted_total_earnings(self, stats): return stats.total_earnings if stats.total_earnings > 0 else 0 converted_total_earnings.short_description = _('Total earnings') form = PartnerStatsAdminForm list_display = ('stats_owner', 'total_visits', 'total_regs') search_fields = ('user__email',)