feat: предзаполнение «Куда» в ТМЦ, разморозка 1С, readOnly «Отдел»
Tests / frontend-test (push) Successful in 1m16s

- СЗ на перемещение ТМЦ: поле «Куда» предзаполняется проектом-получателем
  по строке-источнику Dataverse (cree9_demandline -> lzk position -> LZK ->
  project id), см. shared/dataverse/lzkPosition.service.ts
- Заявка 1С досрочно разморожена для всех пользователей (UNFROZEN_FORMS
  в SubmitActions), остальные формы остаются замороженными
- Поле «Отдел» в заявке 1С сделано read-only

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Тимур Городецкий
2026-09-23 11:07:54 +05:00
parent f6dcf349e9
commit 98226e4753
6 changed files with 173 additions and 4 deletions
@@ -19,9 +19,19 @@ import { isCurrentUserTester } from './testerGroupAccess';
*/
const SUBMISSION_FROZEN = true;
/**
* Формы, для которых заморозка снята досрочно (для всех пользователей, не
* только тестировщиков) — id передаётся через проп formId. Пример: заявка 1С
* разморожена 2026-09-22 по просьбе Тимура Городецкого, остальные формы
* остаются замороженными.
*/
const UNFROZEN_FORMS = new Set<string>(['ticket1c']);
export interface ISubmitActionsProps {
submit: IRequestSubmit;
isValid: boolean;
/** Идентификатор формы — используется, чтобы точечно снимать заморозку (см. UNFROZEN_FORMS). */
formId?: string;
/**
* Доп. условие для кнопки «Отправить», когда у отправки более строгие
* требования, чем у черновика (например, поля обязательные только при
@@ -46,6 +56,7 @@ export const SubmitActions: React.FC<ISubmitActionsProps> = ({
submit,
isValid,
submitValid,
formId,
readOnly,
onCancel,
onSaveDraft,
@@ -53,12 +64,13 @@ export const SubmitActions: React.FC<ISubmitActionsProps> = ({
submitLabel = 'Отправить на согласование',
}) => {
const { saving, kind } = submit;
const unfrozenForm = formId != null && UNFROZEN_FORMS.has(formId);
// false, пока не пришёл ответ о членстве в группе, — безопасный дефолт: не
// мигать разблокированными кнопками до подтверждения, что это тестировщик.
const [isTester, setIsTester] = React.useState<boolean>(false);
React.useEffect(() => {
if (!SUBMISSION_FROZEN) return;
if (!SUBMISSION_FROZEN || unfrozenForm) return;
let alive = true;
isCurrentUserTester()
.then((v) => {
@@ -68,9 +80,9 @@ export const SubmitActions: React.FC<ISubmitActionsProps> = ({
return () => {
alive = false;
};
}, []);
}, [unfrozenForm]);
const frozen = SUBMISSION_FROZEN && !isTester;
const frozen = SUBMISSION_FROZEN && !unfrozenForm && !isTester;
const locked = saving || readOnly || frozen;
const canSubmit = submitValid ?? isValid;