Merge pull request #5135 from FinnStutzenstein/fixAgendaItemNumber
Fix agenda item number
This commit is contained in:
commit
da3af834af
@ -143,7 +143,7 @@ export class ItemRepositoryService extends BaseHasContentObjectRepository<
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Copied from BaseRepository and added the cloned model to write back the
|
* TODO: Copied from BaseRepository and added the cloned model to write back the
|
||||||
* item_number correctly. This must be reversed with #4738 (indroduced with #4639)
|
* item_number correctly. This must be reverted with #4738 (indroduced with #4639)
|
||||||
*
|
*
|
||||||
* Saves the (full) update to an existing model. So called "update"-function
|
* Saves the (full) update to an existing model. So called "update"-function
|
||||||
* Provides a default procedure, but can be overwritten if required
|
* Provides a default procedure, but can be overwritten if required
|
||||||
@ -152,6 +152,7 @@ export class ItemRepositoryService extends BaseHasContentObjectRepository<
|
|||||||
* @param viewModel the view model that the update is based on
|
* @param viewModel the view model that the update is based on
|
||||||
*/
|
*/
|
||||||
public async update(update: Partial<Item>, viewModel: ViewItem): Promise<void> {
|
public async update(update: Partial<Item>, viewModel: ViewItem): Promise<void> {
|
||||||
|
(<any>update)._itemNumber = update.item_number;
|
||||||
const sendUpdate = viewModel.getUpdatedModel(update);
|
const sendUpdate = viewModel.getUpdatedModel(update);
|
||||||
const clone = JSON.parse(JSON.stringify(sendUpdate));
|
const clone = JSON.parse(JSON.stringify(sendUpdate));
|
||||||
clone.item_number = clone._itemNumber;
|
clone.item_number = clone._itemNumber;
|
||||||
|
@ -125,7 +125,7 @@ export class ListOfSpeakersRepositoryService extends BaseHasContentObjectReposit
|
|||||||
// TODO: This can be resolved with #4738
|
// TODO: This can be resolved with #4738
|
||||||
const item = this.itemRepo.findByContentObject(titleInformation.contentObjectData);
|
const item = this.itemRepo.findByContentObject(titleInformation.contentObjectData);
|
||||||
if (item) {
|
if (item) {
|
||||||
(<any>titleInformation.title_information).agenda_item_number = item.item_number;
|
(<any>titleInformation.title_information).agenda_item_number = () => item.item_number;
|
||||||
}
|
}
|
||||||
|
|
||||||
return repo.getListOfSpeakersTitle(titleInformation.title_information);
|
return repo.getListOfSpeakersTitle(titleInformation.title_information);
|
||||||
|
@ -54,7 +54,7 @@ export abstract class BaseIsAgendaItemAndListOfSpeakersContentObjectRepository<
|
|||||||
|
|
||||||
public getAgendaListTitle(titleInformation: T): string {
|
public getAgendaListTitle(titleInformation: T): string {
|
||||||
// Return the agenda title with the model's verbose name appended
|
// Return the agenda title with the model's verbose name appended
|
||||||
const numberPrefix = titleInformation.agenda_item_number ? `${titleInformation.agenda_item_number} · ` : '';
|
const numberPrefix = titleInformation.agenda_item_number() ? `${titleInformation.agenda_item_number()} · ` : '';
|
||||||
return numberPrefix + this.getTitle(titleInformation) + ' (' + this.getVerboseName() + ')';
|
return numberPrefix + this.getTitle(titleInformation) + ' (' + this.getVerboseName() + ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,7 +63,7 @@ export abstract class BaseIsAgendaItemAndListOfSpeakersContentObjectRepository<
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getAgendaSlideTitle(titleInformation: T): string {
|
public getAgendaSlideTitle(titleInformation: T): string {
|
||||||
const numberPrefix = titleInformation.agenda_item_number ? `${titleInformation.agenda_item_number} · ` : '';
|
const numberPrefix = titleInformation.agenda_item_number() ? `${titleInformation.agenda_item_number()} · ` : '';
|
||||||
return numberPrefix + this.getTitle(titleInformation);
|
return numberPrefix + this.getTitle(titleInformation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ export abstract class BaseIsAgendaItemContentObjectRepository<
|
|||||||
*/
|
*/
|
||||||
public getAgendaListTitle(titleInformation: T): string {
|
public getAgendaListTitle(titleInformation: T): string {
|
||||||
// Return the agenda title with the model's verbose name appended
|
// Return the agenda title with the model's verbose name appended
|
||||||
const numberPrefix = titleInformation.agenda_item_number ? `${titleInformation.agenda_item_number} · ` : '';
|
const numberPrefix = titleInformation.agenda_item_number() ? `${titleInformation.agenda_item_number()} · ` : '';
|
||||||
return numberPrefix + this.getTitle(titleInformation) + ' (' + this.getVerboseName() + ')';
|
return numberPrefix + this.getTitle(titleInformation) + ' (' + this.getVerboseName() + ')';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,7 +252,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
|
|||||||
};
|
};
|
||||||
|
|
||||||
public getAgendaSlideTitle = (titleInformation: MotionTitleInformation) => {
|
public getAgendaSlideTitle = (titleInformation: MotionTitleInformation) => {
|
||||||
const numberPrefix = titleInformation.agenda_item_number ? `${titleInformation.agenda_item_number} · ` : '';
|
const numberPrefix = titleInformation.agenda_item_number() ? `${titleInformation.agenda_item_number()} · ` : '';
|
||||||
// if the identifier is set, the title will be 'Motion <identifier>'.
|
// if the identifier is set, the title will be 'Motion <identifier>'.
|
||||||
if (titleInformation.identifier) {
|
if (titleInformation.identifier) {
|
||||||
return numberPrefix + this.translate.instant('Motion') + ' ' + titleInformation.identifier;
|
return numberPrefix + this.translate.instant('Motion') + ' ' + titleInformation.identifier;
|
||||||
@ -262,7 +262,7 @@ export class MotionRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCo
|
|||||||
};
|
};
|
||||||
|
|
||||||
public getAgendaListTitle = (titleInformation: MotionTitleInformation) => {
|
public getAgendaListTitle = (titleInformation: MotionTitleInformation) => {
|
||||||
const numberPrefix = titleInformation.agenda_item_number ? `${titleInformation.agenda_item_number} · ` : '';
|
const numberPrefix = titleInformation.agenda_item_number() ? `${titleInformation.agenda_item_number()} · ` : '';
|
||||||
// Append the verbose name only, if not the special format 'Motion <identifier>' is used.
|
// Append the verbose name only, if not the special format 'Motion <identifier>' is used.
|
||||||
if (titleInformation.identifier) {
|
if (titleInformation.identifier) {
|
||||||
return `${numberPrefix}${this.translate.instant('Motion')} ${titleInformation.identifier} · ${
|
return `${numberPrefix}${this.translate.instant('Motion')} ${titleInformation.identifier} · ${
|
||||||
|
@ -52,8 +52,8 @@ export class TopicRepositoryService extends BaseIsAgendaItemAndListOfSpeakersCon
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getTitle = (titleInformation: TopicTitleInformation) => {
|
public getTitle = (titleInformation: TopicTitleInformation) => {
|
||||||
if (titleInformation.agenda_item_number) {
|
if (titleInformation.agenda_item_number()) {
|
||||||
return titleInformation.agenda_item_number + ' · ' + titleInformation.title;
|
return titleInformation.agenda_item_number() + ' · ' + titleInformation.title;
|
||||||
} else {
|
} else {
|
||||||
return titleInformation.title;
|
return titleInformation.title;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ export class Item extends BaseModelWithContentObject<Item> {
|
|||||||
public set item_number(val: string) {
|
public set item_number(val: string) {
|
||||||
this._itemNumber = val;
|
this._itemNumber = val;
|
||||||
if (this._titleInformation) {
|
if (this._titleInformation) {
|
||||||
this._titleInformation.agenda_item_number = this.item_number;
|
this._titleInformation.agenda_item_number = () => this.item_number;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public get title_information(): object {
|
public get title_information(): object {
|
||||||
@ -38,7 +38,7 @@ export class Item extends BaseModelWithContentObject<Item> {
|
|||||||
}
|
}
|
||||||
public set title_information(val: object) {
|
public set title_information(val: object) {
|
||||||
this._titleInformation = val;
|
this._titleInformation = val;
|
||||||
this._titleInformation.agenda_item_number = this.item_number;
|
this._titleInformation.agenda_item_number = () => this.item_number;
|
||||||
}
|
}
|
||||||
public comment: string;
|
public comment: string;
|
||||||
public closed: boolean;
|
public closed: boolean;
|
||||||
|
@ -22,7 +22,7 @@ export function isBaseViewModelWithAgendaItem(obj: any): obj is BaseViewModelWit
|
|||||||
}
|
}
|
||||||
|
|
||||||
export interface TitleInformationWithAgendaItem extends TitleInformation {
|
export interface TitleInformationWithAgendaItem extends TitleInformation {
|
||||||
agenda_item_number?: string;
|
agenda_item_number?: () => string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -58,7 +58,7 @@ export interface BaseViewModelWithAgendaItem<M extends BaseModelWithAgendaItem =
|
|||||||
export abstract class BaseViewModelWithAgendaItem<
|
export abstract class BaseViewModelWithAgendaItem<
|
||||||
M extends BaseModelWithAgendaItem = any
|
M extends BaseModelWithAgendaItem = any
|
||||||
> extends BaseProjectableViewModel<M> {
|
> extends BaseProjectableViewModel<M> {
|
||||||
public get agenda_item_number(): string | null {
|
public agenda_item_number(): string | null {
|
||||||
return this.item && this.item.item_number ? this.item.item_number : null;
|
return this.item && this.item.item_number ? this.item.item_number : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import { ViewMediafile } from 'app/site/mediafiles/models/view-mediafile';
|
|||||||
|
|
||||||
export interface TopicTitleInformation extends TitleInformationWithAgendaItem {
|
export interface TopicTitleInformation extends TitleInformationWithAgendaItem {
|
||||||
title: string;
|
title: string;
|
||||||
agenda_item_number?: string;
|
agenda_item_number?: () => string;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
export interface SlideItem {
|
export interface SlideItem {
|
||||||
title_information: object;
|
title_information: {
|
||||||
|
collection: string;
|
||||||
|
depth: number;
|
||||||
|
_agenda_item_number: string;
|
||||||
|
agenda_item_number: () => string;
|
||||||
|
};
|
||||||
collection: string;
|
collection: string;
|
||||||
depth: number;
|
depth: number;
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
import { Component } from '@angular/core';
|
import { Component, Input } from '@angular/core';
|
||||||
|
|
||||||
import { CollectionStringMapperService } from 'app/core/core-services/collection-string-mapper.service';
|
import { CollectionStringMapperService } from 'app/core/core-services/collection-string-mapper.service';
|
||||||
|
import { SlideData } from 'app/core/core-services/projector-data.service';
|
||||||
import { isBaseIsAgendaItemContentObjectRepository } from 'app/core/repositories/base-is-agenda-item-content-object-repository';
|
import { isBaseIsAgendaItemContentObjectRepository } from 'app/core/repositories/base-is-agenda-item-content-object-repository';
|
||||||
|
import { ProjectorElement } from 'app/shared/models/core/projector';
|
||||||
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
import { BaseSlideComponent } from 'app/slides/base-slide-component';
|
||||||
import { ItemListSlideData, SlideItem } from './item-list-slide-data';
|
import { ItemListSlideData, SlideItem } from './item-list-slide-data';
|
||||||
|
|
||||||
@ -11,6 +13,20 @@ import { ItemListSlideData, SlideItem } from './item-list-slide-data';
|
|||||||
styleUrls: ['./item-list-slide.component.scss']
|
styleUrls: ['./item-list-slide.component.scss']
|
||||||
})
|
})
|
||||||
export class ItemListSlideComponent extends BaseSlideComponent<ItemListSlideData> {
|
export class ItemListSlideComponent extends BaseSlideComponent<ItemListSlideData> {
|
||||||
|
@Input()
|
||||||
|
public set data(value: SlideData<ItemListSlideData, ProjectorElement>) {
|
||||||
|
value.data.items.forEach(
|
||||||
|
item => (item.title_information.agenda_item_number = () => item.title_information._agenda_item_number)
|
||||||
|
);
|
||||||
|
this._data = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public get data(): SlideData<ItemListSlideData, ProjectorElement> {
|
||||||
|
return this._data;
|
||||||
|
}
|
||||||
|
|
||||||
|
private _data: SlideData<ItemListSlideData, ProjectorElement>;
|
||||||
|
|
||||||
public constructor(private collectionStringMapperService: CollectionStringMapperService) {
|
public constructor(private collectionStringMapperService: CollectionStringMapperService) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -49,7 +49,7 @@ async def get_flat_tree(all_data: AllData, parent_id: int = 0) -> List[Dict[str,
|
|||||||
for item_id in item_ids:
|
for item_id in item_ids:
|
||||||
item = all_data["agenda/item"][item_id]
|
item = all_data["agenda/item"][item_id]
|
||||||
title_information = item["title_information"]
|
title_information = item["title_information"]
|
||||||
title_information["agenda_item_number"] = item["item_number"]
|
title_information["_agenda_item_number"] = item["item_number"]
|
||||||
tree.append(
|
tree.append(
|
||||||
{
|
{
|
||||||
"title_information": title_information,
|
"title_information": title_information,
|
||||||
@ -78,7 +78,7 @@ async def item_list_slide(
|
|||||||
for item in await get_sorted_agenda_items(all_data):
|
for item in await get_sorted_agenda_items(all_data):
|
||||||
if item["parent_id"] is None and item["type"] == 1:
|
if item["parent_id"] is None and item["type"] == 1:
|
||||||
title_information = item["title_information"]
|
title_information = item["title_information"]
|
||||||
title_information["agenda_item_number"] = item["item_number"]
|
title_information["_agenda_item_number"] = item["item_number"]
|
||||||
agenda_items.append(
|
agenda_items.append(
|
||||||
{
|
{
|
||||||
"title_information": title_information,
|
"title_information": title_information,
|
||||||
|
@ -95,11 +95,11 @@ async def test_main_items(all_data):
|
|||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"collection": "topics/topic",
|
"collection": "topics/topic",
|
||||||
"title_information": {"title": "item1", "agenda_item_number": ""},
|
"title_information": {"title": "item1", "_agenda_item_number": ""},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collection": "topics/topic",
|
"collection": "topics/topic",
|
||||||
"title_information": {"title": "item2", "agenda_item_number": ""},
|
"title_information": {"title": "item2", "_agenda_item_number": ""},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -116,17 +116,17 @@ async def test_all_items(all_data):
|
|||||||
{
|
{
|
||||||
"collection": "topics/topic",
|
"collection": "topics/topic",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
"title_information": {"title": "item1", "agenda_item_number": ""},
|
"title_information": {"title": "item1", "_agenda_item_number": ""},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collection": "topics/topic",
|
"collection": "topics/topic",
|
||||||
"depth": 1,
|
"depth": 1,
|
||||||
"title_information": {"title": "item4", "agenda_item_number": ""},
|
"title_information": {"title": "item4", "_agenda_item_number": ""},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"collection": "topics/topic",
|
"collection": "topics/topic",
|
||||||
"depth": 0,
|
"depth": 0,
|
||||||
"title_information": {"title": "item2", "agenda_item_number": ""},
|
"title_information": {"title": "item2", "_agenda_item_number": ""},
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user