diff --git a/lib/data/models/entities.dart b/lib/data/models/entities.dart index 367c13a0d..2622ba4a9 100644 --- a/lib/data/models/entities.dart +++ b/lib/data/models/entities.dart @@ -35,8 +35,24 @@ class BaseItemResponse extends Object with _$BaseItemResponseSerializerMixin { class DashboardEntity extends Object with _$DashboardEntitySerializerMixin { double paidToDate; + int paidToDateCurrency; + double balances; + int balancesCurrency; + double averageInvoice; + int averageInvoiceCurrency; + int invoicesSent; + int activeClients; - DashboardEntity([this.paidToDate]); + DashboardEntity([ + this.paidToDate, + this.paidToDateCurrency, + this.balances, + this.balancesCurrency, + this.averageInvoice, + this.averageInvoiceCurrency, + this.invoicesSent, + this.activeClients, + ]); factory DashboardEntity.fromJson(Map json) => _$DashboardEntityFromJson(json); } diff --git a/lib/data/models/entities.g.dart b/lib/data/models/entities.g.dart index 63fd9e52a..dec581fe7 100644 --- a/lib/data/models/entities.g.dart +++ b/lib/data/models/entities.g.dart @@ -23,11 +23,35 @@ abstract class _$BaseItemResponseSerializerMixin { } DashboardEntity _$DashboardEntityFromJson(Map json) => - new DashboardEntity((json['paidToDate'] as num)?.toDouble()); + new DashboardEntity( + (json['paidToDate'] as num)?.toDouble(), + json['paidToDateCurrency'] as int, + (json['balances'] as num)?.toDouble(), + json['balancesCurrency'] as int, + (json['averageInvoice'] as num)?.toDouble(), + json['averageInvoiceCurrency'] as int, + json['invoicesSent'] as int, + json['activeClients'] as int); abstract class _$DashboardEntitySerializerMixin { double get paidToDate; - Map toJson() => {'paidToDate': paidToDate}; + int get paidToDateCurrency; + double get balances; + int get balancesCurrency; + double get averageInvoice; + int get averageInvoiceCurrency; + int get invoicesSent; + int get activeClients; + Map toJson() => { + 'paidToDate': paidToDate, + 'paidToDateCurrency': paidToDateCurrency, + 'balances': balances, + 'balancesCurrency': balancesCurrency, + 'averageInvoice': averageInvoice, + 'averageInvoiceCurrency': averageInvoiceCurrency, + 'invoicesSent': invoicesSent, + 'activeClients': activeClients + }; } ProductEntity _$ProductEntityFromJson(Map json) => diff --git a/lib/ui/dashboard/dashboard_panels.dart b/lib/ui/dashboard/dashboard_panels.dart index 3140732ca..f8fd3539c 100644 --- a/lib/ui/dashboard/dashboard_panels.dart +++ b/lib/ui/dashboard/dashboard_panels.dart @@ -15,15 +15,45 @@ class DashboardPanels extends StatelessWidget { @override Widget build(BuildContext context) { - print('building...'); - return AppLoading(builder: (context, loading) { - return loading - ? LoadingIndicator(key: NinjaKeys.productsLoading) - : _buildPanels(); - }); - } - - Text _buildPanels() { - return Text('Paid to Date: ' + dashboard.paidToDate.toString()); + return ListView( + padding: EdgeInsets.only(left: 12.0, right: 12.0, top: 20.0), + children: [ + DashboardPanel( + 'Total Revenue', Icons.credit_card, this.dashboard.paidToDate), + DashboardPanel( + 'Average Invoice', Icons.email, this.dashboard.averageInvoice), + DashboardPanel( + 'Outstanding', Icons.schedule, this.dashboard.balances), + DashboardPanel( + 'Invoices Sent', Icons.send, this.dashboard.invoicesSent, false), + DashboardPanel( + 'Active Clients', Icons.people, this.dashboard.activeClients, false), + ] + ); + } +} + +class DashboardPanel extends StatelessWidget { + DashboardPanel(this.title, this.icon, this.amount, [this.isMoney = true]); + + final String title; + final IconData icon; + final num amount; + final bool isMoney; + + @override + Widget build(BuildContext context) { + return Card( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + ListTile( + leading: Icon(this.icon), + title: Text(this.title), + trailing: Text(this.amount.toStringAsFixed(this.isMoney ? 2 : 0)), + ), + ], + ), + ); } }