Skip to content

Commit 1ff25ff

Browse files
shivampawmierin12buchen
committed
Add derived data series to statements of assets chart
Uses DerivedDataSeries to hold a reference to the underlying data series (base) and the aspect to be shown (ClientDataSeries). Issue: #3754 Issue: #4235 Issue: #4396 Co-authored-by: Shivam Paw <[email protected]> Co-authored-by: mierin12 <[email protected]> Co-authored-by: Andreas Buchen <[email protected]>
1 parent a1e6f78 commit 1ff25ff

26 files changed

+277
-18
lines changed

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/Messages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class Messages extends NLS
6565
public static String ChartSeriesBenchmarkSuffix;
6666
public static String ChartSeriesCopySeriesFromOtherChart;
6767
public static String ChartSeriesPickerAddBenchmark;
68+
public static String ChartSeriesPickerAddDerivedData;
6869
public static String ChartSeriesPickerAddItem;
6970
public static String ChartSeriesPickerColor;
7071
public static String ChartSeriesPickerDialogMsg;

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/dialogs/about.contributors.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,5 @@ cthiel
160160
myrdd
161161
mosswald82
162162
verglor
163-
liuhaoXD
163+
liuhaoXD
164+
shivampaw

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,8 @@ ChartSeriesCopySeriesFromOtherChart = Copy from
180180

181181
ChartSeriesPickerAddBenchmark = Add benchmark...
182182

183+
ChartSeriesPickerAddDerivedData = Add derived data series ...
184+
183185
ChartSeriesPickerAddItem = Add data series...
184186

185187
ChartSeriesPickerColor = Color...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_cs.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,8 @@ ChartSeriesCopySeriesFromOtherChart = Kop\u00EDrovat z
176176

177177
ChartSeriesPickerAddBenchmark = P\u0159idat benchmark...
178178

179+
ChartSeriesPickerAddDerivedData = P\u0159id\u00E1n\u00ED odvozen\u00FDch datov\u00FDch \u0159ad ...
180+
179181
ChartSeriesPickerAddItem = P\u0159idat datovou \u0159adu...
180182

181183
ChartSeriesPickerColor = Barva...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_da.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Kopier fra
173173

174174
ChartSeriesPickerAddBenchmark = Tilf\u00F8j ydeevne...
175175

176+
ChartSeriesPickerAddDerivedData = Tilf\u00F8j afledte dataserier ...
177+
176178
ChartSeriesPickerAddItem = Tilf\u00F8j dataserier...
177179

178180
ChartSeriesPickerColor = Farve...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_de.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = \u00DCbernehmen aus
173173

174174
ChartSeriesPickerAddBenchmark = Benchmark hinzuf\u00FCgen...
175175

176+
ChartSeriesPickerAddDerivedData = Abgeleitete Datenreihen hinzuf\u00FCgen ...
177+
176178
ChartSeriesPickerAddItem = Datenreihe hinzuf\u00FCgen...
177179

178180
ChartSeriesPickerColor = Farbe...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_es.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Incorporar las series de
173173

174174
ChartSeriesPickerAddBenchmark = A\u00F1adir series de referencia...
175175

176+
ChartSeriesPickerAddDerivedData = A\u00F1adir series de datos derivados ...
177+
176178
ChartSeriesPickerAddItem = A\u00F1adir series de datos...
177179

178180
ChartSeriesPickerColor = Color...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_fr.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,8 @@ ChartSeriesCopySeriesFromOtherChart = Copier de
174174

175175
ChartSeriesPickerAddBenchmark = Ajouter une r\u00E9f\u00E9rence/benchmark...
176176

177+
ChartSeriesPickerAddDerivedData = Ajouter des s\u00E9ries de donn\u00E9es d\u00E9riv\u00E9es ...
178+
177179
ChartSeriesPickerAddItem = Ajouter des s\u00E9ries de donn\u00E9es...
178180

179181
ChartSeriesPickerColor = Couleur...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_it.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Copia da
173173
174174
ChartSeriesPickerAddBenchmark = Aggiungi un benchmark
175175
176+
ChartSeriesPickerAddDerivedData = Aggiungere serie di dati derivati ...
177+
176178
ChartSeriesPickerAddItem = Aggiungi serie dati...
177179
178180
ChartSeriesPickerColor = Colore...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_nl.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Kopi\u00EBren van
173173
174174
ChartSeriesPickerAddBenchmark = Benchmark toevoegen...
175175
176+
ChartSeriesPickerAddDerivedData = Afgeleide gegevensreeksen toevoegen ...
177+
176178
ChartSeriesPickerAddItem = Gegevensreeks toevoegen...
177179
178180
ChartSeriesPickerColor = Kleur...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pl.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Kopiuj z
173173

