diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard index 26db9cf..492ace8 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard +++ b/SynchronyFinancial/SynchronyFinancial WatchKit App/Base.lproj/Interface.storyboard @@ -99,11 +99,13 @@ - + diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountCell.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountCell.swift index 8bba624..55d6587 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountCell.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountCell.swift @@ -11,4 +11,5 @@ import WatchKit class AccountCell: NSObject { @IBOutlet weak var accountName: WKInterfaceLabel! + @IBOutlet weak var last4Label: WKInterfaceLabel! } diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountTableInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountTableInterfaceController.swift index 6f06f1a..72518cd 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountTableInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/AccountTableInterfaceController.swift @@ -48,6 +48,7 @@ class AccountTableInterfaceController: WKInterfaceController { for index in 0.. Void) { + var bankIds: [BankAcct] = [] + Alamofire.request(Defaults.FETCH_BANKS_URL, method: .post, parameters: Defaults.headerForMulti, encoding: JSONEncoding.default, headers: Defaults.authHeader).responseJSON { payload in + switch payload.result { + case .success(let value): + let dict = JSON(value).dictionaryValue + //print(dict) + guard dict["status"]?.dictionaryValue["response_code"]?.string == "0" else {return } + //"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)) + } + } + completion(bankIds, nil) + case .failure(let error): + NSLog("Error: %s", error.localizedDescription) + completion([], error) + } + } + } + + static func cancelPayment(accountAlias: String, confirmationNum: String, paymentId: Int, completion: @escaping (String, Error?) -> Void){ + + var paymentHeader = Defaults.headerForCancelPmt + 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): + let dict = JSON(value).dictionaryValue + guard dict["status"]?.dictionaryValue["response_code"]?.string == "0" else { return } + if let paymentCancelNum = dict["cancellation_confirmation_number"]?.stringValue { + completion(paymentCancelNum, nil) + } + case .failure(let error): + NSLog("Error: \(error.localizedDescription)") + } + } + } static func submitPayment(for alias: String, type: String, amount: Double, bankID: String, completion: @escaping (String, String, Error?) -> Void) { var paymentHeader = Defaults.headerForPmt diff --git a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift index 5f3e709..93689b4 100644 --- a/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift +++ b/SynchronyFinancial/SynchronyFinancial WatchKit Extension/TransactionsInterfaceController.swift @@ -44,7 +44,8 @@ class TransactionsInterfaceController: WKInterfaceController { if let row = transactionsTable.rowController(at: index) as? TransactionCell { row.transactionLabel.setText(transactions[index].merchantID) row.valueLabel.setText(String(format: "$%.2f", transactions[index].amount)) - row.valueLabel.setTextColor(transactions[index].type == .purchase ? UIColor.red : UIColor.green) + row.valueLabel.setTextColor(transactions[index].isPending == true ? UIColor.yellow : + (transactions[index].type == .purchase ? UIColor.red : UIColor.green)) } } } diff --git a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj index 8aa6464..ceb6fe6 100644 --- a/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj +++ b/SynchronyFinancial/SynchronyFinancial.xcodeproj/project.pbxproj @@ -8,6 +8,8 @@ /* Begin PBXBuildFile section */ 1123372E223ABD6400B70925 /* FetchData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1123372D223ABD6400B70925 /* FetchData.swift */; }; + 11E6ADB92253FA050009922E /* BankAcct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E6ADB82253FA050009922E /* BankAcct.swift */; }; + 11E6ADBA225401DB0009922E /* BankAcct.swift in Sources */ = {isa = PBXBuildFile; fileRef = 11E6ADB82253FA050009922E /* BankAcct.swift */; }; 281283568A34D3C5D9C7B383 /* libPods-SynchronyFinancial WatchKit Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CAA6D46F907ADAABF49FD409 /* libPods-SynchronyFinancial WatchKit Extension.a */; }; 481864A9224802BB0059CF7A /* PaymentDetailInterfaceController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 481864A7224802BB0059CF7A /* PaymentDetailInterfaceController.swift */; }; 48DA0058221D12E70081A500 /* AccountCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48DA0057221D12E70081A500 /* AccountCell.swift */; }; @@ -85,6 +87,7 @@ /* Begin PBXFileReference section */ 1123372D223ABD6400B70925 /* FetchData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchData.swift; sourceTree = ""; }; + 11E6ADB82253FA050009922E /* BankAcct.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BankAcct.swift; sourceTree = ""; }; 1BEF4B8BF190D117CA6104E5 /* Pods-SynchronyFinancial WatchKit App.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial WatchKit App.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial WatchKit App/Pods-SynchronyFinancial WatchKit App.release.xcconfig"; sourceTree = ""; }; 250BDAF6AD4E1CCA82995E30 /* Pods-SynchronyFinancial WatchKit Extension.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial WatchKit Extension.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial WatchKit Extension/Pods-SynchronyFinancial WatchKit Extension.release.xcconfig"; sourceTree = ""; }; 396A16E056D05DEC937A07DA /* Pods-SynchronyFinancial.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-SynchronyFinancial.release.xcconfig"; path = "Pods/Target Support Files/Pods-SynchronyFinancial/Pods-SynchronyFinancial.release.xcconfig"; sourceTree = ""; }; @@ -178,8 +181,9 @@ children = ( 48F2430B2214CBF700B9C894 /* Account.swift */, 48F2430C2214CBF700B9C894 /* Transaction.swift */, - 67E17B85223812C2008871FE /* Defaults.swift */, 67BAC268219E254700713FEF /* AppDelegate.swift */, + 11E6ADB82253FA050009922E /* BankAcct.swift */, + 67E17B85223812C2008871FE /* Defaults.swift */, 67BAC26C219E254700713FEF /* Main.storyboard */, 67BAC26F219E254800713FEF /* Assets.xcassets */, 67BAC271219E254800713FEF /* LaunchScreen.storyboard */, @@ -469,6 +473,8 @@ 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 */, ); @@ -478,6 +484,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 11E6ADBA225401DB0009922E /* BankAcct.swift in Sources */, 678C3885223098C400FEAAF6 /* Account.swift in Sources */, 67BAC28E219E254900713FEF /* ExtensionDelegate.swift in Sources */, 674BD1542239A39D0076AFD6 /* PayBillInterfaceController.swift in Sources */, diff --git a/SynchronyFinancial/SynchronyFinancial/Account.swift b/SynchronyFinancial/SynchronyFinancial/Account.swift index 21875b7..f44c8a6 100644 --- a/SynchronyFinancial/SynchronyFinancial/Account.swift +++ b/SynchronyFinancial/SynchronyFinancial/Account.swift @@ -10,6 +10,7 @@ import Foundation class Account: NSObject { var accountAlias: String var creditLimit: Double + var last4: String //var transactions: [Transaction] var paymentDueDate: Date //var cycleEndDate: Date @@ -20,9 +21,10 @@ class Account: NSObject { var statementBal: Double var accountName: String - init(accountAlias: String, creditLimit: Double, paymentDueDate: Date, curBalance: Double, availCredit: Double, minPayDue: Double, statementBal: Double, accountName: String) { + init(_ accountAlias: String, _ creditLimit: Double, _ last4: String, _ paymentDueDate: Date, _ curBalance: Double, _ availCredit: Double, _ minPayDue: Double, _ statementBal: Double, _ accountName: String) { self.accountAlias = accountAlias self.creditLimit = creditLimit + self.last4 = last4 //self.transactions = transactions //self.balance = transactions.map { $0.amount }.reduce(0.0, +) self.paymentDueDate = paymentDueDate diff --git a/SynchronyFinancial/SynchronyFinancial/BankAcct.swift b/SynchronyFinancial/SynchronyFinancial/BankAcct.swift new file mode 100644 index 0000000..ea16335 --- /dev/null +++ b/SynchronyFinancial/SynchronyFinancial/BankAcct.swift @@ -0,0 +1,23 @@ +// +// Banks.swift +// SynchronyFinancial +// +// Created by Rahul Kantesaria on 4/2/19. +// Copyright © 2019 Alan Maynard. All rights reserved. +// + +import Foundation + +public enum AccountType: Int { + case checkings = 0 + case savings = 1 +} + +class BankAcct: NSObject { + var bankAcctId: String + var acctType: AccountType + init(bankAcctId: String, acctType: AccountType) { + self.bankAcctId = bankAcctId + self.acctType = acctType + } +} diff --git a/SynchronyFinancial/SynchronyFinancial/Transaction.swift b/SynchronyFinancial/SynchronyFinancial/Transaction.swift index 7975d90..71c58b0 100644 --- a/SynchronyFinancial/SynchronyFinancial/Transaction.swift +++ b/SynchronyFinancial/SynchronyFinancial/Transaction.swift @@ -17,11 +17,20 @@ class Transaction: NSObject { var amount: Double var merchantID: String var date: Date + var confirmationNum: String + var paymentId: Int + var isPending: Bool + var isModifiable: Bool - init(type: TransactionType, amount: Double, merchantID: String, date: Date) { + init(type: TransactionType, amount: Double, merchantID: String, date: Date, + confirmationNum: String? = nil, paymentId: Int? = nil, isPending: Bool? = nil, isModifiable: Bool? = nil) { self.type = type self.amount = amount self.merchantID = merchantID self.date = date + self.confirmationNum = confirmationNum ?? "" + self.paymentId = paymentId ?? 0 + self.isPending = isPending ?? false + self.isModifiable = isModifiable ?? false } }