"platz2" => "platz3" => "platz4" => "platz5" => "platz6" => "platz7" => "platz8" => "platz9" => "platz10" = "liga_platz "liga_platz "liga_platz "liga_platz "liga_platz "gshirt" => "pokal" => */ 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["gshirt"] / 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["platz1"] / 100)))); //Log::info("Platz 1=".$euro_platz1); $euro_platz2 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz2"] / 100)))); $euro_platz3 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz3"] / 100)))); $euro_platz4 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz4"] / 100)))); $euro_platz5 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz5"] / 100)))); $euro_platz6 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz6"] / 100)))); $euro_platz7 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz7"] / 100)))); $euro_platz8 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz8"] / 100)))); $euro_platz9 = Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz9"] / 100)))); $euro_platz10= Quota::get6Divisor(intval( $euro_platzierung * (( $quotas["platz10"] / 100)))); $euro_liga=intval($euro_pott *(($quotas["liga"] / 100))); $euro_liga_platz1 = Quota::get6Divisor(intval($euro_liga*(($quotas["liga_platz1"] / 100)))); $euro_liga_platz2 = Quota::get6Divisor(intval($euro_liga*(($quotas["liga_platz2"] / 100)))); $euro_liga_platz3 = Quota::get6Divisor(intval($euro_liga*(($quotas["liga_platz3"] / 100)))); $euro_liga_platz2_1 = Quota::get6Divisor(intval($euro_liga*(($quotas["liga_platz2_1"] / 100)))); $euro_liga_platz3_1 = Quota::get6Divisor(intval($euro_liga*(($quotas["liga_platz3_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); $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['gshirt'] = $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 = "gshirt"; $quota->prc = 10; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "liga"; $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 = "platz1"; $quota->order = 1; $quota->prc = 21; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz2"; $quota->order = 2; $quota->prc = 17; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz3"; $quota->order = 3; $quota->prc = 13; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz4"; $quota->order = 4; $quota->prc = 10; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz5"; $quota->order = 5; $quota->prc = 9; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz6"; $quota->order = 6; $quota->prc = 8; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz7"; $quota->order = 7; $quota->prc = 7; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz8"; $quota->order = 8; $quota->prc = 6; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz9"; $quota->order = 9; $quota->prc = 5; $quota->save(); $quota = new Quota; $quota->season_id = $season_id; $quota->name = "platz10"; $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; } // Beinhaltet Liste der Payouts für alle User. // User ohne Payout sind mit leerer Liste ebenfalls enthalten. public static function getPayoutList($response=null) { if (!$response) { $response = Tipp::getRoundTipps(); } $roundtipps = $response['roundtipps']; $round_ids = $response['round_ids']; $user_ids = $response['user_ids']; $payouts = array(); $cnt=0; foreach($round_ids as $round_id) { foreach($user_ids as $userId) { $key = $round_id . "_" . $userId; $payout = $roundtipps[$key]['payout']; $payoutList[$userId]=array(); // Wird unten fuer ManualPayout+GreenShirt benötigt. Eine PayoutListe für jeden User 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); } } } // Gshirt START if (Season::hasGreenShirtGame() ) { $gshirtTotalPayout = Quota::getPayouts()['gshirt']; $leaderCount = 0; $leaderIds = array(); foreach ($user_ids as $uid) { $key = Round::getLastRoundId() . "_" . $uid; // $key could be nonexistenen if we are not in the last round if (!array_key_exists($key, $roundtipps)) continue; if ($roundtipps[$key]['gshirt_leader'] == 1) { $leaderCount += 1; array_push($leaderIds,$uid); } } if ($leaderCount) { $payoutPerLeader = round($gshirtTotalPayout / $leaderCount, 2); foreach ($leaderIds as $leaderId) { $item = array(); $item['roundname'] = "Grünes Trikot"; $item['payout'] = $payoutPerLeader; array_push($payoutList[$leaderId], $item); } } } // GSHirt End // Manuelle Payouts hinzufügen $names = ["pokal" => "Pokal", "liga_platz1"=>"Liga 1, Platz 1", "liga_platz2"=>"Liga 1, Platz 2 ", "liga_platz3" => "Liga 1, Platz 3", "liga_platz2_1" =>"Liga 2, Platz 1", "liga_platz3_1"=>"Liga 3, Platz 1" ]; $_payouts = Quota::getPayouts(); $winners = ManualPayout::getWinners(); foreach ($winners as $quota => $uId) { $item = array(); $item['roundname']=$names[$quota]; $item['payout']=$_payouts[$quota]; array_push($payoutList[$uId],$item); } return $payoutList; } public static function getPayoutPerUserDetails($userId, $response=null) { if (!$response) { $response = Tipp::getRoundTipps(); } $roundtipps = $response['roundtipps']; $round_ids = $response['round_ids']; $user_ids = $response['user_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); } } // Gshirt START if (Season::hasGreenShirtGame() ) { $gshirtTotalPayout = Quota::getPayouts()['gshirt']; $leaderCount = 0; $leaderIds = array(); foreach ($user_ids as $uid) { $key = Round::getLastRoundId() . "_" . $uid; // $key could be nonexistenen if we are not in the last round if (!array_key_exists($key, $roundtipps)) continue; if ($roundtipps[$key]['gshirt_leader'] == 1) { $leaderCount += 1; array_push($leaderIds,$uid); } } if ($leaderCount) { $payoutPerLeader = round($gshirtTotalPayout / $leaderCount, 2); foreach ($leaderIds as $leaderId) { if ($userId == $leaderId) { $item = array(); $item['roundname'] = "Grünes Trikot"; $item['payout'] = $payoutPerLeader; array_push($payouts, $item); } } } } // GSHirt End // Manuelle Payouts hinzufügen $names = ["pokal" => "Pokal", "liga_platz1"=>"Liga 1, Platz 1", "liga_platz2"=>"Liga 1, Platz 2 ", "liga_platz3" => "Liga 1, Platz 3", "liga_platz2_1" =>"Liga 2, Platz 1", "liga_platz3_1"=>"Liga 3, Platz 1" ]; $_payouts = Quota::getPayouts(); $winners = ManualPayout::getWinners(); foreach ($winners as $quota => $uId) { if ($uId != $userId) continue; $item = array(); $item['roundname']=$names[$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; } } // Gshirt START if (Season::hasGreenShirtGame() ) { $gshirtTotalPayout = Quota::getPayouts()['gshirt']; $leaderCount = 0; $leaderIds = array(); foreach ($user_ids as $userId) { $key = Round::getLastRoundId() . "_" . $userId; if ($roundtipps[$key]['gshirt_leader'] == 1) { $leaderCount += 1; array_push($leaderIds,$userId); } } $payoutPerLeader = round($gshirtTotalPayout / $leaderCount, 2); foreach($leaderIds as $leaderId) { $payoutTotal[$leaderId]['amount'] += $payoutPerLeader; } } // GSHirt End // Manuelle Payouts hinzufügen $payouts = Quota::getPayouts(); $winners = ManualPayout::getWinners(); Log::info("Winners content:"); foreach ($winners as $quota => $userId) { Log::Info("Manual Payout: quota=".$quota.", Amount=".$payouts[$quota].", userId=".$userId); if ($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']); } }