update contacts

This commit is contained in:
IluaAir
2025-09-30 16:24:34 +03:00
parent 070a1722d2
commit e6df4820a6

View File

@@ -9,21 +9,79 @@ from extras.models import CustomField
def slugify(text: str):
CYRILLIC_TO_LATIN = {
'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'e', 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'i',
'к': 'k', 'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', 'ф': 'f',
'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'shch', 'ъ': '', 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu',
'я': 'ya',
'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'E', 'Ж': 'ZH', 'З': 'Z', 'И': 'I', 'Й': 'I',
'К': 'K', 'Л': 'L', 'М': 'M', 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', 'Ф': 'F',
'Х': 'H', 'Ц': 'C', 'Ч': 'CH', 'Ш': 'SH', 'Щ': 'SHCH', 'Ъ': '', 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'YU',
'Я': 'YA'
"а": "a",
"б": "b",
"в": "v",
"г": "g",
"д": "d",
"е": "e",
"ё": "e",
"ж": "zh",
"з": "z",
"и": "i",
"й": "i",
"к": "k",
"л": "l",
"м": "m",
"н": "n",
"о": "o",
"п": "p",
"р": "r",
"с": "s",
"т": "t",
"у": "u",
"ф": "f",
"х": "h",
"ц": "c",
"ч": "ch",
"ш": "sh",
"щ": "shch",
"ъ": "",
"ы": "y",
"ь": "",
"э": "e",
"ю": "yu",
"я": "ya",
"А": "A",
"Б": "B",
"В": "V",
"Г": "G",
"Д": "D",
"Е": "E",
"Ё": "E",
"Ж": "ZH",
"З": "Z",
"И": "I",
"Й": "I",
"К": "K",
"Л": "L",
"М": "M",
"Н": "N",
"О": "O",
"П": "P",
"Р": "R",
"С": "S",
"Т": "T",
"У": "U",
"Ф": "F",
"Х": "H",
"Ц": "C",
"Ч": "CH",
"Ш": "SH",
"Щ": "SHCH",
"Ъ": "",
"Ы": "Y",
"Ь": "",
"Э": "E",
"Ю": "YU",
"Я": "YA",
}
text = text.replace('ООО', '').lstrip()
text = ''.join(CYRILLIC_TO_LATIN.get(c, c) for c in text)
text = text.replace("ООО", "").lstrip()
text = "".join(CYRILLIC_TO_LATIN.get(c, c) for c in text)
text = text.lower()
text = re.sub(r'\s+', '_', text)
text = re.sub(r'[^a-z0-9_-]', '', text)
text = re.sub(r'[-_]{2,}', '_', text).strip('_-')
text = re.sub(r"\s+", "_", text)
text = re.sub(r"[^a-z0-9_-]", "", text)
text = re.sub(r"[-_]{2,}", "_", text).strip("_-")
return text
@@ -33,84 +91,83 @@ class CreateTenant(Script):
name = "Создание Оператора"
description = "Создание оператора и связанного префикса"
fieldsets = (
('Оператор',
('tenant_name', 'tenant_group', 'tenant_connection_type', 'tenant_description',
)),
('Префикс', ('prefix_cidr', 'prefix_vrf', 'prefix_role', 'prefix_description')),
('Документы', ('tenant_contract', 'tenant_prefix_task', 'tenant_tr')),
('Контакты', ('contacts_fio', 'contacts_phone', 'contacts_email'))
(
"Оператор",
(
"tenant_name",
"tenant_group",
"tenant_connection_type",
"tenant_description",
),
),
(
"Префикс",
("prefix_cidr", "prefix_vrf", "prefix_role", "prefix_description"),
),
("Документы", ("tenant_contract", "tenant_prefix_task", "tenant_tr")),
("Контакты", ("contacts_fio", "contacts_phone", "contacts_email")),
)
connection_types = CustomField.objects.get(name="connection_type")
tenant_name = StringVar(label="Имя оператора")
tenant_group = ObjectVar(
label="Группа оператора",
model=TenantGroup,
required=False
label="Группа оператора", model=TenantGroup, required=False
)
tenant_connection_type = ChoiceVar(
label="Тип подключения",
choices=connection_types.choices,
required=True
label="Тип подключения", choices=connection_types.choices, required=True
)
tenant_description = StringVar(label="Описание оператора", required=False)
tenant_contract = StringVar(
label="Договор",
description="Номер договора на разработку комплекса",
required=False
required=False,
)
tenant_tr = StringVar(
label="Проект/ТР",
description="Пример: DOCXXXXX",
required=False
label="Проект/ТР", description="Пример: DOCXXXXX", required=False
)
tenant_prefix_task = StringVar(
label="Задача",
description="URL или номер задачи из redmine, jira, CRM",
required=False
required=False,
)
prefix_cidr = IPNetworkVar(label="Префикс (CIDR)")
prefix_vrf = ObjectVar(
label="VRF проекта",
model=VRF,
required=True
)
prefix_role = ObjectVar(
label="Роль",
model=Role,
required=True
)
prefix_vrf = ObjectVar(label="VRF проекта", model=VRF, required=True)
prefix_role = ObjectVar(label="Роль", model=Role, required=True)
prefix_description = StringVar(label="Описание префикса", required=False)
contacts_fio = StringVar(label='ФИО')
contacts_phone = StringVar(label='Номер тел.')
contacts_email = StringVar(label='E-mail')
contacts_fio = StringVar(label="ФИО", required=False)
contacts_phone = StringVar(label="Номер тел.", required=False)
contacts_email = StringVar(label="E-mail", required=False)
def run(self, data, commit):
try:
tenant_slug = slugify(data["tenant_name"])
if Tenant.objects.filter(name=data["tenant_name"]).exists():
self.log_failure(f"Оператор с именем '{data['tenant_name']}' уже существует")
self.log_failure(
f"Оператор с именем '{data['tenant_name']}' уже существует"
)
return
if Tenant.objects.filter(slug=tenant_slug).exists():
self.log_failure(f"Оператор со slug '{data['tenant_slug']}' уже существует")
self.log_failure(
f"Оператор со slug '{data['tenant_slug']}' уже существует"
)
return
tenant_data = {
"name": data["tenant_name"],
"slug": tenant_slug,
"group": data['tenant_group']
"group": data["tenant_group"],
}
if data.get('tenant_description'):
tenant_data['description'] = data["tenant_description"]
if data.get("tenant_description"):
tenant_data["description"] = data["tenant_description"]
tenant = Tenant(**tenant_data)
tenant.custom_field_data['dogovor'] = data['tenant_contract']
tenant.custom_field_data['connection_type'] = data['tenant_connection_type']
tenant.custom_field_data['link_on_docs'] = data['tenant_tr']
tenant.custom_field_data["dogovor"] = data["tenant_contract"]
tenant.custom_field_data["connection_type"] = data["tenant_connection_type"]
tenant.custom_field_data["link_on_docs"] = data["tenant_tr"]
tenant.full_clean()
if commit:
tenant.save()
@@ -122,18 +179,24 @@ class CreateTenant(Script):
prefix=data["prefix_cidr"],
tenant=tenant,
description=data.get("prefix_description") or "",
vrf=data['prefix_vrf'],
role=data['prefix_role']
vrf=data["prefix_vrf"],
role=data["prefix_role"],
)
prefix.custom_field_data['Project'] = data['tenant_tr']
prefix.custom_field_data['zadacha'] = data['tenant_prefix_task']
prefix.custom_field_data["Project"] = data["tenant_tr"]
prefix.custom_field_data["zadacha"] = data["tenant_prefix_task"]
prefix.full_clean()
prefix.save()
self.log_success(f"Создан префикс {prefix.prefix} для оператора: {tenant.name}")
self.log_success(
f"Создан префикс {prefix.prefix} для оператора: {tenant.name}"
)
else:
self.log_info(f"Тестовый режим: Будет создан оператор: {tenant.name} (slug: {tenant.slug})")
self.log_info(f"Тестовый режим: Будет создан префикс: {data['prefix_cidr']}")
self.log_info(
f"Тестовый режим: Будет создан оператор: {tenant.name} (slug: {tenant.slug})"
)
self.log_info(
f"Тестовый режим: Будет создан префикс: {data['prefix_cidr']}"
)
try:
tenant.full_clean()
prefix = Prefix(