Browse Source

feature: allow to delete all activities from portfolio

pull/1880/head
francisco 2 years ago
committed by Thomas
parent
commit
ab060eeba6
  1. 1
      CHANGELOG.md
  2. 17
      apps/api/src/app/order/order.controller.ts
  3. 8
      apps/api/src/app/order/order.service.ts
  4. 17
      apps/client/src/app/pages/portfolio/activities/activities-page.component.ts
  5. 1
      apps/client/src/app/pages/portfolio/activities/activities-page.html
  6. 4
      apps/client/src/app/services/data.service.ts
  7. 8
      libs/ui/src/lib/activities-table/activities-table.component.html
  8. 5
      libs/ui/src/lib/activities-table/activities-table.component.ts

1
CHANGELOG.md

@ -32,6 +32,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed the alignment of the performance column header in the holdings table
- Removed the unnecessary sort header of the comment column in the activities table
- Fixed the targets in `proxy.conf.json` from `http://localhost:3333` to `http://0.0.0.0:3333` for local development
- Introduced a new button to delete all activities from the portfolio activities page
## 1.258.0 - 2023-04-20

17
apps/api/src/app/order/order.controller.ts

@ -62,6 +62,23 @@ export class OrderController {
});
}
@Delete()
@UseGuards(AuthGuard('jwt'))
public async deleteOrders(): Promise<number> {
if (
!hasPermission(this.request.user.permissions, permissions.deleteOrder)
) {
throw new HttpException(
getReasonPhrase(StatusCodes.FORBIDDEN),
StatusCodes.FORBIDDEN
);
}
return this.orderService.deleteOrders({
userId: this.request.user.id
});
}
@Get()
@UseGuards(AuthGuard('jwt'))
@UseInterceptors(RedactValuesInResponseInterceptor)

8
apps/api/src/app/order/order.service.ts

@ -181,6 +181,14 @@ export class OrderService {
return order;
}
public async deleteOrders(where: Prisma.OrderWhereInput): Promise<number> {
const { count } = await this.prismaService.order.deleteMany({
where
});
return count;
}
public async getOrders({
filters,
includeDrafts = false,

17
apps/client/src/app/pages/portfolio/activities/activities-page.component.ts

@ -138,6 +138,23 @@ export class ActivitiesPageComponent implements OnDestroy, OnInit {
});
}
public onDeleteAllActivities() {
const confirmation = confirm(
$localize`Do you really want to delete all your activities?`
);
if (confirmation) {
this.dataService
.deleteAllOrders()
.pipe(takeUntil(this.unsubscribeSubject))
.subscribe({
next: () => {
this.fetchActivities();
}
});
}
}
public onExport(activityIds?: string[]) {
this.dataService
.fetchExport(activityIds)

1
apps/client/src/app/pages/portfolio/activities/activities-page.html

@ -13,6 +13,7 @@
(activityDeleted)="onDeleteActivity($event)"
(activityToClone)="onCloneActivity($event)"
(activityToUpdate)="onUpdateActivity($event)"
(deleteAllActivities)="onDeleteAllActivities()"
(export)="onExport($event)"
(exportDrafts)="onExportDrafts($event)"
(import)="onImport()"

4
apps/client/src/app/services/data.service.ts

@ -150,6 +150,10 @@ export class DataService {
return this.http.delete<any>(`/api/v1/order/${aId}`);
}
public deleteAllOrders() {
return this.http.delete<any>(`/api/v1/order/`);
}
public deleteUser(aId: string) {
return this.http.delete<any>(`/api/v1/user/${aId}`);
}

8
libs/ui/src/lib/activities-table/activities-table.component.html

@ -53,6 +53,14 @@
<ion-icon class="mr-2" name="calendar-clear-outline"></ion-icon>
<span i18n>Export Drafts as ICS</span>
</button>
<button
class="align-items-center d-flex"
mat-menu-item
(click)="onDeleteAllActivities()"
>
<ion-icon class="mr-2" name="trash-outline"></ion-icon>
<span i18n>Delete all activities</span>
</button>
</mat-menu>
</div>

5
libs/ui/src/lib/activities-table/activities-table.component.ts

@ -52,6 +52,7 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy, OnInit {
@Output() export = new EventEmitter<string[]>();
@Output() exportDrafts = new EventEmitter<string[]>();
@Output() import = new EventEmitter<void>();
@Output() deleteAllActivities = new EventEmitter<void>();
@Output() importDividends = new EventEmitter<UniqueAsset>();
@Output() selectedActivities = new EventEmitter<Activity[]>();
@ -231,6 +232,10 @@ export class ActivitiesTableComponent implements OnChanges, OnDestroy, OnInit {
);
}
public onDeleteAllActivities() {
this.deleteAllActivities.emit();
}
public onImport() {
this.import.emit();
}

Loading…
Cancel
Save