]> git.rustad.me Git - duplo/commitdiff
Director points
authorBjørn Rustad <rustadbjornen@gmail.com>
Tue, 20 Aug 2013 17:59:42 +0000 (19:59 +0200)
committerBjørn Rustad <rustadbjornen@gmail.com>
Tue, 20 Aug 2013 17:59:42 +0000 (19:59 +0200)
lib/Duplo.pm
lib/Duplo/Manager.pm
lib/Duplo/Points.pm
templates/manager/edit_form.html.ep
templates/manager/team.html.ep

index a66cede53ccdce95233c48dfc304e766205b6257..563650e028de9712f0aa8ce6f31539ba1e6f7104 100644 (file)
@@ -65,9 +65,12 @@ sub startup {
                my $user = $c->session('user');
                my $is_admin = defined $user ? is_admin($c, $user) : undef;
 
+               my $errors = $c->flash('errors');
+
                $c->stash(
                        user     => $user,
                        is_admin => $is_admin,
+                       errors   => $errors,
                );
        });
 
index 2bf9b5343bbda05341cd59f021a9b1d98b37a164..f1e66490ad6c2cabf8e95f3afac1e8b3eae26432 100644 (file)
@@ -124,12 +124,37 @@ sub team {
                  stage_team(?, ?)
                ");
 
+       my $dsth = $dbh->prepare("
+               SELECT
+                 mt.director,
+                 t.name,
+                 price,
+                 points
+               FROM
+                 manager_team AS mt
+               JOIN
+                 team AS t
+               ON (mt.director = t.team)
+               JOIN
+                 director_race AS dr
+               ON (mt.director = dr.director)
+               LEFT OUTER JOIN
+                 director_stage AS ds
+               ON (mt.director = ds.director)
+               WHERE
+                 (stage = ? OR stage IS NULL)
+               AND
+                 manager_team = ?
+               ");
+
        my %stage_team = ();
 
        for my $stage (@{ $stages }) {
-               $stage_team{$stage->{'stage'}} =
+               $stage_team{$stage->{'stage'}}->{'riders'} =
                        $dbh->selectall_arrayref($sth, { Slice => {} }, $stage->{'stage'}, $team);
 
+               $stage_team{$stage->{'stage'}}->{'director'} = $dbh->selectrow_hashref($dsth, undef, $stage->{'stage'}, $team);
+
        }
 
        return $self->render(
@@ -238,8 +263,8 @@ sub edit {
        push @errors, "No stage found." unless defined $stage;
 
        if (scalar @errors > 0) {
-               $self->app->log->debug(Dumper \@errors);
-               return $self->redirect_to('manager_team', team => $team)
+               $self->flash(errors => \@errors);
+               return $self->redirect_to('manager_edit_form', team => $team)
        }
 
        my ($max_teams) = $dbh->selectrow_array("
@@ -252,15 +277,18 @@ sub edit {
                    rider_race
                  WHERE
                    race = (SELECT race FROM manager_team WHERE manager_team = ?)
+                 AND
+                   rider IN (@{[join ',', ('?') x @riders]})
                  GROUP BY
                    team
                ) AS a
-               ", undef, $team);
+               ", undef, $team, @riders);
 
        if ($max_teams > 2) {
-               $self->app->log->debug("More than two riders on one team.");
+               push @errors, "More than two riders from one team.";
 
-               return $self->redirect_to('manager_team', team => $team);
+               $self->flash(errors => \@errors);
+               return $self->redirect_to('manager_edit_form', team => $team);
        }
 
        my ($price) = $dbh->selectrow_array("
@@ -275,9 +303,10 @@ sub edit {
                ", undef, $team, @riders);
 
        if ($price > 140) {
-               $self->app->log->debug("Too expensive!");
+               push @errors, "Too expensive! $price > 140";
 
-               return $self->redirect_to('manager_team', team => $team);
+               $self->flash(errors => \@errors);
+               return $self->redirect_to('manager_edit_form', team => $team);
        }
 
        $dbh->do("
@@ -299,7 +328,7 @@ sub edit {
 
        #FIXME: Not wery pretty
        if ($switches > 20) {
-               $self->app->log->debug("Too many switches.");
+               push @errors, "Too many switches.";
                $dbh->do("
                        DELETE FROM
                          rider_manager_team
@@ -309,7 +338,8 @@ sub edit {
                          stage = ?
                        ", undef, $team, $stage);
 
-               return $self->redirect_to('manager_team', team => $team)
+               $self->flash(errors => \@errors);
+               return $self->redirect_to('manager_edit_form', team => $team)
        }
 
        $dbh->do("
@@ -327,7 +357,8 @@ sub edit {
                $sth->execute($rider, $team, $stage);
        }
 
-       return $self->redirect_to('manager_team', team => $team);
+       $self->flash(errors => \@errors);
+       return $self->redirect_to('manager_edit_form', team => $team);
 }
 
 1;
index 97a41ed34005a3bf2855082304a5a32c6393e033..99001c9ed5ae7b5a8bb89f36de3538c2fb5f2d71 100644 (file)
@@ -107,6 +107,14 @@ our %MULT = (
        'WATER'    => 4,
 );
 
+our %DIRECTOR = (
+       1 => 160,
+       2 => 100,
+       3 => 60,
+       4 => 40,
+       5 => 20,
+);
+
 sub get_points {
        my $self = shift;
        my $r = shift;
@@ -234,6 +242,67 @@ sub calculate {
                };
        }
 
+       my $finish_ref = $dbh->selectall_arrayref("
+               SELECT
+                 team
+               FROM (
+                 SELECT
+                   MIN(rl.\"number\") AS pos,
+                   rr.team
+                 FROM
+                   rider_line AS rl
+                 JOIN
+                   line AS l
+                 ON (rl.line = l.line)
+                 JOIN
+                   stage AS s
+                 ON (l.stage = s.stage)
+                 JOIN
+                   rider_race AS rr
+                 ON (rr.rider = rl.rider AND rr.race = s.race)
+                 WHERE
+                   l.stage = ?
+                 AND
+                   l.\"type\" = 'FINISH'
+                 GROUP BY
+                   rr.team
+               ) AS foo
+               ORDER BY pos ASC
+               ", { Slice => {} }, $stage);
+
+       $insert = $dbh->prepare("
+               INSERT INTO
+                 director_stage (points, stage, director)
+               VALUES (?, ?, ?)
+               ");
+
+       $update = $dbh->prepare("
+               UPDATE
+                 director_stage
+               SET points = points + ?
+               WHERE stage = ?
+               AND director = ?
+               ");
+
+       my $i = 1;
+       for my $res (@{ $finish_ref }) {
+               my $p;
+              
+               if (exists $DIRECTOR{$i}) {
+                       $p = $DIRECTOR{$i};
+               } else {
+                       last;
+               }
+
+               eval {
+                       $insert->execute($p, $stage, $res->{'team'});
+               } or do {
+                       $update->execute($p, $stage, $res->{'team'});
+               };
+
+               $i++;
+       }
+
        return $self->redirect_to('stage', stage => $stage);
 }
 
index e77be9e51631839ae1855fb7a2aa7cc711af882f..4126998de18f7399c24225e0c27fe2799636c3fa 100644 (file)
@@ -1,6 +1,12 @@
 % layout 'default';
 % title 'Edit your manager team';
 
+<ul class="alert">
+  % for my $e (@{ $errors }) {
+  <li><%= $e %></li>
+  % }
+</ul>
+
 % my $rider_select = begin
   % my $type = shift;
   % my $name = shift;
index 42cd95961f954762e2350713669b19e48b577c12..b216603ff181b398c4b74c7f819ffd6087de6fc1 100644 (file)
@@ -19,7 +19,7 @@
     <th>Price</th>
     <th>Points</th>
   </tr>
-  % for my $rider (@{ $stage_team->{$stage->{'stage'}} }) {
+  % for my $rider (@{ $stage_team->{$stage->{'stage'}}->{'riders'} }) {
   <tr>
     <td><%= $rider->{'type'} %></td>
     <td><%= $rider->{'name'} %></td>
     <td><%= $rider->{'points'} %></td>
   </tr>
   % }
-  % if (defined $director->{'team'}) {
   <tr>
+  % my $director = $stage_team->{$stage->{'stage'}}->{'director'};
     <td>DIRECTOR</td>
-    <td><%= $director->{'name'} %></td>
     <td></td>
+    <td><%= $director->{'name'} %></td>
     <td><%= $director->{'price'} %></td>
-    <td>TODO</td>
+    <td><%= $director->{'poinst'} %></td>
   </tr>
-  % }
 </table>
 % }