Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit ff51224

Browse files
committedJan 21, 2025·
Fix group balance screen with different currencies
1 parent 71c024f commit ff51224

13 files changed

+128
-114
lines changed
 

‎Data/Data/Router/AppRoute.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ public enum AppRoute: Hashable {
3232
case GroupSettleUpView(groupId: String)
3333
case GroupWhoIsPayingView(groupId: String, isPaymentSettled: Bool)
3434
case GroupWhoGettingPaidView(groupId: String, selectedMemberId: String)
35-
case GroupPaymentView(transactionId: String?, groupId: String, payerId: String, receiverId: String, amount: Double)
35+
case GroupPaymentView(transactionId: String?, groupId: String, payerId: String, receiverId: String,
36+
amount: Double, currency: String)
3637
case TransactionListView(groupId: String)
3738
case TransactionDetailView(transactionId: String, groupId: String)
3839

‎Splito/Localization/Localizable.xcstrings

+3-13
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,6 @@
66
},
77
" (Admin)" : {
88

9-
},
10-
" %@ " : {
11-
129
},
1310
" %@ settled up" : {
1411

@@ -25,16 +22,6 @@
2522
" in" : {
2623
"extractionState" : "manual"
2724
},
28-
" in %@ to %@" : {
29-
"localizations" : {
30-
"en" : {
31-
"stringUnit" : {
32-
"state" : "new",
33-
"value" : " in %1$@ to %2$@"
34-
}
35-
}
36-
}
37-
},
3825
" in total" : {
3926

4027
},
@@ -43,6 +30,9 @@
4330
},
4431
" to" : {
4532
"extractionState" : "manual"
33+
},
34+
" to %@" : {
35+
4636
},
4737
" updated the group name from" : {
4838
"extractionState" : "manual"

‎Splito/UI/Home/Groups/Group/Group Options/Balances/GroupBalancesView.swift

+37-15
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ struct GroupBalancesView: View {
5555
router: viewModel.router, transactionId: nil,
5656
groupId: viewModel.groupId, payerId: viewModel.payerId ?? "",
5757
receiverId: viewModel.receiverId ?? "",
58-
amount: viewModel.amount ?? 0
58+
amount: viewModel.amount ?? 0,
59+
currency: viewModel.amountCurrency ?? "INR"
5960
)
6061
)
6162
}
@@ -87,13 +88,11 @@ private struct GroupBalanceItemView: View {
8788
VStack(alignment: .leading, spacing: 20) {
8889
HStack(spacing: 16) {
8990
let totalOwed = memberBalance.totalOwedAmount.reduce(0) { $0 + $1.value }
91+
let name = viewModel.getMemberName(id: memberBalance.id, needFullName: true)
92+
9093
HStack(spacing: 16) {
9194
MemberProfileImageView(imageUrl: imageUrl)
9295

93-
let hasDue = totalOwed < 0
94-
let name = viewModel.getMemberName(id: memberBalance.id, needFullName: true)
95-
let owesOrGetsBack = hasDue ? (memberBalance.id == preference.user?.id ? "owe" : "owes") : (memberBalance.id == preference.user?.id ? "get back" : "gets back")
96-
9796
if totalOwed == 0 {
9897
Group {
9998
Text(name)
@@ -103,17 +102,39 @@ private struct GroupBalanceItemView: View {
103102
}
104103
.foregroundStyle(primaryText)
105104
} else {
106-
let currency = memberBalance.totalOwedAmount.keys.first
107-
Group {
108-
Text(name)
109-
.font(.subTitle2())
105+
let positiveAmounts = memberBalance.totalOwedAmount.filter { $0.value > 0 }
106+
let negativeAmounts = memberBalance.totalOwedAmount.filter { $0.value < 0 }
107+
108+
let positiveText = positiveAmounts.map { currency, amount in
109+
amount.formattedCurrencyWithSign(currency)
110+
}.joined(separator: " + ")
110111

111-
+ Text(" \(owesOrGetsBack.localized) ")
112+
let negativeText = negativeAmounts.map { currency, amount in
113+
abs(amount).formattedCurrencyWithSign(currency) // Use `abs` for positive display
114+
}.joined(separator: " + ")
112115

113-
+ Text(totalOwed.formattedCurrencyWithSign(currency))
114-
.foregroundColor(hasDue ? errorColor : successColor)
116+
VStack(alignment: .leading, spacing: 0) {
117+
if !positiveAmounts.isEmpty {
118+
let getBackText = (memberBalance.id == preference.user?.id) ? "get back" : "gets back"
119+
Text("\(name) \(getBackText) ")
120+
.font(.subTitle2())
115121

116-
+ Text(" in total")
122+
+ Text(positiveText)
123+
.foregroundColor(successColor)
124+
125+
+ Text(" in total")
126+
}
127+
128+
if !negativeAmounts.isEmpty {
129+
let oweText = (memberBalance.id == preference.user?.id) ? "owe" : "owes"
130+
Text("\(name) \(oweText) ")
131+
.font(.subTitle2())
132+
133+
+ Text(negativeText)
134+
.foregroundColor(errorColor)
135+
136+
+ Text(" in total")
137+
}
117138
}
118139
.lineSpacing(4)
119140
.font(.body1())
@@ -181,7 +202,7 @@ private struct GroupBalanceItemMemberView: View {
181202
Text("\(owedMemberName.capitalized) \(owesText.localized) ")
182203
+ Text(amount.formattedCurrencyWithSign(currency))
183204
.foregroundColor(hasDue ? errorColor : successColor)
184-
+ Text(" in \(currency.localized) to \(owesMemberName)")
205+
+ Text(" to \(owesMemberName)")
185206
}
186207
.font(.body3())
187208
.foregroundStyle(disableText)
@@ -198,7 +219,8 @@ private struct GroupBalanceItemMemberView: View {
198219
},
199220
handleSettleUpTap: {
200221
viewModel.handleSettleUpTap(payerId: hasDue ? id : memberId,
201-
receiverId: hasDue ? memberId : id, amount: amount)
222+
receiverId: hasDue ? memberId : id,
223+
amount: amount, currency: currency)
202224
}
203225
)
204226
}

‎Splito/UI/Home/Groups/Group/Group Options/Balances/GroupBalancesViewModel.swift

+38-32
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ class GroupBalancesViewModel: BaseViewModel, ObservableObject {
2323
@Published var payerId: String?
2424
@Published var receiverId: String?
2525
@Published var amount: Double?
26+
@Published var amountCurrency: String?
2627

2728
private var groupMemberData: [AppUser] = []
2829
let router: Router<AppRoute>
@@ -47,7 +48,7 @@ class GroupBalancesViewModel: BaseViewModel, ObservableObject {
4748
// MARK: - Data Loading
4849
func fetchGroupWithMembers() async {
4950
do {
50-
self.group = try await groupRepository.fetchGroupBy(id: groupId)
51+
group = try await groupRepository.fetchGroupBy(id: groupId)
5152
guard let group else {
5253
viewState = .initial
5354
return
@@ -72,42 +73,46 @@ class GroupBalancesViewModel: BaseViewModel, ObservableObject {
7273

7374
let filteredBalances = group.balances.filter { group.members.contains($0.id) }
7475

75-
let memberBalances = filteredBalances.flatMap { balance in
76-
balance.balanceByCurrency.map { (currency, balanceDetails) in
77-
// Create a combined balance for each currency
78-
MembersCombinedBalance(id: balance.id, totalOwedAmount: [currency: balanceDetails.balance],
79-
balances: [currency: [balance.id: balanceDetails.balance]])
76+
let memberBalances = filteredBalances.map { balance in
77+
var totalOwedAmount: [String: Double] = [:]
78+
var balances: [String: [String: Double]] = [:]
79+
80+
for (currency, balanceDetails) in balance.balanceByCurrency {
81+
totalOwedAmount[currency] = balanceDetails.balance
82+
balances[currency, default: [:]][balance.id] = balanceDetails.balance
8083
}
84+
85+
return MembersCombinedBalance(id: balance.id, totalOwedAmount: totalOwedAmount, balances: balances)
8186
}
8287

8388
// Calculate settlements between group members
8489
let settlements = calculateSettlements(balances: filteredBalances)
8590

86-
// Merge settlements with member balances
87-
let combinedBalances = settlements.reduce(into: memberBalances) { balances, settlement in
88-
// Find sender and receiver indices in the balances list
89-
if let senderIndex = balances.firstIndex(where: { $0.id == settlement.sender }),
90-
let receiverIndex = balances.firstIndex(where: { $0.id == settlement.receiver }) {
91-
92-
// Handle sender's balance update
93-
if balances[senderIndex].balances[settlement.currency] != nil {
94-
// If currency balance exists for sender, subtract the settlement amount
95-
balances[senderIndex].balances[settlement.currency]?[settlement.receiver, default: 0.0] -= settlement.amount
96-
} else {
97-
// If no balance exists, initialize the currency balance for the sender
98-
balances[senderIndex].balances[settlement.currency] = [settlement.receiver: -settlement.amount]
99-
}
100-
101-
// Handle receiver's balance update
102-
if balances[receiverIndex].balances[settlement.currency] != nil {
103-
balances[receiverIndex].balances[settlement.currency]?[settlement.sender, default: 0.0] += settlement.amount
104-
} else {
105-
balances[receiverIndex].balances[settlement.currency] = [settlement.sender: settlement.amount]
106-
}
91+
// Merge settlements into member balances
92+
var combinedBalances = memberBalances
93+
for settlement in settlements {
94+
guard let senderIndex = combinedBalances.firstIndex(where: { $0.id == settlement.sender }),
95+
let receiverIndex = combinedBalances.firstIndex(where: { $0.id == settlement.receiver }) else {
96+
continue
10797
}
98+
99+
combinedBalances[senderIndex].balances[settlement.currency, default: [:]][settlement.receiver] = -settlement.amount
100+
combinedBalances[receiverIndex].balances[settlement.currency, default: [:]][settlement.sender] = settlement.amount
101+
}
102+
103+
// Remove self-referencing balances
104+
combinedBalances = combinedBalances.map { memberBalance in
105+
var filteredBalances: [String: [String: Double]] = [:]
106+
for (currency, balanceDetails) in memberBalance.balances {
107+
filteredBalances[currency] = balanceDetails.filter { $0.key != memberBalance.id }
108+
}
109+
110+
return MembersCombinedBalance(id: memberBalance.id, isExpanded: memberBalance.isExpanded,
111+
totalOwedAmount: memberBalance.totalOwedAmount,
112+
balances: filteredBalances)
108113
}
109114

110-
self.sortMemberBalances(memberBalances: combinedBalances)
115+
sortMemberBalances(memberBalances: combinedBalances)
111116
}
112117

113118
private func sortMemberBalances(memberBalances: [MembersCombinedBalance]) {
@@ -153,10 +158,11 @@ class GroupBalancesViewModel: BaseViewModel, ObservableObject {
153158
}
154159
}
155160

156-
func handleSettleUpTap(payerId: String, receiverId: String, amount: Double) {
161+
func handleSettleUpTap(payerId: String, receiverId: String, amount: Double, currency: String) {
157162
self.payerId = payerId
158163
self.receiverId = receiverId
159164
self.amount = amount
165+
self.amountCurrency = currency
160166
showSettleUpSheet = true
161167
}
162168

@@ -179,10 +185,10 @@ class GroupBalancesViewModel: BaseViewModel, ObservableObject {
179185

180186
// MARK: - Struct to hold combined expense and user owe amount
181187
struct MembersCombinedBalance {
182-
let id: String
188+
let id: String /// member id
183189
var isExpanded: Bool = false
184-
var totalOwedAmount: [String: Double] = [:]
185-
var balances: [String: [String: Double]] = [:]
190+
var totalOwedAmount: [String: Double] = [:] /// [currency: amount]
191+
var balances: [String: [String: Double]] = [:] /// [currency: [memberId: amount]]
186192
}
187193

188194
// MARK: - View States

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/GroupSettleUpRouteView.swift

+6-3
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,12 @@ struct GroupSettleUpRouteView: View {
2929
case .GroupWhoGettingPaidView(let groupId, let payerId):
3030
GroupWhoGettingPaidView(viewModel: GroupWhoGettingPaidViewModel(router: appRoute, groupId: groupId, payerId: payerId))
3131

32-
case .GroupPaymentView(let transactionId, let groupId, let payerId, let receiverId, let amount):
33-
GroupPaymentView(viewModel: GroupPaymentViewModel(router: appRoute, transactionId: transactionId, groupId: groupId,
34-
payerId: payerId, receiverId: receiverId, amount: amount))
32+
case .GroupPaymentView(let transactionId, let groupId, let payerId, let receiverId,
33+
let amount, let currency):
34+
GroupPaymentView(viewModel: GroupPaymentViewModel(router: appRoute, transactionId: transactionId,
35+
groupId: groupId, payerId: payerId,
36+
receiverId: receiverId, amount: amount,
37+
currency: currency))
3538
default:
3639
EmptyRouteView(routeName: self)
3740
}

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/GroupSettleUpView.swift

+9-13
Original file line numberDiff line numberDiff line change
@@ -76,9 +76,6 @@ private struct GroupMembersListView: View {
7676
var body: some View {
7777
VStack(alignment: .leading, spacing: 0) {
7878
let sortedMembers = viewModel.memberOwingAmount
79-
.flatMap { currency, balances in
80-
balances.map { (currency: currency, memberId: $0.key, balance: $0.value) }
81-
}
8279
.sorted { (entry1, entry2) -> Bool in
8380
guard let member1Data = viewModel.getMemberDataBy(id: entry1.memberId),
8481
let member2Data = viewModel.getMemberDataBy(id: entry2.memberId) else {
@@ -91,12 +88,12 @@ private struct GroupMembersListView: View {
9188
return name1 < name2
9289
}
9390

94-
ForEach(sortedMembers, id: \.memberId) { entry in
95-
if let member = viewModel.getMemberDataBy(id: entry.memberId) {
96-
GroupMemberCellView(member: member, amount: entry.balance, currencyCode: entry.currency)
97-
.onTouchGesture {
98-
viewModel.onMemberTap(memberId: entry.memberId, amount: entry.balance)
99-
}
91+
ForEach(sortedMembers, id: \.id) { memberBalance in
92+
if let member = viewModel.getMemberDataBy(id: memberBalance.memberId) {
93+
GroupMemberCellView(member: member, memberBalance: memberBalance)
94+
.onTouchGesture {
95+
viewModel.onMemberTap(memberBalance: memberBalance)
96+
}
10097

10198
Divider()
10299
.frame(height: 1)
@@ -110,8 +107,7 @@ private struct GroupMembersListView: View {
110107
private struct GroupMemberCellView: View {
111108

112109
let member: AppUser
113-
let amount: Double
114-
let currencyCode: String
110+
let memberBalance: CombineMemberOwingAmount
115111

116112
var body: some View {
117113
HStack(alignment: .center, spacing: 16) {
@@ -124,12 +120,12 @@ private struct GroupMemberCellView: View {
124120

125121
Spacer()
126122

127-
let isBorrowed = amount < 0
123+
let isBorrowed = memberBalance.balance < 0
128124
VStack(alignment: .trailing, spacing: 4) {
129125
Text(isBorrowed ? "you owe" : "owes you")
130126
.font(.caption1())
131127

132-
Text(amount.formattedCurrencyWithSign(currencyCode))
128+
Text(abs(memberBalance.balance).formattedCurrencyWithSign(memberBalance.currencyCode))
133129
.font(.body1())
134130
}
135131
.lineLimit(1)

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/GroupSettleUpViewModel.swift

+16-29
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class GroupSettleUpViewModel: BaseViewModel, ObservableObject {
1414
@Inject private var groupRepository: GroupRepository
1515

1616
@Published private(set) var viewState: ViewState = .loading
17-
@Published private(set) var memberOwingAmount: [String: [String: Double]] = [:] /// [currencyCode: [memberId: balance]]
17+
@Published private(set) var memberOwingAmount: [CombineMemberOwingAmount] = []
1818

1919
private var group: Groups?
2020
private var members: [AppUser] = []
@@ -54,7 +54,10 @@ class GroupSettleUpViewModel: BaseViewModel, ObservableObject {
5454
viewState = .initial
5555
return
5656
}
57-
memberOwingAmount = calculateExpensesSimplified(userId: userId, memberBalances: group.balances)
57+
let memberOwingAmount = calculateExpensesSimplified(userId: userId, memberBalances: group.balances)
58+
self.memberOwingAmount = memberOwingAmount.flatMap { (currency, balance) in
59+
balance.map { CombineMemberOwingAmount(memberId: $0.key, balance: $0.value, currencyCode: currency) }
60+
}
5861
}
5962

6063
private func fetchGroupMembers() async {
@@ -76,30 +79,6 @@ class GroupSettleUpViewModel: BaseViewModel, ObservableObject {
7679
}
7780

7881
// MARK: - Helper Methods
79-
func getMembersBalance(memberId: String) -> [String: Double] {
80-
guard let group else {
81-
LogE("GroupSettingViewModel: \(#function) group not found.")
82-
return [:]
83-
}
84-
85-
guard let memberBalance = group.balances.first(where: { $0.id == memberId })?.balanceByCurrency else {
86-
LogE("GroupSettingViewModel: \(#function) Member's balance not found from balances.")
87-
return [:]
88-
}
89-
90-
var filteredBalances: [String: Double] = [:]
91-
for (currency, balanceInfo) in memberBalance {
92-
if balanceInfo.balance == 0 { continue }
93-
filteredBalances[currency] = balanceInfo.balance
94-
}
95-
96-
if filteredBalances.isEmpty { // If no non-zero balances, fallback to original data
97-
return memberBalance.mapValues { $0.balance }
98-
}
99-
100-
return [:]
101-
}
102-
10382
func getMemberDataBy(id: String) -> AppUser? {
10483
members.first(where: { $0.id == id })
10584
}
@@ -109,12 +88,13 @@ class GroupSettleUpViewModel: BaseViewModel, ObservableObject {
10988
router?.push(.GroupWhoIsPayingView(groupId: groupId, isPaymentSettled: false))
11089
}
11190

112-
func onMemberTap(memberId: String, amount: Double) {
91+
func onMemberTap(memberBalance: CombineMemberOwingAmount) {
11392
guard let userId = self.preference.user?.id else { return }
114-
let (payerId, receiverId) = amount < 0 ? (userId, memberId) : (memberId, userId)
93+
let (payerId, receiverId) = memberBalance.balance < 0 ? (userId, memberBalance.memberId) : (memberBalance.memberId, userId)
11594

11695
router?.push(.GroupPaymentView(transactionId: nil, groupId: groupId,
117-
payerId: payerId, receiverId: receiverId, amount: amount))
96+
payerId: payerId, receiverId: receiverId, amount: memberBalance.balance,
97+
currency: memberBalance.currencyCode))
11898
}
11999

120100
// MARK: - Error Handling
@@ -136,3 +116,10 @@ extension GroupSettleUpViewModel {
136116
case somethingWentWrong
137117
}
138118
}
119+
120+
struct CombineMemberOwingAmount: Hashable {
121+
let id = UUID()
122+
let memberId: String
123+
let balance: Double
124+
let currencyCode: String
125+
}

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/Payment/GroupPaymentView.swift

+3
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ struct GroupPaymentView: View {
6363

6464
AddAmountView(amount: $viewModel.amount, showCurrencyPicker: $viewModel.showCurrencyPicker,
6565
selectedCurrencySymbol: viewModel.selectedCurrency.symbol, isAmountFocused: $isAmountFocused)
66+
.onAppear {
67+
print("XXX --- CUrren: \(viewModel.selectedCurrency)")
68+
}
6669

6770
Spacer(minLength: 40)
6871
}

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/Payment/GroupPaymentViewModel.swift

+2-3
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,15 @@ class GroupPaymentViewModel: BaseViewModel, ObservableObject {
5959
}
6060

6161
init(router: Router<AppRoute>, transactionId: String?, groupId: String,
62-
payerId: String, receiverId: String, amount: Double) {
62+
payerId: String, receiverId: String, amount: Double, currency: String) {
6363
self.router = router
6464
self.amount = abs(amount)
6565
self.groupId = groupId
6666
self.payerId = payerId
6767
self.receiverId = receiverId
6868
self.transactionId = transactionId
69-
self.selectedCurrency = Currency.getCurrentLocalCurrency()
69+
self.selectedCurrency = Currency.getCurrencyFromCode(currency)
7070
super.init()
71-
7271
fetchInitialViewData()
7372
}
7473

‎Splito/UI/Home/Groups/Group/Group Options/Settle up/Who Getting Paid/GroupWhoGettingPaidViewModel.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class GroupWhoGettingPaidViewModel: BaseViewModel, ObservableObject {
1919
@Published private(set) var selectedMemberId: String?
2020

2121
private let groupId: String
22+
private var currency: String = "INR"
2223
private let router: Router<AppRoute>?
2324

2425
init(router: Router<AppRoute>? = nil, groupId: String, payerId: String) {
@@ -42,6 +43,7 @@ class GroupWhoGettingPaidViewModel: BaseViewModel, ObservableObject {
4243
viewState = .initial
4344
return
4445
}
46+
self.currency = group.defaultCurrencyCode
4547
self.members = try await groupRepository.fetchMembersBy(memberIds: group.members)
4648
viewState = .initial
4749
LogD("GroupWhoGettingPaidViewModel: \(#function) Group with members fetched successfully.")
@@ -53,7 +55,8 @@ class GroupWhoGettingPaidViewModel: BaseViewModel, ObservableObject {
5355

5456
func onMemberTap(memberId: String) {
5557
selectedMemberId = memberId
56-
router?.push(.GroupPaymentView(transactionId: nil, groupId: groupId, payerId: payerId, receiverId: memberId, amount: 0))
58+
router?.push(.GroupPaymentView(transactionId: nil, groupId: groupId, payerId: payerId,
59+
receiverId: memberId, amount: 0, currency: currency))
5760
}
5861

5962
// MARK: - Error Handling

‎Splito/UI/Home/Groups/Group/Group Options/Settlements/GroupTransactionsRouteView.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ struct GroupTransactionsRouteView: View {
2424
GroupTransactionListView(viewModel: GroupTransactionListViewModel(router: appRoute, groupId: groupId))
2525
case .TransactionDetailView(let transactionId, let groupId):
2626
GroupTransactionDetailView(viewModel: GroupTransactionDetailViewModel(router: appRoute, groupId: groupId, transactionId: transactionId))
27-
case .GroupPaymentView(let transactionId, let groupId, let payerId, let receiverId, let amount):
27+
case .GroupPaymentView(let transactionId, let groupId, let payerId, let receiverId, let amount, let currency):
2828
GroupPaymentView(
2929
viewModel: GroupPaymentViewModel(
3030
router: appRoute, transactionId: transactionId, groupId: groupId,
31-
payerId: payerId, receiverId: receiverId, amount: amount
31+
payerId: payerId, receiverId: receiverId, amount: amount, currency: currency
3232
)
3333
)
3434
default:

‎Splito/UI/Home/Groups/Group/Group Options/Settlements/Transaction Detail/GroupTransactionDetailView.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,8 @@ struct GroupTransactionDetailView: View {
8686
router: viewModel.router, transactionId: viewModel.transactionId,
8787
groupId: viewModel.groupId, payerId: viewModel.transaction?.payerId ?? "",
8888
receiverId: viewModel.transaction?.receiverId ?? "",
89-
amount: viewModel.transaction?.amount ?? 0
89+
amount: viewModel.transaction?.amount ?? 0,
90+
currency: viewModel.amountCurrency
9091
)
9192
)
9293
}

‎Splito/UI/Home/Groups/Group/Group Options/Settlements/Transaction Detail/GroupTransactionDetailViewModel.swift

+4-1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class GroupTransactionDetailViewModel: BaseViewModel, ObservableObject {
3838

3939
let groupId: String
4040
let transactionId: String
41+
var amountCurrency: String
4142

4243
var group: Groups?
4344
let router: Router<AppRoute>
@@ -47,6 +48,7 @@ class GroupTransactionDetailViewModel: BaseViewModel, ObservableObject {
4748
self.router = router
4849
self.groupId = groupId
4950
self.transactionId = transactionId
51+
self.amountCurrency = group?.defaultCurrencyCode ?? "INR"
5052
super.init()
5153

5254
NotificationCenter.default.addObserver(self, selector: #selector(getUpdatedTransaction(notification:)), name: .updateTransaction, object: nil)
@@ -75,7 +77,8 @@ class GroupTransactionDetailViewModel: BaseViewModel, ObservableObject {
7577

7678
private func fetchTransaction() async {
7779
do {
78-
self.transaction = try await transactionRepository.fetchTransactionBy(groupId: groupId, transactionId: transactionId)
80+
transaction = try await transactionRepository.fetchTransactionBy(groupId: groupId, transactionId: transactionId)
81+
amountCurrency = transaction?.currencyCode ?? (group?.defaultCurrencyCode ?? "INR")
7982
await setTransactionUsersData()
8083
LogD("GroupTransactionDetailViewModel: \(#function) Payment fetched successfully.")
8184
} catch {

0 commit comments

Comments
 (0)
Please sign in to comment.