You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

335 lines
10 KiB

//
// KycForm3ViewController.swift
// GMERemittance
//
// Created by gme_2 on 12/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import XLPagerTabStrip
import PMAlertController
import VisualEffectView
enum PictureType: Int {
case selfie
case front
case back
case passbook
}
struct KycForm3FieldKeys {
static let selfieImage = "selfie"
static let passbookImage = "passbook"
static let frontImage = "frontImage"
static let backImage = "backImage"
}
class KycForm3Model {
var selfieImage: UIImage?
var frontImage: UIImage?
var backImage: UIImage?
var passbookImage: UIImage?
var passportImage: UIImage?
}
class KycForm3ViewController: UIViewController {
struct Constants {
static let stateRedColor = UIColor.init(hex: "#EC1C24")
static let clearColor = UIColor.clear
static let errorBorderSize = AppConstants.errorBorderWidth
}
struct StringConstants {
let verificationIdFrontTitle = "selfie_with_verification_id_front_text".localized()
let verificationIdBackTitle = "verification_id_back_text".localized()
let selfieFrontTitle = "selfie_with_verification_id_front_text".localized()
let passBookTitle = "passbook_text".localized()
let veiwSampleText = "view_sample_text".localized()
let noteText = "kyc_document_note_text".localized()
let headerText = "upload_subtitle_text".localized()
}
// MARK: IBOutlets
@IBOutlet weak var selfieButton: UIButton!
@IBOutlet weak var frontButton: UIButton!
@IBOutlet weak var backButton: UIButton!
@IBOutlet weak var passbook: UIButton!
@IBOutlet weak var passport: UIButton!
// views
@IBOutlet weak var selfieView: UIView!
@IBOutlet weak var frontImageView: UIView!
@IBOutlet weak var backImageView: UIView!
@IBOutlet weak var passBookView: UIView!
@IBOutlet weak var passportView: UIView!
// titles
@IBOutlet weak var verificationIdFrontTitleLabel: UILabel!
@IBOutlet weak var verificationIdBackTitleLabel: UILabel!
@IBOutlet weak var selfieTitleLabel: UILabel!
@IBOutlet weak var passbookTitleLabel: UILabel!
@IBOutlet weak var headerTitle: UILabel!
@IBOutlet weak var sutTitleLabel: UILabel!
// buttons
@IBOutlet weak var verificationFrontSampleButton: UIButton!
@IBOutlet weak var verificationBackSampleButton: UIButton!
@IBOutlet weak var selfieSampleButton: UIButton!
@IBOutlet weak var passbookSampleButotn: UIButton!
@IBOutlet weak var submitButton: UIButton!
// submit_text
private func configureLanguage() {
self.headerTitle.text = StringConstants().headerText
self.sutTitleLabel.text = StringConstants().noteText
self.verificationIdFrontTitleLabel.text = StringConstants().verificationIdFrontTitle
self.verificationIdBackTitleLabel.text = StringConstants().verificationIdBackTitle
self.selfieTitleLabel.text = StringConstants().selfieFrontTitle
self.passbookTitleLabel.text = StringConstants().passBookTitle
[verificationBackSampleButton, selfieSampleButton,verificationFrontSampleButton, passbookSampleButotn].forEach({
$0?.setTitle(StringConstants().veiwSampleText, for: .normal)
})
self.submitButton.setTitle("submit_text".localized(), for: UIControlState.normal)
}
// MARK: Properties
let kycForm3Model = KycForm3Model()
var presenter: KycForm3ModuleInterface?
var delegate: KYCForm3Delegate?
var multiMediaManager: MultiMediaManager?
var imageCropper: ImageCroper?
var currentPictureType: PictureType?
var selectedSelfieImage = false
var selectedFrontImage = false
var selectedBackImage = false
var selectedPassbookImage = false
var selectedPassPortImage = false
var errorViewsDict: [String: UIView] = [:]
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
}
// MARK: IBActions
// sample actions
@IBAction func selfie(_ sender: UIButton) {
showSample(type: .selfie, titleString: "Picture with National/Alien Reg ID Front")
}
@IBAction func front(_ sender: UIButton) {
showSample(type: .front, titleString: "National/ Alien Reg ID Front")
}
@IBAction func back(_ sender: UIButton) {
showSample(type: .back, titleString: "National/ Alien Reg ID Back")
}
@IBAction func passbook(_ sender: UIButton) {
showSample(type: .passbook, titleString: "Passbook")
}
// camera actions
@IBAction func selfieCamera(_ sender: UIButton) {
self.currentPictureType = .selfie
self.showPicker()
}
@IBAction func frontCamera(_ sender: UIButton) {
self.currentPictureType = .front
print("front")
self.showPicker()
}
@IBAction func backCamera(_ sender: UIButton) {
self.currentPictureType = .back
print("back")
self.showPicker()
}
@IBAction func passbookCamera(_ sender: UIButton) {
self.currentPictureType = .passbook
print("passbook")
self.showPicker()
}
// submit action
@IBAction func submit(_ sender: UIButton) {
self.delegate?.submit(model: self.kycForm3Model)
}
// MARK: Other Functions
private func setup() {
// all setup should be done here
self.multiMediaManager = MultiMediaManager(presenter: self)
multiMediaManager?.delegate = self
self.imageCropper = ImageCroper(presentingViewController: self)
imageCropper?.delegate = self
setupErrorViews()
configureLanguage()
}
private func setupErrorViews() {
self.errorViewsDict =
[
KycForm3FieldKeys.selfieImage: self.selfieView,
KycForm3FieldKeys.frontImage: self.frontImageView,
KycForm3FieldKeys.backImage: self.backImageView,
KycForm3FieldKeys.passbookImage: self.passBookView
]
}
private func showPicker() {
multiMediaManager?.openPicker(mode: UIImagePickerControllerCameraCaptureMode.photo)
}
func showSample(type: PictureType, titleString: String) {
let image: UIImage?
switch type {
case .selfie:
image = #imageLiteral(resourceName: "sampleSelfie")
case .front:
image = #imageLiteral(resourceName: "sampleFront")
case .back:
image = #imageLiteral(resourceName: "sampleBack")
case .passbook:
image = #imageLiteral(resourceName: "samplePassbook")
// case .passport:
// image = #imageLiteral(resourceName: "sampleBack")
}
// show alert
let alertVC = PMAlertController(title: "", description: "", image: image, style: .alert)
alertVC.alertView.layer.cornerRadius = 10
let action = PMAlertAction(title: "ok_text".localized(), style: .cancel)
alertVC.addAction(action)
self.present(alertVC, animated: true, completion: nil)
}
}
// MARK: KycForm3ViewInterface
extension KycForm3ViewController: KycForm3ViewInterface {
}
extension KycForm3ViewController: IndicatorInfoProvider {
func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo {
return IndicatorInfo.init(title: "upload_title_text".localized())
}
}
extension KycForm3ViewController: MultimediaPresenterProtocol {
func presenting() -> UIViewController {
return self
}
}
extension KycForm3ViewController: MultiMediaManagerDelegate {
func didFinishPickingWithImage(image: UIImage) {
self.imageCropper?.cropImage(image: image)
}
func didFinishPickingWithError(error: String) {
self.alert(message: error)
}
func hideBorder(view: UIView) {
view.layer.borderWidth = 0
view.layer.addShadow(with: Constants.clearColor)
}
}
extension KycForm3ViewController: ImageCropperDelegate {
func didCropWith(image: UIImage) {
guard let type = self.currentPictureType else {return}
switch type {
case .selfie:
self.selfieButton.setImage(image, for: .normal)
self.selectedSelfieImage = true
self.kycForm3Model.selfieImage = image
selfieButton.addBlur()
hideBorder(view: selfieView)
case .front:
self.frontButton.setImage(image, for: .normal)
self.selectedFrontImage = true
self.kycForm3Model.frontImage = image
frontButton.addBlur()
hideBorder(view: frontImageView)
case .back:
self.backButton.setImage(image, for: .normal)
self.selectedBackImage = true
self.kycForm3Model.backImage = image
backButton.addBlur()
hideBorder(view: backImageView)
case .passbook:
self.passbook.setImage(image, for: .normal)
self.selectedPassbookImage = true
self.kycForm3Model.passbookImage = image
passbook.addBlur()
hideBorder(view: passBookView)
// case .passport:
// self.passport.setImage(image, for: .normal)
// self.selectedPassPortImage = true
// self.kycForm3Model.passportImage = image
// hideBorder(view: passportView)
}
}
func didFailedCropWith(error: Error) {
self.alert(message: error.localizedDescription)
}
}
extension KycForm3ViewController {
private func showBorder(view : UIView?) {
guard let _view = view else {return}
_view.layer.borderColor = Constants.stateRedColor.cgColor
_view.layer.borderWidth = Constants.errorBorderSize
_view.layer.addShadow(with: Constants.stateRedColor)
}
func show(result: (doesNotSucks: Bool, errorsDick: [String : String])) {
var position = 11
if result.doesNotSucks { // if isValid
}else {
result.errorsDick.forEach({
// self.show(error: $0.value, label: label)
let view = errorViewsDict[$0.key]
self.showBorder(view: view)
let tag = (view?.tag ?? position)
position = tag < position ? tag : position
// if let topMostView = self.views.filter({
// $0.tag == tag
// }).first {
// // Todo
// // scroll to view here
// }
})
}
}
}