From ab1fb775d9b342f5cf70f545a47e4946824c115c Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 09:04:24 +0100 Subject: [PATCH 01/13] motion submitter addition --- .../motion-repository.service/motion-repository.service.ts | 2 +- .../components/motion-form/motion-form.component.ts | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts index e932e63fd3..5275abc8f4 100644 --- a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts +++ b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts @@ -320,7 +320,7 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont title: partialMotion.title, text: partialMotion.text, origin_id: partialMotion.origin_id, - submitter_ids: partialMotion.submitter_ids, + submitter_meeting_user_ids: partialMotion.submitter_ids, additional_submitter: partialMotion.additional_submitter, workflow_id: partialMotion.workflow_id, category_id: partialMotion.category_id, diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts index 6f1f8f5cbf..327c074fcb 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts @@ -251,6 +251,9 @@ export class MotionFormComponent extends BaseMeetingComponent implements OnInit } if (this.newMotion) { + if (update.submitter_ids.length === 0 && this.operator.isInMeeting(this.activeMeetingId)) { + update.submitter_ids = [this.operator.user.getMeetingUser(this.activeMeetingId).id]; + } for (const key in update) { if (update[key] === null || update[key].length === 0) { delete update[key]; @@ -323,7 +326,7 @@ export class MotionFormComponent extends BaseMeetingComponent implements OnInit public async createNewSubmitter(username: string): Promise { const newUserObj = await this.createNewUser(username); - this.addNewUserToFormCtrl(newUserObj, `submitter_ids`); + this.addNewUserToFormCtrl(newUserObj, `submitter_meeting_user_ids`); } public async createNewSupporter(username: string): Promise { From 8723f1770dfa4564b4c147d2170fafbcb7d0f64e Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 10:32:34 +0100 Subject: [PATCH 02/13] Hide favourite button --- .../motion-manage-title/motion-manage-title.component.html | 2 +- .../motion-manage-title/motion-manage-title.component.ts | 3 +++ .../components/motion-view/motion-view.component.html | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.html b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.html index a3164173fc..52f2e0560e 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.html +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.html @@ -27,7 +27,7 @@ mat-icon-button matTooltip="{{ 'Mark as personal favorite' | translate }}" matTooltipPosition="right" - [hidden]="publicAccess" + [hidden]="publicAccess || isnotPartOfMeeting" (click)="setFavorite(!isFavorite)" > {{ isFavorite ? 'star' : 'star_border' }} diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.ts b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.ts index 20675d86b5..1d9af0c78a 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.ts +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-manage-title/motion-manage-title.component.ts @@ -35,6 +35,9 @@ export class MotionManageTitleComponent extends BaseMotionDetailChildComponent { @Input() public publicAccess: boolean; + @Input() + public isnotPartOfMeeting: boolean; + @Output() public updateCrMode = new EventEmitter(); diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-view/motion-view.component.html b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-view/motion-view.component.html index 6bb25875cc..448c276bcc 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-view/motion-view.component.html +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-view/components/motion-view/motion-view.component.html @@ -137,6 +137,7 @@

Date: Tue, 23 Dec 2025 11:43:04 +0100 Subject: [PATCH 03/13] Prevent message send chat --- ...t-group-detail-message-form.component.html | 16 +++++++++-- ...hat-group-detail-message-form.component.ts | 27 ++++++++++++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html index 78bce4c142..49dfeeee34 100644 --- a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html +++ b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html @@ -1,4 +1,9 @@ - + @if (currentMessage) {
{{ 'Edit' | translate }} @@ -25,14 +30,21 @@ } + @if (!isPartOfMetting()) { + + + {{ 'You have to be part of the meeting to write messages.' | translate }} + + + } diff --git a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts index 6a8873c65a..6cc15a5c56 100644 --- a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts +++ b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts @@ -1,8 +1,12 @@ import { Component, EventEmitter, Input, Output } from '@angular/core'; import { UntypedFormBuilder, UntypedFormControl, Validators } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; +import { TranslateService } from '@ngx-translate/core'; import { CHAT_MESSAGE_MAX_LENGTH } from 'src/app/gateways/repositories/chat/chat-message-repository.service'; import { KeyCode } from 'src/app/infrastructure/utils/key-code'; import { ViewChatMessage } from 'src/app/site/pages/meetings/pages/chat'; +import { ActiveMeetingIdService } from 'src/app/site/pages/meetings/services/active-meeting-id.service'; +import { OperatorService } from 'src/app/site/services/operator.service'; @Component({ selector: `os-chat-group-detail-message-form`, @@ -37,7 +41,13 @@ export class ChatGroupDetailMessageFormComponent { private _currentMessage: ViewChatMessage | null = null; - public constructor(fb: UntypedFormBuilder) { + public constructor( + fb: UntypedFormBuilder, + private operator: OperatorService, + private activeMeetingIdService: ActiveMeetingIdService, + protected translate: TranslateService, + private snackBar: MatSnackBar + ) { this.messageForm = fb.control(``, [Validators.maxLength(CHAT_MESSAGE_MAX_LENGTH)]); } @@ -49,9 +59,14 @@ export class ChatGroupDetailMessageFormComponent { } public sendChatMessage(): void { - const content = this.messageForm.value?.trim() as string; - this.messageSent.emit(content); - this.resetMessageForm(); + if (!this.isPartOfMetting()) { + const infoMessage = this.translate.instant(`Action not possible. You have to be part of the meeting.`); + this.snackBar.open(infoMessage, this.translate.instant(`Ok`)); + } else { + const content = this.messageForm.value?.trim() as string; + this.messageSent.emit(content); + this.resetMessageForm(); + } } public cancelEditingChatMessage(): void { @@ -63,4 +78,8 @@ export class ChatGroupDetailMessageFormComponent { this.currentMessage = null; this.messageForm.markAsPristine(); } + + public isPartOfMetting(): boolean { + return this.operator.isInMeeting(this.activeMeetingIdService.meetingId); + } } From ad7e9cce1d7866cbe56a87fe93d0f3c12e214127 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 12:50:15 +0100 Subject: [PATCH 04/13] Change 'not present' message if not part of meeting --- .../account-button/account-button.component.html | 5 +++++ .../account-button/account-button.component.ts | 10 ++++++---- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html index d1c2b08a81..a23797ab43 100644 --- a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html +++ b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.html @@ -76,6 +76,11 @@ done {{ 'Present' | translate }}
+ } @else if (!isinMeeting) { +
+ clear + {{ 'Not part of meeting' | translate }} +
} @else {
clear diff --git a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.ts b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.ts index acf433c405..d6c0db1d67 100644 --- a/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.ts +++ b/client/src/app/site/modules/global-headbar/components/account-button/account-button.component.ts @@ -44,14 +44,16 @@ export class AccountButtonComponent extends BaseUiComponent implements OnInit { private _langTriggerSubscription: Subscription; + public get isinMeeting(): boolean { + return this.hasActiveMeeting && this.operator.isInMeeting(this.activeMeetingId) && !this.operator.isAnonymous; + } + public get isPresent(): boolean { - return this.hasActiveMeeting && this.operator.isInMeeting(this.activeMeetingId) && !this.operator.isAnonymous - ? this.user.isPresentInMeeting() - : false; + return this.isinMeeting && this.user.isPresentInMeeting(); } public get isAllowedSelfSetPresent(): boolean { - return this._isAllowedSelfSetPresent && this.operator.isInMeeting(this.activeMeetingId); + return this.isinMeeting && this._isAllowedSelfSetPresent; } public get hasActiveMeeting(): boolean { From e42a90b2159e2412bd4892ab3f10f9b3aa5de8f3 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 12:58:14 +0100 Subject: [PATCH 05/13] Change poll message --- .../components/base-poll-vote/base-poll-vote.component.html | 6 +++++- .../components/base-poll-vote/base-poll-vote.component.ts | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.html b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.html index 41c7f4c09a..7631b5c9ff 100644 --- a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.html +++ b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.html @@ -1,6 +1,10 @@ @if (poll && isReady) { - @if (isUserPresent) { + @if (!isUserInMeeting) { +
+ {{ 'You are not part of the meeting' | translate }} +
+ } @else if (isUserPresent) { } @else {
diff --git a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.ts b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.ts index 8cae3ca506..a4241c3f3e 100644 --- a/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.ts +++ b/client/src/app/site/pages/meetings/modules/poll/components/base-poll-vote/base-poll-vote.component.ts @@ -75,6 +75,10 @@ export abstract class BasePollVoteComponent e return this.user?.isPresentInMeeting(); } + public get isUserInMeeting(): boolean { + return this.user?.isInActiveMeeting; + } + public get isMobile(): boolean { return this.viewport.isMobile; } From e525eed917438395b2caa8a24de860a57a5c1dff Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 13:10:41 +0100 Subject: [PATCH 06/13] Prevent assignment --- .../assignment-detail/assignment-detail.component.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts index 031105702b..47c9551725 100644 --- a/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts +++ b/client/src/app/site/pages/meetings/pages/assignments/pages/assignment-detail/components/assignment-detail/assignment-detail.component.ts @@ -1,5 +1,6 @@ import { Component, OnDestroy } from '@angular/core'; import { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms'; +import { MatSnackBar } from '@angular/material/snack-bar'; import { TranslateService } from '@ngx-translate/core'; import { BehaviorSubject, Subscription } from 'rxjs'; import { Id } from 'src/app/domain/definitions/key-types'; @@ -162,7 +163,8 @@ export class AssignmentDetailComponent extends BaseMeetingComponent implements O private pollDialog: AssignmentPollDialogService, private assignmentPollService: AssignmentPollService, private pollController: PollControllerService, - private userRepo: UserControllerService + private userRepo: UserControllerService, + private snackBar: MatSnackBar ) { super(); this.assignmentForm = formBuilder.group({ @@ -355,7 +357,12 @@ export class AssignmentDetailComponent extends BaseMeetingComponent implements O * Adds the operator to list of candidates */ public async addSelf(): Promise { - await this.addCandidate({ userId: this.operator.operatorId! }); + if (!this.operator.isInMeeting(this.activeMeetingIdService.meetingId)) { + const infoMessage = this.translate.instant(`Action not possible. You have to be part of the meeting.`); + this.snackBar.open(infoMessage, this.translate.instant(`Ok`)); + } else { + await this.addCandidate({ userId: this.operator.operatorId! }); + } } /** From 418aa9d1b7f12365799c25a1f20ac60895b3019b Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 13:29:15 +0100 Subject: [PATCH 07/13] change visibility --- .../chat-group-detail-message-form.component.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts index 6cc15a5c56..2ec64ac579 100644 --- a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts +++ b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts @@ -45,7 +45,7 @@ export class ChatGroupDetailMessageFormComponent { fb: UntypedFormBuilder, private operator: OperatorService, private activeMeetingIdService: ActiveMeetingIdService, - protected translate: TranslateService, + private translate: TranslateService, private snackBar: MatSnackBar ) { this.messageForm = fb.control(``, [Validators.maxLength(CHAT_MESSAGE_MAX_LENGTH)]); From 15fe6364db554649f5bae725212c924020c3edb6 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 23 Dec 2025 14:48:30 +0100 Subject: [PATCH 08/13] Add ids to amendment create --- .../motion-repository.service/motion-repository.service.ts | 2 +- .../amendment-create-wizard.component.ts | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts index 5275abc8f4..15c8b78f01 100644 --- a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts +++ b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts @@ -220,7 +220,7 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont lead_motion_id: partialMotion.lead_motion_id, title: partialMotion.title, origin_id: partialMotion.origin_id, - submitter_ids: partialMotion.submitter_ids === null ? [] : partialMotion.submitter_ids, + submitter_meeting_user_ids: partialMotion.submitter_ids, workflow_id: partialMotion.workflow_id, category_id: partialMotion.category_id, attachment_mediafile_ids: diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts index e75d048413..708e04bf42 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts @@ -179,6 +179,9 @@ export class AmendmentCreateWizardComponent extends BaseMeetingComponent impleme amendmentParagraphs[paraNo] = this.contentForm.value[`text_` + paraNo]; } }); + const submitterId = this.operator.isInMeeting(this.activeMeetingId) + ? [this.operator.user.getMeetingUser(this.activeMeetingId)?.id] + : []; const motionCreate = { ...this.contentForm.value, title: this.translate.instant(`Amendment to`) + ` ` + this.motion.getNumberOrTitle(), @@ -186,6 +189,7 @@ export class AmendmentCreateWizardComponent extends BaseMeetingComponent impleme category_id: this.operator.hasPerms(Permission.motionCanManage) ? this.motion.category_id : undefined, lead_motion_id: this.motion.id, amendment_paragraphs: amendmentParagraphs, + submitter_ids: submitterId, workflow_id: this.meetingSettingsService.instant(`motions_default_amendment_workflow_id`) }; From 61275e61c8c3989a97640b1c85b69c2670cb1c91 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Fri, 9 Jan 2026 16:03:55 +0100 Subject: [PATCH 09/13] name change --- .../chat-group-detail-message-form.component.html | 6 +++--- .../chat-group-detail-message-form.component.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html index 49dfeeee34..c80d75ae63 100644 --- a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html +++ b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.html @@ -1,7 +1,7 @@ @if (currentMessage) { @@ -34,13 +34,13 @@ matSuffix matTooltip=" {{ 'Send' | translate }}" type="button" - [color]="isPartOfMetting() ? 'accent' : 'warn'" + [color]="isPartOfMeeting() ? 'accent' : 'warn'" [disabled]="!isMessageFormValid" (click)="sendChatMessage()" > send - @if (!isPartOfMetting()) { + @if (!isPartOfMeeting()) { {{ 'You have to be part of the meeting to write messages.' | translate }} diff --git a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts index 2ec64ac579..c8cb1250a8 100644 --- a/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts +++ b/client/src/app/site/pages/meetings/pages/chat/pages/chat-group-list/components/chat-group-detail-message-form/chat-group-detail-message-form.component.ts @@ -59,7 +59,7 @@ export class ChatGroupDetailMessageFormComponent { } public sendChatMessage(): void { - if (!this.isPartOfMetting()) { + if (!this.isPartOfMeeting()) { const infoMessage = this.translate.instant(`Action not possible. You have to be part of the meeting.`); this.snackBar.open(infoMessage, this.translate.instant(`Ok`)); } else { @@ -79,7 +79,7 @@ export class ChatGroupDetailMessageFormComponent { this.messageForm.markAsPristine(); } - public isPartOfMetting(): boolean { + public isPartOfMeeting(): boolean { return this.operator.isInMeeting(this.activeMeetingIdService.meetingId); } } From bf0e6b75ea3cd345c50550e8ac3872708e90dec7 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Mon, 12 Jan 2026 14:06:12 +0100 Subject: [PATCH 10/13] CR --- client/src/app/domain/models/motions/motion.ts | 2 ++ .../motion-repository.service.ts | 13 +++++++++---- .../amendment-create-wizard.component.ts | 4 ++-- .../components/motion-form/motion-form.component.ts | 4 +++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/client/src/app/domain/models/motions/motion.ts b/client/src/app/domain/models/motions/motion.ts index f6e4b0c356..693f3d9d9f 100644 --- a/client/src/app/domain/models/motions/motion.ts +++ b/client/src/app/domain/models/motions/motion.ts @@ -74,6 +74,7 @@ export class Motion extends BaseModel implements MotionFormattingReprese public category_id!: Id; // category/motion_ids; public block_id!: Id; // block/motion_ids; public submitter_ids!: Id[]; // (motion_submitter/motion_id)[]; + public submitter_meeting_user_ids!: Id[]; // (motion_submitter/motion_id)[]; public supporter_ids!: Id[]; // (motion_supporter/motion_id)[]; public editor_ids: Id[]; // motion_editor/motion_id; public working_group_speaker_ids: Id[]; // motion_working_group_speaker/motion_id; @@ -139,6 +140,7 @@ export class Motion extends BaseModel implements MotionFormattingReprese `category_id`, `block_id`, `submitter_ids`, + `submitter_meeting_user_ids`, `supporter_ids`, `editor_ids`, `working_group_speaker_ids`, diff --git a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts index 15c8b78f01..c1ea5e6c40 100644 --- a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts +++ b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts @@ -187,7 +187,12 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont public createTextBased( partialMotion: Partial< - Motion & { workflow_id: Id; attachment_mediafile_ids?: Id[]; supporter_meeting_user_ids?: Id[] } + Motion & { + workflow_id: Id; + attachment_mediafile_ids?: Id[]; + supporter_meeting_user_ids?: Id[]; + submitter_meeting_user_ids: Id[]; + } > ): Action { const payload = { @@ -196,7 +201,7 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont title: partialMotion.title, text: partialMotion.text, origin_id: partialMotion.origin_id, - submitter_ids: partialMotion.submitter_ids, + submitter_meeting_user_ids: partialMotion.submitter_meeting_user_ids, workflow_id: partialMotion.workflow_id, category_id: partialMotion.category_id, attachment_mediafile_ids: partialMotion.attachment_mediafile_ids, @@ -220,7 +225,7 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont lead_motion_id: partialMotion.lead_motion_id, title: partialMotion.title, origin_id: partialMotion.origin_id, - submitter_meeting_user_ids: partialMotion.submitter_ids, + submitter_meeting_user_ids: partialMotion.submitter_meeting_user_ids, workflow_id: partialMotion.workflow_id, category_id: partialMotion.category_id, attachment_mediafile_ids: @@ -320,7 +325,7 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont title: partialMotion.title, text: partialMotion.text, origin_id: partialMotion.origin_id, - submitter_meeting_user_ids: partialMotion.submitter_ids, + submitter_meeting_user_ids: partialMotion.submitter_meeting_user_ids, additional_submitter: partialMotion.additional_submitter, workflow_id: partialMotion.workflow_id, category_id: partialMotion.category_id, diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts index 708e04bf42..48dada0612 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/amendment-create-wizard/amendment-create-wizard.component.ts @@ -179,7 +179,7 @@ export class AmendmentCreateWizardComponent extends BaseMeetingComponent impleme amendmentParagraphs[paraNo] = this.contentForm.value[`text_` + paraNo]; } }); - const submitterId = this.operator.isInMeeting(this.activeMeetingId) + const submitterMeetingUserId = this.operator.isInMeeting(this.activeMeetingId) ? [this.operator.user.getMeetingUser(this.activeMeetingId)?.id] : []; const motionCreate = { @@ -189,7 +189,7 @@ export class AmendmentCreateWizardComponent extends BaseMeetingComponent impleme category_id: this.operator.hasPerms(Permission.motionCanManage) ? this.motion.category_id : undefined, lead_motion_id: this.motion.id, amendment_paragraphs: amendmentParagraphs, - submitter_ids: submitterId, + submitter_meeting_user_ids: submitterMeetingUserId, workflow_id: this.meetingSettingsService.instant(`motions_default_amendment_workflow_id`) }; diff --git a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts index 327c074fcb..3ee590af0a 100644 --- a/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts +++ b/client/src/app/site/pages/meetings/pages/motions/pages/motion-detail/pages/motion-form/components/motion-form/motion-form.component.ts @@ -252,7 +252,9 @@ export class MotionFormComponent extends BaseMeetingComponent implements OnInit if (this.newMotion) { if (update.submitter_ids.length === 0 && this.operator.isInMeeting(this.activeMeetingId)) { - update.submitter_ids = [this.operator.user.getMeetingUser(this.activeMeetingId).id]; + update.submitter_meeting_user_ids = [this.operator.user.getMeetingUser(this.activeMeetingId).id]; + } else { + update.submitter_meeting_user_ids = update.submitter_ids; } for (const key in update) { if (update[key] === null || update[key].length === 0) { From 01937f6256beb8be0f9d8607dd307f57397de348 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 13 Jan 2026 11:18:34 +0100 Subject: [PATCH 11/13] Fix new field --- client/src/app/domain/models/motions/motion.ts | 5 +---- .../motion-repository.service/motion-repository.service.ts | 7 ++++++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/client/src/app/domain/models/motions/motion.ts b/client/src/app/domain/models/motions/motion.ts index 693f3d9d9f..c21438d4a5 100644 --- a/client/src/app/domain/models/motions/motion.ts +++ b/client/src/app/domain/models/motions/motion.ts @@ -74,7 +74,6 @@ export class Motion extends BaseModel implements MotionFormattingReprese public category_id!: Id; // category/motion_ids; public block_id!: Id; // block/motion_ids; public submitter_ids!: Id[]; // (motion_submitter/motion_id)[]; - public submitter_meeting_user_ids!: Id[]; // (motion_submitter/motion_id)[]; public supporter_ids!: Id[]; // (motion_supporter/motion_id)[]; public editor_ids: Id[]; // motion_editor/motion_id; public working_group_speaker_ids: Id[]; // motion_working_group_speaker/motion_id; @@ -140,7 +139,6 @@ export class Motion extends BaseModel implements MotionFormattingReprese `category_id`, `block_id`, `submitter_ids`, - `submitter_meeting_user_ids`, `supporter_ids`, `editor_ids`, `working_group_speaker_ids`, @@ -158,8 +156,7 @@ export class Motion extends BaseModel implements MotionFormattingReprese ]; } export interface Motion - extends - HasMeetingId, + extends HasMeetingId, HasAgendaItemId, HasListOfSpeakersId, HasTagIds, diff --git a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts index c1ea5e6c40..bad793de02 100644 --- a/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts +++ b/client/src/app/gateways/repositories/motions/motion-repository.service/motion-repository.service.ts @@ -217,7 +217,12 @@ export class MotionRepositoryService extends BaseAgendaItemAndListOfSpeakersCont public createParagraphBased( partialMotion: Partial< - Motion & { workflow_id: Id; attachment_mediafile_ids?: Id[]; supporter_meeting_user_ids?: Id[] } + Motion & { + workflow_id: Id; + attachment_mediafile_ids?: Id[]; + supporter_meeting_user_ids?: Id[]; + submitter_meeting_user_ids: Id[]; + } > ): Action { const payload = { From 26b57346fd6d7efccb7c85e8c7b79ad1ea4f8467 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 13 Jan 2026 11:27:19 +0100 Subject: [PATCH 12/13] Clean-up --- client/src/app/domain/models/motions/motion.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/client/src/app/domain/models/motions/motion.ts b/client/src/app/domain/models/motions/motion.ts index c21438d4a5..a02e2da126 100644 --- a/client/src/app/domain/models/motions/motion.ts +++ b/client/src/app/domain/models/motions/motion.ts @@ -156,7 +156,8 @@ export class Motion extends BaseModel implements MotionFormattingReprese ]; } export interface Motion - extends HasMeetingId, + extends + HasMeetingId, HasAgendaItemId, HasListOfSpeakersId, HasTagIds, From 5c1d6e995b6d272bc8f4eb72428ad8f36f18abd8 Mon Sep 17 00:00:00 2001 From: Elblinator Date: Tue, 13 Jan 2026 12:09:28 +0100 Subject: [PATCH 13/13] Clean-up --- client/src/app/domain/models/motions/motion.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/app/domain/models/motions/motion.ts b/client/src/app/domain/models/motions/motion.ts index a02e2da126..f6e4b0c356 100644 --- a/client/src/app/domain/models/motions/motion.ts +++ b/client/src/app/domain/models/motions/motion.ts @@ -156,7 +156,7 @@ export class Motion extends BaseModel implements MotionFormattingReprese ]; } export interface Motion - extends + extends HasMeetingId, HasAgendaItemId, HasListOfSpeakersId,