TU Statistics

TU Statistics

src/features/statistics/tu/ — таблиця помісячної статистики заробітку TU всередині поточної Family: golden, prime, chathouse, udate.

Суть

Екран показує зріз по TU за обраний місяць.

  • один рядок = одна TU;
  • лівий блок містить службову інформацію по TU;
  • правий блок містить денні значення за днями місяця;
  • останній рядок без активного пошуку — TOTAL по всіх показаних TU.

Таблиця рендериться у віртуалізованому режимі на всіх доступах цієї вкладки: у DOM одночасно присутні тільки видимі рядки та невеликий overscan.

Use cases

  • director аналізує всю Family або будь-який доступний зріз: усі TU, TU конкретного CM, конкретного teamlead, top-manager-а або teamlead-а всередині top-manager-а.
  • top_manager дивиться свій scope TU з опційним звуженням по CM і teamlead-у.
  • team_lead дивиться TU власної команди за місяць.
  • client_manager дивиться власних TU або звужує вибірку до конкретного teamlead-а у своєму scope.

Toolbar

КонтролЩо робитьДе є
LevelКлієнтський фільтр по рівню TU: All, Low, Mid, Top, New. Застосовується до нової API-відповіді під час наступного GNR; сама зміна селекта не перебудовує поточну таблицю.усі ролі
MonthВибір місяця у форматі MMMM yyyy. Не дозволяє обирати майбутні місяці.усі ролі
CMВибір client manager-а. У списку є службові варіанти None, а для частини сценаріїв також Free.director, top_manager
RoleПеремикає директорський зріз: None, Teamlead, TOP-manager.director
UserСписок активних користувачів за обраною роллю і місяцем.director
TeamСписок teamlead-ів у межах поточного зрізу. У top_manager і director-режимі TOP-manager є All, у client_managerNone.director, top_manager, client_manager
GNRВиконує API-запит за поточними фільтрами і перераховує таблицю.усі ролі

Додатково:

  • зміна Month безумовно повертає всі залежні non-default селекти до початкових значень;
  • зміна Month не запускає запит автоматично: попередній результат лишається в таблиці до натискання GNR;
  • у director кнопка GNR блокується, якщо для поточного Role ще не обраний обов’язковий User;
  • dropdown-и завантажують список опцій асинхронно тільки при відкритті;
  • успішний GNR прокручує viewport на початок і очищає пошук та виділення клітинок.

Що бачимо

Ліва фіксована частина таблиці:

  • Name
  • ID або ID / ULID
  • Level
  • All $

Права частина:

  • колонки днів місяця 1..28/29/30/31;
  • ширина таблиці закінчується на останньому дні поточного місяця;
  • горизонтальний скрол доступний тільки в шапці блоку днів і синхронізує позицію з тілом таблиці.

По рядках:

  • Name показує аватар і ім’я TU;
  • ID показує ladyId, а для udate може перемикатися на ulid;
  • Level показує нормалізований рівень TU;
  • All $ у рядку показує total з API-відповіді;
  • для майбутніх днів значення не малюються;
  • коли пошук порожній, внизу додається рядок TOTAL із сумами по колонках і загальним місячним підсумком.

Після GNR рядки групуються в порядку статусів nonegrayred, а всередині кожної групи сортуються за місячною сумою від більшої до меншої.

TOTAL і копіювання All $ перераховують суму з денних значень. API-поле total очікується узгодженим із цією сумою; інакше значення в рядку може відрізнятися від скопійованого.

Взаємодії

Пошук

  • поле пошуку знаходиться в колонці Name;
  • фільтрує локально по name і ladyId;
  • зміна пошуку очищає поточне виділення клітинок;
  • до першого GNR і при порожньому результаті показується The statistics result is empty. Check the selected criteria.

Копіювання колонок

У шапці доступне копіювання в буфер:

  • Name
  • ID
  • ULID для udate
  • All $

Копіюються значення поточного відфільтрованого списку у видимому порядку, по одному значенню на рядок. Для Name до імені додається nickname, якщо він є. Після успішного копіювання UI показує success-notification.

Виділення клітинок

  • виділяються тільки денні клітинки правого блоку;
  • підтримується клік і drag-selection по кількох клітинках;
  • суміжні клітинки зливаються в один візуальний selection-блок із синіми border-ами;
  • біля останньої виділеної клітинки з’являється floating popup із сумою вибраного діапазону;
  • Escape очищає виділення.

Hover і прокрутка

  • hover на рядку синхронно підсвічує ліву та праву частини;
  • вертикальний скрол відбувається всередині viewport таблиці;
  • горизонтальний скрол у body вимкнений, джерелом горизонтальної навігації є header днів.

