tippspiel/pfosten/app/Quota.php
2018-01-25 08:31:59 +01:00

435 lines
14 KiB
PHP

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Log;
use DB;
use App\ManualPayout;
class Quota extends Model
{
public static function getPayouts() {
$season_id = Season::getCurrent()->id;
$quotas = Quota::getQuotas();
$roundCount=Round::getCount();
//Quotas fuer Season wegwerfen falls vorhanden und default Wert reinschreiben
if (sizeof($quotas)==0) {
Quota::createDefaultQuota();
$quotas = Quota::getQuotas();
}
$active_user_count = sizeof(User::getActives());
$euro_pott = $active_user_count * $quotas["Einsatz"];
$euro_tagessieg_sum = intval ($euro_pott * ( $quotas["Tagessieg"] / 100 ) );
$euro_tagessieg = Quota::get6Divisor( intval($euro_tagessieg_sum / $roundCount));
$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 * $roundCount);
//Log::info("Tagessieg Rest=".$tagessieg_rest." €");
$euro_platzierung += $tagessieg_rest;
$euro_platz1 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["Platz 1"] / 100))));
//Log::info("Platz 1=".$euro_platz1);
$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))));
$euro_liga_platz2_1 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 2_1"] / 100))));
$euro_liga_platz3_1 = Quota::get6Divisor(intval($euro_liga*(($quotas["Liga Platz 3_1"] / 100))));
$finaler_rest = $euro_pott - ( $roundCount*$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_liga_platz1 + $euro_liga_platz2 + $euro_liga_platz3 + $euro_liga_platz2_1
+ $euro_liga_platz3_1);
//dd("Euro-Pott: ".$euro_pott);
//dd("Gruenes Trikot: ".$euro_gruenes_trikot);
//dd("P");
//dd("Liga 2_1=".$euro_liga_platz2_1.", Liga 3_1=".$euro_liga_platz3_1.", Finaler Rest: ".$finaler_rest);
$euro_platz1 = $euro_platz1 + $finaler_rest;
//Log::info("PLatz 1 mit Rest(".$finaler_rest.") = ".$euro_platz1);
$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['liga_platz2_1'] = $euro_liga_platz2_1;
$payouts['liga_platz3_1'] = $euro_liga_platz3_1;
$payouts['gruenes_trikot'] = $euro_gruenes_trikot;
$payouts['pokal'] = $euro_pokal;
return $payouts;
}
// Subfunction of setQuotas
public static function setQuota($name, $value) {
$season_id = Season::getCurrent()->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 getQuota($quota_name) {
$season_id=Season::getCurrent()->id;
$quota=Quota::all()->where('season_id','=', $season_id)->where('name','=', $quota_name)->first();
return $quota['prc'];
}
public static function getQuotas() {
$season_id = Season::getCurrent()->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 getQuotasForDisplay() {
$quotas=Quota::getQuotas();
foreach($quotas as $key => $val) {
$quotas[$key]=str_replace(".",",", $val);
}
return $quotas;
}
public static function setQuotas($quotas) {
$season_id = Season::getCurrent()->id;
foreach ($quotas as $key => $quota) {
setQuota($key, $quota, $season_id);
}
}
public static function createDefaultQuota()
{
$season_id = Season::getCurrent()->id;
Log::info('Creating default quotas');
DB::table('quotas')->where('season_id', '=', $season_id)->delete();
$roundCount=Season::getCurrent()->rounds;
Log::info("Creating new Quota");
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Einsatz";
$quota->prc = 40;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Tagessieg";
$quota->prc = 45;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platzierung";
$quota->prc = 45;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Gruenes Trikot";
$quota->prc = 10;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Liga-Wertung";
$quota->prc = 20;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "pokal";
$quota->prc = 15;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 1";
$quota->order = 1;
$quota->prc = 21;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 2";
$quota->order = 2;
$quota->prc = 17;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 3";
$quota->order = 3;
$quota->prc = 13;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 4";
$quota->order = 4;
$quota->prc = 10;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 5";
$quota->order = 5;
$quota->prc = 9;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 6";
$quota->order = 6;
$quota->prc = 8;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 7";
$quota->order = 7;
$quota->prc = 7;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 8";
$quota->order = 8;
$quota->prc = 6;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 9";
$quota->order = 9;
$quota->prc = 5;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "Platz 10";
$quota->order = 10;
$quota->prc = 4;
$quota->save();
///////////////////////////////////
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "liga_platz1";
$quota->order = 10;
$quota->prc = 50;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "liga_platz2";
$quota->order = 10;
$quota->prc = 20;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "liga_platz3";
$quota->order = 10;
$quota->prc = 17;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "liga_platz2_1";
$quota->order = 10;
$quota->prc = 8;
$quota->save();
$quota = new Quota;
$quota->season_id = $season_id;
$quota->name = "liga_platz3_1";
$quota->order = 10;
$quota->prc = 5;
$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;
}
public static function getPayoutPerUserDetails($userId) {
$response = Tipp::getRoundTipps();
$roundtipps = $response['roundtipps'];
$round_ids = $response['round_ids'];
$payouts = array();
$cnt=0;
foreach($round_ids as $round_id) {
$key=$round_id."_".$userId;
$payout = $roundtipps[$key]['payout'];
if (strlen( $payout )>0) {
$round = Round::where('id','=',$round_id)->first();
$item=array();
$item['roundname']=$round->name . " (Tagessieg)";
$item['payout'] =$payout;
array_push($payouts,$item);
}
if ($roundtipps[$key]['ranking_payout']>0) {
$item=array();
$item['roundname']="Platzierungssieg Rang ".$roundtipps[$key]['rank'];
$item['payout']=$roundtipps[$key]['ranking_payout'];
array_push($payouts,$item);
}
}
// Manuelle Payouts hinzufügen
$_payouts = Quota::getPayouts();
$winners = ManualPayout::getWinners();
foreach ($winners as $quota => $userId) {
if (!array_key_exists($quota, $_payouts)) continue;
$item = array();
$item['roundname']=$quota;
$item['payout']=$_payouts[$quota];
array_push($payouts,$item);
}
return $payouts;
}
public static function getPayoutPerUser($seasonId=-1)
{
Log::info("starting payout per user");
$season = Season::get($seasonId);
$response = Tipp::getRoundTipps();
$roundtipps = $response['roundtipps'];
$user_ids = $response['user_ids'];
$round_ids = $response['round_ids'];
$payoutTotal = array();
$cnt = 0;
foreach ($round_ids as $round_id) {
foreach ($user_ids as $user_id) {
$key = $round_id . "_" . $user_id;
$payout = str_replace(",", ".", $roundtipps[$key]['payout']);
if (strlen($payout) == 0) {
$payout = 0;
}
if (!array_key_exists($user_id, $payoutTotal)) {
$payoutTotal[$user_id]['amount'] = 0;
$payoutTotal[$user_id]['name'] = $roundtipps[$key]['user_name'];
$payoutTotal[$user_id]['user_id'] = $roundtipps[$key]['user_id'];
}
$payoutTotal[$user_id]['amount'] += $payout;
$payout_ranking = $roundtipps[$key]['ranking_payout'];
$payoutTotal[$user_id]['amount'] += $payout_ranking;
}
}
// Manuelle Payouts hinzufügen
$payouts = Quota::getPayouts();
$winners = ManualPayout::getWinners();
Log::info("Winners content:");
foreach ($winners as $quota => $userId) {
Log::info($quota." => ".$userId);
if (!array_key_exists($userId, $winners)) {
Log::info("Key not found: ".$quota);
continue;
}
Log::Info("Manual Payout: quota=".$quota.", Amount=".$payout[$quota].", userId=".$userId);
$payoutTotal[$userId]['amount'] += $payouts[$quota];
}
$sortedPayout = array();
foreach ($payoutTotal as $payout) {
$payment = array();
$payment['user_id'] = $payout['user_id'];
$payment['name'] = $payout['name'];
$payment['amount'] = $payout['amount'];
array_push($sortedPayout, $payment);
}
usort($sortedPayout,array('App\Quota','cmpPayment'));
return $sortedPayout;
}
public static function cmpPayment($payment1, $payment2) {
return ($payment1['amount'] < $payment2['amount']);
}
}