diff --git a/add_payment_methods_to_buba.py b/add_payment_methods_to_buba.py new file mode 100644 index 0000000..a9cf52e --- /dev/null +++ b/add_payment_methods_to_buba.py @@ -0,0 +1,40 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +""" +Скрипт для добавления способов оплаты в тенант buba +""" +import os +import sys +import django + +# Добавляем путь к проекту +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'myproject')) + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') +django.setup() + +from django_tenants.utils import schema_context +from django.core.management import call_command + +print("=" * 70) +print("Добавление способов оплаты в тенант 'buba'") +print("=" * 70) + +# Переключаемся на схему buba и создаём способы оплаты +with schema_context('buba'): + print("\n1. Создание способов оплаты...") + call_command('create_payment_methods') + + # Проверяем что создалось + from orders.models import PaymentMethod + methods = PaymentMethod.objects.all().order_by('order') + + print(f"\n2. Проверка созданных способов оплаты:") + print(f" Всего: {methods.count()}") + for method in methods: + status = "✓" if method.is_active else "✗" + print(f" {status} [{method.order}] {method.name} ({method.code})") + +print("\n" + "=" * 70) +print("✓ Готово!") +print("=" * 70) diff --git a/myproject/orders/admin.py b/myproject/orders/admin.py index de1493c..f0867d4 100644 --- a/myproject/orders/admin.py +++ b/myproject/orders/admin.py @@ -441,7 +441,7 @@ class PaymentMethodAdmin(admin.ModelAdmin): def payments_count(self, obj): """Количество платежей этим способом""" - count = obj.payments.count() + count = obj.transactions.count() if count == 0: return format_html('{}', count) return format_html('{}', count) @@ -450,7 +450,7 @@ class PaymentMethodAdmin(admin.ModelAdmin): def has_delete_permission(self, request, obj=None): """Запрещаем удаление используемых способов оплаты""" if obj: - # Разрешаем удаление только если нет связанных платежей - if obj.payments.exists(): + # Разрешаем удаление только если нет связанных транзакций + if obj.transactions.exists(): return False return super().has_delete_permission(request, obj) diff --git a/myproject/tenants/admin.py b/myproject/tenants/admin.py index 16ce529..71f26ec 100644 --- a/myproject/tenants/admin.py +++ b/myproject/tenants/admin.py @@ -312,51 +312,13 @@ class TenantRegistrationAdmin(admin.ModelAdmin): # Создаем системные способы оплаты logger.info(f"Создание системных способов оплаты для тенанта: {client.id}") - from orders.models import PaymentMethod + from django.core.management import call_command try: - payment_methods = [ - { - 'code': 'cash', - 'name': 'Наличными', - 'description': 'Оплата наличными деньгами', - 'is_system': True, - 'order': 1 - }, - { - 'code': 'card', - 'name': 'Картой', - 'description': 'Оплата банковской картой', - 'is_system': True, - 'order': 2 - }, - { - 'code': 'online', - 'name': 'Онлайн', - 'description': 'Онлайн оплата через платежную систему', - 'is_system': True, - 'order': 3 - }, - { - 'code': 'legal_entity', - 'name': 'Безнал от ЮРЛИЦ', - 'description': 'Безналичный расчёт от юридических лиц', - 'is_system': True, - 'order': 4 - }, - ] - - created_count = 0 - for method_data in payment_methods: - method, created = PaymentMethod.objects.get_or_create( - code=method_data['code'], - defaults=method_data - ) - if created: - created_count += 1 - logger.info(f"Создан способ оплаты: {method.name}") - - logger.info(f"Системные способы оплаты успешно созданы: {created_count} новых") + # Вызываем команду создания способов оплаты + # Это единственный источник истины для списка способов оплаты + call_command('create_payment_methods') + logger.info("Системные способы оплаты успешно созданы") except Exception as e: logger.error(f"Ошибка при создании способов оплаты: {e}", exc_info=True) # Не прерываем процесс, т.к. это не критично