# -*- coding: utf-8 -*- """ Сервис для работы со способами оплаты. """ from orders.models import PaymentMethod class PaymentMethodService: """Сервис управления способами оплаты""" # Системные способы оплаты DEFAULT_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 }, ] @classmethod def get_by_code(cls, code: str) -> PaymentMethod | None: """ Получить способ оплаты по коду. Args: code: Код способа оплаты Returns: PaymentMethod или None """ return PaymentMethod.objects.filter(code=code).first() @classmethod def create_default_methods(cls) -> list[tuple[PaymentMethod, bool]]: """ Создать системные способы оплаты. Returns: Список кортежей (PaymentMethod, created) """ results = [] for method_data in cls.DEFAULT_METHODS: method, created = PaymentMethod.objects.get_or_create( code=method_data['code'], defaults=method_data ) results.append((method, created)) return results @classmethod def reset_default_methods(cls) -> list[PaymentMethod]: """ Удалить и пересоздать системные способы оплаты. Returns: Список созданных PaymentMethod """ PaymentMethod.objects.filter(is_system=True).delete() results = cls.create_default_methods() return [method for method, _ in results]