From ec688eab3f5cbff8bd17b0cca9c20c295acb2481 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B8rn=20Rustad?= Date: Sat, 17 Aug 2013 14:57:27 +0200 Subject: [PATCH] Calculate and show switches --- lib/Duplo/Manager.pm | 47 ++++++++++++++++++++++++++++++++++ templates/manager/team.html.ep | 4 +++ 2 files changed, 51 insertions(+) diff --git a/lib/Duplo/Manager.pm b/lib/Duplo/Manager.pm index 88537e4..a4cb48d 100644 --- a/lib/Duplo/Manager.pm +++ b/lib/Duplo/Manager.pm @@ -25,6 +25,36 @@ sub get_director { ", undef, $team); } +sub get_switches { + my $self = shift; + my $team = shift; + my $dbh = $self->db(); + + my ($c, $s) = $dbh->selectrow_array(" + SELECT + COUNT(stage) - 1 AS count, + SUM(i) AS sum + FROM ( + SELECT + s.stage, icount(array_agg(rider) & lag(array_agg(rider)) OVER (ORDER BY \"date\")) AS i + FROM + rider_manager_team AS rmt + JOIN + stage AS s + ON (rmt.stage = s.stage) + WHERE + manager_team = ? + GROUP BY s.stage + ORDER BY + \"date\" + ) AS foo + ", undef, $team); + + my $switches = 10 * $c - $s; + + return $switches; +} + sub new_team_form { my $self = shift; my $race = $self->param('race'); @@ -104,6 +134,7 @@ sub team { stages => $stages, stage_team => \%stage_team, director => get_director($self, $team), + switches => get_switches($self, $team), ); } @@ -222,6 +253,22 @@ sub edit { VALUES (?, ?, ?) "); + my $switches = get_switches($self, $team); + + if ($switches > 20) { + $self->app->log->debug("Too many switches."); + $dbh->do(" + DELETE FROM + rider_manager_team + WHERE + manager_team = ? + AND + stage = ? + ", undef, $team, $stage); + + return $self->redirect_to('manager_team', team => $team) + } + $dbh->do(" UPDATE manager_team diff --git a/templates/manager/team.html.ep b/templates/manager/team.html.ep index d2f112f..42cd959 100644 --- a/templates/manager/team.html.ep +++ b/templates/manager/team.html.ep @@ -6,6 +6,9 @@ Edit % } +

Switches made

+

<%= $switches %>

+ % for my $stage (@{ $stages }) {

<%= $stage->{'name'} %>

@@ -36,3 +39,4 @@ % }
% } + -- 2.47.3