diff --git a/PadelClubData/Data/PlayerRegistration.swift b/PadelClubData/Data/PlayerRegistration.swift index 4f9bd7d..cfd13e3 100644 --- a/PadelClubData/Data/PlayerRegistration.swift +++ b/PadelClubData/Data/PlayerRegistration.swift @@ -81,6 +81,13 @@ final public class PlayerRegistration: BasePlayerRegistration, SideStorable { } public func contains(_ searchField: String) -> Bool { + if let paymentId, paymentId.localizedCaseInsensitiveContains(searchField) { return true } + if let email, email.lowercased().localizedCaseInsensitiveContains(searchField) { return true } + if let contactEmail, contactEmail.localizedCaseInsensitiveContains(searchField) { return true } + if let licenceId, licenceId.localizedCaseInsensitiveContains(searchField) { return true } + if searchField.isPhoneNumber(), let phoneNumber, phoneNumber.isSamePhoneNumber(as: searchField) { return true } + if searchField.isPhoneNumber(), let contactPhoneNumber, contactPhoneNumber.isSamePhoneNumber(as: searchField) { return true } + let nameComponents = searchField.canonicalVersion.split(separator: " ") if nameComponents.count > 1 { diff --git a/PadelClubData/Data/TeamRegistration.swift b/PadelClubData/Data/TeamRegistration.swift index 9cd28e2..8c4fce2 100644 --- a/PadelClubData/Data/TeamRegistration.swift +++ b/PadelClubData/Data/TeamRegistration.swift @@ -687,6 +687,16 @@ final public class TeamRegistration: BaseTeamRegistration, SideStorable { return nil } + + public func followingMatches() -> [Match] { + guard let tournamentStore else { return [] } + let allTeamScores = tournamentStore.teamScores.filter({ $0.teamRegistration == self.id }) + let ids = allTeamScores.compactMap({ $0.match }) + let matches = tournamentStore.matches.filter({ match in + ids.contains(match.id) + }) + return matches.sorted(by: \.computedStartDateForSorting) + } func insertOnServer() { self.tournamentStore?.teamRegistrations.writeChangeAndInsertOnServer(instance: self) diff --git a/PadelClubData/Extensions/String+Extensions.swift b/PadelClubData/Extensions/String+Extensions.swift index 97986d2..5f9aa47 100644 --- a/PadelClubData/Extensions/String+Extensions.swift +++ b/PadelClubData/Extensions/String+Extensions.swift @@ -225,6 +225,23 @@ public extension String { firstMatch(of: RegexStatic.phoneNumber) != nil } + func normalize(_ phone: String) -> String { + var normalized = phone.trimmingCharacters(in: .whitespacesAndNewlines) + // Remove all non-digit characters + normalized = normalized.components(separatedBy: CharacterSet.decimalDigits.inverted).joined() + // Remove leading country code for France (33) if present + if normalized.hasPrefix("33") { + normalized = "0" + normalized.dropFirst(2) + } else if normalized.hasPrefix("0033") { + normalized = "0" + normalized.dropFirst(4) + } + return normalized + } + + func isSamePhoneNumber(as other: String) -> Bool { + return normalize(self) == normalize(other) + } + func cleanSearchText() -> String { // Create a character set of all punctuation except slashes and hyphens var punctuationToRemove = CharacterSet.punctuationCharacters @@ -312,3 +329,4 @@ public extension String { return self // Return the original string if parsing fails } } +