diff --git a/app/Console/Commands/TabulateWinners.php b/app/Console/Commands/TabulateWinners.php index 7d6159d..400cade 100644 --- a/app/Console/Commands/TabulateWinners.php +++ b/app/Console/Commands/TabulateWinners.php @@ -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() ] ); } diff --git a/app/Console/Commands/TabulateWinnersNew.php b/app/Console/Commands/TabulateWinnersNew.php new file mode 100644 index 0000000..0f7b103 --- /dev/null +++ b/app/Console/Commands/TabulateWinnersNew.php @@ -0,0 +1,133 @@ +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 + ]); + } + } + } +} \ No newline at end of file diff --git a/app/Http/Controllers/PagesController.php b/app/Http/Controllers/PagesController.php index 93291f7..aac6f3d 100644 --- a/app/Http/Controllers/PagesController.php +++ b/app/Http/Controllers/PagesController.php @@ -490,6 +490,15 @@ class PagesController extends Controller ->get(); return view('carshowscores', ['carshowscore_results' => $carshowscore_results]); } + public function showscoresbycar() + { + $carshowscore2_results = VehicleScores::with(['scoredVehicle']) + ->groupBy('vehicle') + ->selectRaw('*, sum(vehicle_scores.overall_score) as totalscore') + ->orderBy('vehicle', 'desc') + ->get(); + return view('carshowscores', ['carshowscore_results' => $carshowscore2_results]); + } public function showcarlist() { $showcarlist_results = Bidders::has('vehicles') diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 86fe6b2..5d30373 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -151,11 +151,21 @@ Vehicle Total Scores +
  • + + Vehicle Total Scores by Car + +
  • Tabulate Show Winners
  • +
  • + + Tabulate Show Winners New + +