Bez popisu

models.py 2.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from __future__ import annotations
  2. from django.contrib.auth import get_user_model
  3. from django.contrib.sites.models import Site
  4. from django.db import models
  5. User = get_user_model()
  6. class TimestampedModel(models.Model):
  7. created_at = models.DateTimeField(auto_now_add=True)
  8. updated_at = models.DateTimeField(auto_now=True)
  9. class Meta:
  10. abstract = True
  11. class Organization(TimestampedModel):
  12. name = models.CharField(max_length=255)
  13. code = models.CharField(max_length=32, unique=True)
  14. # Minimal curated choices for simplicity; expand as needed
  15. TZ_CHOICES = (
  16. ("UTC", "UTC"),
  17. ("Asia/Bangkok", "Asia/Bangkok"),
  18. ("Asia/Singapore", "Asia/Singapore"),
  19. ("Asia/Jakarta", "Asia/Jakarta"),
  20. ("Europe/Berlin", "Europe/Berlin"),
  21. ("America/New_York", "America/New_York"),
  22. )
  23. timezone = models.CharField(max_length=64, choices=TZ_CHOICES, default="UTC")
  24. CURRENCY_CHOICES = (
  25. ("USD", "USD — US Dollar"),
  26. ("THB", "THB — Thai Baht"),
  27. ("EUR", "EUR — Euro"),
  28. ("SGD", "SGD — Singapore Dollar"),
  29. ("IDR", "IDR — Indonesian Rupiah"),
  30. )
  31. currency_code = models.CharField(max_length=8, choices=CURRENCY_CHOICES, default="USD")
  32. def __str__(self) -> str:
  33. return self.name
  34. class OrganizationSite(models.Model):
  35. organization = models.ForeignKey(Organization, on_delete=models.CASCADE, related_name="sites")
  36. site = models.OneToOneField(Site, on_delete=models.CASCADE, related_name="organization_site")
  37. def __str__(self) -> str:
  38. return f"{self.site.domain} -> {self.organization.code}"
  39. class UserProfile(TimestampedModel):
  40. ROLE_OWNER = "owner"
  41. ROLE_MANAGER = "manager"
  42. ROLE_DRIVER = "driver"
  43. ROLE_CUSTOMER = "customer"
  44. ROLE_AUDITOR = "auditor"
  45. ROLE_CHOICES = (
  46. (ROLE_OWNER, "Owner"),
  47. (ROLE_MANAGER, "Manager"),
  48. (ROLE_DRIVER, "Driver"),
  49. (ROLE_CUSTOMER, "Customer"),
  50. (ROLE_AUDITOR, "Auditor"),
  51. )
  52. user = models.OneToOneField(User, on_delete=models.CASCADE, related_name="recycle_profile")
  53. organization = models.ForeignKey(Organization, on_delete=models.CASCADE, related_name="users")
  54. role = models.CharField(max_length=16, choices=ROLE_CHOICES, default=ROLE_MANAGER)
  55. my_photo = models.ImageField(upload_to="user_photos/", blank=True, null=True)
  56. def __str__(self) -> str:
  57. return f"{self.user.username} ({self.role})"