diff --git a/projects/social_platform/src/app/domain/program/program-management.model.ts b/projects/social_platform/src/app/domain/program/program-management.model.ts index 913dd1d5a..a08af1b82 100644 --- a/projects/social_platform/src/app/domain/program/program-management.model.ts +++ b/projects/social_platform/src/app/domain/program/program-management.model.ts @@ -149,10 +149,19 @@ export interface ManagementSelection { projects?: ManagementSelectionProject[]; } export interface ParticipantRemovalPreview { + confirmationVersion: 2; previewToken: string; participantCount: number; applications: { id: number; projectId: number; name: string; submitted: boolean }[]; assignmentsCount: number; + teamChanges: { + id: number; + projectId: number; + name: string; + submitted: boolean; + members: { id: number; name: string }[]; + invitationsCount: number; + }[]; } export interface ManagementSettingsWrite { expectedUpdatedAt: string; diff --git a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts index 6639e0e2e..72ec267e0 100644 --- a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts +++ b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.spec.ts @@ -141,11 +141,22 @@ describe("Контракт HTTP панели организатора", () => { .previewParticipantRemoval(4, [1, 21]) .subscribe(result => expect(result.previewToken).toBe("proof")); const preview = http.expectOne(r => r.url.endsWith("/remove-preview/")); - preview.flush({ preview_token: "proof", participant_count: 2, applications: [] }); + preview.flush({ + confirmation_version: 2, + preview_token: "proof", + participant_count: 2, + applications: [], + team_changes: [], + assignments_count: 0, + }); const failed = vi.fn(); adapter.removeParticipants(4, [1, 21], "proof").subscribe({ error: failed }); const removal = http.expectOne(r => r.url.endsWith("/participants/remove/")); - expect(removal.request.body).toEqual({ ids: [1, 21], preview_token: "proof" }); + expect(removal.request.body).toEqual({ + ids: [1, 21], + preview_token: "proof", + confirmation_version: 2, + }); removal.flush({ detail: "Изменено" }, { status: 409, statusText: "Conflict" }); expect(failed).toHaveBeenCalledOnce(); http.expectNone(r => r.url.endsWith("/participants/remove/")); diff --git a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts index ab7aeaba7..dd1399048 100644 --- a/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts +++ b/projects/social_platform/src/app/infrastructure/adapters/program/program-management-http.adapter.ts @@ -88,6 +88,7 @@ export class ProgramManagementHttpAdapter implements ProgramManagementRepository return this.api.post<{ removed: number }>(`${this.root(id)}/participants/remove/`, { ids, previewToken, + confirmationVersion: 2, }); } private participantParams(q: ManagementQuery): HttpParams { diff --git a/projects/social_platform/src/app/ui/pages/program/management/management.component.html b/projects/social_platform/src/app/ui/pages/program/management/management.component.html index 90b9d56c5..f5c265514 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/management.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/management.component.html @@ -866,7 +866,36 @@
Участников: {{ removal.preview.participantCount }}. Аккаунты на платформе сохранятся.
-Участники останутся в командах проектов на платформе.
++ Участники будут удалены из команд проектов-заявок этой программы. Команды исходных проектов + на платформе сохранятся. +
+ @if (removal.preview.teamChanges.length) { ++ Удаляем из команды: + @for (member of change.members; track member.id; let last = $last) { + {{ member.name }}{{ last ? "" : ", " }} + } +
+ } + @if (change.invitationsCount) { +Приглашений в заявку к отзыву: {{ change.invitationsCount }}.
+ } + @if (change.submitted) { +Заявка уже сдана. Сохраненные оценки не изменятся.
+ } +