Last active
July 21, 2023 10:40
-
-
Save koolfreak/f582ee14674436468fca80ba9028e9b1 to your computer and use it in GitHub Desktop.
RLMException, reason: 'Object has been deleted or invalidated.'
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
struct HomeUIView: View { | |
@StateObject var transactionModel = TransactionViewModel() | |
@ObservedResults(ExpenseData.self) var expensesList | |
@ObservedResults(ExpenseData.self) var expenseWithActiveCashAdvances | |
@ObservedResults(ExpenseData.self, filter: NSPredicate(format: "txnType == 'income' AND caStatus = 0")) var cashAdvances | |
var body: some View { | |
Vstack { | |
List(expensesList, id: \.uuid) { expense in | |
} | |
} | |
.confirmationDialog("", isPresented: $showDeleteExpenseWarning, actions: { | |
Button("OK"){ | |
deleteTransaction() | |
} | |
}, message: { | |
Text(deleteExpenseWarming).nunito(17, .bold) | |
}) | |
.onAppear { | |
expenseQuery(fromDate: startDate, toDate: endDate) | |
cashAdvanceQuery() | |
} | |
} | |
func expenseQuery(fromDate: Date, toDate: Date) { | |
let filterType = filterByCreatedAt ? 1 : 0 | |
var columnFilter: String = "createdAtInteger" | |
var fromStart = fromDate.startInSeconds() | |
var toEnd = toDate.endInSeconds() | |
if filterType == 0 { | |
columnFilter = "dateTxnNumber" | |
fromStart = fromDate.startInMillis() | |
toEnd = toDate.endInMillis() | |
} | |
$expensesList.filter = NSPredicate(format: "txnType == 'expense' AND \(columnFilter) BETWEEN %@", [fromStart, toEnd]) | |
$expensesList.sortDescriptor = SortDescriptor(keyPath: "createdAtInteger", ascending: false) | |
self.totalExpense = expensesList.reduce(0.0) { $0 + $1.amount }.formatCurrency() | |
} | |
func deleteTransaction() { | |
guard let expense = expToDelete else { return } | |
let _uuid = expense.uuid | |
$expensesList.remove(expense) | |
expenseQuery(fromDate: startDate, toDate: endDate) | |
cashAdvanceQuery() | |
transactionModel.deleteTxnToServer(uuid: _uuid) | |
} | |
func cashAdvanceQuery() { | |
let totalCashAdvances = cashAdvances.reduce(0.0) { $0 + $1.amount } | |
totalCashAdvance = totalCashAdvances.formatCurrency() | |
let activeCashAdvances = cashAdvances.map { $0.uuid } | |
$expenseWithActiveCashAdvances.filter = NSPredicate(format: "caRefTag IN %@", Array(activeCashAdvances)) | |
let totalCashAdvanceInExpenses = expenseWithActiveCashAdvances.reduce(0.0) { $0 + $1.amount } | |
remainingCashAdvance = (totalCashAdvances - totalCashAdvanceInExpenses).formatCurrency() | |
} | |
func globalSearch(term: String) { | |
$expensesList.filter = NSPredicate(format: "merchant CONTAINS[cd] %@ OR caNameTag CONTAINS[cd] %@ OR remarks CONTAINS[cd] %@", term, term, term) | |
$expensesList.sortDescriptor = SortDescriptor(keyPath: "createdAtInteger", ascending: false) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment