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.
 
 
 
 

369 lines
14 KiB

//
// ReviewViewController.swift
// GMERemittance
//
// Created by Fm-user on 12/26/17.
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class ReviewViewController: UIViewController {
@IBOutlet weak var labelExchange: UILabel!
@IBOutlet weak var labelServiceFee: UILabel!
@IBOutlet weak var labelSend: UILabel!
@IBOutlet weak var labelReciver: UILabel!
@IBOutlet weak var labelRecipientName: UILabel!
@IBOutlet weak var labelRecipientRelation: UILabel!
@IBOutlet weak var labelRecipientAddress: UILabel!
@IBOutlet weak var labelRecipientEmail: UILabel!
@IBOutlet weak var labelRecipientMobile: UILabel!
@IBOutlet weak var labelAgentOrBankOrPayoutMode: UILabel!
@IBOutlet weak var labelPayoutBankOrPayoutMode: UILabel!
@IBOutlet weak var labelBranchOrStateProvince: UILabel!
@IBOutlet weak var labelPayoutBranchOrStateProvince: UILabel!
@IBOutlet weak var labelAccountOrDistrict: UILabel!
@IBOutlet weak var labelAccountNumberOrDistrictName: UILabel!
@IBOutlet weak var labelCity: UILabel!
@IBOutlet weak var labelDeliveryAddress: UILabel!
@IBOutlet weak var reviewDetailConstraint: NSLayoutConstraint!
@IBOutlet weak var viewReviewDetail: UIView!
@IBOutlet weak var viewReview: UIView!
@IBOutlet weak var branchOrStateProvinceView: UIView!
@IBOutlet weak var accountNumOrDistrictView: UIView!
@IBOutlet weak var cityView: UIView!
@IBOutlet weak var addressView: UIView!
@IBOutlet weak var deliveryAddressView: UIView!
//Recieved from previous viewcontroller
var transferDetails: [String: String]?
var recipient: Recipient?
var paymentMode: String?
private var checkDialog = 0
private var reviewviewmodel = ReviewViewModel()
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
override func viewDidLoad() {
super.viewDidLoad()
setUpNavBar(id: 201, title: "Send Money")
setUpAnotherLoginListener(genericviewmodel: reviewviewmodel)
reviewviewmodel.reviewConnectionTimeOut.value = nil
/**
connection timeout
*/
reviewviewmodel.reviewConnectionTimeOut.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
if self.checkDialog == 0{
self.checkDialog = self.checkDialog+1
self.popUpMessage(value: 20)
}
}
/**
Check internet connection
*/
reviewviewmodel.internetConnection.value = nil
reviewviewmodel.internetConnection.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
self.popUpMessage(value: 15)
}
guard transferDetails?.count != 0 && recipient != nil && paymentMode != nil else {
self.popUpMessageError(value: 10, message: "Error getting data")
return
}
reviewviewmodel.successfulTransfer.bind { [unowned self] in
guard $0 != nil else {
return
}
self.stopLoading()
guard $0! else {
if self.checkDialog == 0{
self.checkDialog = self.checkDialog + 1
self.popUpMessageError(value: 10, message: self.reviewviewmodel.getErrorMessage())
}
return
}
self.performSegue(withIdentifier: "transferSuccessful", sender: nil)
}
showReview()
reviewviewmodel.setTransferDetails(transferDetails: transferDetails!)
viewReview.layer.cornerRadius = 10
viewReviewDetail.layer.cornerRadius = 10
}
/**
Disable user interaction while fetching data from api
*/
func startLoading(){
disableUserInteractions()
showActivityIndicator(activityIndicator: activityIndicator)
}
/**
Enable user interaction while fetching data from api
*/
func stopLoading(){
self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
self.enableUserInteractions()
}
/**
Show review data
*/
func showReview() {
youSendAmountDispaly()
serviceFeeDispaly()
exchangeRateDispaly()
reciverDisplayAmount()
if let fullName = recipient?.getFullName(){
labelRecipientName.text = fullName
}
if let relation = recipient?.relation{
labelRecipientRelation.text = relation
}
if let mobileNumber = recipient?.mobileNumber{
labelRecipientMobile.text = mobileNumber
}
if let email = recipient?.email{
if email != ""{
labelRecipientEmail.text = email
} else {
labelRecipientEmail.text = "-"
}
}
else {
labelRecipientEmail.text = "-"
}
if let address = recipient?.address{
labelRecipientAddress.text = address
}
if let transferDetails = transferDetails?["bankName"]{
labelPayoutBankOrPayoutMode.text = transferDetails
} else {
labelPayoutBankOrPayoutMode.text = "-"
}
if paymentMode! == paymentModeType.cashPayment.rawValue {
reviewDetailConstraint.constant = 215
branchOrStateProvinceView.isHidden = true
accountNumOrDistrictView.isHidden = true
cityView.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Bank/ Agent"
labelPayoutBankOrPayoutMode.text = transferDetails?["bankName"]
} else if paymentMode! == paymentModeType.cashPaymentPartner.rawValue {
reviewDetailConstraint.constant = 240
branchOrStateProvinceView.isHidden = false
accountNumOrDistrictView.isHidden = false
deliveryAddressView.isHidden = true
cityView.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
accountNumOrDistrictView.isHidden = true
branchOrStateProvinceView.isHidden = true
} else if paymentMode! == paymentModeType.bankPayment.rawValue {
reviewDetailConstraint.constant = 287
branchOrStateProvinceView.isHidden = false
accountNumOrDistrictView.isHidden = false
cityView.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
labelBranchOrStateProvince.text = "Branch"
labelPayoutBranchOrStateProvince.text = transferDetails?["bankBranch"]
labelAccountOrDistrict.text = "Account Number"
labelAccountNumberOrDistrictName.text = transferDetails?["accountNumber"]
deliveryAddressView.isHidden = true
} else if paymentMode! == paymentModeType.homeDelivery.rawValue{
reviewDetailConstraint.constant = 287
labelAgentOrBankOrPayoutMode.text = "Payout Mode"
labelPayoutBankOrPayoutMode.text = "Home Delivery"
labelBranchOrStateProvince.text = "State/Province"
labelPayoutBranchOrStateProvince.text = transferDetails?["updatedStateId"]
labelAccountOrDistrict.text = "District"
labelAccountNumberOrDistrictName.text = transferDetails?["updatedDistrictId"]
labelCity.text = transferDetails?["updatedCity"]
cityView.isHidden = false
addressView.isHidden = true
deliveryAddressView.isHidden = false
labelDeliveryAddress.text = transferDetails?["updatedAddress"]
}
}
/**
Display send amount
*/
func youSendAmountDispaly(){
let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let youSend: String = String("You Send: ")
let mutableYouSend = NSMutableAttributedString(string: youSend)
if let cAmount = transferDetails!["cAmount"] , let from = transferDetails!["from"]{
let mutableSendAmountValue = NSMutableAttributedString(string: getCommaAddedAmountString(amountString: cAmount) + " " + from)
mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
let sendAmountData = NSMutableAttributedString()
sendAmountData.append(mutableYouSend)
sendAmountData.append(mutableSendAmountValue)
labelSend.attributedText = sendAmountData
}
}
/**
Display service fee
*/
func serviceFeeDispaly(){
let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let youSend: String = String("Service Fee: ")
let mutableYouSend = NSMutableAttributedString(string: youSend)
if let transferFee = transferDetails!["transferFee"]{
let mutableSendAmountValue = NSMutableAttributedString(string: "-" + transferFee + " KRW")
mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
let sendAmountData = NSMutableAttributedString()
sendAmountData.append(mutableYouSend)
sendAmountData.append(mutableSendAmountValue)
labelServiceFee.attributedText = sendAmountData
}
}
/**
Display exchange rate
*/
func exchangeRateDispaly(){
let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let youSend: String = String("Exchange Rate: ")
let mutableYouSend = NSMutableAttributedString(string: youSend)
if let exRate = transferDetails!["exRate"]{
let mutableSendAmountValue = NSMutableAttributedString(string: exRate)
mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
let sendAmountData = NSMutableAttributedString()
sendAmountData.append(mutableYouSend)
sendAmountData.append(mutableSendAmountValue)
labelExchange.attributedText = sendAmountData
}
}
/**
Display reciver amount
*/
func reciverDisplayAmount(){
let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
let youSend: String = String("Receiver Gets: ")
let mutableYouSend = NSMutableAttributedString(string: youSend)
if let pAmount = transferDetails!["pAmount"] , let to = transferDetails!["to"] {
let mutableSendAmountValue = NSMutableAttributedString(string: getCommaAddedAmountString(amountString: pAmount) + " " + to)
mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
let sendAmountData = NSMutableAttributedString()
sendAmountData.append(mutableYouSend)
sendAmountData.append(mutableSendAmountValue)
labelReciver.attributedText = sendAmountData
}
}
@IBAction func transferAmount(_ sender: Any) {
if self.checkDialog == 1{
self.checkDialog = 0
}
askPassword()
}
/**
Ask confirmation password
*/
func askPassword() {
let alertController = UIAlertController(title: "Enter your login password", message: "", preferredStyle: .alert)
alertController.addTextField { (textField : UITextField!) -> Void in
textField.placeholder = "Enter password"
textField.isSecureTextEntry = true
textField.tag = 51
textField.delegate = self
}
let confirmAction = UIAlertAction(title: "Confirm", style: .default, handler: {
alert -> Void in
let passwordTextField = alertController.textFields![0] as UITextField
if passwordTextField.text != "" {
self.startLoading()
self.reviewviewmodel.finalizeTransferDetails(userPassword: passwordTextField.text!)
self.reviewviewmodel.performTransfer()
} else {
self.popUpMessageError(value: 11, message: "Password was missing")
}
})
let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
(action : UIAlertAction!) -> Void in
})
cancelAction.setValue(UIColor.black, forKey: "titleTextColor")
confirmAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
alertController.addAction(cancelAction)
alertController.addAction(confirmAction)
self.present(alertController, animated: true, completion: nil)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "transferSuccessful" {
let transferViewController
= segue.destination as! TransferSuccessfulViewController
transferViewController.responseDetails = self.reviewviewmodel.getResponseDetails()
transferViewController.paymentMethod = self.paymentMode
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension ReviewViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
if textField.tag == 51 {
textField.tag = 0
return false
}
return true
}
}