multistore
Razmig Sarkissian 1 year ago
parent f4fcc97dee
commit 70e384bb30
  1. 2
      PadelClub.xcodeproj/project.pbxproj
  2. 10
      PadelClub/Data/Tournament.swift
  3. 74
      PadelClub/Views/Cashier/CashierDetailView.swift

@ -1882,7 +1882,7 @@
); );
MARKETING_VERSION = 0.1; MARKETING_VERSION = 0.1;
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20"; MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu17 gnu++20";
OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-function-bodies=5 -Xfrontend -warn-long-expression-type-checking=20 -Xfrontend -warn-long-function-bodies=50"; OTHER_SWIFT_FLAGS = "";
PRODUCT_BUNDLE_IDENTIFIER = app.padelclub; PRODUCT_BUNDLE_IDENTIFIER = app.padelclub;
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_EMIT_LOC_STRINGS = YES;

@ -867,7 +867,15 @@ class Tournament : ModelObject, Storable {
func selectedPlayers() -> [PlayerRegistration] { func selectedPlayers() -> [PlayerRegistration] {
return self.selectedSortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank) return self.selectedSortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank)
} }
func paidSelectedPlayers(type: PlayerRegistration.PlayerPaymentType) -> Double? {
if let entryFee {
return Double(self.selectedSortedTeams().flatMap { $0.unsortedPlayers() }.filter { $0.paymentType == type }.count) * entryFee
} else {
return nil
}
}
func players() -> [PlayerRegistration] { func players() -> [PlayerRegistration] {
return self.unsortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank) return self.unsortedTeams().flatMap { $0.unsortedPlayers() }.sorted(by: \.computedRank)
} }

@ -9,6 +9,10 @@ import SwiftUI
struct CashierDetailView: View { struct CashierDetailView: View {
var tournaments : [Tournament] var tournaments : [Tournament]
@State private var calculateEarnings: Bool = false
@State private var calculateCompletion: Bool = false
@State private var earnings: Double? = nil
@State private var paidCompletion: Double? = nil
init(tournaments: [Tournament]) { init(tournaments: [Tournament]) {
self.tournaments = tournaments self.tournaments = tournaments
@ -20,6 +24,27 @@ struct CashierDetailView: View {
var body: some View { var body: some View {
List { List {
if tournaments.count > 1 {
Section {
LabeledContent {
if let earnings {
Text(earnings.formatted(.currency(code: "EUR").precision(.fractionLength(0))))
} else {
ProgressView()
}
} label: {
Text("Encaissement")
if let paidCompletion {
Text(paidCompletion.formatted(.percent.precision(.fractionLength(0)))).foregroundStyle(.secondary)
}
}
_tournamentsCashierDetailView(tournaments)
} header: {
Text("Bilan")
}
}
ForEach(tournaments) { tournament in ForEach(tournaments) { tournament in
Section { Section {
LabeledContent { LabeledContent {
@ -37,12 +62,29 @@ struct CashierDetailView: View {
} }
} }
.headerProminence(.increased) .headerProminence(.increased)
.onAppear {
Task {
_getEarnings()
_getPaidCompletion()
}
}
}
private func _getEarnings() {
earnings = tournaments.map { $0.earnings() }.reduce(0,+)
}
private func _getPaidCompletion() {
let selectedPlayers = tournaments.flatMap { $0.selectedPlayers() }
if selectedPlayers.isEmpty { paidCompletion = 0 }
paidCompletion = Double(selectedPlayers.filter { $0.hasPaid() }.count) / Double(selectedPlayers.count)
} }
private func _tournamentCashierDetailView(_ tournament: Tournament) -> some View { private func _tournamentCashierDetailView(_ tournament: Tournament) -> some View {
DisclosureGroup { DisclosureGroup {
let selectedPlayers = tournament.selectedPlayers()
ForEach(PlayerRegistration.PlayerPaymentType.allCases) { type in ForEach(PlayerRegistration.PlayerPaymentType.allCases) { type in
let count = tournament.selectedPlayers().filter({ $0.paymentType == type }).count let count = selectedPlayers.filter({ $0.paymentType == type }).count
if count > 0 { if count > 0 {
LabeledContent { LabeledContent {
if let entryFee = tournament.entryFee { if let entryFee = tournament.entryFee {
@ -58,20 +100,22 @@ struct CashierDetailView: View {
} label: { } label: {
Text("Voir le détail") Text("Voir le détail")
} }
}
// private func _tournamentsCashierDetailView(_ tournaments: [Tournament]) -> some View {
// Section { DisclosureGroup {
// ForEach(tournaments) { tournament in ForEach(PlayerRegistration.PlayerPaymentType.allCases) { type in
// } let value = tournaments.compactMap({ $0.paidSelectedPlayers(type: type) }).reduce(0,+)
//// HStack { if value > 0 {
//// Text("Total") LabeledContent {
//// Spacer() Text(value.formatted(.currency(code: "EUR")))
//// Text(event.earnings.formatted(.currency(code: "EUR").precision(.fractionLength(0)))) } label: {
//// Text(event.paidCompletion.formatted(.percent.precision(.fractionLength(0)))).foregroundStyle(.secondary) Text(type.localizedLabel())
//// } }
// } header: { }
// Text("Encaissement") }
// } } label: {
Text("Voir le détail")
}
} }
} }

Loading…
Cancel
Save