mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-21 18:24:26 +08:00
add chart tab to insights & explore page
This commit is contained in:
@@ -31,6 +31,7 @@ export interface CommonPieChartProps {
|
|||||||
colorField?: string;
|
colorField?: string;
|
||||||
hiddenField?: string;
|
hiddenField?: string;
|
||||||
minValidPercent?: number;
|
minValidPercent?: number;
|
||||||
|
amountValue?: boolean;
|
||||||
defaultCurrency?: string;
|
defaultCurrency?: string;
|
||||||
showValue?: boolean;
|
showValue?: boolean;
|
||||||
showPercent?: boolean;
|
showPercent?: boolean;
|
||||||
@@ -74,7 +75,7 @@ export function usePieChartBase(props: CommonPieChartProps) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
finalItem.displayPercent = formatPercentToLocalizedNumerals(finalItem.percent, 2, '<0.01');
|
finalItem.displayPercent = formatPercentToLocalizedNumerals(finalItem.percent, 2, '<0.01');
|
||||||
finalItem.displayValue = formatAmountToLocalizedNumeralsWithCurrency(finalItem.value, props.defaultCurrency);
|
finalItem.displayValue = props.amountValue ? formatAmountToLocalizedNumeralsWithCurrency(finalItem.value, props.defaultCurrency) : finalItem.value.toString();
|
||||||
|
|
||||||
validItems.push(finalItem);
|
validItems.push(finalItem);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ const props = defineProps<{
|
|||||||
colorField?: string;
|
colorField?: string;
|
||||||
hiddenField?: string;
|
hiddenField?: string;
|
||||||
minValidPercent?: number;
|
minValidPercent?: number;
|
||||||
|
amountValue?: boolean;
|
||||||
defaultCurrency?: string;
|
defaultCurrency?: string;
|
||||||
showValue?: boolean;
|
showValue?: boolean;
|
||||||
showPercent?: boolean;
|
showPercent?: boolean;
|
||||||
@@ -81,7 +82,7 @@ const radarData = computed<RadarChartData>(() => {
|
|||||||
|
|
||||||
const finalPercent = (isNumber(percent) && percent >= 0) ? percent : (value / totalValidValue * 100);
|
const finalPercent = (isNumber(percent) && percent >= 0) ? percent : (value / totalValidValue * 100);
|
||||||
const displayPercent = formatPercentToLocalizedNumerals(finalPercent, 2, '<0.01');
|
const displayPercent = formatPercentToLocalizedNumerals(finalPercent, 2, '<0.01');
|
||||||
const displayValue = formatAmountToLocalizedNumeralsWithCurrency(value, props.defaultCurrency);
|
const displayValue = props.amountValue ? formatAmountToLocalizedNumeralsWithCurrency(value, props.defaultCurrency) : value.toString();
|
||||||
|
|
||||||
indicators.push({
|
indicators.push({
|
||||||
name: name,
|
name: name,
|
||||||
|
|||||||
+160
-4
@@ -53,8 +53,8 @@ export class TransactionExploreConditionField implements NameValue {
|
|||||||
return TransactionExploreConditionField.allInstances;
|
return TransactionExploreConditionField.allInstances;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static valueOf(type: string): TransactionExploreConditionField | undefined {
|
public static valueOf(value: string): TransactionExploreConditionField | undefined {
|
||||||
return TransactionExploreConditionField.allInstancesByValue[type];
|
return TransactionExploreConditionField.allInstancesByValue[value];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -119,8 +119,164 @@ export class TransactionExploreConditionOperator implements NameValue {
|
|||||||
return TransactionExploreConditionOperator.allInstances;
|
return TransactionExploreConditionOperator.allInstances;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static valueOf(type: string): TransactionExploreConditionOperator | undefined {
|
public static valueOf(value: string): TransactionExploreConditionOperator | undefined {
|
||||||
return TransactionExploreConditionOperator.allInstancesByValue[type];
|
return TransactionExploreConditionOperator.allInstancesByValue[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum TransactionExploreChartTypeValue {
|
||||||
|
Pie = 'pie',
|
||||||
|
ColumnStacked = 'columnStacked',
|
||||||
|
Column100PercentStacked = 'column100%Stacked',
|
||||||
|
ColumnGrouped = 'columnGrouped',
|
||||||
|
LineGrouped = 'lineGrouped',
|
||||||
|
AreaStacked = 'areaStacked',
|
||||||
|
Area100PercentStacked = 'area100%Stacked',
|
||||||
|
BubbleGrouped = 'bubbleGrouped',
|
||||||
|
Radar = 'radar'
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TransactionExploreChartType implements NameValue {
|
||||||
|
private static readonly allInstances: TransactionExploreChartType[] = [];
|
||||||
|
private static readonly allInstancesByValue: Record<string, TransactionExploreChartType> = {};
|
||||||
|
|
||||||
|
public static readonly Pie = new TransactionExploreChartType('Pie Chart', TransactionExploreChartTypeValue.Pie, false);
|
||||||
|
public static readonly Radar = new TransactionExploreChartType('Radar Chart', TransactionExploreChartTypeValue.Radar, false);
|
||||||
|
|
||||||
|
public static readonly Default = TransactionExploreChartType.Pie;
|
||||||
|
|
||||||
|
public readonly name: string;
|
||||||
|
public readonly value: TransactionExploreChartTypeValue;
|
||||||
|
public readonly seriesDimensionRequired: boolean;
|
||||||
|
|
||||||
|
private constructor(name: string, value: TransactionExploreChartTypeValue, seriesDimensionRequired: boolean) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
this.seriesDimensionRequired = seriesDimensionRequired;
|
||||||
|
|
||||||
|
TransactionExploreChartType.allInstances.push(this);
|
||||||
|
TransactionExploreChartType.allInstancesByValue[value] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static values(): TransactionExploreChartType[] {
|
||||||
|
return TransactionExploreChartType.allInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static valueOf(value: string): TransactionExploreChartType | undefined {
|
||||||
|
return TransactionExploreChartType.allInstancesByValue[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum TransactionExploreDataDimensionType {
|
||||||
|
None = 'none',
|
||||||
|
Query = 'query',
|
||||||
|
DateTime = 'dateTime',
|
||||||
|
DateTimeByDay = 'dateTimeByDay',
|
||||||
|
DateTimeByMonth = 'dateTimeByMonth',
|
||||||
|
DateTimeByQuarter = 'dateTimeByQuarter',
|
||||||
|
DateTimeByYear = 'dateTimeByYear',
|
||||||
|
DateTimeByFiscalYear = 'dateTimeByFiscalYear',
|
||||||
|
TransactionType = 'transactionType',
|
||||||
|
SourceAccount = 'sourceAccount',
|
||||||
|
SourceAccountCategory = 'sourceAccountCategory',
|
||||||
|
SourceAccountCurrency = 'sourceAccountCurrency',
|
||||||
|
DestinationAccount = 'destinationAccount',
|
||||||
|
DestinationAccountCategory = 'destinationAccountCategory',
|
||||||
|
DestinationAccountCurrency = 'destinationAccountCurrency',
|
||||||
|
SourceAmount = 'sourceAmount',
|
||||||
|
DestinationAmount = 'destinationAmount',
|
||||||
|
PrimaryCategory = 'primaryCategory',
|
||||||
|
SecondaryCategory = 'secondaryCategory'
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TransactionExploreDataDimension implements NameValue {
|
||||||
|
private static readonly allInstances: TransactionExploreDataDimension[] = [];
|
||||||
|
private static readonly allInstancesByValue: Record<string, TransactionExploreDataDimension> = {};
|
||||||
|
|
||||||
|
public static readonly None = new TransactionExploreDataDimension('None', TransactionExploreDataDimensionType.None);
|
||||||
|
public static readonly Query = new TransactionExploreDataDimension('Query', TransactionExploreDataDimensionType.Query);
|
||||||
|
public static readonly DateTime = new TransactionExploreDataDimension('Transaction Time', TransactionExploreDataDimensionType.DateTime);
|
||||||
|
public static readonly DateTimeByDay = new TransactionExploreDataDimension('Transaction Date', TransactionExploreDataDimensionType.DateTimeByDay);
|
||||||
|
public static readonly DateTimeByMonth = new TransactionExploreDataDimension('Transaction Month', TransactionExploreDataDimensionType.DateTimeByMonth);
|
||||||
|
public static readonly DateTimeByQuarter = new TransactionExploreDataDimension('Transaction Quarter', TransactionExploreDataDimensionType.DateTimeByQuarter);
|
||||||
|
public static readonly DateTimeByYear = new TransactionExploreDataDimension('Transaction Year', TransactionExploreDataDimensionType.DateTimeByYear);
|
||||||
|
public static readonly DateTimeByFiscalYear = new TransactionExploreDataDimension('Transaction Fiscal Year', TransactionExploreDataDimensionType.DateTimeByFiscalYear);
|
||||||
|
public static readonly TransactionType = new TransactionExploreDataDimension('Transaction Type', TransactionExploreDataDimensionType.TransactionType);
|
||||||
|
public static readonly SourceAccount = new TransactionExploreDataDimension('Source Account', TransactionExploreDataDimensionType.SourceAccount);
|
||||||
|
public static readonly SourceAccountCategory = new TransactionExploreDataDimension('Source Account Category', TransactionExploreDataDimensionType.SourceAccountCategory);
|
||||||
|
public static readonly SourceAccountCurrency = new TransactionExploreDataDimension('Source Account Currency', TransactionExploreDataDimensionType.SourceAccountCurrency);
|
||||||
|
public static readonly DestinationAccount = new TransactionExploreDataDimension('Destination Account', TransactionExploreDataDimensionType.DestinationAccount);
|
||||||
|
public static readonly DestinationAccountCategory = new TransactionExploreDataDimension('Destination Account Category', TransactionExploreDataDimensionType.DestinationAccountCategory);
|
||||||
|
public static readonly DestinationAccountCurrency = new TransactionExploreDataDimension('Destination Account Currency', TransactionExploreDataDimensionType.DestinationAccountCurrency);
|
||||||
|
public static readonly PrimaryCategory = new TransactionExploreDataDimension('Primary Category', TransactionExploreDataDimensionType.PrimaryCategory);
|
||||||
|
public static readonly SecondaryCategory = new TransactionExploreDataDimension('Secondary Category', TransactionExploreDataDimensionType.SecondaryCategory);
|
||||||
|
public static readonly SourceAmount = new TransactionExploreDataDimension('Amount', TransactionExploreDataDimensionType.SourceAmount);
|
||||||
|
public static readonly DestinationAmount = new TransactionExploreDataDimension('Transfer In Amount', TransactionExploreDataDimensionType.DestinationAmount);
|
||||||
|
|
||||||
|
public static readonly CategoryDimensionDefault = TransactionExploreDataDimension.Query;
|
||||||
|
public static readonly SeriesDimensionDefault = TransactionExploreDataDimension.None;
|
||||||
|
|
||||||
|
public readonly name: string;
|
||||||
|
public readonly value: TransactionExploreDataDimensionType;
|
||||||
|
|
||||||
|
private constructor(name: string, value: TransactionExploreDataDimensionType) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
|
||||||
|
TransactionExploreDataDimension.allInstances.push(this);
|
||||||
|
TransactionExploreDataDimension.allInstancesByValue[value] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static values(): TransactionExploreDataDimension[] {
|
||||||
|
return TransactionExploreDataDimension.allInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static valueOf(value: string): TransactionExploreDataDimension | undefined {
|
||||||
|
return TransactionExploreDataDimension.allInstancesByValue[value];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum TransactionExploreValueMetricType {
|
||||||
|
TransactionCount = 'transactionCount',
|
||||||
|
SourceAmountSum = 'sourceAmountSum',
|
||||||
|
SourceAmountAverage = 'sourceAmountAverage',
|
||||||
|
SourceAmountMedian = 'sourceAmountMedian',
|
||||||
|
SourceAmountMinimum = 'sourceAmountMinimum',
|
||||||
|
SourceAmountMaximum = 'sourceAmountMaximum'
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TransactionExploreValueMetric implements NameValue {
|
||||||
|
private static readonly allInstances: TransactionExploreValueMetric[] = [];
|
||||||
|
private static readonly allInstancesByValue: Record<string, TransactionExploreValueMetric> = {};
|
||||||
|
|
||||||
|
public static readonly TransactionCount = new TransactionExploreValueMetric('Transaction Count', TransactionExploreValueMetricType.TransactionCount, false);
|
||||||
|
public static readonly SourceAmountSum = new TransactionExploreValueMetric('Total Amount', TransactionExploreValueMetricType.SourceAmountSum, true);
|
||||||
|
public static readonly SourceAmountAverage = new TransactionExploreValueMetric('Average Amount', TransactionExploreValueMetricType.SourceAmountAverage, true);
|
||||||
|
public static readonly SourceAmountMedian = new TransactionExploreValueMetric('Median Amount', TransactionExploreValueMetricType.SourceAmountMedian, true);
|
||||||
|
public static readonly SourceAmountMinimum = new TransactionExploreValueMetric('Minimum Amount', TransactionExploreValueMetricType.SourceAmountMinimum, true);
|
||||||
|
public static readonly SourceAmountMaximum = new TransactionExploreValueMetric('Maximum Amount', TransactionExploreValueMetricType.SourceAmountMaximum, true);
|
||||||
|
|
||||||
|
public static readonly Default = TransactionExploreValueMetric.SourceAmountSum;
|
||||||
|
|
||||||
|
public readonly name: string;
|
||||||
|
public readonly value: TransactionExploreValueMetricType;
|
||||||
|
public readonly isAmount: boolean;
|
||||||
|
|
||||||
|
private constructor(name: string, value: TransactionExploreValueMetricType, isAmount: boolean) {
|
||||||
|
this.name = name;
|
||||||
|
this.value = value;
|
||||||
|
this.isAmount = isAmount;
|
||||||
|
|
||||||
|
TransactionExploreValueMetric.allInstances.push(this);
|
||||||
|
TransactionExploreValueMetric.allInstancesByValue[value] = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static values(): TransactionExploreValueMetric[] {
|
||||||
|
return TransactionExploreValueMetric.allInstances;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static valueOf(value: string): TransactionExploreValueMetric | undefined {
|
||||||
|
return TransactionExploreValueMetric.allInstancesByValue[value];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Klicken Sie, um die Importdatei auszuwählen ({extensions})",
|
"clickToSelectedFile": "Klicken Sie, um die Importdatei auszuwählen ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "{count} von {totalCount} ausgewählt",
|
"selectedCount": "{count} von {totalCount} ausgewählt",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Sie haben {count} Transaktionen aktualisiert",
|
"youHaveUpdatedTransactions": "Sie haben {count} Transaktionen aktualisiert",
|
||||||
"confirmImportTransactions": "Sind Sie sicher, dass Sie {count} Transaktionen importieren möchten?",
|
"confirmImportTransactions": "Sind Sie sicher, dass Sie {count} Transaktionen importieren möchten?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Sortieren nach",
|
"Sort by": "Sortieren nach",
|
||||||
"Map": "Karte",
|
"Map": "Karte",
|
||||||
"Provider": "Anbieter",
|
"Provider": "Anbieter",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Kontoliste",
|
"Account List": "Kontoliste",
|
||||||
"This Week": "Diese Woche",
|
"This Week": "Diese Woche",
|
||||||
"This Month": "Dieser Monat",
|
"This Month": "Dieser Monat",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Click to select import file ({extensions})",
|
"clickToSelectedFile": "Click to select import file ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Selected {count} of {totalCount}",
|
"selectedCount": "Selected {count} of {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "You have updated {count} transactions",
|
"youHaveUpdatedTransactions": "You have updated {count} transactions",
|
||||||
"confirmImportTransactions": "Are you sure you want to import {count} transactions?",
|
"confirmImportTransactions": "Are you sure you want to import {count} transactions?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Sort by",
|
"Sort by": "Sort by",
|
||||||
"Map": "Map",
|
"Map": "Map",
|
||||||
"Provider": "Provider",
|
"Provider": "Provider",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Account List",
|
"Account List": "Account List",
|
||||||
"This Week": "This Week",
|
"This Week": "This Week",
|
||||||
"This Month": "This Month",
|
"This Month": "This Month",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Haz clic para seleccionar el archivo de importación ({extensions})",
|
"clickToSelectedFile": "Haz clic para seleccionar el archivo de importación ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Seleccionado {count} de {totalCount}",
|
"selectedCount": "Seleccionado {count} de {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Has actualizado {count} transacciones",
|
"youHaveUpdatedTransactions": "Has actualizado {count} transacciones",
|
||||||
"confirmImportTransactions": "¿Seguro que deseas importar {count} transacciones?",
|
"confirmImportTransactions": "¿Seguro que deseas importar {count} transacciones?",
|
||||||
"importingTransactions": "Importando ({process}%)",
|
"importingTransactions": "Importando ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Gráfico de Burbujas",
|
"Bubble Chart": "Gráfico de Burbujas",
|
||||||
"Candlestick Chart": "Gráfico de Velas",
|
"Candlestick Chart": "Gráfico de Velas",
|
||||||
"Sankey Chart": "Diagrama de Sankey",
|
"Sankey Chart": "Diagrama de Sankey",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Ordenar por",
|
"Sort by": "Ordenar por",
|
||||||
"Map": "Mapa",
|
"Map": "Mapa",
|
||||||
"Provider": "Proveedor",
|
"Provider": "Proveedor",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Lista de Cuentas",
|
"Account List": "Lista de Cuentas",
|
||||||
"This Week": "Esta Semana",
|
"This Week": "Esta Semana",
|
||||||
"This Month": "Este Mes",
|
"This Month": "Este Mes",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Cliquez pour sélectionner le fichier d'importation ({extensions})",
|
"clickToSelectedFile": "Cliquez pour sélectionner le fichier d'importation ({extensions})",
|
||||||
"previewCount": "Nombre d'aperçu : {count}",
|
"previewCount": "Nombre d'aperçu : {count}",
|
||||||
"selectedCount": "Sélectionné {count} sur {totalCount}",
|
"selectedCount": "Sélectionné {count} sur {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Vous avez mis à jour {count} transactions",
|
"youHaveUpdatedTransactions": "Vous avez mis à jour {count} transactions",
|
||||||
"confirmImportTransactions": "Êtes-vous sûr de vouloir importer {count} transactions ?",
|
"confirmImportTransactions": "Êtes-vous sûr de vouloir importer {count} transactions ?",
|
||||||
"importingTransactions": "Importation ({process}%)",
|
"importingTransactions": "Importation ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Graphique en chandelier",
|
"Candlestick Chart": "Graphique en chandelier",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Trier par",
|
"Sort by": "Trier par",
|
||||||
"Map": "Carte",
|
"Map": "Carte",
|
||||||
"Provider": "Fournisseur",
|
"Provider": "Fournisseur",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Liste des comptes",
|
"Account List": "Liste des comptes",
|
||||||
"This Week": "Cette semaine",
|
"This Week": "Cette semaine",
|
||||||
"This Month": "Ce mois",
|
"This Month": "Ce mois",
|
||||||
|
|||||||
@@ -144,7 +144,10 @@ import {
|
|||||||
|
|
||||||
import {
|
import {
|
||||||
TransactionExploreConditionField,
|
TransactionExploreConditionField,
|
||||||
TransactionExploreConditionOperator
|
TransactionExploreConditionOperator,
|
||||||
|
TransactionExploreDataDimension,
|
||||||
|
TransactionExploreValueMetric,
|
||||||
|
TransactionExploreChartType
|
||||||
} from '@/core/explore.ts';
|
} from '@/core/explore.ts';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
@@ -2378,6 +2381,9 @@ export function useI18n() {
|
|||||||
getAllSupportedImportFileCagtegoryAndTypes,
|
getAllSupportedImportFileCagtegoryAndTypes,
|
||||||
getAllTransactionExploreConditionFields: () => getLocalizedNameValue(TransactionExploreConditionField.values()),
|
getAllTransactionExploreConditionFields: () => getLocalizedNameValue(TransactionExploreConditionField.values()),
|
||||||
getAllTransactionExploreConditionOperators: (operators?: TransactionExploreConditionOperator[]) => getLocalizedNameValue(operators ?? TransactionExploreConditionOperator.values()),
|
getAllTransactionExploreConditionOperators: (operators?: TransactionExploreConditionOperator[]) => getLocalizedNameValue(operators ?? TransactionExploreConditionOperator.values()),
|
||||||
|
getAllTransactionExploreDataDimensions: (operators?: TransactionExploreDataDimension[]) => getLocalizedNameValue(operators ?? TransactionExploreDataDimension.values()),
|
||||||
|
getAllTransactionExploreValueMetrics: (operators?: TransactionExploreValueMetric[]) => getLocalizedNameValue(operators ?? TransactionExploreValueMetric.values()),
|
||||||
|
getAllTransactionExploreChartTypes: (operators?: TransactionExploreChartType[]) => getLocalizedNameValue(operators ?? TransactionExploreChartType.values()),
|
||||||
// get localized info
|
// get localized info
|
||||||
getLanguageInfo,
|
getLanguageInfo,
|
||||||
getMonthShortName,
|
getMonthShortName,
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Carica un file ({extensions})",
|
"clickToSelectedFile": "Carica un file ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "{count} selezionati su {totalCount}",
|
"selectedCount": "{count} selezionati su {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Hai aggiornato {count} transazioni",
|
"youHaveUpdatedTransactions": "Hai aggiornato {count} transazioni",
|
||||||
"confirmImportTransactions": "Sei sicuro di voler importare {count} transazioni?",
|
"confirmImportTransactions": "Sei sicuro di voler importare {count} transazioni?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Ordina per",
|
"Sort by": "Ordina per",
|
||||||
"Map": "Mappa",
|
"Map": "Mappa",
|
||||||
"Provider": "Fornitore",
|
"Provider": "Fornitore",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Elenco account",
|
"Account List": "Elenco account",
|
||||||
"This Week": "Questa settimana",
|
"This Week": "Questa settimana",
|
||||||
"This Month": "Questo mese",
|
"This Month": "Questo mese",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "クリックしてインポートファイルを選択します({extensions})",
|
"clickToSelectedFile": "クリックしてインポートファイルを選択します({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "{count} / {totalCount}を選択",
|
"selectedCount": "{count} / {totalCount}を選択",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "{count}件の取引を更新しました",
|
"youHaveUpdatedTransactions": "{count}件の取引を更新しました",
|
||||||
"confirmImportTransactions": "本当に{count}件の取引をインポートしますか?",
|
"confirmImportTransactions": "本当に{count}件の取引をインポートしますか?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "ソート順",
|
"Sort by": "ソート順",
|
||||||
"Map": "地図",
|
"Map": "地図",
|
||||||
"Provider": "プロバイダー",
|
"Provider": "プロバイダー",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "口座リスト",
|
"Account List": "口座リスト",
|
||||||
"This Week": "今週",
|
"This Week": "今週",
|
||||||
"This Month": "今月",
|
"This Month": "今月",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "ಆಮದು ಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ ({extensions})",
|
"clickToSelectedFile": "ಆಮದು ಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಲು ಕ್ಲಿಕ್ ಮಾಡಿ ({extensions})",
|
||||||
"previewCount": "ಪೂರ್ವ ದೃಷ್ಠಿ ಸಂಖ್ಯೆ: {count}",
|
"previewCount": "ಪೂರ್ವ ದೃಷ್ಠಿ ಸಂಖ್ಯೆ: {count}",
|
||||||
"selectedCount": "{totalCount}ರಲ್ಲಿ {count} ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ",
|
"selectedCount": "{totalCount}ರಲ್ಲಿ {count} ಆಯ್ಕೆ ಮಾಡಲಾಗಿದೆ",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "ನೀವು {count} ವಹಿವಾಟುಗಳನ್ನು ನವೀಕರಿಸಿದ್ದೀರಿ",
|
"youHaveUpdatedTransactions": "ನೀವು {count} ವಹಿವಾಟುಗಳನ್ನು ನವೀಕರಿಸಿದ್ದೀರಿ",
|
||||||
"confirmImportTransactions": "ನೀವು {count} ವಹಿವಾಟುಗಳನ್ನು ಆಮದು ಮಾಡಲು ಖಚಿತವಾಗಿದ್ದೀರಾ?",
|
"confirmImportTransactions": "ನೀವು {count} ವಹಿವಾಟುಗಳನ್ನು ಆಮದು ಮಾಡಲು ಖಚಿತವಾಗಿದ್ದೀರಾ?",
|
||||||
"importingTransactions": "ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ ({process}%)",
|
"importingTransactions": "ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "ಬಬಲ್ ಚಾರ್ಟ್",
|
"Bubble Chart": "ಬಬಲ್ ಚಾರ್ಟ್",
|
||||||
"Candlestick Chart": "ಕ್ಯಾಂಡಲ್ಸ್ಟಿಕ್ ಚಾರ್ಟ್",
|
"Candlestick Chart": "ಕ್ಯಾಂಡಲ್ಸ್ಟಿಕ್ ಚಾರ್ಟ್",
|
||||||
"Sankey Chart": "ಸ್ಯಾಂಕಿ ಚಾರ್ಟ್",
|
"Sankey Chart": "ಸ್ಯಾಂಕಿ ಚಾರ್ಟ್",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "ಇದರ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ",
|
"Sort by": "ಇದರ ಪ್ರಕಾರ ವಿಂಗಡಿಸಿ",
|
||||||
"Map": "ನಕ್ಷೆ",
|
"Map": "ನಕ್ಷೆ",
|
||||||
"Provider": "ಪ್ರದಾತ",
|
"Provider": "ಪ್ರದಾತ",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "ಖಾತೆಗಳ ಪಟ್ಟಿ",
|
"Account List": "ಖಾತೆಗಳ ಪಟ್ಟಿ",
|
||||||
"This Week": "ಈ ವಾರ",
|
"This Week": "ಈ ವಾರ",
|
||||||
"This Month": "ಈ ತಿಂಗಳು",
|
"This Month": "ಈ ತಿಂಗಳು",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "클릭해서 내보내기할 파일을 선택하세요 ({extensions})",
|
"clickToSelectedFile": "클릭해서 내보내기할 파일을 선택하세요 ({extensions})",
|
||||||
"previewCount": "미리보기 수: {count}",
|
"previewCount": "미리보기 수: {count}",
|
||||||
"selectedCount": "{count}개 중 {totalCount}개 선택됨",
|
"selectedCount": "{count}개 중 {totalCount}개 선택됨",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "{count}개의 거래가 업데이트되었습니다.",
|
"youHaveUpdatedTransactions": "{count}개의 거래가 업데이트되었습니다.",
|
||||||
"confirmImportTransactions": "{count}개의 거래를 가져오시겠습니까?",
|
"confirmImportTransactions": "{count}개의 거래를 가져오시겠습니까?",
|
||||||
"importingTransactions": "가져오는 중 ({process}%)",
|
"importingTransactions": "가져오는 중 ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "캠들스틱 차트",
|
"Candlestick Chart": "캠들스틱 차트",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "정렬 기준",
|
"Sort by": "정렬 기준",
|
||||||
"Map": "지도",
|
"Map": "지도",
|
||||||
"Provider": "제공자",
|
"Provider": "제공자",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "계좌 목록",
|
"Account List": "계좌 목록",
|
||||||
"This Week": "이번 주",
|
"This Week": "이번 주",
|
||||||
"This Month": "이번 달",
|
"This Month": "이번 달",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Klik om importbestand te selecteren ({extensions})",
|
"clickToSelectedFile": "Klik om importbestand te selecteren ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "{count} van {totalCount} geselecteerd",
|
"selectedCount": "{count} van {totalCount} geselecteerd",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Je hebt {count} transacties bijgewerkt",
|
"youHaveUpdatedTransactions": "Je hebt {count} transacties bijgewerkt",
|
||||||
"confirmImportTransactions": "Weet je zeker dat je {count} transacties wilt importeren?",
|
"confirmImportTransactions": "Weet je zeker dat je {count} transacties wilt importeren?",
|
||||||
"importingTransactions": "Bezig met importeren ({process}%)",
|
"importingTransactions": "Bezig met importeren ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestickdiagram",
|
"Candlestick Chart": "Candlestickdiagram",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Sorteren op",
|
"Sort by": "Sorteren op",
|
||||||
"Map": "Kaart",
|
"Map": "Kaart",
|
||||||
"Provider": "Provider",
|
"Provider": "Provider",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Rekeningenlijst",
|
"Account List": "Rekeningenlijst",
|
||||||
"This Week": "Deze week",
|
"This Week": "Deze week",
|
||||||
"This Month": "Deze maand",
|
"This Month": "Deze maand",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Clique para selecionar arquivo de importação ({extensions})",
|
"clickToSelectedFile": "Clique para selecionar arquivo de importação ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Selecionado {count} de {totalCount}",
|
"selectedCount": "Selecionado {count} de {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Você atualizou {count} transações",
|
"youHaveUpdatedTransactions": "Você atualizou {count} transações",
|
||||||
"confirmImportTransactions": "Tem certeza de que deseja importar {count} transações?",
|
"confirmImportTransactions": "Tem certeza de que deseja importar {count} transações?",
|
||||||
"importingTransactions": "Importando ({process}%)",
|
"importingTransactions": "Importando ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Ordenar por",
|
"Sort by": "Ordenar por",
|
||||||
"Map": "Mapa",
|
"Map": "Mapa",
|
||||||
"Provider": "Provedor",
|
"Provider": "Provedor",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Lista de Contas",
|
"Account List": "Lista de Contas",
|
||||||
"This Week": "Esta Semana",
|
"This Week": "Esta Semana",
|
||||||
"This Month": "Este Mês",
|
"This Month": "Este Mês",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Нажмите, чтобы выбрать файл для импорта ({extensions})",
|
"clickToSelectedFile": "Нажмите, чтобы выбрать файл для импорта ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Выбрано {count} из {totalCount}",
|
"selectedCount": "Выбрано {count} из {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Вы обновили {count} транзакций",
|
"youHaveUpdatedTransactions": "Вы обновили {count} транзакций",
|
||||||
"confirmImportTransactions": "Вы уверены, что хотите импортировать {count} транзакций?",
|
"confirmImportTransactions": "Вы уверены, что хотите импортировать {count} транзакций?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Сортировать по",
|
"Sort by": "Сортировать по",
|
||||||
"Map": "Карта",
|
"Map": "Карта",
|
||||||
"Provider": "Провайдер",
|
"Provider": "Провайдер",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Список счетов",
|
"Account List": "Список счетов",
|
||||||
"This Week": "На этой неделе",
|
"This Week": "На этой неделе",
|
||||||
"This Month": "В этом месяце",
|
"This Month": "В этом месяце",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "คลิกเพื่อเลือกไฟล์นำเข้า ({extensions})",
|
"clickToSelectedFile": "คลิกเพื่อเลือกไฟล์นำเข้า ({extensions})",
|
||||||
"previewCount": "จำนวนตัวอย่าง: {count}",
|
"previewCount": "จำนวนตัวอย่าง: {count}",
|
||||||
"selectedCount": "เลือกแล้ว {count} จาก {totalCount}",
|
"selectedCount": "เลือกแล้ว {count} จาก {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "คุณได้อัปเดตธุรกรรม {count} รายการ",
|
"youHaveUpdatedTransactions": "คุณได้อัปเดตธุรกรรม {count} รายการ",
|
||||||
"confirmImportTransactions": "คุณแน่ใจหรือไม่ว่าต้องการนำเข้าธุรกรรม {count} รายการ?",
|
"confirmImportTransactions": "คุณแน่ใจหรือไม่ว่าต้องการนำเข้าธุรกรรม {count} รายการ?",
|
||||||
"importingTransactions": "กำลังนำเข้า ({process}%)",
|
"importingTransactions": "กำลังนำเข้า ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "กราฟแท่งเทียน",
|
"Candlestick Chart": "กราฟแท่งเทียน",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "จัดเรียงตาม",
|
"Sort by": "จัดเรียงตาม",
|
||||||
"Map": "แผนที่",
|
"Map": "แผนที่",
|
||||||
"Provider": "ผู้ให้บริการ",
|
"Provider": "ผู้ให้บริการ",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "รายการบัญชี",
|
"Account List": "รายการบัญชี",
|
||||||
"This Week": "สัปดาห์นี้",
|
"This Week": "สัปดาห์นี้",
|
||||||
"This Month": "เดือนนี้",
|
"This Month": "เดือนนี้",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "İçe aktarılacak dosyayı seçmek için tıklayın ({extensions})",
|
"clickToSelectedFile": "İçe aktarılacak dosyayı seçmek için tıklayın ({extensions})",
|
||||||
"previewCount": "Önizleme Sayısı: {count}",
|
"previewCount": "Önizleme Sayısı: {count}",
|
||||||
"selectedCount": "{totalCount} öğeden {count} tanesi seçildi",
|
"selectedCount": "{totalCount} öğeden {count} tanesi seçildi",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "{count} işlemi güncellediniz",
|
"youHaveUpdatedTransactions": "{count} işlemi güncellediniz",
|
||||||
"confirmImportTransactions": "{count} işlemi içe aktarmak istediğinize emin misiniz?",
|
"confirmImportTransactions": "{count} işlemi içe aktarmak istediğinize emin misiniz?",
|
||||||
"importingTransactions": "İçe aktarılıyor (%{process})",
|
"importingTransactions": "İçe aktarılıyor (%{process})",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Kabarcık Grafiği",
|
"Bubble Chart": "Kabarcık Grafiği",
|
||||||
"Candlestick Chart": "Mum Grafiği",
|
"Candlestick Chart": "Mum Grafiği",
|
||||||
"Sankey Chart": "Sankey Diyagramı",
|
"Sankey Chart": "Sankey Diyagramı",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Sıralama ölçütü",
|
"Sort by": "Sıralama ölçütü",
|
||||||
"Map": "Harita",
|
"Map": "Harita",
|
||||||
"Provider": "Sağlayıcı",
|
"Provider": "Sağlayıcı",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Hesap Listesi",
|
"Account List": "Hesap Listesi",
|
||||||
"This Week": "Bu Hafta",
|
"This Week": "Bu Hafta",
|
||||||
"This Month": "Bu Ay",
|
"This Month": "Bu Ay",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Натисніть, щоб вибрати файл для імпорту ({extensions})",
|
"clickToSelectedFile": "Натисніть, щоб вибрати файл для імпорту ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Вибрано {count} з {totalCount}",
|
"selectedCount": "Вибрано {count} з {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Ви оновили {count} транзакцій",
|
"youHaveUpdatedTransactions": "Ви оновили {count} транзакцій",
|
||||||
"confirmImportTransactions": "Ви впевнені, що хочете імпортувати {count} транзакцій?",
|
"confirmImportTransactions": "Ви впевнені, що хочете імпортувати {count} транзакцій?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Сортувати за",
|
"Sort by": "Сортувати за",
|
||||||
"Map": "Карта",
|
"Map": "Карта",
|
||||||
"Provider": "Провайдер",
|
"Provider": "Провайдер",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Список рахунків",
|
"Account List": "Список рахунків",
|
||||||
"This Week": "Цього тижня",
|
"This Week": "Цього тижня",
|
||||||
"This Month": "Цього місяця",
|
"This Month": "Цього місяця",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "Nhấp để chọn tệp nhập khẩu ({extensions})",
|
"clickToSelectedFile": "Nhấp để chọn tệp nhập khẩu ({extensions})",
|
||||||
"previewCount": "Preview Count: {count}",
|
"previewCount": "Preview Count: {count}",
|
||||||
"selectedCount": "Đã chọn {count} trên {totalCount}",
|
"selectedCount": "Đã chọn {count} trên {totalCount}",
|
||||||
|
"queryIndex": "Query #{index}",
|
||||||
"youHaveUpdatedTransactions": "Bạn đã cập nhật {count} giao dịch",
|
"youHaveUpdatedTransactions": "Bạn đã cập nhật {count} giao dịch",
|
||||||
"confirmImportTransactions": "Bạn có chắc chắn muốn nhập {count} giao dịch không?",
|
"confirmImportTransactions": "Bạn có chắc chắn muốn nhập {count} giao dịch không?",
|
||||||
"importingTransactions": "Importing ({process}%)",
|
"importingTransactions": "Importing ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "Bubble Chart",
|
"Bubble Chart": "Bubble Chart",
|
||||||
"Candlestick Chart": "Candlestick Chart",
|
"Candlestick Chart": "Candlestick Chart",
|
||||||
"Sankey Chart": "Sankey Chart",
|
"Sankey Chart": "Sankey Chart",
|
||||||
|
"Column Chart (Stacked)": "Column Chart (Stacked)",
|
||||||
|
"Column Chart (100% Stacked)": "Column Chart (100% Stacked)",
|
||||||
|
"Column Chart (Grouped)": "Column Chart (Grouped)",
|
||||||
|
"Line Chart (Grouped)": "Line Chart (Grouped)",
|
||||||
|
"Area Chart (Stacked)": "Area Chart (Stacked)",
|
||||||
|
"Area Chart (100% Stacked)": "Area Chart (100% Stacked)",
|
||||||
|
"Bubble Chart (Grouped)": "Bubble Chart (Grouped)",
|
||||||
"Sort by": "Sắp xếp theo",
|
"Sort by": "Sắp xếp theo",
|
||||||
"Map": "Bản đồ",
|
"Map": "Bản đồ",
|
||||||
"Provider": "Nhà cung cấp",
|
"Provider": "Nhà cung cấp",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "Editor",
|
"Editor": "Editor",
|
||||||
"Expression": "Expression",
|
"Expression": "Expression",
|
||||||
"Failed to generate expression": "Failed to generate expression",
|
"Failed to generate expression": "Failed to generate expression",
|
||||||
|
"Axis / Category": "Axis / Category",
|
||||||
|
"Series": "Series",
|
||||||
|
"Transaction Date": "Transaction Date",
|
||||||
|
"Transaction Month": "Transaction Month",
|
||||||
|
"Transaction Quarter": "Transaction Quarter",
|
||||||
|
"Transaction Year": "Transaction Year",
|
||||||
|
"Transaction Fiscal Year": "Transaction Fiscal Year",
|
||||||
|
"Source Account Category": "Source Account Category",
|
||||||
|
"Source Account Currency": "Source Account Currency",
|
||||||
|
"Destination Account Category": "Destination Account Category",
|
||||||
|
"Destination Account Currency": "Destination Account Currency",
|
||||||
|
"Value Metric": "Value Metric",
|
||||||
|
"Transaction Count": "Transaction Count",
|
||||||
|
"Average Amount": "Average Amount",
|
||||||
|
"Median Amount": "Median Amount",
|
||||||
"Account List": "Danh sách tài khoản",
|
"Account List": "Danh sách tài khoản",
|
||||||
"This Week": "Tuần này",
|
"This Week": "Tuần này",
|
||||||
"This Month": "Tháng này",
|
"This Month": "Tháng này",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "点击选择导入文件 ({extensions})",
|
"clickToSelectedFile": "点击选择导入文件 ({extensions})",
|
||||||
"previewCount": "预览数量: {count}",
|
"previewCount": "预览数量: {count}",
|
||||||
"selectedCount": "已选择 {count} / {totalCount}",
|
"selectedCount": "已选择 {count} / {totalCount}",
|
||||||
|
"queryIndex": "查询 #{index}",
|
||||||
"youHaveUpdatedTransactions": "您已经更新 {count} 个交易",
|
"youHaveUpdatedTransactions": "您已经更新 {count} 个交易",
|
||||||
"confirmImportTransactions": "您确定要导入 {count} 个交易?",
|
"confirmImportTransactions": "您确定要导入 {count} 个交易?",
|
||||||
"importingTransactions": "正在导入 ({process}%)",
|
"importingTransactions": "正在导入 ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "气泡图",
|
"Bubble Chart": "气泡图",
|
||||||
"Candlestick Chart": "K线图",
|
"Candlestick Chart": "K线图",
|
||||||
"Sankey Chart": "桑基图",
|
"Sankey Chart": "桑基图",
|
||||||
|
"Column Chart (Stacked)": "柱状图(堆叠)",
|
||||||
|
"Column Chart (100% Stacked)": "柱状图(100%堆叠)",
|
||||||
|
"Column Chart (Grouped)": "柱状图(分组)",
|
||||||
|
"Line Chart (Grouped)": "折线图(分组)",
|
||||||
|
"Area Chart (Stacked)": "面积图(堆叠)",
|
||||||
|
"Area Chart (100% Stacked)": "面积图(100%堆叠)",
|
||||||
|
"Bubble Chart (Grouped)": "气泡图(分组)",
|
||||||
"Sort by": "排序方式",
|
"Sort by": "排序方式",
|
||||||
"Map": "地图",
|
"Map": "地图",
|
||||||
"Provider": "提供者",
|
"Provider": "提供者",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "编辑器",
|
"Editor": "编辑器",
|
||||||
"Expression": "表达式",
|
"Expression": "表达式",
|
||||||
"Failed to generate expression": "生成表达式失败",
|
"Failed to generate expression": "生成表达式失败",
|
||||||
|
"Axis / Category": "轴 / 分类",
|
||||||
|
"Series": "系列",
|
||||||
|
"Transaction Date": "交易日期",
|
||||||
|
"Transaction Month": "交易月份",
|
||||||
|
"Transaction Quarter": "交易季度",
|
||||||
|
"Transaction Year": "交易年份",
|
||||||
|
"Transaction Fiscal Year": "交易财年",
|
||||||
|
"Source Account Category": "来源账户分类",
|
||||||
|
"Source Account Currency": "来源账户货币",
|
||||||
|
"Destination Account Category": "目标账户分类",
|
||||||
|
"Destination Account Currency": "目标账户货币",
|
||||||
|
"Value Metric": "值类型",
|
||||||
|
"Transaction Count": "交易数量",
|
||||||
|
"Average Amount": "平均金额",
|
||||||
|
"Median Amount": "中位数金额",
|
||||||
"Account List": "账户列表",
|
"Account List": "账户列表",
|
||||||
"This Week": "本周",
|
"This Week": "本周",
|
||||||
"This Month": "本月",
|
"This Month": "本月",
|
||||||
|
|||||||
@@ -129,6 +129,7 @@
|
|||||||
"clickToSelectedFile": "點擊選擇匯入檔案 ({extensions})",
|
"clickToSelectedFile": "點擊選擇匯入檔案 ({extensions})",
|
||||||
"previewCount": "預覽數量: {count}",
|
"previewCount": "預覽數量: {count}",
|
||||||
"selectedCount": "已選擇 {count} / {totalCount}",
|
"selectedCount": "已選擇 {count} / {totalCount}",
|
||||||
|
"queryIndex": "查詢 #{index}",
|
||||||
"youHaveUpdatedTransactions": "您已經更新 {count} 個交易",
|
"youHaveUpdatedTransactions": "您已經更新 {count} 個交易",
|
||||||
"confirmImportTransactions": "您確定要匯入 {count} 個交易?",
|
"confirmImportTransactions": "您確定要匯入 {count} 個交易?",
|
||||||
"importingTransactions": "正在匯入 ({process}%)",
|
"importingTransactions": "正在匯入 ({process}%)",
|
||||||
@@ -1552,6 +1553,13 @@
|
|||||||
"Bubble Chart": "氣泡圖",
|
"Bubble Chart": "氣泡圖",
|
||||||
"Candlestick Chart": "K線圖",
|
"Candlestick Chart": "K線圖",
|
||||||
"Sankey Chart": "桑基圖",
|
"Sankey Chart": "桑基圖",
|
||||||
|
"Column Chart (Stacked)": "柱狀圖(堆疊)",
|
||||||
|
"Column Chart (100% Stacked)": "柱狀圖(100%堆疊)",
|
||||||
|
"Column Chart (Grouped)": "柱狀圖(分組)",
|
||||||
|
"Line Chart (Grouped)": "折線圖(分組)",
|
||||||
|
"Area Chart (Stacked)": "面積圖(堆疊)",
|
||||||
|
"Area Chart (100% Stacked)": "面積圖(100%堆疊)",
|
||||||
|
"Bubble Chart (Grouped)": "氣泡圖(分組)",
|
||||||
"Sort by": "排序方式",
|
"Sort by": "排序方式",
|
||||||
"Map": "地圖",
|
"Map": "地圖",
|
||||||
"Provider": "提供者",
|
"Provider": "提供者",
|
||||||
@@ -1706,6 +1714,21 @@
|
|||||||
"Editor": "編輯器",
|
"Editor": "編輯器",
|
||||||
"Expression": "表達式",
|
"Expression": "表達式",
|
||||||
"Failed to generate expression": "產生表達式失敗",
|
"Failed to generate expression": "產生表達式失敗",
|
||||||
|
"Axis / Category": "軸 / 類別",
|
||||||
|
"Series": "系列",
|
||||||
|
"Transaction Date": "交易日期",
|
||||||
|
"Transaction Month": "交易月份",
|
||||||
|
"Transaction Quarter": "交易季度",
|
||||||
|
"Transaction Year": "交易年份",
|
||||||
|
"Transaction Fiscal Year": "交易財政年度",
|
||||||
|
"Source Account Category": "來源帳戶分類",
|
||||||
|
"Source Account Currency": "來源帳戶貨幣",
|
||||||
|
"Destination Account Category": "目標帳戶分類",
|
||||||
|
"Destination Account Currency": "目標帳戶貨幣",
|
||||||
|
"Value Metric": "值類型",
|
||||||
|
"Transaction Count": "交易數量",
|
||||||
|
"Average Amount": "平均金額",
|
||||||
|
"Median Amount": "中位數金額",
|
||||||
"Account List": "帳戶清單",
|
"Account List": "帳戶清單",
|
||||||
"This Week": "本週",
|
"This Week": "本週",
|
||||||
"This Month": "本月",
|
"This Month": "本月",
|
||||||
|
|||||||
+497
-4
@@ -6,9 +6,22 @@ import { useUserStore } from './user.ts';
|
|||||||
import { useAccountsStore } from './account.ts';
|
import { useAccountsStore } from './account.ts';
|
||||||
import { useTransactionCategoriesStore } from './transactionCategory.ts';
|
import { useTransactionCategoriesStore } from './transactionCategory.ts';
|
||||||
import { useTransactionTagsStore } from './transactionTag.ts';
|
import { useTransactionTagsStore } from './transactionTag.ts';
|
||||||
|
import { useExchangeRatesStore } from './exchangeRates.ts';
|
||||||
|
|
||||||
|
import { itemAndIndex, values } from '@/core/base.ts';
|
||||||
|
import { AmountFilterType } from '@/core/numeral.ts';
|
||||||
import { DateRangeScene, DateRange } from '@/core/datetime.ts';
|
import { DateRangeScene, DateRange } from '@/core/datetime.ts';
|
||||||
import { DEFAULT_TRANSACTION_EXPLORE_DATE_RANGE } from '@/core/explore.ts';
|
import { AccountCategory } from '@/core/account.ts';
|
||||||
|
import { TransactionType } from '@/core/transaction.ts';
|
||||||
|
import {
|
||||||
|
TransactionExploreChartTypeValue,
|
||||||
|
TransactionExploreChartType,
|
||||||
|
TransactionExploreDataDimensionType,
|
||||||
|
TransactionExploreDataDimension,
|
||||||
|
TransactionExploreValueMetricType,
|
||||||
|
TransactionExploreValueMetric,
|
||||||
|
DEFAULT_TRANSACTION_EXPLORE_DATE_RANGE
|
||||||
|
} from '@/core/explore.ts';
|
||||||
|
|
||||||
import { type Account } from '@/models/account.ts';
|
import { type Account } from '@/models/account.ts';
|
||||||
import { type TransactionCategory } from '@/models/transaction_category.ts';
|
import { type TransactionCategory } from '@/models/transaction_category.ts';
|
||||||
@@ -21,16 +34,40 @@ import {
|
|||||||
TransactionExploreQuery
|
TransactionExploreQuery
|
||||||
} from '@/models/explore.ts';
|
} from '@/models/explore.ts';
|
||||||
|
|
||||||
import { isInteger, isEquals } from '@/lib/common.ts';
|
import {
|
||||||
import { getDateRangeByDateType } from '@/lib/datetime.ts';
|
isDefined,
|
||||||
|
isNumber,
|
||||||
|
isInteger,
|
||||||
|
isEquals,
|
||||||
|
} from '@/lib/common.ts';
|
||||||
|
import {
|
||||||
|
getYearFirstUnixTimeBySpecifiedUnixTime,
|
||||||
|
getQuarterFirstUnixTimeBySpecifiedUnixTime,
|
||||||
|
getMonthFirstUnixTimeBySpecifiedUnixTime,
|
||||||
|
getDayFirstUnixTimeBySpecifiedUnixTime,
|
||||||
|
getDateRangeByDateType,
|
||||||
|
getFiscalYearStartUnixTime
|
||||||
|
} from '@/lib/datetime.ts';
|
||||||
import services from '@/lib/services.ts';
|
import services from '@/lib/services.ts';
|
||||||
import logger from '@/lib/logger.ts';
|
import logger from '@/lib/logger.ts';
|
||||||
|
|
||||||
|
export enum TransactionExploreDimensionType {
|
||||||
|
TransactionType = 'transactionType',
|
||||||
|
Category = 'category',
|
||||||
|
Account = 'account',
|
||||||
|
Amount = 'amount',
|
||||||
|
Other = 'other'
|
||||||
|
}
|
||||||
|
|
||||||
export interface TransactionExplorePartialFilter {
|
export interface TransactionExplorePartialFilter {
|
||||||
dateRangeType?: number;
|
dateRangeType?: number;
|
||||||
startTime?: number;
|
startTime?: number;
|
||||||
endTime?: number;
|
endTime?: number;
|
||||||
queryId?: string;
|
queryId?: string;
|
||||||
|
chartType?: TransactionExploreChartTypeValue;
|
||||||
|
categoryDimension?: TransactionExploreDataDimensionType;
|
||||||
|
seriesDimension?: TransactionExploreDataDimensionType;
|
||||||
|
valueMetric?: TransactionExploreValueMetricType;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface TransactionExploreFilter extends TransactionExplorePartialFilter {
|
export interface TransactionExploreFilter extends TransactionExplorePartialFilter {
|
||||||
@@ -38,6 +75,42 @@ export interface TransactionExploreFilter extends TransactionExplorePartialFilte
|
|||||||
startTime: number;
|
startTime: number;
|
||||||
endTime: number;
|
endTime: number;
|
||||||
query: TransactionExploreQuery[];
|
query: TransactionExploreQuery[];
|
||||||
|
chartType: TransactionExploreChartTypeValue;
|
||||||
|
categoryDimension: TransactionExploreDataDimensionType;
|
||||||
|
seriesDimension: TransactionExploreDataDimensionType;
|
||||||
|
valueMetric: TransactionExploreValueMetricType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CategoriedInfo {
|
||||||
|
categoryName: string;
|
||||||
|
categoryNameNeedI18n?: boolean;
|
||||||
|
categoryNameI18nParameters?: Record<string, string>;
|
||||||
|
categoryId: string;
|
||||||
|
categoryIdType: TransactionExploreDimensionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CategoriedTransactions extends CategoriedInfo {
|
||||||
|
trasactions: Record<string, SeriesedTransactions>;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CategoriedTransactionExploreData extends CategoriedInfo {
|
||||||
|
data: CategoriedTransactionExploreDataItem[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SeriesedInfo {
|
||||||
|
seriesName: string;
|
||||||
|
seriesNameNeedI18n?: boolean;
|
||||||
|
seriesNameI18nParameters?: Record<string, string>;
|
||||||
|
seriesId: string;
|
||||||
|
seriesIdType: TransactionExploreDimensionType;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SeriesedTransactions extends SeriesedInfo {
|
||||||
|
trasactions: TransactionInsightDataItem[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface CategoriedTransactionExploreDataItem extends SeriesedInfo {
|
||||||
|
value: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const useExploresStore = defineStore('explores', () => {
|
export const useExploresStore = defineStore('explores', () => {
|
||||||
@@ -46,12 +119,225 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
const accountsStore = useAccountsStore();
|
const accountsStore = useAccountsStore();
|
||||||
const transactionCategoriesStore = useTransactionCategoriesStore();
|
const transactionCategoriesStore = useTransactionCategoriesStore();
|
||||||
const transactionTagsStore = useTransactionTagsStore();
|
const transactionTagsStore = useTransactionTagsStore();
|
||||||
|
const exchangeRatesStore = useExchangeRatesStore();
|
||||||
|
|
||||||
|
function getDataCategoryInfo(dimension: TransactionExploreDataDimension, queryName: string, queryIndex: number, transaction: TransactionInsightDataItem): CategoriedInfo {
|
||||||
|
if (dimension === TransactionExploreDataDimension.None) {
|
||||||
|
const valueMetric = TransactionExploreValueMetric.valueOf(transactionExploreFilter.value.valueMetric);
|
||||||
|
return {
|
||||||
|
categoryName: valueMetric?.name ?? 'Unknown',
|
||||||
|
categoryNameNeedI18n: true,
|
||||||
|
categoryId: 'none',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.Query) {
|
||||||
|
if (queryName) {
|
||||||
|
return {
|
||||||
|
categoryName: queryName,
|
||||||
|
categoryId: (queryIndex + 1).toString(10),
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
categoryName: `format.misc.queryIndex`,
|
||||||
|
categoryNameNeedI18n: true,
|
||||||
|
categoryNameI18nParameters: {
|
||||||
|
index: (queryIndex + 1).toString(10)
|
||||||
|
},
|
||||||
|
categoryId: (queryIndex + 1).toString(10),
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
}
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTime) {
|
||||||
|
const unixTime = transaction.time.toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTimeByDay) {
|
||||||
|
const unixTime = getDayFirstUnixTimeBySpecifiedUnixTime(transaction.time).toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTimeByMonth) {
|
||||||
|
const unixTime = getMonthFirstUnixTimeBySpecifiedUnixTime(transaction.time).toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTimeByQuarter) {
|
||||||
|
const unixTime = getQuarterFirstUnixTimeBySpecifiedUnixTime(transaction.time).toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTimeByYear) {
|
||||||
|
const unixTime = getYearFirstUnixTimeBySpecifiedUnixTime(transaction.time).toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DateTimeByFiscalYear) {
|
||||||
|
const unixTime = getFiscalYearStartUnixTime(transaction.time, userStore.currentUserFiscalYearStart).toString(10);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: unixTime,
|
||||||
|
categoryId: unixTime,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.TransactionType) {
|
||||||
|
let transactionTypeName = 'Unknown';
|
||||||
|
|
||||||
|
if (transaction.type === TransactionType.ModifyBalance) {
|
||||||
|
transactionTypeName = 'Modify Balance';
|
||||||
|
} else if (transaction.type === TransactionType.Income) {
|
||||||
|
transactionTypeName = 'Income';
|
||||||
|
} else if (transaction.type === TransactionType.Expense) {
|
||||||
|
transactionTypeName = 'Expense';
|
||||||
|
} else if (transaction.type === TransactionType.Transfer) {
|
||||||
|
transactionTypeName = 'Transfer';
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: transactionTypeName,
|
||||||
|
categoryNameNeedI18n: true,
|
||||||
|
categoryId: transaction.type.toString(10),
|
||||||
|
categoryIdType: TransactionExploreDimensionType.TransactionType
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.SourceAccount) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.sourceAccountName || 'Unknown',
|
||||||
|
categoryNameNeedI18n: !transaction.sourceAccountName,
|
||||||
|
categoryId: transaction.sourceAccountId || 'unknown',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Account
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.SourceAccountCategory) {
|
||||||
|
const accountCategory = AccountCategory.valueOf(transaction.sourceAccount.category);
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: accountCategory?.name || 'Unknown',
|
||||||
|
categoryNameNeedI18n: true,
|
||||||
|
categoryId: accountCategory?.type.toString(10) || 'unknown',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.SourceAccountCurrency) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.sourceAccount.currency || 'Unknown',
|
||||||
|
categoryNameNeedI18n: !transaction.sourceAccount.currency,
|
||||||
|
categoryId: transaction.sourceAccount.currency || 'unknown',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DestinationAccount) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.type === TransactionType.Transfer ? (transaction.destinationAccountName || 'Unknown') : 'None',
|
||||||
|
categoryNameNeedI18n: transaction.type !== TransactionType.Transfer || !transaction.destinationAccountName,
|
||||||
|
categoryId: transaction.type === TransactionType.Transfer ? (transaction.destinationAccountId || 'unknown') : 'none',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Account
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DestinationAccountCategory) {
|
||||||
|
const accountCategory = transaction.type === TransactionType.Transfer && transaction.destinationAccount ? AccountCategory.valueOf(transaction.destinationAccount.category) : undefined;
|
||||||
|
|
||||||
|
return {
|
||||||
|
categoryName: transaction.type === TransactionType.Transfer ? (accountCategory?.name || 'Unknown') : 'None',
|
||||||
|
categoryNameNeedI18n: true,
|
||||||
|
categoryId: transaction.type === TransactionType.Transfer ? (accountCategory?.name || 'unknown') : 'none',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DestinationAccountCurrency) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.type === TransactionType.Transfer ? (transaction.destinationAccount?.currency || 'Unknown') : 'None',
|
||||||
|
categoryNameNeedI18n: transaction.type !== TransactionType.Transfer || !transaction.destinationAccount?.currency,
|
||||||
|
categoryId: transaction.type === TransactionType.Transfer ? (transaction.destinationAccount?.currency || 'unknown') : 'none',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.PrimaryCategory) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.primaryCategory.name,
|
||||||
|
categoryId: transaction.primaryCategory.id,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Category
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.SecondaryCategory) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.secondaryCategory.name,
|
||||||
|
categoryId: transaction.categoryId,
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Category
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.SourceAmount) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.sourceAmount.toString(10),
|
||||||
|
categoryId: transaction.sourceAmount.toString(10),
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Amount
|
||||||
|
};
|
||||||
|
} else if (dimension === TransactionExploreDataDimension.DestinationAmount) {
|
||||||
|
return {
|
||||||
|
categoryName: transaction.type === TransactionType.Transfer ? transaction.destinationAmount.toString(10) : 'None',
|
||||||
|
categoryNameNeedI18n: transaction.type !== TransactionType.Transfer,
|
||||||
|
categoryId: transaction.type === TransactionType.Transfer ? transaction.destinationAmount.toString(10) : 'none',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
categoryName: '',
|
||||||
|
categoryId: '',
|
||||||
|
categoryIdType: TransactionExploreDimensionType.Other
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addTransactionToCategoriedDataMap(categoriedDataMap: Record<string, CategoriedTransactions>, categoryDimension: TransactionExploreDataDimension, seriesDemension: TransactionExploreDataDimension, queryName: string, queryIndex: number, transaction: TransactionInsightDataItem): void {
|
||||||
|
const categoriedInfo = getDataCategoryInfo(categoryDimension, queryName, queryIndex, transaction);
|
||||||
|
let categoriedData = categoriedDataMap[categoriedInfo.categoryId];
|
||||||
|
|
||||||
|
if (!categoriedData) {
|
||||||
|
categoriedData = {
|
||||||
|
categoryName: categoriedInfo.categoryName,
|
||||||
|
categoryNameNeedI18n: categoriedInfo.categoryNameNeedI18n,
|
||||||
|
categoryNameI18nParameters: categoriedInfo.categoryNameI18nParameters,
|
||||||
|
categoryId: categoriedInfo.categoryId,
|
||||||
|
categoryIdType: categoriedInfo.categoryIdType,
|
||||||
|
trasactions: {}
|
||||||
|
};
|
||||||
|
categoriedDataMap[categoriedInfo.categoryId] = categoriedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
const seriesedInfo = getDataCategoryInfo(seriesDemension, queryName, queryIndex, transaction);
|
||||||
|
let seriesedData = categoriedData.trasactions[seriesedInfo.categoryId];
|
||||||
|
|
||||||
|
if (!seriesedData) {
|
||||||
|
seriesedData = {
|
||||||
|
seriesName: seriesedInfo.categoryName,
|
||||||
|
seriesNameNeedI18n: seriesedInfo.categoryNameNeedI18n,
|
||||||
|
seriesNameI18nParameters: seriesedInfo.categoryNameI18nParameters,
|
||||||
|
seriesId: seriesedInfo.categoryId,
|
||||||
|
seriesIdType: seriesedInfo.categoryIdType,
|
||||||
|
trasactions: []
|
||||||
|
};
|
||||||
|
categoriedData.trasactions[seriesedInfo.categoryId] = seriesedData;
|
||||||
|
}
|
||||||
|
|
||||||
|
seriesedData.trasactions.push(transaction);
|
||||||
|
}
|
||||||
|
|
||||||
const transactionExploreFilter = ref<TransactionExploreFilter>({
|
const transactionExploreFilter = ref<TransactionExploreFilter>({
|
||||||
dateRangeType: DEFAULT_TRANSACTION_EXPLORE_DATE_RANGE.type,
|
dateRangeType: DEFAULT_TRANSACTION_EXPLORE_DATE_RANGE.type,
|
||||||
startTime: 0,
|
startTime: 0,
|
||||||
endTime: 0,
|
endTime: 0,
|
||||||
query: []
|
query: [],
|
||||||
|
categoryDimension: TransactionExploreDataDimension.CategoryDimensionDefault.value,
|
||||||
|
seriesDimension: TransactionExploreDataDimension.SeriesDimensionDefault.value,
|
||||||
|
valueMetric: TransactionExploreValueMetric.Default.value,
|
||||||
|
chartType: TransactionExploreChartType.Default.value
|
||||||
});
|
});
|
||||||
|
|
||||||
const transactionExploreAllData = ref<TransactionInfoResponse[]>([]);
|
const transactionExploreAllData = ref<TransactionInfoResponse[]>([]);
|
||||||
@@ -154,6 +440,156 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
return result;
|
return result;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const categoriedTransactions = computed<Record<string, CategoriedTransactions>>(() => {
|
||||||
|
if (!allTransactions.value || allTransactions.value.length < 1) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const chartType = TransactionExploreChartType.valueOf(transactionExploreFilter.value.chartType);
|
||||||
|
const categoryDimension = TransactionExploreDataDimension.valueOf(transactionExploreFilter.value.categoryDimension);
|
||||||
|
const seriesDimension = chartType?.seriesDimensionRequired ? TransactionExploreDataDimension.valueOf(transactionExploreFilter.value.seriesDimension) : TransactionExploreDataDimension.SeriesDimensionDefault;
|
||||||
|
|
||||||
|
if (!chartType || !categoryDimension || !seriesDimension) {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
const categoriedDataMap: Record<string, CategoriedTransactions> = {};
|
||||||
|
|
||||||
|
for (const transaction of allTransactions.value) {
|
||||||
|
if (!transactionExploreFilter.value.query || transactionExploreFilter.value.query.length < 1) {
|
||||||
|
addTransactionToCategoriedDataMap(categoriedDataMap, categoryDimension, seriesDimension, '', 0, transaction);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const [query, index] of itemAndIndex(transactionExploreFilter.value.query)) {
|
||||||
|
if (query.match(transaction)) {
|
||||||
|
addTransactionToCategoriedDataMap(categoriedDataMap, categoryDimension, seriesDimension, query.name, index, transaction);
|
||||||
|
|
||||||
|
if (categoryDimension !== TransactionExploreDataDimension.Query) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return categoriedDataMap;
|
||||||
|
});
|
||||||
|
|
||||||
|
const categoriedTransactionExploreData = computed<CategoriedTransactionExploreData[]>(() => {
|
||||||
|
if (!allTransactions.value || allTransactions.value.length < 1) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const chartType = TransactionExploreChartType.valueOf(transactionExploreFilter.value.chartType);
|
||||||
|
const categoryDimension = TransactionExploreDataDimension.valueOf(transactionExploreFilter.value.categoryDimension);
|
||||||
|
const seriesDimension = chartType?.seriesDimensionRequired ? TransactionExploreDataDimension.valueOf(transactionExploreFilter.value.seriesDimension) : TransactionExploreDataDimension.SeriesDimensionDefault;
|
||||||
|
const valueMetric = TransactionExploreValueMetric.valueOf(transactionExploreFilter.value.valueMetric);
|
||||||
|
|
||||||
|
if (!chartType || !categoryDimension || !seriesDimension || !valueMetric) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultCurrency = userStore.currentUserDefaultCurrency;
|
||||||
|
const result: CategoriedTransactionExploreData[] = [];
|
||||||
|
const categoriedDataMap = categoriedTransactions.value;
|
||||||
|
|
||||||
|
for (const categoriedTransactions of values(categoriedDataMap)) {
|
||||||
|
const dataItems: CategoriedTransactionExploreDataItem[] = [];
|
||||||
|
let allSeriesedTransactions: Record<string, SeriesedTransactions> = categoriedTransactions.trasactions;
|
||||||
|
|
||||||
|
// merge all series into one for pie/radar chart
|
||||||
|
if (chartType === TransactionExploreChartType.Pie || chartType === TransactionExploreChartType.Radar) {
|
||||||
|
const transactions: TransactionInsightDataItem[] = [];
|
||||||
|
|
||||||
|
for (const seriesedTransactions of values(categoriedTransactions.trasactions)) {
|
||||||
|
transactions.push(...seriesedTransactions.trasactions);
|
||||||
|
}
|
||||||
|
|
||||||
|
allSeriesedTransactions = {};
|
||||||
|
allSeriesedTransactions['none'] = {
|
||||||
|
seriesName: valueMetric?.name ?? 'Unknown',
|
||||||
|
seriesNameNeedI18n: true,
|
||||||
|
seriesId: 'none',
|
||||||
|
seriesIdType: TransactionExploreDimensionType.Other,
|
||||||
|
trasactions: transactions
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const seriesedTransactions of values(allSeriesedTransactions)) {
|
||||||
|
const allSourceAmountsInDefaultCurrency: number[] = [];
|
||||||
|
let totalSourceAmountSumInDefaultCurrency: number = 0;
|
||||||
|
let minimumSourceAmountInDefaultCurrency: number = Number.MAX_SAFE_INTEGER;
|
||||||
|
let maximumSourceAmountInDefaultCurrency: number = Number.MIN_SAFE_INTEGER;
|
||||||
|
|
||||||
|
for (const transaction of seriesedTransactions.trasactions) {
|
||||||
|
let amountInDefaultCurrency: number = transaction.sourceAmount;
|
||||||
|
|
||||||
|
if (transaction.sourceAccount.currency !== defaultCurrency) {
|
||||||
|
const amount = exchangeRatesStore.getExchangedAmount(transaction.sourceAmount, transaction.sourceAccount.currency, defaultCurrency);
|
||||||
|
|
||||||
|
if (isNumber(amount)) {
|
||||||
|
amountInDefaultCurrency = Math.trunc(amount);
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
allSourceAmountsInDefaultCurrency.push(amountInDefaultCurrency);
|
||||||
|
totalSourceAmountSumInDefaultCurrency += amountInDefaultCurrency;
|
||||||
|
|
||||||
|
if (amountInDefaultCurrency >= 0 && amountInDefaultCurrency < minimumSourceAmountInDefaultCurrency) {
|
||||||
|
minimumSourceAmountInDefaultCurrency = amountInDefaultCurrency;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (amountInDefaultCurrency > maximumSourceAmountInDefaultCurrency) {
|
||||||
|
maximumSourceAmountInDefaultCurrency = amountInDefaultCurrency;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let value: number = 0;
|
||||||
|
|
||||||
|
if (valueMetric === TransactionExploreValueMetric.TransactionCount) {
|
||||||
|
value = allSourceAmountsInDefaultCurrency.length;
|
||||||
|
} else if (valueMetric === TransactionExploreValueMetric.SourceAmountSum) {
|
||||||
|
value = totalSourceAmountSumInDefaultCurrency;
|
||||||
|
} else if (valueMetric === TransactionExploreValueMetric.SourceAmountAverage) {
|
||||||
|
value = allSourceAmountsInDefaultCurrency.length > 0 ? Math.trunc(totalSourceAmountSumInDefaultCurrency / allSourceAmountsInDefaultCurrency.length) : 0;
|
||||||
|
} else if (valueMetric === TransactionExploreValueMetric.SourceAmountMedian) {
|
||||||
|
if (allSourceAmountsInDefaultCurrency.length > 0) {
|
||||||
|
allSourceAmountsInDefaultCurrency.sort((a, b) => a - b);
|
||||||
|
value = allSourceAmountsInDefaultCurrency[Math.floor(allSourceAmountsInDefaultCurrency.length / 2)] as number;
|
||||||
|
} else {
|
||||||
|
value = 0;
|
||||||
|
}
|
||||||
|
} else if (valueMetric === TransactionExploreValueMetric.SourceAmountMinimum) {
|
||||||
|
value = minimumSourceAmountInDefaultCurrency === Number.MAX_SAFE_INTEGER ? 0 : minimumSourceAmountInDefaultCurrency;
|
||||||
|
} else if (valueMetric === TransactionExploreValueMetric.SourceAmountMaximum) {
|
||||||
|
value = maximumSourceAmountInDefaultCurrency === Number.MIN_SAFE_INTEGER ? 0 : maximumSourceAmountInDefaultCurrency;
|
||||||
|
}
|
||||||
|
|
||||||
|
dataItems.push({
|
||||||
|
seriesName: seriesedTransactions.seriesName,
|
||||||
|
seriesNameNeedI18n: seriesedTransactions.seriesNameNeedI18n,
|
||||||
|
seriesNameI18nParameters: seriesedTransactions.seriesNameI18nParameters,
|
||||||
|
seriesId: seriesedTransactions.seriesId,
|
||||||
|
seriesIdType: seriesedTransactions.seriesIdType,
|
||||||
|
value: value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
result.push({
|
||||||
|
categoryName: categoriedTransactions.categoryName,
|
||||||
|
categoryNameNeedI18n: categoriedTransactions.categoryNameNeedI18n,
|
||||||
|
categoryNameI18nParameters: categoriedTransactions.categoryNameI18nParameters,
|
||||||
|
categoryId: categoriedTransactions.categoryId,
|
||||||
|
categoryIdType: categoriedTransactions.categoryIdType,
|
||||||
|
data: dataItems
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
function updateTransactionExploreInvalidState(invalidState: boolean): void {
|
function updateTransactionExploreInvalidState(invalidState: boolean): void {
|
||||||
transactionExploreStateInvalid.value = invalidState;
|
transactionExploreStateInvalid.value = invalidState;
|
||||||
}
|
}
|
||||||
@@ -163,6 +599,10 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
transactionExploreFilter.value.startTime = 0;
|
transactionExploreFilter.value.startTime = 0;
|
||||||
transactionExploreFilter.value.endTime = 0;
|
transactionExploreFilter.value.endTime = 0;
|
||||||
transactionExploreFilter.value.query = [];
|
transactionExploreFilter.value.query = [];
|
||||||
|
transactionExploreFilter.value.chartType = TransactionExploreChartType.Default.value;
|
||||||
|
transactionExploreFilter.value.categoryDimension = TransactionExploreDataDimension.CategoryDimensionDefault.value;
|
||||||
|
transactionExploreFilter.value.seriesDimension = TransactionExploreDataDimension.SeriesDimensionDefault.value;
|
||||||
|
transactionExploreFilter.value.valueMetric = TransactionExploreValueMetric.Default.value;
|
||||||
transactionExploreAllData.value = [];
|
transactionExploreAllData.value = [];
|
||||||
transactionExploreStateInvalid.value = true;
|
transactionExploreStateInvalid.value = true;
|
||||||
}
|
}
|
||||||
@@ -205,6 +645,10 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
|
|
||||||
if (resetQuery) {
|
if (resetQuery) {
|
||||||
transactionExploreFilter.value.query = [];
|
transactionExploreFilter.value.query = [];
|
||||||
|
transactionExploreFilter.value.chartType = TransactionExploreChartType.Default.value;
|
||||||
|
transactionExploreFilter.value.categoryDimension = TransactionExploreDataDimension.CategoryDimensionDefault.value;
|
||||||
|
transactionExploreFilter.value.seriesDimension = TransactionExploreDataDimension.SeriesDimensionDefault.value;
|
||||||
|
transactionExploreFilter.value.valueMetric = TransactionExploreValueMetric.Default.value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -226,6 +670,31 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
changed = true;
|
changed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (filter && isDefined(filter.chartType) && transactionExploreFilter.value.chartType !== filter.chartType) {
|
||||||
|
transactionExploreFilter.value.chartType = filter.chartType;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter && isDefined(filter.categoryDimension) && transactionExploreFilter.value.categoryDimension !== filter.categoryDimension) {
|
||||||
|
transactionExploreFilter.value.categoryDimension = filter.categoryDimension;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter && isDefined(filter.seriesDimension) && transactionExploreFilter.value.seriesDimension !== filter.seriesDimension) {
|
||||||
|
transactionExploreFilter.value.seriesDimension = filter.seriesDimension;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (filter && isDefined(filter.valueMetric) && transactionExploreFilter.value.valueMetric !== filter.valueMetric) {
|
||||||
|
transactionExploreFilter.value.valueMetric = filter.valueMetric;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (transactionExploreFilter.value.seriesDimension === transactionExploreFilter.value.categoryDimension && transactionExploreFilter.value.seriesDimension !== TransactionExploreDataDimension.SeriesDimensionDefault.value) {
|
||||||
|
transactionExploreFilter.value.seriesDimension = TransactionExploreDataDimension.SeriesDimensionDefault.value;
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,6 +716,28 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
return querys.join('&');
|
return querys.join('&');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getTransactionListPageParams(dimensionType: TransactionExploreDimensionType, itemId: string): string {
|
||||||
|
const querys: string[] = [];
|
||||||
|
|
||||||
|
if (dimensionType === TransactionExploreDimensionType.TransactionType) {
|
||||||
|
querys.push(`type=${itemId}`);
|
||||||
|
} else if (dimensionType === TransactionExploreDimensionType.Account) {
|
||||||
|
querys.push(`accountIds=${itemId}`);
|
||||||
|
} else if (dimensionType === TransactionExploreDimensionType.Category) {
|
||||||
|
querys.push(`categoryIds=${itemId}`);
|
||||||
|
} else if (dimensionType === TransactionExploreDimensionType.Amount) {
|
||||||
|
querys.push(`amountFilter=${encodeURIComponent(AmountFilterType.EqualTo.toTextualFilter(parseInt(itemId)))}`);
|
||||||
|
} else {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
querys.push('dateType=' + transactionExploreFilter.value.dateRangeType);
|
||||||
|
querys.push('minTime=' + transactionExploreFilter.value.startTime);
|
||||||
|
querys.push('maxTime=' + transactionExploreFilter.value.endTime);
|
||||||
|
|
||||||
|
return querys.join('&');
|
||||||
|
}
|
||||||
|
|
||||||
function loadAllTransactions({ force }: { force: boolean }): Promise<TransactionInfoResponse[]> {
|
function loadAllTransactions({ force }: { force: boolean }): Promise<TransactionInfoResponse[]> {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
services.getAllTransactions({
|
services.getAllTransactions({
|
||||||
@@ -292,12 +783,14 @@ export const useExploresStore = defineStore('explores', () => {
|
|||||||
transactionExploreStateInvalid,
|
transactionExploreStateInvalid,
|
||||||
// computed
|
// computed
|
||||||
filteredTransactions,
|
filteredTransactions,
|
||||||
|
categoriedTransactionExploreData,
|
||||||
// functions
|
// functions
|
||||||
updateTransactionExploreInvalidState,
|
updateTransactionExploreInvalidState,
|
||||||
resetTransactionExplores,
|
resetTransactionExplores,
|
||||||
initTransactionExploreFilter,
|
initTransactionExploreFilter,
|
||||||
updateTransactionExploreFilter,
|
updateTransactionExploreFilter,
|
||||||
getTransactionExplorePageParams,
|
getTransactionExplorePageParams,
|
||||||
|
getTransactionListPageParams,
|
||||||
loadAllTransactions
|
loadAllTransactions
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -78,7 +78,7 @@
|
|||||||
<v-spacer/>
|
<v-spacer/>
|
||||||
<v-btn density="comfortable" color="default" variant="text" class="ms-2"
|
<v-btn density="comfortable" color="default" variant="text" class="ms-2"
|
||||||
:disabled="loading" :icon="true"
|
:disabled="loading" :icon="true"
|
||||||
v-if="activeTab !== 'query'">
|
v-if="activeTab === 'table' || activeTab === 'chart'">
|
||||||
<v-icon :icon="mdiDotsVertical" />
|
<v-icon :icon="mdiDotsVertical" />
|
||||||
<v-menu activator="parent">
|
<v-menu activator="parent">
|
||||||
<v-list>
|
<v-list>
|
||||||
@@ -102,7 +102,8 @@
|
|||||||
v-model:count-per-page="countPerPage" />
|
v-model:count-per-page="countPerPage" />
|
||||||
</v-window-item>
|
</v-window-item>
|
||||||
<v-window-item value="chart">
|
<v-window-item value="chart">
|
||||||
|
<explore-chart-tab ref="exploreChartTab"
|
||||||
|
:loading="loading" />
|
||||||
</v-window-item>
|
</v-window-item>
|
||||||
</v-window>
|
</v-window>
|
||||||
</v-card>
|
</v-card>
|
||||||
@@ -127,6 +128,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import ExploreQueryTab from '@/views/desktop/insights/tabs/ExploreQueryTab.vue';
|
import ExploreQueryTab from '@/views/desktop/insights/tabs/ExploreQueryTab.vue';
|
||||||
import ExploreDataTableTab from '@/views/desktop/insights/tabs/ExploreDataTableTab.vue';
|
import ExploreDataTableTab from '@/views/desktop/insights/tabs/ExploreDataTableTab.vue';
|
||||||
|
import ExploreChartTab from '@/views/desktop/insights/tabs/ExploreChartTab.vue';
|
||||||
import ExportDialog from '@/views/desktop/statistics/transaction/dialogs/ExportDialog.vue';
|
import ExportDialog from '@/views/desktop/statistics/transaction/dialogs/ExportDialog.vue';
|
||||||
import SnackBar from '@/components/desktop/SnackBar.vue';
|
import SnackBar from '@/components/desktop/SnackBar.vue';
|
||||||
|
|
||||||
@@ -180,6 +182,7 @@ const props = defineProps<InsightsExploreProps>();
|
|||||||
type ExplorePageTabType = 'query' | 'table' | 'chart';
|
type ExplorePageTabType = 'query' | 'table' | 'chart';
|
||||||
type SnackBarType = InstanceType<typeof SnackBar>;
|
type SnackBarType = InstanceType<typeof SnackBar>;
|
||||||
type ExploreDataTableTabType = InstanceType<typeof ExploreDataTableTab>;
|
type ExploreDataTableTabType = InstanceType<typeof ExploreDataTableTab>;
|
||||||
|
type ExploreChartTabType = InstanceType<typeof ExploreChartTab>;
|
||||||
type ExportDialogType = InstanceType<typeof ExportDialog>;
|
type ExportDialogType = InstanceType<typeof ExportDialog>;
|
||||||
|
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
@@ -201,6 +204,7 @@ const exploresStore = useExploresStore();
|
|||||||
|
|
||||||
const snackbar = useTemplateRef<SnackBarType>('snackbar');
|
const snackbar = useTemplateRef<SnackBarType>('snackbar');
|
||||||
const exploreDataTableTab = useTemplateRef<ExploreDataTableTabType>('exploreDataTableTab');
|
const exploreDataTableTab = useTemplateRef<ExploreDataTableTabType>('exploreDataTableTab');
|
||||||
|
const exploreChartTab = useTemplateRef<ExploreChartTabType>('exploreChartTab');
|
||||||
const exportDialog = useTemplateRef<ExportDialogType>('exportDialog');
|
const exportDialog = useTemplateRef<ExportDialogType>('exportDialog');
|
||||||
|
|
||||||
const loading = ref<boolean>(true);
|
const loading = ref<boolean>(true);
|
||||||
@@ -234,6 +238,10 @@ const allTabs = computed<{ name: string, value: ExplorePageTabType }[]>(() => {
|
|||||||
{
|
{
|
||||||
name: tt('Data Table'),
|
name: tt('Data Table'),
|
||||||
value: 'table'
|
value: 'table'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: tt('Chart'),
|
||||||
|
value: 'chart'
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
@@ -333,6 +341,12 @@ function exportResults(): void {
|
|||||||
if (activeTab.value === 'table' && filteredTransactions.value) {
|
if (activeTab.value === 'table' && filteredTransactions.value) {
|
||||||
const results = exploreDataTableTab.value?.buildExportResults();
|
const results = exploreDataTableTab.value?.buildExportResults();
|
||||||
|
|
||||||
|
if (results) {
|
||||||
|
exportDialog.value?.open(results);
|
||||||
|
}
|
||||||
|
} else if (activeTab.value === 'chart') {
|
||||||
|
const results = exploreChartTab.value?.buildExportResults();
|
||||||
|
|
||||||
if (results) {
|
if (results) {
|
||||||
exportDialog.value?.open(results);
|
exportDialog.value?.open(results);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,343 @@
|
|||||||
|
<template>
|
||||||
|
<v-card-text class="px-5 py-0 mb-4">
|
||||||
|
<v-row>
|
||||||
|
<v-col cols="12">
|
||||||
|
<div class="d-flex overflow-x-auto align-center gap-2 pt-2">
|
||||||
|
<v-select
|
||||||
|
class="flex-0-0"
|
||||||
|
min-width="150"
|
||||||
|
item-title="name"
|
||||||
|
item-value="value"
|
||||||
|
density="compact"
|
||||||
|
:disabled="loading"
|
||||||
|
:label="tt('Chart Type')"
|
||||||
|
:items="allTransactionExploreChartTypes"
|
||||||
|
:model-value="currentChartType"
|
||||||
|
@update:model-value="updateChartType($event as TransactionExploreChartTypeValue)"
|
||||||
|
/>
|
||||||
|
<v-select
|
||||||
|
class="flex-0-0"
|
||||||
|
min-width="150"
|
||||||
|
item-title="name"
|
||||||
|
item-value="value"
|
||||||
|
density="compact"
|
||||||
|
:disabled="loading"
|
||||||
|
:label="tt('Axis / Category')"
|
||||||
|
:items="allTransactionExploreDataDimensions"
|
||||||
|
:model-value="currentCategoryDimension"
|
||||||
|
@update:model-value="updateCategoryDimension($event as TransactionExploreDataDimensionType)"
|
||||||
|
/>
|
||||||
|
<v-select
|
||||||
|
class="flex-0-0"
|
||||||
|
min-width="150"
|
||||||
|
item-title="name"
|
||||||
|
item-value="value"
|
||||||
|
density="compact"
|
||||||
|
:disabled="loading || !TransactionExploreChartType.valueOf(currentChartType)?.seriesDimensionRequired"
|
||||||
|
:label="tt('Series')"
|
||||||
|
:items="allTransactionExploreDataDimensions"
|
||||||
|
:model-value="TransactionExploreChartType.valueOf(currentChartType)?.seriesDimensionRequired ? currentSeriesDimension : TransactionExploreDataDimension.None.value"
|
||||||
|
@update:model-value="updateSeriesDimension($event as TransactionExploreDataDimensionType)"
|
||||||
|
>
|
||||||
|
<template #item="{ props, item }">
|
||||||
|
<v-list-item :disabled="item.value === currentCategoryDimension && item.value !== TransactionExploreDataDimension.SeriesDimensionDefault.value" v-bind="props">
|
||||||
|
<template #title>
|
||||||
|
<div class="text-truncate">{{ item.raw.name }}</div>
|
||||||
|
</template>
|
||||||
|
</v-list-item>
|
||||||
|
</template>
|
||||||
|
</v-select>
|
||||||
|
<v-select
|
||||||
|
class="flex-0-0"
|
||||||
|
min-width="150"
|
||||||
|
item-title="name"
|
||||||
|
item-value="value"
|
||||||
|
density="compact"
|
||||||
|
:disabled="loading"
|
||||||
|
:label="tt('Value Metric')"
|
||||||
|
:items="allTransactionExploreValueMetrics"
|
||||||
|
:model-value="currentValueMetric"
|
||||||
|
@update:model-value="updateValueMetric($event as TransactionExploreValueMetricType)"
|
||||||
|
/>
|
||||||
|
<v-spacer class="flex-1-1"/>
|
||||||
|
</div>
|
||||||
|
</v-col>
|
||||||
|
</v-row>
|
||||||
|
</v-card-text>
|
||||||
|
<v-card-text :class="{ 'readonly': loading }" v-if="currentChartType === TransactionExploreChartType.Pie.value">
|
||||||
|
<pie-chart
|
||||||
|
:items="[
|
||||||
|
{id: '1', name: '---', value: 60, color: '7c7c7f'},
|
||||||
|
{id: '2', name: '---', value: 20, color: 'a5a5aa'},
|
||||||
|
{id: '3', name: '---', value: 20, color: 'c5c5c9'}
|
||||||
|
]"
|
||||||
|
:skeleton="true"
|
||||||
|
id-field="id"
|
||||||
|
name-field="name"
|
||||||
|
value-field="value"
|
||||||
|
color-field="color"
|
||||||
|
v-if="loading"
|
||||||
|
/>
|
||||||
|
<pie-chart
|
||||||
|
:items="categoryDimensionTransactionExploreData && categoryDimensionTransactionExploreData.length ? categoryDimensionTransactionExploreData : []"
|
||||||
|
:min-valid-percent="0.0001"
|
||||||
|
:show-value="true"
|
||||||
|
:show-percent="true"
|
||||||
|
:enable-click-item="true"
|
||||||
|
:amount-value="exploresStore.transactionExploreFilter.valueMetric !== TransactionExploreValueMetric.TransactionCount.value"
|
||||||
|
:default-currency="defaultCurrency"
|
||||||
|
id-field="categoryId"
|
||||||
|
name-field="categoryDisplayName"
|
||||||
|
value-field="value"
|
||||||
|
v-else-if="!loading"
|
||||||
|
@click="onClickPieChartItem"
|
||||||
|
/>
|
||||||
|
</v-card-text>
|
||||||
|
<v-card-text :class="{ 'readonly': loading }" v-if="currentChartType === TransactionExploreChartType.Radar.value">
|
||||||
|
<radar-chart
|
||||||
|
:items="[
|
||||||
|
{name: '---', value: 10},
|
||||||
|
{name: '---', value: 10},
|
||||||
|
{name: '---', value: 10},
|
||||||
|
{name: '---', value: 10},
|
||||||
|
{name: '---', value: 10},
|
||||||
|
{name: '---', value: 10}
|
||||||
|
]"
|
||||||
|
:skeleton="true"
|
||||||
|
name-field="name"
|
||||||
|
value-field="value"
|
||||||
|
v-if="loading"
|
||||||
|
/>
|
||||||
|
<radar-chart
|
||||||
|
:items="categoryDimensionTransactionExploreData && categoryDimensionTransactionExploreData.length ? categoryDimensionTransactionExploreData : []"
|
||||||
|
:min-valid-percent="0.0001"
|
||||||
|
:show-value="true"
|
||||||
|
:show-percent="true"
|
||||||
|
:amount-value="exploresStore.transactionExploreFilter.valueMetric !== TransactionExploreValueMetric.TransactionCount.value"
|
||||||
|
:default-currency="defaultCurrency"
|
||||||
|
name-field="categoryDisplayName"
|
||||||
|
value-field="value"
|
||||||
|
v-else-if="!loading"
|
||||||
|
/>
|
||||||
|
</v-card-text>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { computed } from 'vue';
|
||||||
|
import { useRouter } from 'vue-router';
|
||||||
|
|
||||||
|
import { useI18n } from '@/locales/helpers.ts';
|
||||||
|
|
||||||
|
import { useUserStore } from '@/stores/user.ts';
|
||||||
|
import {
|
||||||
|
type CategoriedInfo,
|
||||||
|
type SeriesedInfo,
|
||||||
|
TransactionExploreDimensionType,
|
||||||
|
useExploresStore
|
||||||
|
} from '@/stores/explore.ts';
|
||||||
|
|
||||||
|
import { type NameValue } from '@/core/base.ts';
|
||||||
|
import {
|
||||||
|
TransactionExploreChartTypeValue,
|
||||||
|
TransactionExploreChartType,
|
||||||
|
TransactionExploreDataDimensionType,
|
||||||
|
TransactionExploreDataDimension,
|
||||||
|
TransactionExploreValueMetricType,
|
||||||
|
TransactionExploreValueMetric
|
||||||
|
} from '@/core/explore.ts';
|
||||||
|
|
||||||
|
import {
|
||||||
|
isDefined
|
||||||
|
} from '@/lib/common.ts';
|
||||||
|
|
||||||
|
import {
|
||||||
|
parseDateTimeFromUnixTime
|
||||||
|
} from '@/lib/datetime.ts';
|
||||||
|
|
||||||
|
interface InsightsExploreDataTableTabProps {
|
||||||
|
loading?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface CategoryDimensionData {
|
||||||
|
categoryDisplayName: string;
|
||||||
|
categoryId: string;
|
||||||
|
categoryIdType: TransactionExploreDimensionType;
|
||||||
|
value: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
defineProps<InsightsExploreDataTableTabProps>();
|
||||||
|
|
||||||
|
const router = useRouter();
|
||||||
|
|
||||||
|
const {
|
||||||
|
tt,
|
||||||
|
getAllTransactionExploreDataDimensions,
|
||||||
|
getAllTransactionExploreValueMetrics,
|
||||||
|
getAllTransactionExploreChartTypes,
|
||||||
|
formatDateTimeToShortDateTime,
|
||||||
|
formatDateTimeToShortDate,
|
||||||
|
formatDateTimeToGregorianLikeShortYear,
|
||||||
|
formatDateTimeToGregorianLikeShortYearMonth,
|
||||||
|
formatDateTimeToGregorianLikeYearQuarter,
|
||||||
|
formatDateTimeToGregorianLikeFiscalYear,
|
||||||
|
formatAmountToLocalizedNumerals,
|
||||||
|
formatAmountToWesternArabicNumeralsWithoutDigitGrouping
|
||||||
|
} = useI18n();
|
||||||
|
|
||||||
|
const userStore = useUserStore();
|
||||||
|
const exploresStore = useExploresStore();
|
||||||
|
|
||||||
|
const defaultCurrency = computed<string>(() => userStore.currentUserDefaultCurrency);
|
||||||
|
|
||||||
|
const allTransactionExploreDataDimensions = computed<NameValue[]>(() => getAllTransactionExploreDataDimensions());
|
||||||
|
const allTransactionExploreValueMetrics = computed<NameValue[]>(() => getAllTransactionExploreValueMetrics());
|
||||||
|
const allTransactionExploreChartTypes = computed<NameValue[]>(() => getAllTransactionExploreChartTypes());
|
||||||
|
|
||||||
|
const currentCategoryDimension = computed<TransactionExploreDataDimensionType>(() => exploresStore.transactionExploreFilter.categoryDimension);
|
||||||
|
const currentSeriesDimension = computed<TransactionExploreDataDimensionType>(() => exploresStore.transactionExploreFilter.seriesDimension);
|
||||||
|
const currentValueMetric = computed<TransactionExploreValueMetricType>(() => exploresStore.transactionExploreFilter.valueMetric);
|
||||||
|
const currentChartType = computed<TransactionExploreChartTypeValue>(() => exploresStore.transactionExploreFilter.chartType);
|
||||||
|
|
||||||
|
const categoryDimensionTransactionExploreData = computed<CategoryDimensionData[]>(() => {
|
||||||
|
if (currentChartType.value !== TransactionExploreChartType.Pie.value && currentChartType.value !== TransactionExploreChartType.Radar.value) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!exploresStore.categoriedTransactionExploreData || !exploresStore.categoriedTransactionExploreData.length) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
const result: CategoryDimensionData[] = [];
|
||||||
|
|
||||||
|
for (const categoriedData of exploresStore.categoriedTransactionExploreData) {
|
||||||
|
const data = categoriedData.data[0];
|
||||||
|
|
||||||
|
if (!isDefined(data)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const displayName = getCategoriedDataDisplayName(categoriedData);
|
||||||
|
|
||||||
|
result.push({
|
||||||
|
categoryDisplayName: displayName,
|
||||||
|
categoryId: categoriedData.categoryId,
|
||||||
|
categoryIdType: categoriedData.categoryIdType,
|
||||||
|
value: data.value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
});
|
||||||
|
|
||||||
|
function getCategoriedDataDisplayName(info: CategoriedInfo | SeriesedInfo): string {
|
||||||
|
let name: string = '';
|
||||||
|
let needI18n: boolean | undefined = false;
|
||||||
|
let i18nParameters: Record<string, unknown> | undefined = undefined;
|
||||||
|
let dimessionType: TransactionExploreDataDimensionType = TransactionExploreDataDimension.None.value;
|
||||||
|
|
||||||
|
if ('categoryName' in info) {
|
||||||
|
name = info.categoryName;
|
||||||
|
needI18n = info.categoryNameNeedI18n;
|
||||||
|
i18nParameters = info.categoryNameI18nParameters;
|
||||||
|
dimessionType = exploresStore.transactionExploreFilter.categoryDimension;
|
||||||
|
} else if ('seriesName' in info) {
|
||||||
|
name = info.seriesName;
|
||||||
|
needI18n = info.seriesNameNeedI18n;
|
||||||
|
i18nParameters = info.seriesNameI18nParameters;
|
||||||
|
dimessionType = exploresStore.transactionExploreFilter.seriesDimension;
|
||||||
|
}
|
||||||
|
|
||||||
|
let displayName: string = name;
|
||||||
|
|
||||||
|
// convert the name to i18n if needed
|
||||||
|
if (needI18n && i18nParameters) {
|
||||||
|
displayName = tt(name, i18nParameters);
|
||||||
|
} else if (needI18n && !i18nParameters) {
|
||||||
|
displayName = tt(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
// convert the name to formatted date time if needed
|
||||||
|
if (dimessionType === TransactionExploreDataDimension.DateTime.value) {
|
||||||
|
displayName = formatDateTimeToShortDateTime(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
} else if (dimessionType === TransactionExploreDataDimension.DateTimeByDay.value) {
|
||||||
|
displayName = formatDateTimeToShortDate(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
} else if (dimessionType === TransactionExploreDataDimension.DateTimeByMonth.value) {
|
||||||
|
displayName = formatDateTimeToGregorianLikeShortYearMonth(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
} else if (dimessionType === TransactionExploreDataDimension.DateTimeByQuarter.value) {
|
||||||
|
displayName = formatDateTimeToGregorianLikeYearQuarter(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
} else if (dimessionType === TransactionExploreDataDimension.DateTimeByYear.value) {
|
||||||
|
displayName = formatDateTimeToGregorianLikeShortYear(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
} else if (dimessionType === TransactionExploreDataDimension.DateTimeByFiscalYear.value) {
|
||||||
|
displayName = formatDateTimeToGregorianLikeFiscalYear(parseDateTimeFromUnixTime(parseInt(name)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dimessionType === TransactionExploreDataDimension.SourceAmount.value
|
||||||
|
|| dimessionType === TransactionExploreDataDimension.DestinationAmount.value) {
|
||||||
|
if (name !== '' && name !== 'none' && Number.isFinite(parseInt(name))) {
|
||||||
|
displayName = formatAmountToLocalizedNumerals(parseInt(name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateCategoryDimension(categoryDimension: TransactionExploreDataDimensionType): void {
|
||||||
|
exploresStore.updateTransactionExploreFilter({
|
||||||
|
categoryDimension: categoryDimension,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateSeriesDimension(seriesDimension: TransactionExploreDataDimensionType): void {
|
||||||
|
exploresStore.updateTransactionExploreFilter({
|
||||||
|
seriesDimension: seriesDimension,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateValueMetric(valueMetric: TransactionExploreValueMetricType): void {
|
||||||
|
exploresStore.updateTransactionExploreFilter({
|
||||||
|
valueMetric: valueMetric,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function updateChartType(chartType: TransactionExploreChartTypeValue): void {
|
||||||
|
exploresStore.updateTransactionExploreFilter({
|
||||||
|
chartType: chartType,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function onClickPieChartItem(item: Record<string, unknown>): void {
|
||||||
|
if (!item || !('categoryId' in item) || !('categoryIdType' in item)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = (item as unknown) as CategoryDimensionData;
|
||||||
|
const params: string = exploresStore.getTransactionListPageParams(data.categoryIdType, data.categoryId);
|
||||||
|
|
||||||
|
if (params) {
|
||||||
|
router.push(`/transaction/list?${params}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildExportResults(): { headers: string[], data: string[][] } | undefined {
|
||||||
|
if (currentChartType.value === TransactionExploreChartType.Pie.value || currentChartType.value === TransactionExploreChartType.Radar.value) {
|
||||||
|
const valueMetric = TransactionExploreValueMetric.valueOf(exploresStore.transactionExploreFilter.valueMetric);
|
||||||
|
|
||||||
|
return {
|
||||||
|
headers: [
|
||||||
|
tt('Name'),
|
||||||
|
tt(valueMetric?.name ?? 'Unknown')
|
||||||
|
],
|
||||||
|
data: categoryDimensionTransactionExploreData.value.map(data => [
|
||||||
|
data.categoryDisplayName,
|
||||||
|
valueMetric?.isAmount ? formatAmountToWesternArabicNumeralsWithoutDigitGrouping(data.value) : data.value.toString(10)
|
||||||
|
])
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
buildExportResults
|
||||||
|
});
|
||||||
|
</script>
|
||||||
@@ -15,11 +15,11 @@
|
|||||||
<v-card border class="card-title-with-bg mt-4">
|
<v-card border class="card-title-with-bg mt-4">
|
||||||
<v-card-title class="d-flex align-center py-2 px-5">
|
<v-card-title class="d-flex align-center py-2 px-5">
|
||||||
<v-icon :icon="mdiTextBoxSearchOutline" size="20" />
|
<v-icon :icon="mdiTextBoxSearchOutline" size="20" />
|
||||||
<span class="query-name text-subtitle-1 ms-2" v-if="editingQuery !== query">{{ query.name || `${tt('Query')} #${queryIndex + 1}` }}</span>
|
<span class="query-name text-subtitle-1 ms-2" v-if="editingQuery !== query">{{ query.name || tt('format.misc.queryIndex', { index: queryIndex + 1 }) }}</span>
|
||||||
<div class="query-name-edit ms-2" v-if="editingQuery === query">
|
<div class="query-name-edit ms-2" v-if="editingQuery === query">
|
||||||
<v-text-field autofocus type="text" density="compact" variant="underlined"
|
<v-text-field autofocus type="text" density="compact" variant="underlined"
|
||||||
:disabled="loading"
|
:disabled="loading"
|
||||||
:placeholder="`${tt('Query')} #${queryIndex + 1}`"
|
:placeholder="tt('format.misc.queryIndex', { index: queryIndex + 1 })"
|
||||||
v-text-field-auto-width="{ minWidth: 20, maxWidth: 300, auxSpanId: `query-name-aux-span-${queryIndex + 1}` }"
|
v-text-field-auto-width="{ minWidth: 20, maxWidth: 300, auxSpanId: `query-name-aux-span-${queryIndex + 1}` }"
|
||||||
v-model="editingQueryName"
|
v-model="editingQueryName"
|
||||||
@keyup.esc="cancelUpdateQueryName"
|
@keyup.esc="cancelUpdateQueryName"
|
||||||
|
|||||||
@@ -267,6 +267,7 @@
|
|||||||
:show-value="showAmountInChart"
|
:show-value="showAmountInChart"
|
||||||
:show-percent="showPercentInCategoricalChart"
|
:show-percent="showPercentInCategoricalChart"
|
||||||
:enable-click-item="true"
|
:enable-click-item="true"
|
||||||
|
:amount-value="true"
|
||||||
:default-currency="defaultCurrency"
|
:default-currency="defaultCurrency"
|
||||||
id-field="id"
|
id-field="id"
|
||||||
name-field="name"
|
name-field="name"
|
||||||
@@ -353,6 +354,7 @@
|
|||||||
:min-valid-percent="0.0001"
|
:min-valid-percent="0.0001"
|
||||||
:show-value="showAmountInChart"
|
:show-value="showAmountInChart"
|
||||||
:show-percent="showPercentInCategoricalChart"
|
:show-percent="showPercentInCategoricalChart"
|
||||||
|
:amount-value="true"
|
||||||
:default-currency="defaultCurrency"
|
:default-currency="defaultCurrency"
|
||||||
name-field="name"
|
name-field="name"
|
||||||
value-field="totalAmount"
|
value-field="totalAmount"
|
||||||
|
|||||||
@@ -86,6 +86,7 @@
|
|||||||
:show-center-text="true"
|
:show-center-text="true"
|
||||||
:show-selected-item-info="true"
|
:show-selected-item-info="true"
|
||||||
:enable-click-item="true"
|
:enable-click-item="true"
|
||||||
|
:amount-value="true"
|
||||||
:default-currency="defaultCurrency"
|
:default-currency="defaultCurrency"
|
||||||
class="statistics-pie-chart"
|
class="statistics-pie-chart"
|
||||||
name-field="name"
|
name-field="name"
|
||||||
|
|||||||
Reference in New Issue
Block a user