Browse Source

ters design completed

pull/1/head
Dibya Malla 3 years ago
parent
commit
ff260dd0e1
  1. 1
      GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift
  2. 15
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Interactor/CDDIViewControllerInteractor.swift
  3. 4
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Interactor/CDDIViewControllerInteractorIO.swift
  4. 29
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Service/CDDIViewControllerService.swift
  5. 4
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Service/CDDIViewControllerServiceType.swift
  6. 2
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Module Interface/CDDIViewControllerModuleInterface.swift
  7. 53
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/Presenter/CDDIViewControllerPresenter.swift
  8. 16
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/View/CDDIViewController.storyboard
  9. 81
      GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/View/CDDIViewControllerViewController.swift
  10. 12
      GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyExchangeRate/User Interface/View/SendMoneyExchangeRateViewController.swift
  11. 7
      GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyParent/User Interface/View/SendMoneyParentViewController.swift
  12. 7
      GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyVerification/User Interface/View/SendMoneyVerificationViewController.swift
  13. 84
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Interactor/TermsAndConditionInteractor.swift
  14. 2
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Interactor/TermsAndConditionInteractorIO.swift
  15. 44
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Service/TermsAndConditionServiceType.swift
  16. 2
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Module Interface/TermsAndConditionModuleInterface.swift
  17. 14
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Presenter/TermsAndConditionPresenter.swift
  18. 21
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/View/TermsAndCondition.storyboard
  19. 70
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/View/TermsAndConditionViewController.swift
  20. 10
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Wireframe/TermsAndConditionWireframe.swift
  21. 2
      GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Wireframe/TermsAndConditionWireframeInput.swift

1
GME Remit/Modules/RegisterModules/UserAuthentication/KYCVerifyStep1/User Interface/View/KYCVerifyStep1ViewController.swift

