From b98a88897997defa76448a8a0a546d0708c7a66f Mon Sep 17 00:00:00 2001 From: "gorbenko.pavel" Date: Wed, 2 Sep 2026 09:58:12 +0500 Subject: [PATCH] =?UTF-8?q?refactor(ServiceRequest):=20=D1=83=D0=B1=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=C2=AB=D0=A0=D0=B5=D0=B2=D0=B8=D0=B7=D0=B8?= =?UTF-8?q?=D1=8F=C2=BB,=20=C2=AB=D0=9E=D1=82=D0=B4=D0=B5=D0=BB=C2=BB=20->?= =?UTF-8?q?=20=C2=AB=D0=9F=D0=BE=D0=B4=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=C2=BB=20=D0=B8=D0=B7=20=D1=81=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Поле «Ревизия» — из бумажной формы, в электронной не нужно (нет параллельных версий заявки, при возврате на доработку правится тот же элемент). Убрано из модели, манифеста и load.ts. «Отдел» переименован в «Подразделение» (заголовок общего столбца сайта Department — у большинства форм он уже так называется) и теперь, как организация и должность, подставляется из карточки заявителя (Employee/ByEmail.section/departmentId) при выборе/загрузке — а не только вручную через DepartmentPicker. Co-Authored-By: Claude Opus 5 --- .../forms/ServiceRequest/ServiceRequestForm.tsx | 13 ++++++++++--- .../requestPortal/forms/ServiceRequest/load.ts | 2 -- .../requestPortal/forms/ServiceRequest/model.ts | 13 ++++++------- .../forms/ServiceRequest/provisioning.json | 5 ++--- .../forms/ServiceRequest/sections/HeaderSection.tsx | 10 +--------- 5 files changed, 19 insertions(+), 24 deletions(-) diff --git a/src/webparts/requestPortal/forms/ServiceRequest/ServiceRequestForm.tsx b/src/webparts/requestPortal/forms/ServiceRequest/ServiceRequestForm.tsx index a4e1e73..21ccd82 100644 --- a/src/webparts/requestPortal/forms/ServiceRequest/ServiceRequestForm.tsx +++ b/src/webparts/requestPortal/forms/ServiceRequest/ServiceRequestForm.tsx @@ -91,7 +91,10 @@ const ServiceRequestForm: React.FC = ({ RequesterName: user.displayName || '', RequestDate: prev.RequestDate || today })); - // Организации/должность заявителя (Employee/ByEmail) — как в TmcTransfer. + // Организации/должность/подразделение заявителя (Employee/ByEmail) — как в + // TmcTransfer. Подразделение — только ПРЕДЛАГАЕТСЯ (prev.Department || …), + // как и должность: справочник не всегда точен, дальше поле остаётся + // редактируемым через DepartmentPicker. let alive = true; getEmployeeOrganizations(context, requesterEmail) .then((records) => { @@ -99,7 +102,9 @@ const ServiceRequestForm: React.FC = ({ setData((prev) => ({ ...prev, Organization: formatEmployeeOrganizations(records), - RequesterJobTitle: prev.RequesterJobTitle || records[0]?.position || '' + RequesterJobTitle: prev.RequesterJobTitle || records[0]?.position || '', + Department: prev.Department || records[0]?.section || '', + DepartmentId: prev.DepartmentId || records[0]?.departmentId || '' })); } }) @@ -109,7 +114,7 @@ const ServiceRequestForm: React.FC = ({ }; }, [editId, context]); - // Выбор другого заявителя подтягивает его ФИО, должность и организации. + // Выбор другого заявителя подтягивает его ФИО, должность, подразделение и организации. const handleRequesterChange = (login: string): void => { setData((prev) => ({ ...prev, RequesterEmail: login })); if (!login) { @@ -122,6 +127,8 @@ const ServiceRequestForm: React.FC = ({ ...prev, RequesterName: records[0]?.fio || prev.RequesterName, RequesterJobTitle: records[0]?.position || prev.RequesterJobTitle, + Department: records[0]?.section || prev.Department, + DepartmentId: records[0]?.departmentId || prev.DepartmentId, Organization: formatEmployeeOrganizations(records) })) ) diff --git a/src/webparts/requestPortal/forms/ServiceRequest/load.ts b/src/webparts/requestPortal/forms/ServiceRequest/load.ts index 7d172ce..de097e2 100644 --- a/src/webparts/requestPortal/forms/ServiceRequest/load.ts +++ b/src/webparts/requestPortal/forms/ServiceRequest/load.ts @@ -20,7 +20,6 @@ const SELECT_FIELDS = [ 'Department', 'DepartmentId', 'RequestDate', - 'Revision', 'ProjectName', 'ProjectId', 'ProjectManager', @@ -81,7 +80,6 @@ export async function loadServiceRequest(itemId: number, listId?: string): Promi Department: (item.Department as string) || '', DepartmentId: (item.DepartmentId as string) || '', RequestDate: toDateInput(item.RequestDate), - Revision: (item.Revision as string) || '', ProjectName: (item.ProjectName as string) || '', ProjectId: (item.ProjectId as string) || '', ProjectManager: (item.ProjectManager as string) || '', diff --git a/src/webparts/requestPortal/forms/ServiceRequest/model.ts b/src/webparts/requestPortal/forms/ServiceRequest/model.ts index 76edf35..a2320df 100644 --- a/src/webparts/requestPortal/forms/ServiceRequest/model.ts +++ b/src/webparts/requestPortal/forms/ServiceRequest/model.ts @@ -95,14 +95,16 @@ export interface IFormData { RequesterJobTitle: string; /** Организации заявителя (`\n`-joined «Компания — должность»), read-only. */ Organization: string; - /** Отдел (справочник Dictionary/Departments) — на маршрут не влияет. */ + /** + * Подразделение заявителя. Подставляется из его карточки (Employee/ByEmail), + * дальше правится выбором из справочника Dictionary/Departments. На маршрут + * согласования не влияет — он резолвится по проекту. + */ Department: string; - /** Id отдела из справочника; '' — если введён вручную. */ + /** Id подразделения из справочника; '' — если введено вручную. */ DepartmentId: string; /** Дата заявки (YYYY-MM-DD). */ RequestDate: string; - /** Ревизия заявки: бумажная форма живёт ревизиями (00, U01, U02…). */ - Revision: string; // --- Проект и работы --- ProjectName: string; @@ -182,8 +184,6 @@ export interface ISectionProps { onRemoveAnnexFile?: (rowIndex: number) => void; } -/** Ревизия по умолчанию — как в бумажной форме («Рев:00»). */ -export const DEFAULT_REVISION = '00'; export const REQUESTER_PLACEHOLDER = 'Начните вводить Ф.И.О. заявителя…'; export const EMPTY_DATA: IFormData = { @@ -194,7 +194,6 @@ export const EMPTY_DATA: IFormData = { Department: '', DepartmentId: '', RequestDate: '', - Revision: DEFAULT_REVISION, ProjectName: '', ProjectId: '', ProjectManager: '', diff --git a/src/webparts/requestPortal/forms/ServiceRequest/provisioning.json b/src/webparts/requestPortal/forms/ServiceRequest/provisioning.json index 6d77ce3..634576c 100644 --- a/src/webparts/requestPortal/forms/ServiceRequest/provisioning.json +++ b/src/webparts/requestPortal/forms/ServiceRequest/provisioning.json @@ -8,10 +8,9 @@ { "internalName": "RequesterName", "title": "Заявитель (Ф.И.О.)", "type": "Text" }, { "internalName": "RequesterJobTitle", "title": "Должность заявителя", "type": "Text" }, { "internalName": "Organization", "title": "Организация", "type": "Note" }, - { "internalName": "Department", "title": "Отдел", "type": "Text" }, - { "internalName": "DepartmentId", "title": "Id отдела (справочник)", "type": "Text" }, + { "internalName": "Department", "title": "Подразделение", "type": "Text" }, + { "internalName": "DepartmentId", "title": "Id подразделения (справочник)", "type": "Text" }, { "internalName": "RequestDate", "title": "Дата заявки", "type": "DateTime", "dateOnly": true }, - { "internalName": "Revision", "title": "Ревизия", "type": "Text" }, { "internalName": "ProjectName", "title": "Проект", "type": "Text" }, { "internalName": "ProjectId", "title": "Id проекта", "type": "Text" }, diff --git a/src/webparts/requestPortal/forms/ServiceRequest/sections/HeaderSection.tsx b/src/webparts/requestPortal/forms/ServiceRequest/sections/HeaderSection.tsx index 22617ab..ab69234 100644 --- a/src/webparts/requestPortal/forms/ServiceRequest/sections/HeaderSection.tsx +++ b/src/webparts/requestPortal/forms/ServiceRequest/sections/HeaderSection.tsx @@ -47,7 +47,7 @@ export const HeaderSection: React.FC = ({ placeholder="Напр. вед. инженер ПТО" /> - + = ({ onChange={(v) => set('RequestDate', v)} /> - - set('Revision', v)} - placeholder="00" - /> -