delete all speakers of all lists of speakers

This commit is contained in:
FinnStutzenstein 2020-04-22 09:34:58 +02:00
parent 6a488eb78e
commit 38486463bc
5 changed files with 25 additions and 1 deletions

View File

@ -97,7 +97,7 @@
"karma-jasmine": "~3.1.1", "karma-jasmine": "~3.1.1",
"karma-jasmine-html-reporter": "^1.4.0", "karma-jasmine-html-reporter": "^1.4.0",
"npm-license-crawler": "^0.2.1", "npm-license-crawler": "^0.2.1",
"prettier": "^2.0.2", "prettier": "^2.0.5",
"protractor": "^5.4.3", "protractor": "^5.4.3",
"resize-observer-polyfill": "^1.5.1", "resize-observer-polyfill": "^1.5.1",
"ts-node": "~8.8.1", "ts-node": "~8.8.1",

View File

@ -220,6 +220,10 @@ export class ListOfSpeakersRepositoryService extends BaseHasContentObjectReposit
await this.httpService.put(restUrl, { speaker: speaker.id }); await this.httpService.put(restUrl, { speaker: speaker.id });
} }
public async deleteAllSpeakersOfAllListsOfSpeakers(): Promise<void> {
await this.httpService.post('/rest/agenda/list-of-speakers/delete_all_speakers/');
}
/** /**
* Helper function get the url to the speaker rest address * Helper function get the url to the speaker rest address
* *

View File

@ -121,6 +121,11 @@
<span>{{ 'Import' | translate }}</span> <span>{{ 'Import' | translate }}</span>
</button> </button>
<mat-divider></mat-divider> <mat-divider></mat-divider>
<button mat-menu-item *osPerms="'agenda.can_manage'" class="red-warning-text" (click)="deleteAllSpeakersOfAllListsOfSpeakers()">
<mat-icon>delete</mat-icon>
<span>{{ 'Delete all speakers' | translate }}</span>
</button>
<mat-divider></mat-divider>
<!-- Settings --> <!-- Settings -->
<button mat-menu-item *osPerms="'core.can_manage_config'" routerLink="/settings/agenda"> <button mat-menu-item *osPerms="'core.can_manage_config'" routerLink="/settings/agenda">
<mat-icon>settings</mat-icon> <mat-icon>settings</mat-icon>

View File

@ -342,4 +342,12 @@ export class AgendaListComponent extends BaseListViewComponent<ViewItem> impleme
return result; return result;
} }
} }
public async deleteAllSpeakersOfAllListsOfSpeakers(): Promise<void> {
const title = this.translate.instant('Are you sure you want to clear all speakers of all lists of speakers?');
const content = this.translate.instant('All lists of speakers will be cleared and are empty afterwards.');
if (await this.promptService.open(title, content)) {
this.listOfSpeakersRepo.deleteAllSpeakersOfAllListsOfSpeakers().catch(this.raiseError);
}
}
} }

View File

@ -296,6 +296,7 @@ class ListOfSpeakersViewSet(
"speak", "speak",
"sort_speakers", "sort_speakers",
"readd_last_speaker", "readd_last_speaker",
"delete_all_speakers",
): ):
result = has_perm( result = has_perm(
self.request.user, "agenda.can_see_list_of_speakers" self.request.user, "agenda.can_see_list_of_speakers"
@ -554,3 +555,9 @@ class ListOfSpeakersViewSet(
last_speaker.save() last_speaker.save()
return Response() return Response()
@list_route(methods=["post"])
def delete_all_speakers(self, request):
Speaker.objects.all().delete()
inform_changed_data(ListOfSpeakers.objects.all())
return Response()