Files
ACORE/apps/locations/models/dislocation.py
T
lokses ae5c1f1848 Add RRO, portal section perms, dislocation presets, and hiring intern flow.
Ship cash-register registry, section-based portal access, configurable dislocation columns, and trial-hire intern accounts with credentials PDF.
2026-08-09 14:58:17 +03:00

52 lines
2.1 KiB
Python

from django.db import models
from django.utils.translation import gettext_lazy as _
from core.models import BaseModel
from apps.locations.dislocation_columns import STANDARD_COLUMNS, normalize_columns
class DislocationColumnPreset(BaseModel):
"""Заготовка набора колонок таблицы дислокации.
``department`` — задел под преднастройки по отделам (nullable).
"""
name = models.CharField(_('Название'), max_length=100)
code = models.SlugField(_('Код'), max_length=50, unique=True)
columns = models.JSONField(
_('Колонки'),
default=list,
help_text=_('Упорядоченный список ключей из реестра колонок дислокации.'),
)
department = models.ForeignKey(
'core.Directory', on_delete=models.SET_NULL,
null=True, blank=True,
limit_choices_to={'directory_type__code': 'department', 'is_active': True},
related_name='dislocation_column_presets',
verbose_name=_('Отдел'),
help_text=_('Если задан — пресет по умолчанию для сотрудников этого отдела.'),
)
is_default = models.BooleanField(
_('По умолчанию'), default=False,
help_text=_('Используется, если у сотрудника нет своего набора и нет пресета отдела.'),
)
class Meta:
verbose_name = _('Пресет колонок дислокации')
verbose_name_plural = _('Пресеты колонок дислокации')
ordering = ['name']
def __str__(self):
return self.name
def save(self, *args, **kwargs):
self.columns = normalize_columns(self.columns or STANDARD_COLUMNS)
super().save(*args, **kwargs)
if self.is_default:
(
DislocationColumnPreset.objects
.exclude(pk=self.pk)
.filter(is_default=True)
.update(is_default=False)
)