Quotes Display & Daywin Calculation, Bugfix: 2 extra rankscore for all 4 tendencies in a round

This commit is contained in:
Torsten 2017-08-19 16:53:39 +02:00
parent 954eca957b
commit 3fa31921f0
9 changed files with 522 additions and 31 deletions

View file

@ -125,7 +125,7 @@ class RoundsController extends Controller
$round->report="";
if (request("report")){
$round->report = request("report");
$round->report = str_replace("\n","<br/>", request("report"));
}
$round->save();

View file

@ -15,15 +15,82 @@ class SeasonsController extends Controller
if (Auth::guest()) { return redirect("/"); }
if (!Auth::user()->admin) { return redirect("/"); }
$seasons = DB::table('seasons')->get();
$activeSeason=Season::getCurrent();
$currentSeason=Season::getCurrent();
Log::info("Creating default quota");
Quota::createDefaultQuota($activeSeason->id);
$active_user_count = sizeof( DB::table('payments')->where('season_id',$currentSeason->id)->whereNotNull('paid_date')->get() );
return view('seasons.index', compact('seasons','activeSeason'));
$quotas = Quota::getQuotas($currentSeason->id);
$active_user_count = sizeof( DB::table('payments')->where('season_id',$currentSeason->id)->whereNotNull('paid_date')->get() );
$euro_pott = $active_user_count * $quotas["Einsatz"];
$euro_tagessieg_sum = intval ($euro_pott * ( $quotas["Tagessieg"] / 100 ) );
$euro_tagessieg = Quota::get6Divisor( intval($euro_tagessieg_sum / 36));
$euro_gruenes_trikot = intval($euro_pott * (($quotas["Gruenes Trikot"] / 100)));
$euro_gruenes_trikot = Quota::get6Divisor($euro_gruenes_trikot);
$euro_pokal= intval ($euro_pott * (($quotas["Pokal"] / 100)));
$euro_pokal= Quota::get6Divisor($euro_pokal);
$euro_platzierung = intval ( $euro_pott * (($quotas["Platzierung"] / 100)));
$tagessieg_rest = $euro_tagessieg_sum - ($euro_tagessieg * 36);
Log::info("Tagessieg Rest=".$tagessieg_rest." €");
$euro_platzierung += $tagessieg_rest;
$euro_platz1 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 1"] / 100))));
$euro_platz2 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 2"] / 100))));
$euro_platz3 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 3"] / 100))));
$euro_platz4 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 4"] / 100))));
$euro_platz5 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 5"] / 100))));
$euro_platz6 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 6"] / 100))));
$euro_platz7 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 7"] / 100))));
$euro_platz8 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 8"] / 100))));
$euro_platz9 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 9"] / 100))));
$euro_platz10= Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 10"] / 100))));
$euro_liga=intval($euro_pott *(($quotas["Liga-Wertung"] / 100)));
$euro_liga_platz1 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 1"] / 100))));
$euro_liga_platz2 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 2"] / 100))));
$euro_liga_platz3 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 3"] / 100))));
$finaler_rest = $euro_pott - ( 36*$euro_tagessieg + $euro_gruenes_trikot + $euro_pokal + $euro_platz1
+ $euro_platz2 + $euro_platz3+ $euro_platz4 + $euro_platz5 + $euro_platz6 + $euro_platz7 + $euro_platz8 + $euro_platz9 + $euro_platz10);
$euro_platz1 = $euro_platz1 + $finaler_rest;
Log::info("Users: ". $active_user_count);
Log::info("Einsatz: ". $quotas["Einsatz"]);
Log::info("Pott: ".$euro_pott." €");
Log::info("Tagessieg: ".$euro_tagessieg." €");
Log::info("Grünes Trikot: ".$euro_gruenes_trikot." €");
Log::info("Pokal: ".$euro_pokal." €");
Log::info("Liga: ".$euro_liga." €");
Log::info("Platzierung: ".$euro_platzierung." €");
Log::info("Platz 1: ".$euro_platz1." €");
Log::info("Platz 2: ".$euro_platz2." €");
Log::info("Platz 3: ".$euro_platz3." €");
Log::info("Platz 4: ".$euro_platz4." €");
Log::info("Platz 5: ".$euro_platz5." €");
Log::info("Platz 6: ".$euro_platz6." €");
Log::info("Platz 7: ".$euro_platz7." €");
Log::info("Platz 8: ".$euro_platz8." €");
Log::info("Platz 9: ".$euro_platz9." €");
Log::info("Platz 10: ".$euro_platz10." €");
Log::info("Finaler Rest: ".$finaler_rest." €");
return view('seasons.index', compact('seasons','currentSeason','quotas','active_user_count','euro_tagessieg','euro_platz1','euro_platz2','euro_platz3','euro_platz4','euro_platz5','euro_platz6','euro_platz7','euro_platz8','euro_platz9','euro_platz10'));
}
public function create() {
@ -53,11 +120,67 @@ class SeasonsController extends Controller
Log::info('Setting season id=' .$season->id);
}
Quota::createDefaultQuota($season->id);
// Redirect to the home page
return redirect('/seasons');
}
public function store_quota() {
if (Auth::guest()) { return redirect("/"); }
if (!Auth::user()->admin) { return redirect("/"); }
$currentSeason=Season::getCurrent();
// Validate form
$this->validate(request(), [
'season_id' => 'required',
'einsatz' => 'required',
'tagessieg' => 'required',
'pokal' => 'required',
'gruenes_trikot' => 'required',
'platzierung' => 'required',
'liga' => 'required',
'liga_platz1' => 'required',
'liga_platz2' => 'required',
'liga_platz3' => 'required',
'platz1' => 'required',
'platz2' => 'required',
'platz3' => 'required',
'platz4' => 'required',
'platz5' => 'required',
'platz6' => 'required',
'platz7' => 'required',
'platz8' => 'required',
'platz9' => 'required',
'platz10' => 'required'
]);
// Create and save the season
Quota::setQuota('Einsatz',request('einsatz'), $currentSeason->id);
Quota::setQuota('Tagessieg',request('tagessieg'), $currentSeason->id);
Quota::setQuota('Gruenes Trikot',request('gruenes_trikot'), $currentSeason->id);
Quota::setQuota('Pokal',request('pokal'), $currentSeason->id);
Quota::setQuota('Platzierung',request('platzierung'), $currentSeason->id);
Quota::setQuota('Platz 1',request('platz1'), $currentSeason->id);
Quota::setQuota('Platz 2',request('platz2'), $currentSeason->id);
Quota::setQuota('Platz 3',request('platz3'), $currentSeason->id);
Quota::setQuota('Platz 4',request('platz4'), $currentSeason->id);
Quota::setQuota('Platz 5',request('platz5'), $currentSeason->id);
Quota::setQuota('Platz 6',request('platz6'), $currentSeason->id);
Quota::setQuota('Platz 7',request('platz7'), $currentSeason->id);
Quota::setQuota('Platz 8',request('platz8'), $currentSeason->id);
Quota::setQuota('Platz 9',request('platz9'), $currentSeason->id);
Quota::setQuota('Platz 10',request('platz10'), $currentSeason->id);
Quota::setQuota('Liga-Wertung',request('liga'), $currentSeason->id);
Quota::setQuota('Liga Platz 1',request('liga_platz1'), $currentSeason->id);
Quota::setQuota('Liga Platz 2',request('liga_platz2'), $currentSeason->id);
Quota::setQuota('Liga Platz 3',request('liga_platz3'), $currentSeason->id);
// Redirect to the home page
return redirect('/seasons');
}
public function setcurrent($new_season_id) {
if (Auth::guest()) { return redirect("/"); }
if (!Auth::user()->admin) { return redirect("/"); }

View file

@ -9,6 +9,7 @@ use App\Payment;
use App\Round;
use App\Game;
use App\Tipp;
use App\Quota;
use DB;
use Auth;
use Log;
@ -23,13 +24,13 @@ class UsersController extends Controller
$currentSeason=Season::getCurrent();
if ($currentSeason) {
$round_id = Round::getLastLockedRoundId();
$round_id = Round::getLastCompleteRoundId();
if ($round_id > -1) {
$round = Round::where("id", "=", $round_id)->first();
$report = $round->report;
Log::info("Loaded report:".$report." round-id=".$round_id);
$roundname = $round->name;
} else { Log::info("No round identified. Last Locked=".$round_id); }
} else { Log::info("No round identified. Last Locked=".$round_id); $report="";}
} else {Log::info("No current season");}
return view('main',compact('roundname','report'));
@ -186,9 +187,17 @@ class UsersController extends Controller
$roundtipps[$key]['dayscore']=0;
$roundtipps[$key]['earliest_kickoff']=$entry->game_kickoff;
$roundtipps[$key]['hits']=0; // Wenigstens Tendenz getroffen. Wenn 4, dann 2 Punkte Bonus auf rankscore
}
$roundtipps[$key]['rankscore']+=Tipp::getScoreLocal($entry->game_score1,$entry->game_score2,$entry->tipp_score1,$entry->tipp_score2,$entry->joker); // Für alle 4 Spiele
if ($user_id==1) {Log::info("Calculating rankscore for round_id ".$round_id." to ".$roundtipps[$key]['rankscore']);}
$game_value=Tipp::getScoreLocal($entry->game_score1,$entry->game_score2,$entry->tipp_score1,$entry->tipp_score2,$entry->joker); // Für alle 4 Spiele
$roundtipps[$key]['rankscore']+=$game_value;
if($game_value>0) { $roundtipps[$key]['hits']+=1;}
if ($roundtipps[$key]['hits']==4) {$roundtipps[$key]['rankscore']+=2;} // Wenn alle 4 Spiele mind. Tendenz, dann 2 Punkte Bonus
// START: Add Up Dayscore Win Values for each round
@ -308,30 +317,56 @@ class UsersController extends Controller
// Ranknr identifizieren, inkl, geteilter Rankplatzierungen
$lastScore=-1;
$lastrank=0;
$current_list_position=0;
$highest_dayscore=0;
foreach($rankingDisplay as $key => $user) {
$current_list_position+=1;
if ($user["rankscore_total"]==$lastScore) {
$rankingDisplay[$key]["rank"] = $lastrank;
} else {
$lastrank +=1;
$rankingDisplay[$key]["rank"] = $lastrank;
$lastrank = $current_list_position;
$rankingDisplay[$key]["rank"] = $current_list_position;
$lastScore = $user["rankscore_total"];
}
if ($user["dayscore"]>$highest_dayscore) { $highest_dayscore = $user["dayscore"]; }
}
Log::info("Searching for dayscore winners. Highest dayscore=".$highest_dayscore);
// is_dayscorewinner setzen (Tagessieg)
// Nur wenn alle Spiele eingetragen=gespielt sind !
Log::info("Searching for dayscore winners. Highest dayscore=".$highest_dayscore);
$daywinner_count=0;
$round_completed = Round::isCompleted($max_round_id);
foreach($rankingDisplay as $key => $user) {
if ($user["dayscore"]>0 && $user["dayscore"]==$highest_dayscore && $round_completed) {
$rankingDisplay[$key]["is_dayscorewinner"]=1;
$daywinner_count+=1;
Log::info("Setting dayscorewin for player:".$user["user_name"]);
}
}
//TODO: if ($daywinner_count > 6) { ... }
// Compute Dayscorewin payout (Tagessieg)
$payouts = Quota::getPayouts($currentSeason->id);
$single_payout=0;
if ($daywinner_count>0) {
$single_payout = $payouts["Tagessieg"] / $daywinner_count ;
$single_payout = number_format((float)$single_payout, 2, '.', '');
$single_payout = str_replace(".",",",$single_payout);
}
foreach($rankingDisplay as $key => $user) {
if ($user["is_dayscorewinner"]==1) {
$rankingDisplay[$key]['payout']=$single_payout;
} else {
$rankingDisplay[$key]['payout']='';
}
}
// Store game results as separate array. Wir nutzen aus, dass die Ergebnisse in jeder Zeile
// von Rankingdisplay abgespeichert sind.
$game_results=array(); // 4 Spielergebnisse der angezeigten Runde
@ -345,6 +380,16 @@ class UsersController extends Controller
return ($user1['rankscore_total'] < $user2['rankscore_total']);
}
public function show_payouts() {
$currentSeason = Season::getCurrent();
$active_user_count = sizeof( DB::table('payments')->where('season_id',$currentSeason->id)->whereNotNull('paid_date')->get() );
$einsatz = Quota::getQuota($currentSeason->id,"Einsatz");
$payouts = Quota::getPayouts($currentSeason->id);
Log::info("EINSATZ=".$einsatz);
return view('users.show_payouts', compact('payouts','active_user_count','einsatz','currentSeason'));
}
}

