diff --git a/GME Remit.xcodeproj/project.pbxproj b/GME Remit.xcodeproj/project.pbxproj index 942b2939..e1ff8b5e 100644 --- a/GME Remit.xcodeproj/project.pbxproj +++ b/GME Remit.xcodeproj/project.pbxproj @@ -245,6 +245,7 @@ 73210DAF22FBF2BA00715D6C /* ViewModelType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73210DAE22FBF2BA00715D6C /* ViewModelType.swift */; }; 73210DB122FBF4B000715D6C /* ObservableType+Ext.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73210DB022FBF4B000715D6C /* ObservableType+Ext.swift */; }; 73210DB522FC01C200715D6C /* RecipientCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73210DB422FC01C200715D6C /* RecipientCell.swift */; }; + 73265B4F23BAEC90007BA388 /* KJBank.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73265B4E23BAEC90007BA388 /* KJBank.swift */; }; 7327567F23B0456400BF66C5 /* ManageAgreementServiceType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7327567123B0456300BF66C5 /* ManageAgreementServiceType.swift */; }; 7327568023B0456400BF66C5 /* ManageAgreementService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7327567223B0456300BF66C5 /* ManageAgreementService.swift */; }; 7327568123B0456400BF66C5 /* ManageAgreementInteractorIO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7327567423B0456300BF66C5 /* ManageAgreementInteractorIO.swift */; }; @@ -2654,6 +2655,7 @@ 73210DAE22FBF2BA00715D6C /* ViewModelType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModelType.swift; sourceTree = ""; }; 73210DB022FBF4B000715D6C /* ObservableType+Ext.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ObservableType+Ext.swift"; sourceTree = ""; }; 73210DB422FC01C200715D6C /* RecipientCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecipientCell.swift; sourceTree = ""; }; + 73265B4E23BAEC90007BA388 /* KJBank.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KJBank.swift; sourceTree = ""; }; 7327567123B0456300BF66C5 /* ManageAgreementServiceType.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManageAgreementServiceType.swift; sourceTree = ""; }; 7327567223B0456300BF66C5 /* ManageAgreementService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManageAgreementService.swift; sourceTree = ""; }; 7327567423B0456300BF66C5 /* ManageAgreementInteractorIO.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManageAgreementInteractorIO.swift; sourceTree = ""; }; @@ -7045,6 +7047,7 @@ 738D7284239F32C7006B4EA7 /* PictureInformation.swift */, 73ABF00E23A06F0500E2C5B9 /* PropertyUtility.swift */, 733CC36223A1D96A0027DDF9 /* KYCSave.swift */, + 73265B4E23BAEC90007BA388 /* KJBank.swift */, ); path = Model; sourceTree = ""; @@ -15942,6 +15945,7 @@ 736A8C472277EB2A00337A50 /* BiometricNotificationWireframe.swift in Sources */, 730D7891227A94E1007E517E /* RewardWireframe.swift in Sources */, 7389601322C2F208003FEA90 /* TablePresenterViewInterface.swift in Sources */, + 73265B4F23BAEC90007BA388 /* KJBank.swift in Sources */, D9031146214786EA00AD5BA9 /* ForgotPasswordViewInterface.swift in Sources */, 7301979922535135001954AB /* kycForm1InteractorIO.swift in Sources */, D946719B21426DFB003924DB /* LoginWireframe.swift in Sources */, diff --git a/GME Remit/APIs/Router/APIRouter.swift b/GME Remit/APIs/Router/APIRouter.swift index 286d328b..b959ba39 100644 --- a/GME Remit/APIs/Router/APIRouter.swift +++ b/GME Remit/APIs/Router/APIRouter.swift @@ -80,6 +80,7 @@ enum APIRouter { case loadKYCInformation case saveKYCInformation(model: KYCSave) case requestPennyTestAtRegister(resend: String) + case pennyTestSubmitAtRegister(accountNumber: String, certNumber: String) case fetchKFTCParameterForRegister } @@ -496,6 +497,8 @@ extension APIRouter { case .fetchKFTCParameterForRegister: let userID = GMEDB.shared.user.string(.userId) ?? "" return "\(baseUrlWithoutVersion)/v4/GetKftcParameters/\(userID)" + case .pennyTestSubmitAtRegister: + return "\(baseUrl)/mobile/pennytest/getcertified" } } } @@ -584,6 +587,8 @@ extension APIRouter { return .post case .fetchKFTCParameterForRegister: return .get + case .pennyTestSubmitAtRegister: + return .post } } @@ -904,6 +909,14 @@ extension APIRouter { "branchId": model.primaryInformation?.branchID ?? "", "refferalCode": model.primaryInformation?.refferalCode ?? "" ] + + case .pennyTestSubmitAtRegister(let accountNumber, let certNumber): + let senderID = GMEDB.shared.user.string(.senderId) ?? "" + return [ + "AccountNo": accountNumber, + "CertNumber": certNumber, + "CustomerId": senderID + ] default: return nil } diff --git a/GME Remit/Models/Response/SuccessMessage.swift b/GME Remit/Models/Response/SuccessMessage.swift index f1729d9d..7558bccf 100644 --- a/GME Remit/Models/Response/SuccessMessage.swift +++ b/GME Remit/Models/Response/SuccessMessage.swift @@ -14,6 +14,10 @@ class SuccessMessage: Mappable { var extra: String? var yearlyLimit: String? + init() { + + } + required init?(map: Map) { } diff --git a/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift b/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift index 625549bd..c40f36ec 100644 --- a/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift +++ b/GME Remit/Modules/Home/User Interface/View/HomeViewController.swift @@ -103,9 +103,6 @@ class HomeViewController: UIViewController { destination = nil } - - // FIXME: Test - self.presenter?.showKyc(step: .first) } } var sections: [Sections] = [.balance, .collection] diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Interactor/NewRegisterInteractor.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Interactor/NewRegisterInteractor.swift index ccdd7bbe..8f42d2a3 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Interactor/NewRegisterInteractor.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Interactor/NewRegisterInteractor.swift @@ -28,7 +28,7 @@ class NewRegisterInteractor { extension NewRegisterInteractor: NewRegisterInteractorInput { func requestPennyTest() { service.requestPennyTest( - isResendRequest: "N", + isResendRequest: .no, success: {[weak self] in self?.output?.resultRequestPennyTest(with: $0) }, diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterService.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterService.swift index 65ed7146..ce8ce55e 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterService.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterService.swift @@ -9,12 +9,17 @@ import Foundation class NewRegisterService: NewRegisterServiceType { + enum ResendType: String { + case no = "N" + case yes = "Y" + } + func requestPennyTest( - isResendRequest: String, + isResendRequest: ResendType, success: @escaping (SuccessMessage) -> Void, failure: @escaping (Error) -> Void - ) { - APIRouter.requestPennyTestAtRegister(resend: isResendRequest) + ) { + APIRouter.requestPennyTestAtRegister(resend: isResendRequest.rawValue) .json(success: success, failure: failure) } } diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterServiceType.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterServiceType.swift index ba26afe9..da0058a6 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterServiceType.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/Application Logic/Service/NewRegisterServiceType.swift @@ -8,7 +8,7 @@ protocol NewRegisterServiceType: class { func requestPennyTest( - isResendRequest: String, + isResendRequest: NewRegisterService.ResendType, success: @escaping (SuccessMessage) -> Void, failure: @escaping (Error) -> Void ) diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Presenter/NewRegisterPresenter.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Presenter/NewRegisterPresenter.swift index 5d2a5004..ed97eca5 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Presenter/NewRegisterPresenter.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Presenter/NewRegisterPresenter.swift @@ -31,8 +31,6 @@ class NewRegisterPresenter: ViewModelType { input.moveStep.drive(onNext: {[weak self] in switch $0 { case .third: - //GMEDB.shared.user.string(.pennyTestRequested) - // Check penny test request status. if 0 then request api, else 2 then go next step. let status = GMEDB.shared.user.string(.pennyTestStatusCode) ?? "0" if status == "1" { self?.wireframe?.moveStep(to: $0) diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift index edde762c..ce77a0b9 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegister/User Interface/Wireframe/NewRegisterWireframe.swift @@ -9,6 +9,7 @@ import UIKit import RxSwift import RxCocoa +import LGSideMenuController class NewRegisterWireframe { weak var view: UIViewController! @@ -61,7 +62,14 @@ extension NewRegisterWireframe: NewRegisterWireframeInput { switch step { case .first: move(step1VC) case .second: move(step2VC) - case .third: move(step3VC) + case .third: + view.alert( + message: "To verify your bank account, move to the last step, the penny test" + ) { [weak self] in + guard let `self` = self else { return } + self.move(self.step3VC) + } + case .finish: let message = """ Thank you for registering for GME. @@ -74,8 +82,18 @@ Once approved, you will receive SMS. message: message, title: "Success", okTitle: "Ok" - ) {[weak self] in - self?.view.navigationController?.popToRootViewController(animated: false) + ) {[weak self] in + guard let `self` = self else {return} + + if self.view.presentingViewController != nil { + GMEDB.shared.user.set(PennyTestStatusCode.completed.rawValue, .pennyTestStatusCode) + self.view.dismiss(animated: true) { + + } + } else { + GMEDB.shared.user.set(PennyTestStatusCode.completed.rawValue, .pennyTestStatusCode) + self.doLogin() + } } } } @@ -86,9 +104,12 @@ Once approved, you will receive SMS. } currentVC?.willMove(toParent: nil) - nextVC.view.translatesAutoresizingMaskIntoConstraints = false + currentVC?.removeFromParent() + currentVC?.view.removeFromSuperview() + nextVC.view.translatesAutoresizingMaskIntoConstraints = false parentVC.addChild(nextVC) + addSubview(subView: nextVC.view, toView: parentVC.containerView) if currentVC?.view.tag ?? 0 < nextVC.view.tag { @@ -125,6 +146,68 @@ Once approved, you will receive SMS. subView.bottomAnchor.constraint(equalTo: parentView.bottomAnchor).isActive = true subView.trailingAnchor.constraint(equalTo: parentView.trailingAnchor).isActive = true } + + private func doLogin() { + + let loginService = LoginService() + + guard let userID = KeyChain.shared.get(key: .temporaryID), + let password = KeyChain.shared.get(key: .temporaryPW) else { + return + } + + view.showProgressHud(backgroundColor: .clear, loadingColor: .white, textColor: .white) + + loginService.accessCode( + userId: userID, + password: password, + success: { [weak self] (user) in + guard let `self` = self else { return } + + KeyChain.shared.remove(key: .temporaryID) + KeyChain.shared.remove(key: .temporaryPW) + + let accessCode = user?.accessCode ?? "" + let accessCodeBase64 = accessCode + + Utility.save(user: user, accessCodeBase64: accessCodeBase64, password: password, login: true) + + let mainWireFrame = MainWireframe.shared + let tabBarViewController = mainWireFrame?.getMainView() + guard let sidemenuVc = UIStoryboard(name: "SideMenu", bundle: nil).instantiateViewController( + withIdentifier: "SideMenuViewController" + ) as? SideMenuViewController else { + return + } + + let sideMenuController = LGSideMenuController( + rootViewController: tabBarViewController, + leftViewController: sidemenuVc, + rightViewController: nil + ) + + sideMenuController.rootViewLayerShadowColor = UIColor(white: 0.9, alpha: 0.6) + sideMenuController.rootViewLayerShadowRadius = 8.0 + sideMenuController.leftViewPresentationStyle = .scaleFromBig + sideMenuController.leftViewWidth = UIScreen.main.bounds.width - 70.0 + + sideMenuController.leftViewBackgroundBlurEffect = UIBlurEffect(style: .regular) + + self.view.hideProgressHud() + mainWireFrame?.window?.backgroundColor = sidemenuVc.view.backgroundColor + mainWireFrame?.window?.rootViewController = sideMenuController + + }, + failure: { (error) in + self.view.hideProgressHud() + self.view.alert(type: .error, message: error.localizedDescription, title: "Warning") { + // if failed login, remove all in keychain, change logout status and then go splash screen + KeyChain.shared.removeAll() + self.view.navigationController?.popToRootViewController(animated: false) + } + } + ) + } } extension NewRegisterWireframe: NewRegisterDelegate { diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Interactor/NewRegisterStep1Interactor.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Interactor/NewRegisterStep1Interactor.swift index 8cba4395..153aad2a 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Interactor/NewRegisterStep1Interactor.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Interactor/NewRegisterStep1Interactor.swift @@ -44,6 +44,16 @@ extension NewRegisterStep1Interactor: NewRegisterStep1InteractorInput { service.saveInformation( with: model, success: {[weak self] in + if model.type == 1 { // primary information + if let bankCode = model.primaryInformation?.bankID, + let bankAccount = model.primaryInformation?.bankAccount, + let bankName = model.primaryInformation?.bankName { + KeyChain.shared.save(data: bankCode, key: .bankCode) + KeyChain.shared.save(data: bankAccount, key: .bankAccount) + KeyChain.shared.save(data: bankName, key: .bankName) + } + } + self?.output?.setSaveResult(with: self?.saveModel, message: $0) }, failure: {[weak self] in diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KJBank.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KJBank.swift new file mode 100644 index 00000000..041676ea --- /dev/null +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KJBank.swift @@ -0,0 +1,35 @@ +// +// KJBank.swift +// GME Remit +// +// Created by InKwon James Kim on 2019/12/31. +// Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. +// + +import ObjectMapper +struct KJBank: Mappable { + var id: String? + var value: String? + + init(id: String, value: String) { + self.id = id + self.value = value + } + + init?(map: Map) {} + + mutating func mapping(map: Map) { + id <- map["id"] + value <- map["text"] + } +} + +extension KJBank: TablePresenterProtocol { + var cellTitle: String? { + return value + } + + var cellImage: UIImage? { + return BankEnum.getBankCIFromKJBank(kjBankCode: id ?? "") + } +} diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KYCInfromation.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KYCInfromation.swift index 9f273760..ddfe496b 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KYCInfromation.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/KYCInfromation.swift @@ -10,7 +10,7 @@ import ObjectMapper struct KYCInformation: Mappable { var cities: [KeyValue]? - var banks: [KeyValue]? + var banks: [KJBank]? var idTypes: [KeyValue]? var branches: [KeyValue]? diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/PrimaryInformation.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/PrimaryInformation.swift index df62969c..08b3b7d6 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/PrimaryInformation.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/Application Logic/Model/PrimaryInformation.swift @@ -9,6 +9,7 @@ import ObjectMapper struct PrimaryInformation: Mappable { + var bankName: String? var bankID: String? var bankAccount: String? var passportNumber: String? @@ -22,6 +23,7 @@ struct PrimaryInformation: Mappable { var refferalCode: String? init( + bankName: String?, bankID: String?, bankAccount: String?, passportNumber: String?, @@ -34,6 +36,7 @@ struct PrimaryInformation: Mappable { branchID: String?, refferalCode: String? ) { + self.bankName = bankName self.bankID = bankID self.bankAccount = bankAccount self.passportNumber = passportNumber diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/Presenter/NewRegisterStep1Presenter.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/Presenter/NewRegisterStep1Presenter.swift index 9b0d70f6..a717b613 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/Presenter/NewRegisterStep1Presenter.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/Presenter/NewRegisterStep1Presenter.swift @@ -34,7 +34,7 @@ class NewRegisterStep1Presenter: ViewModelType { let personalInfoSave: Driver let editingPersonalInfo: Driver - let bankName: Driver + let bankName: Driver let bankAccount: Driver let passportNumber: Driver let passportIssueDate: Driver @@ -65,7 +65,7 @@ class NewRegisterStep1Presenter: ViewModelType { let model: Driver let cities: Driver<[KeyValue]?> - let banks: Driver<[KeyValue]?> + let banks: Driver<[KJBank]?> let idTypes: Driver<[KeyValue]?> let branches: Driver<[KeyValue]?> @@ -116,31 +116,33 @@ class NewRegisterStep1Presenter: ViewModelType { input.bankAccount, input.passportNumber, input.passportIssueDate, - input.passportExpiryDate, - input.anotherIDType, - input.anotherIDNumber - ).map { (isValid, bank, account, passportNumber, passportIssue, passportExpiry, idType, idNumber) -> - PrimaryInformation? in - return isValid ? PrimaryInformation( + input.passportExpiryDate + ).map { (isValid, bank, account, passportNumber, passportIssue, passportExpiry) -> + PrimaryInformation? in return isValid ? PrimaryInformation( + bankName: bank?.value, bankID: bank?.id, bankAccount: account, passportNumber: passportNumber, passportIssueDate: passportIssue, passportExpiryDate: passportExpiry, - anotherIDType: idType?.id ?? "", - anotherIDNumber: idNumber, + anotherIDType: nil, + anotherIDNumber: nil, anotherIDIssueDate: nil, anotherIDExpiryDate: nil, branchID: nil, refferalCode: nil - ) : nil + ) : nil }, + input.anotherIDType, + input.anotherIDNumber, input.anotherIDIssueDate, input.anotherIDExpiryDate, input.branch, input.referralCode - ).map { (info, issueDate, expiryDate, branch, referralCode) -> PrimaryInformation? in + ).map { (info, idType, idNumber, issueDate, expiryDate, branch, referralCode) -> PrimaryInformation? in var primaryInfo = info + primaryInfo?.anotherIDType = idType?.id ?? "" + primaryInfo?.anotherIDNumber = idNumber primaryInfo?.anotherIDIssueDate = issueDate primaryInfo?.anotherIDExpiryDate = expiryDate primaryInfo?.branchID = branch?.id @@ -172,6 +174,7 @@ class NewRegisterStep1Presenter: ViewModelType { .map {$0 && $1 != nil} input.viewWillAppear.drive(onNext: { [weak self] in + self?.progressLinker.onNext(true) self?.interactor?.fetchInformation() }).disposed(by: disposeBag) @@ -292,6 +295,8 @@ class NewRegisterStep1Presenter: ViewModelType { // MARK: NewRegisterStep1 interactor output interface extension NewRegisterStep1Presenter: NewRegisterStep1InteractorOutput { func setModel(with model: KYCInformation) { + progressLinker.onNext(false) + storedPersonalInfo.onNext(model.personalInformation) storedPrimaryInfo.onNext(model.primaryInformation) storedPictureInformation.onNext(model.pictures) diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1.storyboard b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1.storyboard index 26b5dcc8..76c130ee 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1.storyboard +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep1/User Interface/View/NewRegisterStep1.storyboard @@ -401,7 +401,7 @@ + @@ -190,7 +206,7 @@ enter the 4 digit number display after GME. - + diff --git a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep3/User Interface/View/NewRegisterStep3ViewController.swift b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep3/User Interface/View/NewRegisterStep3ViewController.swift index d77b9211..7c75fec2 100644 --- a/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep3/User Interface/View/NewRegisterStep3ViewController.swift +++ b/GME Remit/Modules/RegisterModules/UserAuthentication/NewRegisterStep3/User Interface/View/NewRegisterStep3ViewController.swift @@ -9,6 +9,8 @@ import UIKit import RxSwift import RxCocoa +import PMAlertController +import LGSideMenuController class NewRegisterStep3ViewController: UIViewController { @@ -20,15 +22,17 @@ class NewRegisterStep3ViewController: UIViewController { // MARK: Computed Properties // MARK: IBOutlets - @IBOutlet weak var bankImageView: UIImageView! - @IBOutlet weak var bankNameLabel: UILabel! - @IBOutlet weak var bankAccountLabel: UILabel! + @IBOutlet private weak var bankImageView: UIImageView! + @IBOutlet private weak var bankNameLabel: UILabel! + @IBOutlet private weak var bankAccountLabel: UILabel! - @IBOutlet weak var depositLabel: UILabel! - @IBOutlet weak var codeTextField: UITextField! + @IBOutlet private weak var depositLabel: UILabel! + @IBOutlet private weak var codeTextField: UITextField! + + @IBOutlet private weak var sampleButton: UIButton! + @IBOutlet private weak var resendButton: UIButton! + @IBOutlet private weak var submitButton: UIButton! - @IBOutlet weak var resendButton: UIButton! - @IBOutlet weak var submitButton: UIButton! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() @@ -37,14 +41,44 @@ class NewRegisterStep3ViewController: UIViewController { override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) + guard + let bankName = KeyChain.shared.get(key: .bankName), + let bankCode = KeyChain.shared.get(key: .bankCode), + let bankAccount = KeyChain.shared.get(key: .bankAccount) else { return } + + bankAccountLabel.text = bankAccount + bankImageView.image = BankEnum.getBankCIFromKJBank(kjBankCode: bankCode) + bankNameLabel.text = bankName + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + codeTextField.becomeFirstResponder() } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) + view.endEditing(true) + } + + override func willMove(toParent parent: UIViewController?) { + if parent != nil { + viewWillAppear(true) + } else { + viewWillDisappear(true) + } + } + + override func didMove(toParent parent: UIViewController?) { + if parent != nil { + viewDidAppear(true) + } else { + viewDidDisappear(true) + } } // MARK: IBActions - + } // MARK: Other Functions @@ -61,24 +95,56 @@ extension NewRegisterStep3ViewController { } private func setUIBinding() { - submitButton.rx.tap.bind {[weak self] in - guard let `self` = self else {return} - self.delegate?.newRegister(self, currentStep: .third, nextStep: .finish) - }.disposed(by: disposeBag) + sampleButton.rx.tap.bind {[weak self] in + self?.showSample() + }.disposed(by: disposeBag) + + codeTextField.rx.text.orEmpty + .map {$0.count == 4} + .asDriverOnErrorJustComplete() + .map {[weak self] in + self?.submitButton.backgroundColor = $0 ? .themeRed : .lightGray + return $0 + } + .drive(submitButton.rx.isEnabled) + .disposed(by: disposeBag) } - + private func setBinding() { - let input = NewRegisterStep3Presenter.Input() + let input = NewRegisterStep3Presenter.Input( + resendTrigger: resendButton.rx.tap.mapToVoid(), + certNumber: codeTextField.rx.text.orEmpty.asObservable(), + submitTrigger: submitButton.rx.tap.mapToVoid() + ) let output = presenter.transform(input: input) - + output.isError - .drive( - onNext: { self.alert(type: .error, message: $0.localizedDescription) } + .drive( + onNext: { self.alert(type: .error, message: $0.localizedDescription) } ).disposed(by: disposeBag) output.isProgress - .drive( - onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } + .drive( + onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() } ).disposed(by: disposeBag) + + output.resendMessage.drive(onNext: {[weak self] in + self?.alert(message: $0) + }).disposed(by: disposeBag) + + output.submitMessage.drive(onNext: {[weak self] _ in + guard let `self` = self else {return} + self.delegate?.newRegister(self, currentStep: .third, nextStep: .finish) + }).disposed(by: disposeBag) + } + + private func showSample() { + let image = #imageLiteral(resourceName: "penny3") + // show alert + let alertVC = PMAlertController(title: "", description: "", image: image, style: .alert) + alertVC.alertView.layer.cornerRadius = 5 + let action = PMAlertAction(title: "ok_text".localized(), style: .cancel) + alertVC.addAction(action) + self.present(alertVC, animated: true, completion: nil) } } diff --git a/GME Remit/Modules/SideMenu/SideMenu.storyboard b/GME Remit/Modules/SideMenu/SideMenu.storyboard index 7f7c43dc..f8d8fe15 100644 --- a/GME Remit/Modules/SideMenu/SideMenu.storyboard +++ b/GME Remit/Modules/SideMenu/SideMenu.storyboard @@ -186,10 +186,6 @@ - - - - @@ -416,6 +412,10 @@ + + + + diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/Contents.json new file mode 100644 index 00000000..83ecf20b --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "deutsche.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/deutsche.png b/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/deutsche.png new file mode 100644 index 00000000..48d59af0 Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/bankCI/deutsche.imageset/deutsche.png differ diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/Contents.json new file mode 100644 index 00000000..3d3ea114 --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "epost.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/epost.png b/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/epost.png new file mode 100644 index 00000000..ad24ad3b Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/bankCI/epost.imageset/epost.png differ diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/Contents.json new file mode 100644 index 00000000..fbd99465 --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "hsbc.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/hsbc.png b/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/hsbc.png new file mode 100644 index 00000000..c7ba68fa Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/bankCI/hsbc.imageset/hsbc.png differ diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/Contents.json new file mode 100644 index 00000000..64bd0363 --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "kfcc.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/kfcc.png b/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/kfcc.png new file mode 100644 index 00000000..6b0a9d79 Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/bankCI/kfcc.imageset/kfcc.png differ diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/Contents.json b/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/Contents.json new file mode 100644 index 00000000..cfaeaba5 --- /dev/null +++ b/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "shinhyup.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/shinhyup.png b/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/shinhyup.png new file mode 100644 index 00000000..966c6740 Binary files /dev/null and b/GME Remit/Supported Files/Assets.xcassets/bankCI/shinhyup.imageset/shinhyup.png differ diff --git a/GME Remit/Utilities/BankEnum.swift b/GME Remit/Utilities/BankEnum.swift index db27cb9b..bc6de655 100644 --- a/GME Remit/Utilities/BankEnum.swift +++ b/GME Remit/Utilities/BankEnum.swift @@ -71,4 +71,65 @@ extension BankEnum { return #imageLiteral(resourceName: "wsb") } } + + static func getBankCIFromKJBank(kjBankCode code: String) -> UIImage { + switch code { + case "20": + return BankEnum.bs.ciImage + case "18": + return BankEnum.ct.ciImage + case "11": + return #imageLiteral(resourceName: "shinhyup") + case "5": + return BankEnum.dgb.ciImage + case "6": + return #imageLiteral(resourceName: "deutsche") + case "19": + return #imageLiteral(resourceName: "hsbc") + case "3": + return BankEnum.ibk.ciImage + case "17": + return BankEnum.jj.ciImage + case "15": + return BankEnum.jb.ciImage + case "28": + return BankEnum.kbank.ciImage + case "29": + return BankEnum.kakao.ciImage + case "13": + return BankEnum.keb.ciImage + case "26": + return BankEnum.keb.ciImage + case "2": + return BankEnum.kb.ciImage + case "24": + return BankEnum.kb.ciImage + case "7": + return BankEnum.kdb.ciImage + case "8": + return #imageLiteral(resourceName: "kfcc") + case "14": + return #imageLiteral(resourceName: "epost") + case "1": + return BankEnum.kj.ciImage + case "25": + return BankEnum.kn.ciImage + case "4": + return BankEnum.nh.ciImage + case "23": + return BankEnum.nh.ciImage + case "10": + return BankEnum.sh.ciImage + case "16": + return BankEnum.sc.ciImage + case "9": + return BankEnum.slc.ciImage + case "27": + return BankEnum.wsb.ciImage + case "21": + return BankEnum.wr.ciImage + default: + return #imageLiteral(resourceName: "ic_koreaBank") + } + } } diff --git a/GME Remit/Utilities/KeyChain.swift b/GME Remit/Utilities/KeyChain.swift index 268aa74a..c23de0c1 100644 --- a/GME Remit/Utilities/KeyChain.swift +++ b/GME Remit/Utilities/KeyChain.swift @@ -18,6 +18,9 @@ final class KeyChain { case login case temporaryID case temporaryPW + case bankCode + case bankAccount + case bankName } static let shared = KeyChain() diff --git a/GME Remit/Utilities/WebLinks/WkWebView/WkWebViewController.swift b/GME Remit/Utilities/WebLinks/WkWebView/WkWebViewController.swift index 2ac30894..73914db4 100644 --- a/GME Remit/Utilities/WebLinks/WkWebView/WkWebViewController.swift +++ b/GME Remit/Utilities/WebLinks/WkWebView/WkWebViewController.swift @@ -125,12 +125,7 @@ extension WkWebViewController: WKScriptMessageHandler { return } - let kycMessage = - """ -Auto-Debit account register is complete. -To verify your bank account, move to the last step, the penny test -""" - + let kycMessage = "Auto-Debit account register is complete." alert(type: .success, message: kycMessage) { self.dismiss(animated: true) { delegate.newRegister(self, currentStep: .second, nextStep: .third)