Dashboard

This commit is contained in:
Hillel Coren 2018-11-13 00:01:33 +02:00
parent 5898bb0d21
commit 1c69b7ab8c
1 changed files with 64 additions and 153 deletions

View File

@ -101,8 +101,13 @@ class DashboardPanels extends StatelessWidget {
); );
} }
Widget _invoiceChart(BuildContext context) { Widget _buildChart(
if (!viewModel.state.invoiceState.isLoaded) { {BuildContext context,
String title,
List<ChartDataGroup> currentData,
List<ChartDataGroup> previousData,
bool isLoaded}) {
if (!isLoaded) {
return LoadingIndicator(useCard: true); return LoadingIndicator(useCard: true);
} }
@ -110,20 +115,8 @@ class DashboardPanels extends StatelessWidget {
final settings = viewModel.dashboardUIState; final settings = viewModel.dashboardUIState;
final state = viewModel.state; final state = viewModel.state;
final data = memoizedChartInvoices(state.selectedCompany, currentData.forEach((dataGroup) {
settings, state.invoiceState.map, state.clientState.map); final index = currentData.indexOf(dataGroup);
List<ChartDataGroup> offsetData;
if (settings.enableComparison) {
offsetData = memoizedChartInvoices(
state.selectedCompany,
settings.rebuild((b) => b..offset += 1),
state.invoiceState.map,
state.clientState.map);
}
data.forEach((dataGroup) {
final index = data.indexOf(dataGroup);
dataGroup.chartSeries = <Series<dynamic, DateTime>>[ dataGroup.chartSeries = <Series<dynamic, DateTime>>[
charts.Series<ChartMoneyData, DateTime>( charts.Series<ChartMoneyData, DateTime>(
domainFn: (ChartMoneyData chartData, _) => chartData.date, domainFn: (ChartMoneyData chartData, _) => chartData.date,
@ -131,25 +124,23 @@ class DashboardPanels extends StatelessWidget {
colorFn: (ChartMoneyData chartData, _) => colorFn: (ChartMoneyData chartData, _) =>
charts.MaterialPalette.blue.shadeDefault, charts.MaterialPalette.blue.shadeDefault,
id: DashboardChart.PERIOD_CURRENT, id: DashboardChart.PERIOD_CURRENT,
displayName: settings.enableComparison displayName: settings.enableComparison ? localization.current : title,
? localization.current
: localization.invoices,
data: dataGroup.rawSeries, data: dataGroup.rawSeries,
) )
]; ];
if (settings.enableComparison) { if (settings.enableComparison) {
final List<ChartMoneyData> previousData = []; final List<ChartMoneyData> previous = [];
final currentSeries = dataGroup.rawSeries; final currentSeries = dataGroup.rawSeries;
final offsetSeries = offsetData[index].rawSeries; final previousSeries = previousData[index].rawSeries;
dataGroup.previousTotal = offsetData[index].total; dataGroup.previousTotal = previousData[index].total;
for (int i = 0; for (int i = 0;
i < min(currentSeries.length, offsetSeries.length); i < min(currentSeries.length, previousSeries.length);
i++) { i++) {
previousData.add(ChartMoneyData(currentSeries[i].date, previous.add(
offsetSeries[i].amount)); ChartMoneyData(currentSeries[i].date, previousSeries[i].amount));
} }
dataGroup.chartSeries.add( dataGroup.chartSeries.add(
@ -160,40 +151,59 @@ class DashboardPanels extends StatelessWidget {
charts.MaterialPalette.gray.shadeDefault, charts.MaterialPalette.gray.shadeDefault,
id: DashboardChart.PERIOD_PREVIOUS, id: DashboardChart.PERIOD_PREVIOUS,
displayName: localization.previous, displayName: localization.previous,
data: previousData, data: previous,
), ),
); );
} }
}); });
return DashboardChart( return DashboardChart(
data: data, data: currentData,
title: localization.invoices, title: title,
currencyId: settings.currencyId > 0 currencyId: settings.currencyId > 0
? settings.currencyId ? settings.currencyId
: state.selectedCompany.currencyId, : state.selectedCompany.currencyId,
); );
} }
Widget _paymentChart(BuildContext context) { Widget _invoiceChart(BuildContext context) {
if (!viewModel.state.paymentState.isLoaded) { final isLoaded = viewModel.state.invoiceState.isLoaded;
return LoadingIndicator(useCard: true);
}
final localization = AppLocalization.of(context);
final settings = viewModel.dashboardUIState; final settings = viewModel.dashboardUIState;
final state = viewModel.state; final state = viewModel.state;
final currentData = memoizedChartInvoices(state.selectedCompany, settings,
state.invoiceState.map, state.clientState.map);
final data = memoizedChartPayments( List<ChartDataGroup> previousData;
if (settings.enableComparison) {
previousData = memoizedChartInvoices(
state.selectedCompany,
settings.rebuild((b) => b..offset += 1),
state.invoiceState.map,
state.clientState.map);
}
return _buildChart(
context: context,
currentData: currentData,
previousData: previousData,
isLoaded: isLoaded,
title: AppLocalization.of(context).invoices);
}
Widget _paymentChart(BuildContext context) {
final isLoaded = viewModel.state.paymentState.isLoaded;
final settings = viewModel.dashboardUIState;
final state = viewModel.state;
final currentData = memoizedChartPayments(
state.selectedCompany, state.selectedCompany,
settings, settings,
state.invoiceState.map, state.invoiceState.map,
state.clientState.map, state.clientState.map,
viewModel.state.paymentState.map); viewModel.state.paymentState.map);
List<ChartDataGroup> offsetData; List<ChartDataGroup> previousData;
if (settings.enableComparison) { if (settings.enableComparison) {
offsetData = memoizedChartPayments( previousData = memoizedChartPayments(
state.selectedCompany, state.selectedCompany,
settings.rebuild((b) => b..offset += 1), settings.rebuild((b) => b..offset += 1),
state.invoiceState.map, state.invoiceState.map,
@ -201,135 +211,36 @@ class DashboardPanels extends StatelessWidget {
viewModel.state.paymentState.map); viewModel.state.paymentState.map);
} }
data.forEach((dataGroup) { return _buildChart(
final index = data.indexOf(dataGroup); context: context,
dataGroup.chartSeries = <Series<dynamic, DateTime>>[ currentData: currentData,
charts.Series<ChartMoneyData, DateTime>( previousData: previousData,
domainFn: (ChartMoneyData chartData, _) => chartData.date, isLoaded: isLoaded,
measureFn: (ChartMoneyData chartData, _) => chartData.amount, title: AppLocalization.of(context).payments);
colorFn: (ChartMoneyData chartData, _) =>
charts.MaterialPalette.blue.shadeDefault,
id: DashboardChart.PERIOD_CURRENT,
displayName: settings.enableComparison
? localization.current
: localization.payments,
data: dataGroup.rawSeries,
)
];
if (settings.enableComparison) {
final List<ChartMoneyData> previousData = [];
final currentSeries = dataGroup.rawSeries;
final offsetSeries = offsetData[index].rawSeries;
dataGroup.previousTotal = offsetData[index].total;
for (int i = 0;
i < min(currentSeries.length, offsetSeries.length);
i++) {
previousData.add(ChartMoneyData(currentSeries[i].date,
offsetSeries[i].amount));
}
dataGroup.chartSeries.add(
charts.Series<ChartMoneyData, DateTime>(
domainFn: (ChartMoneyData chartData, _) => chartData.date,
measureFn: (ChartMoneyData chartData, _) => chartData.amount,
colorFn: (ChartMoneyData chartData, _) =>
charts.MaterialPalette.gray.shadeDefault,
id: DashboardChart.PERIOD_PREVIOUS,
displayName: localization.previous,
data: previousData,
),
);
}
});
return DashboardChart(
data: data,
title: localization.payments,
currencyId: settings.currencyId > 0
? settings.currencyId
: state.selectedCompany.currencyId,
);
} }
Widget _quoteChart(BuildContext context) { Widget _quoteChart(BuildContext context) {
if (!viewModel.state.quoteState.isLoaded) { final isLoaded = viewModel.state.quoteState.isLoaded;
return LoadingIndicator(useCard: true);
}
if (viewModel.state.quoteState.list.isEmpty) {
return Container();
}
final localization = AppLocalization.of(context);
final settings = viewModel.dashboardUIState; final settings = viewModel.dashboardUIState;
final state = viewModel.state; final state = viewModel.state;
final currentData = memoizedChartQuotes(state.selectedCompany, settings,
state.quoteState.map, state.clientState.map);
final data = memoizedChartQuotes(state.selectedCompany, List<ChartDataGroup> previousData;
settings, state.quoteState.map, state.clientState.map);
List<ChartDataGroup> offsetData;
if (settings.enableComparison) { if (settings.enableComparison) {
offsetData = memoizedChartQuotes( previousData = memoizedChartQuotes(
state.selectedCompany, state.selectedCompany,
settings.rebuild((b) => b..offset += 1), settings.rebuild((b) => b..offset += 1),
state.quoteState.map, state.quoteState.map,
state.clientState.map); state.clientState.map);
} }
data.forEach((dataGroup) { return _buildChart(
final index = data.indexOf(dataGroup); context: context,
dataGroup.chartSeries = <Series<dynamic, DateTime>>[ currentData: currentData,
charts.Series<ChartMoneyData, DateTime>( previousData: previousData,
domainFn: (ChartMoneyData chartData, _) => chartData.date, isLoaded: isLoaded,
measureFn: (ChartMoneyData chartData, _) => chartData.amount, title: AppLocalization.of(context).quotes);
colorFn: (ChartMoneyData chartData, _) =>
charts.MaterialPalette.blue.shadeDefault,
id: DashboardChart.PERIOD_CURRENT,
displayName: settings.enableComparison
? localization.current
: localization.quotes,
data: dataGroup.rawSeries,
)
];
if (settings.enableComparison) {
final List<ChartMoneyData> previousData = [];
final currentSeries = dataGroup.rawSeries;
final offsetSeries = offsetData[index].rawSeries;
dataGroup.previousTotal = offsetData[index].total;
for (int i = 0;
i < min(currentSeries.length, offsetSeries.length);
i++) {
previousData.add(ChartMoneyData(currentSeries[i].date,
offsetSeries[i].amount));
}
dataGroup.chartSeries.add(
charts.Series<ChartMoneyData, DateTime>(
domainFn: (ChartMoneyData chartData, _) => chartData.date,
measureFn: (ChartMoneyData chartData, _) => chartData.amount,
colorFn: (ChartMoneyData chartData, _) =>
charts.MaterialPalette.gray.shadeDefault,
id: DashboardChart.PERIOD_PREVIOUS,
displayName: localization.previous,
data: previousData,
),
);
}
});
return DashboardChart(
data: data,
title: localization.quotes,
currencyId: settings.currencyId > 0
? settings.currencyId
: state.selectedCompany.currencyId,
);
} }
@override @override