174174
ChartSeriesPickerAddBenchmark = Dodaj benchmark\u2026
175175

176+
ChartSeriesPickerAddDerivedData = Dodaj pochodne serie danych ...
177+
176178
ChartSeriesPickerAddItem = Dodaj serie danych ...
177179

178180
ChartSeriesPickerColor = Kolor...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Copiar de
173173

174174
ChartSeriesPickerAddBenchmark = Adicionar refer\u00EAncia...
175175

176+
ChartSeriesPickerAddDerivedData = Adicionar s\u00E9ries de dados derivados ...
177+
176178
ChartSeriesPickerAddItem = Adicionar s\u00E9rie de dados...
177179

178180
ChartSeriesPickerColor = Cor...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_pt_BR.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Copiar de
173173

174174
ChartSeriesPickerAddBenchmark = Adicionar Benchmark...
175175

176+
ChartSeriesPickerAddDerivedData = Adicionar s\u00E9ries de dados derivados ...
177+
176178
ChartSeriesPickerAddItem = Adicionar s\u00E9rie de dados...
177179

178180
ChartSeriesPickerColor = Cor...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_ru.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = \u041A\u043E\u043F\u0438\u0440\u043E\u0432
173173

174174
ChartSeriesPickerAddBenchmark = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0431\u0435\u043D\u0447\u043C\u0430\u0440\u043A...
175175

176+
ChartSeriesPickerAddDerivedData = \u0414\u043E\u0431\u0430\u0432\u044C\u0442\u0435 \u043F\u0440\u043E\u0438\u0437\u0432\u043E\u0434\u043D\u044B\u0435 \u0441\u0435\u0440\u0438\u0438 \u0434\u0430\u043D\u043D\u044B\u0445 ...
177+
176178
ChartSeriesPickerAddItem = \u0414\u043E\u0431\u0430\u0432\u0438\u0442\u044C \u0441\u0435\u0440\u0438\u044E \u0434\u0430\u043D\u043D\u044B\u0445...
177179

178180
ChartSeriesPickerColor = \u0426\u0432\u0435\u0442...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_sk.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = Kop\u00EDrova\u0165 z
173173
174174
ChartSeriesPickerAddBenchmark = Prida\u0165 Benchmark...
175175
176+
ChartSeriesPickerAddDerivedData = Pridanie odvoden\u00FDch radov \u00FAdajov ...
177+
176178
ChartSeriesPickerAddItem = Prida\u0165 d\u00E1tov\u00FA radu...
177179
178180
ChartSeriesPickerColor = Farba...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = \u590D\u5236\u81EA
173173

174174
ChartSeriesPickerAddBenchmark = \u6DFB\u52A0\u57FA\u51C6...
175175

176+
ChartSeriesPickerAddDerivedData = \u6DFB\u52A0\u6D3E\u751F\u6570\u636E\u7CFB\u5217 ...
177+
176178
ChartSeriesPickerAddItem = \u6DFB\u52A0\u6570\u636E\u7CFB\u5217...
177179

178180
ChartSeriesPickerColor = \u989C\u8272...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/messages_zh_TW.properties

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,6 +173,8 @@ ChartSeriesCopySeriesFromOtherChart = \u8907\u88FD\u81EA
173173

174174
ChartSeriesPickerAddBenchmark = \u65B0\u589E\u6307\u6A19...
175175

176+
ChartSeriesPickerAddDerivedData = \u65B0\u589E\u884D\u751F\u8CC7\u6599\u7CFB\u5217 ...
177+
176178
ChartSeriesPickerAddItem = \u65B0\u589E\u6578\u5217...
177179

178180
ChartSeriesPickerColor = \u984F\u8272...

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dataseries/BasicDataSeriesConfigurator.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@ public void configMenuAboutToShow(IMenuManager manager)
100100

101101
if (dataSeriesSet.getUseCase() != DataSeries.UseCase.STATEMENT_OF_ASSETS)
102102
manager.add(new SimpleAction(Messages.ChartSeriesPickerAddBenchmark, a -> doAddSeries(true)));
103+
else
104+
manager.add(new SimpleAction(Messages.ChartSeriesPickerAddDerivedData, a -> doAddDerivedSeries()));
103105

