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.
 
 
 
 

439 lines
19 KiB

//
// TransferSuccessfulViewController.swift
// GMERemittance
//
// Created by Fm-user on 12/26/17.
// Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
//
import UIKit
import WebKit
class TransferSuccessfulViewController: UIViewController {
@IBOutlet weak var serviceFeeLabelOutlet: UILabel!
@IBOutlet weak var viewAccountNumOrDistrict: UIView!
@IBOutlet weak var viewBranchOrStateProvince: UIView!
@IBOutlet weak var cityView: UIView!
@IBOutlet weak var addressView: UIView!
@IBOutlet weak var deliveryAddressView: UIView!
@IBOutlet weak var constraintDetailView: NSLayoutConstraint!
@IBOutlet weak var viewTransactionCard: UIView!
@IBOutlet weak var viewSuccessful: UIView!
@IBOutlet weak var viewTransactionDetail: UIView!
@IBOutlet weak var viewReciverDetail: UIView!
@IBOutlet weak var viewIconSavePDF: UIView!
@IBOutlet weak var labelReceiver: UILabel!
@IBOutlet weak var labelRelation: UILabel!
@IBOutlet weak var labelAddress: UILabel!
@IBOutlet weak var labelPhone: UILabel!
@IBOutlet weak var labelEmail: UILabel!
@IBOutlet weak var labelAgentOrBankOrPayoutMode: UILabel!
@IBOutlet weak var labelPayoutBankOrPayoutModeName: UILabel!
@IBOutlet weak var labelPayoutBranchOrStateOrProvinceName: UILabel!
@IBOutlet weak var labelBranchOrStateOrProvince: UILabel!
@IBOutlet weak var labelAccountOrDistrict: UILabel!
@IBOutlet weak var labelAccountNumberOrDistrictName: UILabel!
@IBOutlet weak var labelCity: UILabel!
@IBOutlet weak var labelDeliveryAddress: UILabel!
@IBOutlet weak var scrollView: UIScrollView!
@IBOutlet weak var labelRecipientName: UILabel!
@IBOutlet weak var labelAmount: UILabel!
@IBOutlet weak var labelGMEControlNumber: UILabel!
@IBOutlet weak var labelTransactionDate: UILabel!
@IBOutlet weak var labelTransactionNumber: UILabel!
@IBOutlet weak var buttonMinimizeShow: UIButton!
@IBOutlet weak var buttonSavePDF: UIButton!
@IBOutlet weak var buttonDone: UIButton!
@IBOutlet weak var shareIcon: UIButton!
@IBOutlet weak var labelServiceFee: UILabel!
@IBOutlet weak var labelTotalAmount: UILabel!
private var webView: UIWebView
private var pdfComposer: PdfComposer!
private var HTMLContent: String!
private var serviceFee: String!
private var totalAmount: String = ""
private var showAllDetails: Bool = false
private var scrollHeightReduceFactor: CGFloat = 1.0
private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
//Recieved from previous viewcontroller
var responseDetails: [String: Any]?
var paymentMethod: String?
var trackTransfer: Bool?
@IBAction func goToHomeScreen(_ sender: Any) {
showHomeScreen()
}
@IBAction func showDetails(_ sender: Any) {
if !showAllDetails {
setUpDetails()
constraintDetailView.constant = 330
buttonMinimizeShow.setTitle("Minimize details", for: .normal)
} else {
scrollView.setContentOffset(CGPoint.zero, animated: true)
constraintDetailView.constant = 0
buttonMinimizeShow.setTitle("View all details", for: .normal)
}
showAllDetails = !showAllDetails
}
@IBAction func shareTransactionCard(_ sender: Any) {
shareIcon.isHidden = true
var objectToShare = [AnyObject]()
let imageToShare: UIImage = UIImage(view: viewTransactionCard)
objectToShare.append(imageToShare)
let activityViewController = UIActivityViewController(activityItems: objectToShare, applicationActivities: nil)
activityViewController.popoverPresentationController?.sourceView = self.view
self.present(activityViewController, animated: true, completion: { () -> Void in
self.shareIcon.isHidden = false
})
}
/**
Show details
*/
func setUpDetails() {
if paymentMethod == paymentModeType.cashPayment.rawValue {
constraintDetailView.constant = constraintDetailView.constant * 8/10
viewAccountNumOrDistrict.isHidden = true
viewBranchOrStateProvince.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
labelPayoutBankOrPayoutModeName.text = "[Any Where]"
cityView.isHidden = true
} else if paymentMethod == paymentModeType.cashPaymentPartner.rawValue{
constraintDetailView.constant = constraintDetailView.constant * 8/10
viewBranchOrStateProvince.isHidden = false
viewAccountNumOrDistrict.isHidden = false
deliveryAddressView.isHidden = true
cityView.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
if let bankName = responseDetails!["bankName"] {
labelPayoutBankOrPayoutModeName.text = bankName as? String ?? "_"
} else {
labelPayoutBankOrPayoutModeName.text = "-"
}
viewAccountNumOrDistrict.isHidden = true
viewBranchOrStateProvince.isHidden = true
if let receiverAddress = responseDetails!["receiverAddress"]{
labelAddress.text = receiverAddress as? String ?? "-"
}
} else if paymentMethod == paymentModeType.bankPayment.rawValue {
constraintDetailView.constant = constraintDetailView.constant * 10/10
viewAccountNumOrDistrict.isHidden = false
viewBranchOrStateProvince.isHidden = false
cityView.isHidden = true
deliveryAddressView.isHidden = true
labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
labelBranchOrStateOrProvince.text = "Branch"
if let bankName = responseDetails!["bankName"] {
labelPayoutBankOrPayoutModeName.text = bankName as? String ?? "_"
} else {
labelPayoutBankOrPayoutModeName.text = "-"
}
if let bankBranch = responseDetails!["bankBranch"]{
labelPayoutBranchOrStateOrProvinceName.text = bankBranch as? String ?? "-"
} else {
labelPayoutBranchOrStateOrProvinceName.text = "-"
}
if let accountNumber = responseDetails!["accountNumber"]{
labelAccountNumberOrDistrictName.text = accountNumber as? String
}
labelAccountOrDistrict.text = "Account Number"
if let receiverAddress = responseDetails!["receiverAddress"]{
labelAddress.text = receiverAddress as? String ?? "-"
}
} else {
constraintDetailView.constant = constraintDetailView.constant * 11/10
labelAgentOrBankOrPayoutMode.text = "Payout Mode"
labelPayoutBankOrPayoutModeName.text = "Home Delivery"
labelBranchOrStateOrProvince.text = "State/Province"
if let receiverState = responseDetails?["receiverState"]{
labelPayoutBranchOrStateOrProvinceName.text = receiverState as? String
}
labelAccountOrDistrict.text = "District"
if let receiverDistrict = responseDetails?["receiverDistrict"]{
labelAccountNumberOrDistrictName.text = receiverDistrict as? String
}
if let receiverCity = responseDetails?["receiverCity"] {
labelCity.text = receiverCity as? String
}
cityView.isHidden = false
addressView.isHidden = true
deliveryAddressView.isHidden = false
if let receiverAddress = responseDetails?["receiverAddress"] {
labelDeliveryAddress.text = receiverAddress as? String
}
}
labelReceiver.text = responseDetails!["receiverName"] as? String ?? "-"
labelRelation.text = responseDetails!["relation"] as? String ?? "-"
labelPhone.text = responseDetails!["receiverPhone"] as? String ?? "-"
labelEmail.text = responseDetails!["receiverEmail"] as? String ?? "-"
}
override func viewDidLoad() {
super.viewDidLoad()
guard responseDetails?.count != 0 else {
self.popUpMessageError(value: 10, message: "Error getting data")
return
}
setUpSuccessfulTransactionCard()
viewSuccessful.layer.cornerRadius = 10
viewTransactionDetail.layer.cornerRadius = 10
viewReciverDetail.layer.cornerRadius = 10
if trackTransfer != nil && trackTransfer! {
setUpNavBar(id: 204, title: "Track Your Transfer")
if let payoutMethod = responseDetails!["payoutMethod"]{
switch payoutMethod as? String {
case "Door to Door"?:
paymentMethod = paymentModeType.homeDelivery.rawValue
scrollHeightReduceFactor = 2.0
case "Cash"?:
paymentMethod = paymentModeType.cashPaymentPartner.rawValue
scrollHeightReduceFactor = 8.0
case "Bank"?:
paymentMethod = paymentModeType.bankPayment.rawValue
scrollHeightReduceFactor = 2.0
default:
return
}
}
setUpDetails()
shareIcon.isHidden = false
buttonMinimizeShow.isHidden = true
buttonSavePDF.isHidden = true
buttonDone.isHidden = true
viewIconSavePDF.isHidden = true
let viewHeight = view.frame.height
let componentHeight = viewSuccessful.frame.height + viewReciverDetail.frame.height + viewTransactionDetail.frame.height
self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: abs(viewHeight - componentHeight) * -scrollHeightReduceFactor, right: 0)
} else {
if paymentMethod == nil {
setUpNavBar(id: 204, title: "Transaction Statement")
switch responseDetails!["payoutMethod"] as? String {
case "Door to Door"?:
paymentMethod = paymentModeType.homeDelivery.rawValue
scrollHeightReduceFactor = 2.0
case "Cash"?:
paymentMethod = paymentModeType.cashPaymentPartner.rawValue
scrollHeightReduceFactor = 8.0
case "Bank"?:
paymentMethod = paymentModeType.bankPayment.rawValue
scrollHeightReduceFactor = 2.0
default:
return
}
setUpDetails()
shareIcon.isHidden = true
buttonMinimizeShow.isHidden = true
buttonSavePDF.isHidden = true
buttonDone.isHidden = true
viewIconSavePDF.isHidden = true
let viewHeight = view.frame.height
let componentHeight = viewSuccessful.frame.height + viewReciverDetail.frame.height + viewTransactionDetail.frame.height
self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: abs(viewHeight - componentHeight) * -scrollHeightReduceFactor, right: 0)
} else {
view.addSubview(webView)
setUpNavBar(id: 203, title: "Send Money")
constraintDetailView.constant = 0
}
}
setupServiceFeeAndTotalAmount()
}
/**
Display service fee and total amount
*/
func setupServiceFeeAndTotalAmount(){
if let serviceCharge = responseDetails?["payoutCharge"] as? String {
let serviceChargeNumber: Double!
if serviceCharge.contains(" ") {
let splittedServiceChargeArray = serviceCharge.split(separator: " ")
serviceChargeNumber = Double(splittedServiceChargeArray[0])!
} else {
serviceChargeNumber = Double(serviceCharge)!
}
serviceFee = getCommaAddedAmountString(amountString: String(serviceChargeNumber)) + " " + "KRW"
labelServiceFee.text = serviceFee
if let payoutAmountOriginal = responseDetails?["payoutAmountOriginal"] as? String {
let payoutAmountNumber: Double!
if payoutAmountOriginal.contains(" ") {
let splittedPayoutAmountArray = payoutAmountOriginal.split(separator: " ")
payoutAmountNumber = Double(splittedPayoutAmountArray[0])!
} else {
payoutAmountNumber = Double(payoutAmountOriginal)!
}
totalAmount = getCommaAddedAmountString(amountString: String(serviceChargeNumber+payoutAmountNumber)) + " " + "KRW"
labelTotalAmount.text = totalAmount
}
}
}
/**
Set up successful transaction card
*/
func setUpSuccessfulTransactionCard() {
if let receiverName = responseDetails!["receiverName"]{
labelRecipientName.text = receiverName as? String
}
if let payoutAmountConverted = responseDetails!["payoutAmountConverted"] {
labelAmount.text = getCommaAddedAmountString(amountString: payoutAmountConverted as! String)
}
if let controlNumber = responseDetails!["gmeControlNumber"] as? String {
labelGMEControlNumber.text = labelGMEControlNumber.text! + controlNumber
}
if let date = responseDetails!["date"]{
labelTransactionDate.text = unixTimeStampToDate(unixTimeStamp: date as! String)
}
if let transactionId = responseDetails!["transactionId"]{
labelTransactionNumber.text = transactionId as? String
}
}
required init?(coder aDecoder: NSCoder) {
self.webView = UIWebView(frame: CGRect.zero)
super.init(coder: aDecoder)
}
/**
Create a PDF
*/
func createPdfAsHTML() {
pdfComposer = PdfComposer()
var email: String = "-"
var agentName: String = "-"
var bankBranch: String = "-"
var accountNumber: String = ""
var state: String = ""
var district: String = ""
var city: String = ""
var deliveryAddress: String = ""
switch paymentMethod {
case paymentModeType.cashPaymentPartner.rawValue?:
if responseDetails!["bankName"] as? String != nil {
agentName = responseDetails!["bankName"] as! String
}
case paymentModeType.bankPayment.rawValue?:
if responseDetails!["bankName"] as? String != nil {
agentName = responseDetails!["bankName"] as! String
}
case paymentModeType.homeDelivery.rawValue?:
agentName = "Home Delivery"
default:
return
}
if let receiverEmail = responseDetails!["receiverEmail"] as? String {
email = receiverEmail
} else {
email = "-"
}
if responseDetails!["bankBranch"] as? String != nil {
bankBranch = responseDetails!["bankBranch"] as! String
} else {
bankBranch = "-"
}
if responseDetails!["accountNumber"] as? String != nil {
accountNumber = responseDetails!["accountNumber"] as! String
}
if responseDetails!["receiverState"] as? String != nil {
state = responseDetails!["receiverState"] as! String
}
if responseDetails!["receiverDistrict"] as? String != nil{
district = responseDetails!["receiverDistrict"] as! String
}
if responseDetails!["receiverCity"] as? String != nil {
city = responseDetails!["receiverCity"] as! String
}
if responseDetails!["receiverAddress"] as? String != nil {
deliveryAddress = responseDetails!["receiverAddress"] as! String
}
let pdfDetails: [String: String] = ["AMOUNT": responseDetails!["payoutAmountConverted"] as! String,
"CONTROLNUMBER": responseDetails!["gmeControlNumber"] as! String,
"TXDATE": unixTimeStampToDate(unixTimeStamp: responseDetails!["date"] as! String),
"TXNUMBER": responseDetails!["transactionId"] as! String,
"RECIPIENT": responseDetails!["receiverName"] as! String,
"RELATION": responseDetails!["relation"] as! String,
"ADDRESS": responseDetails!["receiverAddress"] as! String,
"PHONE": responseDetails!["receiverPhone"] as! String,
"EMAIL": email,
"AGENT": agentName,
"BRANCH": bankBranch,
"ACCOUNTNUMBER": accountNumber,
"PAYOUTMODE": paymentMethod!,
"SERVICEFEE":serviceFee,
"TOTALAMOUNT": totalAmount,
"STATEORPROVINCE": state,
"DISTRICT": district,
"CITY": city,
"DELIVERYADDRESS": deliveryAddress
]
if let pdfHTML = pdfComposer.renderPdf(pdfDetails: pdfDetails) {
webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
view.addSubview(webView)
webView.delegate = self
webView.alpha = 0
webView.loadHTMLString(pdfHTML, baseURL: nil)
HTMLContent = pdfHTML
}
}
@IBAction func savePdf(_ sender: Any) {
createPdfAsHTML()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
extension TransferSuccessfulViewController: UIWebViewDelegate {
func webViewDidFinishLoad(_ webView: UIWebView) {
if self.pdfComposer.exportHTMLContentToPDF(HTMLContent: self.HTMLContent) {
self.popUpMessageInfo(value: 16, title: "File Saved", message: "File is in Documents folder")
} else {
self.popUpMessageInfo(value: 16, title: "Something went wrong", message: "File not saved")
}
}
}
extension UIImage {
convenience init(view: UIView) {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
view.layer.render(in:UIGraphicsGetCurrentContext()!)
let image = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
self.init(cgImage: image!.cgImage!)
}
}