From 004050c0ff67fd5de12e6fc643fc94a351f98de7 Mon Sep 17 00:00:00 2001 From: Hermes Date: Fri, 25 Sep 2026 16:16:43 +0200 Subject: [PATCH] =?UTF-8?q?fix(autocall):=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE?= =?UTF-8?q?=D1=87=D0=BA=D0=B0=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D1=80=D0=B5=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=B4=D0=B5=D0=BD=D1=8C=20=D1=81=D0=BB=D0=BE=D1=82?= =?UTF-8?q?=D0=B0,=20=D0=B0=20=D0=BD=D0=B5=20=C2=AB=D0=B7=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D1=80=D0=B0=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Цифра дня у робота (dtmf_day) — это не «завтра», а первый рабочий день окна: звонок в пятницу предлагает понедельник, а суббота выходная. Карточка писала «завтра, вторая половина дня» при согласованном 28.09 — менеджер видел день, которого в окне нет. Слот собирает общая функция components/orders/autocallSlot.js: дата из строки лога (chosen_date), для старых строк — дата заказа, если слот согласовал этот звонок. Если даты нет — показываем только половину дня, ничего не выдумывая. Подключено в карточке заказа, вкладке «Автодозвон» и панели тест-звонка. Есть юнит-тесты (5 кейсов). --- .../admin/autocall/AutocallChannelTab.jsx | 15 ++---- .../admin/autocall/TestCallPanel.jsx | 12 ++--- src/components/orders/AutocallSlot.test.js | 38 +++++++++++++++ src/components/orders/AutocallStatusCard.jsx | 19 ++------ src/components/orders/autocallSlot.js | 46 +++++++++++++++++++ 5 files changed, 95 insertions(+), 35 deletions(-) create mode 100644 src/components/orders/AutocallSlot.test.js create mode 100644 src/components/orders/autocallSlot.js diff --git a/src/components/admin/autocall/AutocallChannelTab.jsx b/src/components/admin/autocall/AutocallChannelTab.jsx index 4571925..9b26481 100644 --- a/src/components/admin/autocall/AutocallChannelTab.jsx +++ b/src/components/admin/autocall/AutocallChannelTab.jsx @@ -12,6 +12,7 @@ import { useAuth } from "../../../context/AuthContext"; import { TestCallPanel } from "./TestCallPanel"; import { AutocallExclusionsPanel } from "./AutocallExclusionsPanel"; import { AutocallLocationsPanel } from "./AutocallLocationsPanel"; +import { autocallSlotText } from "../../orders/autocallSlot"; // ── Кампании звонков ───────────────────────────────────────────────────────── const CAMPAIGNS = [ @@ -33,9 +34,6 @@ const OUTCOME_META = { error: { label: "Ошибка", tone: "danger", icon: "⚠️" }, }; -const DAY_LABEL = { 1: "завтра", 2: "послезавтра" }; -const HALF_LABEL = { 1: "первая половина дня", 2: "вторая половина дня" }; - const fmtTime = (ts) => { if (!ts) return "—"; try { @@ -55,14 +53,9 @@ const fmtPhone = (phone) => { return phone; }; -const slotText = (l) => { - if (!l) return null; - const day = DAY_LABEL[l.dtmf_day]; - const half = HALF_LABEL[l.dtmf_half]; - if (day && half) return `${day}, ${half}`; - if (day) return day; - return null; -}; +// Слот — общей функцией из карточки заказа: она показывает реальную дату, +// а не «завтра» (цифра дня — это первый рабочий день окна, а не завтрашний день). +const slotText = (l) => autocallSlotText(l, null); const SettingField = ({ label, value, onChange, hint }) => (