Fixing PLans page

This commit is contained in:
IGNY8 VPS (Salman)
2025-12-08 14:12:08 +00:00
parent da3b45d1c7
commit 144e955b92
24 changed files with 1992 additions and 1105 deletions

View File

@@ -0,0 +1,185 @@
#!/usr/bin/env python
"""
Create API test data for billing endpoints
All test records are marked with 'API_TEST' in name/description/notes
"""
import os
import sys
import django
# Setup Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'igny8_core.settings')
django.setup()
from django.utils import timezone
from django.contrib.auth import get_user_model
from igny8_core.auth.models import Account, Plan
from igny8_core.business.billing.models import (
Invoice, Payment, CreditTransaction, AccountPaymentMethod, PaymentMethodConfig
)
from decimal import Decimal
from datetime import timedelta
User = get_user_model()
print("Creating API test data...")
# Get or create test account
try:
account = Account.objects.get(name__icontains='scale')
print(f"✓ Using existing account: {account.name} (ID: {account.id})")
except Account.DoesNotExist:
# Get a plan
plan = Plan.objects.filter(is_active=True).first()
account = Account.objects.create(
name='API_TEST_ACCOUNT',
slug='api-test-account',
plan=plan,
credits=5000,
status='active'
)
print(f"✓ Created test account: {account.name} (ID: {account.id})")
# Create test invoices
invoice1, created = Invoice.objects.get_or_create(
account=account,
invoice_number='INV-API-TEST-001',
defaults={
'status': 'pending',
'subtotal': Decimal('99.99'),
'tax': Decimal('0.00'),
'total': Decimal('99.99'),
'currency': 'USD',
'invoice_date': timezone.now().date(),
'due_date': (timezone.now() + timedelta(days=30)).date(),
'billing_email': 'test@igny8.com',
'notes': 'API_TEST: Invoice for approval test',
'line_items': [{'description': 'API Test Service', 'amount': 99.99, 'quantity': 1}],
}
)
if created:
print(f"✓ Created test invoice 1 (ID: {invoice1.id})")
else:
print(f"✓ Existing test invoice 1 (ID: {invoice1.id})")
invoice2, created = Invoice.objects.get_or_create(
account=account,
invoice_number='INV-API-TEST-002',
defaults={
'status': 'pending',
'subtotal': Decimal('49.99'),
'tax': Decimal('0.00'),
'total': Decimal('49.99'),
'currency': 'USD',
'invoice_date': timezone.now().date(),
'due_date': (timezone.now() + timedelta(days=30)).date(),
'billing_email': 'test@igny8.com',
'notes': 'API_TEST: Invoice for rejection test',
'line_items': [{'description': 'API Test Service', 'amount': 49.99, 'quantity': 1}],
}
)
if created:
print(f"✓ Created test invoice 2 (ID: {invoice2.id})")
else:
print(f"✓ Existing test invoice 2 (ID: {invoice2.id})")
# Create test payment for approval
pending_payment, created = Payment.objects.get_or_create(
account=account,
invoice=invoice1,
manual_reference='API_TEST_REF_001',
defaults={
'status': 'pending_approval',
'payment_method': 'bank_transfer',
'amount': Decimal('99.99'),
'currency': 'USD',
'manual_notes': 'API_TEST: Test payment for approval endpoint',
}
)
if created:
print(f"✓ Created pending payment (ID: {pending_payment.id}) for approve_payment endpoint")
else:
print(f"✓ Existing pending payment (ID: {pending_payment.id})")
# Create test payment for rejection
reject_payment, created = Payment.objects.get_or_create(
account=account,
invoice=invoice2,
manual_reference='API_TEST_REF_002',
defaults={
'status': 'pending_approval',
'payment_method': 'manual',
'amount': Decimal('49.99'),
'currency': 'USD',
'manual_notes': 'API_TEST: Test payment for rejection endpoint',
}
)
if created:
print(f"✓ Created pending payment (ID: {reject_payment.id}) for reject_payment endpoint")
else:
print(f"✓ Existing pending payment (ID: {reject_payment.id})")
# Get or create test payment method config
configs = PaymentMethodConfig.objects.filter(payment_method='bank_transfer')
if configs.exists():
config = configs.first()
print(f"✓ Using existing payment method config (ID: {config.id})")
created = False
else:
config = PaymentMethodConfig.objects.create(
payment_method='bank_transfer',
display_name='API_TEST Bank Transfer',
instructions='API_TEST: Transfer to account 123456789',
is_enabled=True,
sort_order=1,
)
print(f"✓ Created payment method config (ID: {config.id})")
created = True
# Create test account payment method
account_method, created = AccountPaymentMethod.objects.get_or_create(
account=account,
type='bank_transfer',
defaults={
'display_name': 'API_TEST Account Bank Transfer',
'instructions': 'API_TEST: Test account-specific payment method',
'is_default': True,
}
)
if created:
print(f"✓ Created account payment method (ID: {account_method.id})")
else:
print(f"✓ Existing account payment method (ID: {account_method.id})")
# Create test credit transaction
transaction, created = CreditTransaction.objects.get_or_create(
account=account,
transaction_type='adjustment',
amount=1000,
defaults={
'balance_after': account.credits,
'description': 'API_TEST: Test credit adjustment',
'metadata': {'test': True, 'reason': 'API testing'},
}
)
if created:
print(f"✓ Created credit transaction (ID: {transaction.id})")
else:
print(f"✓ Existing credit transaction (ID: {transaction.id})")
print("\n" + "="*60)
print("API Test Data Summary:")
print("="*60)
print(f"Account ID: {account.id}")
print(f"Pending Payment (approve): ID {pending_payment.id}")
print(f"Pending Payment (reject): ID {reject_payment.id}")
print(f"Payment Method Config: ID {config.id}")
print(f"Account Payment Method: ID {account_method.id}")
print(f"Credit Transaction: ID {transaction.id}")
print("="*60)
print("\nTest endpoints:")
print(f"POST /v1/admin/billing/{pending_payment.id}/approve_payment/")
print(f"POST /v1/admin/billing/{reject_payment.id}/reject_payment/")
print(f"POST /v1/admin/users/{account.id}/adjust-credits/")
print(f"GET /v1/billing/payment-methods/{account_method.id}/set_default/")
print("="*60)