35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
# accounts/signals.py
|
|
from django.db.models.signals import post_save
|
|
from django.dispatch import receiver
|
|
from django.db import transaction
|
|
from django.utils.text import slugify
|
|
|
|
from hr.models import Employee
|
|
from .models import User
|
|
|
|
|
|
@receiver(post_save, sender=User, dispatch_uid="create_employee_on_user_create_simple")
|
|
def create_employee_on_user_create(sender, instance: User, created: bool, **kwargs):
|
|
if not created:
|
|
return
|
|
|
|
def _make():
|
|
tenant = getattr(instance, "tenant", None)
|
|
email = (instance.email or "").strip()
|
|
|
|
# If already linked OR same email exists in this tenant, skip
|
|
if Employee.objects.filter(user=instance).exists():
|
|
return
|
|
if email and Employee.objects.filter(tenant=tenant, email__iexact=email).exists():
|
|
return
|
|
|
|
Employee.objects.create(
|
|
tenant=tenant,
|
|
user=instance,
|
|
first_name=instance.first_name or "",
|
|
last_name=instance.last_name or "",
|
|
email=email,
|
|
# employee_id will be auto-generated in Employee.save()
|
|
)
|
|
|
|
transaction.on_commit(_make) |