Browse Source

Support CSV file format of Yahoo Finance in activities import #2288 Fix Formatting

Passing all local tests/checks/build
pull/4056/head
Brandon Wortman 9 months ago
parent
commit
3aa1633d4f
  1. 22
      apps/client/src/app/services/import-activities.service.ts

22
apps/client/src/app/services/import-activities.service.ts

@ -2,7 +2,9 @@ import { CreateAccountDto } from '@ghostfolio/api/app/account/create-account.dto
import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto'; import { CreateOrderDto } from '@ghostfolio/api/app/order/create-order.dto';
import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface'; import { Activity } from '@ghostfolio/api/app/order/interfaces/activities.interface';
import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface'; import { SymbolItem } from '@ghostfolio/api/app/symbol/interfaces/symbol-item.interface';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
import { parseDate as parseDateHelper } from '@ghostfolio/common/helper'; import { parseDate as parseDateHelper } from '@ghostfolio/common/helper';
import { HttpClient } from '@angular/common/http'; import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core'; import { Injectable } from '@angular/core';
import { Account, DataSource, Type as ActivityType } from '@prisma/client'; import { Account, DataSource, Type as ActivityType } from '@prisma/client';
@ -10,7 +12,6 @@ import { isFinite } from 'lodash';
import { parse as csvToJson } from 'papaparse'; import { parse as csvToJson } from 'papaparse';
import { EMPTY, map, firstValueFrom } from 'rxjs'; import { EMPTY, map, firstValueFrom } from 'rxjs';
import { catchError } from 'rxjs/operators'; import { catchError } from 'rxjs/operators';
import { NotificationService } from '@ghostfolio/client/core/notification/notification.service';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
@ -230,12 +231,13 @@ export class ImportActivitiesService {
const symbol = this.parseSymbol({ content, index, item }); const symbol = this.parseSymbol({ content, index, item });
const dataSource = this.parseDataSource({ item }) ?? DataSource.YAHOO; const dataSource = this.parseDataSource({ item }) ?? DataSource.YAHOO;
return firstValueFrom(this.http return firstValueFrom(
.get<SymbolItem>(`/api/v1/symbol/${dataSource}/${symbol}`) this.http.get<SymbolItem>(`/api/v1/symbol/${dataSource}/${symbol}`).pipe(
.pipe(
map((response) => { map((response) => {
if (response?.currency) { if (response?.currency) {
console.warn(`activities.${index}.currency was not provided, using ${response.currency} from symbol data`); console.warn(
`activities.${index}.currency was not provided, using ${response.currency} from symbol data`
);
return response.currency; return response.currency;
} }
throw { throw {
@ -244,7 +246,7 @@ export class ImportActivitiesService {
}; };
}), }),
catchError((error) => { catchError((error) => {
console.warn("Failed to fetch currency from symbol service.", error); console.warn('Failed to fetch currency from symbol service.', error);
throw { throw {
activities: content, activities: content,
message: `activities.${index}.currency is not valid` message: `activities.${index}.currency is not valid`
@ -307,7 +309,9 @@ export class ImportActivitiesService {
} }
} }
this.warnings.push(`Activity ${index + 1}: Fee not provided, defaulting to 0`); this.warnings.push(
`Activity ${index + 1}: Fee not provided, defaulting to 0`
);
return 0; return 0;
} }
@ -390,7 +394,9 @@ export class ImportActivitiesService {
} }
} }
this.warnings.push(`Activity ${index + 1}: Type not provided, defaulting to BUY`); this.warnings.push(
`Activity ${index + 1}: Type not provided, defaulting to BUY`
);
return 'BUY'; return 'BUY';
} }

Loading…
Cancel
Save