From 63bb56b4c1891219af07e2feb8a6029860c97ce4 Mon Sep 17 00:00:00 2001 From: Rahul Kantesaria Date: Fri, 5 Apr 2019 14:15:18 -0400 Subject: [PATCH 01/19] Created PaymentOptions interface and controller for selecting payment type. Fetching bank account info and populating table with it. Updated getbankacctinfo request to grab the bank name and last 4 digits of bank account. --- .../BankAcctCell.swift | 9 ++++++ .../PaymentOptionsInterfaceController.swift | 30 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift create mode 100644 SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift new file mode 100644 index 0000000..d434d68 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift @@ -0,0 +1,9 @@ +// +// BankAcctCell.swift +// SynchronyFinancial WatchKit Extension +// +// Created by Rahul Kantesaria on 4/5/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import Foundation diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift new file mode 100644 index 0000000..88836b1 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift @@ -0,0 +1,30 @@ +// +// BankSelectionInterfaceController.swift +// SynchronyFinancial WatchKit Extension +// +// Created by Rahul Kantesaria on 4/5/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import WatchKit +import Foundation + +class BankSelectionInterfaceController: WKInterfaceController { + + + override func awake(withContext context: Any?) { + + } + + override func willActivate() { + // This method is called when watch view controller is about to be visible to user + super.willActivate() + } + + override func didDeactivate() { + // This method is called when watch view controller is no longer visible + super.didDeactivate() + } + + +} From 6ffbf6456ca0715548b40cb81826f650e6077328 Mon Sep 17 00:00:00 2001 From: Rahul Kantesaria Date: Fri, 5 Apr 2019 14:17:02 -0400 Subject: [PATCH 02/19] reated PaymentOptions interface and controller for selecting payment type. Fetching bank account info and populating table with it. Updated getbankacctinfo request to grab the bank name and last 4 digits of bank account. --- .../Base.lproj/Interface.storyboard | 40 +++++++++++++++++-- .../BankAcctCell.swift | 7 ++++ .../FetchData.swift | 8 ++-- .../PaymentDetailInterfaceController.swift | 14 +++++++ .../PaymentOptionsInterfaceController.swift | 27 ++++++++++--- .../project.pbxproj | 10 ++++- .../SynchronyFinancial/BankAcct.swift | 6 ++- 7 files changed, 96 insertions(+), 16 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 037b541..6683c36 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -1,12 +1,12 @@ - + - - + + @@ -202,8 +202,11 @@ - - + + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift index 3f6f92d..cedf8bb 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift @@ -10,6 +10,6 @@ import Foundation import WatchKit class BankAcctCell: NSObject { - @IBOutlet weak var BankNameLabel: WKInterfaceLabel! - @IBOutlet weak var Last4Label: WKInterfaceLabel! + @IBOutlet weak var bankNameLabel: WKInterfaceLabel! + @IBOutlet weak var last4Label: WKInterfaceLabel! } diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index c683c6f..2b3d33b 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -16,6 +16,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { var paymentButtonArmed: Bool = false var paymentAmount: Double = 0.0 var dictForBankAcct: [String: [BankAcct]] = [:] + var bankID: String = "" @IBOutlet weak var activityIndicator: WKInterfaceImage! @IBOutlet weak var activityIndicatorLabel: WKInterfaceLabel! @IBOutlet weak var contentGroup: WKInterfaceGroup! @@ -24,25 +25,17 @@ class PaymentDetailInterfaceController: WKInterfaceController { @IBOutlet weak var paymentButton: WKInterfaceButton! @IBOutlet weak var payFrom: WKInterfaceLabel! @IBOutlet weak var separate: WKInterfaceSeparator! + override func awake(withContext context: Any?) { - configureInterfaceObjects(true) - activityIndicator.configureForActivityIndicator() super.awake(withContext: context) + guard let data = context as? [String: Any], let acct = data["acct"] as? Account, let amount = data["payment_amount"] as? Double else { NSLog("Error getting account object and payment amount") return } - FetchData.getBankInfo { accts, error in guard error == nil else { - NSLog("Error retrieving payment methods for account in paymentDetailInterfaceController.") - return - } - self.dictForBankAcct.updateValue(accts, forKey: "paymentOptions") - self.configureInterfaceObjects(false) - //self.detailButton.setTitle("Hello") - self.activityIndicator.stopAnimatingAsIndicator() - } + self.paymentAmount = amount self.selectedAccount = acct @@ -61,7 +54,11 @@ class PaymentDetailInterfaceController: WKInterfaceController { let type: PaymentType = self.paymentAmount == self.selectedAccount?.curBalance ? .currentBal : .minimumDue // process this payment using default bank account (9999) until ability to change account is implemented - FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: "9999") { confirmationNum, paymentID, error in + if let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String] { + self.bankID = bankacct["bankID"] ?? "9999" + } + + FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: self.bankID) { confirmationNum, paymentID, error in guard error == nil else { let dismiss = WKAlertAction(title: "Dismiss", style: .cancel, handler: {}) self.presentAlert(withTitle: "Error", message: "We were unable to process your payment at this time. Please try again later.", preferredStyle: .alert, actions: [dismiss]) @@ -87,7 +84,19 @@ class PaymentDetailInterfaceController: WKInterfaceController { } @IBAction func bankAccountsTapped() { - self.pushController(withName: "PaymentOptions", context: self.dictForBankAcct) + configureInterfaceObjects(true) + activityIndicator.configureForActivityIndicator() + FetchData.getBankInfo { accts, error in guard error == nil else { + NSLog("Error retrieving payment methods for account in paymentDetailInterfaceController.") + return + } + self.dictForBankAcct.updateValue(accts, forKey: "paymentOptions") + self.configureInterfaceObjects(false) + //self.detailButton.setTitle("Hello") + self.activityIndicator.stopAnimatingAsIndicator() + self.pushController(withName: "PaymentOptions", context: self.dictForBankAcct) + } + } override func willActivate() { @@ -109,14 +118,8 @@ class PaymentDetailInterfaceController: WKInterfaceController { paymentButton.setHidden(hide) payFrom.setHidden(hide) separate.setHidden(hide) - contentGroup.setHidden(hide) - /*if(!hide){ - if let p1 = self.dictForBankAcct["paymentOptions"] { - let x = p1[0] - UserDefaults.standard.set(x, forKey: "default_bank_acct") - print("yes") - detailButton.setTitle(p1[0].bankName) - } - }*/ + contentGroup.setHidden(hide) + activityIndicatorLabel.setVerticalAlignment(.center) + activityIndicatorLabel.setHidden(!hide) } } diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift index c2b99eb..ee6af02 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift @@ -36,19 +36,19 @@ class PaymentOptionsInterfaceController: WKInterfaceController { bankAcctTable.setNumberOfRows(bankAccts.count, withRowType: "bankAcctCell") for index in 0.. BankAcct? { - if let bank = UserDefaults.standard.value(forKey: "default_bank_acct") as? BankAcct { - return bank - } - - return nil - } -} diff --git a/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift b/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift new file mode 100644 index 0000000..6e63dcf --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift @@ -0,0 +1,22 @@ +// +// UserDefaults+Extensions.swift +// SynchronyFinancial +// +// Created by Rahul Kantesaria on 4/8/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import Foundation + +extension UserDefaults { + func setDefaultBankAccount(_ acct: BankAcct) { + UserDefaults.standard.set(acct, forKey: "default_bank_acct") + } + + func getDefaultBankAccount() -> BankAcct? { + if let bank = UserDefaults.standard.value(forKey: "default_bank_acct") as? BankAcct { + return bank + } + return nil + } +} From cc16cdfc3216c3380a283ab61fb308b81ffed5f8 Mon Sep 17 00:00:00 2001 From: Rahul Kantesaria Date: Mon, 8 Apr 2019 14:11:50 -0400 Subject: [PATCH 07/19] hotfix for passing default bank acct id --- .../PaymentDetailInterfaceController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index 2b3d33b..fafb04f 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -55,7 +55,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { // process this payment using default bank account (9999) until ability to change account is implemented if let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String] { - self.bankID = bankacct["bankID"] ?? "9999" + self.bankID = bankacct["bankAcctId"] ?? "9999" } FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: self.bankID) { confirmationNum, paymentID, error in From 143ffe2ffd5075b655855473386b24441393204d Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Mon, 8 Apr 2019 19:57:20 -0400 Subject: [PATCH 08/19] SWE-24 change context type to support passing account - we require the `accountAlias` of the current account in order to cancel a payment - changed the type of dictionary passed through Transactions functionality to support getting the account to transaction details, so we can ultimate use to cancel a pending payment --- .../AccountDetailsInterfaceController.swift | 5 ++++- .../TransactionDetailsInterfaceController.swift | 5 ++++- .../TransactionsInterfaceController.swift | 14 ++++++++++---- 3 files changed, 18 insertions(+), 6 deletions(-) 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/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index 492d71b..96995fb 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -14,6 +14,7 @@ class TransactionDetailsInterfaceController: WKInterfaceController { @IBOutlet var dateLabel: WKInterfaceLabel! @IBOutlet var amountLabel: WKInterfaceLabel! @IBOutlet var cancelButton: WKInterfaceButton! + var account: Account? override func awake(withContext context: Any?) { super.awake(withContext: context) @@ -21,12 +22,14 @@ 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") + account = acct transactionName.setText(merchant) dateLabel.setText("Date: \(DateFormatter.localizedString(from: date, dateStyle: .short, timeStyle: .none))") amountLabel.setText(String(format: "Amount: $%.2f", amount)) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift index b23c115..b070e2f 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,11 +40,13 @@ 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] + "amount": transaction.amount, + "acct": acct] presentController(withName: "TransactionDetails", context: context) } From f48164ba9191ac010bcab6d01ed1395d4343fb23 Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Mon, 8 Apr 2019 20:14:41 -0400 Subject: [PATCH 09/19] SWE-24 New class to display payment cancellation --- .../Base.lproj/Interface.storyboard | 7 +++++ .../CancellationInterfaceController.swift | 31 +++++++++++++++++++ .../project.pbxproj | 5 ++- 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 49f67ae..72fd8a4 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -311,6 +311,13 @@ + + + + + + + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift new file mode 100644 index 0000000..d49c2a6 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift @@ -0,0 +1,31 @@ +// +// 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 { + + override func awake(withContext context: Any?) { + super.awake(withContext: context) + + // Configure interface objects here. + } + + override func willActivate() { + // This method is called when watch view controller is about to be visible to user + super.willActivate() + } + + override func didDeactivate() { + // This method is called when watch view controller is no longer visible + super.didDeactivate() + } + +} diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj index 4662621..642df94 100644 --- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj +++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj @@ -30,6 +30,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 */; }; @@ -107,6 +108,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 = ""; }; @@ -207,6 +209,7 @@ 67BAC28A219E254900713FEF /* SynchronyFinancial WatchKit Extension */ = { isa = PBXGroup; children = ( + 679A9068225C1B0E00247F39 /* CancellationInterfaceController.swift */, 678C62B9224ECDFD0007AD53 /* PaymentResultInterfaceController.swift */, 67293CF022542F15009E0E7A /* TransactionDetailsInterfaceController.swift */, 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */, @@ -476,7 +479,6 @@ 674BD1532239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */, 48F2430D2214CBF700B9C894 /* Account.swift in Sources */, 678C388622309F7D00FEAAF6 /* AccountCell.swift in Sources */, - 481864A8224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */, 11E6ADB92253FA050009922E /* BankAcct.swift in Sources */, 48F2430E2214CBF700B9C894 /* Transaction.swift in Sources */, 67BAC269219E254700713FEF /* AppDelegate.swift in Sources */, @@ -497,6 +499,7 @@ 67E17B87223812C2008871FE /* Defaults.swift in Sources */, 67293CF122542F15009E0E7A /* TransactionDetailsInterfaceController.swift in Sources */, 1123372E223ABD6400B70925 /* FetchData.swift in Sources */, + 679A9069225C1B0E00247F39 /* CancellationInterfaceController.swift in Sources */, 48F243072214C98600B9C894 /* AccountTableInterfaceController.swift in Sources */, 676392B62242A3F800740A8C /* TransactionCell.swift in Sources */, 48F2430F2214CC2200B9C894 /* Transaction.swift in Sources */, From 7ed54df793a551ee712c30bc476947c05bcf6070 Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Mon, 8 Apr 2019 20:29:17 -0400 Subject: [PATCH 10/19] SWE-24 Configure cancellation success screen --- .../Base.lproj/Interface.storyboard | 14 +++++++++++++- .../CancellationInterfaceController.swift | 13 +++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 72fd8a4..81d6131 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -314,7 +314,19 @@ - + + + + + + + + + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift index d49c2a6..465753a 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift @@ -9,13 +9,18 @@ import WatchKit import Foundation - class CancellationInterfaceController: WKInterfaceController { - + @IBOutlet var confirmationLabel: WKInterfaceLabel! + override func awake(withContext context: Any?) { super.awake(withContext: context) - - // Configure interface objects here. + + guard let data = context as? [String: String], let confirmation = data["cancellation_confirm"] else { + NSLog("Error receiving context for payment cancellation") + return + } + + confirmationLabel.setText(confirmation) } override func willActivate() { From 71e5caf742fc09bd2343321a82ad4e135f809c5d Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Mon, 8 Apr 2019 20:40:50 -0400 Subject: [PATCH 11/19] SWE-24 keep transaction variable - we need to have the transaction locally so we can pass its members to our API to cancel payment - added outlet for cancel button --- .../TransactionDetailsInterfaceController.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index 96995fb..626ab56 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -14,7 +14,9 @@ class TransactionDetailsInterfaceController: WKInterfaceController { @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) @@ -29,6 +31,7 @@ class TransactionDetailsInterfaceController: WKInterfaceController { } setTitle("Dismiss") + self.transaction = transaction account = acct transactionName.setText(merchant) dateLabel.setText("Date: \(DateFormatter.localizedString(from: date, dateStyle: .short, timeStyle: .none))") @@ -36,6 +39,8 @@ class TransactionDetailsInterfaceController: WKInterfaceController { cancelButton.setHidden(!transaction.isModifiable) } + @IBAction func cancelButtonTapped() { + } override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() From 3ef5a67f88d66718c8099399f2819bb45e657649 Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Mon, 8 Apr 2019 20:49:43 -0400 Subject: [PATCH 12/19] SWE-24 add activity indicator and embed screen contents in group --- .../Base.lproj/Interface.storyboard | 31 +++++++++++++------ ...ransactionDetailsInterfaceController.swift | 3 ++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 81d6131..bcf2421 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -289,27 +289,40 @@ - - - + + + + - + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index 626ab56..45123aa 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -10,6 +10,9 @@ import WatchKit import Foundation class TransactionDetailsInterfaceController: WKInterfaceController { + @IBOutlet var contentGroup: WKInterfaceGroup! + @IBOutlet var activityIndicator: WKInterfaceImage! + @IBOutlet var activityIndicatorLabel: WKInterfaceLabel! @IBOutlet var transactionName: WKInterfaceLabel! @IBOutlet var dateLabel: WKInterfaceLabel! @IBOutlet var amountLabel: WKInterfaceLabel! From f111f7a80a11c842b1c7b2bd56a3846318285e1d Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Tue, 9 Apr 2019 11:48:45 -0400 Subject: [PATCH 13/19] SWE-24 change presentation of transaction details to push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - this will help us provide a better user experience and aesthetic in regards to showing “cancel payment” flow --- .../TransactionDetailsInterfaceController.swift | 1 - .../TransactionsInterfaceController.swift | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index 45123aa..d08e4fb 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -33,7 +33,6 @@ class TransactionDetailsInterfaceController: WKInterfaceController { return } - setTitle("Dismiss") self.transaction = transaction account = acct transactionName.setText(merchant) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift index b070e2f..6b77d9d 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift @@ -47,8 +47,7 @@ class TransactionsInterfaceController: WKInterfaceController { "date": transaction.date, "amount": transaction.amount, "acct": acct] - - presentController(withName: "TransactionDetails", context: context) + pushController(withName: "TransactionDetails", context: context) } private func configureRows() { From b8da22e1192772fe57395937123b214f29e322ae Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Tue, 9 Apr 2019 12:15:35 -0400 Subject: [PATCH 14/19] SWE-24 make call to web service to cancel payment --- .../Base.lproj/Interface.storyboard | 8 +++---- ...ransactionDetailsInterfaceController.swift | 22 ++++++++++++++++++- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index bcf2421..2d1440e 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -289,8 +289,8 @@ - - - + + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index d08e4fb..37713e0 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -10,13 +10,14 @@ import WatchKit import Foundation class TransactionDetailsInterfaceController: WKInterfaceController { - @IBOutlet var contentGroup: WKInterfaceGroup! @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? @@ -42,7 +43,26 @@ class TransactionDetailsInterfaceController: WKInterfaceController { } @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 { 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() From dbf152b30890f37560310959c3832df75481e6be Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Tue, 9 Apr 2019 12:16:25 -0400 Subject: [PATCH 15/19] SWE-24 set title in cancellation screen - also remove boilerplate template code --- .../CancellationInterfaceController.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift index 465753a..f904d37 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/CancellationInterfaceController.swift @@ -11,7 +11,7 @@ import Foundation class CancellationInterfaceController: WKInterfaceController { @IBOutlet var confirmationLabel: WKInterfaceLabel! - + override func awake(withContext context: Any?) { super.awake(withContext: context) @@ -20,17 +20,15 @@ class CancellationInterfaceController: WKInterfaceController { return } + setTitle("Done") confirmationLabel.setText(confirmation) } override func willActivate() { - // This method is called when watch view controller is about to be visible to user super.willActivate() } override func didDeactivate() { - // This method is called when watch view controller is no longer visible super.didDeactivate() } - } From 017b7827f5f6a9499e2a1cb4fdaf71bea7dd1e28 Mon Sep 17 00:00:00 2001 From: Alan Maynard Date: Tue, 9 Apr 2019 12:20:40 -0400 Subject: [PATCH 16/19] SWE-24 add some basic error handling for the user --- .../TransactionDetailsInterfaceController.swift | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift index 37713e0..62698e0 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionDetailsInterfaceController.swift @@ -53,7 +53,11 @@ class TransactionDetailsInterfaceController: WKInterfaceController { contentGroup.setHidden(true) FetchData.cancelPayment(accountAlias: acct.accountAlias, confirmationNum: t.confirmationNum, paymentId: t.paymentId) { conf, error in - guard error == nil else { return } + 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) From 3594b682beae50e74873218fb79e9f0720322f36 Mon Sep 17 00:00:00 2001 From: Rahul Kantesaria Date: Tue, 9 Apr 2019 13:38:24 -0400 Subject: [PATCH 17/19] SWE-13 PR Requested changes --- .../FetchData.swift | 3 +-- .../PaymentDetailInterfaceController.swift | 20 +++++++++---------- .../PaymentOptionsInterfaceController.swift | 12 ++++++----- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift index 6d0016b..b7cf020 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift @@ -132,8 +132,7 @@ class FetchData { if let bankId = $0["bank_account_id"].string, let bankName = $0["bank_name"].string, let last4Acct = $0["last4_bank_acct_number"].string, - let accttype: AccountType = $0["bank_account_type"].stringValue == - "C" ? .checkings : .savings { + let accttype: AccountType = AccountType(rawValue: $0["bank_account_type"].stringValue) { bankIds.append(BankAcct(bankAcctId: bankId, acctType: accttype, bankName: bankName, last4Acct: last4Acct)) } } diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index fafb04f..216b508 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -16,7 +16,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { var paymentButtonArmed: Bool = false var paymentAmount: Double = 0.0 var dictForBankAcct: [String: [BankAcct]] = [:] - var bankID: String = "" + //var bankID: String = "" @IBOutlet weak var activityIndicator: WKInterfaceImage! @IBOutlet weak var activityIndicatorLabel: WKInterfaceLabel! @IBOutlet weak var contentGroup: WKInterfaceGroup! @@ -35,8 +35,6 @@ class PaymentDetailInterfaceController: WKInterfaceController { return } - - self.paymentAmount = amount self.selectedAccount = acct paymentButton.setTitle(String(format: "Pay $%.2f", amount)) @@ -54,16 +52,17 @@ class PaymentDetailInterfaceController: WKInterfaceController { let type: PaymentType = self.paymentAmount == self.selectedAccount?.curBalance ? .currentBal : .minimumDue // process this payment using default bank account (9999) until ability to change account is implemented - if let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String] { - self.bankID = bankacct["bankAcctId"] ?? "9999" + guard let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String], let bankID = bankacct["bankAcctId"] else{ + NSLog("Error retrieving Payment Option") + return } - - FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: self.bankID) { confirmationNum, paymentID, error in + FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: bankID) { confirmationNum, paymentID, error in guard error == nil else { let dismiss = WKAlertAction(title: "Dismiss", style: .cancel, handler: {}) self.presentAlert(withTitle: "Error", message: "We were unable to process your payment at this time. Please try again later.", preferredStyle: .alert, actions: [dismiss]) return } + self.dictForPayment.updateValue(confirmationNum, forKey: "payment_confirmation_number") self.dictForPayment.updateValue(paymentID, forKey: "payment_id") self.activityIndicator.stopAnimatingAsIndicator() @@ -86,9 +85,10 @@ class PaymentDetailInterfaceController: WKInterfaceController { @IBAction func bankAccountsTapped() { configureInterfaceObjects(true) activityIndicator.configureForActivityIndicator() - FetchData.getBankInfo { accts, error in guard error == nil else { - NSLog("Error retrieving payment methods for account in paymentDetailInterfaceController.") - return + FetchData.getBankInfo { accts, error in + guard error == nil else { + NSLog("Error retrieving payment methods for account in paymentDetailInterfaceController.") + return } self.dictForBankAcct.updateValue(accts, forKey: "paymentOptions") self.configureInterfaceObjects(false) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift index ee6af02..87ec47b 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift @@ -10,7 +10,6 @@ import WatchKit import Foundation class PaymentOptionsInterfaceController: WKInterfaceController { - @IBOutlet weak var bankAcctTable: WKInterfaceTable! var bankAccts: [BankAcct] = [] var dictForDefault: [String: String] = [:] @@ -24,14 +23,17 @@ class PaymentOptionsInterfaceController: WKInterfaceController { bankAccts = accts configureRows() } + override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() } + override func didDeactivate() { // This method is called when watch view controller is no longer visible super.didDeactivate() } + private func configureRows() { bankAcctTable.setNumberOfRows(bankAccts.count, withRowType: "bankAcctCell") for index in 0.. Date: Tue, 9 Apr 2019 15:53:03 -0400 Subject: [PATCH 18/19] SWE-13 [swiftlint] resolve swiftlint warnings --- .../PaymentDetailInterfaceController.swift | 17 ++++++++--------- .../PaymentOptionsInterfaceController.swift | 8 ++++---- .../TransactionsInterfaceController.swift | 2 +- .../SynchronyFinancial/BankAcct.swift | 1 - .../UserDefaults+Extensions.swift | 2 +- 5 files changed, 14 insertions(+), 16 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index 216b508..a429c0f 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -25,11 +25,10 @@ class PaymentDetailInterfaceController: WKInterfaceController { @IBOutlet weak var paymentButton: WKInterfaceButton! @IBOutlet weak var payFrom: WKInterfaceLabel! @IBOutlet weak var separate: WKInterfaceSeparator! - override func awake(withContext context: Any?) { super.awake(withContext: context) - + guard let data = context as? [String: Any], let acct = data["acct"] as? Account, let amount = data["payment_amount"] as? Double else { NSLog("Error getting account object and payment amount") return @@ -52,9 +51,10 @@ class PaymentDetailInterfaceController: WKInterfaceController { let type: PaymentType = self.paymentAmount == self.selectedAccount?.curBalance ? .currentBal : .minimumDue // process this payment using default bank account (9999) until ability to change account is implemented - guard let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String], let bankID = bankacct["bankAcctId"] else{ - NSLog("Error retrieving Payment Option") - return + guard let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String], + let bankID = bankacct["bankAcctId"] else { + NSLog("Error retrieving Payment Option") + return } FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: bankID) { confirmationNum, paymentID, error in guard error == nil else { @@ -62,7 +62,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { self.presentAlert(withTitle: "Error", message: "We were unable to process your payment at this time. Please try again later.", preferredStyle: .alert, actions: [dismiss]) return } - + self.dictForPayment.updateValue(confirmationNum, forKey: "payment_confirmation_number") self.dictForPayment.updateValue(paymentID, forKey: "payment_id") self.activityIndicator.stopAnimatingAsIndicator() @@ -81,7 +81,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { } } } - + @IBAction func bankAccountsTapped() { configureInterfaceObjects(true) activityIndicator.configureForActivityIndicator() @@ -96,7 +96,6 @@ class PaymentDetailInterfaceController: WKInterfaceController { self.activityIndicator.stopAnimatingAsIndicator() self.pushController(withName: "PaymentOptions", context: self.dictForBankAcct) } - } override func willActivate() { @@ -111,7 +110,7 @@ class PaymentDetailInterfaceController: WKInterfaceController { // This method is called when watch view controller is no longer visible super.didDeactivate() } - + private func configureInterfaceObjects(_ hide: Bool) { detailButton.setHidden(hide) amount.setHidden(hide) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift index 87ec47b..5f74e48 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift @@ -23,17 +23,17 @@ class PaymentOptionsInterfaceController: WKInterfaceController { bankAccts = accts configureRows() } - + override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() } - + override func didDeactivate() { // This method is called when watch view controller is no longer visible super.didDeactivate() } - + private func configureRows() { bankAcctTable.setNumberOfRows(bankAccts.count, withRowType: "bankAcctCell") for index in 0.. BankAcct? { if let bank = UserDefaults.standard.value(forKey: "default_bank_acct") as? BankAcct { return bank From d60bd62a24c3ffccd38ffd971695aa909ccc1c33 Mon Sep 17 00:00:00 2001 From: Rahul Kantesaria Date: Wed, 10 Apr 2019 14:11:31 -0400 Subject: [PATCH 19/19] SWE-13 Integration of UserDefaults+Extension as the getter for bankAcctInfo from UserDefaults in updating the selected bank account label as well as passing bankId in submit payment --- .../Base.lproj/Interface.storyboard | 10 +++++----- .../PaymentDetailInterfaceController.swift | 17 +++++++++++------ .../project.pbxproj | 4 ++-- .../UserDefaults+Extensions.swift | 9 +++++++-- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index c076878..59e3649 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -267,7 +267,7 @@ - + @@ -287,7 +287,7 @@ - + @@ -316,7 +316,7 @@ - + @@ -356,7 +356,7 @@ - + @@ -375,7 +375,7 @@ - + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index a429c0f..8d4c9be 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -51,12 +51,11 @@ class PaymentDetailInterfaceController: WKInterfaceController { let type: PaymentType = self.paymentAmount == self.selectedAccount?.curBalance ? .currentBal : .minimumDue // process this payment using default bank account (9999) until ability to change account is implemented - guard let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String], - let bankID = bankacct["bankAcctId"] else { - NSLog("Error retrieving Payment Option") - return + guard let bankacct = UserDefaults.standard.getDefaultBankAccount() else { + NSLog("Error retrieving Payment Option") + return } - FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: bankID) { confirmationNum, paymentID, error in + FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: bankacct.bankAcctId) { confirmationNum, paymentID, error in guard error == nil else { let dismiss = WKAlertAction(title: "Dismiss", style: .cancel, handler: {}) self.presentAlert(withTitle: "Error", message: "We were unable to process your payment at this time. Please try again later.", preferredStyle: .alert, actions: [dismiss]) @@ -101,9 +100,15 @@ class PaymentDetailInterfaceController: WKInterfaceController { override func willActivate() { // This method is called when watch view controller is about to be visible to user super.willActivate() - if let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String] { + /*if let bankacct = UserDefaults.standard.dictionary(forKey: "default_bank_acct") as? [String: String] { detailButton.setTitle(bankacct["bankName"]) + }*/ + //let userDefaults = UserDefaults.standard + guard let bankacct = UserDefaults.standard.getDefaultBankAccount() else { + NSLog("Error recieving default bank account in Payment Details Controller") + return } + detailButton.setTitle(bankacct.bankName) } override func didDeactivate() { diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj index 76e8ade..d8888b9 100644 --- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj +++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj @@ -222,6 +222,7 @@ 67293CF022542F15009E0E7A /* TransactionDetailsInterfaceController.swift */, 674BD1522239A39D0076AFD6 /* PayBillInterfaceController.swift */, 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */, + 112969412257B8920082AAC5 /* PaymentOptionsInterfaceController.swift */, 676392B322429DC800740A8C /* TransactionsInterfaceController.swift */, 673F396C21A644460051469E /* MainMenuInterfaceController.swift */, 67228CD7224D6E2700CA29E4 /* WKInterfaceImage+Extensions.swift */, @@ -231,10 +232,9 @@ 67BAC291219E254900713FEF /* Assets.xcassets */, 48DA0057221D12E70081A500 /* AccountCell.swift */, 676392B52242A3F800740A8C /* TransactionCell.swift */, + 112B56502257C3D9003E9C78 /* BankAcctCell.swift */, 67BAC293219E254900713FEF /* Info.plist */, 1123372D223ABD6400B70925 /* FetchData.swift */, - 112969412257B8920082AAC5 /* PaymentOptionsInterfaceController.swift */, - 112B56502257C3D9003E9C78 /* BankAcctCell.swift */, ); path = "SynchronyFinancial WatchKit Extension"; sourceTree = ""; diff --git a/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift b/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift index 1442999..5bd14ae 100644 --- a/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift +++ b/SynchronyFinancial/SynchronyFinancial/UserDefaults+Extensions.swift @@ -14,8 +14,13 @@ extension UserDefaults { } func getDefaultBankAccount() -> BankAcct? { - if let bank = UserDefaults.standard.value(forKey: "default_bank_acct") as? BankAcct { - return bank + if let bankDict = UserDefaults.standard.value(forKey: "default_bank_acct") as? [String: String], + let bankAcctId = bankDict["bankAcctId"], + let acctTypeRaw: String = bankDict["acctType"], + let bankName = bankDict["bankName"], + let last4Acct = bankDict["last4Acct"], + let acctType: AccountType = AccountType(rawValue: acctTypeRaw) { + return BankAcct(bankAcctId: bankAcctId, acctType: acctType, bankName: bankName, last4Acct: last4Acct) } return nil }