// // 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!) } }