Browse Source

aded network layer to fetch wallet statement

pull/1/head
gme_2 6 years ago
parent
commit
d4de8e2a96
  1. 16
      GMERemittance.xcodeproj/project.pbxproj
  2. 28
      GMERemittance/Extension/DateFormatterExtension.swift
  3. 27
      GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewController.swift
  4. 19
      GMERemittance/Module/WalletStatement/Application Logic/Interactor/WalletStatementInteractor.swift
  5. 5
      GMERemittance/Module/WalletStatement/Application Logic/Interactor/WalletStatementInteractorIO.swift
  6. 25
      GMERemittance/Module/WalletStatement/Application Logic/Service/WalletStatementServiceType.swift
  7. 4
      GMERemittance/Module/WalletStatement/Module Interface/WalletStatementModuleInterface.swift
  8. 28
      GMERemittance/Module/WalletStatement/User Interface/Presenter/WalletStatementPresenter.swift
  9. 23
      GMERemittance/Module/WalletStatement/User Interface/View/Cell/WalletStatementTableViewCell.swift
  10. 135
      GMERemittance/Module/WalletStatement/User Interface/View/WalletStatementViewController.swift
  11. 4
      GMERemittance/Module/WalletStatement/User Interface/View/WalletStatementViewInterface.swift

16
GMERemittance.xcodeproj/project.pbxproj

