From 7a19fc53b09e61eb4b26301506ff446356178cab Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Tue, 24 Dec 2024 13:30:43 +0100 Subject: [PATCH 1/8] Feature/improve activities import by isin for yahoo finance (#4140) * Allow activities import by isin even if multiple quotes found * Update changelog --- CHANGELOG.md | 6 ++++++ .../data-enhancer/yahoo-finance/yahoo-finance.service.ts | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74a108262..13862f5cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Improved support to import activities by `isin` in the _Yahoo Finance_ service + ## 2.130.0 - 2024-12-21 ### Added diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 6090b4f98..b71e3e316 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -166,7 +166,7 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { try { const { quotes } = await yahooFinance.search(symbol); - if (quotes.length === 1) { + if (quotes?.[0]?.symbol) { symbol = quotes[0].symbol; } } catch {} From 08a9202dea610f7ec5e3f198f2b765692088316a Mon Sep 17 00:00:00 2001 From: Akd11111 <70412728+Akd11111@users.noreply.github.com> Date: Tue, 24 Dec 2024 13:55:59 +0100 Subject: [PATCH 2/8] Feature/improve language localization for Polish (#4141) * Improve language localization for Polish * Update changelog --- CHANGELOG.md | 1 + apps/client/src/locales/messages.pl.xlf | 226 ++++++++++++------------ 2 files changed, 114 insertions(+), 113 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 13862f5cd..8c63b47cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Improved support to import activities by `isin` in the _Yahoo Finance_ service +- Improved the language localization for Polish (`pl`) ## 2.130.0 - 2024-12-21 diff --git a/apps/client/src/locales/messages.pl.xlf b/apps/client/src/locales/messages.pl.xlf index 8eaef221c..223c8a57f 100644 --- a/apps/client/src/locales/messages.pl.xlf +++ b/apps/client/src/locales/messages.pl.xlf @@ -2740,7 +2740,7 @@ Please set the amount of your emergency fund. - Proszę wprowadzić wysokość funduszu rezerwowego: + Wprowadź wysokość funduszu rezerwowego: apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 63 @@ -2836,7 +2836,7 @@ Portfolio Allocations - Alokacja portfela + Podział portfela apps/client/src/app/components/subscription-interstitial-dialog/subscription-interstitial-dialog.html 28 @@ -4356,7 +4356,7 @@ Import Dividends - Import Dividends + Impotruj Dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 86 @@ -4364,7 +4364,7 @@ Importing data... - Importing data... + Importowanie danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 124 @@ -4372,7 +4372,7 @@ Import has been completed - Import has been completed + Importowanie zakończone apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 132 @@ -4380,7 +4380,7 @@ Validating data... - Validating data... + Weryfikacja danych... apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts 238 @@ -4388,7 +4388,7 @@ Select Holding - Select Holding + Wybierz Inwestycje apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 20 @@ -4396,7 +4396,7 @@ Select File - Select File + Wybierz plik apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 22 @@ -4404,7 +4404,7 @@ Holding - Holding + Inwestycja apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 32 @@ -4416,7 +4416,7 @@ Load Dividends - Load Dividends + Załaduj dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 68 @@ -4424,7 +4424,7 @@ Choose or drop a file here - Choose or drop a file here + Wybierz lub przeciągnij plik tutaj apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 84 @@ -4432,7 +4432,7 @@ The following file formats are supported: - The following file formats are supported: + Obsługiwane są następujące formaty plików: apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 90 @@ -4440,7 +4440,7 @@ Select Dividends - Select Dividends + Wybierz dywidendy apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 113 @@ -4448,7 +4448,7 @@ Select Activities - Select Activities + Wybór działań apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 115 @@ -4456,7 +4456,7 @@ Back - Back + Wróc apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.html 144 @@ -4468,7 +4468,7 @@ Allocations - Allocations + Podziały apps/client/src/app/pages/portfolio/allocations/allocations-page-routing.module.ts 13 @@ -4480,7 +4480,7 @@ Allocations - Allocations + Podziały apps/client/src/app/pages/portfolio/allocations/allocations-page.html 4 @@ -4488,7 +4488,7 @@ Proportion of Net Worth - Proportion of Net Worth + Proporcja wartości netto apps/client/src/app/pages/portfolio/allocations/allocations-page.html 12 @@ -4496,7 +4496,7 @@ By Platform - By Platform + Wg. platformy apps/client/src/app/pages/portfolio/allocations/allocations-page.html 44 @@ -4504,7 +4504,7 @@ By Currency - By Currency + Wg. waluty apps/client/src/app/pages/portfolio/allocations/allocations-page.html 63 @@ -4512,7 +4512,7 @@ By Asset Class - By Asset Class + Wg. klasy aktywów apps/client/src/app/pages/portfolio/allocations/allocations-page.html 85 @@ -4520,7 +4520,7 @@ By Holding - By Holding + Wg. inwestycji apps/client/src/app/pages/portfolio/allocations/allocations-page.html 107 @@ -4528,7 +4528,7 @@ By Sector - By Sector + Wg. sektora apps/client/src/app/pages/portfolio/allocations/allocations-page.html 130 @@ -4536,7 +4536,7 @@ By Continent - By Continent + Wg. kontynentu apps/client/src/app/pages/portfolio/allocations/allocations-page.html 153 @@ -4544,7 +4544,7 @@ By Market - By Market + Wg. rynku apps/client/src/app/pages/portfolio/allocations/allocations-page.html 175 @@ -4552,7 +4552,7 @@ Regions - Regions + Regiony apps/client/src/app/pages/portfolio/allocations/allocations-page.html 198 @@ -4620,7 +4620,7 @@ By Account - By Account + Wg. kont apps/client/src/app/pages/portfolio/allocations/allocations-page.html 286 @@ -4628,7 +4628,7 @@ By ETF Provider - By ETF Provider + Wg. Dostawcy ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html 306 @@ -4636,7 +4636,7 @@ By Country - By Country + Wg. kraju apps/client/src/app/pages/portfolio/allocations/allocations-page.html 264 @@ -4644,7 +4644,7 @@ Analysis - Analysis + Analiza apps/client/src/app/pages/portfolio/analysis/analysis-page-routing.module.ts 13 @@ -4656,7 +4656,7 @@ Dividend - Dividend + Dywidenda apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 37 @@ -4668,7 +4668,7 @@ Deposit - Deposit + Depozyt libs/ui/src/lib/fire-calculator/fire-calculator.component.ts 361 @@ -4684,7 +4684,7 @@ Yearly - Corocznie + Rocznie apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 50 @@ -4700,7 +4700,7 @@ Top - Top + Największe wzrosty apps/client/src/app/pages/portfolio/analysis/analysis-page.html 165 @@ -4708,7 +4708,7 @@ Bottom - Bottom + Największy spadek apps/client/src/app/pages/portfolio/analysis/analysis-page.html 214 @@ -4716,7 +4716,7 @@ Portfolio Evolution - Portfolio Evolution + Rozwój portfela apps/client/src/app/pages/portfolio/analysis/analysis-page.html 267 @@ -4724,7 +4724,7 @@ Investment Timeline - Investment Timeline + Oś czasu inwestycji apps/client/src/app/pages/portfolio/analysis/analysis-page.html 294 @@ -4732,7 +4732,7 @@ Current Streak - Current Streak + Obecna passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 315 @@ -4740,7 +4740,7 @@ Longest Streak - Longest Streak + Najdłuższa passa apps/client/src/app/pages/portfolio/analysis/analysis-page.html 324 @@ -4748,7 +4748,7 @@ Dividend Timeline - Dividend Timeline + Oś czasu dywidend apps/client/src/app/pages/portfolio/analysis/analysis-page.html 351 @@ -4756,7 +4756,7 @@ FIRE - FIRE + F.I.R.E. apps/client/src/app/pages/portfolio/fire/fire-page.html 4 @@ -4780,7 +4780,7 @@ Currency Cluster Risks - Currency Cluster Risks + Ryzyko związane z klastrem walutowym apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 58 @@ -4788,7 +4788,7 @@ Account Cluster Risks - Account Cluster Risks + Ryzyko związane z klastrem kont apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 106 @@ -4796,7 +4796,7 @@ Holdings - Holdings + Inwestycje apps/client/src/app/components/account-detail-dialog/account-detail-dialog.html 79 @@ -4888,7 +4888,7 @@ Portfolio Performance - Efektywność Portfela + Wyniki portfela apps/client/src/app/pages/pricing/pricing-page.html 53 @@ -5008,7 +5008,7 @@ Get Started - Get Started + Rozpocznij apps/client/src/app/pages/landing/landing-page.html 446 @@ -5016,7 +5016,7 @@ It’s free. - It’s free. + Jest bezpłatny. apps/client/src/app/pages/pricing/pricing-page.html 327 @@ -5024,7 +5024,7 @@ Hello, has shared a Portfolio with you! - Hello, has shared a Portfolio with you! + Witaj, udostępnił Ci Portfel apps/client/src/app/pages/public/public-page.html 4 @@ -5032,7 +5032,7 @@ Currencies - Currencies + Waluty apps/client/src/app/pages/public/public-page.html 88 @@ -5040,7 +5040,7 @@ Continents - Continents + Kontynenty apps/client/src/app/pages/public/public-page.html 124 @@ -5048,7 +5048,7 @@ Ghostfolio empowers you to keep track of your wealth. - Ghostfolio empowers you to keep track of your wealth. + Ghostfolio umożliwia śledzenie wartości swojego majątku. apps/client/src/app/pages/public/public-page.html 215 @@ -5056,7 +5056,7 @@ Registration - Registration + Rejestracja apps/client/src/app/pages/register/register-page-routing.module.ts 13 @@ -5064,7 +5064,7 @@ Continue with Internet Identity - Continue with Internet Identity + Kontynuuj z tożsamością internetową apps/client/src/app/pages/register/register-page.html 42 @@ -5072,7 +5072,7 @@ Continue with Google - Continue with Google + Zaloguj z Google apps/client/src/app/pages/register/register-page.html 53 @@ -5080,7 +5080,7 @@ Copy to clipboard - Copy to clipboard + Kopiuj do schowka apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 26 @@ -5088,7 +5088,7 @@ I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. - I agree to have stored my Security Token from above in a secure place. If I lose it, I cannot get my account back. + Wyrażam zgodę na przechowywanie mojego Tokenu zabezpieczającego w bezpiecznym miejscu. Jego utrata nie pozwoli odzyskać konta! apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 32 @@ -5096,7 +5096,7 @@ Agree and continue - Agree and continue + Zgadzam się i kontynuuję apps/client/src/app/pages/register/show-access-token-dialog/show-access-token-dialog.html 45 @@ -5104,7 +5104,7 @@ Personal Finance Tools - Personal Finance Tools + Narzędzia finansów osobistych apps/client/src/app/pages/resources/personal-finance-tools/personal-finance-tools-page-routing.module.ts 14 @@ -5324,7 +5324,7 @@ Free Plan - Darmowy Plan + Plan Darmowy apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 248 @@ -5332,7 +5332,7 @@ Notes - Notes + Notatki apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 302 @@ -5584,7 +5584,7 @@ Asset Profiles - Asset Profiles + Profile aktywów libs/ui/src/lib/assistant/assistant.html 67 @@ -5616,7 +5616,7 @@ from ATH - from ATH + od ATH libs/ui/src/lib/benchmark/benchmark.component.html 83 @@ -5632,7 +5632,7 @@ Savings Rate per Month - Savings Rate per Month + Miesięczna stopa oszczędności libs/ui/src/lib/fire-calculator/fire-calculator.component.html 10 @@ -5648,7 +5648,7 @@ Retirement Date - Retirement Date + Data przejścia na emeryturę libs/ui/src/lib/fire-calculator/fire-calculator.component.html 32 @@ -5684,7 +5684,7 @@ Allocation - Allocation + Podział libs/ui/src/lib/holdings-table/holdings-table.component.html 98 @@ -5740,7 +5740,7 @@ Core - Core + Główny libs/ui/src/lib/i18n.ts 10 @@ -5820,7 +5820,7 @@ Month - Month + Miesiąc libs/ui/src/lib/i18n.ts 21 @@ -5828,7 +5828,7 @@ Months - Months + Miesiące libs/ui/src/lib/i18n.ts 22 @@ -5836,7 +5836,7 @@ Other - Other + Inne libs/ui/src/lib/i18n.ts 23 @@ -5872,7 +5872,7 @@ Symbol - Symbol + Symbol libs/ui/src/lib/i18n.ts 28 @@ -5880,7 +5880,7 @@ Tag - Tag + Tag libs/ui/src/lib/i18n.ts 29 @@ -5888,7 +5888,7 @@ Year - Year + Rok libs/ui/src/lib/i18n.ts 30 @@ -5896,7 +5896,7 @@ Years - Years + Lata libs/ui/src/lib/i18n.ts 31 @@ -5920,7 +5920,7 @@ Valuable - Valuable + Kosztowności libs/ui/src/lib/i18n.ts 39 @@ -5928,7 +5928,7 @@ Liability - Liability + Zobowiązanie libs/ui/src/lib/i18n.ts 40 @@ -5936,7 +5936,7 @@ Sell - Sell + Sprzedaj libs/ui/src/lib/i18n.ts 41 @@ -6032,7 +6032,7 @@ Stock - Stock + Akcje libs/ui/src/lib/i18n.ts 58 @@ -6176,7 +6176,7 @@ Starting from - Starting from + Począwszy od apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 289 @@ -6188,7 +6188,7 @@ year - year + rok apps/client/src/app/pages/resources/personal-finance-tools/product-page.html 290 @@ -6280,7 +6280,7 @@ Private - Private + Prywatny apps/client/src/app/components/user-account-access/create-or-update-access-dialog/create-or-update-access-dialog.html 24 @@ -6308,7 +6308,7 @@ Investment - Investment + Inwestycje apps/client/src/app/pages/portfolio/analysis/analysis-page.component.ts 41 @@ -6324,7 +6324,7 @@ Absolute Asset Performance - Absolute Asset Performance + Łączny wynik aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html 28 @@ -6332,7 +6332,7 @@ Asset Performance - Asset Performance + Wyniki aktywów apps/client/src/app/pages/portfolio/analysis/analysis-page.html 49 @@ -6340,7 +6340,7 @@ Absolute Currency Performance - Absolute Currency Performance + Łączny wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html 71 @@ -6348,7 +6348,7 @@ Currency Performance - Currency Performance + Wynik walut apps/client/src/app/pages/portfolio/analysis/analysis-page.html 95 @@ -6356,7 +6356,7 @@ Absolute Net Performance - Absolute Net Performance + Łączna wartość netto apps/client/src/app/pages/portfolio/analysis/analysis-page.html 118 @@ -6364,7 +6364,7 @@ Net Performance - Net Performance + Wynik netto apps/client/src/app/pages/portfolio/analysis/analysis-page.html 137 @@ -6372,7 +6372,7 @@ Week to date - Week to date + Dotychczasowy tydzień libs/ui/src/lib/assistant/assistant.component.ts 223 @@ -6388,7 +6388,7 @@ Month to date - Month to date + Od początku miesiąca libs/ui/src/lib/assistant/assistant.component.ts 227 @@ -6404,7 +6404,7 @@ Year to date - Year to date + Od początku roku libs/ui/src/lib/assistant/assistant.component.ts 231 @@ -6448,7 +6448,7 @@ year - year + rok libs/ui/src/lib/assistant/assistant.component.ts 235 @@ -6456,7 +6456,7 @@ years - years + lata libs/ui/src/lib/assistant/assistant.component.ts 257 @@ -6548,7 +6548,7 @@ Active - Active + Antywne apps/client/src/app/components/home-holdings/home-holdings.component.ts 35 @@ -6556,7 +6556,7 @@ Closed - Closed + Zamknięte apps/client/src/app/components/home-holdings/home-holdings.component.ts 36 @@ -6564,7 +6564,7 @@ Activity - Activity + Aktywność apps/client/src/app/components/holding-detail-dialog/holding-detail-dialog.html 207 @@ -6628,7 +6628,7 @@ Delete Activities - Delete Activities + Usuń aktywności libs/ui/src/lib/activities-table/activities-table.component.html 67 @@ -6668,7 +6668,7 @@ By ETF Holding - By ETF Holding + Wg. Holdingu ETF apps/client/src/app/pages/portfolio/allocations/allocations-page.html 333 @@ -7084,7 +7084,7 @@ Portfolio Snapshot - Portfolio Snapshot + Przegląd portfela apps/client/src/app/components/admin-jobs/admin-jobs.html 39 @@ -7108,7 +7108,7 @@ Threshold Min - Threshold Min + Próg minimalny apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 54 @@ -7116,7 +7116,7 @@ Threshold Max - Threshold Max + Próg maksymalny apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 92 @@ -7438,7 +7438,7 @@ Threshold range - Threshold range + Zakres progów apps/client/src/app/components/rule/rule-settings-dialog/rule-settings-dialog.html 9 @@ -7446,7 +7446,7 @@ Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy. - Ghostfolio X-ray uses static analysis to uncover potential issues and risks in your portfolio. Adjust the rules below and set custom thresholds to align with your personal investment strategy. + Ghostfolio X-ray wykorzystuje analizę statyczną do wykrywania potencjalnych problemów i zagrożeń w portfelu. Dostosuj poniższe zasady i ustaw niestandardowe progi, aby dostosować je do osobistej strategii inwestycyjnej. apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 5 @@ -7454,7 +7454,7 @@ Economic Market Cluster Risks - Economic Market Cluster Risks + Ryzyko związane z klastrem rynków gospodarczych apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 130 @@ -7462,7 +7462,7 @@ of - of + z apps/client/src/app/components/admin-settings/admin-settings.component.html 40 @@ -7470,7 +7470,7 @@ daily requests - daily requests + codzienne żądania apps/client/src/app/components/admin-settings/admin-settings.component.html 42 @@ -7546,7 +7546,7 @@ Ghostfolio Premium Data Provider API Key - Ghostfolio Premium Data Provider API Key + Klucz API dostawcy danych Premium Ghostfolio apps/client/src/app/components/user-account-membership/user-account-membership.component.ts 156 @@ -7562,7 +7562,7 @@ Tag - Tag + Tag libs/ui/src/lib/assistant/assistant.html 155 @@ -7570,7 +7570,7 @@ API Key - API Key + Klucz API libs/ui/src/lib/membership-card/membership-card.component.html 18 @@ -7578,7 +7578,7 @@ Generate Ghostfolio Premium Data Provider API key for self-hosted environments... - Generate Ghostfolio Premium Data Provider API key for self-hosted environments... + Generowanie klucza API Ghostfolio Premium Data Provider dla środowisk hostowanych samodzielnie... libs/ui/src/lib/membership-card/membership-card.component.html 26 @@ -7586,7 +7586,7 @@ out of - out of + poza apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 22 @@ -7594,7 +7594,7 @@ rules align with your portfolio. - rules align with your portfolio. + zasady zgodne z Twoim portfelem. apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 24 @@ -7602,7 +7602,7 @@ Save - Save + Zapisz apps/client/src/app/components/portfolio-summary/portfolio-summary.component.ts 61 @@ -7610,7 +7610,7 @@ Asset Class Cluster Risks - Asset Class Cluster Risks + Ryzyko klastra klasy aktywów apps/client/src/app/pages/portfolio/x-ray/x-ray-page.component.html 82 From bb04a3a74f53b98cc2506eac5771e72bb175fc7d Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 25 Dec 2024 09:50:09 +0100 Subject: [PATCH 3/8] Feature/extend personal finance tools 20241222 (#4136) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Morningstar® Portfolio Manager * Stock Rover * Wealthbrain --- libs/common/src/lib/personal-finance-tools.ts | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/libs/common/src/lib/personal-finance-tools.ts b/libs/common/src/lib/personal-finance-tools.ts index 1ec5fbbc2..63d5805cd 100644 --- a/libs/common/src/lib/personal-finance-tools.ts +++ b/libs/common/src/lib/personal-finance-tools.ts @@ -449,6 +449,16 @@ export const personalFinanceTools: Product[] = [ pricingPerYear: '$60', slogan: 'Gain financial control and keep your data private.' }, + { + hasFreePlan: true, + hasSelfHostingAbility: false, + key: 'morningstar-portfolio-manager', + languages: ['English'], + name: 'Morningstar® Portfolio Manager', + origin: 'United States', + slogan: + 'Track your equity, fund, investment trust, ETF and pension investments in one place.' + }, { founded: 2017, hasFreePlan: false, @@ -647,6 +657,16 @@ export const personalFinanceTools: Product[] = [ note: 'StockMarketEye was discontinued in 2023', slogan: 'A Powerful Portfolio & Investment Tracking App' }, + { + founded: 2011, + hasFreePlan: true, + key: 'stock-rover', + languages: ['English'], + name: 'Stock Rover', + origin: 'United States', + pricingPerYear: '$79.99', + slogan: 'Investment Research and Portfolio Management' + }, { hasFreePlan: true, hasSelfHostingAbility: false, @@ -705,6 +725,15 @@ export const personalFinanceTools: Product[] = [ pricingPerYear: '$600', slogan: 'Make Smarter Investments' }, + { + founded: 2019, + hasFreePlan: false, + key: 'wealthbrain', + languages: ['English'], + name: 'Wealthbrain', + origin: 'United Arab Emirates', + slogan: 'Portfolio Management System' + }, { founded: 2024, hasSelfHostingAbility: true, From 9a579dd884ebaf623e0341c53bd9fd0d2de364f5 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 25 Dec 2024 09:50:27 +0100 Subject: [PATCH 4/8] Feature/change access tab icon on account page (#4137) * Change icon * Update changelog --- CHANGELOG.md | 1 + .../src/app/pages/user-account/user-account-page.component.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c63b47cd..696e26d62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the usability of the link to manage access with a new icon - Improved support to import activities by `isin` in the _Yahoo Finance_ service - Improved the language localization for Polish (`pl`) diff --git a/apps/client/src/app/pages/user-account/user-account-page.component.ts b/apps/client/src/app/pages/user-account/user-account-page.component.ts index f8d68baa6..fb42e196d 100644 --- a/apps/client/src/app/pages/user-account/user-account-page.component.ts +++ b/apps/client/src/app/pages/user-account/user-account-page.component.ts @@ -42,7 +42,7 @@ export class UserAccountPageComponent implements OnDestroy, OnInit { showCondition: !!this.user?.subscription }, { - iconName: 'share-social-outline', + iconName: 'key-outline', label: $localize`Access`, path: ['/account', 'access'] } From f2638614d4b68530950d4e3c9a65a36121c3ebe4 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:05:57 +0100 Subject: [PATCH 5/8] Feature/improve search for asset profiles with manual data source in create or update activity dialog (#4142) * Improve search for asset profiles with MANUAL data source * Update changelog --- CHANGELOG.md | 1 + .../data-provider/data-provider.service.ts | 3 +- .../interfaces/data-provider.interface.ts | 1 + .../data-provider/manual/manual.service.ts | 46 +++++++++++-------- ...ate-or-update-activity-dialog.component.ts | 7 +-- 5 files changed, 32 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 696e26d62..bd21f635a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed +- Improved the search for asset profiles with `MANUAL` data source in the create or update activity dialog - Improved the usability of the link to manage access with a new icon - Improved support to import activities by `isin` in the _Yahoo Finance_ service - Improved the language localization for Polish (`pl`) diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 3faf5b583..7c0df7a9f 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -618,7 +618,8 @@ export class DataProviderService { promises.push( dataProviderService.search({ includeIndices, - query + query, + userId: user.id }) ); } diff --git a/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts b/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts index e448b4e15..5c316aac2 100644 --- a/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts +++ b/apps/api/src/services/data-provider/interfaces/data-provider.interface.ts @@ -79,4 +79,5 @@ export interface GetQuotesParams { export interface GetSearchParams { includeIndices?: boolean; query: string; + userId?: string; } diff --git a/apps/api/src/services/data-provider/manual/manual.service.ts b/apps/api/src/services/data-provider/manual/manual.service.ts index c3e274005..6f1c56f15 100644 --- a/apps/api/src/services/data-provider/manual/manual.service.ts +++ b/apps/api/src/services/data-provider/manual/manual.service.ts @@ -26,7 +26,6 @@ import { import { Injectable, Logger } from '@nestjs/common'; import { DataSource, SymbolProfile } from '@prisma/client'; import * as cheerio from 'cheerio'; -import { isUUID } from 'class-validator'; import { addDays, format, isBefore } from 'date-fns'; import got, { Headers } from 'got'; import * as jsonpath from 'jsonpath'; @@ -219,41 +218,48 @@ export class ManualService implements DataProviderInterface { return undefined; } - public async search({ query }: GetSearchParams): Promise { - let items = await this.prismaService.symbolProfile.findMany({ + public async search({ + query, + userId + }: GetSearchParams): Promise { + const items = await this.prismaService.symbolProfile.findMany({ select: { assetClass: true, assetSubClass: true, currency: true, dataSource: true, name: true, - symbol: true + symbol: true, + userId: true }, where: { - OR: [ + AND: [ { - dataSource: this.getName(), - name: { - mode: 'insensitive', - startsWith: query - } + dataSource: this.getName() }, { - dataSource: this.getName(), - symbol: { - mode: 'insensitive', - startsWith: query - } + OR: [ + { + name: { + mode: 'insensitive', + startsWith: query + } + }, + { + symbol: { + mode: 'insensitive', + startsWith: query + } + } + ] + }, + { + OR: [{ userId }, { userId: null }] } ] } }); - items = items.filter(({ symbol }) => { - // Remove UUID symbols (activities of type ITEM) - return !isUUID(symbol); - }); - return { items: items.map((item) => { return { ...item, dataProviderInfo: this.getDataProviderInfo() }; diff --git a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts index cb21c255d..feeb4abc8 100644 --- a/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts +++ b/apps/client/src/app/pages/portfolio/activities/create-or-update-activity-dialog/create-or-update-activity-dialog.component.ts @@ -20,7 +20,6 @@ import { MatAutocompleteSelectedEvent } from '@angular/material/autocomplete'; import { DateAdapter, MAT_DATE_LOCALE } from '@angular/material/core'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { AssetClass, AssetSubClass, Tag, Type } from '@prisma/client'; -import { isUUID } from 'class-validator'; import { isAfter, isToday } from 'date-fns'; import { EMPTY, Observable, Subject, lastValueFrom, of } from 'rxjs'; import { catchError, delay, map, startWith, takeUntil } from 'rxjs/operators'; @@ -476,10 +475,8 @@ export class CreateOrUpdateActivityDialog implements OnDestroy { fee: this.activityForm.get('fee').value, quantity: this.activityForm.get('quantity').value, symbol: - this.activityForm.get('searchSymbol').value?.symbol === undefined || - isUUID(this.activityForm.get('searchSymbol').value?.symbol) - ? this.activityForm.get('name').value - : this.activityForm.get('searchSymbol').value.symbol, + this.activityForm.get('searchSymbol')?.value?.symbol ?? + this.activityForm.get('name')?.value, tags: this.activityForm.get('tags').value, type: this.activityForm.get('type').value, unitPrice: this.activityForm.get('unitPrice').value From be4ac17a5cd86f944033c7485fc98a2a18e56f4c Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Wed, 25 Dec 2024 17:08:06 +0100 Subject: [PATCH 6/8] Release 2.131.0 (#4143) --- CHANGELOG.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd21f635a..beed10704 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## 2.131.0 - 2024-12-25 ### Changed diff --git a/package-lock.json b/package-lock.json index d715ccc9a..7ad5c59c1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "ghostfolio", - "version": "2.130.0", + "version": "2.131.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "ghostfolio", - "version": "2.130.0", + "version": "2.131.0", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { diff --git a/package.json b/package.json index 2eea5cc6a..84b49ca05 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ghostfolio", - "version": "2.130.0", + "version": "2.131.0", "homepage": "https://ghostfol.io", "license": "AGPL-3.0", "repository": "https://github.com/ghostfolio/ghostfolio", From 38908f0e19b4cfaf0ac4082ad16a5b81a7ebf1ca Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Thu, 26 Dec 2024 10:40:15 +0100 Subject: [PATCH 7/8] Feature/upgrade husky to version 9.1.7 (#4134) * Upgrade husky to version 9.1.7 * Update changelog --- CHANGELOG.md | 6 ++++++ package-lock.json | 8 ++++---- package.json | 2 +- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index beed10704..fdc0994e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Upgraded `husky` from version `9.1.6` to `9.1.7` + ## 2.131.0 - 2024-12-25 ### Changed diff --git a/package-lock.json b/package-lock.json index 7ad5c59c1..21889217d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -144,7 +144,7 @@ "eslint-plugin-cypress": "2.15.1", "eslint-plugin-import": "2.29.1", "eslint-plugin-storybook": "0.6.15", - "husky": "9.1.6", + "husky": "9.1.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.1.0", @@ -20798,9 +20798,9 @@ } }, "node_modules/husky": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", - "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, "license": "MIT", "bin": { diff --git a/package.json b/package.json index 84b49ca05..007330d56 100644 --- a/package.json +++ b/package.json @@ -190,7 +190,7 @@ "eslint-plugin-cypress": "2.15.1", "eslint-plugin-import": "2.29.1", "eslint-plugin-storybook": "0.6.15", - "husky": "9.1.6", + "husky": "9.1.7", "jest": "29.7.0", "jest-environment-jsdom": "29.7.0", "jest-preset-angular": "14.1.0", From c9047e7c17b9de26162d0ac6e5514078b87f21ca Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Fri, 27 Dec 2024 10:12:45 +0100 Subject: [PATCH 8/8] Feature/add user interface for received access (#4146) * Add user interface for received access * Update changelog --- CHANGELOG.md | 4 ++++ apps/api/src/app/user/user.service.ts | 4 +++- .../user-account-access.component.ts | 15 +++++++++++++-- .../user-account-access/user-account-access.html | 10 ++++++---- libs/common/src/lib/interfaces/user.interface.ts | 7 ++----- 5 files changed, 28 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fdc0994e5..c9cd8d29a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased +### Added + +- Added the user interface for received access from others + ### Changed - Upgraded `husky` from version `9.1.6` to `9.1.7` diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/app/user/user.service.ts index bac6ed19b..33e9a67da 100644 --- a/apps/api/src/app/user/user.service.ts +++ b/apps/api/src/app/user/user.service.ts @@ -89,6 +89,7 @@ export class UserService { }), this.tagService.getTagsForUser(id) ]); + const access = userData[0]; const firstActivity = userData[1]; let tags = userData[2]; @@ -119,7 +120,8 @@ export class UserService { access: access.map((accessItem) => { return { alias: accessItem.alias, - id: accessItem.id + id: accessItem.id, + permissions: accessItem.permissions }; }), accounts: Account, diff --git a/apps/client/src/app/components/user-account-access/user-account-access.component.ts b/apps/client/src/app/components/user-account-access/user-account-access.component.ts index 16a7627c9..02f7d1b8d 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.component.ts +++ b/apps/client/src/app/components/user-account-access/user-account-access.component.ts @@ -27,7 +27,8 @@ import { CreateOrUpdateAccessDialog } from './create-or-update-access-dialog/cre templateUrl: './user-account-access.html' }) export class UserAccountAccessComponent implements OnDestroy, OnInit { - public accesses: Access[]; + public accessesGet: Access[]; + public accessesGive: Access[]; public deviceType: string; public hasPermissionToCreateAccess: boolean; public hasPermissionToDeleteAccess: boolean; @@ -125,11 +126,21 @@ export class UserAccountAccessComponent implements OnDestroy, OnInit { } private update() { + this.accessesGet = this.user.access.map(({ alias, id, permissions }) => { + return { + alias, + id, + permissions, + grantee: $localize`Me`, + type: 'PRIVATE' + }; + }); + this.dataService .fetchAccesses() .pipe(takeUntil(this.unsubscribeSubject)) .subscribe((accesses) => { - this.accesses = accesses; + this.accessesGive = accesses; this.changeDetectorRef.markForCheck(); }); diff --git a/apps/client/src/app/components/user-account-access/user-account-access.html b/apps/client/src/app/components/user-account-access/user-account-access.html index e5d43cadc..efb918984 100644 --- a/apps/client/src/app/components/user-account-access/user-account-access.html +++ b/apps/client/src/app/components/user-account-access/user-account-access.html @@ -1,14 +1,16 @@
-

+ @if (accessesGet.length > 0) { +

Received Access

+ + } +

Granted Access @if (user?.subscription?.type === 'Basic') { }

[]; accounts: Account[]; dateOfFirstActivity: Date; id: string;