Source code for tests.management.commands.add_additional_test_data_for_clubs

""" Script to add test data for testing club admin and pre-paid """

from django.core.management.base import BaseCommand

from accounts.models import User
from club_sessions.models import (
    SessionTypePaymentMethodMembership,
    SessionTypePaymentMethod,
    SessionType,
)
from organisations.models import Organisation, MembershipType, MemberMembershipType
from organisations.views.admin import add_club_defaults
from payments.models import OrgPaymentMethod
from rbac.core import (
    rbac_get_group_by_name,
    rbac_add_user_to_group,
    rbac_get_admin_group_by_name,
    rbac_add_user_to_admin_group,
)


def _set_session_rates(club, payment_method_name, membership, amount):
    """Set specific session rats"""

    # set rates to be different (default is the same)
    session_type = SessionType.objects.filter(
        name="Duplicate", organisation=club
    ).first()
    payment_method = OrgPaymentMethod.objects.filter(
        payment_method=payment_method_name, organisation=club
    ).first()
    session_type_payment_method = SessionTypePaymentMethod.objects.filter(
        session_type=session_type, payment_method=payment_method
    ).first()
    session = SessionTypePaymentMethodMembership.objects.filter(
        session_type_payment_method=session_type_payment_method, membership=membership
    ).first()
    session.fee = amount
    session.save()


def _manage_club(name: str, org_id: str):
    # Add a club and set up data

    alan = User.objects.filter(system_number=100).first()
    club = Organisation(
        org_id=org_id,
        name=name,
        secretary=alan,
        type="Club",
        club_email="a@b.com",
        address1="Add1",
        address2="Add2",
        suburb="Suburb",
        state="ACT",
        postcode="1234",
    )
    club.save()

    # Set up defaults as if we were created from the UI
    add_club_defaults(club)

    # Add some session rates
    membership = MembershipType.objects.filter(
        organisation=club, name="Standard"
    ).first()

    _set_session_rates(club, "Bridge Credits", membership, 10)
    _set_session_rates(club, "Cash", membership, 13)
    _set_session_rates(club, "EFTPOS", membership, 14)
    _set_session_rates(club, "Credit Card", membership, 15)

    # Guests
    _set_session_rates(club, "Bridge Credits", None, 20)
    _set_session_rates(club, "Cash", None, 23)
    _set_session_rates(club, "EFTPOS", None, 24)
    _set_session_rates(club, "Credit Card", None, 25)

    # Add members
    for system_number in range(100, 120):
        MemberMembershipType(
            system_number=system_number,
            membership_type=membership,
            last_modified_by=alan,
        ).save()

    # Add me as an admin
    # Get group
    group = rbac_get_group_by_name(f"{club.rbac_name_qualifier}.basic")

    for system_number in [620246, 518891]:

        user = User.objects.filter(system_number=system_number).first()

        # Add user to group
        rbac_add_user_to_group(user, group)

        # All users are admins
        admin_group = rbac_get_admin_group_by_name(
            f"{club.rbac_admin_name_qualifier}.admin"
        )
        rbac_add_user_to_admin_group(user, admin_group)


[docs] class Command(BaseCommand):
[docs] def handle(self, *args, **options): print("Adding Payments Bridge Club and data...") _manage_club("Payments Bridge Club", "8889")