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.
420 lines
17 KiB
420 lines
17 KiB
//
|
|
// KYCDocumentsUploadViewController.swift
|
|
// GMERemittance
|
|
//
|
|
// Created by Fm-user on 12/20/17.
|
|
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class KYCDocumentsUploadViewController: UIViewController {
|
|
|
|
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
|
|
|
|
var index: Int?
|
|
|
|
@IBOutlet weak var viewOutlet: UIView!
|
|
@IBOutlet weak var viewProgressBarOutlet: UIView!
|
|
|
|
var kycviewmodel: KYCViewModel?
|
|
|
|
let imagePicker = UIImagePickerController()
|
|
|
|
static var internetListener = 0
|
|
static var timeOutListener = 0
|
|
static var apiRequestListener = 0
|
|
|
|
@IBAction func submitWithDocuments(_ sender: Any) {
|
|
|
|
|
|
if imageViewIDFront.tag == 1 || imageViewIDBack.tag == 2 || imageViewPassbook.tag == 3 || imageViewPassport.tag == 4 || imageViewCloseupSelfie.tag == 5 {
|
|
self.popUpMessageInfo(value: 16,title:"Missing Images", message: "Please select all the images")
|
|
} else {
|
|
|
|
processImagesAndSubmit()
|
|
|
|
}
|
|
}
|
|
|
|
@IBOutlet weak var imageViewCloseupSelfie: UIImageView!
|
|
@IBOutlet weak var imageViewIDFront: UIImageView!
|
|
@IBOutlet weak var imageViewIDBack: UIImageView!
|
|
@IBOutlet weak var imageViewPassbook: UIImageView!
|
|
@IBOutlet weak var imageViewPassport: UIImageView!
|
|
|
|
|
|
@IBOutlet weak var kycFirstStep: UIView!
|
|
@IBOutlet weak var kycProgessOne: UIView!
|
|
@IBOutlet weak var kycSecondStep: UIView!
|
|
@IBOutlet weak var kycProgessSecond: UIView!
|
|
@IBOutlet weak var kycFinalStep: UIView!
|
|
|
|
|
|
override func viewDidDisappear(_ animated: Bool) {
|
|
|
|
self.kycviewmodel?.resetImageSubmission()
|
|
}
|
|
/**
|
|
Internet Check
|
|
*/
|
|
func setUpNetworkListener() {
|
|
|
|
kycviewmodel?.internetConnection.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
|
|
if $0! {
|
|
self.processImagesAndSubmit()
|
|
} else {
|
|
if KYCDocumentsUploadViewController.internetListener == 0{
|
|
KYCDocumentsUploadViewController.internetListener = KYCDocumentsUploadViewController.internetListener+1
|
|
self.popUpMessage(value: 21)
|
|
}
|
|
}
|
|
self.kycviewmodel?.internetConnection.value = nil
|
|
}
|
|
}
|
|
|
|
/**
|
|
Update the Documents of user
|
|
*/
|
|
func setUpSubmissionListener() {
|
|
|
|
kycviewmodel?.isSubmitted.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
self.enableUserInteractions()
|
|
|
|
guard $0! else {
|
|
|
|
|
|
if KYCDocumentsUploadViewController.apiRequestListener == 0{
|
|
KYCDocumentsUploadViewController.apiRequestListener = KYCDocumentsUploadViewController.apiRequestListener+1
|
|
|
|
if KYCDocumentsUploadViewController.timeOutListener == 0{
|
|
KYCDocumentsUploadViewController.timeOutListener = KYCDocumentsUploadViewController.timeOutListener+1
|
|
self.popUpMessageError(value: 23, message: (self.kycviewmodel?.getErrorMessage())!)
|
|
}
|
|
}
|
|
self.kycviewmodel?.isSubmitted.value = nil
|
|
return
|
|
}
|
|
|
|
UserDefaults.standard.set(true, forKey: "com.gmeremit.isKYCSubmitted")
|
|
UserDefaults.standard.set(true, forKey: "com.gmeremit.showImageAlert")
|
|
self.performSegue(withIdentifier: "homeScreen", sender: nil)
|
|
}
|
|
}
|
|
|
|
/**
|
|
Process and compress the image to submit
|
|
*/
|
|
func processImagesAndSubmit() {
|
|
|
|
disableUserInteractions()
|
|
showActivityIndicator(activityIndicator: activityIndicator)
|
|
|
|
let imageDataCloseUpSelfie: NSData = UIImageJPEGRepresentation(imageViewCloseupSelfie.image!, 0.25)! as NSData
|
|
let imageDataIDFront: NSData = UIImageJPEGRepresentation(imageViewIDFront.image!, 0.25)! as NSData
|
|
let imageDataIDBack: NSData = UIImageJPEGRepresentation(imageViewIDBack.image!, 0.25)! as NSData
|
|
let imageDataPassbook: NSData = UIImageJPEGRepresentation(imageViewPassbook.image!, 0.25)! as NSData
|
|
let imageDataPassport: NSData = UIImageJPEGRepresentation(imageViewPassport.image!, 0.25)! as NSData
|
|
|
|
let imageDataCloseUpSelfieBase64: String = imageDataCloseUpSelfie.base64EncodedString(options: .lineLength64Characters)
|
|
let imageDataIDFrontBase64: String = imageDataIDFront.base64EncodedString(options: .lineLength64Characters)
|
|
let imageDataIDBackBase64: String = imageDataIDBack.base64EncodedString(options: .lineLength64Characters)
|
|
let imageDataPassbookBase64: String = imageDataPassbook.base64EncodedString(options: .lineLength64Characters)
|
|
let imageDataPassportBase64: String = imageDataPassport.base64EncodedString(options: .lineLength64Characters)
|
|
|
|
kycviewmodel?.provideImageForSubmission(docType: kycCode.Selfie.rawValue, imageBase64: imageDataCloseUpSelfieBase64)
|
|
kycviewmodel?.provideImageForSubmission(docType: kycCode.IDFront.rawValue, imageBase64: imageDataIDFrontBase64)
|
|
kycviewmodel?.provideImageForSubmission(docType: kycCode.IDBack.rawValue, imageBase64: imageDataIDBackBase64)
|
|
kycviewmodel?.provideImageForSubmission(docType: kycCode.Passbook.rawValue, imageBase64: imageDataPassbookBase64)
|
|
kycviewmodel?.provideImageForSubmission(docType: kycCode.Passport.rawValue, imageBase64: imageDataPassportBase64)
|
|
}
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
setUpNavBar(id: 104, title: "")
|
|
|
|
viewOutlet.backgroundColor = UIColor(hex:0xec1c24)
|
|
viewProgressBarOutlet.backgroundColor = UIColor(hex:0xec1c24)
|
|
|
|
// Do any additional setup after loading the view.
|
|
// Kyc progress View
|
|
kycFirstStep.layer.cornerRadius = kycFirstStep.frame.size.width/2
|
|
kycFirstStep.layer.borderColor = UIColor.white.cgColor
|
|
kycFirstStep.layer.borderWidth = 1.0
|
|
|
|
kycSecondStep.layer.cornerRadius = kycSecondStep.frame.size.width/2
|
|
kycSecondStep.layer.borderColor = UIColor.white.cgColor
|
|
kycSecondStep.layer.borderWidth = 1.0
|
|
|
|
kycFinalStep.layer.cornerRadius = kycFinalStep.frame.size.width/2
|
|
kycFinalStep.layer.borderColor = UIColor.white.cgColor
|
|
kycFinalStep.layer.borderWidth = 1.0
|
|
|
|
|
|
kycviewmodel?.kycViewModelConnectionTimeOut.value = nil
|
|
/**
|
|
connection timeout
|
|
*/
|
|
kycviewmodel?.kycViewModelConnectionTimeOut.bind { [unowned self] in
|
|
guard $0 != nil else {
|
|
return
|
|
}
|
|
self.enableUserInteractions()
|
|
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
|
|
|
|
if KYCDocumentsUploadViewController.timeOutListener == 0{
|
|
KYCDocumentsUploadViewController.timeOutListener = KYCDocumentsUploadViewController.timeOutListener+1
|
|
self.popUpMessage(value: 22)
|
|
}
|
|
}
|
|
|
|
|
|
kycviewmodel?.internetConnection.value = nil
|
|
|
|
setUpNetworkListener()
|
|
setUpSubmissionListener()
|
|
|
|
guard kycviewmodel != nil else {
|
|
return
|
|
}
|
|
|
|
setUpAnotherLoginListener(genericviewmodel: kycviewmodel!)
|
|
kycviewmodel!.isSubmitted.value = nil
|
|
|
|
imageViewCloseupSelfie.isUserInteractionEnabled = true
|
|
imageViewIDFront.isUserInteractionEnabled = true
|
|
imageViewIDBack.isUserInteractionEnabled = true
|
|
imageViewPassbook.isUserInteractionEnabled = true
|
|
imageViewPassport.isUserInteractionEnabled = true
|
|
|
|
imageViewCloseupSelfie.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))))
|
|
|
|
imageViewIDFront.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))))
|
|
|
|
imageViewIDBack.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))))
|
|
|
|
imageViewPassbook.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))))
|
|
|
|
imageViewPassport.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(imageTapped(tapGestureRecognizer:))))
|
|
}
|
|
|
|
/**
|
|
Display option to select image from camera or gallery
|
|
*/
|
|
|
|
@objc func imageTapped(tapGestureRecognizer: UITapGestureRecognizer) {
|
|
|
|
let tappedImage = tapGestureRecognizer.view as! UIImageView
|
|
|
|
switch tappedImage.tag {
|
|
case 1, 10:
|
|
index = 1
|
|
case 2, 20:
|
|
index = 2
|
|
case 3, 30:
|
|
index = 3
|
|
case 4, 40:
|
|
index = 4
|
|
case 5, 50:
|
|
index = 5
|
|
default:
|
|
return
|
|
}
|
|
|
|
let alert = UIAlertController(title: "Choose Image", message: nil, preferredStyle: .actionSheet)
|
|
|
|
let cameraAction = UIAlertAction(title: "Camera", style: .default,handler: {
|
|
(action : UIAlertAction!) -> Void in
|
|
self.openCamera()
|
|
})
|
|
|
|
let galleryAction = UIAlertAction(title: "Gallery", style: .default,handler: {
|
|
(action : UIAlertAction!) -> Void in
|
|
self.openGallery()
|
|
})
|
|
|
|
let cancelAction = UIAlertAction.init(title: "Cancel", style: .destructive, handler: nil)
|
|
|
|
cancelAction.setValue(UIColor.black, forKey: "titleTextColor")
|
|
cameraAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
|
|
galleryAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
|
|
|
|
alert.addAction(cameraAction)
|
|
alert.addAction(galleryAction)
|
|
alert.addAction(cancelAction)
|
|
|
|
self.present(alert, animated: true, completion: nil)
|
|
}
|
|
|
|
/**
|
|
Open the camera
|
|
*/
|
|
func openCamera() {
|
|
if(UIImagePickerController .isSourceTypeAvailable(UIImagePickerControllerSourceType.camera)) {
|
|
|
|
imagePicker.delegate = self
|
|
|
|
imagePicker.sourceType = UIImagePickerControllerSourceType.camera
|
|
|
|
if index == 5 {
|
|
if(UIImagePickerController .isCameraDeviceAvailable(UIImagePickerControllerCameraDevice.front)) {
|
|
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.front
|
|
} else {
|
|
//showCameraAlert(warningMessage: "You don't have front camera")
|
|
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear
|
|
}
|
|
} else {
|
|
imagePicker.cameraDevice = UIImagePickerControllerCameraDevice.rear
|
|
}
|
|
|
|
imagePicker.allowsEditing = true
|
|
present(imagePicker, animated: true, completion: nil)
|
|
}
|
|
else {
|
|
showCameraAlert(warningMessage: "You don't have camera")
|
|
}
|
|
}
|
|
|
|
func showCameraAlert(warningMessage: String) {
|
|
let alert = UIAlertController(title: "Warning", message: warningMessage, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
|
self.present(alert, animated: true, completion: nil)
|
|
}
|
|
|
|
/**
|
|
Open Gallery to select he image
|
|
*/
|
|
func openGallery() {
|
|
imagePicker.delegate = self
|
|
imagePicker.sourceType = UIImagePickerControllerSourceType.photoLibrary
|
|
imagePicker.allowsEditing = true
|
|
present(imagePicker, animated: true, completion: nil)
|
|
}
|
|
|
|
@IBAction func viewSamplePassport(_ sender: Any) {
|
|
showSample(id: 4, titleString: "Passport")
|
|
}
|
|
@IBAction func viewSamplePassbook(_ sender: Any) {
|
|
showSample(id: 3, titleString: "Passbook")
|
|
}
|
|
@IBAction func viewSampleBack(_ sender: Any) {
|
|
showSample(id: 2, titleString: "National/ Alien Reg ID Back")
|
|
}
|
|
@IBAction func viewSampleFront(_ sender: Any) {
|
|
showSample(id: 1, titleString: "National/ Alien Reg ID Front")
|
|
}
|
|
@IBAction func viewSampleCloseUpSelfie(_ sender: Any) {
|
|
showSample(id: 0, titleString: "Picture with National/Alien Reg ID Front")
|
|
}
|
|
|
|
override func didReceiveMemoryWarning() {
|
|
super.didReceiveMemoryWarning()
|
|
}
|
|
|
|
|
|
/**
|
|
Display Sample image for user
|
|
*/
|
|
func showSample(id: Int, titleString: String) {
|
|
var imageToShow: UIImage!
|
|
var imageView: UIImageView!
|
|
var vertical_spacing: String!
|
|
var imageHeightConstraint: CGFloat!
|
|
var imageWidthConstraint: CGFloat!
|
|
switch id {
|
|
case 0:
|
|
imageToShow = UIImage(named: "sampleSelfie")
|
|
imageView = UIImageView(image: imageToShow)
|
|
vertical_spacing = String(repeating: "\n", count: 15)
|
|
imageHeightConstraint = imageToShow.size.height * 0.825
|
|
imageWidthConstraint = imageToShow.size.width * 0.825
|
|
case 1:
|
|
imageToShow = UIImage(named: "sampleFront")
|
|
imageView = UIImageView(image: imageToShow)
|
|
vertical_spacing = String(repeating: "\n", count: 10)
|
|
imageHeightConstraint = imageToShow.size.height * 0.9
|
|
imageWidthConstraint = imageToShow.size.width * 0.9
|
|
case 2:
|
|
imageToShow = UIImage(named: "sampleBack")
|
|
imageView = UIImageView(image: imageToShow)
|
|
vertical_spacing = String(repeating: "\n", count: 10)
|
|
imageHeightConstraint = imageToShow.size.height * 0.9 //initially 150
|
|
imageWidthConstraint = imageToShow.size.width * 0.9 //initially 200
|
|
case 3:
|
|
imageToShow = UIImage(named: "samplePassbook")
|
|
imageView = UIImageView(image: imageToShow)
|
|
vertical_spacing = String(repeating: "\n", count: 12)
|
|
imageHeightConstraint = imageToShow.size.height * 1.2 //initially 150
|
|
imageWidthConstraint = imageToShow.size.width * 1.2 //initially 200
|
|
case 4:
|
|
imageToShow = UIImage(named: "samplePassport")
|
|
imageView = UIImageView(image: imageToShow)
|
|
vertical_spacing = String(repeating: "\n", count: 12)
|
|
imageHeightConstraint = imageToShow.size.height * 1.2 //initially 150
|
|
imageWidthConstraint = imageToShow.size.width * 1.2 //initially 200
|
|
default:
|
|
return
|
|
}
|
|
let alert = UIAlertController(title: titleString, message: vertical_spacing, preferredStyle: .alert)
|
|
alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: nil))
|
|
|
|
alert.view.addSubview(imageView)
|
|
imageView.translatesAutoresizingMaskIntoConstraints = false
|
|
alert.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .centerX, relatedBy: .equal, toItem: alert.view, attribute: .centerX, multiplier: 1, constant: 0))
|
|
alert.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .centerY, relatedBy: .equal, toItem: alert.view, attribute: .centerY, multiplier: 1, constant: 0))
|
|
alert.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .width, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: imageWidthConstraint))
|
|
alert.view.addConstraint(NSLayoutConstraint(item: imageView, attribute: .height, relatedBy: .equal, toItem: nil, attribute: .notAnAttribute, multiplier: 1.0, constant: imageHeightConstraint))
|
|
|
|
alert.view.tintColor = UIColor(hex: 0xEC1C24)
|
|
|
|
self.present(alert, animated: true, completion: nil)
|
|
}
|
|
}
|
|
|
|
extension KYCDocumentsUploadViewController: UINavigationControllerDelegate, UIImagePickerControllerDelegate {
|
|
|
|
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
|
|
|
|
if let image = info[UIImagePickerControllerEditedImage] as? UIImage {
|
|
switch index! {
|
|
case 1, 10:
|
|
self.imageViewIDFront.image = image
|
|
self.imageViewIDFront.tag = 10
|
|
case 2, 20:
|
|
self.imageViewIDBack.image = image
|
|
self.imageViewIDBack.tag = 20
|
|
case 3, 30:
|
|
self.imageViewPassbook.image = image
|
|
self.imageViewPassbook.tag = 30
|
|
case 4, 40:
|
|
self.imageViewPassport.image = image
|
|
self.imageViewPassport.tag = 40
|
|
case 5, 50:
|
|
self.imageViewCloseupSelfie.image = image
|
|
self.imageViewCloseupSelfie.tag = 50
|
|
default:
|
|
return
|
|
}
|
|
dismiss(animated: true, completion: nil)
|
|
} else {
|
|
|
|
}
|
|
}
|
|
|
|
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
|
|
dismiss(animated: true, completion: nil)
|
|
}
|
|
|
|
}
|