Стани і візуальні маркери

СтанДаніВідображення
noneактивна TU у межах поточного зрізустандартний білий рядок / клітинка
grayTU не належала поточному зрізу в цей день або вже поза нимсірий фон
redTU заблокованачервоний фон

Для udate є додатковий маркер wasActions: поверх денної клітинки малюється горизонтальна лінія, якщо у цей день були дії.

Loading, empty та error-стани

  • Таблиця не робить автоматичного запиту при відкритті; дані з’являються після GNR.
  • На час запиту використовується global loader, а помилки показуються через global notification.
  • До першого GNR і після порожньої відповіді показується The statistics result is empty. Check the selected criteria.
  • Невдалий повторний запит не очищає попередній успішний результат.
  • Успішний GNR скидає локальний пошук, selection і позицію вертикального viewport.

Доступи

РольFrontend routeБазовий зрізДодаткові звуження
director/ceo/<family-route>/tu_statisticsвся FamilyCM, Role, User, Team
top_manager/top_manager/<family-route>/tu_statisticsTU свого top-manager scopeCM, Team
team_lead/teamlead/<family-route>/tu_statisticsTU власної командитільки Level, Month
client_manager/client_manager/<family-route>/tu_statisticsTU власного CM scopeTeam

<family-route> дорівнює golden, udate, chathouse або talkytimes для Family prime.

operator, hr_manager, recruiter, technical_department доступу до цієї вкладки не мають.

Деталі по ролях

director

Має три режими:

  • Role = None + CM = None → усі TU Family;
  • Role = None + вибраний CM → TU конкретного client manager-а;
  • Role = Teamlead → TU конкретного teamlead-а, опційно в межах конкретного CM;
  • Role = TOP-manager → TU top-manager-а, опційно в межах CM і з додатковим Team = All або конкретний teamlead.

top_manager

  • стартовий scope — поточний top-manager;
  • CM опційний;
  • Team має All або конкретного teamlead-а;
  • використовується один і той самий табличний UI, що й для інших ролей.

team_lead

  • зріз завжди будується по familyId поточного teamlead-а;
  • селектів користувачів або teamlead-ів немає;
  • таблиця також повністю віртуалізована.

client_manager

  • без вибору Team показуються всі TU поточного client manager-а;
  • при виборі Team зріз звужується до конкретного teamlead-а в межах поточного CM;
  • службове значення за замовчуванням — None.

Family-specific

FamilyОсобливості
goldenстандартний режим таблиці
primeвикористовує той самий UI, у коді Family alias talkytimes -> prime
chathouseстандартний режим таблиці; для team_lead використовується окремий page-style варіант без зміни бізнес-логіки
udateперемикач ID / ULID, копіювання залежить від вибраного режиму, денні клітинки можуть мати маркер wasActions

API зрізи

Контракти беремо з swagger. Для golden див. Statistics V2. Для інших Family UI використовує ті самі зрізи з family-specific префіксом у route.

Зрізgoldenprimeudatechathouse
усі TUPOST /golden/statistics/v2/ladiesPOST /prime/statistics/v2/ladiesPOST /statisticsUdate/v2/ladiesPOST /chathouse/statistics/v2/ladies
по client managerPOST /golden/statistics/v2/client-manager-ladiesPOST /prime/statistics/v2/client-manager-ladiesPOST /statisticsUdate/v2/client-manager-ladiesPOST /chathouse/statistics/v2/client-manager-ladies
по teamleadPOST /golden/statistics/v2/supervisor-ladiesPOST /prime/statistics/v2/supervisor-ladiesPOST /statisticsUdate/v2/supervisor-ladiesPOST /chathouse/statistics/v2/supervisor-ladies
по CM + teamleadPOST /golden/statistics/v2/client-manager-supervisors-ladiesPOST /prime/statistics/v2/client-manager-supervisors-ladiesPOST /statisticsUdate/v2/client-manager-supervisors-ladiesPOST /chathouse/statistics/v2/client-manager-supervisors-ladies
по top-manager + teamleadPOST /golden/statistics/v2/top-supervisors-ladiesPOST /prime/statistics/v2/top-supervisors-ladiesPOST /statisticsUdate/v2/top-supervisors-ladiesPOST /chathouse/statistics/v2/top-supervisors-ladies

Зв’язки

  • TU Profiles — базова вкладка з переліком TU цієї Family
  • operator-statistics — суміжний статистичний екран для операторів
  • Списки фільтрів завантажуються через POST /clientManager/getCMsByMonth, POST /supervisor/getSupervisorsByMonth і POST /top-manager/getTopsByMonth.
  • TODO: додати перевірені operation deeplink-и для не-Golden statistics slices і selector endpoints.