Feature/rename transactions to activities page (#1424)
* Rename transactions to activities * Update changelog
This commit is contained in:
parent
c2c5326049
commit
6d12c27f9c
@ -15,6 +15,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- Improved the usage of the premium indicator component
|
- Improved the usage of the premium indicator component
|
||||||
- Removed the intro image in dark mode
|
- Removed the intro image in dark mode
|
||||||
|
- Refactored the `TransactionsPageComponent` to `ActivitiesPageComponent`
|
||||||
|
|
||||||
## 1.208.0 - 03.11.2022
|
## 1.208.0 - 03.11.2022
|
||||||
|
|
||||||
|
@ -148,8 +148,8 @@ const routes: Routes = [
|
|||||||
{
|
{
|
||||||
path: 'portfolio/activities',
|
path: 'portfolio/activities',
|
||||||
loadChildren: () =>
|
loadChildren: () =>
|
||||||
import('./pages/portfolio/transactions/transactions-page.module').then(
|
import('./pages/portfolio/activities/activities-page.module').then(
|
||||||
(m) => m.TransactionsPageModule
|
(m) => m.ActivitiesPageModule
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -2,12 +2,12 @@ import { NgModule } from '@angular/core';
|
|||||||
import { RouterModule, Routes } from '@angular/router';
|
import { RouterModule, Routes } from '@angular/router';
|
||||||
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
|
import { AuthGuard } from '@ghostfolio/client/core/auth.guard';
|
||||||
|
|
||||||
import { TransactionsPageComponent } from './transactions-page.component';
|
import { ActivitiesPageComponent } from './activities-page.component';
|
||||||
|
|
||||||
const routes: Routes = [
|
const routes: Routes = [
|
||||||
{
|
{
|
||||||
canActivate: [AuthGuard],
|
canActivate: [AuthGuard],
|
||||||
component: TransactionsPageComponent,
|
component: ActivitiesPageComponent,
|
||||||
path: '',
|
path: '',
|
||||||
title: $localize`Activities`
|
title: $localize`Activities`
|
||||||
}
|
}
|
||||||
@ -17,4 +17,4 @@ const routes: Routes = [
|
|||||||
imports: [RouterModule.forChild(routes)],
|
imports: [RouterModule.forChild(routes)],
|
||||||
exports: [RouterModule]
|
exports: [RouterModule]
|
||||||
})
|
})
|
||||||
export class TransactionsPageRoutingModule {}
|
export class ActivitiesPageRoutingModule {}
|
@ -10,7 +10,7 @@ import { PositionDetailDialog } from '@ghostfolio/client/components/position/pos
|
|||||||
import { DataService } from '@ghostfolio/client/services/data.service';
|
import { DataService } from '@ghostfolio/client/services/data.service';
|
||||||
import { IcsService } from '@ghostfolio/client/services/ics/ics.service';
|
import { IcsService } from '@ghostfolio/client/services/ics/ics.service';
|
||||||
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
|
import { ImpersonationStorageService } from '@ghostfolio/client/services/impersonation-storage.service';
|
||||||
import { ImportTransactionsService } from '@ghostfolio/client/services/import-transactions.service';
|
import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service';
|
||||||
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
import { UserService } from '@ghostfolio/client/services/user/user.service';
|
||||||
import { downloadAsFile } from '@ghostfolio/common/helper';
|
import { downloadAsFile } from '@ghostfolio/common/helper';
|
||||||
import { User } from '@ghostfolio/common/interfaces';
|
import { User } from '@ghostfolio/common/interfaces';
|
||||||
@ -22,23 +22,23 @@ import { DeviceDetectorService } from 'ngx-device-detector';
|
|||||||
import { Subject, Subscription } from 'rxjs';
|
import { Subject, Subscription } from 'rxjs';
|
||||||
import { takeUntil } from 'rxjs/operators';
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
|
||||||
import { CreateOrUpdateTransactionDialog } from './create-or-update-transaction-dialog/create-or-update-transaction-dialog.component';
|
import { CreateOrUpdateActivityDialog } from './create-or-update-activity-dialog/create-or-update-activity-dialog.component';
|
||||||
import { ImportTransactionDialog } from './import-transaction-dialog/import-transaction-dialog.component';
|
import { ImportActivitiesDialog } from './import-activities-dialog/import-activities-dialog.component';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
host: { class: 'page' },
|
host: { class: 'page' },
|
||||||
selector: 'gf-transactions-page',
|
selector: 'gf-activities-page',
|
||||||
styleUrls: ['./transactions-page.scss'],
|
styleUrls: ['./activities-page.scss'],
|
||||||
templateUrl: './transactions-page.html'
|
templateUrl: './activities-page.html'
|
||||||
})
|
})
|
||||||
export class TransactionsPageComponent implements OnDestroy, OnInit {
|
export class ActivitiesPageComponent implements OnDestroy, OnInit {
|
||||||
public activities: Activity[];
|
public activities: Activity[];
|
||||||
public defaultAccountId: string;
|
public defaultAccountId: string;
|
||||||
public deviceType: string;
|
public deviceType: string;
|
||||||
public hasImpersonationId: boolean;
|
public hasImpersonationId: boolean;
|
||||||
public hasPermissionToCreateOrder: boolean;
|
public hasPermissionToCreateActivity: boolean;
|
||||||
public hasPermissionToDeleteOrder: boolean;
|
public hasPermissionToDeleteActivity: boolean;
|
||||||
public hasPermissionToImportOrders: boolean;
|
public hasPermissionToImportActivities: boolean;
|
||||||
public routeQueryParams: Subscription;
|
public routeQueryParams: Subscription;
|
||||||
public user: User;
|
public user: User;
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
private dialog: MatDialog,
|
private dialog: MatDialog,
|
||||||
private icsService: IcsService,
|
private icsService: IcsService,
|
||||||
private impersonationStorageService: ImpersonationStorageService,
|
private impersonationStorageService: ImpersonationStorageService,
|
||||||
private importTransactionsService: ImportTransactionsService,
|
private importActivitiesService: ImportActivitiesService,
|
||||||
private route: ActivatedRoute,
|
private route: ActivatedRoute,
|
||||||
private router: Router,
|
private router: Router,
|
||||||
private snackBar: MatSnackBar,
|
private snackBar: MatSnackBar,
|
||||||
@ -61,14 +61,14 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
.pipe(takeUntil(this.unsubscribeSubject))
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
.subscribe((params) => {
|
.subscribe((params) => {
|
||||||
if (params['createDialog']) {
|
if (params['createDialog']) {
|
||||||
this.openCreateTransactionDialog();
|
this.openCreateActivityDialog();
|
||||||
} else if (params['editDialog']) {
|
} else if (params['editDialog']) {
|
||||||
if (this.activities) {
|
if (this.activities) {
|
||||||
const transaction = this.activities.find(({ id }) => {
|
const activity = this.activities.find(({ id }) => {
|
||||||
return id === params['transactionId'];
|
return id === params['activityId'];
|
||||||
});
|
});
|
||||||
|
|
||||||
this.openUpdateTransactionDialog(transaction);
|
this.openUpdateActivityDialog(activity);
|
||||||
} else {
|
} else {
|
||||||
this.router.navigate(['.'], { relativeTo: this.route });
|
this.router.navigate(['.'], { relativeTo: this.route });
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
.subscribe((aId) => {
|
.subscribe((aId) => {
|
||||||
this.hasImpersonationId = !!aId;
|
this.hasImpersonationId = !!aId;
|
||||||
|
|
||||||
this.hasPermissionToImportOrders =
|
this.hasPermissionToImportActivities =
|
||||||
hasPermission(globalPermissions, permissions.enableImport) &&
|
hasPermission(globalPermissions, permissions.enableImport) &&
|
||||||
!this.hasImpersonationId;
|
!this.hasImpersonationId;
|
||||||
});
|
});
|
||||||
@ -121,7 +121,10 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
.subscribe(({ activities }) => {
|
.subscribe(({ activities }) => {
|
||||||
this.activities = activities;
|
this.activities = activities;
|
||||||
|
|
||||||
if (this.hasPermissionToCreateOrder && this.activities?.length <= 0) {
|
if (
|
||||||
|
this.hasPermissionToCreateActivity &&
|
||||||
|
this.activities?.length <= 0
|
||||||
|
) {
|
||||||
this.router.navigate([], { queryParams: { createDialog: true } });
|
this.router.navigate([], { queryParams: { createDialog: true } });
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -129,11 +132,11 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public onCloneTransaction(aActivity: Activity) {
|
public onCloneActivity(aActivity: Activity) {
|
||||||
this.openCreateTransactionDialog(aActivity);
|
this.openCreateActivityDialog(aActivity);
|
||||||
}
|
}
|
||||||
|
|
||||||
public onDeleteTransaction(aId: string) {
|
public onDeleteActivity(aId: string) {
|
||||||
this.dataService
|
this.dataService
|
||||||
.deleteOrder(aId)
|
.deleteOrder(aId)
|
||||||
.pipe(takeUntil(this.unsubscribeSubject))
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
@ -221,7 +224,7 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await this.importTransactionsService.importJson({
|
await this.importActivitiesService.importJson({
|
||||||
content: content.activities
|
content: content.activities
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -234,7 +237,7 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
return;
|
return;
|
||||||
} else if (file.name.endsWith('.csv')) {
|
} else if (file.name.endsWith('.csv')) {
|
||||||
try {
|
try {
|
||||||
await this.importTransactionsService.importCsv({
|
await this.importActivitiesService.importCsv({
|
||||||
fileContent,
|
fileContent,
|
||||||
userAccounts: this.user.accounts
|
userAccounts: this.user.accounts
|
||||||
});
|
});
|
||||||
@ -267,14 +270,14 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
input.click();
|
input.click();
|
||||||
}
|
}
|
||||||
|
|
||||||
public onUpdateTransaction(aTransaction: OrderModel) {
|
public onUpdateActivity(aActivity: OrderModel) {
|
||||||
this.router.navigate([], {
|
this.router.navigate([], {
|
||||||
queryParams: { editDialog: true, transactionId: aTransaction.id }
|
queryParams: { activityId: aActivity.id, editDialog: true }
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public openUpdateTransactionDialog(activity: Activity): void {
|
public openUpdateActivityDialog(activity: Activity): void {
|
||||||
const dialogRef = this.dialog.open(CreateOrUpdateTransactionDialog, {
|
const dialogRef = this.dialog.open(CreateOrUpdateActivityDialog, {
|
||||||
data: {
|
data: {
|
||||||
activity,
|
activity,
|
||||||
accounts: this.user?.accounts?.filter((account) => {
|
accounts: this.user?.accounts?.filter((account) => {
|
||||||
@ -321,7 +324,7 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
}) {
|
}) {
|
||||||
this.snackBar.dismiss();
|
this.snackBar.dismiss();
|
||||||
|
|
||||||
this.dialog.open(ImportTransactionDialog, {
|
this.dialog.open(ImportActivitiesDialog, {
|
||||||
data: {
|
data: {
|
||||||
activities,
|
activities,
|
||||||
deviceType: this.deviceType,
|
deviceType: this.deviceType,
|
||||||
@ -343,14 +346,14 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private openCreateTransactionDialog(aActivity?: Activity): void {
|
private openCreateActivityDialog(aActivity?: Activity): void {
|
||||||
this.userService
|
this.userService
|
||||||
.get()
|
.get()
|
||||||
.pipe(takeUntil(this.unsubscribeSubject))
|
.pipe(takeUntil(this.unsubscribeSubject))
|
||||||
.subscribe((user) => {
|
.subscribe((user) => {
|
||||||
this.updateUser(user);
|
this.updateUser(user);
|
||||||
|
|
||||||
const dialogRef = this.dialog.open(CreateOrUpdateTransactionDialog, {
|
const dialogRef = this.dialog.open(CreateOrUpdateActivityDialog, {
|
||||||
data: {
|
data: {
|
||||||
accounts: this.user?.accounts?.filter((account) => {
|
accounts: this.user?.accounts?.filter((account) => {
|
||||||
return account.accountType === 'SECURITIES';
|
return account.accountType === 'SECURITIES';
|
||||||
@ -438,11 +441,11 @@ export class TransactionsPageComponent implements OnDestroy, OnInit {
|
|||||||
return account.isDefault;
|
return account.isDefault;
|
||||||
})?.id;
|
})?.id;
|
||||||
|
|
||||||
this.hasPermissionToCreateOrder = hasPermission(
|
this.hasPermissionToCreateActivity = hasPermission(
|
||||||
this.user.permissions,
|
this.user.permissions,
|
||||||
permissions.createOrder
|
permissions.createOrder
|
||||||
);
|
);
|
||||||
this.hasPermissionToDeleteOrder = hasPermission(
|
this.hasPermissionToDeleteActivity = hasPermission(
|
||||||
this.user.permissions,
|
this.user.permissions,
|
||||||
permissions.deleteOrder
|
permissions.deleteOrder
|
||||||
);
|
);
|
@ -6,14 +6,14 @@
|
|||||||
[activities]="activities"
|
[activities]="activities"
|
||||||
[baseCurrency]="user?.settings?.baseCurrency"
|
[baseCurrency]="user?.settings?.baseCurrency"
|
||||||
[deviceType]="deviceType"
|
[deviceType]="deviceType"
|
||||||
[hasPermissionToCreateActivity]="hasPermissionToCreateOrder"
|
[hasPermissionToCreateActivity]="hasPermissionToCreateActivity"
|
||||||
[hasPermissionToExportActivities]="!hasImpersonationId"
|
[hasPermissionToExportActivities]="!hasImpersonationId"
|
||||||
[hasPermissionToImportActivities]="hasPermissionToImportOrders"
|
[hasPermissionToImportActivities]="hasPermissionToImportActivities"
|
||||||
[locale]="user?.settings?.locale"
|
[locale]="user?.settings?.locale"
|
||||||
[showActions]="!hasImpersonationId && hasPermissionToDeleteOrder && !user.settings.isRestrictedView"
|
[showActions]="!hasImpersonationId && hasPermissionToDeleteActivity && !user.settings.isRestrictedView"
|
||||||
(activityDeleted)="onDeleteTransaction($event)"
|
(activityDeleted)="onDeleteActivity($event)"
|
||||||
(activityToClone)="onCloneTransaction($event)"
|
(activityToClone)="onCloneActivity($event)"
|
||||||
(activityToUpdate)="onUpdateTransaction($event)"
|
(activityToUpdate)="onUpdateActivity($event)"
|
||||||
(export)="onExport($event)"
|
(export)="onExport($event)"
|
||||||
(exportDrafts)="onExportDrafts($event)"
|
(exportDrafts)="onExportDrafts($event)"
|
||||||
(import)="onImport()"
|
(import)="onImport()"
|
||||||
@ -22,7 +22,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
*ngIf="!hasImpersonationId && hasPermissionToCreateOrder && !user.settings.isRestrictedView"
|
*ngIf="!hasImpersonationId && hasPermissionToCreateActivity && !user.settings.isRestrictedView"
|
||||||
class="fab-container"
|
class="fab-container"
|
||||||
>
|
>
|
||||||
<a
|
<a
|
@ -0,0 +1,29 @@
|
|||||||
|
import { CommonModule } from '@angular/common';
|
||||||
|
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
||||||
|
import { MatButtonModule } from '@angular/material/button';
|
||||||
|
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
||||||
|
import { RouterModule } from '@angular/router';
|
||||||
|
import { ImportActivitiesService } from '@ghostfolio/client/services/import-activities.service';
|
||||||
|
import { GfActivitiesTableModule } from '@ghostfolio/ui/activities-table/activities-table.module';
|
||||||
|
|
||||||
|
import { GfCreateOrUpdateActivityDialogModule } from './create-or-update-activity-dialog/create-or-update-activity-dialog.module';
|
||||||
|
import { GfImportActivitiesDialogModule } from './import-activities-dialog/import-activities-dialog.module';
|
||||||
|
import { ActivitiesPageRoutingModule } from './activities-page-routing.module';
|
||||||
|
import { ActivitiesPageComponent } from './activities-page.component';
|
||||||
|
|
||||||
|
@NgModule({
|
||||||
|
declarations: [ActivitiesPageComponent],
|
||||||
|
imports: [
|
||||||
|
ActivitiesPageRoutingModule,
|
||||||
|
CommonModule,
|
||||||
|
GfActivitiesTableModule,
|
||||||
|
GfCreateOrUpdateActivityDialogModule,
|
||||||
|
GfImportActivitiesDialogModule,
|
||||||
|
MatButtonModule,
|
||||||
|
MatSnackBarModule,
|
||||||
|
RouterModule
|
||||||
|
],
|
||||||
|
providers: [ImportActivitiesService],
|
||||||
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
|
})
|
||||||
|
export class ActivitiesPageModule {}
|
@ -28,16 +28,16 @@ import {
|
|||||||
takeUntil
|
takeUntil
|
||||||
} from 'rxjs/operators';
|
} from 'rxjs/operators';
|
||||||
|
|
||||||
import { CreateOrUpdateTransactionDialogParams } from './interfaces/interfaces';
|
import { CreateOrUpdateActivityDialogParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
host: { class: 'h-100' },
|
host: { class: 'h-100' },
|
||||||
selector: 'gf-create-or-update-transaction-dialog',
|
selector: 'gf-create-or-update-activity-dialog',
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
styleUrls: ['./create-or-update-transaction-dialog.scss'],
|
styleUrls: ['./create-or-update-activity-dialog.scss'],
|
||||||
templateUrl: 'create-or-update-transaction-dialog.html'
|
templateUrl: 'create-or-update-activity-dialog.html'
|
||||||
})
|
})
|
||||||
export class CreateOrUpdateTransactionDialog implements OnDestroy {
|
export class CreateOrUpdateActivityDialog implements OnDestroy {
|
||||||
@ViewChild('autocomplete') autocomplete;
|
@ViewChild('autocomplete') autocomplete;
|
||||||
|
|
||||||
public activityForm: FormGroup;
|
public activityForm: FormGroup;
|
||||||
@ -60,10 +60,10 @@ export class CreateOrUpdateTransactionDialog implements OnDestroy {
|
|||||||
|
|
||||||
public constructor(
|
public constructor(
|
||||||
private changeDetectorRef: ChangeDetectorRef,
|
private changeDetectorRef: ChangeDetectorRef,
|
||||||
@Inject(MAT_DIALOG_DATA) public data: CreateOrUpdateTransactionDialogParams,
|
@Inject(MAT_DIALOG_DATA) public data: CreateOrUpdateActivityDialogParams,
|
||||||
private dataService: DataService,
|
private dataService: DataService,
|
||||||
private dateAdapter: DateAdapter<any>,
|
private dateAdapter: DateAdapter<any>,
|
||||||
public dialogRef: MatDialogRef<CreateOrUpdateTransactionDialog>,
|
public dialogRef: MatDialogRef<CreateOrUpdateActivityDialog>,
|
||||||
private formBuilder: FormBuilder,
|
private formBuilder: FormBuilder,
|
||||||
@Inject(MAT_DATE_LOCALE) private locale: string
|
@Inject(MAT_DATE_LOCALE) private locale: string
|
||||||
) {}
|
) {}
|
@ -13,10 +13,10 @@ import { MatSelectModule } from '@angular/material/select';
|
|||||||
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
|
import { GfSymbolModule } from '@ghostfolio/client/pipes/symbol/symbol.module';
|
||||||
import { GfValueModule } from '@ghostfolio/ui/value';
|
import { GfValueModule } from '@ghostfolio/ui/value';
|
||||||
|
|
||||||
import { CreateOrUpdateTransactionDialog } from './create-or-update-transaction-dialog.component';
|
import { CreateOrUpdateActivityDialog } from './create-or-update-activity-dialog.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [CreateOrUpdateTransactionDialog],
|
declarations: [CreateOrUpdateActivityDialog],
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
GfSymbolModule,
|
GfSymbolModule,
|
||||||
@ -35,4 +35,4 @@ import { CreateOrUpdateTransactionDialog } from './create-or-update-transaction-
|
|||||||
],
|
],
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
})
|
})
|
||||||
export class GfCreateOrUpdateTransactionDialogModule {}
|
export class GfCreateOrUpdateActivityDialogModule {}
|
@ -2,7 +2,7 @@ import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interf
|
|||||||
import { User } from '@ghostfolio/common/interfaces';
|
import { User } from '@ghostfolio/common/interfaces';
|
||||||
import { Account } from '@prisma/client';
|
import { Account } from '@prisma/client';
|
||||||
|
|
||||||
export interface CreateOrUpdateTransactionDialogParams {
|
export interface CreateOrUpdateActivityDialogParams {
|
||||||
accountId: string;
|
accountId: string;
|
||||||
accounts: Account[];
|
accounts: Account[];
|
||||||
activity: Activity;
|
activity: Activity;
|
@ -7,22 +7,22 @@ import {
|
|||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { Subject } from 'rxjs';
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
import { ImportTransactionDialogParams } from './interfaces/interfaces';
|
import { ImportActivitiesDialogParams } from './interfaces/interfaces';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
selector: 'gf-import-transaction-dialog',
|
selector: 'gf-import-activities-dialog',
|
||||||
styleUrls: ['./import-transaction-dialog.scss'],
|
styleUrls: ['./import-activities-dialog.scss'],
|
||||||
templateUrl: 'import-transaction-dialog.html'
|
templateUrl: 'import-activities-dialog.html'
|
||||||
})
|
})
|
||||||
export class ImportTransactionDialog implements OnDestroy {
|
export class ImportActivitiesDialog implements OnDestroy {
|
||||||
public details: any[] = [];
|
public details: any[] = [];
|
||||||
|
|
||||||
private unsubscribeSubject = new Subject<void>();
|
private unsubscribeSubject = new Subject<void>();
|
||||||
|
|
||||||
public constructor(
|
public constructor(
|
||||||
@Inject(MAT_DIALOG_DATA) public data: ImportTransactionDialogParams,
|
@Inject(MAT_DIALOG_DATA) public data: ImportActivitiesDialogParams,
|
||||||
public dialogRef: MatDialogRef<ImportTransactionDialog>
|
public dialogRef: MatDialogRef<ImportActivitiesDialog>
|
||||||
) {}
|
) {}
|
||||||
|
|
||||||
public ngOnInit() {
|
public ngOnInit() {
|
@ -6,10 +6,10 @@ import { MatExpansionModule } from '@angular/material/expansion';
|
|||||||
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
|
import { GfDialogFooterModule } from '@ghostfolio/client/components/dialog-footer/dialog-footer.module';
|
||||||
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';
|
import { GfDialogHeaderModule } from '@ghostfolio/client/components/dialog-header/dialog-header.module';
|
||||||
|
|
||||||
import { ImportTransactionDialog } from './import-transaction-dialog.component';
|
import { ImportActivitiesDialog } from './import-activities-dialog.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [ImportTransactionDialog],
|
declarations: [ImportActivitiesDialog],
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
GfDialogFooterModule,
|
GfDialogFooterModule,
|
||||||
@ -20,4 +20,4 @@ import { ImportTransactionDialog } from './import-transaction-dialog.component';
|
|||||||
],
|
],
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
||||||
})
|
})
|
||||||
export class GfImportTransactionDialogModule {}
|
export class GfImportActivitiesDialogModule {}
|
@ -1,4 +1,4 @@
|
|||||||
export interface ImportTransactionDialogParams {
|
export interface ImportActivitiesDialogParams {
|
||||||
activities: any[];
|
activities: any[];
|
||||||
deviceType: string;
|
deviceType: string;
|
||||||
messages: string[];
|
messages: string[];
|
@ -1,30 +0,0 @@
|
|||||||
import { CommonModule } from '@angular/common';
|
|
||||||
import { CUSTOM_ELEMENTS_SCHEMA, NgModule } from '@angular/core';
|
|
||||||
import { MatButtonModule } from '@angular/material/button';
|
|
||||||
import { MatSnackBarModule } from '@angular/material/snack-bar';
|
|
||||||
import { RouterModule } from '@angular/router';
|
|
||||||
import { ImportTransactionsService } from '@ghostfolio/client/services/import-transactions.service';
|
|
||||||
import { GfActivitiesTableModule } from '@ghostfolio/ui/activities-table/activities-table.module';
|
|
||||||
|
|
||||||
import { GfCreateOrUpdateTransactionDialogModule } from './create-or-update-transaction-dialog/create-or-update-transaction-dialog.module';
|
|
||||||
import { GfImportTransactionDialogModule } from './import-transaction-dialog/import-transaction-dialog.module';
|
|
||||||
import { TransactionsPageRoutingModule } from './transactions-page-routing.module';
|
|
||||||
import { TransactionsPageComponent } from './transactions-page.component';
|
|
||||||
|
|
||||||
@NgModule({
|
|
||||||
declarations: [TransactionsPageComponent],
|
|
||||||
exports: [],
|
|
||||||
imports: [
|
|
||||||
CommonModule,
|
|
||||||
GfActivitiesTableModule,
|
|
||||||
GfCreateOrUpdateTransactionDialogModule,
|
|
||||||
GfImportTransactionDialogModule,
|
|
||||||
MatButtonModule,
|
|
||||||
MatSnackBarModule,
|
|
||||||
RouterModule,
|
|
||||||
TransactionsPageRoutingModule
|
|
||||||
],
|
|
||||||
providers: [ImportTransactionsService],
|
|
||||||
schemas: [CUSTOM_ELEMENTS_SCHEMA]
|
|
||||||
})
|
|
||||||
export class TransactionsPageModule {}
|
|
@ -11,7 +11,7 @@ import { catchError } from 'rxjs/operators';
|
|||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
})
|
})
|
||||||
export class ImportTransactionsService {
|
export class ImportActivitiesService {
|
||||||
private static ACCOUNT_KEYS = ['account', 'accountid'];
|
private static ACCOUNT_KEYS = ['account', 'accountid'];
|
||||||
private static CURRENCY_KEYS = ['ccy', 'currency'];
|
private static CURRENCY_KEYS = ['ccy', 'currency'];
|
||||||
private static DATA_SOURCE_KEYS = ['datasource'];
|
private static DATA_SOURCE_KEYS = ['datasource'];
|
||||||
@ -90,7 +90,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.ACCOUNT_KEYS) {
|
for (const key of ImportActivitiesService.ACCOUNT_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
return userAccounts.find((account) => {
|
return userAccounts.find((account) => {
|
||||||
return (
|
return (
|
||||||
@ -115,7 +115,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.CURRENCY_KEYS) {
|
for (const key of ImportActivitiesService.CURRENCY_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
return item[key];
|
return item[key];
|
||||||
}
|
}
|
||||||
@ -130,7 +130,7 @@ export class ImportTransactionsService {
|
|||||||
private parseDataSource({ item }: { item: any }) {
|
private parseDataSource({ item }: { item: any }) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.DATA_SOURCE_KEYS) {
|
for (const key of ImportActivitiesService.DATA_SOURCE_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
return DataSource[item[key].toUpperCase()];
|
return DataSource[item[key].toUpperCase()];
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ export class ImportTransactionsService {
|
|||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
let date: string;
|
let date: string;
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.DATE_KEYS) {
|
for (const key of ImportActivitiesService.DATE_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
if (isMatch(item[key], 'dd-MM-yyyy')) {
|
if (isMatch(item[key], 'dd-MM-yyyy')) {
|
||||||
date = parse(item[key], 'dd-MM-yyyy', new Date()).toISOString();
|
date = parse(item[key], 'dd-MM-yyyy', new Date()).toISOString();
|
||||||
@ -186,7 +186,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.FEE_KEYS) {
|
for (const key of ImportActivitiesService.FEE_KEYS) {
|
||||||
if (isFinite(item[key])) {
|
if (isFinite(item[key])) {
|
||||||
return item[key];
|
return item[key];
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.QUANTITY_KEYS) {
|
for (const key of ImportActivitiesService.QUANTITY_KEYS) {
|
||||||
if (isFinite(item[key])) {
|
if (isFinite(item[key])) {
|
||||||
return item[key];
|
return item[key];
|
||||||
}
|
}
|
||||||
@ -232,7 +232,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.SYMBOL_KEYS) {
|
for (const key of ImportActivitiesService.SYMBOL_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
return item[key];
|
return item[key];
|
||||||
}
|
}
|
||||||
@ -255,7 +255,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.TYPE_KEYS) {
|
for (const key of ImportActivitiesService.TYPE_KEYS) {
|
||||||
if (item[key]) {
|
if (item[key]) {
|
||||||
switch (item[key].toLowerCase()) {
|
switch (item[key].toLowerCase()) {
|
||||||
case 'buy':
|
case 'buy':
|
||||||
@ -289,7 +289,7 @@ export class ImportTransactionsService {
|
|||||||
}) {
|
}) {
|
||||||
item = this.lowercaseKeys(item);
|
item = this.lowercaseKeys(item);
|
||||||
|
|
||||||
for (const key of ImportTransactionsService.UNIT_PRICE_KEYS) {
|
for (const key of ImportActivitiesService.UNIT_PRICE_KEYS) {
|
||||||
if (isFinite(item[key])) {
|
if (isFinite(item[key])) {
|
||||||
return item[key];
|
return item[key];
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user