from django.contrib.auth.models import AbstractUser from django.db import models from accounts.manager import UserManager from partner.models import Partner ROLE_CHOICES = ( ('admin', 'Admin'), ('manager', 'Manager'), ('staff', 'Staff'), ('customer', 'Customer'), ('partner', 'Partner'), ('partner_manager', 'Partner Manager'), ('partner_staff', 'Partner Staff'), ('partner_customer', 'Partner Customer'), ) class User(AbstractUser): phone_number = models.CharField(max_length=15, blank=True, null=True) role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='Staff') partner = models.ForeignKey(Partner, on_delete=models.CASCADE, blank=True, null=True) is_staff = models.BooleanField(default=False) is_customer = models.BooleanField(default=False) is_user = models.BooleanField(default=False) # Location fields pincode = models.CharField(max_length=10, blank=True, null=True) district = models.CharField(max_length=100, blank=True, null=True) state = models.CharField(max_length=100, blank=True, null=True) country = models.CharField(max_length=100, blank=True, null=True) place = models.CharField(max_length=200, blank=True, null=True) # Location fields latitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True) longitude = models.DecimalField(max_digits=9, decimal_places=6, blank=True, null=True) profile_picture = models.ImageField(upload_to='profile_pictures/', blank=True, null=True, default='default.png') allowed_modules = models.TextField( blank=True, null=True, help_text="Comma-separated module slugs this user can access" ) ALL_MODULES = ["dashboard", "partners", "events", "ad-control", "users", "reviews", "contributions", "financials", "settings"] def get_allowed_modules(self): ALL = ["dashboard", "partners", "events", "ad-control", "users", "reviews", "contributions", "financials", "settings"] if self.is_superuser or self.role == "admin": return ALL if self.allowed_modules: return [m.strip() for m in self.allowed_modules.split(",") if m.strip()] if self.role == "manager": return ALL return [] objects = UserManager() def __str__(self): return self.username