telephony: автоформат +380, тип линии SIP/АТС и звонок через Asterisk AMI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-13 14:52:09 +03:00
parent cc62324b69
commit 5d06d4d3ce
42 changed files with 1158 additions and 57 deletions
+32
View File
@@ -3,10 +3,42 @@ import logging
from django.db import models
from core.utils.crypto import encrypt_secret, decrypt_secret
from core.utils.validators import (
normalize_ukrainian_phone,
phone_input_attrs,
validate_ukrainian_phone,
)
logger = logging.getLogger(__name__)
class UkrainianPhoneField(models.CharField):
"""Украинский телефон: в БД всегда +380XXXXXXXXX, в форме — маска."""
default_validators = [validate_ukrainian_phone]
def __init__(self, *args, **kwargs):
kwargs.setdefault('max_length', 20)
super().__init__(*args, **kwargs)
def to_python(self, value):
value = super().to_python(value)
if value in (None, ''):
return value
return normalize_ukrainian_phone(value)
def get_prep_value(self, value):
value = super().get_prep_value(value)
if value in (None, ''):
return value
return normalize_ukrainian_phone(value)
def formfield(self, **kwargs):
from django import forms
kwargs.setdefault('widget', forms.TextInput(attrs=phone_input_attrs()))
return super().formfield(**kwargs)
class EncryptedCharField(models.CharField):
"""CharField, который хранит значение в БД в зашифрованном виде (Fernet).