View file

@ -8,34 +8,168 @@ use DB;
class Quota extends Model
{
public static function getPayouts($season_id) {
$quotas = Quota::getQuotas($season_id);
//Quotas fuer Season wegwerfen falls vorhanden und default Wert reinschreiben
if (sizeof($quotas)==0) {
Quota::createDefaultQuota($season_id->id);
$quotas = Quota::getQuotas($season_id);
}
$active_user_count = sizeof( DB::table('payments')->where('season_id',$season_id)->whereNotNull('paid_date')->get() );
$euro_pott = $active_user_count * $quotas["Einsatz"];
$euro_tagessieg_sum = intval ($euro_pott * ( $quotas["Tagessieg"] / 100 ) );
$euro_tagessieg = Quota::get6Divisor( intval($euro_tagessieg_sum / 36));
$euro_gruenes_trikot = intval($euro_pott * (($quotas["Gruenes Trikot"] / 100)));
$euro_gruenes_trikot = Quota::get6Divisor($euro_gruenes_trikot);
$euro_pokal= intval ($euro_pott * (($quotas["Pokal"] / 100)));
$euro_pokal= Quota::get6Divisor($euro_pokal);
$euro_platzierung = intval ( $euro_pott * (($quotas["Platzierung"] / 100)));
$tagessieg_rest = $euro_tagessieg_sum - ($euro_tagessieg * 36);
Log::info("Tagessieg Rest=".$tagessieg_rest." €");
$euro_platzierung += $tagessieg_rest;
$euro_platz1 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 1"] / 100))));
$euro_platz2 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 2"] / 100))));
$euro_platz3 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 3"] / 100))));
$euro_platz4 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 4"] / 100))));
$euro_platz5 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 5"] / 100))));
$euro_platz6 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 6"] / 100))));
$euro_platz7 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 7"] / 100))));
$euro_platz8 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 8"] / 100))));
$euro_platz9 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 9"] / 100))));
$euro_platz10= Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 10"] / 100))));
$euro_liga=intval($euro_pott *(($quotas["Liga-Wertung"] / 100)));
$euro_liga_platz1 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 1"] / 100))));
$euro_liga_platz2 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 2"] / 100))));
$euro_liga_platz3 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 3"] / 100))));
$finaler_rest = $euro_pott - ( 36*$euro_tagessieg + $euro_gruenes_trikot + $euro_pokal + $euro_platz1
+ $euro_platz2 + $euro_platz3+ $euro_platz4 + $euro_platz5 + $euro_platz6 + $euro_platz7 + $euro_platz8 + $euro_platz9 + $euro_platz10);
$euro_platz1 = $euro_platz1 + $finaler_rest;
$payouts=array();
$payouts['Tagessieg'] = $euro_tagessieg;
$payouts['platz1'] = $euro_platz1;
$payouts['platz2'] = $euro_platz2;
$payouts['platz3'] = $euro_platz3;
$payouts['platz4'] = $euro_platz4;
$payouts['platz5'] = $euro_platz5;
$payouts['platz6'] = $euro_platz6;
$payouts['platz7'] = $euro_platz7;
$payouts['platz8'] = $euro_platz8;
$payouts['platz9'] = $euro_platz9;
$payouts['platz10'] = $euro_platz10;
$payouts['liga_platz1'] = $euro_liga_platz1;
$payouts['liga_platz2'] = $euro_liga_platz2;
$payouts['liga_platz3'] = $euro_liga_platz3;
$payouts['gruenes_trikot'] = $euro_gruenes_trikot;
$payouts['pokal'] = $euro_pokal;
return $payouts;
}
public static function getQuota($season_id,$quota_name) {
$quota=Quota::all()->where('season_id','=', $season_id)->where('name','=', $quota_name)->first();
return $quota['prc'];
}
public static function getQuotas($season_id) {
$quotas=Quota::all()->where('season_id','=', $season_id);
$arr=array();
foreach($quotas as $quota) {
$arr[$quota['name']]=$quota['prc'];
}
return $arr;
}
public static function setQuotas($quotas,$season_id) {
foreach ($quotas as $key => $quota) {
setQuota($key, $quota, $season_id);
}
}
// Subfunction of setQuotas
public static function setQuota($name, $value, $season_id) {
$quota = Quota::all()->where('season_id','=',$season_id)->where('name','=',$name)->first();
if (!$quota) {
$quota = new Quota();
}
$quota->season_id = $season_id;
$quota->name = $name;
$quota->prc = $value;
$quota->save();
}
public static function createDefaultQuota($season_id)
{
Log::info('Creating default quotas');
DB::table('quotas')->where('season_id', '=', $season_id)->delete();
Log::info("Creating new Quota");
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "SPIELMODUS";
$quota->name = "Tagessieg";
$quota->prc = 50;
$quota->name = "Einsatz";
$quota->prc = 40;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "SPIELMODUS";
$quota->name = "Rangsieg";
$quota->name = "Tagessieg";
$quota->prc = 50;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platzierung";
$quota->prc = 50;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Gruenes Trikot";
$quota->prc = 0;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Liga-Wertung";
$quota->prc = 0;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Pokal";
$quota->prc = 0;
$quota->save();
/// #######################################
// Sub-Quotas für den Spielmodus 'Tagessieg'
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 1";
$quota->order = 1;
$quota->prc = 21;
@ -43,7 +177,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 2";
$quota->order = 2;
$quota->prc = 17;
@ -51,7 +184,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 3";
$quota->order = 3;
$quota->prc = 13;
@ -59,7 +191,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 4";
$quota->order = 4;
$quota->prc = 10;
@ -67,7 +198,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 5";
$quota->order = 5;
$quota->prc = 9;
@ -75,7 +205,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 6";
$quota->order = 6;
$quota->prc = 8;
@ -83,7 +212,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 7";
$quota->order = 7;
$quota->prc = 7;
@ -91,7 +219,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 8";
$quota->order = 8;
$quota->prc = 6;
@ -99,7 +226,6 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 9";
$quota->order = 9;
$quota->prc = 5;
@ -107,10 +233,39 @@ class Quota extends Model
$quota = new Quota;
$quota->season_id = $season_id;
$quota->qtype = "PLATZIERUNG";
$quota->name = "Platz 10";
$quota->order = 10;
$quota->prc = 4;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Liga Platz 1";
$quota->order = 10;
$quota->prc = 60;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Liga Platz 2";
$quota->order = 10;
$quota->prc = 25;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Liga Platz 3";
$quota->order = 10;
$quota->prc = 15;
$quota->save();
}
// Senkt die Zahl solange, bis sie durch 6 teilbar ist,
// Abrundungsvorgabe für Ausschüttungs-Grundbeträge.
public static function get6Divisor($number) {
// Eine Zahl ist durch 6 teilbar, wenn sie durch 2 und 3 teilbar ist.
while ($number % 2 or $number %3 ) { $number--; }
return $number;
}
}