diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard
index 4b0c66c..c076878 100644
--- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard
+++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard
@@ -323,27 +323,59 @@
-
-
-
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift
index f7e28bd..fe30f0b 100644
--- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift
+++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountDetailsInterfaceController.swift
@@ -12,7 +12,7 @@ import Foundation
class AccountDetailsInterfaceController: WKInterfaceController {
var selectedAccount: Account?
var dictForAcct: [String: Account] = [:]
- var transactionDict: [String: [Transaction]] = [:]
+ var transactionDict: [String: Any] = [:]
@IBOutlet var loadingLabel: WKInterfaceLabel!
@IBOutlet var activityIndicator: WKInterfaceImage!
@@ -41,6 +41,9 @@ class AccountDetailsInterfaceController: WKInterfaceController {
return
}
+ if let acct = self.selectedAccount {
+ self.transactionDict.updateValue(acct, forKey: "acct")
+ }
self.transactionDict.updateValue(transactions, forKey: "transactions")
self.pushController(withName: "Transactions", context: self.transactionDict)
self.configureInterfaceObjects(false)
diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift
new file mode 100644
index 0000000..f904d37
--- /dev/null
+++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift
@@ -0,0 +1,34 @@
+//
+// CancellationInterfaceController.swift
+// SynchronyFinancial WatchKit Extension
+//
+// Created by Alan Maynard on 4/8/19.
+// Copyright © 2019 Alan Maynard. All rights reserved.
+//
+
+import WatchKit
+import Foundation
+
+class CancellationInterfaceController: WKInterfaceController {
+ @IBOutlet var confirmationLabel: WKInterfaceLabel!
+
+ override func awake(withContext context: Any?) {
+ super.awake(withContext: context)
+
+ guard let data = context as? [String: String], let confirmation = data["cancellation_confirm"] else {
+ NSLog("Error receiving context for payment cancellation")
+ return
+ }
+
+ setTitle("Done")
+ confirmationLabel.setText(confirmation)
+ }
+
+ override func willActivate() {
+ super.willActivate()
+ }
+
+ override func didDeactivate() {
+ super.didDeactivate()
+ }
+}
diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift
index 492d71b..62698e0 100644
--- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift
+++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift
@@ -10,10 +10,17 @@ import WatchKit
import Foundation
class TransactionDetailsInterfaceController: WKInterfaceController {
+ @IBOutlet var activityIndicator: WKInterfaceImage!
+ @IBOutlet var activityIndicatorLabel: WKInterfaceLabel!
+ @IBOutlet weak var contentGroup: WKInterfaceGroup!
@IBOutlet var transactionName: WKInterfaceLabel!
@IBOutlet var dateLabel: WKInterfaceLabel!
@IBOutlet var amountLabel: WKInterfaceLabel!
@IBOutlet var cancelButton: WKInterfaceButton!
+
+ var transaction: Transaction?
+ var account: Account?
+
override func awake(withContext context: Any?) {
super.awake(withContext: context)
@@ -21,18 +28,45 @@ class TransactionDetailsInterfaceController: WKInterfaceController {
let transaction = data["transaction"] as? Transaction,
let merchant = data["merchant"] as? String,
let date = data["date"] as? Date,
- let amount = data["amount"] as? Double else {
+ let amount = data["amount"] as? Double,
+ let acct = data["acct"] as? Account else {
NSLog("Error receiving context in TransactionDetails.")
return
}
- setTitle("Dismiss")
+ self.transaction = transaction
+ account = acct
transactionName.setText(merchant)
dateLabel.setText("Date: \(DateFormatter.localizedString(from: date, dateStyle: .short, timeStyle: .none))")
amountLabel.setText(String(format: "Amount: $%.2f", amount))
cancelButton.setHidden(!transaction.isModifiable)
}
+ @IBAction func cancelButtonTapped() {
+ guard let t = transaction, let acct = account else {
+ NSLog("Error: no values for transaction or account.")
+ return
+ }
+
+ activityIndicator.configureForActivityIndicator()
+ activityIndicatorLabel.setHidden(false)
+ contentGroup.setHidden(true)
+
+ FetchData.cancelPayment(accountAlias: acct.accountAlias, confirmationNum: t.confirmationNum, paymentId: t.paymentId) { conf, error in
+ guard error == nil else {
+ self.presentAlert(withTitle: "Error", message: "We were unable to process your cancellation at this time. Please try again later.", preferredStyle: .alert, actions: [WKAlertAction(title: "Dismiss", style: .default, handler:{})])
+ return
+ }
+
+ self.activityIndicatorLabel.setHidden(true)
+ self.activityIndicator.stopAnimating()
+ self.contentGroup.setHidden(false)
+ let context: [String: String] = ["cancellation_confirm": conf]
+ self.presentController(withName: "Cancellation", context: context)
+ self.popToRootController()
+ }
+ }
+
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift
index 8a6241b..6b77d9d 100644
--- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift
+++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift
@@ -12,15 +12,19 @@ import Foundation
class TransactionsInterfaceController: WKInterfaceController {
@IBOutlet weak var transactionsTable: WKInterfaceTable!
var transactions: [Transaction] = []
+ var account: Account?
override func awake(withContext context: Any?) {
super.awake(withContext: context)
- guard let data = context as? [String: [Transaction]], let trans = data["transactions"] else {
- NSLog("Error receiving context containing transactions in TransactionsInterfaceController")
- return
+ guard let data = context as? [String: Any],
+ let trans = data["transactions"] as? [Transaction],
+ let acct = data["acct"] as? Account else {
+ NSLog("Error receiving context containing transactions in TransactionsInterfaceController")
+ return
}
+ account = acct
transactions = trans
configureRows()
}
@@ -36,13 +40,14 @@ class TransactionsInterfaceController: WKInterfaceController {
}
override func table(_ table: WKInterfaceTable, didSelectRowAt rowIndex: Int) {
+ guard let acct = account else { return }
let transaction = transactions[rowIndex]
let context: [String: Any] = ["transaction": transaction,
"merchant": transaction.merchantID,
"date": transaction.date,
- "amount": transaction.amount]
-
- presentController(withName: "TransactionDetails", context: context)
+ "amount": transaction.amount,
+ "acct": acct]
+ pushController(withName: "TransactionDetails", context: context)
}
private func configureRows() {
diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj
index eecc94f..76e8ade 100644
--- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj
+++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj
@@ -34,6 +34,7 @@
678C3885223098C400FEAAF6 /* Account.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48F2430B2214CBF700B9C894 /* Account.swift */; };
678C388622309F7D00FEAAF6 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48DA0057221D12E70081A500 /* AccountCell.swift */; };
678C62BA224ECDFD0007AD53 /* PaymentResultInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 678C62B9224ECDFD0007AD53 /* PaymentResultInterfaceController.swift */; };
+ 679A9069225C1B0E00247F39 /* CancellationInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 679A9068225C1B0E00247F39 /* CancellationInterfaceController.swift */; };
67BAC269219E254700713FEF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67BAC268219E254700713FEF /* AppDelegate.swift */; };
67BAC26E219E254700713FEF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 67BAC26C219E254700713FEF /* Main.storyboard */; };
67BAC270219E254800713FEF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 67BAC26F219E254800713FEF /* Assets.xcassets */; };
@@ -114,6 +115,7 @@
676392B52242A3F800740A8C /* TransactionCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TransactionCell.swift; sourceTree = ""; };
678C38832230950100FEAAF6 /* AccountDetailsInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountDetailsInterfaceController.swift; sourceTree = ""; };
678C62B9224ECDFD0007AD53 /* PaymentResultInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PaymentResultInterfaceController.swift; sourceTree = ""; };
+ 679A9068225C1B0E00247F39 /* CancellationInterfaceController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CancellationInterfaceController.swift; sourceTree = ""; };
67BAC265219E254700713FEF /* SynchronyFinancial.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SynchronyFinancial.app; sourceTree = BUILT_PRODUCTS_DIR; };
67BAC268219E254700713FEF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
67BAC26D219E254700713FEF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
@@ -215,6 +217,7 @@
67BAC28A219E254900713FEF /* SynchronyFinancial WatchKit Extension */ = {
isa = PBXGroup;
children = (
+ 679A9068225C1B0E00247F39 /* CancellationInterfaceController.swift */,
678C62B9224ECDFD0007AD53 /* PaymentResultInterfaceController.swift */,
67293CF022542F15009E0E7A /* TransactionDetailsInterfaceController.swift */,
674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */,
@@ -508,6 +511,7 @@
67E17B87223812C2008871FE /* Defaults.swift in Sources */,
67293CF122542F15009E0E7A /* TransactionDetailsInterfaceController.swift in Sources */,
1123372E223ABD6400B70925 /* FetchData.swift in Sources */,
+ 679A9069225C1B0E00247F39 /* CancellationInterfaceController.swift in Sources */,
112969422257B8920082AAC5 /* PaymentOptionsInterfaceController.swift in Sources */,
48F243072214C98600B9C894 /* AccountTableInterfaceController.swift in Sources */,
676392B62242A3F800740A8C /* TransactionCell.swift in Sources */,