forked from TFMM/silent-auction
test new pages
This commit is contained in:
@@ -118,52 +118,52 @@ class TabulateWinners extends Command
|
||||
return $zeroTo43Query->vehicle;
|
||||
}
|
||||
|
||||
function fortyThreeToSixtyEightWinner()
|
||||
function fortyThreeToSixtyNineWinner()
|
||||
{
|
||||
$fortyThreeToSixtyEightQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
$fortyThreeToSixtyNineQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
->groupBy('vehicles.id')
|
||||
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
|
||||
->whereNotIn('vehicle_scores.vehicle', function($query){
|
||||
$query->select('vehicle')->from('car_show_winners');
|
||||
})
|
||||
->where('vehicles.year', '>=', 1943)
|
||||
->where('vehicles.year', '<=', 1968)
|
||||
->where('vehicles.year', '<=', 1969)
|
||||
->where('vehicles.doNotJudge', '=', 0)
|
||||
->orderBy('totalscore','desc')
|
||||
->first();
|
||||
return $fortyThreeToSixtyEightQuery->vehicle;
|
||||
return $fortyThreeToSixtyNineQuery->vehicle;
|
||||
}
|
||||
|
||||
function sixtyNineToNinetyNineWinner()
|
||||
function seventyToTwoThousandWinner()
|
||||
{
|
||||
$sixtyNineToNinetyNineQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
$seventyToTwoThousandQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
->groupBy('vehicles.id')
|
||||
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
|
||||
->whereNotIn('vehicle_scores.vehicle', function($query){
|
||||
$query->select('vehicle')->from('car_show_winners');
|
||||
})
|
||||
->where('vehicles.year', '>=', 1969)
|
||||
->where('vehicles.year', '<=', 1999)
|
||||
->where('vehicles.year', '>=', 1970)
|
||||
->where('vehicles.year', '<=', 2000)
|
||||
->where('vehicles.doNotJudge', '=', 0)
|
||||
->orderBy('totalscore','desc')
|
||||
->first();
|
||||
return $sixtyNineToNinetyNineQuery->vehicle;
|
||||
return $seventyToTwoThousandQuery->vehicle;
|
||||
}
|
||||
|
||||
function TwoThousandToCurrentWinner()
|
||||
function TwoThousandOneToCurrentWinner()
|
||||
{
|
||||
$TwoThousandToCurrentQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
$TwoThousandOneToCurrentQuery = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
->groupBy('vehicles.id')
|
||||
->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore')
|
||||
->whereNotIn('vehicle_scores.vehicle', function($query){
|
||||
$query->select('vehicle')->from('car_show_winners');
|
||||
})
|
||||
->where('vehicles.year', '>=', 2000)
|
||||
->where('vehicles.year', '>=', 2001)
|
||||
//->where('vehicles.year', '<=', 1997)
|
||||
->where('vehicles.doNotJudge', '=', 0)
|
||||
->orderBy('totalscore','desc')
|
||||
->first();
|
||||
return $TwoThousandToCurrentQuery->vehicle;
|
||||
return $TwoThousandOneToCurrentQuery->vehicle;
|
||||
}
|
||||
|
||||
// Truncate table first
|
||||
@@ -219,14 +219,14 @@ class TabulateWinners extends Command
|
||||
'vehicle' => zeroTo42Winner()
|
||||
]
|
||||
);
|
||||
//1943-1967
|
||||
//1943-1969
|
||||
CarShowWinner::updateOrCreate(
|
||||
[
|
||||
'category' => '18',
|
||||
'place' => 'first'
|
||||
],
|
||||
[
|
||||
'vehicle' => fortyThreeToSixtyEightWinner()
|
||||
'vehicle' => fortyThreeToSixtyNineWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -235,7 +235,7 @@ class TabulateWinners extends Command
|
||||
'place' => 'second'
|
||||
],
|
||||
[
|
||||
'vehicle' => fortyThreeToSixtyEightWinner()
|
||||
'vehicle' => fortyThreeToSixtyNineWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -244,18 +244,18 @@ class TabulateWinners extends Command
|
||||
'place' => 'third'
|
||||
],
|
||||
[
|
||||
'vehicle' => fortyThreeToSixtyEightWinner()
|
||||
'vehicle' => fortyThreeToSixtyNineWinner()
|
||||
]
|
||||
);
|
||||
|
||||
//1968-1997
|
||||
//1970-2000
|
||||
CarShowWinner::updateOrCreate(
|
||||
[
|
||||
'category' => '20',
|
||||
'place' => 'first'
|
||||
],
|
||||
[
|
||||
'vehicle' => sixtyNineToNinetyNineWinner()
|
||||
'vehicle' => seventyToTwoThousandWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -264,7 +264,7 @@ class TabulateWinners extends Command
|
||||
'place' => 'second'
|
||||
],
|
||||
[
|
||||
'vehicle' => sixtyNineToNinetyNineWinner()
|
||||
'vehicle' => seventyToTwoThousandWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -273,18 +273,18 @@ class TabulateWinners extends Command
|
||||
'place' => 'third'
|
||||
],
|
||||
[
|
||||
'vehicle' => sixtyNineToNinetyNineWinner()
|
||||
'vehicle' => seventyToTwoThousandWinner()
|
||||
]
|
||||
);
|
||||
|
||||
//1998-Current
|
||||
//2001-Current
|
||||
CarShowWinner::updateOrCreate(
|
||||
[
|
||||
'category' => '19',
|
||||
'place' => 'first'
|
||||
],
|
||||
[
|
||||
'vehicle' => TwoThousandToCurrentWinner()
|
||||
'vehicle' => TwoThousandOneToCurrentWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -293,7 +293,7 @@ class TabulateWinners extends Command
|
||||
'place' => 'second'
|
||||
],
|
||||
[
|
||||
'vehicle' => TwoThousandToCurrentWinner()
|
||||
'vehicle' => TwoThousandOneToCurrentWinner()
|
||||
]
|
||||
);
|
||||
CarShowWinner::updateOrCreate(
|
||||
@@ -302,7 +302,7 @@ class TabulateWinners extends Command
|
||||
'place' => 'third'
|
||||
],
|
||||
[
|
||||
'vehicle' => TwoThousandToCurrentWinner()
|
||||
'vehicle' => TwoThousandOneToCurrentWinner()
|
||||
]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,133 @@
|
||||
<?php
|
||||
|
||||
namespace App\Console\Commands;
|
||||
|
||||
use Illuminate\Console\Command;
|
||||
use App\Models\CarShowWinner;
|
||||
use App\Models\PeoplesChoice;
|
||||
use App\Models\VehicleScores;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
class TabulateWinnersNew extends Command
|
||||
{
|
||||
protected $signature = 'carshow:tabulatewinnersnew';
|
||||
protected $description = 'Tabulate Show Winners. Year Category 1st places can overlap with Best in Show/People\'s Choice.';
|
||||
|
||||
public function handle()
|
||||
{
|
||||
// 1. Reset the winners table
|
||||
CarShowWinner::truncate();
|
||||
|
||||
$this->info('Starting tabulation...');
|
||||
|
||||
// 2. BEST IN SHOW (Category 6)
|
||||
$this->recordJudgedWinners(6, 'first', null, null, true);
|
||||
|
||||
// 3. PEOPLE'S CHOICE (Category 3)
|
||||
$this->recordPeoplesChoiceWinners(3, 'first');
|
||||
|
||||
// 4. YEAR CATEGORIES
|
||||
$yearConfigs = [
|
||||
['id' => 17, 'name' => '0-1942', 'start' => 0, 'end' => 1942],
|
||||
['id' => 18, 'name' => '1943-1969', 'start' => 1943, 'end' => 1969],
|
||||
['id' => 20, 'name' => '1970-2000', 'start' => 1970, 'end' => 2000],
|
||||
['id' => 19, 'name' => '2001-Current', 'start' => 2001, 'end' => 2026],
|
||||
];
|
||||
|
||||
foreach ($yearConfigs as $config) {
|
||||
$this->info("Processing Category: {$config['name']}");
|
||||
|
||||
// Rank 1st: Set $excludeExisting to FALSE so they can win even if they won Best in Show
|
||||
$this->recordJudgedWinners($config['id'], 'first', $config['start'], $config['end'], false);
|
||||
|
||||
// Rank 2nd: Set $excludeExisting to TRUE (standard behavior)
|
||||
$this->recordJudgedWinners($config['id'], 'second', $config['start'], $config['end'], true);
|
||||
|
||||
// Rank 3rd: Set $excludeExisting to TRUE
|
||||
$this->recordJudgedWinners($config['id'], 'third', $config['start'], $config['end'], true);
|
||||
|
||||
// Rank 4th: Set $excludeExisting to TRUE
|
||||
$this->recordJudgedWinners($config['id'], 'fourth', $config['start'], $config['end'], true);
|
||||
|
||||
// Rank 5th: Set $excludeExisting to TRUE
|
||||
$this->recordJudgedWinners($config['id'], 'fifth', $config['start'], $config['end'], true);
|
||||
}
|
||||
|
||||
$this->info('Winners tabulated successfully.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $excludeExisting If true, ignores vehicles already in the winners table.
|
||||
*/
|
||||
private function recordJudgedWinners($categoryId, $place, $startYear = null, $endYear = null, $excludeExisting = true)
|
||||
{
|
||||
$query = VehicleScores::join('vehicles', 'vehicle_scores.vehicle', '=', 'vehicles.id')
|
||||
->where('vehicles.doNotJudge', 0);
|
||||
|
||||
// Conditional exclusion
|
||||
if ($excludeExisting) {
|
||||
$query->whereNotIn('vehicle_scores.vehicle', function ($q) {
|
||||
$q->select('vehicle')->from('car_show_winners');
|
||||
});
|
||||
}
|
||||
|
||||
if ($startYear !== null) $query->where('vehicles.year', '>=', $startYear);
|
||||
if ($endYear !== null) $query->where('vehicles.year', '<=', $endYear);
|
||||
|
||||
$maxScore = (clone $query)
|
||||
->groupBy('vehicles.id')
|
||||
->selectRaw('sum(vehicle_scores.overall_score) as totalscore')
|
||||
->orderBy('totalscore', 'desc')
|
||||
->value('totalscore');
|
||||
|
||||
if ($maxScore) {
|
||||
$winners = $query->selectRaw('vehicles.id as vehicle_id, sum(vehicle_scores.overall_score) as totalscore')
|
||||
->groupBy('vehicles.id')
|
||||
->having('totalscore', '=', $maxScore)
|
||||
->get();
|
||||
|
||||
foreach ($winners as $winner) {
|
||||
// Use updateOrCreate to prevent the exact same car/category/place combo doubling up
|
||||
CarShowWinner::updateOrCreate([
|
||||
'category' => $categoryId,
|
||||
'place' => $place,
|
||||
'vehicle' => $winner->vehicle_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private function recordPeoplesChoiceWinners($categoryId, $place)
|
||||
{
|
||||
// People's Choice usually excludes the Best in Show winner
|
||||
$maxVotes = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
|
||||
->where('vehicles.doNotJudge', 0)
|
||||
->whereNotIn('peoples_choice.vehicle', function ($q) {
|
||||
$q->select('vehicle')->from('car_show_winners');
|
||||
})
|
||||
->groupBy('peoples_choice.vehicle')
|
||||
->selectRaw('sum(pc_count) as totalvotes')
|
||||
->orderBy('totalvotes', 'desc')
|
||||
->value('totalvotes');
|
||||
|
||||
if ($maxVotes) {
|
||||
$winners = PeoplesChoice::join('vehicles', 'peoples_choice.vehicle', '=', 'vehicles.id')
|
||||
->selectRaw('peoples_choice.vehicle as vehicle_id, sum(pc_count) as totalvotes')
|
||||
->where('vehicles.doNotJudge', 0)
|
||||
->whereNotIn('peoples_choice.vehicle', function ($q) {
|
||||
$q->select('vehicle')->from('car_show_winners');
|
||||
})
|
||||
->groupBy('peoples_choice.vehicle')
|
||||
->having('totalvotes', '=', $maxVotes)
|
||||
->get();
|
||||
|
||||
foreach ($winners as $winner) {
|
||||
CarShowWinner::create([
|
||||
'category' => $categoryId,
|
||||
'place' => $place,
|
||||
'vehicle' => $winner->vehicle_id
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user