diff --git a/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift b/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift index 115f3924..8cb887bd 100644 --- a/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift +++ b/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractor.swift @@ -9,23 +9,31 @@ import Foundation class GmeContactsInteractor { - - // MARK: Properties - - weak var output: GmeContactsInteractorOutput? - private let service: GmeContactsServiceType - - // MARK: Initialization - - init(service: GmeContactsServiceType) { - self.service = service - } - - // MARK: Converting entities + + // MARK: Properties + + weak var output: GmeContactsInteractorOutput? + private let service: GmeContactsServiceType + private let model: [Branch]? + // MARK: Initialization + + init(service: GmeContactsServiceType, model: [Branch]?) { + self.service = service + self.model = model + } + + // MARK: Converting entities } // MARK: GmeContacts interactor input interface extension GmeContactsInteractor: GmeContactsInteractorInput { - + func fetchBranches() { + service.fetchBranches( + success: { + self.output?.setBranchModel(with: $0) + }){ + self.output?.setBranchesError(with: $0) + } + } } diff --git a/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift b/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift index 861f3cd9..7bf722d4 100644 --- a/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift +++ b/GMERemittance/Module/GmeContacts/Application Logic/Interactor/GmeContactsInteractorIO.swift @@ -7,9 +7,10 @@ // protocol GmeContactsInteractorInput: class { - + func fetchBranches() } protocol GmeContactsInteractorOutput: class { - + func setBranchModel(with model: [Branch]?) + func setBranchesError(with error: Error) } diff --git a/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift b/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift index 66e02b48..e02e34ed 100644 --- a/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift +++ b/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsService.swift @@ -9,10 +9,32 @@ import Foundation class GmeContactsService: GmeContactsServiceType { + func fetchBranches( + success: @escaping ([Branch]?) -> Void, + failure: @escaping (Error) -> Void + ) { - // MARK: Properties + let url = baseUrlWithoutVersion + "/v2/reward/branchInfo" + // let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo" - // MARK: Initialization - - // MARK: Data management + auth.request( + method: .post, + url: url, + params: nil, + success: { (response: BranchContainer) in + if (response.errorCode ?? "") == "1" { + let error = NSError.init( + domain: "Network", + code: 0, + userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] + ) + + failure(error) + }else { + success(response.data) + } + }) { (error) in + failure(error) + } + } } diff --git a/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift b/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift index d2f00fcb..ad2f7bc4 100644 --- a/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift +++ b/GMERemittance/Module/GmeContacts/Application Logic/Service/GmeContactsServiceType.swift @@ -8,6 +8,9 @@ import Foundation -protocol GmeContactsServiceType: class { - +protocol GmeContactsServiceType: class, ApiServiceType { + func fetchBranches( + success: @escaping ([Branch]?) -> Void, + failure: @escaping (Error) -> Void + ) } diff --git a/GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift b/GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift index 3c5ba771..8d830355 100644 --- a/GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift +++ b/GMERemittance/Module/GmeContacts/Module Interface/GmeContactsModuleInterface.swift @@ -7,5 +7,5 @@ // protocol GmeContactsModuleInterface: class { - + func fetchBranch() } diff --git a/GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift b/GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift index 9d5dbc6f..44121c91 100644 --- a/GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift +++ b/GMERemittance/Module/GmeContacts/User Interface/Presenter/GmeContactsPresenter.swift @@ -9,24 +9,35 @@ import Foundation class GmeContactsPresenter { - - // MARK: Properties - - weak var view: GmeContactsViewInterface? - var interactor: GmeContactsInteractorInput? - var wireframe: GmeContactsWireframeInput? - - // MARK: Converting entities + + // MARK: Properties + + weak var view: GmeContactsViewInterface? + var interactor: GmeContactsInteractorInput? + var wireframe: GmeContactsWireframeInput? + + // MARK: Converting entities } - // MARK: GmeContacts module interface +// MARK: GmeContacts module interface extension GmeContactsPresenter: GmeContactsModuleInterface { - + func fetchBranch() { + view?.startLoading() + interactor?.fetchBranches() + } } // MARK: GmeContacts interactor output interface extension GmeContactsPresenter: GmeContactsInteractorOutput { - + func setBranchModel(with model: [Branch]?) { + view?.endLoading() + view?.setBranchModel(with: model) + } + + func setBranchesError(with error: Error) { + view?.endLoading() + view?.setBranchesError(with: error) + } } diff --git a/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift b/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift index 21f4dec1..6b87f9f7 100644 --- a/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift +++ b/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewController.swift @@ -10,205 +10,236 @@ import UIKit import Localize_Swift class GmeContactsViewController: UIViewController { + + + + // MARK: IBOutlets + @IBOutlet weak var tableview: UITableView! + + var presenter: GmeContactsModuleInterface? + var contacts: [GmeContacts] = [] { + didSet { + self.tableview.reloadData() + } + } + + var model: [Branch]? { + didSet { + guard let model = model + else { + return + } + + contacts = model.map{ + let branch = GmeContacts() + branch.title = $0.agentName + branch.address = $0.agentAddress + branch.contactNumber = [$0.agentPhone1] as? [String] + return branch + } + } + } + // MARK: Properties + + + // MARK: VC's Life cycle + + override func viewDidLoad() { + super.viewDidLoad() + self.setup() + presenter?.fetchBranch() + } + + override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + self.navigationItem.title = "branch_text".localized() - - // MARK: IBOutlets - @IBOutlet weak var tableview: UITableView! - - var presenter: GmeContactsModuleInterface? - var contacts: [GmeContacts] = [] { - didSet { - self.tableview.reloadData() - } + if self.presentingViewController == nil { + self.navigationItem.rightBarButtonItem = nil } + } + + // MARK: IBActions + @IBAction func touchClose(_ sender: UIBarButtonItem) { + self.dismiss(animated: true, completion: nil) + } + + // MARK: Other Functions + + private func setup() { + self.tableview.dataSource = self + self.tableview.delegate = self + // all setup should be done here + + self.createTestContacts() + NotificationCenter.default.addObserver(self, selector: #selector(setupTabItem), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil) + } + + struct StringConstants { - // MARK: Properties + } + + private func createTestContacts() { + // let headOfficeContacts = GmeContacts() + // headOfficeContacts.title = "Head Office" + // headOfficeContacts.address = "325, Jong-ro, Jongno-gu, 03104 Seoul" + // headOfficeContacts.contactNumber = ["15886864"] + // headOfficeContacts.language = "Korean Language Support" - // MARK: VC's Life cycle + let dongdaemunBranchContacts = GmeContacts() + dongdaemunBranchContacts.title = "Dongdaemun Branch" + dongdaemunBranchContacts.address = "315, Jong-ro Jongno-gu, Seoul \n(Dongdaemun Station - Exit 3) \n 서울시 종로구 종로 315" + dongdaemunBranchContacts.contactNumber = ["027635559"] - override func viewDidLoad() { - super.viewDidLoad() - self.viperSetup() // since the viewcontroller in the tabbar is in strong bind with storyboard and segue - self.setup() - } - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - self.navigationItem.title = "branch_text".localized() - - if self.presentingViewController == nil { - self.navigationItem.rightBarButtonItem = nil - } - } - // MARK: IBActions - @IBAction func touchClose(_ sender: UIBarButtonItem) { - self.dismiss(animated: true, completion: nil) - } + let hwaseongBranchContacts = GmeContacts() + hwaseongBranchContacts.title = "Hwaseong Branch" + hwaseongBranchContacts.address = "1101-1, 3.1 Manse-ro Hyangnam-eup, Hwaseong-si, Gyeonggi-do \n(Baran Market Place) \n 경기도 화성시 향남읍 3.1만세로 1101-1" + hwaseongBranchContacts.contactNumber = ["0313540450"] - // MARK: Other Functions - private func setup() { - self.tableview.dataSource = self - self.tableview.delegate = self - // all setup should be done here - - self.createTestContacts() - NotificationCenter.default.addObserver(self, selector: #selector(setupTabItem), name: NSNotification.Name(LCLLanguageChangeNotification), object: nil) - } + let ansanBranchContacts = GmeContacts() + ansanBranchContacts.title = "Ansan Branch" + ansanBranchContacts.address = "2nd floor, 455, Jungang-daero, Danwon-gu, Ansan -si, Gyeonggi-do \n(Entrance of Asian Street) \n 경기도 안산시 단원구 중앙대로 455 2층" + ansanBranchContacts.contactNumber = ["0313626740"] - struct StringConstants { - - } + let gimhaeBranchContacts = GmeContacts() + gimhaeBranchContacts.title = "Gimhae Branch" + gimhaeBranchContacts.address = "84, Garak-ro, Gimhae-si, Gyeongsangnam-do,\n(Opposite to Top Mart) \n 경상남도 김해시 가락로 84 " + gimhaeBranchContacts.contactNumber = ["0553295559"] - private func createTestContacts() { -// let headOfficeContacts = GmeContacts() -// headOfficeContacts.title = "Head Office" -// headOfficeContacts.address = "325, Jong-ro, Jongno-gu, 03104 Seoul" -// headOfficeContacts.contactNumber = ["15886864"] -// headOfficeContacts.language = "Korean Language Support" - - let dongdaemunBranchContacts = GmeContacts() - dongdaemunBranchContacts.title = "Dongdaemun Branch" - dongdaemunBranchContacts.address = "315, Jong-ro Jongno-gu, Seoul \n(Dongdaemun Station - Exit 3) \n 서울시 종로구 종로 315" - dongdaemunBranchContacts.contactNumber = ["027635559"] - - - - let hwaseongBranchContacts = GmeContacts() - hwaseongBranchContacts.title = "Hwaseong Branch" - hwaseongBranchContacts.address = "1101-1, 3.1 Manse-ro Hyangnam-eup, Hwaseong-si, Gyeonggi-do \n(Baran Market Place) \n 경기도 화성시 향남읍 3.1만세로 1101-1" - hwaseongBranchContacts.contactNumber = ["0313540450"] - - - let ansanBranchContacts = GmeContacts() - ansanBranchContacts.title = "Ansan Branch" - ansanBranchContacts.address = "2nd floor, 455, Jungang-daero, Danwon-gu, Ansan -si, Gyeonggi-do \n(Entrance of Asian Street) \n 경기도 안산시 단원구 중앙대로 455 2층" - ansanBranchContacts.contactNumber = ["0313626740"] - - - let gimhaeBranchContacts = GmeContacts() - gimhaeBranchContacts.title = "Gimhae Branch" - gimhaeBranchContacts.address = "84, Garak-ro, Gimhae-si, Gyeongsangnam-do,\n(Opposite to Top Mart) \n 경상남도 김해시 가락로 84 " - gimhaeBranchContacts.contactNumber = ["0553295559"] - - - - let songuriBranchContacts = GmeContacts() - songuriBranchContacts.title = "Songu-ri Branch" - songuriBranchContacts.address = "91, Solmoru-ro, Soheul-eup, Pocheon-si, Gyeonggi-do, Korea\nNext to Nonghyub Bank) \n 경기도 포천시 소흘읍 솔모루로 91" - songuriBranchContacts.contactNumber = ["0315411856"] - - let dongdaemunCisBranch = GmeContacts() - dongdaemunCisBranch.title = "Dongdaemun CIS Branch" - dongdaemunCisBranch.address = "2nd floor, 281, Changgyeonggunag-ro Jongno-gu, Seoul\n(Upper floor of Dongdaemun Mart) \n 서울 중구 을지로 42길 5 2층" - dongdaemunCisBranch.contactNumber = ["0221386429", "01030156864"] - - - let hyehwaBranch = GmeContacts() - hyehwaBranch.title = "Hyehwa Branch" - hyehwaBranch.address = "281, Changgyeonggung-ro, Jongno-gu, Seoul Hyehwa Rotary\n(Right across from Catholic Church) \n 서울특별시 종로구 창경궁로 281" - hyehwaBranch.contactNumber = ["0221386429", "01029706864"] - - - let gmeContacts = [dongdaemunCisBranch, dongdaemunBranchContacts, hwaseongBranchContacts, ansanBranchContacts, gimhaeBranchContacts, songuriBranchContacts, hyehwaBranch] - self.contacts = gmeContacts - - } - private func call(number: String) { - let number = number.removeWhitespacesInBetween() - if let url = URL(string: "tel://\(number)") { - if UIApplication.shared.canOpenURL(url) { - UIApplication.shared.openURL(url) - } - } - } - override func setupTabItem() { - let image = UIImage.init(named: "ic-agent") - self.tabBarItem = UITabBarItem(title: "branch_text".localized(), image: image, selectedImage: nil) - self.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: UI_USER_INTERFACE_IDIOM() == .pad ? 2 : -6) + let songuriBranchContacts = GmeContacts() + songuriBranchContacts.title = "Songu-ri Branch" + songuriBranchContacts.address = "91, Solmoru-ro, Soheul-eup, Pocheon-si, Gyeonggi-do, Korea\nNext to Nonghyub Bank) \n 경기도 포천시 소흘읍 솔모루로 91" + songuriBranchContacts.contactNumber = ["0315411856"] + + let dongdaemunCisBranch = GmeContacts() + dongdaemunCisBranch.title = "Dongdaemun CIS Branch" + dongdaemunCisBranch.address = "2nd floor, 281, Changgyeonggunag-ro Jongno-gu, Seoul\n(Upper floor of Dongdaemun Mart) \n 서울 중구 을지로 42길 5 2층" + dongdaemunCisBranch.contactNumber = ["0221386429", "01030156864"] + + + let hyehwaBranch = GmeContacts() + hyehwaBranch.title = "Hyehwa Branch" + hyehwaBranch.address = "281, Changgyeonggung-ro, Jongno-gu, Seoul Hyehwa Rotary\n(Right across from Catholic Church) \n 서울특별시 종로구 창경궁로 281" + hyehwaBranch.contactNumber = ["0221386429", "01029706864"] + + + let gmeContacts = [dongdaemunCisBranch, dongdaemunBranchContacts, hwaseongBranchContacts, ansanBranchContacts, gimhaeBranchContacts, songuriBranchContacts, hyehwaBranch] + self.contacts = gmeContacts + + } + + private func call(number: String) { + let number = number.removeWhitespacesInBetween() + if let url = URL(string: "tel://\(number)") { + if UIApplication.shared.canOpenURL(url) { + UIApplication.shared.openURL(url) + } } + } + + override func setupTabItem() { + let image = UIImage.init(named: "ic-agent") + self.tabBarItem = UITabBarItem(title: "branch_text".localized(), image: image, selectedImage: nil) + self.tabBarItem.titlePositionAdjustment = UIOffset(horizontal: 0, vertical: UI_USER_INTERFACE_IDIOM() == .pad ? 2 : -6) + } } // MARK: GmeContactsViewInterface extension GmeContactsViewController: GmeContactsViewInterface { - + func setBranchModel(with model: [Branch]?) { + self.model = model + } + + func setBranchesError(with error: Error){ + alertWithOk(message: error.localizedDescription) + } + + func startLoading(){ + showProgressHud() + } + + func endLoading(){ + hideProgressHud() + } } extension GmeContactsViewController { - func viperSetup() { - let service = GmeContactsService() - let interactor = GmeContactsInteractor(service: service) - let presenter = GmeContactsPresenter() - let wireframe = GmeContactsWireframe() - - self.presenter = presenter - interactor.output = presenter - presenter.interactor = interactor - presenter.wireframe = wireframe - presenter.view = self - wireframe.view = self - } + func viperSetup() { + let service = GmeContactsService() + let interactor = GmeContactsInteractor(service: service, model: nil) + let presenter = GmeContactsPresenter() + let wireframe = GmeContactsWireframe() + + self.presenter = presenter + interactor.output = presenter + presenter.interactor = interactor + presenter.wireframe = wireframe + presenter.view = self + wireframe.view = self + } } extension GmeContactsViewController: UITableViewDelegate { - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - print(indexPath.row) - if indexPath.row == 0 {return 10} - return UITableViewAutomaticDimension - } + func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { + print(indexPath.row) + if indexPath.row == 0 {return 10} + return UITableViewAutomaticDimension + } } extension GmeContactsViewController: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return contacts.count + 1 + func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { + return contacts.count + 1 + } + + func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { + if indexPath.row == 0 { + let cell = tableView.dequeueReusableCell(withIdentifier: "EmptyTableViewCell") as! EmptyTableViewCell + return cell } - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - if indexPath.row == 0 { - let cell = tableView.dequeueReusableCell(withIdentifier: "EmptyTableViewCell") as! EmptyTableViewCell - return cell - } - - - let cell = tableView.dequeueReusableCell(withIdentifier: "GmeContactsTableViewCell") as! GmeContactsTableViewCell - cell.contact = self.contacts.elementAt(index: indexPath.row - 1) - cell.delegate = self - cell.index = indexPath.row - 1 - cell.setup() - return cell - } + + let cell = tableView.dequeueReusableCell(withIdentifier: "GmeContactsTableViewCell") as! GmeContactsTableViewCell + cell.contact = self.contacts.elementAt(index: indexPath.row - 1) + cell.delegate = self + cell.index = indexPath.row - 1 + cell.setup() + return cell + } } extension GmeContactsViewController: GmeContactCallDelegate { - func call(index: Int?) { - guard let index = index else {return} - if let contact = self.contacts.elementAt(index: index) { - let numbers = contact.contactNumber - - let alert = UIAlertController(title:nil, message:"help_you_text".localized(), preferredStyle: .actionSheet) - - numbers?.forEach({ number in - let action = UIAlertAction.init(title: "\(number)", style: UIAlertActionStyle.default, handler: { action in - self.call(number: number) - }) - alert.addAction(action) - }) - - alert.view.tintColor = UIColor.darkGray - - alert.addAction(UIAlertAction(title: "cancel_text".localized(), style: UIAlertActionStyle.cancel, handler: nil)) - present(alert, animated: true, completion: nil) - - } - + func call(index: Int?) { + guard let index = index else {return} + if let contact = self.contacts.elementAt(index: index) { + let numbers = contact.contactNumber + + let alert = UIAlertController(title:nil, message:"help_you_text".localized(), preferredStyle: .actionSheet) + + numbers?.forEach({ number in + let action = UIAlertAction.init(title: "\(number)", style: UIAlertActionStyle.default, handler: { action in + self.call(number: number) + }) + alert.addAction(action) + }) + + alert.view.tintColor = UIColor.darkGray + + alert.addAction(UIAlertAction(title: "cancel_text".localized(), style: UIAlertActionStyle.cancel, handler: nil)) + present(alert, animated: true, completion: nil) + } - + } + + } diff --git a/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift b/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift index f6fd7d4e..d4686bf1 100644 --- a/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift +++ b/GMERemittance/Module/GmeContacts/User Interface/View/GmeContactsViewInterface.swift @@ -7,5 +7,9 @@ // protocol GmeContactsViewInterface: class { - + func setBranchModel(with model: [Branch]?) + func setBranchesError(with error: Error) + + func startLoading() + func endLoading() } diff --git a/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift b/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift index 062945bb..dcd53bab 100644 --- a/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift +++ b/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframe.swift @@ -9,26 +9,35 @@ import UIKit class GmeContactsWireframe { - weak var view: UIViewController! + weak var view: UIViewController! + private var model: [Branch]? } extension GmeContactsWireframe: GmeContactsWireframeInput { + + var storyboardName: String {return "GmeContacts"} + + func getMainView() -> UIViewController { + let service = GmeContactsService() + let presenter = GmeContactsPresenter() + let viewController = viewControllerFromStoryboard(of: GmeContactsViewController.self) + let interactor = GmeContactsInteractor(service: service, model: model) - var storyboardName: String {return "GmeContacts"} + viewController.setupTabItem() + viewController.presenter = presenter + interactor.output = presenter + presenter.interactor = interactor + presenter.wireframe = self + presenter.view = viewController + let _ = viewController.view + view = viewController + return viewController + } + + func presentWithBranchModel(_ model: [Branch]?, on source: UIViewController){ + self.model = model + let mainViewController = getMainView() - func getMainView() -> UIViewController { - let service = GmeContactsService() - let interactor = GmeContactsInteractor(service: service) - let presenter = GmeContactsPresenter() - let viewController = viewControllerFromStoryboard(of: GmeContactsViewController.self) - viewController.setupTabItem() - viewController.presenter = presenter - interactor.output = presenter - presenter.interactor = interactor - presenter.wireframe = self - presenter.view = viewController - let _ = viewController.view - self.view = viewController - return viewController - } + openViewControllerWithNavigation(viewController: mainViewController, source: source) + } } diff --git a/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift b/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift index b6f34bb0..a16dc11a 100644 --- a/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift +++ b/GMERemittance/Module/GmeContacts/User Interface/Wireframe/GmeContactsWireframeInput.swift @@ -9,5 +9,5 @@ import Foundation protocol GmeContactsWireframeInput: WireframeInput { - + func presentWithBranchModel(_ model: [Branch]?, on source: UIViewController) } diff --git a/GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift b/GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift index 5f1dc22d..7f29abc3 100644 --- a/GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift +++ b/GMERemittance/Module/RewardModules/DetailOrder/User Interface/View/DetailOrderViewController.swift @@ -26,15 +26,15 @@ class DetailOrderViewController: UIViewController { receiverNameLabel.text = order.recvName mobileNumberLabel.text = order.recvPhoneNumber -// pickupBranchLabel.text = order.recvType == "1" ? order.recvAddress : order.branchCode + pickupBranchLabel.text = order.branchName productNameLabel.text = order.productName productPointLabel.text = order.usePoint orderStatusLabel.text = status.message orderDateLabel.text = order.createdDate - //TODO: 서버사이드에서 추가되면 활성화 -// orderReceiveDateLabel.text = order.recvDate + + orderReceiveDateLabel.text = order.recvDate orderIDNumberLabel.text = order.orderID orderTypeLabel.text = order.recvType == "1" ? "Deliver" : "pickup_from_branch".localized() } diff --git a/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift b/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift index 0d644322..51cd9ecb 100644 --- a/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift +++ b/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Interactor/OrderHistoryInteractor.swift @@ -29,31 +29,11 @@ class OrderHistoryInteractor { extension OrderHistoryInteractor: OrderHistoryInteractorInput { func fetchOrderHistory(from startDate: String, to endDate: String) { - let from: String - let to: String - if startDate == "" && endDate == "" { - let formatter = DateFormatter() - formatter.dateFormat = "yyyy-MM-dd" - - let monthsToAdd = -3 - let currentDate = Date() - - var dateComponent = DateComponents() - dateComponent.month = monthsToAdd - let futureDate = Calendar.current.date(byAdding: dateComponent, to: currentDate) - - to = formatter.string(from: currentDate) - from = formatter.string(from: futureDate!) - - } else { - from = startDate - to = endDate - } service.fetchOrderHistory( - from: from, - to: to, + from: startDate, + to: endDate, success: {[weak self] in guard let `self` = self else { return diff --git a/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift b/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift index 00b1e966..03f4dddd 100644 --- a/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift +++ b/GMERemittance/Module/RewardModules/OrderHistory/Application Logic/Model/Order.swift @@ -24,6 +24,8 @@ struct Order: Mappable { var orderStatus: String? var createdDate: String? var modifiedDate: String? + var branchName: String? + var recvDate: String? init?(map: Map) { } @@ -42,6 +44,9 @@ struct Order: Mappable { orderStatus <- map["orderStatus"] createdDate <- map["createdDate"] modifiedDate <- map["modifiedDate"] + recvDate <- map["recvDate"] + branchName <- map["branchName"] + } } diff --git a/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard b/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard index 1adb5dab..9cf6b815 100644 --- a/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard +++ b/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistory.storyboard @@ -58,41 +58,66 @@ - + - - + + - - - + + + + + + + + + - + + + + + + + + - + + + - + - + @@ -284,11 +309,11 @@ - + - + @@ -304,6 +329,7 @@ + @@ -317,6 +343,7 @@ + diff --git a/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift b/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift index 8946fe26..47491d02 100644 --- a/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift +++ b/GMERemittance/Module/RewardModules/OrderHistory/User Interface/View/OrderHistoryViewController.swift @@ -17,6 +17,8 @@ class OrderHistoryViewController: UIViewController { private lazy var refreshControl = UIRefreshControl() + private lazy var isSearch = false + // MARK: Computed Properties private var orders: [Order]? { @@ -26,6 +28,7 @@ class OrderHistoryViewController: UIViewController { orders.count != 0 else { noOrderHistoryLabel.isHidden = false + noOrderHistoryLabel.text = isSearch ? "no_search_orders_message".localized() : "no_orders_message".localized() tableView.reloadData() return } @@ -40,6 +43,7 @@ class OrderHistoryViewController: UIViewController { @IBOutlet private weak var tableView: UITableView! @IBOutlet private weak var searchBar: UISearchBar! @IBOutlet private weak var periodView: UIView! + @IBOutlet private weak var perioidContentView: UIView! @IBOutlet private weak var noOrderHistoryLabel: UILabel! @IBOutlet private weak var startDateLabel: UILabel! @@ -63,6 +67,7 @@ class OrderHistoryViewController: UIViewController { super.viewWillAppear(animated) if searchBar.text == "" && startDateLabel.text == ""{ + isSearch = false presenter?.fetchOrders(from: "", to: "") } } @@ -89,10 +94,15 @@ class OrderHistoryViewController: UIViewController { self.setPeriodViewStatus(isHidden: false) self.searchBar.text?.removeAll() + self.isSearch = true + self.presenter?.fetchOrders(from: startDate, to: endDate) } } + @IBAction func touchHidePerioidContentView(_ sender: Any) { + refresh() + } } // MARK: OrderHistoryViewInterface @@ -135,6 +145,8 @@ extension OrderHistoryViewController { orderedColorLabel.layer.cornerRadius = 5 receivedColorLabel.layer.cornerRadius = 5 canceledColorLabel.layer.cornerRadius = 5 + + perioidContentView.layer.cornerRadius = 10 } private func setMultiLanguage(){ @@ -184,7 +196,7 @@ extension OrderHistoryViewController { private func refresh() { setPeriodViewStatus(isHidden: true) searchBar.text?.removeAll() - + isSearch = false presenter?.fetchOrders(from: "", to: "") } @@ -232,6 +244,7 @@ extension OrderHistoryViewController: UITableViewDelegate { // MARK: - UISearchBarDelegate extension OrderHistoryViewController: UISearchBarDelegate { func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) { + isSearch = true presenter?.fetchFilteredOrders(by: searchText) } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift index c94aa377..3362c23f 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractor.swift @@ -9,53 +9,53 @@ import Foundation class RedeemInteractor { - - // MARK: Properties - - weak var output: RedeemInteractorOutput? - private let service: RedeemServiceType - - // MARK: Initialization - - init(service: RedeemServiceType) { - self.service = service - } - - // MARK: Converting entities + + // MARK: Properties + + weak var output: RedeemInteractorOutput? + private let service: RedeemServiceType + + // MARK: Initialization + + init(service: RedeemServiceType) { + self.service = service + } + + // MARK: Converting entities } // MARK: Redeem interactor input interface extension RedeemInteractor: RedeemInteractorInput { - func fetchBranches() { - self.service.fetchBranches( - success: { - self.output?.setBranches(with: $0) - }){ - self.output?.setBranchesError(with: $0) - } - } - - func viewIsReady(model: RewardProduct?) { - self.output?.result(model: model) + func fetchBranches() { + service.fetchBranches( + success: { + self.output?.setBranches(with: $0) + }){ + self.output?.setBranchesError(with: $0) } - - func submit(with model: Redeem?) { - self.service.submit( - with: model, - success: { - self.output?.submitSuccess() - }) { - self.output?.submitFailure(with: $0) - } + } + + func viewIsReady(model: RewardProduct?) { + self.output?.result(model: model) + } + + func submit(with model: Redeem?) { + self.service.submit( + with: model, + success: { + self.output?.submitSuccess() + }) { + self.output?.submitFailure(with: $0) } - - func refreshRewardPoint() { - self.service.fetchUserInfo(success: { - Utility.save(user: $0) - self.output?.successRefreshRewardPoint() - }){ - self.output?.failureRefreshRewardPoint(with: $0) - } + } + + func refreshRewardPoint() { + self.service.fetchUserInfo(success: { + Utility.save(user: $0) + self.output?.successRefreshRewardPoint() + }){ + self.output?.failureRefreshRewardPoint(with: $0) } + } } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractorIO.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractorIO.swift index b95e3f5c..9cbab552 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractorIO.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Interactor/RedeemInteractorIO.swift @@ -7,20 +7,20 @@ // protocol RedeemInteractorInput: class { - func viewIsReady(model: RewardProduct?) - func fetchBranches() - func submit(with model: Redeem?) - func refreshRewardPoint() + func viewIsReady(model: RewardProduct?) + func fetchBranches() + func submit(with model: Redeem?) + func refreshRewardPoint() } protocol RedeemInteractorOutput: class { - func result(model: RewardProduct?) - func setBranches(with model: [Branch]?) - func setBranchesError(with error: Error) - - func submitSuccess() - func submitFailure(with error: Error) - - func successRefreshRewardPoint() - func failureRefreshRewardPoint(with error: Error) + func result(model: RewardProduct?) + func setBranches(with model: [Branch]?) + func setBranchesError(with error: Error) + + func submitSuccess() + func submitFailure(with error: Error) + + func successRefreshRewardPoint() + func failureRefreshRewardPoint(with error: Error) } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift index 46f386e6..0bf3d35d 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Branch.swift @@ -10,17 +10,26 @@ import Foundation import ObjectMapper struct Branch: Mappable { - var agentID: String? - var agentName: String? - - init?(map: Map) { - - } - - mutating func mapping(map: Map) { - self.agentID <- map["agentId"] - self.agentName <- map["agentName"] - } - + var agentID: String? + var agentName: String? + var agentPhone1: String? + var agentAddress: String? + var agentZip: String? + var agentState: String? + var agentCity: String? + init?(map: Map) { + } + + mutating func mapping(map: Map) { + agentID <- map["agentId"] + agentName <- map["agentName"] + agentPhone1 <- map["agentPhone1"] + agentAddress <- map["agentAddress"] + agentZip <- map["agentZip"] + agentState <- map["agentState"] + agentCity <- map["agentCity"] + } + + } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift index d30197a8..9b460d81 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/BranchContainer.swift @@ -10,23 +10,23 @@ import Foundation import ObjectMapper struct BranchContainer: Mappable { - var errorCode: String? - var message: String? - var id: String? - var extra: String? - var extra2: String? - var data: [Branch]? + var errorCode: String? + var message: String? + var id: String? + var extra: String? + var extra2: String? + var data: [Branch]? + + init?(map: Map) { - init?(map: Map) { - - } - - mutating func mapping(map: Map) { - self.errorCode <- map["ErrorCode"] - self.message <- map["Msg"] - self.id <- map["Id"] - self.extra <- map["Extra"] - self.extra2 <- map["Extra2"] - self.data <- map["Data"] - } + } + + mutating func mapping(map: Map) { + errorCode <- map["ErrorCode"] + message <- map["Msg"] + id <- map["Id"] + extra <- map["Extra"] + extra2 <- map["Extra2"] + data <- map["Data"] + } } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Redeem.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Redeem.swift index 523c3a29..f4dc3f86 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Redeem.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Model/Redeem.swift @@ -9,14 +9,14 @@ import Foundation struct Redeem { - let userID: String? - let productCode: String? - let usePoint: String? - let orderType: String? - let recvType: String? - let branchCode: String? - let recvAddress: String? - let recvZipCode: String? - let recvPhoneNumber: String? - let recvName: String? + let userID: String? + let productCode: String? + let usePoint: String? + let orderType: String? + let recvType: String? + let branchCode: String? + let recvAddress: String? + let recvZipCode: String? + let recvPhoneNumber: String? + let recvName: String? } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift index 0d0bfd9d..560705eb 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemService.swift @@ -10,98 +10,98 @@ import Foundation import FirebaseInstanceID class RedeemService: RedeemServiceType { + + // MARK: Properties + + // MARK: Initialization + + // MARK: Data management + + func fetchBranches( + success: @escaping ([Branch]?) -> Void, + failure: @escaping (Error) -> Void + ) { - // MARK: Properties - - // MARK: Initialization - - // MARK: Data management + let url = baseUrlWithoutVersion + "/v2/reward/branchInfo" + // let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo" - func fetchBranches( - success: @escaping ([Branch]?) -> Void, - failure: @escaping (Error) -> Void - ) { - - let url = baseUrlWithoutVersion + "/v2/reward/branchInfo" -// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/branchInfo" - - auth.request( - method: .post, - url: url, - params: nil, - success: { (response: BranchContainer) in - if (response.errorCode ?? "") == "1" { - let error = NSError.init( - domain: "Network", - code: 0, - userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] - ) - - failure(error) - }else { - success(response.data) - } - }) { (error) in - failure(error) + auth.request( + method: .post, + url: url, + params: nil, + success: { (response: BranchContainer) in + if (response.errorCode ?? "") == "1" { + let error = NSError.init( + domain: "Network", + code: 0, + userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] + ) + + failure(error) + }else { + success(response.data) } + }) { (error) in + failure(error) } - - func submit( - with model: Redeem?, - success: @escaping () -> Void, - failure: @escaping (Error) -> Void + } + + func submit( + with model: Redeem?, + success: @escaping () -> Void, + failure: @escaping (Error) -> Void ) { -// let url = baseUrl + "/reward/productBuy" - let url = baseUrlWithoutVersion + "/v2/reward/productBuy" -// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productBuy" - - let params: [String: String] = [ - "userId": model?.userID ?? "", - "productCode": model?.productCode ?? "", - "usePoint": model?.usePoint ?? "", - "orderType": model?.orderType ?? "", - "recvType": model?.recvType ?? "", - "branchCode": model?.branchCode ?? "", - "recvAddress": model?.recvAddress ?? "", - "recvZipCode": model?.recvZipCode ?? "", - "recvPhoneNumber": model?.recvPhoneNumber ?? "", - "recvName": model?.recvName ?? "", - ] - - auth.request( - method: .post, - url: url, - params: params, - success: { (response: ResponseMessage) in - if (response.errorCode ?? "") == "1" { - let error = NSError.init( - domain: "Network", - code: 0, - userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] - ) - - failure(error) - }else { - success() - } - }) { (error) in - failure(error) + // let url = baseUrl + "/reward/productBuy" + let url = baseUrlWithoutVersion + "/v2/reward/productBuy" + // let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productBuy" + + let params: [String: String] = [ + "userId": model?.userID ?? "", + "productCode": model?.productCode ?? "", + "usePoint": model?.usePoint ?? "", + "orderType": model?.orderType ?? "", + "recvType": model?.recvType ?? "", + "branchCode": model?.branchCode ?? "", + "recvAddress": model?.recvAddress ?? "", + "recvZipCode": model?.recvZipCode ?? "", + "recvPhoneNumber": model?.recvPhoneNumber ?? "", + "recvName": model?.recvName ?? "", + ] + + auth.request( + method: .post, + url: url, + params: params, + success: { (response: ResponseMessage) in + if (response.errorCode ?? "") == "1" { + let error = NSError.init( + domain: "Network", + code: 0, + userInfo: [NSLocalizedDescriptionKey : response.message ?? ""] + ) + + failure(error) + }else { + success() } + }) { (error) in + failure(error) } + } + + func fetchUserInfo(success: @escaping (User) -> (), failure: @escaping (Error) -> ()) { + let service = HomeService() - func fetchUserInfo(success: @escaping (User) -> (), failure: @escaping (Error) -> ()) { - let service = HomeService() - - let param = [ - "userId" : Utility.getMyUserName(), - "uuid": Utility.getUUid() ?? "", - "appVersion": Utility.getAppVersion() ?? "", - "phoneBrand": Utility.getPhoneBrand(), - "phoneOs": Utility.getPhoneOs(), - "fcmId": InstanceID.instanceID().token() ?? "", - "osVersion": Utility.getOsVersion() - ] - - service.fetchUserInfo(param: param, success: success, failure: failure) - } + let param = [ + "userId" : Utility.getMyUserName(), + "uuid": Utility.getUUid() ?? "", + "appVersion": Utility.getAppVersion() ?? "", + "phoneBrand": Utility.getPhoneBrand(), + "phoneOs": Utility.getPhoneOs(), + "fcmId": InstanceID.instanceID().token() ?? "", + "osVersion": Utility.getOsVersion() + ] + + service.fetchUserInfo(param: param, success: success, failure: failure) + } } diff --git a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemServiceType.swift b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemServiceType.swift index c86cd6da..3f4a2e9b 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemServiceType.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Application Logic/Service/RedeemServiceType.swift @@ -9,18 +9,18 @@ import Foundation protocol RedeemServiceType: class, ApiServiceType { - func fetchBranches( - success: @escaping ([Branch]?) -> Void, - failure: @escaping (Error) -> Void - ) - - func submit( - with model: Redeem?, - success: @escaping () -> Void, - failure: @escaping (Error) -> Void - ) - - func fetchUserInfo( - success: @escaping (User) -> (), - failure: @escaping (Error) -> ()) + func fetchBranches( + success: @escaping ([Branch]?) -> Void, + failure: @escaping (Error) -> Void + ) + + func submit( + with model: Redeem?, + success: @escaping () -> Void, + failure: @escaping (Error) -> Void + ) + + func fetchUserInfo( + success: @escaping (User) -> (), + failure: @escaping (Error) -> ()) } diff --git a/GMERemittance/Module/RewardModules/Redeem/Module Interface/RedeemModuleInterface.swift b/GMERemittance/Module/RewardModules/Redeem/Module Interface/RedeemModuleInterface.swift index 4b6bba4e..c8b04c68 100644 --- a/GMERemittance/Module/RewardModules/Redeem/Module Interface/RedeemModuleInterface.swift +++ b/GMERemittance/Module/RewardModules/Redeem/Module Interface/RedeemModuleInterface.swift @@ -7,12 +7,12 @@ // protocol RedeemModuleInterface: class { - func viewIsReady() - func showSearchAddressVC() - func fetchBranches() - func showBranchesVC() - func submit(with model: Redeem?) - func goRewardHome() - - func refreshRewardPoint() + func viewIsReady() + func showSearchAddressVC() + func fetchBranches() + func showBranchesVC() + func submit(with model: Redeem?) + func goRewardHome() + + func refreshRewardPoint() } diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift b/GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift index 69d89975..6dd87c16 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/Presenter/RedeemPresenter.swift @@ -9,94 +9,94 @@ import Foundation class RedeemPresenter { - - // MARK: Properties - - weak var view: RedeemViewInterface? - var interactor: RedeemInteractorInput? - var wireframe: RedeemWireframeInput? - - private var model: RewardProduct? - - init(with model: RewardProduct?){ - self.model = model - } - - // MARK: Converting entities - + + // MARK: Properties + + weak var view: RedeemViewInterface? + var interactor: RedeemInteractorInput? + var wireframe: RedeemWireframeInput? + + private var model: RewardProduct? + + init(with model: RewardProduct?){ + self.model = model + } + + // MARK: Converting entities + } // MARK: Redeem module interface extension RedeemPresenter: RedeemModuleInterface { - func viewIsReady() { - self.view?.startLoading() - self.interactor?.viewIsReady(model: self.model) - } - - func showSearchAddressVC() { - self.wireframe?.showSearchAddressVC() - } - - func fetchBranches() { - self.view?.startLoading() - self.interactor?.fetchBranches() - } - - func showBranchesVC() { - self.wireframe?.showBranchesVC() - } - - func submit(with model: Redeem?) { - self.view?.startLoading() - self.interactor?.submit(with: model) - } - - func goRewardHome() { - self.wireframe?.goRewardVC() - } - - func refreshRewardPoint() { - self.view?.startLoading() - self.interactor?.refreshRewardPoint() - } + func viewIsReady() { + view?.startLoading() + interactor?.viewIsReady(model: model) + } + + func showSearchAddressVC() { + wireframe?.showSearchAddressVC() + } + + func fetchBranches() { + view?.startLoading() + interactor?.fetchBranches() + } + + func showBranchesVC(){ + wireframe?.showBranchesVC() + } + + func submit(with model: Redeem?) { + view?.startLoading() + interactor?.submit(with: model) + } + + func goRewardHome() { + wireframe?.goRewardVC() + } + + func refreshRewardPoint() { + view?.startLoading() + interactor?.refreshRewardPoint() + } } // MARK: Redeem interactor output interface extension RedeemPresenter: RedeemInteractorOutput { - func successRefreshRewardPoint() { - self.view?.endLoading() - self.view?.successRefreshRewardPoint() - } - - func failureRefreshRewardPoint(with error: Error) { - self.view?.endLoading() - self.view?.failureRefreshRewardPoint(with: error) - } - - func result(model: RewardProduct?) { - self.view?.endLoading() - self.view?.setModel(model: model) - } - - func setBranches(with model: [Branch]?) { - self.view?.endLoading() - self.view?.setBranches(with: model) - } - - func setBranchesError(with error: Error) { - self.view?.endLoading() - self.view?.setBranchesError(with: error) - } - - func submitSuccess() { - self.view?.endLoading() - self.view?.submitSuccess() - } - - func submitFailure(with error: Error) { - self.view?.endLoading() - self.view?.submitFailure(with: error) - } + func successRefreshRewardPoint() { + view?.endLoading() + view?.successRefreshRewardPoint() + } + + func failureRefreshRewardPoint(with error: Error) { + view?.endLoading() + view?.failureRefreshRewardPoint(with: error) + } + + func result(model: RewardProduct?) { + view?.endLoading() + view?.setModel(model: model) + } + + func setBranches(with model: [Branch]?) { + view?.endLoading() + view?.setBranches(with: model) + } + + func setBranchesError(with error: Error) { + view?.endLoading() + view?.setBranchesError(with: error) + } + + func submitSuccess() { + view?.endLoading() + view?.submitSuccess() + } + + func submitFailure(with error: Error) { + view?.endLoading() + view?.submitFailure(with: error) + } } diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard index 3b900ffa..1f96cb93 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/Redeem.storyboard @@ -407,6 +407,7 @@ + @@ -414,7 +415,6 @@ - diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift index 8918c349..e2c8d5c3 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewController.swift @@ -17,18 +17,12 @@ class RedeemViewController: UIViewController { private var model: RewardProduct? { didSet { //TODO: 서버 이미지 처리 완료시 수정 -// guard -// let newModel = model, -// let imageData = newModel.imageData, -// let data = Data(base64Encoded: imageData) else { return } -// selectedItemImageView.image = UIImage(data: data) - - guard - let newModel = model - else { return } - - selectedItemNameLabel.text = newModel.productName - selectedItemPriceLabel.text = newModel.pointPrice + if let imageData = model?.productImgPath, + let data = Data(base64Encoded: imageData) { + selectedItemImageView.image = UIImage(data: data) + } + selectedItemNameLabel.text = model?.productName + selectedItemPriceLabel.text = model?.pointPrice } } @@ -79,7 +73,7 @@ class RedeemViewController: UIViewController { self.userInfoView.alpha = 1 self.selectAddressInfoLabel.alpha = 1 self.addressSegmentView.alpha = 1 - }, completion: nil) + }, completion: nil) } } @@ -97,7 +91,7 @@ class RedeemViewController: UIViewController { self.branchesView.alpha = 1 self.addressView.alpha = 0 - }, completion: nil) + }, completion: nil) case .custom: selectedBranch = nil @@ -109,7 +103,7 @@ class RedeemViewController: UIViewController { self.branchesView.alpha = 0 self.addressView.alpha = 1 - }, completion: nil) + }, completion: nil) } submitButton.isHidden = false @@ -168,7 +162,7 @@ class RedeemViewController: UIViewController { @IBOutlet private weak var scrollView: UIScrollView! @IBOutlet weak var closeBarButton: UIBarButtonItem! - @IBOutlet weak var selectedProductTitleLabel: UILabel! + @IBOutlet weak var redeemTitleLabel: UILabel! @IBOutlet weak var pointsWillBeDeductedLabel: UILabel! @IBOutlet weak var fromTourRewardPointLabel: UILabel! @IBOutlet weak var receiverTitleLabel: UILabel! @@ -246,7 +240,7 @@ class RedeemViewController: UIViewController { setCoverView() setButton() setSegmentedControl() -// self.setDefaultState() + // self.setDefaultState() setOnlyBranchMode() setMultiLanguage() @@ -403,7 +397,7 @@ extension RedeemViewController { } private func setMultiLanguage(){ - selectedProductTitleLabel.text = "selected_product".localized() + redeemTitleLabel.text = "redeem".localized() pointsWillBeDeductedLabel.text = "points_deducted".localized() fromTourRewardPointLabel.text = "from_your_reward_point".localized() @@ -471,7 +465,7 @@ extension RedeemViewController: ConfirmViewControllerDelegate { ordered = Redeem( userID: UserDefaults.standard.string(forKey: UserKeys.email), - productCode: model?.productNumber, + productCode: model?.productCode, usePoint: model?.pointPrice, orderType: "1", recvType: recvType, diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewInterface.swift b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewInterface.swift index 69dbe74f..165c6f96 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewInterface.swift +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/View/RedeemViewInterface.swift @@ -7,16 +7,16 @@ // protocol RedeemViewInterface: class { - func setModel(model: RewardProduct?) - func setBranches(with model: [Branch]?) - func setBranchesError(with error: Error) - - func submitSuccess() - func submitFailure(with error: Error) - - func startLoading() - func endLoading() - - func failureRefreshRewardPoint(with error: Error) - func successRefreshRewardPoint() + func setModel(model: RewardProduct?) + func setBranches(with model: [Branch]?) + func setBranchesError(with error: Error) + + func submitSuccess() + func submitFailure(with error: Error) + + func startLoading() + func endLoading() + + func failureRefreshRewardPoint(with error: Error) + func successRefreshRewardPoint() } diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift b/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift index 8adc78e8..7bab9045 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframe.swift @@ -9,56 +9,56 @@ import UIKit class RedeemWireframe { - weak var view: UIViewController! - private var model: RewardProduct? + weak var view: UIViewController! + private var model: RewardProduct? } extension RedeemWireframe: RedeemWireframeInput { + + var storyboardName: String {return "Redeem"} + + func getMainView() -> UIViewController { + let service = RedeemService() + let interactor = RedeemInteractor(service: service) + let presenter = RedeemPresenter(with: self.model) + let viewController = viewControllerFromStoryboard(of: RedeemViewController.self) - var storyboardName: String {return "Redeem"} + viewController.presenter = presenter + interactor.output = presenter + presenter.interactor = interactor + presenter.wireframe = self + presenter.view = viewController - func getMainView() -> UIViewController { - let service = RedeemService() - let interactor = RedeemInteractor(service: service) - let presenter = RedeemPresenter(with: self.model) - let viewController = viewControllerFromStoryboard(of: RedeemViewController.self) - - viewController.presenter = presenter - interactor.output = presenter - presenter.interactor = interactor - presenter.wireframe = self - presenter.view = viewController - - self.view = viewController - return viewController - } + view = viewController + return viewController + } + + func pushMainViewWithModel(with model: RewardProduct?, in source: UINavigationController) { + self.model = model + pushMainView(in: source) + } + + func showSearchAddressVC(){ + let wireframe = SearchAddressWireframe() + guard let delegate = view as? SearchAddressDelegate else {return} - func pushMainViewWithModel(with model: RewardProduct?, in source: UINavigationController) { - self.model = model - self.pushMainView(in: source) - } - func showSearchAddressVC(){ - let wireframe = SearchAddressWireframe() - guard let delegate = self.view as? SearchAddressDelegate else {return} - - - wireframe.openViewControllerWithNavigationWithDelegate( - delegate: delegate, - viewController: wireframe.getMainView(), - source: self.view - ) - } - - func showBranchesVC() { - let wireframe = GmeContactsWireframe() - let vc = wireframe.getMainView() - - wireframe.openViewControllerWithNavigation(viewController: vc, source: self.view) - } - - func goRewardVC() { - self.view.navigationController?.popToRootViewController(animated: true) - } + wireframe.openViewControllerWithNavigationWithDelegate( + delegate: delegate, + viewController: wireframe.getMainView(), + source: view + ) + } + + func showBranchesVC(){ + let wireframe = GmeContactsWireframe() + let vc = wireframe.getMainView() + wireframe.openViewControllerWithNavigation(viewController: vc, source: view) + } + + func goRewardVC() { + view.navigationController?.popToRootViewController(animated: true) + } + } diff --git a/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframeInput.swift b/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframeInput.swift index 54832977..50eda015 100644 --- a/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframeInput.swift +++ b/GMERemittance/Module/RewardModules/Redeem/User Interface/Wireframe/RedeemWireframeInput.swift @@ -9,8 +9,8 @@ import Foundation protocol RedeemWireframeInput: WireframeInput { - func pushMainViewWithModel(with model: RewardProduct?, in source: UINavigationController) - func showSearchAddressVC() - func showBranchesVC() - func goRewardVC() + func pushMainViewWithModel(with model: RewardProduct?, in source: UINavigationController) + func showSearchAddressVC() + func showBranchesVC() + func goRewardVC() } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractor.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractor.swift index 480fff3b..61beefae 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractor.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractor.swift @@ -9,30 +9,30 @@ import Foundation class RewardInteractor { - - // MARK: Properties - - weak var output: RewardInteractorOutput? - private let service: RewardServiceType - - // MARK: Initialization - - init(service: RewardServiceType) { - self.service = service - } - - // MARK: Converting entities + + // MARK: Properties + + weak var output: RewardInteractorOutput? + private let service: RewardServiceType + + // MARK: Initialization + + init(service: RewardServiceType) { + self.service = service + } + + // MARK: Converting entities } // MARK: Reward interactor input interface extension RewardInteractor: RewardInteractorInput { - func viewIsReady() { - service.fetchProductList( - success: { - self.output?.setRewardProducts(models: $0) - }) { - self.output?.failure(error: $0) - } + func viewIsReady() { + service.fetchProductList( + success: { + self.output?.setRewardProducts(models: $0) + }) { + self.output?.failure(error: $0) } + } } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractorIO.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractorIO.swift index 97cd02ee..da291bb2 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractorIO.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Interactor/RewardInteractorIO.swift @@ -7,10 +7,10 @@ // protocol RewardInteractorInput: class { - func viewIsReady() + func viewIsReady() } protocol RewardInteractorOutput: class { - func setRewardProducts(models: [RewardProduct]?) - func failure(error: Error) + func setRewardProducts(models: [RewardProduct]?) + func failure(error: Error) } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift index 0cd07974..4cc98523 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProduct.swift @@ -10,20 +10,20 @@ import Foundation import ObjectMapper struct RewardProduct: Mappable { - var productNumber: String? //productNumber - var productName: String? //productName, - var pointPrice: String? //pointPrice - var deliveryYN: String? //deliveryYN - var imageData: String? //imageData - init?(map: Map) { - - } + var productCode: String? //productNumber + var productName: String? //productName, + var pointPrice: String? //pointPrice + var deliverYN: String? //deliveryYN + var productImgPath: String? //imageData + init?(map: Map) { - mutating func mapping(map: Map) { - self.productNumber <- map["productNumber"] - self.productName <- map["productName"] - self.pointPrice <- map["pointPrice"] - self.deliveryYN <- map["deliveryYN"] - self.imageData <- map["imageData"] - } + } + + mutating func mapping(map: Map) { + productCode <- map["productCode"] + productName <- map["productName"] + pointPrice <- map["pointPrice"] + deliverYN <- map["deliverYN"] + productImgPath <- map["productImgPath"] + } } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProductContainer.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProductContainer.swift index e47d6933..1b8a497f 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProductContainer.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Model/RewardProductContainer.swift @@ -10,24 +10,24 @@ import Foundation import ObjectMapper struct RewardProductContainer: Mappable { - var errorCode: String? //ErrorCode - var msg: String? //Msg - var id: String? //Id - var extra: String? //Extra - var extra2: String? //Extra2 - var data: [RewardProduct]? // Data - - init?(map: Map) { - - } - - mutating func mapping(map: Map) { - errorCode <- map["ErrorCode"] - msg <- map["Msg"] - id <- map["Id"] - extra <- map["Extra"] - extra2 <- map["Extra2"] - data <- map["Data"] - } + var errorCode: String? //ErrorCode + var msg: String? //Msg + var id: String? //Id + var extra: String? //Extra + var extra2: String? //Extra2 + var data: [RewardProduct]? // Data + + init?(map: Map) { + } + + mutating func mapping(map: Map) { + errorCode <- map["ErrorCode"] + msg <- map["Msg"] + id <- map["Id"] + extra <- map["Extra"] + extra2 <- map["Extra2"] + data <- map["Data"] + } + } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift index cd05d07d..1fc49b1f 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardService.swift @@ -9,32 +9,32 @@ import Foundation class RewardService: RewardServiceType { - - // MARK: Properties - - // MARK: Initialization - - // MARK: Data management - - // /api/v2/reward/productList - func fetchProductList( - success: @escaping ([RewardProduct]?) -> (), - failure: @escaping (Error) -> () + + // MARK: Properties + + // MARK: Initialization + + // MARK: Data management + + // /api/v2/reward/productList + func fetchProductList( + success: @escaping ([RewardProduct]?) -> (), + failure: @escaping (Error) -> () ) { -// let url = baseUrl + "/reward/productList" -// let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productList" - let url = baseUrlWithoutVersion + "/v2/reward/productList" - - auth.request(method: .post, url: url, params: nil, success: { (response: RewardProductContainer) in - if (response.errorCode ?? "") == "1" { - let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.msg ?? ""]) - failure(error) - }else { - let model = response.data - success(model) - } - }) { (error) in - failure(error) - } + // let url = baseUrl + "/reward/productList" + // let url = "http://gmeuat.gmeremit.com:5018/api/v2/reward/productList" + let url = baseUrlWithoutVersion + "/v2/reward/productList" + + auth.request(method: .post, url: url, params: nil, success: { (response: RewardProductContainer) in + if (response.errorCode ?? "") == "1" { + let error = NSError.init(domain: "Network", code: 0, userInfo: [NSLocalizedDescriptionKey : response.msg ?? ""]) + failure(error) + }else { + let model = response.data + success(model) + } + }) { (error) in + failure(error) } + } } diff --git a/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardServiceType.swift b/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardServiceType.swift index 076921ae..f74dc868 100644 --- a/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardServiceType.swift +++ b/GMERemittance/Module/RewardModules/Reward/Application Logic/Service/RewardServiceType.swift @@ -9,10 +9,10 @@ import Foundation protocol RewardServiceType: class, ApiServiceType { - func fetchProductList( - success: @escaping ([RewardProduct]?) -> (), - failure: @escaping (Error) -> () - ) - - + func fetchProductList( + success: @escaping ([RewardProduct]?) -> (), + failure: @escaping (Error) -> () + ) + + } diff --git a/GMERemittance/Module/RewardModules/Reward/Module Interface/RewardModuleInterface.swift b/GMERemittance/Module/RewardModules/Reward/Module Interface/RewardModuleInterface.swift index a6790760..76b94419 100644 --- a/GMERemittance/Module/RewardModules/Reward/Module Interface/RewardModuleInterface.swift +++ b/GMERemittance/Module/RewardModules/Reward/Module Interface/RewardModuleInterface.swift @@ -7,6 +7,6 @@ // protocol RewardModuleInterface: class { - func viewIsReady() - func goRedeemViewController(with model: RewardProduct?) + func viewIsReady() + func goRedeemViewController(with model: RewardProduct?) } diff --git a/GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift b/GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift index 96ce4ac5..c88d774b 100644 --- a/GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift +++ b/GMERemittance/Module/RewardModules/Reward/User Interface/Presenter/RewardPresenter.swift @@ -9,39 +9,39 @@ import Foundation class RewardPresenter { - - // MARK: Properties - - weak var view: RewardViewInterface? - var interactor: RewardInteractorInput? - var wireframe: RewardWireframeInput? - - // MARK: Converting entities + + // MARK: Properties + + weak var view: RewardViewInterface? + var interactor: RewardInteractorInput? + var wireframe: RewardWireframeInput? + + // MARK: Converting entities } // MARK: Reward module interface extension RewardPresenter: RewardModuleInterface { - func viewIsReady() { - self.view?.startLoading() - self.interactor?.viewIsReady() - } - - func goRedeemViewController(with model: RewardProduct?) { - self.wireframe?.goRedeemViewController(with: model) - } + func viewIsReady() { + view?.startLoading() + interactor?.viewIsReady() + } + + func goRedeemViewController(with model: RewardProduct?) { + wireframe?.goRedeemViewController(with: model) + } } // MARK: Reward interactor output interface extension RewardPresenter: RewardInteractorOutput { - func setRewardProducts(models: [RewardProduct]?) { - self.view?.endLoading() - self.view?.setRewardProducts(models: models) - } - - func failure(error: Error) { - self.view?.endLoading() - self.view?.failure(error: error) - } + func setRewardProducts(models: [RewardProduct]?) { + view?.endLoading() + view?.setRewardProducts(models: models) + } + + func failure(error: Error) { + view?.endLoading() + view?.failure(error: error) + } } diff --git a/GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift b/GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift index b3b074f6..e87060c5 100644 --- a/GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift +++ b/GMERemittance/Module/RewardModules/Reward/User Interface/View/Cell/RewardItemCollectionViewCell.swift @@ -21,22 +21,15 @@ class RewardItemCollectionViewCell: UICollectionViewCell { var delegate: RewardViewInterface? func setModel(with model: RewardProduct?, delegate: RewardViewInterface?){ - // TODO: 서버 이미지 처리 완료시 수정 - // guard - // let product = model, - // let imageData = model?.imageData, - // let url = URL(string: imageData), - // let data = try? Data(contentsOf: url) - // else { return } - // self.itemImage.image = UIImage(data: data) - guard - let product = model - else { return } + if let imageData = model?.productImgPath, + let url = URL(string: imageData), + let data = try? Data(contentsOf: url) { + self.itemImage.image = UIImage(data: data) + } + self.itemNameLabel.text = model?.productName + self.itemPriceLabel.text = model?.pointPrice - self.itemNameLabel.text = product.productName - self.itemPriceLabel.text = product.pointPrice - - self.model = product + self.model = model self.delegate = delegate self.setUI() @@ -49,7 +42,7 @@ class RewardItemCollectionViewCell: UICollectionViewCell { } func setButton(){ - self.redeemButton.rounded() + self.redeemButton.layer.cornerRadius = 10 self.redeemButton.addTarget(self, action: #selector(redeemButtonTouch), for: .touchUpInside) let totalPoint = UserDefaults.standard.integer(forKey: UserKeys.rewardPoint) diff --git a/GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard b/GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard index 96637b10..3d391326 100644 --- a/GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard +++ b/GMERemittance/Module/RewardModules/Reward/User Interface/View/Reward.storyboard @@ -106,7 +106,7 @@ - + @@ -118,8 +118,8 @@ - -