diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 2d1440e..59e3649 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -1,12 +1,12 @@ - + - - + + @@ -201,13 +201,16 @@ - - - + + + + + + + + + + + + + + + + + + + + + + +
+
+ + + +
+
+ +
@@ -253,7 +287,7 @@ - + @@ -282,7 +316,7 @@ - + @@ -322,7 +356,7 @@ - + @@ -341,10 +375,10 @@ - +
- +
diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift new file mode 100644 index 0000000..cedf8bb --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/BankAcctCell.swift @@ -0,0 +1,15 @@ +// +// BankAcctCell.swift +// SynchronyFinancial WatchKit Extension +// +// Created by Rahul Kantesaria on 4/5/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import Foundation +import WatchKit + +class BankAcctCell: NSObject { + @IBOutlet weak var bankNameLabel: WKInterfaceLabel! + @IBOutlet weak var last4Label: WKInterfaceLabel! +} diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift index 5426ea7..b7cf020 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift @@ -97,7 +97,6 @@ class FetchData { let modifiable = $0["is_payment_modifiable"].string { let type: TransactionType = $0["payment_amount_type"].stringValue == "" ? .purchase : .reimbursement let isModifiable: Bool = modifiable == "Y" ? true : false - transactions.append(Transaction(type: type, amount: amount, merchantID: desc, date: date, confirmationNum: confirmationNum, paymentId: paymentId, isPending: true, isModifiable: isModifiable)) } } @@ -131,11 +130,10 @@ class FetchData { //"fetch_bank_account_details" dict["fetch_bank_account_details"]?.arrayValue.forEach { if let bankId = $0["bank_account_id"].string, - let accttype: AccountType = $0["bank_account_type"].stringValue == - "C" ? .checkings : .savings { - //print(bankId) - //print(accttype) - bankIds.append(BankAcct(bankAcctId: bankId, acctType: accttype)) + let bankName = $0["bank_name"].string, + let last4Acct = $0["last4_bank_acct_number"].string, + let accttype: AccountType = AccountType(rawValue: $0["bank_account_type"].stringValue) { + bankIds.append(BankAcct(bankAcctId: bankId, acctType: accttype, bankName: bankName, last4Acct: last4Acct)) } } completion(bankIds, nil) @@ -151,7 +149,6 @@ class FetchData { paymentHeader["account_alias"] = accountAlias paymentHeader["payment_confirmation_number"] = confirmationNum paymentHeader["payment_id"] = paymentId - Alamofire.request(Defaults.CANCEL_PAYMENT_URL, method: .post, parameters: paymentHeader, encoding: JSONEncoding.default, headers: Defaults.authHeader).responseJSON { payload in switch payload.result { case .success(let value): diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift index 99ab3b1..8d4c9be 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentDetailInterfaceController.swift @@ -15,22 +15,23 @@ class PaymentDetailInterfaceController: WKInterfaceController { var dictForPayment: [String: String] = [:] var paymentButtonArmed: Bool = false var paymentAmount: Double = 0.0 - - @IBOutlet weak var contentGroup: WKInterfaceGroup! + var dictForBankAcct: [String: [BankAcct]] = [:] + //var bankID: String = "" @IBOutlet weak var activityIndicator: WKInterfaceImage! @IBOutlet weak var activityIndicatorLabel: WKInterfaceLabel! + @IBOutlet weak var contentGroup: WKInterfaceGroup! @IBOutlet weak var detailButton: WKInterfaceButton! @IBOutlet weak var amount: WKInterfaceLabel! @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 + 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 } self.paymentAmount = amount @@ -50,12 +51,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 - FetchData.submitPayment(for: alias, type: type, amount: self.paymentAmount, bankID: "9999") { confirmationNum, paymentID, error in + guard let bankacct = UserDefaults.standard.getDefaultBankAccount() else { + NSLog("Error retrieving Payment Option") + return + } + 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]) return } + self.dictForPayment.updateValue(confirmationNum, forKey: "payment_confirmation_number") self.dictForPayment.updateValue(paymentID, forKey: "payment_id") self.activityIndicator.stopAnimatingAsIndicator() @@ -75,13 +81,49 @@ 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 + } + 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() { // 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] { + 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() { // 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) + paymentButton.setHidden(hide) + payFrom.setHidden(hide) + separate.setHidden(hide) + 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 new file mode 100644 index 0000000..5f74e48 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/PaymentOptionsInterfaceController.swift @@ -0,0 +1,56 @@ +// +// 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 PaymentOptionsInterfaceController: WKInterfaceController { + @IBOutlet weak var bankAcctTable: WKInterfaceTable! + var bankAccts: [BankAcct] = [] + var dictForDefault: [String: String] = [:] + override func awake(withContext context: Any?) { + super.awake(withContext: context) + //grab the potential list of bank accounts from the payment detail controller + guard let data = context as? [String: [BankAcct]], let accts = data["paymentOptions"] else { + NSLog("Error receiving context containing bank accounts in PaymentOptionsInterfaceController") + return + } + 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 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 + } +}