diff --git a/lib/Pear/LocalLoop/Controller/Admin/Transactions.pm b/lib/Pear/LocalLoop/Controller/Admin/Transactions.pm index d42c3d2..05bcd70 100644 --- a/lib/Pear/LocalLoop/Controller/Admin/Transactions.pm +++ b/lib/Pear/LocalLoop/Controller/Admin/Transactions.pm @@ -1,11 +1,67 @@ package Pear::LocalLoop::Controller::Admin::Transactions; use Mojo::Base 'Mojolicious::Controller'; +use List::Util qw/ max sum /; + has result_set => sub { my $c = shift; return $c->schema->resultset('Transaction'); }; +sub index { + my $c = shift; + + my $pending_transaction_rs = $c->schema->resultset('Organisation')->search({ pending => 1 })->entity->sales; + + my $driver = $c->schema->storage->dbh->{Driver}->{Name}; + my $week_transaction_rs = $c->schema->resultset('ViewQuantisedTransaction' . $driver)->search( + {}, + { + columns => [ + { + quantised => 'quantised_weeks', + count => \"COUNT(*)", + sum_value => $c->pg_or_sqlite( + 'SUM("me"."value")', + 'SUM("me"."value")', + ), + } + ], + group_by => 'quantised_weeks', + order_by => { '-asc' => 'quantised_weeks' }, + } + ); + + my @all_weeks = $week_transaction_rs->all; + my $first_week_count = $all_weeks[0]->get_column('count') || 0; + my $first_week_value = $all_weeks[0]->get_column('sum_value') / 100000 || 0; + my $second_week_count = defined $all_weeks[1] ? $all_weeks[1]->get_column('count') || 0 : 0; + my $second_week_value = defined $all_weeks[1] ? $all_weeks[1]->get_column('sum_value') / 100000 || 0 : 0; + + my $transaction_rs = $c->schema->resultset('Transaction'); + my $value_rs_col = $transaction_rs->get_column('value'); + my $max_value = $value_rs_col->max / 100000 || 0; + my $avg_value = sprintf( '%.2f', $value_rs_col->func('AVG') / 100000) || 0; + my $sum_value = $value_rs_col->sum / 100000 || 0; + my $count = $transaction_rs->count || 0; + + my $placeholder = 'Placeholder'; + $c->stash( + placeholder => $placeholder, + pending_trans => $pending_transaction_rs->count, + weeks => { + first_count => $first_week_count, + second_count => $second_week_count, + first_value => $first_week_value, + second_value => $second_week_value, + max => $max_value, + avg => $avg_value, + sum => $sum_value, + count => $count, + }, + ); +} + sub read { my $c = shift; @@ -51,4 +107,19 @@ if ( my $transaction = $c->result_set->find($id) ) { } } +sub pg_or_sqlite { + my ( $c, $pg_sql, $sqlite_sql ) = @_; + + my $driver = $c->schema->storage->dbh->{Driver}->{Name}; + + if ( $driver eq 'Pg' ) { + return \$pg_sql; + } elsif ( $driver eq 'SQLite' ) { + return \$sqlite_sql; + } else { + $c->app->log->warn('Unknown Driver Used'); + return undef; + } +} + 1; diff --git a/templates/admin/transactions/index.html.ep b/templates/admin/transactions/index.html.ep index 9ed00f1..be1843d 100644 --- a/templates/admin/transactions/index.html.ep +++ b/templates/admin/transactions/index.html.ep @@ -11,3 +11,91 @@ Success! <%= $success %> % } +
+
+
+ Number of Transactions +
+
+

+ %= $weeks->{count} +

+
+
+
+
+ Sum of all Transaction Value +
+
+

+ %= '£' . $weeks->{sum} +

+
+
+
+
+
+
+ No. Transactions This Week +
+
+

+ %= $weeks->{first_count} +

+
+
+
+
+ No. Transactions Last Week +
+
+

+ %= $weeks->{second_count} +

+
+
+
+
+
+
+ Sum of Transactions This Week +
+
+

+ %= $weeks->{first_value} +

+
+
+
+
+ Sum of Transactions Last Week +
+
+

+ %= $weeks->{second_value} +

+
+
+
+
+
+
+ Maximum Transaction Value +
+
+

+ %= '£' . $weeks->{max} +

+
+
+
+
+ Average Transaction Value +
+
+

+ %= '£' . $weeks->{avg} +

+
+
+