Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
SynchronyFinancialWatchApp/SynchronyFinancial/SynchronyFinancial WatchKit Extension/FetchData.swift
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
175 lines (161 sloc)
9.27 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// FetchData.swift | |
// SynchronyFinancial WatchKit Extension | |
// | |
// Created by Rahul Kantesaria on 3/14/19. | |
// Copyright © 2019 Alan Maynard. All rights reserved. | |
// | |
import Foundation | |
import Alamofire | |
import SwiftyJSON | |
class FetchData { | |
static func attemptLogin(completion: @escaping (Bool, Error?) -> Void) { | |
Alamofire.request(Defaults.LOGIN_URL, method: .post, parameters: Defaults.headerForLogin, encoding: JSONEncoding.default).responseJSON { payload in | |
switch payload.result { | |
case .success(let value): | |
let dict = JSON(value).dictionaryValue | |
guard dict["status"]?.dictionaryValue["response_code"]?.string == "0" else { | |
completion(false, NSError()) | |
return | |
} | |
if let token = dict["access_token"]?.string { | |
// now we should save our token somewhere safe (UserDefaults) | |
UserDefaults.standard.set(token, forKey: "access_token") | |
completion(true, nil) | |
} | |
case .failure(let error): | |
NSLog("Error: %s", error.localizedDescription) | |
completion(false, error) | |
} | |
} | |
} | |
static func getAccountInfo(completion: @escaping ([Account], Error?) -> Void) { | |
var accountList: [Account] = [] | |
Alamofire.request(Defaults.MULTI_ACCT_URL, method: .post, parameters: Defaults.headerForMulti, encoding: JSONEncoding.default, headers: Defaults.authHeader).responseJSON { payload in | |
switch payload.result { | |
case .success(let value): | |
let json = JSON(value) | |
let dict = json.dictionaryValue | |
guard dict["status"]?.dictionaryValue["response_code"]?.string == "0" else { return } | |
//print(json) | |
let formatter = DateFormatter() | |
formatter.locale = Locale.current | |
formatter.dateFormat = "yyyyMMdd" | |
if let accounts = dict["account_number_list"]?.arrayValue { | |
accounts.forEach { | |
if let accountAlias = $0.dictionaryValue["account_alias"]?.string, | |
let last4 = $0["last4_acct_number"].string, | |
let creditLimitString = $0.dictionaryValue["credit_limit"]?.string, | |
let creditLimit = Double(creditLimitString), | |
let payDueDateString = $0.dictionaryValue["next_payment_due_date"]?.string, | |
let paymentDueDate = formatter.date(from: payDueDateString), | |
let curBalString = $0.dictionaryValue["current_balance"]?.string, | |
let currentBalance = Double(curBalString), | |
let availCreditString = $0.dictionaryValue["available_credit"]?.string, | |
let availableCredit = Double(availCreditString), | |
let minPayDueString = $0.dictionaryValue["minimum_payment_due"]?.string, | |
let minPaymentDue = Double(minPayDueString), | |
let statementBalString = $0.dictionaryValue["statement_bal"]?.string, | |
let statementBalance = Double(statementBalString), | |
let accountName = $0.dictionaryValue["cc_program_name"]?.string { | |
let inAccount = Account(accountAlias, creditLimit, last4, paymentDueDate, currentBalance, availableCredit, minPaymentDue, statementBalance, accountName) | |
accountList.append(inAccount) | |
} | |
} | |
} | |
completion(accountList, nil) | |
case .failure(let error): | |
NSLog("Error: %s", error.localizedDescription) | |
completion([], error) | |
} | |
} | |
} | |
static func fetchTransactionsFor(accountAlias: String, completion: @escaping ([Transaction], Error?) -> Void) { | |
// get the transaction header and set value for account alias to the selected account | |
var header = Defaults.headerForTransaction | |
header["account_alias"] = accountAlias | |
var transactions: [Transaction] = [] | |
let formatter = DateFormatter() | |
formatter.locale = Locale.current | |
formatter.dateFormat = "yyyyMMdd" | |
Alamofire.request(Defaults.TRANS_HISTORY_URL, method: .post, parameters: header, 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 } | |
//let's first parse the pending transactions | |
dict["pending_transaction_list"]?.arrayValue.forEach { | |
if let desc = $0["description"].string, | |
let date = formatter.date(from: $0["transaction_date"].stringValue), | |
let amountString = $0["transaction_amount"].string, | |
let amount = Double(amountString), | |
let confirmationNum = $0["payment_confirmation_number"].string, | |
let paymentIdString = $0["payment_id"].string, | |
let paymentId = Int(paymentIdString), | |
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)) | |
} | |
} | |
// let's parse just processed transactions now | |
dict["processed_transaction_list"]?.arrayValue.forEach { | |
if let desc = $0["description"].string, | |
let date = formatter.date(from: $0["transaction_date"].stringValue), | |
let amountString = $0["transaction_amount"].string, | |
let amount = Double(amountString) { | |
let type: TransactionType = $0["payment_amount_type"].stringValue == "" ? .purchase : .reimbursement | |
transactions.append(Transaction(type: type, amount: amount, merchantID: desc, date: date, isPending: false)) | |
} | |
} | |
completion(transactions, nil) | |
case .failure(let error): | |
NSLog("Error: %s", error.localizedDescription) | |
completion([], error) | |
} | |
} | |
} | |
static func getBankInfo(completion: @escaping ([BankAcct], Error?) -> 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)") | |
} | |
} | |
} | |
} |