Permalink
Browse files

Admin: Einzelpunkte und Fünfer in der Auswertung

In den Einstellungen Optionen hinzufügen, um eine Spalte für die Anzahl der
Fünfer anzuzeigen, und eine weitere Option, um statt der Punkteverteilung die
Einzelergebnisse anzuzeigen.  Bei der Anzeige der Einzelpunkte werden die
Unterschiede bei teilweisem Gleichstand nicht hervorgehoben, weil die Bedeutung
der Farben in dieser Darstellung kaum verständlich wäre.

Wenn nur eine Runde gefahren wird, keine Spalte für die Rundensumme anzeigen.
  • Loading branch information...
andreas-gruenbacher committed May 2, 2015
1 parent 1c65ddf commit d2c0e2b2dc3fbdc33a941f8509fe2e1ca014d981
@@ -259,7 +259,8 @@
nach_relevanz => $nach_relevanz,
@klassen ? (klassen => \@klassen) : (),
statistik_gesamt => 1,
statistik_pro_klasse => 0;
statistik_pro_klasse => 0,
features => $features;
print "<p>Letzte Änderung: $mtime</p>\n"
if defined $mtime;
@@ -282,6 +282,16 @@ <h1>{{veranstaltung.wertungen[0].titel}} – Einstellungen</h1>
</select>.</label>
</p>
</fieldset>
</fieldset><br>
<fieldset style="display:inline">
<legend>Auswertung</legend>
<fieldset style="display:inline">
<legend>Zusätzliche Informationen</legend>
<p>
<input type="checkbox" ng-model="features.einzelpunkte" id="feature_einzelpunkte"><label for="feature_einzelpunkte">Einzelpunkte statt Punkteverteilung</label><br>
<input type="checkbox" ng-model="features.spalte5er" id="feature_spalte5er"><label for="feature_spalte5er">Spalte für Fünfer in Punkteverteilung</label><br>
</p>
</fieldset>
</fieldset>
<p>
<button type="button" ng-disabled="!(geaendert() && form.$valid) || busy" ng-click="speichern()">Speichern</button>
@@ -242,6 +242,17 @@ <h3>Nennformular / Sichtbare Felder / Start morgen</h3>
dieser Veranstaltung angelegt wird, werden diese Fahrer automatisch als Starter
markiert.</p>
<h3>Auswertung / Zusätzliche Informationen</h3>
<p>Durch die Option „Einzelpunkte statt Punkteverteilung“ werden in der
Auswertung zu den Punkten pro Runde auch die Punkte pro Sektion angezeigt,
dafür entfallen die Spalten für die Punkteverteilung (Anzahl der Nuller
usw.)</p>
<p>Durch die „Option Spalte für Fünfer in Punkteverteilung“ wird auch die
Anzahl der Fünfer angezeigt, falls die Punkteverteilung überhaupt angezeigt
wird. (Die Fünfer werden üblicherweise nicht angezeigt, weil sie sich aus den
anderen Spalten ergeben.)</p>
<h2>Sektionen aus der Wertung</h2>
<p>Definiert, welche Sektionen für welche Klassen in welchen Runden nicht
gewertet werden sollen, unabhängig davon, ob in der Punktevergabe Punkte dafür
@@ -3,14 +3,14 @@
function veranstaltungAuswertungController($scope, $sce, $route, $location, $timeout, $http, $q, auswertung) {
$scope.HAVE_WEASYPRINT = HAVE_WEASYPRINT;
$scope.anzeige = { felder: [], klassen: [] };
$scope.features = features_aus_liste(auswertung.veranstaltung);
var auswertung_alt, veranstaltung, features;
var auswertung_alt, veranstaltung;
function auswertung_zuweisen(a) {
auswertung_alt = angular.copy(a);
auswertung = a;
veranstaltung = auswertung.veranstaltung;
features = features_aus_liste(veranstaltung);
$scope.veranstaltung = veranstaltung;
$scope.$root.kontext(veranstaltung.wertungen[($scope.anzeige.wertung || 1) - 1].titel);
$scope.klassen = (function() {
@@ -60,24 +60,44 @@ function veranstaltungAuswertungController($scope, $sce, $route, $location, $tim
angular.forEach(auswertung.fahrer_in_klassen, function(fahrer_in_klasse, klasse_index) {
angular.forEach(fahrer_in_klasse, function(fahrer) {
fahrer.einzelpunkte = [];
var einzelpunkte = [];
for (runde = 1; runde <= veranstaltung.klassen[klasse_index].runden; runde++) {
var einzelpunkte = [];
var einzelpunkte_in_runde = [];
try {
angular.forEach(veranstaltung.sektionen[fahrer.klasse - 1], function(sektion) {
if (sektionen_aus_wertung[fahrer.klasse - 1][runde - 1][sektion - 1])
einzelpunkte.push('-');
einzelpunkte_in_runde.push('-');
else
einzelpunkte.push(fahrer.punkte_pro_sektion[runde - 1][sektion - 1]);
einzelpunkte_in_runde.push(fahrer.punkte_pro_sektion[runde - 1][sektion - 1]);
});
} catch (_) { }
var punkte_in_runde = fahrer.punkte_pro_runde[runde - 1];
if (punkte_in_runde === undefined)
punkte_in_runde = fahrer.ausfall ? '-' : '';
fahrer.einzelpunkte.push($sce.trustAsHtml(
einzelpunkte.length == 0 ? punkte_in_runde :
'<span title="' + einzelpunkte.join(' ') + '">' + punkte_in_runde + '</span>'));
einzelpunkte.push(einzelpunkte_in_runde);
}
fahrer.einzelpunkte = function(runde, sektion) {
var e;
try {
e = einzelpunkte[runde - 1][sektion - 1];
} catch (_) { };
if (e === undefined && this.ausfall)
return '-';
return e;
};
fahrer.punkte_in_runde = function(runde) {
var punkte_in_runde = this.punkte_pro_runde[runde - 1];
if (punkte_in_runde === undefined)
punkte_in_runde = this.ausfall ? '-' : '';
if (!$scope.features.einzelpunkte) {
var einzelpunkte_in_runde = einzelpunkte[runde - 1];
if (einzelpunkte_in_runde) {
return $sce.trustAsHtml(
'<span title="' + einzelpunkte_in_runde.join(' ') + '">' + punkte_in_runde + '</span>'
);
}
}
return $sce.trustAsHtml(punkte_in_runde + '');
};
});
});
})();
@@ -449,9 +469,9 @@ function veranstaltungAuswertungController($scope, $sce, $route, $location, $tim
'margin-right': '1cm',
'margin-bottom': '1cm',
};
if (features.land || features.bundesland)
if ($scope.features.land || $scope.features.bundesland)
defaults.feld.push('lbl');
if (features.fahrzeug)
if ($scope.features.fahrzeug)
defaults.feld.push('fahrzeug');
angular.forEach(defaults, function(value, key) {
if (search[key] === undefined)
@@ -111,7 +111,12 @@ <h1><a href="" ng-click="einstellungen($event)">{{veranstaltung.wertungen[(anzei
table.wertung tr.alt td {
background-color:#EAF2D3;
}
table.wertung tr td.runde, table.wertung tr td.verteilung {
table.wertung tr td.einzelpunkte, table.wertung tr td.verteilung {
color:#A0A0A0;
}
</style>
<style type="text/css" ng-if="!features.einzelpunkte">
table.wertung tr td.runde {
color:#A0A0A0;
}
table.wertung tr td.wichtig {
@@ -120,22 +125,24 @@ <h1><a href="" ng-click="einstellungen($event)">{{veranstaltung.wertungen[(anzei
</style>
<p ng-if="anzeige.dauer == null">{{zusammenfassung}}</p>
<div ng-repeat="klasse in klassen" ng-if="anzeige.klassen[klasse - 1] && fahrer_in_klassen[klasse - 1]" class="klasse" ng-class="!$first && anzeige.seitenumbruch ? 'page-break' : ''">
<div ng-repeat="klasse in klassen" ng-init="runden = veranstaltung.klassen[klasse - 1].runden" ng-if="anzeige.klassen[klasse - 1] && fahrer_in_klassen[klasse - 1]" class="klasse" ng-class="!$first && anzeige.seitenumbruch ? 'page-break' : ''">
<h2>{{veranstaltung.klassen[klasse - 1].bezeichnung}}</h2>
<table class="wertung">
<thead>
<tr>
<th style="text-align:center" ng-bind-html="klassensymbol(klasse)"></th>
<th ng-repeat="feld in felder track by $index" ng-style="feld.style" ng-bind-html="feld.bezeichnung"></th>
<th style="text-align:right" ng-repeat="runde in rundenliste(klasse)"><span title="Runde {{runde}}">R{{runde}}</span></th>
<th style="display:none" ng-repeat-start="runde in rundenliste(klasse)"></th>
<th style="text-align:right; width:1.2em" ng-if="features.einzelpunkte" ng-repeat="sektion in veranstaltung.sektionen[klasse - 1]" title="Sektion {{sektion}}">{{sektion}}</th>
<th style="text-align:right" ng-repeat-end ng-if="runden > 1"><span title="Runde {{runde}}">R{{runde}}</span></th>
<th style="text-align:right" ng-if="spalten[klasse - 1].zusatzpunkte"><span title="Zeit- und Zusatzpunkte">ZP</span></th>
<th style="text-align:right"><span title="Gesamtpunkte">Ges</span></th>
<th style="text-align:right"><span title="Nuller">0S</span></th>
<th style="text-align:right"><span title="Einser">1S</span></th>
<th style="text-align:right"><span title="Zweier">2S</span></th>
<th style="text-align:right"><span title="Dreier">3S</span></th>
<th style="text-align:right" ng-if="veranstaltung.vierpunktewertung"><span title="Vierer">4S</span></th>
<th style="text-align:right" ng-if="feature.spalte5er"><span title="Fünfer">5S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte"><span title="Nuller">0S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte"><span title="Einser">1S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte"><span title="Zweier">2S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte"><span title="Dreier">3S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte && veranstaltung.vierpunktewertung"><span title="Vierer">4S</span></th>
<th style="text-align:right" ng-if="!features.einzelpunkte && features.spalte5er"><span title="Fünfer">5S</span></th>
<th style="text-align:right" ng-if="spalten[klasse - 1].stechen"><span title="Stechen">ST</span></th>
<th style="text-align:right" ng-if="spalten[klasse - 1].wertungspunkte"><span title="Wertungspunkte {{veranstaltung.wertungen[anzeige.wertung - 1].bezeichnung}}">WP</span></th>
</tr>
@@ -146,23 +153,27 @@ <h2>{{veranstaltung.klassen[klasse - 1].bezeichnung}}</h2>
<tr ng-class-even="'alt'" ng-if="fahrer.ausfall || fahrer.ausser_konkurrenz">
<td style="text-align:right"></td>
<td ng-repeat="feld in felder track by $index" ng-style="feld.style">{{$eval(feld.ausdruck, fahrer)}}</td>
<td style="text-align:right" ng-repeat="runde in rundenliste(klasse)" class="runde {{fahrer.runde_klasse[runde - 1]}}" ng-bind-html="fahrer.einzelpunkte[runde - 1]"></td>
<td style="display:none" ng-repeat-start="runde in rundenliste(klasse)"></td>
<td style="text-align:right" ng-if="features.einzelpunkte" ng-repeat="sektion in veranstaltung.sektionen[klasse - 1]" class="einzelpunkte">{{fahrer.einzelpunkte(runde, sektion)}}</th>
<td style="text-align:right" ng-repeat-end ng-if="runden > 1" class="runde {{fahrer.runde_klasse[runde - 1]}}" ng-bind-html="fahrer.punkte_in_runde(runde)"></td>
<td style="text-align:right" ng-if="spalten[klasse - 1].zusatzpunkte">{{zusatzpunkte(fahrer)}}</td>
<td style="text-align:center" colspan="{{5 + spalten[klasse - 1].stechen + veranstaltung.vierpunktewertung + feature.spalte5er}}">{{ausfall(fahrer)}}</td>
<td style="text-align:center" colspan="{{1 + spalten[klasse - 1].stechen + (features.einzelpunkte ? 0 : 4 + veranstaltung.vierpunktewertung + features.spalte5er)}}">{{ausfall(fahrer)}}</td>
<td style="text-align:right" ng-if="spalten[klasse - 1].wertungspunkte">{{wertungspunkte(fahrer)}}</td>
</tr>
<tr ng-class-even="'alt'" ng-if="!(fahrer.ausfall || fahrer.ausser_konkurrenz)">
<td style="text-align:right">{{rang(fahrer)}}</td>
<td ng-repeat="feld in felder track by $index" ng-style="feld.style">{{$eval(feld.ausdruck, fahrer)}}</td>
<td style="text-align:right" ng-repeat="runde in rundenliste(klasse)" class="runde {{fahrer.runde_klasse[runde - 1]}}" ng-bind-html="fahrer.einzelpunkte[runde - 1]"></td>
<td style="display:none" ng-repeat-start="runde in rundenliste(klasse)"></td>
<td style="text-align:right" ng-if="features.einzelpunkte" ng-repeat="sektion in veranstaltung.sektionen[klasse - 1]" class="einzelpunkte">{{fahrer.einzelpunkte(runde, sektion)}}</th>
<td style="text-align:right" ng-repeat-end ng-if="runden > 1" class="runde {{fahrer.runde_klasse[runde - 1]}}" ng-bind-html="fahrer.punkte_in_runde(runde)"></td>
<td style="text-align:right" ng-if="spalten[klasse - 1].zusatzpunkte">{{zusatzpunkte(fahrer)}}</td>
<td style="text-align:right">{{gesamtpunkte(fahrer)}}</td>
<td style="text-align:right" class="verteilung {{fahrer.verteilung_klasse[0]}}">{{fahrer.punkteverteilung[0]}}</td>
<td style="text-align:right" class="verteilung {{fahrer.verteilung_klasse[1]}}">{{fahrer.punkteverteilung[1]}}</td>
<td style="text-align:right" class="verteilung {{fahrer.verteilung_klasse[2]}}">{{fahrer.punkteverteilung[2]}}</td>
<td style="text-align:right" class="verteilung {{fahrer.verteilung_klasse[3]}}">{{fahrer.punkteverteilung[3]}}</td>
<td style="text-align:right" ng-if="veranstaltung.vierpunktewertung" class="verteilung {{fahrer.verteilung_klasse[4]}}">{{fahrer.punkteverteilung[4]}}</td>
<td style="text-align:right" ng-if="feature.spalte5er" class="verteilung {{fahrer.verteilung_klasse[5]}}">{{fahrer.punkteverteilung[5]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte" class="verteilung {{fahrer.verteilung_klasse[0]}}">{{fahrer.punkteverteilung[0]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte" class="verteilung {{fahrer.verteilung_klasse[1]}}">{{fahrer.punkteverteilung[1]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte" class="verteilung {{fahrer.verteilung_klasse[2]}}">{{fahrer.punkteverteilung[2]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte" class="verteilung {{fahrer.verteilung_klasse[3]}}">{{fahrer.punkteverteilung[3]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte && veranstaltung.vierpunktewertung" class="verteilung {{fahrer.verteilung_klasse[4]}}">{{fahrer.punkteverteilung[4]}}</td>
<td style="text-align:right" ng-if="!features.einzelpunkte && features.spalte5er" class="verteilung {{fahrer.verteilung_klasse[5]}}">{{fahrer.punkteverteilung[5]}}</td>
<td style="text-align:right" ng-if="spalten[klasse - 1].stechen">{{fahrer.stechen ? fahrer.stechen + '.' : ''}}</td>
<td style="text-align:right" ng-if="spalten[klasse - 1].wertungspunkte">{{wertungspunkte(fahrer)}}</td>
</tr>
View
@@ -115,6 +115,7 @@ sub tageswertung(@) {
klassenfarben => $Auswertung::klassenfarben,
@_,
);
my $features = $args{features};
my $ausfall = {
3 => "ausgefallen",
@@ -176,7 +177,9 @@ sub tageswertung(@) {
if defined $fahrer->{wertungen}[$args{wertung} - 1]{punkte};
}
my $ausfall_fmt = "c" . (5 + $vierpunktewertung + $stechen);
my $ausfall_fmt = "c" . (1 + ($features->{einzelpunkte} ?
0 :
4 + $vierpunktewertung + exists($features->{spalte5er}) + $stechen));
if ($RenderOutput::html && exists $args{klassenfarben}{$klasse}) {
$farbe = "<span style=\"color:$args{klassenfarben}{$klasse}\">◼</span>";
@@ -192,23 +195,37 @@ sub tageswertung(@) {
push @$header, spaltentitel($spalte);
}
for (my $n = 0; $n < $runden; $n++) {
push @$format, "r2";
push @$header, [ "R" . ($n + 1), "r1", "title=\"Runde " . ($n + 1) . "\"" ];
if ($features->{einzelpunkte}) {
foreach my $sektion (@{$args{cfg}{sektionen}[$klasse - 1]}) {
push @$format, "r2";
push @$header, [ $sektion, "r1", "style=\"width:1.2em\" title=\"Sektion $sektion\"" ];
}
}
if ($runden > 1) {
push @$format, "r2";
push @$header, [ "R" . ($n + 1), "r1", "title=\"Runde " . ($n + 1) . "\"" ];
}
}
if ($zusatzpunkte) {
push @$format, "r2";
push @$header, [ "ZP", "r1", "title=\"Zeit- und Zusatzpunkte\"" ];
}
push @$format, "r3";
push @$header, [ "Ges", "r1", "title=\"Gesamtpunkte\"" ];
push @$format, "r2", "r2", "r2", "r2";
push @$header, [ "0S", "r1", "title=\"Nuller\"" ];
push @$header, [ "1S", "r1", "title=\"Einser\"" ];
push @$header, [ "2S", "r1", "title=\"Zweier\"" ];
push @$header, [ "3S", "r1", "title=\"Dreier\"" ];
if ($vierpunktewertung) {
push @$format, "r2";
push @$header, [ "4S", "r1", "title=\"Vierer\"" ];
unless ($features->{einzelpunkte}) {
push @$format, "r2", "r2", "r2", "r2";
push @$header, [ "0S", "r1", "title=\"Nuller\"" ];
push @$header, [ "1S", "r1", "title=\"Einser\"" ];
push @$header, [ "2S", "r1", "title=\"Zweier\"" ];
push @$header, [ "3S", "r1", "title=\"Dreier\"" ];
if ($vierpunktewertung) {
push @$format, "r2";
push @$header, [ "4S", "r1", "title=\"Vierer\"" ];
}
if ($features->{spalte5er}) {
push @$format, "r2";
push @$header, [ "5S", "r1", "title=\"Fünfer\"" ];
}
}
if ($stechen) {
push @$format, "r2";
@@ -280,35 +297,48 @@ sub tageswertung(@) {
push @$row, spaltenwert($spalte, $fahrer);
}
for (my $n = 0; $n < $runden; $n++) {
my $punkte;
my $fmt;
my $class;
if (punkte_in_runde($fahrer->{punkte_pro_sektion}[$n])) {
$punkte = $fahrer->{punkte_pro_runde}[$n] // "-";
if ($n >= $fahrer->{runden} && $RenderOutput::html) {
push @$class, "incomplete";
}
if ($args{alle_punkte}) {
my $punkte_pro_sektion = punkte_pro_sektion($fahrer, $n, $args{cfg});
push @$fmt, "title=\"$punkte_pro_sektion\"";
if ($features->{einzelpunkte}) {
my $punkte_pro_runde = $fahrer->{punkte_pro_sektion}[$n];
foreach my $sektion (@{$args{cfg}{sektionen}[$klasse - 1]}) {
my $p = $punkte_pro_runde->[$sektion - 1];
$p = '-'
if !defined $p && $fahrer->{ausfall} != 0;
push @$row, [ $p, "r1", "class=\"info\"" ];
}
} elsif ($fahrer->{ausfall}) {
$punkte = "-";
}
if ($fahrer->{ausfall} != 0 || !$fahrer->{runde_wichtig}[$n]) {
push @$class, "info";
} else {
push @$class, "info2";
}
if ($runden > 1) {
my $punkte;
my $fmt;
my $class;
if (punkte_in_runde($fahrer->{punkte_pro_sektion}[$n])) {
$punkte = $fahrer->{punkte_pro_runde}[$n] // "-";
if ($n >= $fahrer->{runden} && $RenderOutput::html) {
push @$class, "incomplete";
}
if ($args{alle_punkte}) {
my $punkte_pro_sektion = punkte_pro_sektion($fahrer, $n, $args{cfg});
push @$fmt, "title=\"$punkte_pro_sektion\"";
}
} elsif ($fahrer->{ausfall}) {
$punkte = "-";
}
if ($fahrer->{ausfall} != 0 || !$fahrer->{runde_wichtig}[$n]) {
push @$class, "info";
} else {
push @$class, "info2";
}
push @$fmt, "class=\"" . join(" ", @$class) . "\""
if $class;
if ($fmt) {
push @$row, [ $punkte, "r1", join(" ", @$fmt) ];
} else {
push @$row, $punkte;
push @$fmt, "class=\"" . join(" ", @$class) . "\""
if $class;
if ($fmt) {
push @$row, [ $punkte, "r1", join(" ", @$fmt) ];
} else {
push @$row, $punkte;
}
}
}
push @$row, $fahrer->{zusatzpunkte} || ""
@@ -324,11 +354,20 @@ sub tageswertung(@) {
push @$row, [ join(", ", @details), $ausfall_fmt ];
} else {
push @$row, $fahrer->{punkte} // "";
for (my $n = 0; $n < 4 + $vierpunktewertung; $n++) {
if ($fahrer->{punkteverteilung_wichtig}[$n]) {
push @$row, [ $fahrer->{punkteverteilung}[$n], "r", "class=\"info2\"" ];
} else {
push @$row, [ $fahrer->{punkteverteilung}[$n], "r", "class=\"info\"" ];
unless ($features->{einzelpunkte}) {
for (my $n = 0; $n < 4 + $vierpunktewertung; $n++) {
if ($fahrer->{punkteverteilung_wichtig}[$n]) {
push @$row, [ $fahrer->{punkteverteilung}[$n], "r", "class=\"info2\"" ];
} else {
push @$row, [ $fahrer->{punkteverteilung}[$n], "r", "class=\"info\"" ];
}
}
if ($features->{spalte5er}) {
if ($fahrer->{punkteverteilung_wichtig}[5]) {
push @$row, [ $fahrer->{punkteverteilung}[5], "r", "class=\"info2\"" ];
} else {
push @$row, [ $fahrer->{punkteverteilung}[5], "r", "class=\"info\"" ];
}
}
}
if ($stechen) {
View
@@ -191,7 +191,8 @@
nach_relevanz => $nach_relevanz,
@$klassen ? (klassen => $klassen) : (),
statistik_gesamt => 1,
statistik_pro_klasse => 0;
statistik_pro_klasse => 0,
features => {};
if ($RenderOutput::html) {
print "<p>Letzte Änderung: $zeit</p>\n";

0 comments on commit d2c0e2b

Please sign in to comment.