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.

1431 lines
56 KiB

6 years ago
  1. //
  2. // PaymentMethodViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Fm-user on 12/25/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. class PaymentMethodViewController: UIViewController {
  10. @IBOutlet weak var viewMain: UIView!
  11. @IBOutlet weak var viewMainCash: UIView!
  12. @IBOutlet weak var viewCash: UIView!
  13. @IBOutlet weak var viewCashDetail: UIView!
  14. @IBOutlet weak var viewCashBankBranch: UIView!
  15. @IBOutlet weak var viewMainHomeDelivery: UIView!
  16. @IBOutlet weak var viewHomeDeliveryDetail: UIView!
  17. @IBOutlet weak var viewHomeDelivery: UIView!
  18. @IBOutlet weak var viewMainBank: UIView!
  19. @IBOutlet weak var viewBankDetail: UIView!
  20. @IBOutlet weak var viewBank: UIView!
  21. @IBOutlet weak var viewBankBranch: UIView!
  22. @IBOutlet weak var buttonSave: UIButton!
  23. @IBOutlet weak var constraintCashPaymentView: NSLayoutConstraint!
  24. @IBOutlet weak var constrainBankPaymentView: NSLayoutConstraint!
  25. @IBOutlet weak var constraintMainHomeDeliveryView: NSLayoutConstraint!
  26. @IBOutlet weak var textFieldCashPartner: UITextField!
  27. @IBOutlet weak var textFieldCashBankBranch: UITextField!
  28. @IBOutlet weak var textFieldState: UITextField!
  29. @IBOutlet weak var textFieldDistrict: UITextField!
  30. @IBOutlet weak var textFieldCity: UITextField!
  31. @IBOutlet weak var textFieldAddress: UITextField!
  32. @IBOutlet weak var textFieldBankName: UITextField!
  33. @IBOutlet weak var textFieldBankBranch: UITextField!
  34. @IBOutlet weak var textFieldAccountNumber: UITextField!
  35. @IBOutlet weak var labelQuestion: UILabel!
  36. @IBOutlet weak var scrollView: UIScrollView!
  37. @IBOutlet weak var labelCashPayment: UILabel!
  38. @IBOutlet weak var labelHomeDelivery: UILabel!
  39. @IBOutlet weak var labelBankDeposit: UILabel!
  40. @IBOutlet weak var labelServiceFeeCash: UILabel!
  41. @IBOutlet weak var labelServiceFeeBank: UILabel!
  42. @IBOutlet weak var labelServiceFeeHomeDelivery: UILabel!
  43. @IBOutlet weak var labelServiceRangeCash: UILabel!
  44. @IBOutlet weak var labelServiceRangeBank: UILabel!
  45. @IBOutlet weak var labelServiceRangeHome: UILabel!
  46. @IBOutlet weak var buttonCashInfoRange: UIButton!
  47. @IBOutlet weak var buttonHomeInfoRange: UIButton!
  48. @IBOutlet weak var buttonBankInfoRange: UIButton!
  49. @IBOutlet weak var tableViewAutoComplete: UITableView!
  50. @IBOutlet weak var tableViewConstraint: NSLayoutConstraint!
  51. //ADDED for solving multiple dialog issue
  52. var networkDialogShown: Bool = false
  53. /// used for auto completion
  54. var bankBranchAutoCompeletionArray: [String] = [String]()
  55. var bankBranchAutoCompeletionList:[String] = [String]()
  56. var cellSelected: Int = 0
  57. var recipient: Recipient?
  58. static var paymentMethodConnectionCheck = 0
  59. private var paymentviewmodel = PaymentMethodViewModel()
  60. private var payoutMethodArray:[PayoutMode] = [PayoutMode]()
  61. private var payoutBankDetailArray:[AgentModel] = [AgentModel]()
  62. private var payoutCashArray:[AgentModel] = [AgentModel]()
  63. private var payoutBankBranchArray:[BankBranch] = [BankBranch]()
  64. private var activeTextField: UITextField?
  65. private var pickerView = UIPickerView()
  66. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  67. private var pickerData: [String] = [String]()
  68. private var pickerSelecteRow: Int = 0
  69. private var bankArray:[String] = [String]()
  70. private var bankCashArray:[String] = [String]()
  71. private var bankBranchNameList:[String] = [String]()
  72. private var bankBranchArray: [String] = [String]()
  73. private var bankBranchList:[String] = [String]()
  74. private var cashRangeArray: [String] = [String]()
  75. private var cashFeeArray: [String] = [String]()
  76. private var homeRangeArray:[String] = [String]()
  77. private var homeFeeArray:[String] = [String]()
  78. private var bankRangeArray:[String] = [String]()
  79. private var bankFeeArray:[String] = [String]()
  80. private var stateNameListArray: [String] = [String]()
  81. private var stateValueListArray: [String] = [String]()
  82. private var districtNameListArray: [String] = [String]()
  83. private var districtValueListArray: [String] = [String]()
  84. private var selectedIndexFor: [String: Int] = [String: Int]()
  85. private var bankIdReferenceValue: Int = 0
  86. private var branchIdReferenceValue: Int = 0
  87. private var branchName = ""
  88. private var branchPayoutId = ""
  89. private var bottomMargin: CGFloat = 0
  90. private var keyboardHeight: CGFloat = 0
  91. /// To show and hide the section
  92. private var cashPayment = false
  93. private var bankPayment = false
  94. private var homeDelivery = false
  95. private var paymentMode: String?
  96. private var paymentMethodId: String?
  97. private var serviceChargeCashPayment: String = "nil"
  98. private var serviceChargeHomePayment: String = "nil"
  99. private var serviceChargeBankPayment: String = "nil"
  100. private let serviceFeeColor = UIColor(hex:0xec1c24)
  101. private let serviceFee = NSMutableAttributedString(string: "Service Fee: ")
  102. override func viewDidAppear(_ animated: Bool) {
  103. super.viewDidAppear(true)
  104. setUpAnotherLoginListener(genericviewmodel: paymentviewmodel)
  105. let desiredOffset = CGPoint(x: 0, y: -self.scrollView.contentInset.top)
  106. self.scrollView.setContentOffset(desiredOffset, animated: false)
  107. textFieldBankBranch.text = ""
  108. textFieldAccountNumber.text = ""
  109. tableViewAutoComplete.isHidden = true
  110. payoutMethodBindCall()
  111. }
  112. @IBAction func buttomCashRangeInfo(_ sender: Any) {
  113. paymentMethodId = paymentMethodIdType.cashMethod.rawValue
  114. popUpServiceFeeRange()
  115. }
  116. @IBAction func buttomHomeRangeInfo(_ sender: Any) {
  117. paymentMethodId = paymentMethodIdType.homeMethod.rawValue
  118. popUpServiceFeeRange()
  119. }
  120. @IBAction func buttomBankRangeInfo(_ sender: Any) {
  121. paymentMethodId = paymentMethodIdType.bankMethod.rawValue
  122. popUpServiceFeeRange()
  123. }
  124. @IBAction func showExchangeRateCashPayment(_ sender: Any) {
  125. if textFieldCashPartner.text == "" || (textFieldCashBankBranch.text?.isBlank)! {
  126. if viewCashBankBranch.isHidden == true && (textFieldCashBankBranch.text?.isBlank)! {
  127. performSegue(withIdentifier: "exchangeRate", sender: nil)
  128. } else {
  129. self.popUpMessageError(value: 11, message: "Please fill all the fields")
  130. }
  131. } else {
  132. performSegue(withIdentifier: "exchangeRate", sender: nil)
  133. }
  134. activeTextField?.resignFirstResponder()
  135. }
  136. @IBAction func showExchangeRateHomeDelivery(_ sender: Any) {
  137. if (textFieldCity.text?.isBlank)! || textFieldState.text == "" || textFieldDistrict.text == "" || (textFieldAddress.text?.isBlank)! {
  138. self.popUpMessageError(value: 11, message: "Please fill all the fields")
  139. } else {
  140. performSegue(withIdentifier: "exchangeRate", sender: nil)
  141. }
  142. activeTextField?.resignFirstResponder()
  143. }
  144. @IBAction func showExchangeRate(_ sender: Any) {
  145. if textFieldBankName.text == "" || (textFieldAccountNumber.text?.isBlank)! || textFieldBankBranch.text == "" {
  146. if viewBankBranch.isHidden == true && textFieldBankBranch.text == "" && !(textFieldAccountNumber.text?.isBlank)! {
  147. performSegue(withIdentifier: "exchangeRate", sender: nil)
  148. } else {
  149. self.popUpMessageError(value: 11, message: "Please fill all the fields.")
  150. }
  151. } else {
  152. if bankBranchAutoCompeletionList.contains(textFieldBankBranch.text!) {
  153. performSegue(withIdentifier: "exchangeRate", sender: nil)
  154. } else {
  155. self.textFieldBankBranch.text = ""
  156. if bankBranchAutoCompeletionArray.isEmpty {
  157. bankBranchAutoCompeletionArray = bankBranchAutoCompeletionList
  158. }
  159. self.popUpMessageInfo(value: 16, title: "Invalid Branch Selected", message: "Please select a branch from the list.")
  160. }
  161. }
  162. activeTextField?.resignFirstResponder()
  163. }
  164. @IBAction func agentLocationTap(_ sender: UITapGestureRecognizer) {
  165. let storyboard = UIStoryboard.init(name: "Agent", bundle: Bundle.main)
  166. let vController = storyboard.instantiateViewController(withIdentifier: "AgentBankViewController") as! AgentBankViewController
  167. vController.sendMoneyAgentLocationStatus = true
  168. if let country = recipient?.country{
  169. vController.selectedCountry = country
  170. }
  171. self.navigationController!.pushViewController(vController, animated: true)
  172. }
  173. func setUpHeaderMessage() {
  174. let recipientColor = UIColor(red: 236/255, green: 28/255.0, blue: 36/255, alpha: 1.0)
  175. let questionPart1: String = String("How would you like ")
  176. var questionPart2: String = String("to pick your money ?")
  177. if let country = recipient?.country{
  178. questionPart2 = String(" to pick your money in " + (country) + "?")
  179. }
  180. let mutableQuestion1 = NSMutableAttributedString(string: questionPart1)
  181. let mutableQuestion2 = NSMutableAttributedString(string: questionPart2)
  182. var mutableRecipient = NSMutableAttributedString(string: "")
  183. if let fullName = recipient?.getFullName(){
  184. mutableRecipient = NSMutableAttributedString(string: (fullName))
  185. }
  186. mutableRecipient.addAttribute(NSAttributedStringKey.foregroundColor, value: recipientColor, range: NSRange(location:0, length: mutableRecipient.length))
  187. let mutableQuestion = NSMutableAttributedString()
  188. mutableQuestion.append(mutableQuestion1)
  189. mutableQuestion.append(mutableRecipient)
  190. mutableQuestion.append(mutableQuestion2)
  191. labelQuestion.attributedText = mutableQuestion
  192. }
  193. @objc func keyboardWillShow(notification: NSNotification) {
  194. var userInfo = notification.userInfo!
  195. var keyboardFrame:CGRect = (userInfo[UIKeyboardFrameEndUserInfoKey] as! NSValue).cgRectValue
  196. keyboardFrame = self.view.convert(keyboardFrame, from: nil)
  197. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  198. keyboardHeight = keyboardFrame.size.height
  199. contentInset.bottom = keyboardHeight + 100.00
  200. scrollView.contentInset = contentInset
  201. }
  202. @objc func keyboardWillHide(notification: NSNotification) {
  203. var contentInset = UIEdgeInsets.zero
  204. contentInset.bottom = -75.00
  205. self.scrollView.contentInset = contentInset
  206. }
  207. @objc func clearKeyboard() {
  208. activeTextField?.resignFirstResponder()
  209. }
  210. override func viewDidLoad() {
  211. super.viewDidLoad()
  212. setUpNavBar(id: 201, title: "Send Money")
  213. tableViewAutoComplete.delegate = self
  214. tableViewAutoComplete.dataSource = self
  215. scrollView.delegate = self
  216. bottomMargin = scrollView.contentInset.bottom
  217. selectedIndexFor["district"] = 0
  218. selectedIndexFor["state"] = 0
  219. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow), name: NSNotification.Name.UIKeyboardWillShow, object: nil)
  220. NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide), name: NSNotification.Name.UIKeyboardWillHide, object: nil)
  221. startLoading()
  222. viewMain.isHidden = true
  223. paymentviewmodel.paymentMethodConnectionTimeOut.value = nil
  224. /**
  225. connection timeout
  226. */
  227. paymentviewmodel.paymentMethodConnectionTimeOut.bind { [weak self] in
  228. guard $0 != nil else {
  229. return
  230. }
  231. self?.stopLoading()
  232. if PaymentMethodViewController.paymentMethodConnectionCheck == 0{
  233. PaymentMethodViewController.paymentMethodConnectionCheck = PaymentMethodViewController.paymentMethodConnectionCheck+1
  234. self?.popUpMessage(value: 20)
  235. self?.viewMain.isHidden = true
  236. }
  237. // self?.viewMain.isHidden = true
  238. }
  239. /**
  240. Check internet connection
  241. */
  242. paymentviewmodel.internetConnection.value = nil
  243. paymentviewmodel.internetConnection.bind { [unowned self] in
  244. guard $0 != nil else {
  245. return
  246. }
  247. self.stopLoading()
  248. if !self.networkDialogShown {
  249. self.networkDialogShown = true
  250. self.popUpMessage(value: 15)
  251. self.viewMain.isHidden = true
  252. }
  253. }
  254. guard recipient != nil else {
  255. self.popUpMessageError(value: 10, message: "Error getting data")
  256. stopLoading()
  257. viewMain.isHidden = false
  258. return
  259. }
  260. buttonSave.isHidden = true
  261. setUpHeaderMessage()
  262. // payoutMethodBindCall()
  263. if let countryId = self.recipient?.countryId{
  264. self.paymentviewmodel.fetchCountryPayoutMode(countryId: countryId)
  265. }
  266. payoutBankBindCall()
  267. self.payoutBankBranchBindCall()
  268. if let countryId = self.recipient?.countryId{
  269. self.paymentviewmodel.fetchPayoutBankDetail(countryId: countryId, payoutMethodId: "1")
  270. }
  271. cddListBindCall()
  272. fetchStates()
  273. if let stateId = self.recipient?.stateId {
  274. fetchDistrict(stateId: stateId)
  275. }
  276. textFieldBankName.delegate = self
  277. textFieldBankBranch.delegate = self
  278. textFieldAccountNumber.delegate = self
  279. textFieldCity.delegate = self
  280. textFieldState.delegate = self
  281. textFieldDistrict.delegate = self
  282. textFieldAddress.delegate = self
  283. textFieldCashBankBranch.delegate = self
  284. textFieldCashPartner.delegate = self
  285. pickerView.delegate = self
  286. pickerView.dataSource = self
  287. textFieldBankBranch.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
  288. textFieldBankBranch.layer.borderWidth = 1.0
  289. textFieldBankBranch.layer.cornerRadius = 5
  290. textFieldBankName.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
  291. textFieldBankName.layer.borderWidth = 1.0
  292. textFieldBankName.layer.cornerRadius = 5
  293. textFieldAccountNumber.layer.borderColor = UIColor(red:0.91, green:0.93, blue:0.95, alpha:1.0).cgColor
  294. textFieldAccountNumber.layer.borderWidth = 1.0
  295. textFieldAccountNumber.layer.cornerRadius = 5
  296. self.textFieldBankBranch.addTarget(self, action: #selector(self.searchRecords(_:)), for: .editingChanged)
  297. }
  298. @objc func searchRecords(_ textField: UITextField){
  299. bankBranchAutoCompeletionArray.removeAll()
  300. if textField.text?.count != 0 {
  301. for bankBranch in bankBranchAutoCompeletionList {
  302. if let branchToSearch = textField.text {
  303. let range = bankBranch.lowercased().range(of:branchToSearch , options: .caseInsensitive, range: nil, locale: nil)
  304. if range != nil {
  305. self.bankBranchAutoCompeletionArray.append(bankBranch)
  306. }
  307. }
  308. }
  309. } else{
  310. for bankBranch in bankBranchAutoCompeletionList {
  311. bankBranchAutoCompeletionArray.append(bankBranch)
  312. }
  313. }
  314. tableViewAutoComplete.reloadData()
  315. }
  316. override func viewWillDisappear(_ animated: Bool) {
  317. payoutMethodBindCall()
  318. }
  319. /**
  320. Disable user interaction while fetching data from api
  321. */
  322. func startLoading(){
  323. disableUserInteractions()
  324. showActivityIndicator(activityIndicator: activityIndicator)
  325. }
  326. /**
  327. Enable user interaction while fetching data from api
  328. */
  329. func stopLoading(){
  330. self.dismissActivityIndicator(activityIndicator: self.activityIndicator)
  331. self.enableUserInteractions()
  332. }
  333. func payoutMethodBindCall(){
  334. paymentviewmodel.payoutMethodType.bind{[weak self] in
  335. guard $0 != nil else {
  336. return
  337. }
  338. // self?.stopLoading()
  339. guard $0! else {
  340. self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!)
  341. self?.stopLoading()
  342. self?.viewMain.isHidden = true
  343. return
  344. }
  345. self?.payoutMethodArray = (self?.paymentviewmodel.getPayoutMethodArray())!
  346. self?.paymentSectionHide()
  347. self?.setUpPayoutMethod()
  348. self?.stopLoading()
  349. self?.viewMain.isHidden = false
  350. self?.toGetAmuountRange()
  351. }
  352. }
  353. /**
  354. Api request for payout Bank
  355. */
  356. func payoutBankBindCall(){
  357. paymentviewmodel.payoutBankAvailable.bind{[weak self] in
  358. guard $0 != nil else {
  359. return
  360. }
  361. guard $0! else {
  362. // self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!)
  363. self?.stopLoading()
  364. self?.viewMain.isHidden = true
  365. return
  366. }
  367. self?.payoutBankDetailArray = (self?.paymentviewmodel.getPayoutBankDetailArray())!
  368. self?.bankArray = (self?.payoutBankDetailArray.map{$0.name!})!
  369. if self?.paymentviewmodel.getPayoutCashArray() != nil {
  370. self?.payoutCashArray = (self?.paymentviewmodel.getPayoutCashArray())!
  371. self?.bankCashArray = (self?.payoutCashArray.map{$0.name!})!
  372. }
  373. self?.stopLoading()
  374. self?.paymentviewmodel.payoutBankAvailable.value = nil
  375. }
  376. }
  377. /**
  378. Api request to fetch state data
  379. */
  380. func fetchStates() {
  381. if let countryId = recipient?.countryId{
  382. paymentviewmodel.fetchCDDListFor(cddName: cddCode.Province.rawValue, param: ["countryId": countryId])
  383. }
  384. }
  385. /**
  386. Api request to fetch district data
  387. - parameter stateId: Required state id to fetch district value
  388. */
  389. func fetchDistrict(stateId: String) {
  390. if let countryId = recipient?.countryId{
  391. paymentviewmodel.fetchCDDListFor(cddName: cddCode.District.rawValue, param: [ "countryId": countryId, "provinceId": stateId])
  392. }
  393. }
  394. /**
  395. Api request to cdd List i.e. state and district
  396. */
  397. func cddListBindCall(){
  398. paymentviewmodel.cddListAvailable.bind { [weak self] in
  399. guard $0 != nil else {
  400. return
  401. }
  402. guard $0! != 0 else {
  403. // self?.popUpMessageError(value: 10, message: (self?.paymentviewmodel.getErrorMessage())!)
  404. return
  405. }
  406. // self?.stopLoading()
  407. switch $0!{
  408. case 2:
  409. if let stateList = self?.paymentviewmodel.getStateList(){
  410. self?.stateNameListArray = stateList
  411. }
  412. if let stateValueList = self?.paymentviewmodel.getStateValueList(){
  413. self?.stateValueListArray = stateValueList
  414. }
  415. case 3:
  416. if let districtList = self?.paymentviewmodel.getDistrictList(){
  417. self?.districtNameListArray = districtList.map{$0.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines)}
  418. }
  419. if let districtListValue = self?.paymentviewmodel.getDistrictValueList(){
  420. self?.districtValueListArray = districtListValue
  421. }
  422. default:
  423. return
  424. }
  425. self?.stopLoading()
  426. self?.paymentviewmodel.cddListAvailable.value = nil
  427. }
  428. }
  429. /**
  430. Api request to fetch payout Bank Branch
  431. */
  432. func payoutBankBranchBindCall(){
  433. paymentviewmodel.payoutBankBranchAvailable.bind{[unowned self] in
  434. guard $0 != nil else {
  435. return
  436. }
  437. self.stopLoading()
  438. guard $0! else {
  439. self.popUpMessageError(value: 10, message: (self.paymentviewmodel.getErrorMessage()))
  440. self.stopLoading()
  441. self.viewMain.isHidden = false
  442. return
  443. }
  444. // to remove branch when bank name selected
  445. self.bankBranchAutoCompeletionList.removeAll()
  446. self.bankBranchAutoCompeletionArray.removeAll()
  447. self.payoutBankBranchArray = (self.paymentviewmodel.getPayoutBankBranchArray())
  448. if self.payoutBankBranchArray.count > 0{
  449. self.bankBranchNameList = (self.payoutBankBranchArray.map{$0.name!})
  450. }
  451. if self.payoutBankBranchArray.count > 0 {
  452. self.bankBranchArray = (self.payoutBankBranchArray.map{$0.name!})
  453. }
  454. self.bankBranchAutoCompeletionArray = (self.payoutBankBranchArray.map{$0.name!})
  455. if self.bankBranchAutoCompeletionArray.count > 0{
  456. for bankBranch in self.bankBranchAutoCompeletionArray {
  457. self.bankBranchAutoCompeletionList.append(bankBranch)
  458. }
  459. }
  460. self.tableViewAutoComplete.reloadData()
  461. }
  462. }
  463. /**
  464. Set up values as per payout method
  465. */
  466. func setUpPayoutMethod(){
  467. for payoutMethod in payoutMethodArray{
  468. switch payoutMethod.payoutMethodId {
  469. case paymentMethodIdType.cashMethod.rawValue?:
  470. cashPaymentMethod()
  471. if payoutMethod.serviceCharge.count > 0 {
  472. if let serviceCharge = payoutMethod.serviceCharge[0].transferFee {
  473. serviceChargeCashPayment = serviceCharge
  474. if payoutMethod.serviceCharge.count > 0{
  475. let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-")
  476. let cashFirstRangeServiceFee = firstRange1[1]
  477. labelServiceRangeCash.text = "(Upto \(cashFirstRangeServiceFee )"
  478. }
  479. labelServiceRangeCash.isHidden = false
  480. buttonCashInfoRange.isHidden = false
  481. }
  482. } else {
  483. serviceChargeCashPayment = "N/A"
  484. labelServiceRangeCash.isHidden = true
  485. buttonCashInfoRange.isHidden = true
  486. }
  487. setupCashFee()
  488. case paymentMethodIdType.bankMethod.rawValue?:
  489. bankPaymentMethod()
  490. if payoutMethod.serviceCharge.count > 0 {
  491. if let serviceCharge = payoutMethod.serviceCharge[0].transferFee {
  492. serviceChargeBankPayment = serviceCharge
  493. if payoutMethod.serviceCharge.count > 0{
  494. let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-")
  495. let lastpart = firstRange1[1]
  496. labelServiceRangeBank.text = "(Upto \(lastpart)"
  497. }
  498. labelServiceRangeBank.isHidden = false
  499. buttonBankInfoRange.isHidden = false
  500. }
  501. } else {
  502. serviceChargeCashPayment = "N/A"
  503. labelServiceRangeBank.isHidden = true
  504. buttonBankInfoRange.isHidden = true
  505. }
  506. setupbankFee()
  507. case paymentMethodIdType.homeMethod.rawValue?:
  508. textFieldState.text = recipient?.state
  509. textFieldCity.text = recipient?.city
  510. textFieldDistrict.text = recipient?.district
  511. textFieldAddress.text = recipient?.address
  512. homePaymentMethod()
  513. if payoutMethod.serviceCharge.count > 0 {
  514. if let serviceCharge = payoutMethod.serviceCharge[0].transferFee {
  515. serviceChargeHomePayment = serviceCharge
  516. if payoutMethod.serviceCharge.count > 0{
  517. let firstRange1 = payoutMethod.serviceCharge[0].range!.split(separator: "-")
  518. let lastpart = firstRange1[1]
  519. labelServiceRangeHome.text = "(Upto \(lastpart)"
  520. }
  521. labelServiceRangeHome.isHidden = false
  522. buttonHomeInfoRange.isHidden = false
  523. }
  524. } else {
  525. serviceChargeHomePayment = "N/A"
  526. labelServiceRangeHome.isHidden = true
  527. buttonHomeInfoRange.isHidden = true
  528. }
  529. setupHomeFee()
  530. default:
  531. return
  532. }
  533. }
  534. }
  535. /**
  536. Get amount range as per payout method id
  537. */
  538. func toGetAmuountRange() {
  539. for payoutMethod in payoutMethodArray{
  540. switch payoutMethod.payoutMethodId {
  541. case paymentMethodIdType.cashMethod.rawValue?:
  542. let seviceFeeRanges = payoutMethod.serviceCharge
  543. if seviceFeeRanges.count > 0{
  544. for serviceCharge in seviceFeeRanges[0..<seviceFeeRanges.count]{
  545. if let serviceChargeRange = serviceCharge.range{
  546. cashRangeArray.append(serviceChargeRange)
  547. }
  548. if let transferFee = serviceCharge.transferFee{
  549. cashFeeArray.append(transferFee)
  550. }
  551. }
  552. }
  553. case paymentMethodIdType.bankMethod.rawValue?:
  554. let seviceFeeRanges = payoutMethod.serviceCharge
  555. if seviceFeeRanges.count > 0{
  556. for serviceCharge in seviceFeeRanges[0..<seviceFeeRanges.count]{
  557. if let serviceChargeRange = serviceCharge.range{
  558. bankRangeArray.append(serviceChargeRange)
  559. }
  560. if let transferFee = serviceCharge.transferFee{
  561. bankFeeArray.append(transferFee)
  562. }
  563. }
  564. }
  565. case paymentMethodIdType.homeMethod.rawValue?:
  566. let seviceFeeRanges = payoutMethod.serviceCharge
  567. if seviceFeeRanges.count > 0{
  568. for serviceCharge in seviceFeeRanges[0..<seviceFeeRanges.count]{
  569. if let serviceChargeRange = serviceCharge.range{
  570. homeRangeArray.append(serviceChargeRange)
  571. }
  572. if let transferFee = serviceCharge.transferFee{
  573. homeFeeArray.append(transferFee)
  574. }
  575. }
  576. }
  577. default:
  578. return
  579. }
  580. }
  581. }
  582. /**
  583. Show fee range in pop up dialog
  584. */
  585. func popUpServiceFeeRange(){
  586. guard let navController = self.navigationController else { return }
  587. let popUpViewController = UIStoryboard(name: "RecipientListViewController", bundle: nil).instantiateViewController(withIdentifier: "rangePopUp") as! PopUpSavingViewController
  588. switch paymentMethodId {
  589. case paymentMethodIdType.cashMethod.rawValue?:
  590. popUpViewController.rangeCount = cashFeeArray.count
  591. if cashFeeArray.count > 0{
  592. for i in 0..<cashFeeArray.count {
  593. switch i {
  594. case 0:
  595. let firstRange1 = cashRangeArray[i].split(separator: "-")
  596. let lastrange = firstRange1[1]
  597. popUpViewController.firstRange = "Upto - \(lastrange)"
  598. popUpViewController.firstRangefee = cashFeeArray[i]
  599. case 1:
  600. popUpViewController.secondRange = cashRangeArray[i]
  601. popUpViewController.secondRangefee = cashFeeArray[i]
  602. case 2:
  603. popUpViewController.thirdRange = cashRangeArray[i]
  604. popUpViewController.thirdRangefee = cashFeeArray[i]
  605. default:
  606. return
  607. }
  608. }
  609. }
  610. case paymentMethodIdType.homeMethod.rawValue?:
  611. popUpViewController.rangeCount = homeFeeArray.count
  612. if homeFeeArray.count > 0{
  613. for i in 0..<homeFeeArray.count{
  614. switch i {
  615. case 0:
  616. let firstRange1 = homeRangeArray[i].split(separator: "-")
  617. let lastrange = firstRange1[1]
  618. popUpViewController.firstRange = "Upto - \(lastrange)"
  619. popUpViewController.firstRangefee = homeFeeArray[i]
  620. case 1:
  621. popUpViewController.secondRange = homeRangeArray[i]
  622. popUpViewController.secondRangefee = homeFeeArray[i]
  623. case 2:
  624. popUpViewController.thirdRange = homeRangeArray[i]
  625. popUpViewController.thirdRangefee = homeFeeArray[i]
  626. default:
  627. return
  628. }
  629. }
  630. }
  631. case paymentMethodIdType.bankMethod.rawValue?:
  632. popUpViewController.rangeCount = bankFeeArray.count
  633. if bankFeeArray.count > 0 {
  634. for i in 0..<bankFeeArray.count {
  635. switch i {
  636. case 0:
  637. let firstRange1 = bankRangeArray[i].split(separator: "-")
  638. let lastrange = firstRange1[1]
  639. popUpViewController.firstRange = "Upto - \(lastrange)"
  640. popUpViewController.firstRangefee = bankFeeArray[i]
  641. case 1:
  642. popUpViewController.secondRange = bankRangeArray[i]
  643. popUpViewController.secondRangefee = bankFeeArray[i]
  644. case 2:
  645. popUpViewController.thirdRange = bankRangeArray[i]
  646. popUpViewController.thirdRangefee = bankFeeArray[i]
  647. default:
  648. return
  649. }
  650. }
  651. }
  652. default:
  653. return
  654. }
  655. navController.addChildViewController(popUpViewController)
  656. popUpViewController.view.frame = navController.view.bounds
  657. navController.view.addSubview(popUpViewController.view)
  658. popUpViewController.didMove(toParentViewController: navController)
  659. }
  660. /**
  661. Cash payment method
  662. */
  663. func cashPaymentMethod(){
  664. self.viewMainCash.isHidden = false
  665. if let recipientCountry = recipient?.country{
  666. labelCashPayment.text = "Cash payment in " + recipientCountry
  667. }
  668. self.viewMainCash.layer.cornerRadius = 10
  669. self.constraintCashPaymentView.constant = 81
  670. viewCashDetail.isHidden = true
  671. }
  672. /**
  673. Set up cash fee
  674. */
  675. func setupCashFee(){
  676. if self.serviceChargeCashPayment != "nil"{
  677. let serviceFeeCashAmount = NSMutableAttributedString(string: serviceChargeCashPayment)
  678. serviceFeeCashAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeCashAmount.length))
  679. let displayStringCash = NSMutableAttributedString()
  680. displayStringCash.append(serviceFee)
  681. displayStringCash.append(serviceFeeCashAmount)
  682. labelServiceFeeCash.attributedText = displayStringCash
  683. }
  684. }
  685. /**
  686. Bank payment method
  687. */
  688. func bankPaymentMethod(){
  689. self.viewMainBank.isHidden = false
  690. if let country = recipient?.country{
  691. labelBankDeposit.text = "Bank deposit in " + country
  692. }
  693. viewMainBank.layer.cornerRadius = 10
  694. constrainBankPaymentView.constant = 81
  695. viewBankDetail.isHidden = true
  696. }
  697. /**
  698. Set up bank fee
  699. */
  700. func setupbankFee(){
  701. if self.serviceChargeBankPayment != "nil"{
  702. let serviceFeeBankAmount = NSMutableAttributedString(string: serviceChargeBankPayment)
  703. serviceFeeBankAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeBankAmount.length))
  704. let displayStringBank = NSMutableAttributedString()
  705. displayStringBank.append(serviceFee)
  706. displayStringBank.append(serviceFeeBankAmount)
  707. labelServiceFeeBank.attributedText = displayStringBank
  708. }
  709. }
  710. /**
  711. Home payment method
  712. */
  713. func homePaymentMethod(){
  714. self.viewMainHomeDelivery.isHidden = false
  715. if let country = recipient?.country{
  716. labelHomeDelivery.text = "Home delivery in " + country
  717. }
  718. viewMainHomeDelivery.layer.cornerRadius = 10
  719. constraintMainHomeDeliveryView.constant = 81
  720. viewHomeDeliveryDetail.isHidden = true
  721. }
  722. func setupHomeFee(){
  723. if self.serviceChargeHomePayment != "nil"{
  724. let serviceFeeHomeAmount = NSMutableAttributedString(string: serviceChargeHomePayment)
  725. serviceFeeHomeAmount.addAttribute(NSAttributedStringKey.foregroundColor, value: serviceFeeColor, range: NSRange(location:0, length: serviceFeeHomeAmount.length))
  726. let displayStringHome = NSMutableAttributedString()
  727. displayStringHome.append(serviceFee)
  728. displayStringHome.append(serviceFeeHomeAmount)
  729. labelServiceFeeHomeDelivery.attributedText = displayStringHome
  730. }
  731. }
  732. /**
  733. Payment section hide
  734. */
  735. func paymentSectionHide(){
  736. self.viewMainCash.isHidden = true
  737. self.viewMainBank.isHidden = true
  738. self.viewMainHomeDelivery.isHidden = true
  739. constraintCashPaymentView.constant = 0
  740. constrainBankPaymentView.constant = 0
  741. constraintMainHomeDeliveryView.constant = 0
  742. }
  743. /**
  744. Tap action
  745. */
  746. @IBAction func cashPaymentTap(_ sender: Any) {
  747. bankBranchCondition()
  748. paymentMode = paymentModeType.cashPayment.rawValue
  749. let paymentMethodIdArray = payoutMethodArray.filter{$0.payoutMethodId == "1" || $0.payoutMethodId == "2" || $0.payoutMethodId == "12" }
  750. if paymentMethodIdArray.count == 3{
  751. hideHomeDeliverySection()
  752. hideBankSection()
  753. } else if paymentMethodIdArray.count == 1{
  754. constrainBankPaymentView.constant = 0
  755. }
  756. cashPayment = !cashPayment
  757. if cashPayment == false {
  758. hideCashPaymentSection()
  759. }else{
  760. hideBankSection()
  761. showCashPaymentSection()
  762. paymentMode = paymentModeType.cashPaymentPartner.rawValue
  763. }
  764. textFieldCashBankBranch.text = ""
  765. }
  766. /**
  767. Hide cash payment section
  768. */
  769. func hideCashPaymentSection(){
  770. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  771. contentInset.bottom = 75
  772. scrollView.contentInset = contentInset
  773. constraintCashPaymentView.constant = 81
  774. viewCashDetail.isHidden = true
  775. viewCash.layer.cornerRadius = 10
  776. cashPayment = false
  777. }
  778. /**
  779. Show cash payment section
  780. */
  781. func showCashPaymentSection(){
  782. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  783. contentInset.bottom = -75
  784. scrollView.contentInset = contentInset
  785. constraintCashPaymentView.constant = 320
  786. viewCashDetail.isHidden = false
  787. viewCash.layer.cornerRadius = 0
  788. }
  789. /**
  790. Home deliver tap action
  791. */
  792. @IBAction func homeDeliveryTap(_ sender: Any) {
  793. bankBranchCondition()
  794. paymentMode = paymentModeType.homeDelivery.rawValue
  795. hideBankSection()
  796. hideCashPaymentSection()
  797. homeDelivery = !homeDelivery
  798. if homeDelivery == false {
  799. hideHomeDeliverySection()
  800. }else {
  801. showHomeDeliverySection()
  802. }
  803. }
  804. /**
  805. Home delivery section
  806. */
  807. func hideHomeDeliverySection(){
  808. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  809. contentInset.bottom = 75
  810. scrollView.contentInset = contentInset
  811. constraintMainHomeDeliveryView.constant = 81
  812. viewHomeDeliveryDetail.isHidden = true
  813. viewHomeDelivery.layer.cornerRadius = 10
  814. homeDelivery = false
  815. }
  816. /**
  817. Show home delivery section
  818. */
  819. func showHomeDeliverySection(){
  820. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  821. contentInset.bottom = -75
  822. scrollView.contentInset = contentInset
  823. constraintMainHomeDeliveryView.constant = 490
  824. viewHomeDeliveryDetail.isHidden = false
  825. viewHomeDelivery.layer.cornerRadius = 0
  826. }
  827. /**
  828. Bank payment tap
  829. */
  830. @IBAction func bankPaymentTap(_ sender: Any) {
  831. bankIdReferenceValue = 0
  832. bankBranchCondition()
  833. hideCashPaymentSection()
  834. paymentMode = paymentModeType.bankPayment.rawValue
  835. let paymentMethodIdArray = payoutMethodArray.filter{$0.payoutMethodId == "1" || $0.payoutMethodId == "2" || $0.payoutMethodId == "12" }
  836. if paymentMethodIdArray.count == 3{
  837. hideHomeDeliverySection()
  838. hideCashPaymentSection()
  839. } else if paymentMethodIdArray.count == 1{
  840. constraintCashPaymentView.constant = 0
  841. }
  842. bankPayment = !bankPayment
  843. if bankPayment == false {
  844. hideBankSection()
  845. } else {
  846. startLoading()
  847. showbankSection()
  848. if let countryId = recipient?.countryId{
  849. self.paymentviewmodel.fetchPayoutBankDetail(countryId: countryId, payoutMethodId: "2")
  850. }
  851. }
  852. }
  853. /**
  854. Hide bank section
  855. */
  856. func hideBankSection() {
  857. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  858. contentInset.bottom = 75
  859. scrollView.contentInset = contentInset
  860. constrainBankPaymentView.constant = 81
  861. viewBankDetail.isHidden = true
  862. buttonSave.isHidden = true
  863. viewBank.layer.cornerRadius = 10
  864. bankPayment = false
  865. }
  866. /**
  867. Show bank section
  868. */
  869. func showbankSection(){
  870. var contentInset:UIEdgeInsets = self.scrollView.contentInset
  871. contentInset.bottom = -75
  872. scrollView.contentInset = contentInset
  873. constrainBankPaymentView.constant = 420
  874. viewBankDetail.isHidden = false
  875. buttonSave.isHidden = false
  876. viewBank.layer.cornerRadius = 0
  877. }
  878. /**
  879. Bank branch condition
  880. */
  881. func bankBranchCondition(){
  882. viewCashBankBranch.isHidden = false
  883. textFieldCashPartner.text = ""
  884. viewBankBranch.isHidden = false
  885. textFieldBankName.text = ""
  886. textFieldBankBranch.text = ""
  887. tableViewAutoComplete.isHidden = true
  888. activeTextField?.resignFirstResponder()
  889. }
  890. /**
  891. Doing Picker view button
  892. */
  893. func pickUp(_ textField : UITextField){
  894. // UIPickerView
  895. self.pickerView = UIPickerView(frame:CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: 216))
  896. self.pickerView.delegate = self
  897. self.pickerView.dataSource = self
  898. //self.pickerView.backgroundColor = UIColor.white
  899. textField.inputView = self.pickerView
  900. // ToolBar
  901. let toolBar = UIToolbar()
  902. toolBar.barStyle = .default
  903. toolBar.isTranslucent = true
  904. toolBar.tintColor = UIColor(red: 92/255, green: 216/255, blue: 255/255, alpha: 1)
  905. toolBar.sizeToFit()
  906. // Adding Button ToolBar
  907. let customButton = UIButton()
  908. customButton.setTitle("Done", for: .normal)
  909. customButton.addTarget(self, action: #selector(doneClick), for: .touchUpInside)
  910. customButton.setTitleColor(UIColor(hex : 0xED1C24), for: .normal)
  911. customButton.frame = CGRect(x: 0, y: 0, width: 60, height: 30)
  912. let doneButton = UIBarButtonItem(customView: customButton)
  913. let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
  914. let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(cancelClick))
  915. cancelButton.tintColor = UIColor.black
  916. toolBar.setItems([cancelButton, spaceButton, doneButton], animated: false)
  917. toolBar.isUserInteractionEnabled = true
  918. textField.inputAccessoryView = toolBar
  919. }
  920. /**
  921. Picker view done click
  922. */
  923. @objc func doneClick() {
  924. //Added Guard block to prevent crash
  925. guard pickerData.count > 0 else {
  926. textFieldBankName.resignFirstResponder()
  927. return
  928. }
  929. self.activeTextField?.resignFirstResponder()
  930. if activeTextField == textFieldBankName {
  931. bankIdReferenceValue = pickerSelecteRow
  932. //Clear the branch for the selected bank
  933. textFieldBankBranch.text = ""
  934. //Fetch the branch for the selected bank
  935. if payoutBankDetailArray[pickerSelecteRow].hasBranch! == true {
  936. viewBankBranch.isHidden = false
  937. constrainBankPaymentView.constant = 420
  938. startLoading()
  939. if let country = recipient?.countryId, let payoutId = payoutBankDetailArray[pickerSelecteRow].payoutId{
  940. paymentviewmodel.fetchPayoutBankBranchDetail(countryId: country, payoutId: payoutId)
  941. }
  942. } else {
  943. viewBankBranch.isHidden = true
  944. constrainBankPaymentView.constant = 363
  945. viewBankDetail.layer.cornerRadius = 10
  946. }
  947. activeTextField!.text = pickerData[pickerSelecteRow]
  948. } else if activeTextField == textFieldCashPartner {
  949. bankIdReferenceValue = pickerSelecteRow
  950. //Resetting the branch for newly selected bank
  951. branchIdReferenceValue = 0
  952. textFieldCashBankBranch.text = ""
  953. if payoutCashArray[pickerSelecteRow].hasBranch! == true {
  954. startLoading()
  955. viewCashBankBranch.isHidden = false
  956. constraintCashPaymentView.constant = 320
  957. if let country = recipient?.countryId , let payoutId = payoutCashArray[pickerSelecteRow].payoutId{
  958. paymentviewmodel.fetchPayoutBankBranchDetail(countryId: country, payoutId: payoutId)
  959. }
  960. } else {
  961. viewCashBankBranch.isHidden = true
  962. constraintCashPaymentView.constant = 243
  963. }
  964. activeTextField!.text = pickerData[pickerSelecteRow]
  965. } else if activeTextField == textFieldCashBankBranch{
  966. branchIdReferenceValue = pickerSelecteRow
  967. activeTextField!.text = pickerData[pickerSelecteRow]
  968. } else if activeTextField == textFieldState {
  969. textFieldDistrict.text = ""
  970. selectedIndexFor["district"] = 0
  971. if pickerData.count > 0{
  972. if let state = selectedIndexFor["state"]{
  973. textFieldState.text = pickerData[state]
  974. }
  975. }
  976. if stateNameListArray.count > 0 {
  977. if textFieldState.text != ""{
  978. fetchDistrict(stateId: stateValueListArray[stateNameListArray.index(of: textFieldState.text!)!])
  979. }
  980. }
  981. startLoading()
  982. } else if activeTextField == textFieldDistrict {
  983. if pickerData.count > 0 {
  984. if let district = selectedIndexFor["district"]{
  985. textFieldDistrict.text = pickerData[district]
  986. }
  987. }
  988. }
  989. }
  990. /**
  991. Cancel click
  992. */
  993. @objc func cancelClick(){
  994. activeTextField?.resignFirstResponder()
  995. }
  996. func setTransactionDetail(bankPayoutIdIndex: Int, branchPayoutIdIndex: Int) -> [String: String]{
  997. var bankTransactionDetail: [String: String]?
  998. if paymentMode == paymentModeType.bankPayment.rawValue {
  999. bankPaymentBranchEmpty(bankPayoutIdIndex: bankPayoutIdIndex, branchPayoutIdIndex: branchPayoutIdIndex)
  1000. bankTransactionDetail = ["bankName":payoutBankDetailArray[bankPayoutIdIndex].name,
  1001. "bankBranch": branchName,
  1002. "bankId": payoutBankDetailArray[bankPayoutIdIndex].payoutId,
  1003. "branchId": branchPayoutId,
  1004. "accountNumber": textFieldAccountNumber.text!]
  1005. } else if paymentMode == paymentModeType.cashPaymentPartner.rawValue {
  1006. bankPaymentBranchEmpty(bankPayoutIdIndex: bankPayoutIdIndex, branchPayoutIdIndex: branchPayoutIdIndex)
  1007. bankTransactionDetail = ["bankName": payoutCashArray[bankPayoutIdIndex].name,
  1008. "bankId": payoutCashArray[bankPayoutIdIndex].payoutId,
  1009. "bankBranch": branchName,
  1010. "branchId": branchPayoutId
  1011. ]
  1012. } else if paymentMode == paymentModeType.homeDelivery.rawValue {
  1013. bankTransactionDetail = ["updatedState": textFieldState.text!,
  1014. "updatedDistrict": textFieldDistrict.text!,
  1015. "updatedCity": textFieldCity.text!,
  1016. "updatedAddress": textFieldAddress.text!
  1017. ]
  1018. }
  1019. return bankTransactionDetail!
  1020. }
  1021. /**
  1022. Bank payment branch empty
  1023. - parameter bankPayoutIdIndex: bank payout id index
  1024. - parameter branchPayoutIndex: bank payout index
  1025. */
  1026. func bankPaymentBranchEmpty(bankPayoutIdIndex: Int, branchPayoutIdIndex: Int){
  1027. if !payoutBankBranchArray.isEmpty{
  1028. branchName = payoutBankBranchArray[branchPayoutIdIndex].name
  1029. branchPayoutId = payoutBankBranchArray[branchPayoutIdIndex].payoutBranchId
  1030. } else {
  1031. branchName = "-"
  1032. branchPayoutId = ""
  1033. }
  1034. }
  1035. override func didReceiveMemoryWarning() {
  1036. super.didReceiveMemoryWarning()
  1037. }
  1038. override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
  1039. if segue.identifier == "exchangeRate" {
  1040. hideBankSection()
  1041. hideCashPaymentSection()
  1042. let exchangeRateViewController
  1043. = segue.destination as! RecipientTranscationViewController
  1044. exchangeRateViewController.recipient = self.recipient
  1045. exchangeRateViewController.paymentMode = self.paymentMode
  1046. if paymentMode != paymentModeType.cashPayment.rawValue {
  1047. exchangeRateViewController.transferDetails = setTransactionDetail(bankPayoutIdIndex: bankIdReferenceValue, branchPayoutIdIndex: branchIdReferenceValue)
  1048. }
  1049. //ADDED FOR HOME-DELIVERY
  1050. if paymentMode == paymentModeType.homeDelivery.rawValue {
  1051. //BETTER TO SET THE VALUES IN VIEW MODEL, FOR NOW ITS BEEN DONE IN VIEW CONTROLLER
  1052. exchangeRateViewController.homeDetails = getHomeDetails()
  1053. }
  1054. }
  1055. }
  1056. func getHomeDetails() -> [String: String] {
  1057. var homeDetails = [String: String]()
  1058. homeDetails["state"] = textFieldState.text
  1059. if stateNameListArray.count > 0{
  1060. if textFieldState.text != ""{
  1061. if let index = stateNameListArray.index(of: textFieldState.text!){
  1062. homeDetails["stateId"] = stateValueListArray[index]
  1063. } else {
  1064. // print("no state")
  1065. }
  1066. }
  1067. }
  1068. let districtName = (textFieldDistrict.text!).removeSpacesTrailingPreceding()
  1069. homeDetails["district"] = districtName
  1070. if districtNameListArray.count > 0{
  1071. if textFieldDistrict.text != ""{
  1072. if let index = districtNameListArray.index(of: districtName){
  1073. homeDetails["districtId"] = districtValueListArray[index]
  1074. } else {
  1075. // print("NO district")
  1076. }
  1077. }
  1078. }
  1079. homeDetails["city"] = textFieldCity.text
  1080. homeDetails["address"] = textFieldAddress.text
  1081. return homeDetails
  1082. }
  1083. }
  1084. extension PaymentMethodViewController: UITextFieldDelegate {
  1085. func textFieldDidBeginEditing(_ textField: UITextField) {
  1086. activeTextField = textField
  1087. if textField == textFieldBankName {
  1088. bankNames(paymentType: paymentModeType.bankPayment.rawValue)
  1089. self.pickUp(textField)
  1090. } else if textField == textFieldBankBranch {
  1091. if textFieldBankName.text != "" {
  1092. if textField.text != "" {
  1093. if bankBranchNameList.count > 0 {
  1094. textField.text = bankBranchAutoCompeletionList[cellSelected]
  1095. }
  1096. }
  1097. tableViewAutoComplete.isHidden = false
  1098. } else {
  1099. textField.resignFirstResponder()
  1100. tableViewAutoComplete.isHidden = true
  1101. popUpMessageInfo(value: 16, title: "No Bank Name", message: "Please Select the Bank.")
  1102. }
  1103. if bankBranchAutoCompeletionList.contains(textFieldBankBranch.text!){
  1104. tableViewAutoComplete.isHidden = true
  1105. }
  1106. } else if textField == textFieldCashPartner {
  1107. self.pickUp(textField)
  1108. bankPartnerName()
  1109. if textField.text != ""{
  1110. self.textFieldCashPartner.inputView = self.pickerView
  1111. textField.text = pickerData[bankIdReferenceValue]
  1112. }
  1113. } else if textField == textFieldCashBankBranch {
  1114. guard textFieldCashPartner.text != "" else {
  1115. textField.resignFirstResponder()
  1116. popUpMessageInfo(value: 16, title: "No Payout Partner Name", message: "Please Select the Payout Partner.")
  1117. return
  1118. }
  1119. self.pickUp(textField)
  1120. if bankBranchNameList.count != 0 {
  1121. self.textFieldCashBankBranch.inputView = self.pickerView
  1122. pickerData = bankBranchNameList
  1123. pickerView.reloadAllComponents()
  1124. guard pickerData.count > 0 else {
  1125. self.popUpMessageInfo(value: 16, title: "Data being fetched", message: "Please wait few moments")
  1126. return
  1127. }
  1128. pickerView.selectRow(branchIdReferenceValue, inComponent: 0, animated: true)
  1129. }
  1130. if textField.text != ""{
  1131. textField.text = pickerData[branchIdReferenceValue]
  1132. }
  1133. } else if textField == textFieldState {
  1134. self.textFieldState.inputView = self.pickerView
  1135. self.pickUp(textField)
  1136. pickerData = stateNameListArray
  1137. if textFieldState.text != ""{
  1138. if let index = pickerData.index(of: textFieldState.text!) {
  1139. self.selectedIndexFor["state"]! = index
  1140. pickerView.selectRow(index, inComponent: 0, animated: true)
  1141. }
  1142. }
  1143. }else if textField == textFieldDistrict {
  1144. self.textFieldDistrict.inputView = self.pickerView
  1145. self.pickUp(textField)
  1146. pickerData = districtNameListArray
  1147. let districtName = (textFieldDistrict.text!).removeSpacesTrailingPreceding()
  1148. if textFieldDistrict.text != ""{
  1149. if let index = pickerData.index(of: districtName){
  1150. self.selectedIndexFor["district"]! = index
  1151. pickerView.selectRow(index, inComponent: 0, animated: true)
  1152. }
  1153. }
  1154. }
  1155. tableViewAutoComplete.reloadData()
  1156. }
  1157. /**
  1158. Bank names
  1159. */
  1160. func bankNames(paymentType: String){
  1161. pickerData = bankArray
  1162. pickerView.reloadAllComponents()
  1163. guard pickerData.count > 0 else {
  1164. textFieldBankName.resignFirstResponder()
  1165. return
  1166. }
  1167. pickerView.selectRow(bankIdReferenceValue, inComponent: 0, animated: true)
  1168. }
  1169. /**
  1170. Bank partner name
  1171. */
  1172. func bankPartnerName(){
  1173. pickerData = bankCashArray
  1174. pickerView.reloadAllComponents()
  1175. guard pickerData.count > 0 else {
  1176. textFieldCashPartner.resignFirstResponder()
  1177. return
  1178. }
  1179. pickerView.selectRow(bankIdReferenceValue, inComponent: 0, animated: true)
  1180. }
  1181. func textFieldShouldReturn(_ textField: UITextField) -> Bool {
  1182. textField.resignFirstResponder()
  1183. self.tableViewAutoComplete.isHidden = true
  1184. return true
  1185. }
  1186. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
  1187. let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string)
  1188. if textField == textFieldAccountNumber {
  1189. let accountNumber = (textField.text! as NSString).replacingCharacters(in: range, with: string)
  1190. paymentviewmodel.updateAccountNumber(acNumber: accountNumber)
  1191. return true
  1192. } else if textField == textFieldBankBranch {
  1193. if inputText == "" {
  1194. tableViewAutoComplete.isHidden = false
  1195. }
  1196. return true
  1197. }else if textField == textFieldAddress || textField == textFieldCity {
  1198. return true
  1199. } else {
  1200. return false
  1201. }
  1202. }
  1203. }
  1204. extension PaymentMethodViewController: UIPickerViewDataSource, UIPickerViewDelegate {
  1205. func numberOfComponents(in pickerView: UIPickerView) -> Int {
  1206. return 1
  1207. }
  1208. func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  1209. return pickerData.count
  1210. }
  1211. func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  1212. return pickerData[row]
  1213. }
  1214. func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
  1215. if activeTextField == textFieldState {
  1216. selectedIndexFor["state"] = row
  1217. } else if activeTextField == textFieldDistrict{
  1218. selectedIndexFor["district"] = row
  1219. } else {
  1220. pickerSelecteRow = row
  1221. }
  1222. }
  1223. }
  1224. extension PaymentMethodViewController: UITableViewDelegate, UITableViewDataSource {
  1225. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  1226. return bankBranchAutoCompeletionArray.count
  1227. }
  1228. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  1229. let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
  1230. cell.textLabel?.text = bankBranchAutoCompeletionArray[indexPath.row]
  1231. return cell
  1232. }
  1233. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  1234. cellSelected = indexPath.row
  1235. if bankBranchNameList.count > 0{
  1236. branchIdReferenceValue = bankBranchNameList.index(of: bankBranchAutoCompeletionList[indexPath.row])!
  1237. }
  1238. activeTextField?.text = bankBranchAutoCompeletionArray[indexPath.row]
  1239. tableViewAutoComplete.isHidden = true
  1240. }
  1241. }
  1242. extension PaymentMethodViewController: UIScrollViewDelegate {
  1243. func scrollViewDidScroll(_ scrollView: UIScrollView) {
  1244. if scrollView.contentOffset.y > (867) {
  1245. scrollView.isScrollEnabled = false
  1246. } else {
  1247. scrollView.isScrollEnabled = true
  1248. }
  1249. }
  1250. }