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
@@ -1,5 +1,6 @@
{% load common_tags %}
{% load i18n %}
{% load telephony %}
<aside style="background:var(--color-card); border-radius:0.75rem; border:1px solid var(--color-border); box-shadow:0 1px 2px rgb(0 0 0/0.05); padding:1.25rem; position:sticky; top:1rem;">
<div style="text-align:center; margin-bottom:1rem;">
{% if is_own_profile %}
@@ -68,9 +69,9 @@
{% endif %}
{% endif %}
{% if employee.internal_number %}
<div style="display:flex; justify-content:space-between; gap:0.5rem;">
<div style="display:flex; justify-content:space-between; gap:0.5rem; align-items:center;">
<span style="color:var(--color-muted-foreground);">{% trans "Внутр." %}</span>
<span style="text-align:right;">{{ employee.internal_number }}</span>
<span style="text-align:right;">{% internal_number_cell employee %}</span>
</div>
{% endif %}
</div>
+1 -1
View File
@@ -74,7 +74,7 @@
</div>
<div>
<label style="display:block; font-size:0.8125rem; font-weight:500; margin-bottom:0.375rem;">{% trans "Телефон" %}</label>
<input type="text" name="candidate_phone" placeholder="+380..." class="input" style="width:100%;">
<input type="tel" name="candidate_phone" class="input js-phone" inputmode="tel" autocomplete="tel" placeholder="+380 (__) ___-__-__" style="width:100%;">
</div>
</div>
</div>
+27
View File
@@ -0,0 +1,27 @@
{% load i18n %}
{% if not employee.internal_number %}
<span style="color:var(--color-muted-foreground);">—</span>
{% else %}
<span style="display:inline-flex; align-items:center; gap:0.35rem; flex-wrap:wrap;">
{% if can_call %}
<button type="button"
class="btn btn-ghost"
style="padding:0.125rem 0.375rem; font-size:0.8125rem; font-weight:600;"
title="{% trans 'Позвонить на внутренний' %}"
hx-post="{% url 'telephony_call' %}"
hx-vals='{"employee_id": "{{ employee.pk }}"}'
hx-swap="none"
hx-indicator="#loader"
onclick="event.stopPropagation();">
{{ employee.internal_number }}
</button>
{% else %}
<span>{{ employee.internal_number }}</span>
{% endif %}
{% if employee.internal_line_type == 'sip' %}
<span class="badge badge-muted" title="SIP">SIP</span>
{% else %}
<span class="badge badge-muted" title="{% trans 'Обычная телефония' %}">{% trans "АТС" %}</span>
{% endif %}
</span>
{% endif %}