lamost fully fixed umfold template

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-14 17:30:10 +00:00
parent cd2c84116b
commit a6fab8784d
18 changed files with 60 additions and 2125 deletions

View File

@@ -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',

View File

@@ -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']

View File

@@ -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']

View File

@@ -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',

View File

@@ -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']