CREATE TABLE team_line (
team INTEGER REFERENCES team,
line INTEGER REFERENCES line,
+ "number" INTEGER NOT NULL,
time INTERVAL,
UNIQUE (team, line)
$dbh->do("
INSERT INTO
line (stage, type, name, category)
- VALUES (?, ?, ?)
+ VALUES (?, ?, ?, ?)
", undef, $stage, $type, $name, $category);
return $self->redirect_to('stage', stage => $stage);
rider IN (@{[join ',', ('?') x @riders]})
", undef, $team, @riders);
+ my ($dprice) = $dbh->selectrow_array("
+ SELECT
+ price
+ FROM
+ manager_team AS mt
+ JOIN
+ director_race AS dr
+ ON (mt.director = dr.director AND mt.race = dr.race)
+ WHERE
+ manager_team = ?
+ ", undef, $team, $stage);
+
+ my ($nprice) = $dbh->selectrow_array("
+ SELECT
+ price
+ FROM
+ director_race
+ WHERE
+ director = ?
+ AND
+ race = (SELECT race FROM stage WHERE stage = ?)
+ ", undef, $director, $stage);
+
+ if (defined $dprice) {
+ $price += $dprice;
+ } else {
+ $price += $nprice;
+ }
+
if ($price > 140) {
push @errors, "Too expensive! $price > 140";
return $p * $MULT{$r->{'rider_type'}};
}
+sub ttt_points {
+ my $self = shift;
+ my $stage = shift;
+ my $dbh = $self->db();
+
+ #FIXME: Race conditions
+ $dbh->do("
+ DELETE FROM
+ rider_stage
+ WHERE
+ stage = ?
+ ", undef, $stage);
+
+ my $ref = $dbh->selectcol_arrayref("
+ SELECT
+ team
+ FROM
+ team_line AS tl
+ JOIN
+ line AS l
+ ON (tl.line = l.line)
+ WHERE
+ stage = ?
+ ORDER BY \"number\" ASC
+ ", undef, $stage);
+
+ my $insert = $dbh->prepare("
+ INSERT INTO
+ rider_stage (points, stage, rider)
+ SELECT ?, ?, rider
+ FROM
+ rider_race
+ WHERE
+ team = ?
+ AND
+ race = (SELECT race FROM stage WHERE stage = ?)
+ ");
+
+ my $pos = 1;
+ for my $team (@{ $ref }) {
+ my $p = $POINTS{'TTT'}->{$pos};
+
+ $insert->execute($p, $stage, $team, $stage);
+
+ $pos++;
+ }
+}
+
sub calculate {
my $self = shift;
my $dbh = $self->db();
my $stage = $self->param('stage');
- my $after_restday = defined $self->param('after_restday') ? 1 : 0;
$dbh->do("
UPDATE
stage = ?
", undef, $stage);
+ my ($stage_type) = $dbh->selectrow_array("
+ SELECT
+ \"type\"
+ FROM
+ stage
+ WHERE
+ stage = ?
+ ", undef, $stage);
+
+ if ($stage_type eq 'TTT') {
+ ttt_points($self, $stage);
+ return $self->redirect_to('stage', stage => $stage);
+ }
+
+ # People on winning team get +10 points
my ($winner_team) = $dbh->selectrow_array("
SELECT
team
\"number\" = 1
", undef, $stage);
+ # Get all line crossings
my $results_ref = $dbh->selectall_arrayref("
SELECT
rl.rider,
for my $res (@{ $results_ref }) {
my $p = get_points($self, $res, $winner_team);
- eval {
- $insert->execute($p, $stage, $res->{'rider'});
- } or do {
- $update->execute($p, $stage, $res->{'rider'});
- };
+ $insert->execute($p, $stage, $res->{'rider'})
+ or $update->execute($p, $stage, $res->{'rider'});
}
+ # Give points to director
my $finish_ref = $dbh->selectall_arrayref("
SELECT
team
last;
}
- eval {
- $insert->execute($p, $stage, $res->{'team'});
- } or do {
- $update->execute($p, $stage, $res->{'team'});
- };
+ $insert->execute($p, $stage, $res->{'team'})
+ or $update->execute($p, $stage, $res->{'team'});
$i++;
}
JOIN
manager_team AS mt
ON (foo.manager_team = mt.manager_team)
- GROUP BY foo.race, mt.manager_team
+ GROUP BY foo.race, mt.manager_team, mt.name
ORDER BY sum DESC
", { Slice => {} }, $race);
stage = ?
", undef, $stage);
+ #FIXME: NOT PRETTY
+ if ($stage_ref->{'type'} eq 'TTT') {
+ my $results_ref = $dbh->selectall_arrayref("
+ SELECT
+ t.team,
+ tl.\"number\",
+ tl.time,
+ t.name
+ FROM
+ team_line AS tl
+ JOIN
+ line AS l
+ ON (tl.line = l.line)
+ JOIN
+ team AS t
+ ON (tl.team = t.team)
+ WHERE
+ stage = ?
+ AND
+ l.\"type\" = 'FINISH'
+ ", { Slice => {} }, $stage);
+
+
+ return $self->render(
+ template => 'stage/ttt',
+ stage => $stage_ref,
+ results => $results_ref,
+ );
+ }
+
my $results_ref = $dbh->selectall_arrayref("
SELECT
r.rider,
<h2>Edit your team</h2>
<form action="<%== url_for 'manager_edit' %>" method="post">
- %= $rider_select->('TT', 'Time Trialist');
+ %= $rider_select->('CLIMBER', 'Climber');
%= $rider_select->('CLIMBER', 'Climber');
%= $rider_select->('CLIMBER', 'Climber');
%= $rider_select->('WATER', 'Domestique');