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.
 
 
 
 

321 lines
12 KiB

//
// EditReciepientViewController.swift
// GMERemittance
//
// Created by gme_2 on 28/08/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
class EditReciepientViewController: UIViewController {
// MARK: IBOutlets
@IBOutlet weak var firstNameTextField: UITextField!
@IBOutlet weak var middleNameTextField: UITextField!
@IBOutlet weak var lastNameTextField: UITextField!
@IBOutlet weak var countryTextField: UITextField!
@IBOutlet weak var stateProvinceTextField: UITextField!
@IBOutlet weak var districtTextField: UITextField!
@IBOutlet weak var addressTextField: UITextField!
@IBOutlet weak var relationTextField: UITextField!
@IBOutlet weak var mobileTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var transferReasonTextField: UITextField!
@IBOutlet weak var saveButton: UIButton!
@IBOutlet weak var provienceStackView: UIStackView!
@IBOutlet weak var districtStackView: UIStackView!
// MARK: Properties
var presenter: EditReciepientModuleInterface?
var countries: [SendMoneyCountryViewModel]?
var transferReasons: [SendMoneyTransferReasonViewModel]?
var relations: [SendMoneyRelationViewModel]?
var reciepient: EditRecipientRecipientViewModel? {
didSet {
self.populateInformations()
}
}
var selectedCountry: SendMoneyCountryViewModel? {
didSet {
self.countryTextField.text = selectedCountry?.name
let shouldShowProvienceField = (selectedCountry?.proviencesRequired ?? "" ) == "true"
self.provienceStackView.isHidden = !shouldShowProvienceField
self.districtStackView.isHidden = !shouldShowProvienceField
self.reciepient?.countryId = self.selectedCountry?.id
self.reciepient?.country = self.selectedCountry?.name
}
}
var selectedProvience: SendMoneyProvienceViewModel? {
didSet {
self.stateProvinceTextField.text = selectedProvience?.name
self.reciepient?.stateId = self.selectedProvience?.id
}
}
var selectedDistrict: SendMoneyDistrictViewModel? {
didSet {
self.districtTextField.text = selectedDistrict?.name
self.reciepient?.districtId = self.selectedDistrict?.id
}
}
var selectedRelation: SendMoneyRelationViewModel? {
didSet {
self.relationTextField.text = selectedRelation?.title
self.reciepient?.relationId = self.selectedRelation?.id
}
}
var selectedTransferReason: SendMoneyTransferReasonViewModel? {
didSet {
self.transferReasonTextField.text = selectedTransferReason?.title
self.reciepient?.reasonId = selectedTransferReason?.id
}
}
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
self.setupDelegates()
self.setupTargets()
self.presenter?.viewIsReady()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "Edit Receipient"
}
// MARK: IBActions
@IBAction func save(_ sender: UIButton) {
self.view.endEditing(true)
if let reciepient = self.reciepient {
self.presenter?.save(model: reciepient)
}
}
// MARK: Other Functions
private func setup() {
// all setup should be done here
self.setupNavigation()
self.configureView()
}
private func configureView() {
self.provienceStackView.isHidden = true
self.districtStackView.isHidden = true
}
private func setupDelegates() {
self.countryTextField.delegate = self
self.stateProvinceTextField.delegate = self
self.districtTextField.delegate = self
self.relationTextField.delegate = self
self.transferReasonTextField.delegate = self
}
private func setupTargets() {
[firstNameTextField, middleNameTextField, lastNameTextField, countryTextField, stateProvinceTextField, districtTextField, addressTextField, relationTextField, mobileTextField, emailTextField, transferReasonTextField].forEach({
$0?.addTarget(self, action: #selector(self.textFieldChanged(sender:)), for: UIControlEvents.editingChanged)
})
}
@objc private func textFieldChanged(sender: UITextField) {
switch sender {
case firstNameTextField:
self.reciepient?.firstName = firstNameTextField.text!
case middleNameTextField:
self.reciepient?.middleName = middleNameTextField.text!
case lastNameTextField:
self.reciepient?.lastName = lastNameTextField.text!
case addressTextField:
self.reciepient?.address = addressTextField.text!
case mobileTextField:
self.reciepient?.mobileNumber = mobileTextField.text!
case emailTextField:
self.reciepient?.email = emailTextField.text!
default:
break
}
}
private func populateInformations() {
self.firstNameTextField.text = self.reciepient?.firstName
self.middleNameTextField.text = self.reciepient?.middleName
self.lastNameTextField.text = self.reciepient?.lastName
let country = self.countries?.filter({
$0.name == self.reciepient?.country
}).first?.name
self.countryTextField.text = country
self.addressTextField.text = reciepient?.address
let relation = self.relations?.filter({
$0.title == self.reciepient?.relation
}).first?.title
self.relationTextField.text = relation
self.mobileTextField.text = self.reciepient?.mobileNumber
self.emailTextField.text = self.reciepient?.email
let transferReason = self.transferReasons?.filter({
$0.title == self.reciepient?.reason
}).first?.title
self.transferReasonTextField.text = transferReason
}
private func setupNavigation() {
self.navigationItem.backBarButtonItem?.image =
#imageLiteral(resourceName: "backIconBlack")
self.navigationController?.navigationBar.tintColor = UIColor.black
}
private func showCountryPickerview() {
let viewcontroller = UIStoryboard.init(name: "CountryPicker", bundle: nil).instantiateViewController(withIdentifier: "CountryPickerViewController") as! CountryPickerViewController
viewcontroller.data = self.countries ?? []
viewcontroller.doneAction = self.countrySelected
viewcontroller.defaultSelectedData = [self.selectedCountry]
viewcontroller.type = PickerTitle.country
self.present(viewcontroller, animated: true, completion: nil)
}
private func getPickerViewController()-> ItemsPickerViewController {
return UIStoryboard.init(name: "ItemsPicker", bundle: nil).instantiateViewController(withIdentifier: "ItemsPickerViewController") as! ItemsPickerViewController
}
private func showProviencePickerview() {
let viewcontroller = self.getPickerViewController()
let proviences = self.selectedCountry?.proviences ?? []
let names = proviences.compactMap({$0.name})
viewcontroller.data = names
viewcontroller.type = PickerTitle.state
viewcontroller.doneAction = self.provienceSelected
viewcontroller.defaultSelectedData = [self.selectedProvience?.name ?? ""]
self.present(viewcontroller, animated: true, completion: nil)
}
private func showDistrictPickerview() {
let viewcontroller = self.getPickerViewController()
let districts = self.selectedProvience?.districts ?? []
let names = districts.compactMap({$0.name})
viewcontroller.data = names
viewcontroller.type = PickerTitle.district
viewcontroller.doneAction = self.districtSelected
viewcontroller.defaultSelectedData = [self.selectedDistrict?.name ?? ""]
self.present(viewcontroller, animated: true, completion: nil)
}
private func showRelationPickerView() {
let viewcontroller = self.getPickerViewController()
let relations = self.relations ?? []
let names = relations.compactMap({$0.title})
viewcontroller.data = names
viewcontroller.type = PickerTitle.relation
viewcontroller.doneAction = self.relationSelected
viewcontroller.defaultSelectedData = [self.selectedRelation?.title ?? ""]
self.present(viewcontroller, animated: true, completion: nil)
}
private func showTransferReasonPickerView() {
let viewcontroller = self.getPickerViewController()
let transferReasons = self.transferReasons ?? []
let names = transferReasons.compactMap({$0.title})
viewcontroller.data = names
viewcontroller.type = PickerTitle.transferReasons
viewcontroller.doneAction = self.transferReasonSelected
viewcontroller.defaultSelectedData = [self.selectedTransferReason?.title ?? ""]
self.present(viewcontroller, animated: true, completion: nil)
}
func transferReasonSelected(reasons: [String]) {
let _reason = self.transferReasons?.filter({($0.title ?? "") == (reasons.first ?? "") }).first
self.selectedTransferReason = _reason
}
func relationSelected(relations: [String]) {
let _relations = self.relations?.filter({($0.title ?? "") == (relations.first ?? "") }).first
self.selectedRelation = _relations
}
func districtSelected(district: [String]) {
let _district = (self.selectedProvience?.districts ?? []).filter({
( $0.name ?? "" ) == ( district.first ?? "" )
}).first
self.selectedDistrict = _district
}
func provienceSelected(provience: [String]) {
let _provience = (self.selectedCountry?.proviences ?? []).filter({
($0.name ?? "") == (provience.first ?? "")
})
self.selectedProvience = _provience.first
}
func countrySelected(models: [SendMoneyCountryViewModel]) {
self.selectedCountry = models.first
}
func showLoading() {
self.showProgressHud()
}
func hideLoading() {
self.hideProgressHud()
}
func show(error: String) {
self.alert(message: error)
}
}
// MARK: EditReciepientViewInterface
extension EditReciepientViewController: EditReciepientViewInterface {
func show(countries: [SendMoneyCountryViewModel]) {
self.countries = countries
}
func show(transferReasons: [SendMoneyTransferReasonViewModel]) {
self.transferReasons = transferReasons
}
func show(relations: [SendMoneyRelationViewModel]) {
self.relations = relations
}
func show(recipient: EditRecipientRecipientViewModel) {
self.reciepient = recipient
}
}
extension EditReciepientViewController: UITextFieldDelegate {
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
switch textField {
case countryTextField:
showCountryPickerview()
return false
case stateProvinceTextField:
self.showProviencePickerview()
return false
case districtTextField:
self.showDistrictPickerview()
return false
case relationTextField:
self.showRelationPickerView()
return false
case transferReasonTextField:
self.showTransferReasonPickerView()
return false
default:
return true
}
}
}