lamost fully fixed umfold template
This commit is contained in:
@@ -4,6 +4,7 @@ Billing Module Admin
|
||||
from django.contrib import admin
|
||||
from django.utils.html import format_html
|
||||
from django.contrib import messages
|
||||
from unfold.admin import ModelAdmin
|
||||
from igny8_core.admin.base import AccountAdminMixin
|
||||
from igny8_core.business.billing.models import (
|
||||
CreditCostConfig,
|
||||
@@ -28,7 +29,7 @@ class CreditTransactionResource(resources.ModelResource):
|
||||
|
||||
|
||||
@admin.register(CreditTransaction)
|
||||
class CreditTransactionAdmin(ExportMixin, AccountAdminMixin, admin.ModelAdmin):
|
||||
class CreditTransactionAdmin(ExportMixin, AccountAdminMixin, ModelAdmin):
|
||||
resource_class = CreditTransactionResource
|
||||
list_display = ['id', 'account', 'transaction_type', 'amount', 'balance_after', 'description', 'created_at']
|
||||
list_filter = ['transaction_type', ('created_at', DateRangeFilter), 'account']
|
||||
@@ -47,7 +48,7 @@ class CreditTransactionAdmin(ExportMixin, AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(CreditUsageLog)
|
||||
class CreditUsageLogAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class CreditUsageLogAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['id', 'account', 'operation_type', 'credits_used', 'cost_usd', 'model_used', 'created_at']
|
||||
list_filter = ['operation_type', 'created_at', 'account', 'model_used']
|
||||
search_fields = ['account__name', 'model_used']
|
||||
@@ -65,7 +66,7 @@ class CreditUsageLogAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Invoice)
|
||||
class InvoiceAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class InvoiceAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = [
|
||||
'invoice_number',
|
||||
'account',
|
||||
@@ -91,7 +92,7 @@ class PaymentResource(resources.ModelResource):
|
||||
|
||||
|
||||
@admin.register(Payment)
|
||||
class PaymentAdmin(ExportMixin, AccountAdminMixin, admin.ModelAdmin):
|
||||
class PaymentAdmin(ExportMixin, AccountAdminMixin, ModelAdmin):
|
||||
"""
|
||||
Main Payment Admin with approval workflow.
|
||||
When you change status to 'succeeded', it automatically:
|
||||
@@ -373,7 +374,7 @@ class PaymentAdmin(ExportMixin, AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(CreditPackage)
|
||||
class CreditPackageAdmin(admin.ModelAdmin):
|
||||
class CreditPackageAdmin(ModelAdmin):
|
||||
list_display = ['name', 'slug', 'credits', 'price', 'discount_percentage', 'is_active', 'is_featured', 'sort_order']
|
||||
list_filter = ['is_active', 'is_featured']
|
||||
search_fields = ['name', 'slug']
|
||||
@@ -381,7 +382,7 @@ class CreditPackageAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(PaymentMethodConfig)
|
||||
class PaymentMethodConfigAdmin(admin.ModelAdmin):
|
||||
class PaymentMethodConfigAdmin(ModelAdmin):
|
||||
list_display = ['country_code', 'payment_method', 'display_name', 'is_enabled', 'sort_order', 'updated_at']
|
||||
list_filter = ['payment_method', 'is_enabled', 'country_code']
|
||||
search_fields = ['country_code', 'display_name', 'payment_method']
|
||||
@@ -390,7 +391,7 @@ class PaymentMethodConfigAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(AccountPaymentMethod)
|
||||
class AccountPaymentMethodAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class AccountPaymentMethodAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = [
|
||||
'display_name',
|
||||
'type',
|
||||
@@ -419,7 +420,7 @@ class AccountPaymentMethodAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(CreditCostConfig)
|
||||
class CreditCostConfigAdmin(admin.ModelAdmin):
|
||||
class CreditCostConfigAdmin(ModelAdmin):
|
||||
list_display = [
|
||||
'operation_type',
|
||||
'display_name',
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from django.contrib import messages
|
||||
from unfold.admin import ModelAdmin
|
||||
from igny8_core.admin.base import SiteSectorAdminMixin
|
||||
from .models import Keywords, Clusters, ContentIdeas
|
||||
from import_export.admin import ExportMixin
|
||||
@@ -16,7 +17,7 @@ class KeywordsResource(resources.ModelResource):
|
||||
|
||||
|
||||
@admin.register(Clusters)
|
||||
class ClustersAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ClustersAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['name', 'site', 'sector', 'keywords_count', 'volume', 'status', 'created_at']
|
||||
list_filter = ['status', 'site', 'sector']
|
||||
search_fields = ['name']
|
||||
@@ -40,7 +41,7 @@ class ClustersAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Keywords)
|
||||
class KeywordsAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class KeywordsAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin):
|
||||
resource_class = KeywordsResource
|
||||
list_display = ['keyword', 'seed_keyword', 'site', 'sector', 'cluster', 'volume', 'difficulty', 'intent', 'status', 'created_at']
|
||||
list_filter = ['status', 'seed_keyword__intent', 'site', 'sector', 'seed_keyword__industry', 'seed_keyword__sector']
|
||||
@@ -130,7 +131,7 @@ class KeywordsAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ContentIdeas)
|
||||
class ContentIdeasAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ContentIdeasAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['idea_title', 'site', 'sector', 'description_preview', 'content_type', 'content_structure', 'status', 'keyword_cluster', 'estimated_word_count', 'created_at']
|
||||
list_filter = ['status', 'content_type', 'content_structure', 'site', 'sector']
|
||||
search_fields = ['idea_title', 'target_keywords', 'description']
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
System Module Admin
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from unfold.admin import ModelAdmin
|
||||
from igny8_core.admin.base import AccountAdminMixin
|
||||
from .models import AIPrompt, IntegrationSettings, AuthorProfile, Strategy
|
||||
|
||||
@@ -15,7 +16,7 @@ try:
|
||||
from .models import SystemLog, SystemStatus
|
||||
|
||||
@admin.register(SystemLog)
|
||||
class SystemLogAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class SystemLogAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['id', 'account', 'module', 'level', 'action', 'message', 'created_at']
|
||||
list_filter = ['module', 'level', 'created_at', 'account']
|
||||
search_fields = ['message', 'action']
|
||||
@@ -24,7 +25,7 @@ try:
|
||||
|
||||
|
||||
@admin.register(SystemStatus)
|
||||
class SystemStatusAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class SystemStatusAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['component', 'account', 'status', 'message', 'last_check']
|
||||
list_filter = ['status', 'component', 'account']
|
||||
search_fields = ['component', 'message']
|
||||
@@ -34,7 +35,7 @@ except ImportError:
|
||||
|
||||
|
||||
@admin.register(AIPrompt)
|
||||
class AIPromptAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class AIPromptAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['id', 'prompt_type', 'account', 'is_active', 'updated_at']
|
||||
list_filter = ['prompt_type', 'is_active', 'account']
|
||||
search_fields = ['prompt_type']
|
||||
@@ -63,7 +64,7 @@ class AIPromptAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(IntegrationSettings)
|
||||
class IntegrationSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class IntegrationSettingsAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['id', 'integration_type', 'account', 'is_active', 'updated_at']
|
||||
list_filter = ['integration_type', 'is_active', 'account']
|
||||
search_fields = ['integration_type']
|
||||
@@ -99,7 +100,7 @@ class IntegrationSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(AuthorProfile)
|
||||
class AuthorProfileAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class AuthorProfileAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['name', 'account', 'tone', 'language', 'is_active', 'created_at']
|
||||
list_filter = ['is_active', 'tone', 'language', 'account']
|
||||
search_fields = ['name', 'description', 'tone']
|
||||
@@ -128,7 +129,7 @@ class AuthorProfileAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Strategy)
|
||||
class StrategyAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class StrategyAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['name', 'account', 'sector', 'is_active', 'created_at']
|
||||
list_filter = ['is_active', 'account']
|
||||
search_fields = ['name', 'description']
|
||||
|
||||
@@ -2,12 +2,13 @@
|
||||
Settings Models Admin
|
||||
"""
|
||||
from django.contrib import admin
|
||||
from unfold.admin import ModelAdmin
|
||||
from igny8_core.admin.base import AccountAdminMixin
|
||||
from .settings_models import SystemSettings, AccountSettings, UserSettings, ModuleSettings, ModuleEnableSettings, AISettings
|
||||
|
||||
|
||||
@admin.register(SystemSettings)
|
||||
class SystemSettingsAdmin(admin.ModelAdmin):
|
||||
class SystemSettingsAdmin(ModelAdmin):
|
||||
"""SystemSettings - Global, no account filtering"""
|
||||
list_display = ['key', 'description', 'updated_at']
|
||||
search_fields = ['key', 'description']
|
||||
@@ -15,7 +16,7 @@ class SystemSettingsAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(AccountSettings)
|
||||
class AccountSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class AccountSettingsAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['account', 'key', 'is_active', 'updated_at']
|
||||
list_filter = ['is_active', 'account']
|
||||
search_fields = ['key', 'account__name']
|
||||
@@ -32,7 +33,7 @@ class AccountSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(UserSettings)
|
||||
class UserSettingsAdmin(admin.ModelAdmin):
|
||||
class UserSettingsAdmin(ModelAdmin):
|
||||
list_display = ['user', 'account', 'key', 'updated_at']
|
||||
list_filter = ['account']
|
||||
search_fields = ['key', 'user__email', 'account__name']
|
||||
@@ -59,7 +60,7 @@ class UserSettingsAdmin(admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ModuleSettings)
|
||||
class ModuleSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class ModuleSettingsAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['account', 'module_name', 'key', 'is_active', 'updated_at']
|
||||
list_filter = ['module_name', 'is_active', 'account']
|
||||
search_fields = ['key', 'module_name', 'account__name']
|
||||
@@ -76,7 +77,7 @@ class ModuleSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(AISettings)
|
||||
class AISettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class AISettingsAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = ['account', 'integration_type', 'is_active', 'updated_at']
|
||||
list_filter = ['integration_type', 'is_active', 'account']
|
||||
search_fields = ['integration_type', 'account__name']
|
||||
@@ -93,7 +94,7 @@ class AISettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ModuleEnableSettings)
|
||||
class ModuleEnableSettingsAdmin(AccountAdminMixin, admin.ModelAdmin):
|
||||
class ModuleEnableSettingsAdmin(AccountAdminMixin, ModelAdmin):
|
||||
list_display = [
|
||||
'account',
|
||||
'planner_enabled',
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from django.contrib import admin
|
||||
from django.contrib import messages
|
||||
from unfold.admin import ModelAdmin
|
||||
from igny8_core.admin.base import SiteSectorAdminMixin
|
||||
from .models import Tasks, Images, Content
|
||||
from igny8_core.business.content.models import ContentTaxonomy, ContentAttribute, ContentTaxonomyRelation, ContentClusterMap
|
||||
@@ -26,7 +27,7 @@ class TaskResource(resources.ModelResource):
|
||||
|
||||
|
||||
@admin.register(Tasks)
|
||||
class TasksAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class TasksAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin):
|
||||
resource_class = TaskResource
|
||||
list_display = ['title', 'content_type', 'content_structure', 'site', 'sector', 'status', 'cluster', 'created_at']
|
||||
list_filter = ['status', 'content_type', 'content_structure', 'site', 'sector', 'cluster']
|
||||
@@ -141,7 +142,7 @@ class TasksAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(Images)
|
||||
class ImagesAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ImagesAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['get_content_title', 'site', 'sector', 'image_type', 'status', 'position', 'created_at']
|
||||
list_filter = ['image_type', 'status', 'site', 'sector']
|
||||
search_fields = ['content__title']
|
||||
@@ -183,7 +184,7 @@ class ContentResource(resources.ModelResource):
|
||||
|
||||
|
||||
@admin.register(Content)
|
||||
class ContentAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ContentAdmin(ExportMixin, SiteSectorAdminMixin, ModelAdmin):
|
||||
resource_class = ContentResource
|
||||
list_display = ['title', 'content_type', 'content_structure', 'site', 'sector', 'source', 'status', 'get_taxonomy_count', 'created_at']
|
||||
list_filter = ['content_type', 'content_structure', 'source', 'status', 'site', 'sector', 'created_at']
|
||||
@@ -326,7 +327,7 @@ class ContentAdmin(ExportMixin, SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ContentTaxonomy)
|
||||
class ContentTaxonomyAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ContentTaxonomyAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['name', 'taxonomy_type', 'slug', 'count', 'external_id', 'external_taxonomy', 'site', 'sector']
|
||||
list_filter = ['taxonomy_type', 'site', 'sector']
|
||||
search_fields = ['name', 'slug', 'external_taxonomy']
|
||||
@@ -357,7 +358,7 @@ class ContentTaxonomyAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ContentAttribute)
|
||||
class ContentAttributeAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ContentAttributeAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['name', 'value', 'attribute_type', 'content', 'cluster', 'external_id', 'source', 'site', 'sector']
|
||||
list_filter = ['attribute_type', 'source', 'site', 'sector']
|
||||
search_fields = ['name', 'value', 'external_attribute_name', 'content__title']
|
||||
@@ -382,14 +383,14 @@ class ContentAttributeAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
|
||||
|
||||
@admin.register(ContentTaxonomyRelation)
|
||||
class ContentTaxonomyRelationAdmin(admin.ModelAdmin):
|
||||
class ContentTaxonomyRelationAdmin(ModelAdmin):
|
||||
list_display = ['content', 'taxonomy', 'created_at']
|
||||
search_fields = ['content__title', 'taxonomy__name']
|
||||
readonly_fields = ['created_at', 'updated_at']
|
||||
|
||||
|
||||
@admin.register(ContentClusterMap)
|
||||
class ContentClusterMapAdmin(SiteSectorAdminMixin, admin.ModelAdmin):
|
||||
class ContentClusterMapAdmin(SiteSectorAdminMixin, ModelAdmin):
|
||||
list_display = ['content', 'task', 'cluster', 'role', 'source', 'site', 'sector', 'created_at']
|
||||
list_filter = ['role', 'source', 'site', 'sector']
|
||||
search_fields = ['content__title', 'task__title', 'cluster__name']
|
||||
|
||||
Reference in New Issue
Block a user