56 lines
2.7 KiB
Python
56 lines
2.7 KiB
Python
from django.core.management.base import BaseCommand
|
|
from recruitment.models import AgencyAccessLink, AgencyJobAssignment, HiringAgency
|
|
from django.utils import timezone
|
|
|
|
class Command(BaseCommand):
|
|
help = 'Debug agency login issues by checking existing access links'
|
|
|
|
def handle(self, *args, **options):
|
|
self.stdout.write("=== Agency Access Link Debug ===")
|
|
|
|
# Check total counts
|
|
total_links = AgencyAccessLink.objects.count()
|
|
total_assignments = AgencyJobAssignment.objects.count()
|
|
total_agencies = HiringAgency.objects.count()
|
|
|
|
self.stdout.write(f"Total Access Links: {total_links}")
|
|
self.stdout.write(f"Total Assignments: {total_assignments}")
|
|
self.stdout.write(f"Total Agencies: {total_agencies}")
|
|
self.stdout.write("")
|
|
|
|
if total_links == 0:
|
|
self.stdout.write("❌ NO ACCESS LINKS FOUND!")
|
|
self.stdout.write("This is likely the cause of 'Invalid token or password' error.")
|
|
self.stdout.write("")
|
|
self.stdout.write("To fix this:")
|
|
self.stdout.write("1. Create an agency first")
|
|
self.stdout.write("2. Create a job assignment for the agency")
|
|
self.stdout.write("3. Create an access link for the assignment")
|
|
return
|
|
|
|
# Show existing links
|
|
self.stdout.write("📋 Existing Access Links:")
|
|
for link in AgencyAccessLink.objects.all():
|
|
assignment = link.assignment
|
|
agency = assignment.agency if assignment else None
|
|
job = assignment.job if assignment else None
|
|
|
|
self.stdout.write(f" 📍 Token: {link.unique_token}")
|
|
self.stdout.write(f" Password: {link.access_password}")
|
|
self.stdout.write(f" Active: {link.is_active}")
|
|
self.stdout.write(f" Expires: {link.expires_at}")
|
|
self.stdout.write(f" Agency: {agency.name if agency else 'None'}")
|
|
self.stdout.write(f" Job: {job.title if job else 'None'}")
|
|
self.stdout.write(f" Valid: {link.is_valid}")
|
|
self.stdout.write("")
|
|
|
|
# Show assignments without links
|
|
self.stdout.write("📋 Assignments WITHOUT Access Links:")
|
|
assignments_without_links = AgencyJobAssignment.objects.filter(access_link__isnull=True)
|
|
for assignment in assignments_without_links:
|
|
self.stdout.write(f" 📍 {assignment.agency.name} - {assignment.job.title}")
|
|
self.stdout.write(f" Status: {assignment.status}")
|
|
self.stdout.write(f" Active: {assignment.is_active}")
|
|
self.stdout.write(f" Can Submit: {assignment.can_submit}")
|
|
self.stdout.write("")
|