fix: организация в заявке на рабочее место больше не предзаполняется
Подставлялась организация инициатора, а не нового сотрудника — её приходилось исправлять. Теперь поле пустое и выбирается вручную, обязательность сохранена. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -43,7 +43,6 @@ import {
|
||||
IAttachmentInfo
|
||||
} from '../../shared/attachments/attachments.service';
|
||||
import { effectiveUserEmail } from '../../shared/impersonation';
|
||||
import { getEmployeeOrganizations, employeeCompanies } from '../../shared/dictionary';
|
||||
import { friendlyErrorMessage } from '../../shared/diagnostics';
|
||||
import { IRequestFormProps } from '../../models/types';
|
||||
import {
|
||||
@@ -141,8 +140,7 @@ const WorkplaceSetupForm: React.FC<IRequestFormProps> = ({
|
||||
loadHirePrefill(sourceId)
|
||||
.then((prefilled) => {
|
||||
if (alive) {
|
||||
// Merge, а не replace: организация заявителя (ниже) резолвится отдельным
|
||||
// эффектом и могла успеть записаться раньше — не затираем её.
|
||||
// Merge, а не replace: пользователь мог успеть что-то ввести до ответа.
|
||||
setData((prev) => ({ ...prev, ...prefilled }));
|
||||
setSourceHire((prev) => (prev ? { ...prev, candidateName: prefilled.FullName } : prev));
|
||||
}
|
||||
@@ -163,33 +161,6 @@ const WorkplaceSetupForm: React.FC<IRequestFormProps> = ({
|
||||
const approval = useMemo(() => workplaceApprovalService(editListId), [editListId]);
|
||||
const userEmail = effectiveUserEmail(context);
|
||||
|
||||
// Организации заявителя (Employee/ByEmail) — форма не о самом заявителе, а о
|
||||
// новом сотруднике (FullName — обычный текст, предзаполняется из «Заявки на
|
||||
// прием», и его чаще всего ещё нет в системе кадров), поэтому организация
|
||||
// тянется по ТЕКУЩЕМУ пользователю. Это только предложение: поле дальше
|
||||
// редактируется вручную. На редактировании уже сохранённое значение не перезатираем.
|
||||
useEffect(() => {
|
||||
if (editId || !userEmail) {
|
||||
return;
|
||||
}
|
||||
let alive = true;
|
||||
getEmployeeOrganizations(context, userEmail)
|
||||
.then((records) => {
|
||||
if (alive) {
|
||||
setData((prev) => ({
|
||||
...prev,
|
||||
Companies: prev.Companies.length > 0 ? prev.Companies : employeeCompanies(records)
|
||||
}));
|
||||
}
|
||||
})
|
||||
.catch(() => undefined);
|
||||
return () => {
|
||||
alive = false;
|
||||
};
|
||||
// context — единственный экземпляр WebPartContext на всё время жизни
|
||||
// веб-части, так что перезапуска эффекта эта зависимость не добавляет.
|
||||
}, [editId, userEmail, context]);
|
||||
|
||||
// pageUrl формы (requestType.id совпадает с ним по конвенции портала, см.
|
||||
// data/requests.ts) → числовой RequestTypeId, нужный approval-route API.
|
||||
const requestTypeIdState = useRequestTypeId(context, requestType.id);
|
||||
|
||||
@@ -41,8 +41,8 @@ export interface IFormData {
|
||||
StartDate: string;
|
||||
/**
|
||||
* Организации заявителя — мультивыбор из справочника (CompanyPickerMulti).
|
||||
* Предзаполняется из Employee/ByEmail по e-mail заявителя (не нового
|
||||
* сотрудника — его ещё нет в системе кадров), дальше редактируется вручную.
|
||||
* Не предзаполняется (решение Тимура 2026-10-07: организация инициатора
|
||||
* подставлялась не та) — выбирается вручную.
|
||||
* В SP хранится JSON-ом в колонке WorkplaceCompaniesJson (см. submit.ts).
|
||||
*/
|
||||
Companies: ICompany[];
|
||||
|
||||
Reference in New Issue
Block a user