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.
 
 
 
 

385 lines
15 KiB

//
// SendMoneyReceiptViewController.swift
// GMERemittance
//
// Created by gme_2 on 04/09/2018.
//Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import Kingfisher
enum MailBoxType {
case cancel
case edit
case pending
}
enum ReceiptType {
case overseas
}
enum ReceiptParent {
case sendMoney
case notice
case report
}
class SendMoneyReceiptViewController: UIViewController {
// MARK: IBOutlets
struct StringConstants {
let transferSuccessText = "transfer_success_text".localized()
let transactionDateText = "transaction_date_text".localized()
let recieverText = "receiver_text".localized()
let addressText = "address_key_text".localized()
let mobileNoText = "mobile_number_title".localized()
let payoutAgentText = "payout_agent_text".localized()
let totalSentAmountText = "total_sent_amount_text".localized()
let branchText = "branch_text".localized()
let accountNumberText = "account_number_text".localized()
let totalPayoutAmountText = "total_payout_amount_text".localized()
let serviceFeeText = "service_fee_text".localized()
let exRateText = "ex_rate_text".localized()
let payoutAmountText = "total_payout_amount_text".localized()
let gmeControlNumberText = "jme_control_no_text".localized()
let doneText = "done_text".localized()
let headerSuccess = "send_money_success_header_text".localized()
let bodySuccess = "send_money_success_body_text".localized()
let footerSuccess = "send_money_success_footer_text".localized()
}
@IBOutlet weak var fullnameLabel: UILabel!
@IBOutlet weak var sendToLabel: UILabel!
@IBOutlet weak var controlNoInfoLabel: UILabel!
@IBOutlet weak var transactionDateLabel: UILabel!
@IBOutlet weak var infoView: UIView!
@IBOutlet weak var infoViewSuccess: UIView!
@IBOutlet weak var weReceivedLabelSuccess: UILabel!
@IBOutlet weak var amountLabelSuccess: UILabel!
@IBOutlet weak var makePaymentLabelSuccess: UILabel!
@IBOutlet weak var chargeLabelSuccess: UILabel!
@IBOutlet weak var toJmeLabelSuccess: UILabel!
@IBOutlet weak var shadowView: UIView!
@IBOutlet weak var exchangeRateLabel: UILabel!
@IBOutlet weak var relationLabel: UILabel!
@IBOutlet weak var addressLabel: UILabel!
@IBOutlet weak var mobileNoLabel: UILabel!
@IBOutlet weak var recieverNameLabelLabel: UILabel!
@IBOutlet weak var agentBankLabel: UILabel!
@IBOutlet weak var branchLabel: UILabel!
@IBOutlet weak var accountNoLabel: UILabel!
@IBOutlet weak var transferFeeLabel: UILabel!
@IBOutlet weak var totalAmountLabel: UILabel!
@IBOutlet weak var gmeControlNumberLabel: UILabel!
@IBOutlet weak var totalAmountHeaderLabel: UILabel!
@IBOutlet weak var doneButton: UIButton!
@IBOutlet weak var requestToChangeButton: UIButton!
@IBOutlet weak var requestToCancelButton: UIButton!
@IBOutlet weak var transactionReportButtonStackView: UIStackView!
@IBOutlet weak var accountNoView: UIView!
@IBOutlet weak var branchView: UIView!
@IBOutlet weak var rewardPointView: UIView!
// title labels
@IBOutlet weak var transferSuccessfullTitleLabel: UILabel!
// Body labels
@IBOutlet weak var tansactionDateTitleLabel: UILabel!
@IBOutlet weak var recieverTitleLabel: UILabel!
@IBOutlet weak var addressTitleLabel: UILabel!
@IBOutlet weak var mobileTitleLabel: UILabel!
@IBOutlet weak var payoutAgentTitleLabel: UILabel!
@IBOutlet weak var sentAmountTitleLabel: UILabel!
@IBOutlet weak var branchTitleLabel: UILabel!
@IBOutlet weak var accountNumberTitleLabel: UILabel!
@IBOutlet weak var serviceTitleLabel: UILabel!
@IBOutlet weak var exRateTitleLabel: UILabel!
@IBOutlet weak var totalPayoutAmountTitleLabel: UILabel!
@IBOutlet weak var rewardPointTitleLabel: UILabel!
@IBOutlet weak var rewardPointLabel: UILabel!
@IBOutlet private weak var transactionDateContainerView: UIView!
@IBOutlet private weak var receiverNameContainerView: UIView!
@IBOutlet private weak var addressContainerView: UIView!
@IBOutlet private weak var mobileContainerView: UIView!
@IBOutlet private weak var bankContainerView: UIView!
@IBOutlet private weak var totalSentAmountContainerView: UIView!
@IBOutlet private weak var serviceFeeContainerView: UIView!
@IBOutlet private weak var exchangeRateContainerView: UIView!
@IBOutlet private weak var totalPayoutAmountContainerView: UIView!
// MARK: Properties
var presenter: SendMoneyReceiptModuleInterface?
weak var hudDelegate: HUDStatusDelegate?
var shouldShowCancelAmmendButton = false
var displayOption: String?
var receiptParent: ReceiptParent = .sendMoney
var controlNo: String?
var transactionId: String?
var type: MailBoxType?
var receiptType: ReceiptType = .overseas
var reciept: SendMoneyReciept? {
didSet {
self.showRecipt()
}
}
var displayAction: DisplayOption?
// MARK: VC's Life cycle
override func viewDidLoad() {
super.viewDidLoad()
self.setup()
self.presenter?.viewIsReady(type: receiptType, receiptParent: self.receiptParent)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = "request_summary_text".localized()
self.setupNormalNavigation()
self.setupBackButton()
self.infoView.isHidden = self.receiptParent == .sendMoney
self.infoViewSuccess.isHidden = self.receiptParent != .sendMoney
switch receiptType {
case .overseas:
transactionDateContainerView.isHidden = false
receiverNameContainerView.isHidden = false
mobileContainerView.isHidden = false
bankContainerView.isHidden = false
totalSentAmountContainerView.isHidden = false
accountNoView.isHidden = false
serviceFeeContainerView.isHidden = false
addressContainerView.isHidden = false
branchView.isHidden = false
exchangeRateContainerView.isHidden = false
totalPayoutAmountContainerView.isHidden = false
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationItem.title = ""
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
}
// MARK: IBActions
@IBAction func done(_ sender: UIButton) {
if self.receiptParent == .report {
self.navigationController?.popViewController(animated: true)
} else {
//self.navigationController?.popViewController(animated: true)
self.navigationController?.popToRootViewController(animated: true)
}
}
// MARK: Other Functions
@IBAction func requestToCancel(_ sender: UIButton) {
if (self.displayAction == .pending) || (self.displayAction == .reject) {
self.sendMail(type: .pending)
} else {
self.sendMail(type: .cancel)
}
}
@IBAction func requestToChange(_ sender: UIButton) {
if (self.displayAction == .pending) || (self.displayAction == .reject) {
self.sendMail(type: .pending)
} else {
self.sendMail(type: .edit)
}
}
func sendMail(type: MailBoxType) {
self.presenter?.openMail(
controlNO: self.controlNo ?? "",
transactionId: self.transactionId ?? "",
type: type
)
}
private func setup() {
// all setup should be done here
setupBackButton()
configureLanguage()
infoViewSuccess.layer.cornerRadius = 20
infoView.layer.cornerRadius = 20
requestToCancelButton.layer.cornerRadius = 20
requestToChangeButton.layer.cornerRadius = 20
}
func configureLanguage() {
self.weReceivedLabelSuccess.text = StringConstants().headerSuccess
self.makePaymentLabelSuccess.text = StringConstants().bodySuccess
self.toJmeLabelSuccess.text = StringConstants().footerSuccess
self.transferSuccessfullTitleLabel.text = StringConstants().transferSuccessText
self.tansactionDateTitleLabel.text = StringConstants().transactionDateText
self.recieverTitleLabel.text = StringConstants().recieverText
self.addressTitleLabel.text = StringConstants().addressText
self.mobileTitleLabel.text = StringConstants().mobileNoText
self.payoutAgentTitleLabel.text = StringConstants().payoutAgentText
self.totalPayoutAmountTitleLabel.text = StringConstants().totalSentAmountText
self.branchTitleLabel.text = StringConstants().branchText
self.accountNumberTitleLabel.text = StringConstants().accountNumberText
self.serviceTitleLabel.text = StringConstants().serviceFeeText
self.exRateTitleLabel.text = StringConstants().exRateText
self.totalPayoutAmountTitleLabel.text = StringConstants().payoutAmountText
self.sentAmountTitleLabel.text = StringConstants().totalSentAmountText
self.doneButton.setTitle(StringConstants().doneText, for: UIControl.State.normal)
self.requestToCancelButton.setTitle("request_to_cancel_text".localized(), for: UIControl.State.normal)
self.requestToChangeButton.setTitle("request_to_change_text".localized(), for: UIControl.State.normal)
self.sendToLabel.text = "send_to_text".localized()
self.controlNoInfoLabel.text = "gme_control_security_text".localized()
}
func setupBackButton() {
print(self.displayOption ?? "No display Option")
let displayOption = DisplayOption(rawValue: self.displayOption?.lowercased() ?? "")
self.displayAction = displayOption
switch displayOption {
case .cancelamend:
print("Cancel Amend Found")
case .reject:
self.requestToCancelButton.setTitle("Cancel Transaction", for: .normal)
self.requestToChangeButton.isHidden = true
case .cancel:
self.requestToChangeButton.isHidden = true
case .amend:
self.requestToCancelButton.isHidden = true
case .pending:
self.requestToCancelButton.isHidden = true
self.requestToCancelButton.setTitle("Cancel Transaction", for: .normal)
case .none:
self.transactionReportButtonStackView.isHidden = true
self.doneButton.isHidden = false
}
// if shouldShowCancelAmmendButton {
// self.navigationController?.navigationItem.hidesBackButton = false
// let button = UIBarButtonItem.init(
// image: #imageLiteral(resourceName: "backIconBlack"), style: UIBarButtonItem.Style.plain,
// target: self,
// action: #selector(self.back)
// )
// self.navigationItem.backBarButtonItem = button
// self.doneButton.isHidden = true
// self.transactionReportButtonStackView.isHidden = false
// } else {
// self.doneButton.isHidden = false
// self.doneButton.backgroundColor = .themeRed
// self.doneButton.layer.cornerRadius = 12
//
// self.transactionReportButtonStackView.isHidden = true
// self.navigationController?.navigationItem.hidesBackButton = true
// let button = UIBarButtonItem.init(
// title: nil,
// style: UIBarButtonItem.Style.plain,
// target: nil,
// action: nil
// )
// self.navigationItem.leftBarButtonItem = button
// }
}
@objc private func back() {
self.presenter?.dismiss()
}
private func showRecipt() {
let firstName = self.reciept?.rFirstName ?? ""
let lastName = self.reciept?.rLastName ?? ""
let middleName = self.reciept?.rMiddleName ?? ""
let fullName = firstName + " " + middleName + " " + lastName
self.recieverNameLabelLabel.text = fullName.uppercased()
self.fullnameLabel.text = fullName.uppercased()
self.transactionDateLabel.text = reciept?.transactionDate
self.addressLabel.text = self.reciept?.rAddress
self.mobileNoLabel.text = self.reciept?.rContactNo ?? "N/A"
self.agentBankLabel.text = self.reciept?.agentBank
let branch = self.reciept?.payoutBankBranch ?? ""
self.branchLabel.text = branch
self.branchView.isHidden = branch == ""
let accountNo = self.reciept?.accountNo ?? ""
self.accountNoView.isHidden = accountNo == ""
self.accountNoLabel.text = self.reciept?.accountNo
self.relationLabel.text = self.reciept?.collAmount?.decimalToCurrency(as: .krw)
let charge = self.reciept?.collAmount?.decimalToCurrency(as: .krw)
let servicecharge = self.reciept?.serviceCharge?.decimalToCurrency(as: .krw)
self.transferFeeLabel.text = servicecharge
self.chargeLabelSuccess.text = charge
self.exchangeRateLabel.text = self.reciept?.exRate
let controlNo = self.reciept?.controNo ?? ""
self.controlNo = self.reciept?.controNo ?? ""
self.gmeControlNumberLabel.text = StringConstants().gmeControlNumberText + ". " + controlNo
let totalAmount = (receiptType == .overseas) ? (self.reciept?.payoutAmount ?? "") :
(self.reciept?.payoutAmount ?? "").decimalToCurrency(as: .krw)
self.totalAmountLabel.text = totalAmount
self.totalAmountHeaderLabel.text = totalAmount
self.amountLabelSuccess.text = totalAmount
if let rewardPoint = self.reciept?.rewardPoints {
self.rewardPointView.isHidden = false
self.rewardPointLabel.text = rewardPoint
} else {
self.rewardPointView.isHidden = true
}
}
}
// MARK: SendMoneyReceiptViewInterface
extension SendMoneyReceiptViewController: SendMoneyReceiptViewInterface {
func showLoading() {
self.hudDelegate?.showLoading()
}
func hideLoading() {
self.hudDelegate?.hideLoading()
}
func show(error: String) {
self.alert(type: .error, message: error)
}
func show(model: SendMoneyReciept) {
self.reciept = model
}
}
enum DisplayOption: String {
case cancelamend = "cancel,amend"
case reject = "reject"
case cancel = "cancel"
case amend = "amend"
case pending = "pending"
}