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

6 years ago
  1. //
  2. // ReviewViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Fm-user on 12/26/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class ReviewViewController: UIViewController {
  10. @IBOutlet weak var labelExchange: UILabel!
  11. @IBOutlet weak var labelServiceFee: UILabel!
  12. @IBOutlet weak var labelSend: UILabel!
  13. @IBOutlet weak var labelReciver: UILabel!
  14. @IBOutlet weak var labelRecipientName: UILabel!
  15. @IBOutlet weak var labelRecipientRelation: UILabel!
  16. @IBOutlet weak var labelRecipientAddress: UILabel!
  17. @IBOutlet weak var labelRecipientEmail: UILabel!
  18. @IBOutlet weak var labelRecipientMobile: UILabel!
  19. @IBOutlet weak var labelAgentOrBankOrPayoutMode: UILabel!
  20. @IBOutlet weak var labelPayoutBankOrPayoutMode: UILabel!
  21. @IBOutlet weak var labelBranchOrStateProvince: UILabel!
  22. @IBOutlet weak var labelPayoutBranchOrStateProvince: UILabel!
  23. @IBOutlet weak var labelAccountOrDistrict: UILabel!
  24. @IBOutlet weak var labelAccountNumberOrDistrictName: UILabel!
  25. @IBOutlet weak var labelCity: UILabel!
  26. @IBOutlet weak var labelDeliveryAddress: UILabel!
  27. @IBOutlet weak var reviewDetailConstraint: NSLayoutConstraint!
  28. @IBOutlet weak var viewReviewDetail: UIView!
  29. @IBOutlet weak var viewReview: UIView!
  30. @IBOutlet weak var branchOrStateProvinceView: UIView!
  31. @IBOutlet weak var accountNumOrDistrictView: UIView!
  32. @IBOutlet weak var cityView: UIView!
  33. @IBOutlet weak var addressView: UIView!
  34. @IBOutlet weak var deliveryAddressView: UIView!
  35. //Recieved from previous viewcontroller
  36. var transferDetails: [String: String]?
  37. var recipient: Recipient?
  38. var paymentMode: String?
  39. private var checkDialog = 0
  40. private var reviewviewmodel = ReviewViewModel()
  41. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  42. override func viewDidLoad() {
  43. super.viewDidLoad()
  44. setUpNavBar(id: 201, title: "Send Money")
  45. setUpAnotherLoginListener(genericviewmodel: reviewviewmodel)
  46. reviewviewmodel.reviewConnectionTimeOut.value = nil
  47. /**
  48. connection timeout
  49. */
  50. reviewviewmodel.reviewConnectionTimeOut.bind { [unowned self] in
  51. guard $0 != nil else {
  52. return
  53. }
  54. self.stopLoading()
  55. if self.checkDialog == 0{
  56. self.checkDialog = self.checkDialog+1
  57. self.popUpMessage(value: 20)
  58. }
  59. }
  60. /**
  61. Check internet connection
  62. */
  63. reviewviewmodel.internetConnection.value = nil
  64. reviewviewmodel.internetConnection.bind { [unowned self] in
  65. guard $0 != nil else {
  66. return
  67. }
  68. self.stopLoading()
  69. self.popUpMessage(value: 15)
  70. }
  71. guard transferDetails?.count != 0 && recipient != nil && paymentMode != nil else {
  72. self.popUpMessageError(value: 10, message: "Error getting data")
  73. return
  74. }
  75. reviewviewmodel.successfulTransfer.bind { [unowned self] in
  76. guard $0 != nil else {
  77. return
  78. }
  79. self.stopLoading()
  80. guard $0! else {
  81. if self.checkDialog == 0{
  82. self.checkDialog = self.checkDialog + 1
  83. self.popUpMessageError(value: 10, message: self.reviewviewmodel.getErrorMessage())
  84. }
  85. return
  86. }
  87. self.performSegue(withIdentifier: "transferSuccessful", sender: nil)
  88. }
  89. showReview()
  90. reviewviewmodel.setTransferDetails(transferDetails: transferDetails!)
  91. viewReview.layer.cornerRadius = 10
  92. viewReviewDetail.layer.cornerRadius = 10
  93. }
  94. /**
  95. Disable user interaction while fetching data from api
  96. */
  97. func startLoading(){
  98. disableUserInteractions()
  99. showActivityIndicator(activityIndicator: activityIndicator)
  100. }
  101. /**
  102. Enable user interaction while fetching data from api
  103. */
  104. func stopLoading(){
  105. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  106. self.enableUserInteractions()
  107. }
  108. /**
  109. Show review data
  110. */
  111. func showReview() {
  112. youSendAmountDispaly()
  113. serviceFeeDispaly()
  114. exchangeRateDispaly()
  115. reciverDisplayAmount()
  116. if let fullName = recipient?.getFullName(){
  117. labelRecipientName.text = fullName
  118. }
  119. if let relation = recipient?.relation{
  120. labelRecipientRelation.text = relation
  121. }
  122. if let mobileNumber = recipient?.mobileNumber{
  123. labelRecipientMobile.text = mobileNumber
  124. }
  125. if let email = recipient?.email{
  126. if email != ""{
  127. labelRecipientEmail.text = email
  128. } else {
  129. labelRecipientEmail.text = "-"
  130. }
  131. }
  132. else {
  133. labelRecipientEmail.text = "-"
  134. }
  135. if let address = recipient?.address{
  136. labelRecipientAddress.text = address
  137. }
  138. if let transferDetails = transferDetails?["bankName"]{
  139. labelPayoutBankOrPayoutMode.text = transferDetails
  140. } else {
  141. labelPayoutBankOrPayoutMode.text = "-"
  142. }
  143. if paymentMode! == paymentModeType.cashPayment.rawValue {
  144. reviewDetailConstraint.constant = 215
  145. branchOrStateProvinceView.isHidden = true
  146. accountNumOrDistrictView.isHidden = true
  147. cityView.isHidden = true
  148. labelAgentOrBankOrPayoutMode.text = "Payout Bank/ Agent"
  149. labelPayoutBankOrPayoutMode.text = transferDetails?["bankName"]
  150. } else if paymentMode! == paymentModeType.cashPaymentPartner.rawValue {
  151. reviewDetailConstraint.constant = 240
  152. branchOrStateProvinceView.isHidden = false
  153. accountNumOrDistrictView.isHidden = false
  154. deliveryAddressView.isHidden = true
  155. cityView.isHidden = true
  156. labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
  157. accountNumOrDistrictView.isHidden = true
  158. branchOrStateProvinceView.isHidden = true
  159. } else if paymentMode! == paymentModeType.bankPayment.rawValue {
  160. reviewDetailConstraint.constant = 287
  161. branchOrStateProvinceView.isHidden = false
  162. accountNumOrDistrictView.isHidden = false
  163. cityView.isHidden = true
  164. labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
  165. labelBranchOrStateProvince.text = "Branch"
  166. labelPayoutBranchOrStateProvince.text = transferDetails?["bankBranch"]
  167. labelAccountOrDistrict.text = "Account Number"
  168. labelAccountNumberOrDistrictName.text = transferDetails?["accountNumber"]
  169. deliveryAddressView.isHidden = true
  170. } else if paymentMode! == paymentModeType.homeDelivery.rawValue{
  171. reviewDetailConstraint.constant = 287
  172. labelAgentOrBankOrPayoutMode.text = "Payout Mode"
  173. labelPayoutBankOrPayoutMode.text = "Home Delivery"
  174. labelBranchOrStateProvince.text = "State/Province"
  175. labelPayoutBranchOrStateProvince.text = transferDetails?["updatedStateId"]
  176. labelAccountOrDistrict.text = "District"
  177. labelAccountNumberOrDistrictName.text = transferDetails?["updatedDistrictId"]
  178. labelCity.text = transferDetails?["updatedCity"]
  179. cityView.isHidden = false
  180. addressView.isHidden = true
  181. deliveryAddressView.isHidden = false
  182. labelDeliveryAddress.text = transferDetails?["updatedAddress"]
  183. }
  184. }
  185. /**
  186. Display send amount
  187. */
  188. func youSendAmountDispaly(){
  189. let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  190. let youSend: String = String("You Send: ")
  191. let mutableYouSend = NSMutableAttributedString(string: youSend)
  192. if let cAmount = transferDetails!["cAmount"] , let from = transferDetails!["from"]{
  193. let mutableSendAmountValue = NSMutableAttributedString(string: getCommaAddedAmountString(amountString: cAmount) + " " + from)
  194. mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
  195. let sendAmountData = NSMutableAttributedString()
  196. sendAmountData.append(mutableYouSend)
  197. sendAmountData.append(mutableSendAmountValue)
  198. labelSend.attributedText = sendAmountData
  199. }
  200. }
  201. /**
  202. Display service fee
  203. */
  204. func serviceFeeDispaly(){
  205. let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  206. let youSend: String = String("Service Fee: ")
  207. let mutableYouSend = NSMutableAttributedString(string: youSend)
  208. if let transferFee = transferDetails!["transferFee"]{
  209. let mutableSendAmountValue = NSMutableAttributedString(string: "-" + transferFee + " KRW")
  210. mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
  211. let sendAmountData = NSMutableAttributedString()
  212. sendAmountData.append(mutableYouSend)
  213. sendAmountData.append(mutableSendAmountValue)
  214. labelServiceFee.attributedText = sendAmountData
  215. }
  216. }
  217. /**
  218. Display exchange rate
  219. */
  220. func exchangeRateDispaly(){
  221. let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  222. let youSend: String = String("Exchange Rate: ")
  223. let mutableYouSend = NSMutableAttributedString(string: youSend)
  224. if let exRate = transferDetails!["exRate"]{
  225. let mutableSendAmountValue = NSMutableAttributedString(string: exRate)
  226. mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
  227. let sendAmountData = NSMutableAttributedString()
  228. sendAmountData.append(mutableYouSend)
  229. sendAmountData.append(mutableSendAmountValue)
  230. labelExchange.attributedText = sendAmountData
  231. }
  232. }
  233. /**
  234. Display reciver amount
  235. */
  236. func reciverDisplayAmount(){
  237. let amountValueColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  238. let youSend: String = String("Receiver Gets: ")
  239. let mutableYouSend = NSMutableAttributedString(string: youSend)
  240. if let pAmount = transferDetails!["pAmount"] , let to = transferDetails!["to"] {
  241. let mutableSendAmountValue = NSMutableAttributedString(string: getCommaAddedAmountString(amountString: pAmount) + " " + to)
  242. mutableSendAmountValue.addAttribute(NSAttributedStringKey.foregroundColor, value: amountValueColor, range: NSRange(location:0, length: mutableSendAmountValue.length))
  243. let sendAmountData = NSMutableAttributedString()
  244. sendAmountData.append(mutableYouSend)
  245. sendAmountData.append(mutableSendAmountValue)
  246. labelReciver.attributedText = sendAmountData
  247. }
  248. }
  249. @IBAction func transferAmount(_ sender: Any) {
  250. if self.checkDialog == 1{
  251. self.checkDialog = 0
  252. }
  253. askPassword()
  254. }
  255. /**
  256. Ask confirmation password
  257. */
  258. func askPassword() {
  259. let alertController = UIAlertController(title: "Enter your login password", message: "", preferredStyle: .alert)
  260. alertController.addTextField { (textField : UITextField!) -> Void in
  261. textField.placeholder = "Enter password"
  262. textField.isSecureTextEntry = true
  263. textField.tag = 51
  264. textField.delegate = self
  265. }
  266. let confirmAction = UIAlertAction(title: "Confirm", style: .default, handler: {
  267. alert -> Void in
  268. let passwordTextField = alertController.textFields![0] as UITextField
  269. if passwordTextField.text != "" {
  270. self.startLoading()
  271. self.reviewviewmodel.finalizeTransferDetails(userPassword: passwordTextField.text!)
  272. self.reviewviewmodel.performTransfer()
  273. } else {
  274. self.popUpMessageError(value: 11, message: "Password was missing")
  275. }
  276. })
  277. let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: {
  278. (action : UIAlertAction!) -> Void in
  279. })
  280. cancelAction.setValue(UIColor.black, forKey: "titleTextColor")
  281. confirmAction.setValue(UIColor(hex:0xEC1C24), forKey: "titleTextColor")
  282. alertController.addAction(cancelAction)
  283. alertController.addAction(confirmAction)
  284. self.present(alertController, animated: true, completion: nil)
  285. }
  286. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  287. if segue.identifier == "transferSuccessful" {
  288. let transferViewController
  289. = segue.destination as! TransferSuccessfulViewController
  290. transferViewController.responseDetails = self.reviewviewmodel.getResponseDetails()
  291. transferViewController.paymentMethod = self.paymentMode
  292. }
  293. }
  294. override func didReceiveMemoryWarning() {
  295. super.didReceiveMemoryWarning()
  296. }
  297. }
  298. extension ReviewViewController: UITextFieldDelegate {
  299. func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
  300. if textField.tag == 51 {
  301. textField.tag = 0
  302. return false
  303. }
  304. return true
  305. }
  306. }