Files
request-portal/src/webparts/requestPortal/forms/ConcreteRequest
gorbenko.pavel 637e51d7f9
Tests / frontend-test (push) Successful in 1m24s
Feature/vacation edo signing (#23)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/23
2026-10-05 08:53:18 +00:00
..
2026-10-05 08:53:18 +00:00

Заявка на бетон (wh-concrete-request)

Назначение: заявка участка строительства на поставку бетонной смеси. Бумажный первоисточник — «Заявка на поставку бетонной смеси» (таблица позиций + подписи начальника и мастера участка). Категория: Склад / Снабжение Списки SP: «Заявка на бетон — данные» / «Заявка на бетон — согласование» RequestTypeId (внешний API маршрутов): не хардкодится — резолвится в рантайме по pageUrl («wh-concrete-request») через useRequestTypeId (см. «Формы больше не хардкодят RequestTypeId» в docs/forms.md). Тип и маршрут нужно завести в админке approval-route — на момент написания роль согласующего ещё не определена заказчиком (один шаг, но кто именно — уточняется).

Маршрут

  • Фазы: только согласование. Фазы исполнения нет — после согласования заявка получает статус «Согласовано» (как «Заявка на отпуск»).
  • Матрица редактируема заявителем при новой заявке / черновике / возврате: useMatrixEditor(editable = !readOnly).
  • Маршрут резолвится по e-mail начальника участка (SiteChiefEmail — «Составил» на бумаге), не мастера участка, и по проекту (ProjectId) — в админке approval-route для этого типа заявки настроено условие ByProject, поэтому getPlannedMatrix(...) вызывается с projectId седьмым аргументом (тот же приём, что у «СЗ на перемещение ТМЦ» с SourceProjectId). Пока проект не выбран, planned-resolve вернул бы 404 — матрица не грузится (matrixReady), вместо неё показывается заглушка (ApprovalMatrix waiting).

Особое поведение

  • Два подписанта с одной стороны, без «Согласовано» от другого лица на бумаге: «Начальник участка» (SiteChiefEmail/SiteChiefName, People-picker, по умолчанию текущий пользователь, резолвит маршрут) и «Мастер участка» (ForemanEmail/ForemanName, People-picker) — чисто информационное поле для печати, на маршрут не влияет.
  • Email/ФИО хранятся как обычный текст (не колонки типа User) — тот же приём, что у «СЗ на перемещение ТМЦ» (RequesterEmail/AuthorName): участники не обязаны быть штатными сотрудниками с полной карточкой в SharePoint.
  • Автоподстановка организации (Organization, read-only, OrganizationField) — из Employee/ByEmail при выборе начальника участка, сотрудник может состоять сразу в нескольких организациях (печать — как у «Заявки на отпуск», PrintSplitButton/OrgLetterhead).
  • Проект (Project/ProjectId, ProjectPicker, обязателен) — ОДИН на всю заявку, выбирается в шапке (HeaderSection), а не на каждую позицию: раньше был в табличной части, но перенесён в шапку, потому что от него зависит маршрут согласования (см. «Маршрут» выше) — дублировать его по позициям незачем, все позиции заявки относятся к одному проекту.
  • Табличная часть (ItemsEditor, сериализуется в ItemsJson) — карточка на каждую поставку: класс/марка смеси и характеристика (mixClass), количество в м³ (volume), подвижность (workability, фиксированный набор П1–П5), время (time, свободный текст) и примечание (note). Проекта в позиции больше нет (см. выше). Не переиспользует общий shared/ui/ItemsTable (тот заточен под номенклатуру ТМЦ — наименование/инв. номер/ед.изм/кол-во) — набор колонок здесь другой, поэтому у формы свой редактор. Карточки (FormGrid/FormField), а не строки плоской таблицы — адаптивнее на мобильных, чем строка с горизонтальным скроллом.
  • Заголовок элемента (Title): Заявка на бетон — {ФИО начальника участка} — дд.мм.гггг.

Секции формы

HeaderSection (дата поставки · начальник участка · организация (read-only) · проект · мастер участка) + ItemsEditor (табличная часть поставок)

Точки входа

  • rptype: wh-concrete-request
  • Режим согласующего (просмотр): есть (ConcreteRequestView)
  • «Создать на основе»: нет