## Complete PHP Filter Class and Usage ```php id = $id; $this->name = $name; $this->gender = $gender; $this->dob = new DateTime($dob); $this->clubId = $clubId; $this->weight = $weight; } public function calculateAge(): int { $now = new DateTime(); $diff = $now->diff($this->dob); return $diff->y; } } class TaekwondoPredrawHelper { public static function getAgeCategory(int $age): string { if ($age >= 6 && $age <= 11) return "Child"; if ($age >= 12 && $age <= 14) return "Cadet"; if ($age >= 15 && $age <= 17) return "Junior"; if ($age >= 18 && $age <= 32) return "Senior"; if ($age >= 33 && $age <= 40) return "Ultra 1"; if ($age >= 41 && $age <= 50) return "Ultra 2"; if ($age >= 51 && $age <= 60) return "Ultra 3"; if ($age >= 61) return "Ultra 4"; return "Unknown"; } public static function getWeightClass(string $gender, int $age, ?float $weight): string { if ($weight === null) return "Unknown"; // Weight classes fully specified per WT 2025 categories: if ($gender === "Male") { if ($age >= 6 && $age <= 11) { if ($weight <= 22) return "-22kg"; if ($weight <= 24) return "-24kg"; if ($weight <= 26) return "-26kg"; if ($weight <= 29) return "-29kg"; if ($weight <= 32) return "-32kg"; if ($weight <= 35) return "-35kg"; if ($weight <= 38) return "-38kg"; if ($weight <= 42) return "-42kg"; if ($weight <= 45) return "-45kg"; return "+45kg"; } if ($age >= 12 && $age <= 14) { if ($weight <= 33) return "-33kg"; if ($weight <= 37) return "-37kg"; if ($weight <= 41) return "-41kg"; if ($weight <= 45) return "-45kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 53) return "-53kg"; if ($weight <= 57) return "-57kg"; if ($weight <= 61) return "-61kg"; if ($weight <= 65) return "-65kg"; return "+65kg"; } if ($age >= 15 && $age <= 17) { if ($weight <= 45) return "-45kg"; if ($weight <= 48) return "-48kg"; if ($weight <= 51) return "-51kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; if ($weight <= 73) return "-73kg"; if ($weight <= 78) return "-78kg"; return "+78kg"; } if ($age >= 18) { if ($weight <= 54) return "-54kg"; if ($weight <= 58) return "-58kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; if ($weight <= 74) return "-74kg"; if ($weight <= 80) return "-80kg"; if ($weight <= 87) return "-87kg"; return "+87kg"; } } if ($gender === "Female") { if ($age >= 6 && $age <= 11) { if ($weight <= 22) return "-22kg"; if ($weight <= 24) return "-24kg"; if ($weight <= 26) return "-26kg"; if ($weight <= 29) return "-29kg"; if ($weight <= 32) return "-32kg"; if ($weight <= 35) return "-35kg"; if ($weight <= 38) return "-38kg"; if ($weight <= 42) return "-42kg"; if ($weight <= 45) return "-45kg"; return "+45kg"; } if ($age >= 12 && $age <= 14) { if ($weight <= 29) return "-29kg"; if ($weight <= 33) return "-33kg"; if ($weight <= 37) return "-37kg"; if ($weight <= 41) return "-41kg"; if ($weight <= 44) return "-44kg"; if ($weight <= 47) return "-47kg"; if ($weight <= 51) return "-51kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; return "+59kg"; } if ($age >= 15 && $age <= 17) { if ($weight <= 42) return "-42kg"; if ($weight <= 44) return "-44kg"; if ($weight <= 46) return "-46kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 52) return "-52kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; return "+68kg"; } if ($age >= 18) { if ($weight <= 46) return "-46kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 53) return "-53kg"; if ($weight <= 57) return "-57kg"; if ($weight <= 62) return "-62kg"; if ($weight <= 67) return "-67kg"; if ($weight <= 73) return "-73kg"; return "+73kg"; } } return "Unknown"; } public static function groupPlayersForPredraw(array $players): array { $groups = []; foreach ($players as $player) { $age = $player->calculateAge(); $gender = $player->gender; $ageCategory = self::getAgeCategory($age); $weightClass = self::getWeightClass($gender, $age, $player->weight); $key = "$gender|$ageCategory|$weightClass"; if (!isset($groups[$key])) { $groups[$key] = [ 'gender' => $gender, 'ageCategory' => $ageCategory, 'weightClass' => $weightClass, 'players' => [] ]; } $groups[$key]['players'][] = $player; } return array_values($groups); } } ``` ## Laravel Service Class (full filter included) ```php age; } public function getAgeCategory($age) { if ($age >= 6 && $age <= 11) return "Child"; if ($age >= 12 && $age <= 14) return "Cadet"; if ($age >= 15 && $age <= 17) return "Junior"; if ($age >= 18 && $age <= 32) return "Senior"; if ($age >= 33 && $age <= 40) return "Ultra 1"; if ($age >= 41 && $age <= 50) return "Ultra 2"; if ($age >= 51 && $age <= 60) return "Ultra 3"; if ($age >= 61) return "Ultra 4"; return "Unknown"; } public function getWeightClass($gender, $age, $weight) { if (empty($weight)) return "Unknown"; if ($gender === 'Male') { if ($age >= 6 && $age <= 11) { if ($weight <= 22) return "-22kg"; if ($weight <= 24) return "-24kg"; if ($weight <= 26) return "-26kg"; if ($weight <= 29) return "-29kg"; if ($weight <= 32) return "-32kg"; if ($weight <= 35) return "-35kg"; if ($weight <= 38) return "-38kg"; if ($weight <= 42) return "-42kg"; if ($weight <= 45) return "-45kg"; return "+45kg"; } if ($age >= 12 && $age <= 14) { if ($weight <= 33) return "-33kg"; if ($weight <= 37) return "-37kg"; if ($weight <= 41) return "-41kg"; if ($weight <= 45) return "-45kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 53) return "-53kg"; if ($weight <= 57) return "-57kg"; if ($weight <= 61) return "-61kg"; if ($weight <= 65) return "-65kg"; return "+65kg"; } if ($age >= 15 && $age <= 17) { if ($weight <= 45) return "-45kg"; if ($weight <= 48) return "-48kg"; if ($weight <= 51) return "-51kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; if ($weight <= 73) return "-73kg"; if ($weight <= 78) return "-78kg"; return "+78kg"; } if ($age >= 18) { if ($weight <= 54) return "-54kg"; if ($weight <= 58) return "-58kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; if ($weight <= 74) return "-74kg"; if ($weight <= 80) return "-80kg"; if ($weight <= 87) return "-87kg"; return "+87kg"; } } if ($gender === 'Female') { if ($age >= 6 && $age <= 11) { if ($weight <= 22) return "-22kg"; if ($weight <= 24) return "-24kg"; if ($weight <= 26) return "-26kg"; if ($weight <= 29) return "-29kg"; if ($weight <= 32) return "-32kg"; if ($weight <= 35) return "-35kg"; if ($weight <= 38) return "-38kg"; if ($weight <= 42) return "-42kg"; if ($weight <= 45) return "-45kg"; return "+45kg"; } if ($age >= 12 && $age <= 14) { if ($weight <= 29) return "-29kg"; if ($weight <= 33) return "-33kg"; if ($weight <= 37) return "-37kg"; if ($weight <= 41) return "-41kg"; if ($weight <= 44) return "-44kg"; if ($weight <= 47) return "-47kg"; if ($weight <= 51) return "-51kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; return "+59kg"; } if ($age >= 15 && $age <= 17) { if ($weight <= 42) return "-42kg"; if ($weight <= 44) return "-44kg"; if ($weight <= 46) return "-46kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 52) return "-52kg"; if ($weight <= 55) return "-55kg"; if ($weight <= 59) return "-59kg"; if ($weight <= 63) return "-63kg"; if ($weight <= 68) return "-68kg"; return "+68kg"; } if ($age >= 18) { if ($weight <= 46) return "-46kg"; if ($weight <= 49) return "-49kg"; if ($weight <= 53) return "-53kg"; if ($weight <= 57) return "-57kg"; if ($weight <= 62) return "-62kg"; if ($weight <= 67) return "-67kg"; if ($weight <= 73) return "-73kg"; return "+73kg"; } } return "Unknown"; } public function groupPlayersForPredraw() { $players = Player::all(); $groups = []; foreach ($players as $player) { $age = $this->calculateAge($player->dob); $gender = $player->gender; $ageCategory = $this->getAgeCategory($age); $weightClass = $this->getWeightClass($gender, $age, $player->weight); $key = "$gender|$ageCategory|$weightClass"; if (!isset($groups[$key])) { $groups[$key] = [ 'gender' => $gender, 'ageCategory' => $ageCategory, 'weightClass' => $weightClass, 'players' => [] ]; } $groups[$key]['players'][] = $player; } return array_values($groups); } } ```