@ -467,6 +467,8 @@
D96BD11E216479E200DFE7D8 /* WalletStatementViewInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96BD113216479E200DFE7D8 /* WalletStatementViewInterface.swift */; };
D96BD11F216479E200DFE7D8 /* WalletStatementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96BD114216479E200DFE7D8 /* WalletStatementViewController.swift */; };
D96BD1212164828D00DFE7D8 /* WalletStatement.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96BD1202164828D00DFE7D8 /* WalletStatement.swift */; };
D96BD1232164870C00DFE7D8 /* DateFormatterExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96BD1222164870C00DFE7D8 /* DateFormatterExtension.swift */; };
D96BD1262164875800DFE7D8 /* WalletStatementTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = D96BD1252164875800DFE7D8 /* WalletStatementTableViewCell.swift */; };
D9768C88213BAE92009E01BC /* User.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9768C87213BAE92009E01BC /* User.swift */; };
D977859D215DC55F00754079 /* TransactionHistoryModuleInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977858A215DC55E00754079 /* TransactionHistoryModuleInterface.swift */; };
D977859E215DC55F00754079 /* TransactionHistoryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = D977858D215DC55E00754079 /* TransactionHistoryService.swift */; };
@ -1029,6 +1031,8 @@
D96BD113216479E200DFE7D8 /* WalletStatementViewInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletStatementViewInterface.swift; sourceTree = "<group>"; };
D96BD114216479E200DFE7D8 /* WalletStatementViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WalletStatementViewController.swift; sourceTree = "<group>"; };
D96BD1202164828D00DFE7D8 /* WalletStatement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStatement.swift; sourceTree = "<group>"; };
D96BD1222164870C00DFE7D8 /* DateFormatterExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DateFormatterExtension.swift; sourceTree = "<group>"; };
D96BD1252164875800DFE7D8 /* WalletStatementTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WalletStatementTableViewCell.swift; sourceTree = "<group>"; };
D9768C87213BAE92009E01BC /* User.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = User.swift; sourceTree = "<group>"; };
D977858A215DC55E00754079 /* TransactionHistoryModuleInterface.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryModuleInterface.swift; sourceTree = "<group>"; };
D977858D215DC55E00754079 /* TransactionHistoryService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TransactionHistoryService.swift; sourceTree = "<group>"; };
@ -1232,6 +1236,7 @@
D96848C6212D3A7400EF12B1 /* DataRequestExtension.swift */,
D96848C8212D3AEB00EF12B1 /* ExtensionJSON.swift */,
D95B7042213F9A2C0053CC3D /* CALayerExtension.swift */,
D96BD1222164870C00DFE7D8 /* DateFormatterExtension.swift */,
);
path = Extension;
sourceTree = "<group>";
@ -3476,6 +3481,7 @@
D96BD110216479E200DFE7D8 /* View */ = {
isa = PBXGroup;
children = (
D96BD1242164871F00DFE7D8 /* Cell */,
D96BD111216479E200DFE7D8 /* ViewModels */,
D96BD112216479E200DFE7D8 /* WalletStatement.storyboard */,
D96BD113216479E200DFE7D8 /* WalletStatementViewInterface.swift */,
@ -3491,6 +3497,14 @@
path = ViewModels;
sourceTree = "<group>";
};
D96BD1242164871F00DFE7D8 /* Cell */ = {
isa = PBXGroup;
children = (
D96BD1252164875800DFE7D8 /* WalletStatementTableViewCell.swift */,
);
path = Cell;
sourceTree = "<group>";
};
D9778588215DC55E00754079 /* TransactionHistory */ = {
isa = PBXGroup;
children = (
@ -4561,6 +4575,7 @@
D92B80252140C3CB00A25B26 /* MainModuleInterface.swift in Sources */,
D937037121490C3800D93077 /* KycForm2ModuleInterface.swift in Sources */,
D946719521426DFB003924DB /* LoginModuleInterface.swift in Sources */,
D96BD1262164875800DFE7D8 /* WalletStatementTableViewCell.swift in Sources */,
D96BD11A216479E200DFE7D8 /* WalletStatementPresenter.swift in Sources */,
A255A907206A14220002905D /* SSBadgeButton.swift in Sources */,
D922D9232134DCF000D43053 /* EditReciepientWireframe.swift in Sources */,
@ -4633,6 +4648,7 @@
D9B7ADFD2130073A009B0564 /* WireframeInput.swift in Sources */,
044124C61FEBA1BD00FD4240 /* ResetPasswordViewModel.swift in Sources */,
5565FF341FE29791002934E9 /* TableViewCell.swift in Sources */,
D96BD1232164870C00DFE7D8 /* DateFormatterExtension.swift in Sources */,
0477E2A7204941FE00B02377 /* MoneyRequestViewController.swift in Sources */,
D96A4FD421460B4A00CFD507 /* SplashScreenModuleInterface.swift in Sources */,
D9B7ADF72130048E009B0564 /* ExchangeRatesWireframe.swift in Sources */,

28
GMERemittance/Extension/DateFormatterExtension.swift

@ -0,0 +1,28 @@
//
// DateFormatterExtension.swift
// GMERemittance
//
// Created by gme_2 on 03/10/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import Foundation
extension DateFormatter {
static func toDate(dateString: String, format: String = AppConstants.dateFormat) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_Us")
return dateFormatter.date(from: dateString)
}
static func toString(date: Date, format: String = AppConstants.humanReadableDateFormat) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_US")
return dateFormatter.string(from: date)
}
}

27
GMERemittance/Module/TransactionHistory/User Interface/View/TransactionHistoryViewController.swift

@ -73,9 +73,9 @@ class TransactionHistoryViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.setupNormalNavigation()
self.setup()
presenter?.viewIsReady()
setupNavigation()
}
override func viewWillAppear(_ animated: Bool) {
@ -152,13 +152,7 @@ class TransactionHistoryViewController: UIViewController {
self.tableView.dataSource = self
}
private func setupNavigation() {
var backBtnImage = #imageLiteral(resourceName: "backIconBlack")
backBtnImage = backBtnImage.withRenderingMode(UIImageRenderingMode.alwaysOriginal)
self.navigationController!.navigationBar.backIndicatorImage = backBtnImage
self.navigationController!.navigationBar.backIndicatorTransitionMaskImage = backBtnImage
self.navigationController?.navigationBar.barTintColor = UIColor.white
}
}
// MARK: TransactionHistoryViewInterface
@ -201,20 +195,3 @@ extension TransactionHistoryViewController: UITableViewDataSource {
}
}
extension DateFormatter {
static func toDate(dateString: String, format: String = AppConstants.dateFormat) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_Us")
return dateFormatter.date(from: dateString)
}
static func toString(date: Date, format: String = AppConstants.humanReadableDateFormat) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = format
// dateFormatter.locale = Locale(identifier: "en_US")
return dateFormatter.string(from: date)
}
}

19
GMERemittance/Module/WalletStatement/Application Logic/Interactor/WalletStatementInteractor.swift

