from time import strftime from django.contrib import admin from django.shortcuts import redirect from django.urls import path from django.utils.html import format_html from django_pagarme.admin import PagarmeItemConfigAdmin from django_pagarme.models import PagarmeItemConfig # Register your models here. from pythonpro.domain import subscription_domain from pythonpro.memberkit import facade from pythonpro.memberkit.models import SubscriptionType, PaymentItemConfigToSubscriptionType, Subscription class PaymentItemConfigInline(admin.TabularInline): extra = 1 model = PaymentItemConfigToSubscriptionType @admin.register(SubscriptionType) class SubscriptionTypeAdmin(admin.ModelAdmin): change_list_template = 'memberkit/subscriptiontype/synchronize_button.html' fields = [ 'id', 'name', 'has_discord_access', 'email_marketing_tags', 'discourse_groups', 'include_on_cohort', 'days_of_access' ] list_display = fields readonly_fields = ['id', 'name'] inlines = [PaymentItemConfigInline] def get_urls(self): urls = super().get_urls() urls.append(path('sincronizar', self.synchronize)) return urls def synchronize(self, request): facade.synchronize_subscription_types() self.message_user(request, 'Assinaturas Atualizadas') return redirect('.') def has_add_permission(self, request): return False def has_delete_permission(self, request, obj=None): return False admin.site.unregister(PagarmeItemConfig) @admin.register(PagarmeItemConfig) class NewPagarmeItemConfigAdmin(PagarmeItemConfigAdmin): inlines = [PaymentItemConfigInline] class PaymentListFilter(admin.SimpleListFilter): title = 'Por Pagamento' parameter_name = 'has_payment' def lookups(self, request, model_admin): return [('yes', 'Com Pagamento'), ('no', 'Sem Pagamento')] def queryset(self, request, queryset): if self.value() == 'yes': return queryset.filter(payment_id__isnull=False) elif self.value() == 'no': return queryset.filter(payment_id__isnull=True) return queryset @admin.register(Subscription) class SubscriptionAdmin(admin.ModelAdmin): fields = ['payment', 'subscriber', 'subscription_types', 'observation', 'expired_at'] list_display = [ 'id', 'subscriber', 'pagarme_url_field', 'memberkit_user_url_field', 'responsible', 'status', 'created_at', 'updated_at', 'activated_at', 'expired_at' ] autocomplete_fields = ['subscriber'] search_fields = ['subscriber__email', 'payment__transaction_id'] list_filter = ['status', PaymentListFilter, 'subscription_types'] ordering = ['-updated_at'] readonly_fields = ['activated_at', 'memberkit_user_id'] actions = ['activate', 'inactivate'] def get_queryset(self, request): return Subscription.objects.select_related('payment').select_related('subscriber').select_related('responsible') def pagarme_url_field(self, obj): if obj.payment is None: link = ( f'Buscar' ) else: link = ( f'{obj.payment.transaction_id}' ) return format_html(link) pagarme_url_field.allow_tags = True pagarme_url_field.short_description = 'Pagarme' def memberkit_user_url_field(self, obj): if obj.memberkit_user_id is None: return '----' link = ( f'' f'{obj.subscriber.first_name}' ) return format_html(link) memberkit_user_url_field.allow_tags = True memberkit_user_url_field.short_description = 'Memberkit' def activate(self, request, queryset): responsible = request.user for subscription in queryset: subscription_domain.activate_subscription_on_all_services( subscription, responsible, f'Ativada via admin por Usuário com id {responsible.id} e email {responsible.email}' ) activate.short_descriptions = 'Ativar' def inactivate(self, request, queryset): responsible = request.user strftime('d%/%m/%Y H%:%M:%S') for subscription in queryset: subscription_domain.inactivate_subscription_on_all_services( subscription, responsible, f'Desativada em via admin por Usuário com id {responsible.id} e email {responsible.email}' ) inactivate.short_descriptions = 'Desativar' def has_delete_permission(self, request, obj=None): return False