Source code for smarter.apps.account.management.commands.create_account

"""
This module provides a Django management command to create a new Account record.

Classes
=======
Command
    Implements logic for the ``manage.py create_account`` command.

Command-line Arguments
=====================
--account_number : str, optional
    The account number for the new account.
--company_name : str, optional
    The company name for the new account.

Functionality
=============
- If ``account_number`` is provided, attempts to find or create an Account with that number and associates the company name.
- If only ``company_name`` is provided, finds or creates the Account based on company name.
- Populates account details like name (in snake_case) and description for newly created accounts.
- Success or failure status is reported to the user.

Usage Example
=============
    python manage.py create_account --account_number=<number> --company_name="<name>"
    python manage.py create_account --company_name="<name>"
"""

from smarter.apps.account.models import Account
from smarter.common.utils import to_snake_case
from smarter.lib.django.management.base import SmarterCommand


# pylint: disable=E1101
[docs] class Command(SmarterCommand): """Create a new account."""
[docs] def add_arguments(self, parser): """Add arguments to the command.""" parser.add_argument("--account_number", type=str, help="The account number for the new account") parser.add_argument("--company_name", type=str, help="The company name for the new account", required=False)
[docs] def handle(self, *args, **options): """Create the Account.""" self.handle_begin() account_number = options["account_number"] company_name = options["company_name"] if account_number: account, created = Account.objects.get_or_create(account_number=account_number) account.company_name = company_name if created: account.name = to_snake_case(company_name) account.description = f"Account for {company_name}" account.save() else: if not company_name: self.handle_completed_failure(msg="company_name must be provided when creating an account.") return account, created = Account.objects.get_or_create(company_name=company_name) if created: Account.get_cached_object(invalidate=True, pk=account.pk) # prime the cache self.handle_completed_success(msg=f"Created account: {account.account_number} {account.company_name}") else: self.handle_completed_success( msg=f"Account already exists: {account.account_number} {account.company_name}" )