@ -27,5 +27,24 @@ class WalletStatementInteractor {
// MARK: WalletStatement interactor input interface
extension WalletStatementInteractor: WalletStatementInteractorInput {
func fetchWalletSatement(fromDate: String?, toDate: String?) {
let userName = Utility.getMyUserName()
var param: [String: String] = [:]
if let from = fromDate {
param["FromDate"] = from
}
if let to = toDate {
param["ToDate"] = to
}
let parameters = (param.isEmpty ?? true) ? nil : param
self.service.fetchWalletStatement(user: userName, param: parameters, success: { (model) in
self.output?.show(models: model)
}) { (error) in
self.output?.show(error: error)
}
}
}

5
GMERemittance/Module/WalletStatement/Application Logic/Interactor/WalletStatementInteractorIO.swift

@ -7,9 +7,10 @@
//
protocol WalletStatementInteractorInput: class {
func fetchWalletSatement(fromDate: String?, toDate: String?)
}
protocol WalletStatementInteractorOutput: class {
func show(error: Error)
func show(models: [WalletStatement])
}

25
GMERemittance/Module/WalletStatement/Application Logic/Service/WalletStatementServiceType.swift

@ -8,6 +8,29 @@
import Foundation
protocol WalletStatementServiceType: class {
protocol WalletStatementServiceType: class, FetchWalletStatementService {
}
protocol FetchWalletStatementService: ApiServiceType {
func fetchWalletStatement(user: String, param: [String: String]?, success: @escaping (([WalletStatement]) -> ()), failure: @escaping ((Error) -> ()))
}
extension FetchWalletStatementService {
func fetchWalletStatement(user: String, param: [String: String]?, success: @escaping (([WalletStatement]) -> ()), failure: @escaping ((Error) -> ())) {
let url = baseUrl + "mobile/walletstatement/" + "\(user)"
self.auth.request(method: .post, url: url, params: param, success: { (response: WalletStatementContainer) in
if (response.errorCode ?? "") == "1" {
let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.message ?? ""])
failure(error)
}else {
let model = response.data
success(model ?? [])
}
}) { (error) in
failure(error)
}
}
}

4
GMERemittance/Module/WalletStatement/Module Interface/WalletStatementModuleInterface.swift

@ -7,5 +7,7 @@
//
protocol WalletStatementModuleInterface: class {
func viewIsReady()
func filterWalletInStatements()
func fetchWalletSatement(fromDate: String?, toDate: String?)
}

28
GMERemittance/Module/WalletStatement/User Interface/Presenter/WalletStatementPresenter.swift

