forked from ahussain33/App-Accelerator-2023-Fall
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTransactionViewModel (Updated)
96 lines (77 loc) · 3.28 KB
/
TransactionViewModel (Updated)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import Foundation
import Firebase
class TransactionViewModel: ObservableObject {
@Published var transactionsByRoom: [String: [Transaction]] = [:]
private var timer: Timer?
init() {
fetchData()
//this calls the data every second
timer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: true) { [weak self] _ in
self?.fetchData()
}
}
deinit {
//closes timer
timer?.invalidate()
}
func fetchData() {
let db = Firestore.firestore()
let transactionsCollection = db.collection("Transactions")
transactionsCollection.getDocuments { [weak self] (querySnapshot, error) in
guard let self = self else { return }
if let error = error {
print("Error getting documents: \(error)")
} else {
var transactionsByRoom: [String: [Transaction]] = [:]
for document in querySnapshot!.documents {
let patientRequest = document["PatientRequest"] as? String ?? ""
let roomNumber = document["RoomNumber"] as? String ?? ""
// Check
if document["DateCompleted"] == nil {
let transaction = Transaction(patientRequest: patientRequest, roomNumber: roomNumber)
if var roomTransactions = transactionsByRoom[roomNumber] {
roomTransactions.append(transaction)
transactionsByRoom[roomNumber] = roomTransactions
} else {
transactionsByRoom[roomNumber] = [transaction]
}
}
}
DispatchQueue.main.async {
self.transactionsByRoom = transactionsByRoom
}
}
}
}
func refreshData() {
fetchData()
}
func deleteTransaction(_ transaction: Transaction, inRoom roomNumber: String) {
if var roomTransactions = transactionsByRoom[roomNumber],
let index = roomTransactions.firstIndex(of: transaction) {
roomTransactions.remove(at: index)
transactionsByRoom[roomNumber] = roomTransactions
updateFirestoreDocument(transaction, inRoom: roomNumber)
}
}
private func updateFirestoreDocument(_ transaction: Transaction, inRoom roomNumber: String) {
let db = Firestore.firestore()
let transactionsCollection = db.collection("Transactions")
transactionsCollection
.whereField("PatientRequest", isEqualTo: transaction.patientRequest)
.whereField("RoomNumber", isEqualTo: roomNumber)
.getDocuments { (querySnapshot, error) in
if let error = error {
print("Error updating documents: \(error)")
} else {
for document in querySnapshot!.documents {
if document.data()["DateCompleted"] == nil {
// Timestamp Nurse
let timestamp = FieldValue.serverTimestamp()
document.reference.updateData(["DateCompleted": timestamp])
}
}
}
}
}
}