104106
addCopyFromOtherChartsMenu(manager);
105107
}
@@ -136,6 +138,33 @@ private void doAddSeries(boolean showOnlyBenchmark)
136138
fireUpdate();
137139
}
138140

141+
private void doAddDerivedSeries()
142+
{
143+
List<DataSeries> list = new ArrayList<>(dataSeriesSet.getAvailableDerivedSeries());
144+
145+
// remove already selected items
146+
for (DataSeries s : selectedSeries)
147+
list.remove(s);
148+
149+
DataSeriesSelectionDialog dialog = new DataSeriesSelectionDialog(Display.getDefault().getActiveShell(), client);
150+
dialog.setElementsDerivedData(list);
151+
dialog.setExpandTree(false);
152+
153+
if (dialog.open() != DataSeriesSelectionDialog.OK)
154+
return;
155+
156+
List<DataSeries> result = dialog.getResult();
157+
if (result.isEmpty())
158+
return;
159+
160+
result.forEach(series -> {
161+
series.setVisible(true);
162+
selectedSeries.add(series);
163+
});
164+
165+
fireUpdate();
166+
}
167+
139168
private void addCopyFromOtherChartsMenu(IMenuManager manager)
140169
{
141170
String[] charts = new String[] { //

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dataseries/DataSeries.java

Lines changed: 54 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,45 @@ public enum UseCase
3535
*/
3636
public enum ClientDataSeries
3737
{
38-
TOTALS, INVESTED_CAPITAL, ABSOLUTE_INVESTED_CAPITAL, TRANSFERALS, TRANSFERALS_ACCUMULATED, TAXES, TAXES_ACCUMULATED, ABSOLUTE_DELTA, ABSOLUTE_DELTA_ALL_RECORDS, //
39-
DIVIDENDS, DIVIDENDS_ACCUMULATED, INTEREST, INTEREST_ACCUMULATED, DELTA_PERCENTAGE, INTEREST_CHARGE, INTEREST_CHARGE_ACCUMULATED, //
40-
EARNINGS, EARNINGS_ACCUMULATED, FEES, FEES_ACCUMULATED;
38+
TOTALS(Messages.LabelTotalSum), //
39+
TRANSFERALS(Messages.LabelTransferals), //
40+
TRANSFERALS_ACCUMULATED(Messages.LabelAccumulatedTransferals), //
41+
INVESTED_CAPITAL(Messages.LabelInvestedCapital), //
42+
ABSOLUTE_INVESTED_CAPITAL(Messages.LabelAbsoluteInvestedCapital), //
43+
ABSOLUTE_DELTA(Messages.LabelDelta), //
44+
ABSOLUTE_DELTA_ALL_RECORDS(Messages.LabelAbsoluteDelta), //
45+
DIVIDENDS(Messages.LabelDividends), //
46+
DIVIDENDS_ACCUMULATED(Messages.LabelAccumulatedDividends), //
47+
INTEREST(Messages.LabelInterest), //
48+
INTEREST_ACCUMULATED(Messages.LabelAccumulatedInterest), //
49+
INTEREST_CHARGE(Messages.LabelInterestCharge), //
50+
INTEREST_CHARGE_ACCUMULATED(Messages.LabelAccumulatedInterestCharge), //
51+
EARNINGS(Messages.LabelEarnings), //
52+
EARNINGS_ACCUMULATED(Messages.LabelAccumulatedEarnings), //
53+
FEES(Messages.LabelFees), //
54+
FEES_ACCUMULATED(Messages.LabelFeesAccumulated), //
55+
TAXES(Messages.ColumnTaxes), //
56+
TAXES_ACCUMULATED(Messages.LabelAccumulatedTaxes), //
57+
58+
DELTA_PERCENTAGE(Messages.LabelAggregationDaily);
59+
60+
private String label;
61+
62+
private ClientDataSeries(String label)
63+
{
64+
this.label = label;
65+
}
66+
67+
public String getLabel()
68+
{
69+
return label;
70+
}
71+
72+
@Override
73+
public String toString()
74+
{
75+
return label;
76+
}
4177
}
4278

4379
/**
@@ -52,6 +88,7 @@ public enum Type
5288
ACCOUNT("Account", i -> ((Account) i).getUUID()), //$NON-NLS-1$
5389
ACCOUNT_PRETAX("Account-PreTax", i -> ((Account) i).getUUID()), //$NON-NLS-1$
5490
PORTFOLIO("Portfolio", i -> ((Portfolio) i).getUUID()), //$NON-NLS-1$
91+
DERIVED_DATA_SERIES("Derived-", i -> ((DerivedDataSeries) i).getUUID()), //$NON-NLS-1$
5592
PORTFOLIO_PRETAX("Portfolio-PreTax", i -> ((Portfolio) i).getUUID()), //$NON-NLS-1$
5693
PORTFOLIO_PLUS_ACCOUNT("[+]Portfolio", i -> ((Portfolio) i).getUUID()), //$NON-NLS-1$
5794
PORTFOLIO_PLUS_ACCOUNT_PRETAX("[+]Portfolio-PreTax", i -> ((Portfolio) i).getUUID()), //$NON-NLS-1$
@@ -146,6 +183,15 @@ public String getSearchLabel()
146183
buf.append(" (").append(parent.getPathName(false)).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
147184
}
148185

186+
if (instance instanceof DerivedDataSeries derived
187+
&& derived.getBaseDataSeries().getInstance() instanceof Classification classification)
188+
{
189+
Classification parent = classification.getParent();
190+
191+
if (parent.getParent() != null)
192+
buf.append(" (").append(parent.getPathName(false)).append(")"); //$NON-NLS-1$ //$NON-NLS-2$
193+
}
194+
149195
if (isBenchmark())
150196
buf.append(" ").append(Messages.ChartSeriesBenchmarkSuffix); //$NON-NLS-1$
151197

@@ -214,23 +260,17 @@ public void setLineWidth(int lineWidth)
214260

215261
public Image getImage()
216262
{
217-
switch (type)
263+
switch (instance instanceof DerivedDataSeries derived ? derived.getBaseDataSeries().getType() : type)
218264
{
219-
case SECURITY:
220-
case SECURITY_BENCHMARK:
265+
case SECURITY, SECURITY_BENCHMARK:
221266
return Images.SECURITY.image();
222-
case ACCOUNT:
223-
case ACCOUNT_PRETAX:
267+
case ACCOUNT, ACCOUNT_PRETAX:
224268
return Images.ACCOUNT.image();
225-
case PORTFOLIO:
226-
case PORTFOLIO_PRETAX:
227-
case PORTFOLIO_PLUS_ACCOUNT:
228-
case PORTFOLIO_PLUS_ACCOUNT_PRETAX:
269+
case PORTFOLIO, PORTFOLIO_PRETAX, PORTFOLIO_PLUS_ACCOUNT, PORTFOLIO_PLUS_ACCOUNT_PRETAX:
229270
return Images.PORTFOLIO.image();
230271
case CLASSIFICATION:
231272
return Images.CATEGORY.image();
232-
case CLIENT_FILTER:
233-
case CLIENT_FILTER_PRETAX:
273+
case CLIENT_FILTER, CLIENT_FILTER_PRETAX:
234274
return Images.FILTER_OFF.image();
235275
default:
236276
return null;

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dataseries/DataSeriesCache.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,12 @@ private PerformanceIndex calculate(DataSeries series, Interval reportingPeriod)
135135
new WithoutTaxesFilter().filter(pretax.getFilter().filter(client)), converter,
136136
reportingPeriod, warnings);
137137

138+
case DERIVED_DATA_SERIES:
139+
// redirect to the #lookup method to use the cached data, if
140+
// available
141+
var derivedDataSeries = (DerivedDataSeries) series.getInstance();
142+
return lookup(derivedDataSeries.getBaseDataSeries(), reportingPeriod);
143+
138144
default:
139145
throw new IllegalArgumentException(series.getType().name());
140146
}

name.abuchen.portfolio.ui/src/name/abuchen/portfolio/ui/views/dataseries/DataSeriesChartLegend.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,9 @@ private PaintItem(Composite parent, DataSeries series)
146146
setToolTipText(TextUtil.wordwrap(security.toInfoString()));
147147
else if (series.getInstance() instanceof Classification classification)
148148
setToolTipText(classification.getPathName(true));
149+
else if (series.getInstance() instanceof DerivedDataSeries derived
150+
&& derived.getBaseDataSeries().getInstance() instanceof Classification classification)
151+
setToolTipText(derived.getAspect().getLabel() + ": " + classification.getPathName(true)); //$NON-NLS-1$
149152
else
150153
setToolTipText(series.getLabel());
151154
}

0 commit comments

Comments
 (0)