update link registration site to executive dashboard
This commit is contained in:
1 parent
1e6f6b3b57
commit
d0d1ae7d24
26 files changed
+1044
-55
No files matched your search
@@ -1,16 +1,46 @@
|
||||
from datetime import date
|
||||
import secrets
|
||||
|
||||
from django.core.exceptions import ValidationError
|
||||
from django.db import models
|
||||
from django.utils import timezone
|
||||
from django.utils.text import slugify
|
||||
|
||||
from apps.accounts.models import User
|
||||
|
||||
|
||||
def site_name_slug(site_name: str) -> str:
|
||||
"""Slug portion of a site id (no numeric suffix)."""
|
||||
code = slugify(str(site_name or "").strip())[:55]
|
||||
if not code:
|
||||
raise ValidationError({"site_name": "Nama site tidak valid untuk dijadikan id."})
|
||||
return code
|
||||
|
||||
|
||||
def site_id_from_name(site_name: str, *, numeric_suffix: int | None = None) -> str:
|
||||
"""Site PK: `{name-slug}-{4-digit number}`, e.g. sukawarna-4821."""
|
||||
base = site_name_slug(site_name)
|
||||
if numeric_suffix is None:
|
||||
numeric_suffix = secrets.randbelow(10_000)
|
||||
return f"{base}-{numeric_suffix:04d}"
|
||||
|
||||
|
||||
def allocate_site_id(site_name: str) -> str:
|
||||
"""Pick an unused site_id for this name."""
|
||||
for _ in range(32):
|
||||
candidate = site_id_from_name(site_name)
|
||||
if not Site.objects.filter(pk=candidate).exists():
|
||||
return candidate
|
||||
raise ValidationError({"site_name": "Gagal membuat id site unik — coba lagi."})
|
||||
|
||||
|
||||
class Site(models.Model):
|
||||
site_id = models.BigAutoField(primary_key=True)
|
||||
site_name = models.CharField(max_length=30)
|
||||
site_id = models.SlugField(primary_key=True, max_length=64)
|
||||
site_name = models.CharField(max_length=30, unique=True)
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="sites")
|
||||
pusat_code = models.SlugField(max_length=64, blank=True, default="")
|
||||
pusat_active_site_id = models.BigIntegerField(null=True, blank=True)
|
||||
pusat_registered_at = models.DateTimeField(null=True, blank=True)
|
||||
created_at = models.DateTimeField(auto_now_add=True)
|
||||
updated_at = models.DateTimeField(auto_now=True)
|
||||
|
||||
@@ -21,6 +51,15 @@ class Site(models.Model):
|
||||
def __str__(self) -> str:
|
||||
return self.site_name
|
||||
|
||||
@property
|
||||
def is_registered_to_pusat(self) -> bool:
|
||||
return bool(self.pusat_active_site_id and self.pusat_code)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.site_id:
|
||||
self.site_id = allocate_site_id(self.site_name)
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Kandang(models.Model):
|
||||
kandang_id = models.BigAutoField(primary_key=True)
|
||||
|
||||
Reference in new issue
Block a user