Browse Source

Feature/add Manage Asset Profile button to holding detail dialog (#5121)

* Add Manage Asset Profile button

* Update changelog
pull/5123/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
f22e9b990d
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 4
      CHANGELOG.md
  2. 4
      apps/client/src/app/app.component.ts
  3. 9
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts
  4. 33
      apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html
  5. 1
      apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts

4
CHANGELOG.md

@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased ## Unreleased
### Added
- Added a _Manage Asset Profile_ button for administrators to the holding detail dialog
### Changed ### Changed
- Improved the language localization in the users table of the admin control panel - Improved the language localization in the users table of the admin control panel

4
apps/client/src/app/app.component.ts

@ -320,6 +320,10 @@ export class AppComponent implements OnDestroy, OnInit {
colorScheme: this.user?.settings?.colorScheme, colorScheme: this.user?.settings?.colorScheme,
deviceType: this.deviceType, deviceType: this.deviceType,
hasImpersonationId: this.hasImpersonationId, hasImpersonationId: this.hasImpersonationId,
hasPermissionToAccessAdminControl: hasPermission(
this.user?.permissions,
permissions.accessAdminControl
),
hasPermissionToCreateOrder: hasPermissionToCreateOrder:
!this.hasImpersonationId && !this.hasImpersonationId &&
hasPermission(this.user?.permissions, permissions.createOrder) && hasPermission(this.user?.permissions, permissions.createOrder) &&

9
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.component.ts

@ -46,12 +46,13 @@ import { MatFormFieldModule } from '@angular/material/form-field';
import { SortDirection } from '@angular/material/sort'; import { SortDirection } from '@angular/material/sort';
import { MatTableDataSource } from '@angular/material/table'; import { MatTableDataSource } from '@angular/material/table';
import { MatTabsModule } from '@angular/material/tabs'; import { MatTabsModule } from '@angular/material/tabs';
import { Router } from '@angular/router'; import { Router, RouterModule } from '@angular/router';
import { IonIcon } from '@ionic/angular/standalone'; import { IonIcon } from '@ionic/angular/standalone';
import { Account, MarketData, Tag } from '@prisma/client'; import { Account, MarketData, Tag } from '@prisma/client';
import { format, isSameMonth, isToday, parseISO } from 'date-fns'; import { format, isSameMonth, isToday, parseISO } from 'date-fns';
import { addIcons } from 'ionicons'; import { addIcons } from 'ionicons';
import { import {
createOutline,
flagOutline, flagOutline,
readerOutline, readerOutline,
serverOutline, serverOutline,
@ -85,7 +86,8 @@ import { HoldingDetailDialogParams } from './interfaces/interfaces';
MatDialogModule, MatDialogModule,
MatFormFieldModule, MatFormFieldModule,
MatTabsModule, MatTabsModule,
NgxSkeletonLoaderModule NgxSkeletonLoaderModule,
RouterModule
], ],
schemas: [CUSTOM_ELEMENTS_SCHEMA], schemas: [CUSTOM_ELEMENTS_SCHEMA],
selector: 'gf-holding-detail-dialog', selector: 'gf-holding-detail-dialog',
@ -127,6 +129,8 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
public quantity: number; public quantity: number;
public quantityPrecision = 2; public quantityPrecision = 2;
public reportDataGlitchMail: string; public reportDataGlitchMail: string;
public routerLinkAdminControlMarketData =
internalRoutes.adminControl.subRoutes.marketData.routerLink;
public sectors: { public sectors: {
[name: string]: { name: string; value: number }; [name: string]: { name: string; value: number };
}; };
@ -152,6 +156,7 @@ export class GfHoldingDetailDialogComponent implements OnDestroy, OnInit {
private userService: UserService private userService: UserService
) { ) {
addIcons({ addIcons({
createOutline,
flagOutline, flagOutline,
readerOutline, readerOutline,
serverOutline, serverOutline,

33
apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html

@ -412,16 +412,37 @@
/> />
@if ( @if (
dataSource?.data.length > 0 && data.hasPermissionToAccessAdminControl ||
data.hasPermissionToReportDataGlitch === true (dataSource?.data.length > 0 &&
data.hasPermissionToReportDataGlitch === true)
) { ) {
<div class="row"> <div class="row">
<div class="col"> <div class="col">
<hr /> <hr />
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail" @if (data.hasPermissionToAccessAdminControl) {
><ion-icon class="mr-1" name="flag-outline"></ion-icon <a
><span i18n>Report Data Glitch</span></a class="mr-2"
> mat-stroked-button
[queryParams]="{
assetProfileDialog: true,
dataSource: SymbolProfile?.dataSource,
symbol: SymbolProfile?.symbol
}"
[routerLink]="routerLinkAdminControlMarketData"
(click)="onClose()"
><ion-icon class="mr-1" name="create-outline"></ion-icon
><span i18n>Manage Asset Profile</span>...</a
>
}
@if (
dataSource?.data.length > 0 &&
data.hasPermissionToReportDataGlitch === true
) {
<a color="warn" mat-stroked-button [href]="reportDataGlitchMail"
><ion-icon class="mr-1" name="flag-outline"></ion-icon
><span i18n>Report Data Glitch</span>...</a
>
}
</div> </div>
</div> </div>
} }

1
apps/client/src/app/components/holding-detail-dialog/interfaces/interfaces.ts

@ -8,6 +8,7 @@ export interface HoldingDetailDialogParams {
dataSource: DataSource; dataSource: DataSource;
deviceType: string; deviceType: string;
hasImpersonationId: boolean; hasImpersonationId: boolean;
hasPermissionToAccessAdminControl: boolean;
hasPermissionToCreateOrder: boolean; hasPermissionToCreateOrder: boolean;
hasPermissionToReportDataGlitch: boolean; hasPermissionToReportDataGlitch: boolean;
hasPermissionToUpdateOrder: boolean; hasPermissionToUpdateOrder: boolean;

Loading…
Cancel
Save