@ -179,7 +179,6 @@ class KYCVerifyStep1ViewController: UIViewController {
}
@IBAction func checkButtonTapped(_ sender: UIButton) {
print(isSelected)
if isSelected == true {
self.checkButton.setImage(UIImage(named: "uncheck"), for: .normal)
isSelected = false

15
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Interactor/CDDIViewControllerInteractor.swift

@ -27,11 +27,14 @@ class CDDIViewControllerInteractor {
// MARK: CDDIViewController interactor input interface
extension CDDIViewControllerInteractor: CDDIViewControllerInteractorInput {
func makeApiRequest() {
self.service.makeApiRequest(success: { (message) in
self.output?.success(message: message ?? "")
}) { (error) in
self.output?.show(error: error)
}
func fetchInformation() {
service.fetchKycInfo(
success: {[weak self] in
self?.output?.setModel(with: $0)
},
failure: {[weak self] in
self?.output?.setError(with: $0)
}
)
}
}

4
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Interactor/CDDIViewControllerInteractorIO.swift

@ -7,10 +7,12 @@
//
protocol CDDIViewControllerInteractorInput: class {
func makeApiRequest()
func fetchInformation()
}
protocol CDDIViewControllerInteractorOutput: class {
func show(error: Error)
func success(message: String)
func setModel(with model: KYCInfoModel)
func setError(with error: Error)
}

29
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Service/CDDIViewControllerService.swift

@ -9,23 +9,14 @@
import Foundation
class CDDIViewControllerService: CDDIViewControllerServiceType {
func makeApiRequest(
success: @escaping (String?) -> Void,
failure: @escaping (Error) -> Void
){
// APIRouter
//// .requestOTP(mobileNumber: mobile)
// .request(
// needsAuthorization: false,
// success: {(response: ResponseMessage) in
// if (response.errorCode ?? "") == "1" {
// let error = NSError(domain: "Network", code: 0, message: response.message ?? "")
// failure(error)
// } else {
// success(response.message ?? "")
// }
// },
// failure: {failure($0)}
// )
}
func fetchKycInfo(
success: @escaping (KYCInfoModel) -> Void,
failure: @escaping (Error) -> Void
) {
APIRouter.loadKYCInformation.json(
needsAuthorization: false,
success: success,
failure: failure
)
}
}

4
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Application Logic/Service/CDDIViewControllerServiceType.swift

@ -9,8 +9,8 @@
import Foundation
protocol CDDIViewControllerServiceType: class {
func makeApiRequest(
success: @escaping (String?) -> Void,
func fetchKycInfo(
success: @escaping (KYCInfoModel) -> Void,
failure: @escaping (Error) -> Void
)
}

2
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/Module Interface/CDDIViewControllerModuleInterface.swift

@ -7,5 +7,5 @@
//
protocol CDDIViewControllerModuleInterface: class {
func makeApiRequest()
}

53
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/Presenter/CDDIViewControllerPresenter.swift

@ -7,8 +7,10 @@
//
import Foundation
import RxSwift
import RxCocoa
class CDDIViewControllerPresenter {
class CDDIViewControllerPresenter: ViewModelType {
// MARK: Properties
@ -17,20 +19,61 @@ class CDDIViewControllerPresenter {
var wireframe: CDDIViewControllerWireframeInput?
// MARK: Converting entities
func fetchInformation() {
self.view?.showLoading()
self.interactor?.fetchInformation()
}
struct Input {
let sourceOfFund: Driver<KeyValue?>
let purpose: Driver<KeyValue?>
let submit: Driver<Void>
}
struct Output {
let isError: Driver<Error>
let isProgress: Driver<Bool>
let purposes: Driver<[KeyValue]?>
let sourceOfFund: Driver<[KeyValue]?>
}
private let disposeBag = DisposeBag()
private let errorLinker = PublishSubject<Error>()
private let progressLinker = PublishSubject<Bool>()
private let model = PublishSubject<KYCInfoModel>()
func transform(input: Input) -> Output {
return Output(
isError: errorLinker.asDriverOnErrorJustComplete(),
isProgress: progressLinker.asDriverOnErrorJustComplete(),
purposes: model.map {$0.purpose}.asDriverOnErrorJustComplete(),
sourceOfFund: model.map {$0.sourceOfFund}.asDriverOnErrorJustComplete()
)
}
}
// MARK: CDDIViewController module interface
extension CDDIViewControllerPresenter: CDDIViewControllerModuleInterface {
func makeApiRequest(){
self.view?.showLoading()
self.interactor?.makeApiRequest()
}
}
// MARK: CDDIViewController interactor output interface
extension CDDIViewControllerPresenter: CDDIViewControllerInteractorOutput {
func setModel(with model: KYCInfoModel) {
progressLinker.onNext(false)
self.model.onNext(model)
}
func setError(with error: Error) {
progressLinker.onNext(false)
errorLinker.onNext(error)
}
func show(error: Error) {
self.view?.hideLoading()
self.view?.show(error: error.localizedDescription)

16
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/View/CDDIViewController.storyboard

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="System colors in document resources" minToolsVersion="11.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
@ -17,7 +17,7 @@
<!--CDDIViewController-->
<scene sceneID="R60-Pu-Hpy">
<objects>
<viewController storyboardIdentifier="CDDIViewControllerViewController" title="CDDIViewController" id="HSb-ou-7T5" customClass="CDDIViewControllerViewController" customModule="JME_Remit" customModuleProvider="target" sceneMemberID="viewController">
<viewController storyboardIdentifier="CDDIViewControllerViewController" title="CDDIViewController" modalTransitionStyle="crossDissolve" id="HSb-ou-7T5" customClass="CDDIViewControllerViewController" customModule="JME_Remit" customModuleProvider="target" sceneMemberID="viewController">
<layoutGuides>
<viewControllerLayoutGuide type="top" id="y1H-iV-BwG"/>
<viewControllerLayoutGuide type="bottom" id="PYB-Kq-ghm"/>
@ -55,14 +55,14 @@
<userDefinedRuntimeAttribute type="string" keyPath="titleText" value="Select Purpose of Remit"/>
</userDefinedRuntimeAttributes>
</textField>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dropdown_grey" translatesAutoresizingMaskIntoConstraints="NO" id="Cpf-O0-ix4">
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dropdown_grey" translatesAutoresizingMaskIntoConstraints="NO" id="Cpf-O0-ix4">
<rect key="frame" x="297" y="31" width="20" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="20" id="UM0-nD-OS3"/>
<constraint firstAttribute="height" constant="20" id="kMY-W8-CMe"/>
</constraints>
</imageView>
<imageView clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dropdown_grey" translatesAutoresizingMaskIntoConstraints="NO" id="7LS-qT-5ko">
<imageView hidden="YES" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="dropdown_grey" translatesAutoresizingMaskIntoConstraints="NO" id="7LS-qT-5ko">
<rect key="frame" x="297" y="101" width="20" height="20"/>
<constraints>
<constraint firstAttribute="width" constant="20" id="SXq-66-IX4"/>
@ -111,19 +111,23 @@
</constraints>
</view>
<connections>
<outlet property="continueButton" destination="iMy-j1-KcE" id="4Gm-0E-6k5"/>
<outlet property="purposeOfRemit" destination="aWI-gM-hlc" id="3ck-A2-qXd"/>
<outlet property="sourceOfFund" destination="rWb-W1-lK6" id="ZUu-Ze-OEm"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="-92" y="232.53373313343329"/>
<point key="canvasLocation" x="-15" y="228"/>
</scene>
</scenes>
<designables>
<designable name="aWI-gM-hlc">
<size key="intrinsicContentSize" width="184" height="34"/>
</designable>
<designable name="rWb-W1-lK6">
<size key="intrinsicContentSize" width="173.5" height="34"/>
</designable>
</designables>
<color key="tintColor" red="0.78177064659999995" green="0.55228364470000002" blue="0.018981300289999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<resources>

81
GME Remit/Modules/RemittanceModules/OverseasModules/CDDIViewController/User Interface/View/CDDIViewControllerViewController.swift

@ -7,20 +7,25 @@
//
import UIKit
import RxSwift
import RxCocoa
class CDDIViewControllerViewController: UIViewController {
// MARK: Properties
var presenter: CDDIViewControllerModuleInterface?
var presenter: CDDIViewControllerPresenter!
var reciepient: Recipient?
var requestModel: SendMoneyRequestModel?
weak var hudDelegate: HUDStatusDelegate?
weak var actionDelegate: SendMoneyExchangeRateActionDelegate?
var exchangeRateModel: SendMoneyExchangeRateModel?
private let disposeBag = DisposeBag()
// MARK: IBOutlets
@IBOutlet weak var purposeOfRemit: ValidationTextField!
@IBOutlet weak var sourceOfFund: ValidationTextField!
@IBOutlet weak var continueButton: UIButton!
// MARK: VC's Life cycle
@ -29,26 +34,94 @@ class CDDIViewControllerViewController: UIViewController {
self.setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
self.presenter.fetchInformation()
}
// MARK: IBActions
@IBAction func continueButton(_ sender: UIButton) {
view.endEditing(true)
actionDelegate?.continueToVerificationAction()
}
// MARK: Other Functions
private func setup() {
// all setup should be done here
self.continueButton.layer.cornerRadius = 12
sourceOfFund.useAsDropDown(items: nil)
sourceOfFund.validCondition = {!$0.isEmpty}
purposeOfRemit.useAsDropDown(items: nil)
purposeOfRemit.validCondition = {!$0.isEmpty}
setBinding()
}
private func setBinding() {
let isValidInfo = Observable.combineLatest(
[
sourceOfFund.valid,
purposeOfRemit.valid
]
).map { $0.allSatisfy { $0 } }
.distinctUntilChanged()
let input = CDDIViewControllerPresenter.Input(
sourceOfFund: sourceOfFund.selectedItem.map {
if $0?.cellTitle == "Others (please specify)" {
DispatchQueue.main.async {
let alert = UIAlertController(title: "specifySourceOfFund_text".localized(), message: "", preferredStyle: .alert)
alert.addTextField(configurationHandler: nil)
alert.addAction(UIAlertAction(title: "Submit", style: .default, handler: { [weak alert] (_) in
guard let textField = alert?.textFields?.first else { return }
let setSourceOfFund = KeyValue(id: textField.text ?? "", value: textField.text ?? "")
self.sourceOfFund.didSelect(
item: setSourceOfFund
)
}))
self.present(alert, animated: true, completion: nil)
}
}
return $0 as? KeyValue
}.asDriverOnErrorJustComplete(),
purpose: purposeOfRemit.selectedItem.map{$0 as? KeyValue}.asDriverOnErrorJustComplete(),
submit: continueButton.rx.tap.asDriverOnErrorJustComplete()
)
let output = presenter.transform(input: input)
output.isError
.drive(
onNext: { self.alert(type: .error, message: $0.localizedDescription) }
).disposed(by: disposeBag)
output.isProgress
.drive(
onNext: { $0 ? self.showProgressHud() : self.hideProgressHud() }
).disposed(by: disposeBag)
output.purposes.drive(onNext: {[weak self] in
let configure = TablePresenterConfiguration(presenterTitle: "select_purpose_of_registration_text".localized())
self?.purposeOfRemit.useAsDropDown(with: configure, items: $0)
}).disposed(by: disposeBag)
output.sourceOfFund.drive(onNext: {[weak self] in
let configure = TablePresenterConfiguration(presenterTitle: "select_source_of_fund_text".localized())
self?.sourceOfFund.useAsDropDown(with: configure, items: $0)
}).disposed(by: disposeBag)
}
}
// MARK: CDDIViewControllerViewInterface
extension CDDIViewControllerViewController: CDDIViewControllerViewInterface {
func showLoading() {
self.showProgressHud()
hudDelegate?.showLoading()
}
func hideLoading() {
self.hideProgressHud()
hudDelegate?.hideLoading()
}
func show(error: String) {

12
GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyExchangeRate/User Interface/View/SendMoneyExchangeRateViewController.swift

@ -203,7 +203,6 @@ class SendMoneyExchangeRateViewController: UIViewController {
calculate()
case .continue:
goToCDDI()
//goToVerification()
}
}
}
@ -393,17 +392,6 @@ class SendMoneyExchangeRateViewController: UIViewController {
actionDelegate?.continueToCDDI()
}
// private func goToVerification() {
// exchangeRateModel?.calcBy = calcBy
// exchangeRateModel?.reciepientCurrency = selectedCurrencyViewModel?.currency ?? ""
// exchangeRateModel?.autodebitSendingAmount = getPlainNumbers(number: senderTextField.text!)
//
//
// actionDelegate?.calculated(model: exchangeRateModel)
// actionDelegate?.continueToVerificationAction()
// }
private func getPlainNumbers(number: String) -> String {
return number.stringRemovingComma()
}

7
GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyParent/User Interface/View/SendMoneyParentViewController.swift

@ -145,10 +145,12 @@ class SendMoneyParentViewController: UIViewController {
}
@IBAction func cddiTapped(_ sender: UIButton) {
self.addCddiViewController()
self.state = StateButtons.cddi
}
@IBAction func termsAndConditions(_ sender: UIButton) {
self.addTermsAndConditions()
self.state = StateButtons.terms
}
// MARK: Other Functions
@ -350,6 +352,8 @@ class SendMoneyParentViewController: UIViewController {
private func addCddiViewController() {
guard let ccdiView = cddiViewController else {return}
ccdiView.requestModel = self.requestModel
ccdiView.actionDelegate = self
self.addChild(ccdiView)
@ -375,6 +379,7 @@ class SendMoneyParentViewController: UIViewController {
verificationViewController.reciepient = self.receipient
verificationViewController.requestModel = self.requestModel
verificationViewController.actionDelegate = self
self.addChild(verificationViewController)
@ -395,6 +400,8 @@ class SendMoneyParentViewController: UIViewController {
private func addTermsAndConditions() {
guard let termsView = termsViewController else {return}
termsView.reciepient = self.receipient
termsView.requestModel = self.requestModel
self.addChild(termsView)

7
GME Remit/Modules/RemittanceModules/OverseasModules/SendMoneyVerification/User Interface/View/SendMoneyVerificationViewController.swift

@ -77,7 +77,7 @@ class SendMoneyVerificationViewController: UITableViewController {
var reciepient: Recipient?
var requestModel: SendMoneyRequestModel?
weak var hudDelegate: HUDStatusDelegate?
weak var actionDelegate: SendMoneyExchangeRateActionDelegate?
lazy var pinViewOption: Options = {
var options = Options()
options.image = UIImage(named: "app logo")
@ -145,7 +145,8 @@ class SendMoneyVerificationViewController: UITableViewController {
}
@IBAction func submit(_ sender: UIButton) {
self.askPassword()
// self.askPassword()
actionDelegate?.continueToTermsAndConditions()
}
// MARK: Other Functions
@ -218,7 +219,7 @@ class SendMoneyVerificationViewController: UITableViewController {
// biometricAuthenticationWireframe.openWithDelegate(on: self, delegate: self)
// } else {
// showSecureKeypad()
// }
//
showSecureKeypad()
}

84
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Interactor/TermsAndConditionInteractor.swift

@ -27,6 +27,45 @@ class TermsAndConditionInteractor {
// MARK: TermsAndCondition interactor input interface
extension TermsAndConditionInteractor: TermsAndConditionInteractorInput {
func submit(model: SendMoneyRequestModel, reciepient: Recipient) {
let params = self.getParams(model: model, reciepient: reciepient)
self.service.submit(
params: params,
success: { (response) in
// UPDATE BALANCE
let balance = response?.data?.extra ?? ""
let userInfo = [SideMenuNavigationNotifications.availableBalance : balance]
GMEDB.shared.user.set(balance, .availableBalance)
NotificationCenter.default.post(
name: self.getAvailableBalanceNotificationName(),
object: nil,
userInfo: userInfo
)
// UPDATE YEARLY LIMIT
let limit = response?.data?.remainingLimit ?? ""
let userInfo2 = [AppConstants.yearlyLimitNotification : limit]
NotificationCenter.default.post(
name: self.getAvailableBalanceNotificationName(),
object: nil,
userInfo: userInfo
)
NotificationCenter.default.post(
name: self.getYearlyLimitNotificationName(),
object: userInfo2
)
// SHOW
self.output?.show(model: response)
},
failure: { (error) in
self.output?.show(error: error)
})
}
func makeApiRequest() {
self.service.makeApiRequest(success: { (message) in
self.output?.success(message: message ?? "")
@ -34,4 +73,49 @@ extension TermsAndConditionInteractor: TermsAndConditionInteractorInput {
self.output?.show(error: error)
}
}
func getParams(model: SendMoneyRequestModel, reciepient: Recipient) -> [String: Any] {
guard let username = GMEDB.shared.user.string(.userId) else {return [:]}
let senderId = GMEDB.shared.user.string(.senderId)
let recieverId = reciepient.receiverID
let params: [String: Any] =
[
"User": username,
"SenderId": senderId ?? "",
"ReceiverId": recieverId ?? "",
"DeliveryMethodId": model.paymemtMode?.id ?? "",
"PBranch": model.branch?.id ?? "",
// "PAgent": model.bank?.id ?? "",
"PaymentType": "wallet",
"PCurr": model.exchangeRateDetail?.reciepientCurrency ?? "",
"CollCurr": "JPY",
"CollAmt": model.exchangeRateDetail?.senderAmount ?? "",
"PayoutAmt": model.exchangeRateDetail?.recipientAmount ?? "",
"TransferAmt": model.exchangeRateDetail?.transferAmount ?? "",
"ServiceCharge": model.exchangeRateDetail?.transferFee ?? "",
"Discount": model.exchangeRateDetail?.discountPercent ?? "",
"ExRate": model.exchangeRateDetail?.apiExchangeRate ?? "",
"CalBy": model.exchangeRateDetail?.calcBy ?? "",
"FOREX_SESSION_ID": model.exchangeRateDetail?.forexId ?? "",
"PurposeOfRemittance": reciepient.purposeOfRemitID ?? "others",
"SourceOfFund": "3902",
"RelWithSender": reciepient.relationshipID ?? "",
"Occupation": "",
"IpAddress": "",
"RState": "",
"RLocation": "",
"TpExRate": "",
"TpPCurr": "",
"PayOutPartner": "394402",
"IsAgreed": "TRUE",
"TxnPassword": model.transactionPassword ?? "",
"ReceiverAccountNo": model.paymemtMode?.accountNumber ?? "",
"ProcessId": "",
// "schemeId": "",
"isUseBiometric": model.isUseBiometric ?? false
]
return params
}
}

2
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Interactor/TermsAndConditionInteractorIO.swift

@ -8,9 +8,11 @@
protocol TermsAndConditionInteractorInput: class {
func makeApiRequest()
func submit(model: SendMoneyRequestModel, reciepient: Recipient)
}
protocol TermsAndConditionInteractorOutput: class {
func show(error: Error)
func success(message: String)
func show(model: SendMoneySubmitModelContainer?)
}

44
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Application Logic/Service/TermsAndConditionServiceType.swift

@ -8,9 +8,51 @@
import Foundation
protocol TermsAndConditionServiceType: class {
protocol TermsAndConditionServiceType: class, TermsAndConditionsApi {
func makeApiRequest(
success: @escaping (String?) -> Void,
failure: @escaping (Error) -> Void
)
}
protocol TermsAndConditionsApi: ApiServiceType {
func submit(
params: [String: Any],
success: @escaping (SendMoneySubmitModelContainer?) -> Void,
failure: @escaping (Error) -> Void
)
}
extension TermsAndConditionsApi {
func submit(
params: [String: Any],
success: @escaping (SendMoneySubmitModelContainer?) -> Void,
failure: @escaping (Error) -> Void
) {
let url = baseUrl + "/mobile/sendmoney/dotransaction"
self.auth.request(
method: .post,
url: url,
params: params,
success: { (response: SendMoneySubmitModelContainer) in
if (response.errorCode ?? "") == "1" {
let error = NSError(
domain: "Network",
code: 0,
userInfo: [NSLocalizedDescriptionKey : response.message ?? ""]
)
failure(error)
} else {
let model = response
success(model)
}
},
failure: { (error) in
failure(error)
}
)
}
}

2
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/Module Interface/TermsAndConditionModuleInterface.swift

@ -8,4 +8,6 @@
protocol TermsAndConditionModuleInterface: class {
func makeApiRequest()
func submit(model: SendMoneyRequestModel, reciepient: Recipient)
func openReciept(transactionId: String)
}

14
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Presenter/TermsAndConditionPresenter.swift

@ -26,6 +26,15 @@ extension TermsAndConditionPresenter: TermsAndConditionModuleInterface {
self.view?.showLoading()
self.interactor?.makeApiRequest()
}
func submit(model: SendMoneyRequestModel, reciepient: Recipient) {
self.view?.showLoading()
self.interactor?.submit(model: model, reciepient: reciepient)
}
func openReciept(transactionId: String) {
self.wireframe?.openReciept(transactionId: transactionId)
}
}
// MARK: TermsAndCondition interactor output interface
@ -40,4 +49,9 @@ extension TermsAndConditionPresenter: TermsAndConditionInteractorOutput {
self.view?.hideLoading()
self.view?.show(message: message)
}
func show(model: SendMoneySubmitModelContainer?) {
self.view?.hideLoading()
self.view?.show(model: model)
}
}

21
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/View/TermsAndCondition.storyboard

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="18122" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19162" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="HSb-ou-7T5">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="18093"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19144"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@ -35,6 +35,9 @@
<state key="normal" title="Send Money">
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</state>
<connections>
<action selector="continueClicked:" destination="HSb-ou-7T5" eventType="touchUpInside" id="sW2-ig-P6o"/>
</connections>
</button>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="leading" contentVerticalAlignment="center" lineBreakMode="middleTruncation" hasAttributedTitle="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gc6-FE-BpC">
<rect key="frame" x="16" y="549" width="343" height="40"/>
@ -52,9 +55,12 @@
</fragment>
</attributedString>
</state>
<connections>
<action selector="agreementClicked:" destination="HSb-ou-7T5" eventType="touchUpInside" id="CJ7-m4-QxQ"/>
</connections>
</button>
<wkWebView contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7zj-MN-R3f">
<rect key="frame" x="16" y="20" width="343" height="521"/>
<rect key="frame" x="0.0" y="20" width="375" height="521"/>
<color key="backgroundColor" red="0.36078431370000003" green="0.38823529410000002" blue="0.4039215686" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="521" id="3Id-l7-WUQ"/>
@ -67,18 +73,23 @@
</subviews>
<color key="backgroundColor" name="ThemeMainBackground"/>
<constraints>
<constraint firstItem="7zj-MN-R3f" firstAttribute="leading" secondItem="9Uc-9s-KgO" secondAttribute="leadingMargin" id="1Xd-My-Zu1"/>
<constraint firstItem="7zj-MN-R3f" firstAttribute="leading" secondItem="9Uc-9s-KgO" secondAttribute="leading" id="7sP-mV-ip6"/>
<constraint firstItem="7zj-MN-R3f" firstAttribute="top" secondItem="y1H-iV-BwG" secondAttribute="bottom" constant="20" id="Bg9-ll-EVv"/>
<constraint firstItem="a7h-De-Uul" firstAttribute="top" secondItem="gc6-FE-BpC" secondAttribute="bottom" constant="8" id="EHQ-JH-On9"/>
<constraint firstItem="7zj-MN-R3f" firstAttribute="trailing" secondItem="9Uc-9s-KgO" secondAttribute="trailingMargin" id="HVj-jB-qcP"/>
<constraint firstItem="PYB-Kq-ghm" firstAttribute="top" secondItem="a7h-De-Uul" secondAttribute="bottom" constant="20" id="Ife-B9-y6X"/>
<constraint firstItem="gc6-FE-BpC" firstAttribute="leading" secondItem="9Uc-9s-KgO" secondAttribute="leadingMargin" id="MdY-l3-1XD"/>
<constraint firstItem="gc6-FE-BpC" firstAttribute="trailing" secondItem="9Uc-9s-KgO" secondAttribute="trailingMargin" id="aEh-8z-tqg"/>
<constraint firstItem="a7h-De-Uul" firstAttribute="leading" secondItem="9Uc-9s-KgO" secondAttribute="leadingMargin" id="aJc-vn-GmH"/>
<constraint firstItem="a7h-De-Uul" firstAttribute="trailing" secondItem="9Uc-9s-KgO" secondAttribute="trailingMargin" id="ezO-DB-ioJ"/>
<constraint firstAttribute="trailing" secondItem="7zj-MN-R3f" secondAttribute="trailing" id="foX-Hq-bJT"/>
<constraint firstItem="gc6-FE-BpC" firstAttribute="top" secondItem="7zj-MN-R3f" secondAttribute="bottom" constant="8" symbolic="YES" id="vDN-mt-MR2"/>
</constraints>
</view>
<connections>
<outlet property="agreementButton" destination="gc6-FE-BpC" id="55g-e9-2do"/>
<outlet property="continueButton" destination="a7h-De-Uul" id="fTW-4Q-THN"/>
<outlet property="webView" destination="7zj-MN-R3f" id="1ta-L4-9ca"/>
</connections>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="8je-5K-XuW" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>

70
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/View/TermsAndConditionViewController.swift

@ -7,6 +7,7 @@
//
import UIKit
import WebKit
class TermsAndConditionViewController: UIViewController {
@ -16,23 +17,92 @@ class TermsAndConditionViewController: UIViewController {
var reciepient: Recipient?
var requestModel: SendMoneyRequestModel?
weak var hudDelegate: HUDStatusDelegate?
private var isSelected = false
lazy var pinViewOption: Options = {
var options = Options()
options.image = UIImage(named: "app logo")
options.title = "enter_your_transaction_pin_text".localized()
options.pinColor = #colorLiteral(red: 0.93, green: 0.11, blue: 0.14, alpha: 1)
return options
}()
var password: String? {
didSet {
guard
let model = self.requestModel,
let reciepient = self.reciepient,
let password = self.password,
password != ""
else {
return
}
model.transactionPassword = password
print(password)
self.presenter?.submit(model: model, reciepient: reciepient)
}
}
// MARK: IBOutlets
@IBOutlet weak var continueButton: UIButton!
@IBOutlet weak var webView: WKWebView!
@IBOutlet weak var agreementButton: UIButton!
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "http://211.25.249.199:9093/Document/TermsAndConditions/Trx_TermsAndConditions.html")!
self.webView.load(URLRequest(url: url))
self.webView.scrollView.bounces = false
self.setup()
}
// MARK: IBActions
@IBAction func agreementClicked(_ sender: UIButton) {
if isSelected == true {
self.agreementButton.setImage(UIImage(named: "uncheck"), for: .normal)
isSelected = false
self.continueButton.isUserInteractionEnabled = false
self.continueButton.backgroundColor = .themeText
} else if isSelected == false {
self.agreementButton.setImage(UIImage(named: "checked"), for: .normal)
isSelected = true
self.continueButton.isUserInteractionEnabled = true
self.continueButton.backgroundColor = .themeRed
}
}
@IBAction func continueClicked(_ sender: UIButton) {
if isSelected == true {
askPassword()
}
}
// MARK: Other Functions
private func setup() {
// all setup should be done here
}
func askPassword() {
// if let isUseBiometric = KeyChain.shared.get(key: .biometricAuth), isUseBiometric == "1" {
// let biometricAuthenticationWireframe = BiometricAuthenticationWireframe()
// biometricAuthenticationWireframe.openWithDelegate(on: self, delegate: self)
// } else {
// showSecureKeypad()
// }
showSecureKeypad()
}
func showSecureKeypad() {
PINKeyboardView.present(config: self.pinViewOption, over: self, pinEntered: {pin,ok in
if pin.count == 6 && ok == true {
self.password = pin
}
},presented:nil)
}
}
// MARK: TermsAndConditionViewInterface

10
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Wireframe/TermsAndConditionWireframe.swift

@ -10,6 +10,10 @@ import UIKit
class TermsAndConditionWireframe {
weak var view: UIViewController!
var reciepient: Recipient?
var model: SendMoneyRequestModel?
private lazy var reciptWireframe = SendMoneyReceiptWireframe()
}
extension TermsAndConditionWireframe: TermsAndConditionWireframeInput {
@ -31,4 +35,10 @@ extension TermsAndConditionWireframe: TermsAndConditionWireframeInput {
self.view = viewController
return viewController
}
func openReciept(transactionId: String) {
if let navigation = self.view.navigationController {
reciptWireframe.openReciept(transactionId: transactionId, source: navigation)
}
}
}

2
GME Remit/Modules/RemittanceModules/OverseasModules/TermsAndCondition/User Interface/Wireframe/TermsAndConditionWireframeInput.swift

@ -9,5 +9,5 @@
import Foundation
protocol TermsAndConditionWireframeInput: WireframeInput {
func openReciept(transactionId: String)
}
Loading…
Cancel
Save