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.
 
 
 
 

424 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")
let mainWireFram = MainWireframe.shared
let window = UIApplication.shared.keyWindow
window?.rootViewController = mainWireFram?.getMainView()
window?.makeKeyAndVisible()
// 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)
}
}