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.
 
 
 
 

287 lines
10 KiB

//
// SideMenuViewController.swift
// GMERemittance
//
// Created by Sujal on 2/22/18.
// Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import SDWebImage
import LGSideMenuController
import Localize_Swift
protocol SideMenuDelegate: class {
func didSelectMenu(_ viewController: UIViewController, didSelectMenu: SideMenuViewController.MenuType)
}
struct SideMenuNavigationNotifications {
static let aboutGme = "aboutGme"
static let support = "support"
static let setting = "setting"
static let availableBalance = "Available_Balance"
static let withdraw = "withdraw"
static let KftcAccountList = "KftcAccountList"
static let transactionHistory = "transaction_History_from_sidemenu"
}
class SideMenuViewController: UIViewController {
struct StringConstants {
let logoutTitleText = "logout_text".localized()
let logoutConfirmationText = "logout_confirmation_text".localized()
let noText = "no_text".localized()
let yesText = "yes_text".localized()
let autoDebitMenuText = "auto_debit_account_text".localized()
let inboundMenuText = "inbound_accounts_text".localized()
let aboutGmeMenuText = "about_gme_text".localized()
let settingMenuText = "settings_text".localized()
let availableBalanceTitleLabelText = "available_balance_text".localized()
let withdrawButtonText = "withdraw_text".localized()
let gmeWalletNoTitleText = "gme_wallet_no_text".localized()
}
enum MenuType {
case withDraw
case autodebitAccount
case inboundAccount
case transferHistory
case rechargeHistory
case about
case setting
}
// @IBOutlets
@IBOutlet weak var imageViewProfileSetting: UIImageView!
@IBOutlet weak var labelProfileName: UILabel!
@IBOutlet weak var labelPhone: UILabel!
@IBOutlet weak var labelEmail: UILabel!
@IBOutlet weak var roundedBgView: UIView!
@IBOutlet weak var remainingAmount: UILabel!
@IBOutlet weak var labelUserNameInitial: UILabel!
@IBOutlet weak var settingButton: UIButton!
@IBOutlet weak var aboutGmeButton: UIButton!
@IBOutlet weak var autoDebitAccountButton: UIButton!
@IBOutlet weak var inboundAccountButton: UIButton!
@IBOutlet weak var logoutButton: UIButton!
@IBOutlet weak var aboutIconImageView: UIImageView!
@IBOutlet weak var settingIconImageView: UIImageView!
@IBOutlet weak var logoutIconImageView: UIImageView!
@IBOutlet weak var manageAccountStackView: UIStackView!
@IBOutlet weak var remainingTitleLabel: UILabel!
@IBOutlet weak var transactionHistryButton: UIButton!
@IBOutlet weak var rechargeHistoryButton: UIButton!
@IBOutlet weak var gmewalletTitleLabel: UILabel!
@IBOutlet weak var gmeWalletNumberLabel: UILabel!
@IBOutlet weak var primaryBankTitleLabel: UILabel!
@IBOutlet weak var withdrawButton: UIButton!
weak var sideMenuDelegate: SideMenuDelegate?
var selectedMenu: MenuType? {
didSet {
guard let menu = selectedMenu else { return }
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: menu)
}
}
// Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
setUpSettingsScreen()
setup()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.setUpSettingsScreen()
NotificationCenter.default.addObserver(
self,
selector: #selector(configureText),
name: NSNotification.Name(LCLLanguageChangeNotification),
object: nil
)
}
// Other Functions
private func addShadow(view: UIView) {
view.layer.shadowColor = UIColor.darkGray.cgColor
view.layer.shadowOpacity = 0.5
view.layer.shadowRadius = 2
let offset = CGSize(width: 1, height: 1)
view.layer.shadowOffset = offset
}
private func setup() {
configureText()
let shouldShowWithdrawButton = Utility.pennyTestVerified() && Utility.isVerifiedUser()
self.withdrawButton.isHidden = !shouldShowWithdrawButton
self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
// self.manageAccountStackView.isHidden = true
self.addShadow(view: withdrawButton)
self.view.backgroundColor = .themeRedDark
self.roundedBgView.layer.cornerRadius = 20
self.remainingAmount.text = "0"
NotificationCenter.default.addObserver(
self,
selector: #selector(self.updateBalance(sender:)),
name: self.getAvailableBalanceNotificationName(),
object: nil
)
labelProfileName.textColor = .themeRed
remainingAmount.textColor = .themeRed
autoDebitAccountButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
inboundAccountButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
transactionHistryButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
aboutGmeButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
settingButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
logoutButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
withdrawButton.titleLabel?.adjustsFontSizeToFitWidth(true, scale: 0.5)
}
@objc private func configureText() {
withdrawButton.setTitle(StringConstants().withdrawButtonText, for: UIControl.State.normal)
autoDebitAccountButton.setTitle(StringConstants().autoDebitMenuText, for: UIControl.State.normal)
inboundAccountButton.setTitle(StringConstants().inboundMenuText, for: UIControl.State.normal)
aboutGmeButton.setTitle(StringConstants().aboutGmeMenuText, for: UIControl.State.normal)
settingButton.setTitle(StringConstants().settingMenuText, for: UIControl.State.normal)
logoutButton.setTitle(StringConstants().logoutTitleText, for: UIControl.State.normal)
self.remainingTitleLabel.text = "remaining_limit_text".localized()
self.transactionHistryButton.setTitle("transaction_report_text".localized(), for: UIControl.State.normal)
rechargeHistoryButton.setTitle("recharge_history_text".localized(), for: .normal)
gmewalletTitleLabel.text = "gme_wallet_no_text".localized()
gmeWalletNumberLabel.text = GMEDB.shared.user.string(.walletNumber)
primaryBankTitleLabel.text = GMEDB.shared.user.string(.primaryBankName)
}
@objc private func updateBalance(sender: Notification) {
let balance = sender.userInfo?[SideMenuNavigationNotifications.availableBalance] as? String
self.remainingAmount.text = balance
let shouldShowWithdrawButton = Utility.pennyTestVerified() && Utility.isVerifiedUser()
self.manageAccountStackView.isHidden = !shouldShowWithdrawButton
// self.manageAccountStackView.isHidden = true
}
private func setupBlueBackGroundTheme() {
self.roundedBgView.backgroundColor = .themeBlue
[ labelPhone, labelEmail, labelUserNameInitial].forEach({
$0?.textColor = .themeWhite
})
[aboutGmeButton, settingButton, logoutButton].forEach({
$0?.setTitleColor(.themeWhite, for: UIControl.State.normal)
})
aboutIconImageView.tintColor = .themeWhite
}
@IBAction func withdraw(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .withDraw)
}
@IBAction func openTransactionHistory(_ sender: Any) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .transferHistory)
}
@IBAction func openRechargeHistory(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .rechargeHistory)
}
@IBAction func openManageAccounts(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .autodebitAccount)
}
@IBAction func aboutGme(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .about)
}
@IBAction func support(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
}
@IBAction func setting(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .setting)
}
@IBAction func logout(_ sender: Any) {
alertWithOkCancel(
type: .normal,
message: StringConstants().logoutConfirmationText,
title: StringConstants().logoutTitleText,
okTitle: "yes_text".localized(),
cancelTitle: "no_text".localized(),
okAction: { MainWireframe.logout() }
)
}
@IBAction func openInboundAccount(_ sender: UIButton) {
self.sideMenuController?.hideLeftView()
sideMenuDelegate?.didSelectMenu(self, didSelectMenu: .inboundAccount)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func setUpSettingsScreen() {
//PHONE
labelPhone.text = GMEDB.shared.user.string(.mobileNumber)
//EMAIL
labelEmail.text = GMEDB.shared.user.string(.email)
//NAME
labelProfileName.text = GMEDB.shared.user.string(.firstName)?.capitalized
//yearlyLimit
let yearlyLimit = GMEDB.shared.user.string(.yearlyLimit)
remainingAmount.text = Utility.getCommaSeperatedString(numberString: yearlyLimit ?? "")
//IMAGE
let userDpString = GMEDB.shared.user.string(.dpUrl) ?? ""
if let userDpUrl = URL(string: userDpString) {
SDImageCache.shared.clearMemory()
SDImageCache.shared.clearDisk()
self.imageViewProfileSetting.sd_setImage(with: userDpUrl, completed: nil)
labelUserNameInitial.isHidden = true
imageViewProfileSetting.isHidden = false
imageViewProfileSetting.contentMode = .scaleAspectFill
} else {
labelUserNameInitial.layer.backgroundColor = UIColor(hex: 0x2e3192).cgColor
labelUserNameInitial.layer.cornerRadius = labelUserNameInitial.frame.height / 2
labelUserNameInitial.text = labelProfileName.text?.prefix(1).uppercased()
labelUserNameInitial.isHidden = false
imageViewProfileSetting.isHidden = true
}
imageViewProfileSetting.layer.cornerRadius = imageViewProfileSetting.frame.height / 2
}
// Notification Names
func getAvailableBalanceNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.availableBalance)
}
func getWithdrawNotificationName() -> Notification.Name {
return Notification.Name.init(SideMenuNavigationNotifications.withdraw)
}
}