@ -12,6 +12,14 @@ class WalletStatementPresenter {
// MARK: Properties
var models: [WalletStatement] = []
var filteredModels: [WalletStatement] = [] {
didSet {
self.view?.show(models: filteredModels)
}
}
weak var view: WalletStatementViewInterface?
var interactor: WalletStatementInteractorInput?
var wireframe: WalletStatementWireframeInput?
@ -22,11 +30,31 @@ class WalletStatementPresenter {
// MARK: WalletStatement module interface
extension WalletStatementPresenter: WalletStatementModuleInterface {
func viewIsReady() {
self.fetchWalletSatement(fromDate: nil, toDate: nil)
}
func filterWalletInStatements() {
}
func fetchWalletSatement(fromDate: String?, toDate: String?) {
self.interactor?.fetchWalletSatement(fromDate: fromDate, toDate: toDate)
}
}
// MARK: WalletStatement interactor output interface
extension WalletStatementPresenter: WalletStatementInteractorOutput {
func show(error: Error) {
self.view?.hideLoading()
self.view?.show(error: error.localizedDescription)
}
func show(models: [WalletStatement]) {
self.view?.hideLoading()
self.models = models
self.filteredModels = self.models
}
}

23
GMERemittance/Module/WalletStatement/User Interface/View/Cell/WalletStatementTableViewCell.swift

@ -0,0 +1,23 @@
//
// WalletStatementTableViewCell.swift
// GMERemittance
//
// Created by gme_2 on 03/10/2018.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class WalletStatementTableViewCell: UITableViewCell {
override func awakeFromNib() {
super.awakeFromNib()
// Initialization code
}
var model: WalletStatement?
func setup() {
}
}

135
GMERemittance/Module/WalletStatement/User Interface/View/WalletStatementViewController.swift

@ -8,11 +8,16 @@
import UIKit
enum WalletStatementType {
}
class WalletStatementViewController: UIViewController {
enum SegmentIndex: Int {
case all = 0
case sent
case delivered
case walletIn = 0
case walletOut
case all
}
@ -35,39 +40,135 @@ class WalletStatementViewController: UIViewController {
var to: String?
// var statements: [TransactionModel] = [] {
// didSet {
// self.tableView.reloadData()
// guard let fromDate = from, let toDate = to else {
// self.dateRangeLabelHeightConstraint.constant = 0
// return
// }
// self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate)
// self.toDateLabel.text = self.getHUmanReadableDate(date: toDate)
// UIView.animate(withDuration: 0.33, animations: {
// self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel
// })
// }
// }
var statements: [WalletStatement] = [] {
didSet {
self.tableView.reloadData()
guard let fromDate = from, let toDate = to else {
self.dateRangeLabelHeightConstraint.constant = 0
return
}
self.fromDateLabel.text = self.getHUmanReadableDate(date: fromDate)
self.toDateLabel.text = self.getHUmanReadableDate(date: toDate)
UIView.animate(withDuration: 0.33, animations: {
self.dateRangeLabelHeightConstraint.constant = Constant.heightOfDateRangeLabel
})
}
}
struct Constant {
static let heightOfDateRangeLabel: CGFloat = 35
}
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setupNormalNavigation()
self.setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "Wallet Statement"
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = ""
}
// MARK: IBActions
@IBAction func segmentChanged(_ sender: UISegmentedControl) {
self.searchTextField.text = ""
guard let index = SegmentIndex(rawValue: sender.selectedSegmentIndex) else {return}
switch index {
case .walletIn:
break
case .walletOut:
break
case .all:
break
}
}
@IBAction func openSearchFilter(_ sender: UIButton) {
// open search filter
let viewController = UIStoryboard.init(name: "TransactionHistoryDatePicker", bundle: nil).instantiateViewController(withIdentifier: "DatePickerViewController") as! DatePickerViewController
viewController.completion = self.selectedDate
self.present(viewController, animated: true, completion: nil)
}
private func selectedDate(from: String?, to: String?) {
self.from = from
self.to = to
guard let fromDate = from, let toDate = to else {return}
// self.presenter?.fetchTransactionHistories(fromDate: fromDate, toDate: toDate)
}
// MARK: Other Functions
private func setup() {
// all setup should be done here
setupDelegates()
self.dateRangeLabelHeightConstraint.constant = 0
self.presenter?.viewIsReady()
}
private func getHUmanReadableDate(date: String?) -> String? {
if let date = DateFormatter.toDate(dateString: date ?? "", format: AppConstants.dateFormat) {
let dateString = DateFormatter.toString(date: date, format: AppConstants.humanReadableDateFormat)
return dateString
}
return nil
}
private func setupDelegates() {
self.tableView.delegate = self
self.tableView.dataSource = self
}
}
// MARK: WalletStatementViewInterface
extension WalletStatementViewController: WalletStatementViewInterface {
func showLoading() {
self.showProgressHud()
}
func hideLoading() {
self.hideProgressHud()
}
func show(error: String) {
self.alert(message: error)
}
func show(models: [WalletStatement]) {
self.statements = models
}
}
// MARK: TableViewDelegate
extension WalletStatementViewController: UITableViewDelegate {
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
// self.presenter?.showDetailOf(index: indexPath.row)
}
}
// MARK: TableViewDatasource
extension WalletStatementViewController: UITableViewDataSource {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return statements.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "WalletStatementTableViewCell") as! WalletStatementTableViewCell
cell.model = self.statements.elementAt(index: indexPath.row)
cell.setup()
return cell
}
}

4
GMERemittance/Module/WalletStatement/User Interface/View/WalletStatementViewInterface.swift

@ -7,4 +7,8 @@
//
protocol WalletStatementViewInterface: class {
func showLoading()
func hideLoading()
func show(error: String)
func show(models: [WalletStatement])
}
Loading…
Cancel
Save