- Добавлено поле wallet_balance в модель Customer - Создана модель WalletTransaction для истории операций - Реализован сервис WalletService с методами: * add_overpayment - автоматическое зачисление переплаты * pay_with_wallet - оплата заказа из кошелька * adjust_balance - ручная корректировка баланса - Интеграция с Payment.save() для автоматической обработки переплат - UI для оплаты из кошелька в деталях заказа - Отображение баланса и долга на странице клиента - Админка с inline транзакций и запретом ручного создания - Добавлен способ оплаты account_balance - Миграция 0004 для customers приложения
67 lines
2.4 KiB
Python
67 lines
2.4 KiB
Python
# -*- coding: utf-8 -*-
|
||
from django.core.management.base import BaseCommand
|
||
from orders.models import PaymentMethod
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = 'Создаёт стандартные способы оплаты для цветочного магазина'
|
||
|
||
def handle(self, *args, **options):
|
||
payment_methods = [
|
||
{
|
||
'code': 'account_balance',
|
||
'name': 'С баланса счёта',
|
||
'description': 'Оплата из кошелька клиента',
|
||
'is_system': True,
|
||
'order': 0
|
||
},
|
||
{
|
||
'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
|
||
self.stdout.write(
|
||
self.style.SUCCESS(f'✓ Создан способ оплаты: {method.name}')
|
||
)
|
||
else:
|
||
self.stdout.write(
|
||
self.style.WARNING(f'• Уже существует: {method.name}')
|
||
)
|
||
|
||
self.stdout.write(
|
||
self.style.SUCCESS(f'\nГотово! Создано {created_count} новых способов оплаты.')
|
||
)
|