Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/23
Заявка на бетон (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) - «Создать на основе»: нет