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

6 years ago
  1. //
  2. // TransferSuccessfulViewController.swift
  3. // GMERemittance
  4. //
  5. // Created by Fm-user on 12/26/17.
  6. // Copyright © 2017 Gobal Money Express Co. Ltd. All rights reserved.
  7. //
  8. import UIKit
  9. import WebKit
  10. class TransferSuccessfulViewController: UIViewController {
  11. @IBOutlet weak var serviceFeeLabelOutlet: UILabel!
  12. @IBOutlet weak var viewAccountNumOrDistrict: UIView!
  13. @IBOutlet weak var viewBranchOrStateProvince: UIView!
  14. @IBOutlet weak var cityView: UIView!
  15. @IBOutlet weak var addressView: UIView!
  16. @IBOutlet weak var deliveryAddressView: UIView!
  17. @IBOutlet weak var constraintDetailView: NSLayoutConstraint!
  18. @IBOutlet weak var viewTransactionCard: UIView!
  19. @IBOutlet weak var viewSuccessful: UIView!
  20. @IBOutlet weak var viewTransactionDetail: UIView!
  21. @IBOutlet weak var viewReciverDetail: UIView!
  22. @IBOutlet weak var viewIconSavePDF: UIView!
  23. @IBOutlet weak var labelReceiver: UILabel!
  24. @IBOutlet weak var labelRelation: UILabel!
  25. @IBOutlet weak var labelAddress: UILabel!
  26. @IBOutlet weak var labelPhone: UILabel!
  27. @IBOutlet weak var labelEmail: UILabel!
  28. @IBOutlet weak var labelAgentOrBankOrPayoutMode: UILabel!
  29. @IBOutlet weak var labelPayoutBankOrPayoutModeName: UILabel!
  30. @IBOutlet weak var labelPayoutBranchOrStateOrProvinceName: UILabel!
  31. @IBOutlet weak var labelBranchOrStateOrProvince: UILabel!
  32. @IBOutlet weak var labelAccountOrDistrict: UILabel!
  33. @IBOutlet weak var labelAccountNumberOrDistrictName: UILabel!
  34. @IBOutlet weak var labelCity: UILabel!
  35. @IBOutlet weak var labelDeliveryAddress: UILabel!
  36. @IBOutlet weak var scrollView: UIScrollView!
  37. @IBOutlet weak var labelRecipientName: UILabel!
  38. @IBOutlet weak var labelAmount: UILabel!
  39. @IBOutlet weak var labelGMEControlNumber: UILabel!
  40. @IBOutlet weak var labelTransactionDate: UILabel!
  41. @IBOutlet weak var labelTransactionNumber: UILabel!
  42. @IBOutlet weak var buttonMinimizeShow: UIButton!
  43. @IBOutlet weak var buttonSavePDF: UIButton!
  44. @IBOutlet weak var buttonDone: UIButton!
  45. @IBOutlet weak var shareIcon: UIButton!
  46. @IBOutlet weak var labelServiceFee: UILabel!
  47. @IBOutlet weak var labelTotalAmount: UILabel!
  48. private var webView: UIWebView
  49. private var pdfComposer: PdfComposer!
  50. private var HTMLContent: String!
  51. private var serviceFee: String!
  52. private var totalAmount: String = ""
  53. private var showAllDetails: Bool = false
  54. private var scrollHeightReduceFactor: CGFloat = 1.0
  55. private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView()
  56. //Recieved from previous viewcontroller
  57. var responseDetails: [String: Any]?
  58. var paymentMethod: String?
  59. var trackTransfer: Bool?
  60. @IBAction func goToHomeScreen(_ sender: Any) {
  61. showHomeScreen()
  62. }
  63. @IBAction func showDetails(_ sender: Any) {
  64. if !showAllDetails {
  65. setUpDetails()
  66. constraintDetailView.constant = 330
  67. buttonMinimizeShow.setTitle("Minimize details", for: .normal)
  68. } else {
  69. scrollView.setContentOffset(CGPoint.zero, animated: true)
  70. constraintDetailView.constant = 0
  71. buttonMinimizeShow.setTitle("View all details", for: .normal)
  72. }
  73. showAllDetails = !showAllDetails
  74. }
  75. @IBAction func shareTransactionCard(_ sender: Any) {
  76. shareIcon.isHidden = true
  77. var objectToShare = [AnyObject]()
  78. let imageToShare: UIImage = UIImage(view: viewTransactionCard)
  79. objectToShare.append(imageToShare)
  80. let activityViewController = UIActivityViewController(activityItems: objectToShare, applicationActivities: nil)
  81. activityViewController.popoverPresentationController?.sourceView = self.view
  82. self.present(activityViewController, animated: true, completion: { () -> Void in
  83. self.shareIcon.isHidden = false
  84. })
  85. }
  86. /**
  87. Show details
  88. */
  89. func setUpDetails() {
  90. if paymentMethod == paymentModeType.cashPayment.rawValue {
  91. constraintDetailView.constant = constraintDetailView.constant * 8/10
  92. viewAccountNumOrDistrict.isHidden = true
  93. viewBranchOrStateProvince.isHidden = true
  94. labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
  95. labelPayoutBankOrPayoutModeName.text = "[Any Where]"
  96. cityView.isHidden = true
  97. } else if paymentMethod == paymentModeType.cashPaymentPartner.rawValue{
  98. constraintDetailView.constant = constraintDetailView.constant * 8/10
  99. viewBranchOrStateProvince.isHidden = false
  100. viewAccountNumOrDistrict.isHidden = false
  101. deliveryAddressView.isHidden = true
  102. cityView.isHidden = true
  103. labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
  104. if let bankName = responseDetails!["bankName"] {
  105. labelPayoutBankOrPayoutModeName.text = bankName as? String ?? "_"
  106. } else {
  107. labelPayoutBankOrPayoutModeName.text = "-"
  108. }
  109. viewAccountNumOrDistrict.isHidden = true
  110. viewBranchOrStateProvince.isHidden = true
  111. if let receiverAddress = responseDetails!["receiverAddress"]{
  112. labelAddress.text = receiverAddress as? String ?? "-"
  113. }
  114. } else if paymentMethod == paymentModeType.bankPayment.rawValue {
  115. constraintDetailView.constant = constraintDetailView.constant * 10/10
  116. viewAccountNumOrDistrict.isHidden = false
  117. viewBranchOrStateProvince.isHidden = false
  118. cityView.isHidden = true
  119. deliveryAddressView.isHidden = true
  120. labelAgentOrBankOrPayoutMode.text = "Payout Agent/Bank"
  121. labelBranchOrStateOrProvince.text = "Branch"
  122. if let bankName = responseDetails!["bankName"] {
  123. labelPayoutBankOrPayoutModeName.text = bankName as? String ?? "_"
  124. } else {
  125. labelPayoutBankOrPayoutModeName.text = "-"
  126. }
  127. if let bankBranch = responseDetails!["bankBranch"]{
  128. labelPayoutBranchOrStateOrProvinceName.text = bankBranch as? String ?? "-"
  129. } else {
  130. labelPayoutBranchOrStateOrProvinceName.text = "-"
  131. }
  132. if let accountNumber = responseDetails!["accountNumber"]{
  133. labelAccountNumberOrDistrictName.text = accountNumber as? String
  134. }
  135. labelAccountOrDistrict.text = "Account Number"
  136. if let receiverAddress = responseDetails!["receiverAddress"]{
  137. labelAddress.text = receiverAddress as? String ?? "-"
  138. }
  139. } else {
  140. constraintDetailView.constant = constraintDetailView.constant * 11/10
  141. labelAgentOrBankOrPayoutMode.text = "Payout Mode"
  142. labelPayoutBankOrPayoutModeName.text = "Home Delivery"
  143. labelBranchOrStateOrProvince.text = "State/Province"
  144. if let receiverState = responseDetails?["receiverState"]{
  145. labelPayoutBranchOrStateOrProvinceName.text = receiverState as? String
  146. }
  147. labelAccountOrDistrict.text = "District"
  148. if let receiverDistrict = responseDetails?["receiverDistrict"]{
  149. labelAccountNumberOrDistrictName.text = receiverDistrict as? String
  150. }
  151. if let receiverCity = responseDetails?["receiverCity"] {
  152. labelCity.text = receiverCity as? String
  153. }
  154. cityView.isHidden = false
  155. addressView.isHidden = true
  156. deliveryAddressView.isHidden = false
  157. if let receiverAddress = responseDetails?["receiverAddress"] {
  158. labelDeliveryAddress.text = receiverAddress as? String
  159. }
  160. }
  161. labelReceiver.text = responseDetails!["receiverName"] as? String ?? "-"
  162. labelRelation.text = responseDetails!["relation"] as? String ?? "-"
  163. labelPhone.text = responseDetails!["receiverPhone"] as? String ?? "-"
  164. labelEmail.text = responseDetails!["receiverEmail"] as? String ?? "-"
  165. }
  166. override func viewDidLoad() {
  167. super.viewDidLoad()
  168. guard responseDetails?.count != 0 else {
  169. self.popUpMessageError(value: 10, message: "Error getting data")
  170. return
  171. }
  172. setUpSuccessfulTransactionCard()
  173. viewSuccessful.layer.cornerRadius = 10
  174. viewTransactionDetail.layer.cornerRadius = 10
  175. viewReciverDetail.layer.cornerRadius = 10
  176. if trackTransfer != nil && trackTransfer! {
  177. setUpNavBar(id: 204, title: "Track Your Transfer")
  178. if let payoutMethod = responseDetails!["payoutMethod"]{
  179. switch payoutMethod as? String {
  180. case "Door to Door"?:
  181. paymentMethod = paymentModeType.homeDelivery.rawValue
  182. scrollHeightReduceFactor = 2.0
  183. case "Cash"?:
  184. paymentMethod = paymentModeType.cashPaymentPartner.rawValue
  185. scrollHeightReduceFactor = 8.0
  186. case "Bank"?:
  187. paymentMethod = paymentModeType.bankPayment.rawValue
  188. scrollHeightReduceFactor = 2.0
  189. default:
  190. return
  191. }
  192. }
  193. setUpDetails()
  194. shareIcon.isHidden = false
  195. buttonMinimizeShow.isHidden = true
  196. buttonSavePDF.isHidden = true
  197. buttonDone.isHidden = true
  198. viewIconSavePDF.isHidden = true
  199. let viewHeight = view.frame.height
  200. let componentHeight = viewSuccessful.frame.height + viewReciverDetail.frame.height + viewTransactionDetail.frame.height
  201. self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: abs(viewHeight - componentHeight) * -scrollHeightReduceFactor, right: 0)
  202. } else {
  203. if paymentMethod == nil {
  204. setUpNavBar(id: 204, title: "Transaction Statement")
  205. switch responseDetails!["payoutMethod"] as? String {
  206. case "Door to Door"?:
  207. paymentMethod = paymentModeType.homeDelivery.rawValue
  208. scrollHeightReduceFactor = 2.0
  209. case "Cash"?:
  210. paymentMethod = paymentModeType.cashPaymentPartner.rawValue
  211. scrollHeightReduceFactor = 8.0
  212. case "Bank"?:
  213. paymentMethod = paymentModeType.bankPayment.rawValue
  214. scrollHeightReduceFactor = 2.0
  215. default:
  216. return
  217. }
  218. setUpDetails()
  219. shareIcon.isHidden = true
  220. buttonMinimizeShow.isHidden = true
  221. buttonSavePDF.isHidden = true
  222. buttonDone.isHidden = true
  223. viewIconSavePDF.isHidden = true
  224. let viewHeight = view.frame.height
  225. let componentHeight = viewSuccessful.frame.height + viewReciverDetail.frame.height + viewTransactionDetail.frame.height
  226. self.scrollView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: abs(viewHeight - componentHeight) * -scrollHeightReduceFactor, right: 0)
  227. } else {
  228. view.addSubview(webView)
  229. setUpNavBar(id: 203, title: "Send Money")
  230. constraintDetailView.constant = 0
  231. }
  232. }
  233. setupServiceFeeAndTotalAmount()
  234. }
  235. /**
  236. Display service fee and total amount
  237. */
  238. func setupServiceFeeAndTotalAmount(){
  239. if let serviceCharge = responseDetails?["payoutCharge"] as? String {
  240. let serviceChargeNumber: Double!
  241. if serviceCharge.contains(" ") {
  242. let splittedServiceChargeArray = serviceCharge.split(separator: " ")
  243. serviceChargeNumber = Double(splittedServiceChargeArray[0])!
  244. } else {
  245. serviceChargeNumber = Double(serviceCharge)!
  246. }
  247. serviceFee = getCommaAddedAmountString(amountString: String(serviceChargeNumber)) + " " + "KRW"
  248. labelServiceFee.text = serviceFee
  249. if let payoutAmountOriginal = responseDetails?["payoutAmountOriginal"] as? String {
  250. let payoutAmountNumber: Double!
  251. if payoutAmountOriginal.contains(" ") {
  252. let splittedPayoutAmountArray = payoutAmountOriginal.split(separator: " ")
  253. payoutAmountNumber = Double(splittedPayoutAmountArray[0])!
  254. } else {
  255. payoutAmountNumber = Double(payoutAmountOriginal)!
  256. }
  257. totalAmount = getCommaAddedAmountString(amountString: String(serviceChargeNumber+payoutAmountNumber)) + " " + "KRW"
  258. labelTotalAmount.text = totalAmount
  259. }
  260. }
  261. }
  262. /**
  263. Set up successful transaction card
  264. */
  265. func setUpSuccessfulTransactionCard() {
  266. if let receiverName = responseDetails!["receiverName"]{
  267. labelRecipientName.text = receiverName as? String
  268. }
  269. if let payoutAmountConverted = responseDetails!["payoutAmountConverted"] {
  270. labelAmount.text = getCommaAddedAmountString(amountString: payoutAmountConverted as! String)
  271. }
  272. if let controlNumber = responseDetails!["gmeControlNumber"] as? String {
  273. labelGMEControlNumber.text = labelGMEControlNumber.text! + controlNumber
  274. }
  275. if let date = responseDetails!["date"]{
  276. labelTransactionDate.text = unixTimeStampToDate(unixTimeStamp: date as! String)
  277. }
  278. if let transactionId = responseDetails!["transactionId"]{
  279. labelTransactionNumber.text = transactionId as? String
  280. }
  281. }
  282. required init?(coder aDecoder: NSCoder) {
  283. self.webView = UIWebView(frame: CGRect.zero)
  284. super.init(coder: aDecoder)
  285. }
  286. /**
  287. Create a PDF
  288. */
  289. func createPdfAsHTML() {
  290. pdfComposer = PdfComposer()
  291. var email: String = "-"
  292. var agentName: String = "-"
  293. var bankBranch: String = "-"
  294. var accountNumber: String = ""
  295. var state: String = ""
  296. var district: String = ""
  297. var city: String = ""
  298. var deliveryAddress: String = ""
  299. switch paymentMethod {
  300. case paymentModeType.cashPaymentPartner.rawValue?:
  301. if responseDetails!["bankName"] as? String != nil {
  302. agentName = responseDetails!["bankName"] as! String
  303. }
  304. case paymentModeType.bankPayment.rawValue?:
  305. if responseDetails!["bankName"] as? String != nil {
  306. agentName = responseDetails!["bankName"] as! String
  307. }
  308. case paymentModeType.homeDelivery.rawValue?:
  309. agentName = "Home Delivery"
  310. default:
  311. return
  312. }
  313. if let receiverEmail = responseDetails!["receiverEmail"] as? String {
  314. email = receiverEmail
  315. } else {
  316. email = "-"
  317. }
  318. if responseDetails!["bankBranch"] as? String != nil {
  319. bankBranch = responseDetails!["bankBranch"] as! String
  320. } else {
  321. bankBranch = "-"
  322. }
  323. if responseDetails!["accountNumber"] as? String != nil {
  324. accountNumber = responseDetails!["accountNumber"] as! String
  325. }
  326. if responseDetails!["receiverState"] as? String != nil {
  327. state = responseDetails!["receiverState"] as! String
  328. }
  329. if responseDetails!["receiverDistrict"] as? String != nil{
  330. district = responseDetails!["receiverDistrict"] as! String
  331. }
  332. if responseDetails!["receiverCity"] as? String != nil {
  333. city = responseDetails!["receiverCity"] as! String
  334. }
  335. if responseDetails!["receiverAddress"] as? String != nil {
  336. deliveryAddress = responseDetails!["receiverAddress"] as! String
  337. }
  338. let pdfDetails: [String: String] = ["AMOUNT": responseDetails!["payoutAmountConverted"] as! String,
  339. "CONTROLNUMBER": responseDetails!["gmeControlNumber"] as! String,
  340. "TXDATE": unixTimeStampToDate(unixTimeStamp: responseDetails!["date"] as! String),
  341. "TXNUMBER": responseDetails!["transactionId"] as! String,
  342. "RECIPIENT": responseDetails!["receiverName"] as! String,
  343. "RELATION": responseDetails!["relation"] as! String,
  344. "ADDRESS": responseDetails!["receiverAddress"] as! String,
  345. "PHONE": responseDetails!["receiverPhone"] as! String,
  346. "EMAIL": email,
  347. "AGENT": agentName,
  348. "BRANCH": bankBranch,
  349. "ACCOUNTNUMBER": accountNumber,
  350. "PAYOUTMODE": paymentMethod!,
  351. "SERVICEFEE":serviceFee,
  352. "TOTALAMOUNT": totalAmount,
  353. "STATEORPROVINCE": state,
  354. "DISTRICT": district,
  355. "CITY": city,
  356. "DELIVERYADDRESS": deliveryAddress
  357. ]
  358. if let pdfHTML = pdfComposer.renderPdf(pdfDetails: pdfDetails) {
  359. webView = UIWebView(frame: CGRect(x: 0, y: 0, width: 10, height: 10))
  360. view.addSubview(webView)
  361. webView.delegate = self
  362. webView.alpha = 0
  363. webView.loadHTMLString(pdfHTML, baseURL: nil)
  364. HTMLContent = pdfHTML
  365. }
  366. }
  367. @IBAction func savePdf(_ sender: Any) {
  368. createPdfAsHTML()
  369. }
  370. override func didReceiveMemoryWarning() {
  371. super.didReceiveMemoryWarning()
  372. }
  373. }
  374. extension TransferSuccessfulViewController: UIWebViewDelegate {
  375. func webViewDidFinishLoad(_ webView: UIWebView) {
  376. if self.pdfComposer.exportHTMLContentToPDF(HTMLContent: self.HTMLContent) {
  377. self.popUpMessageInfo(value: 16, title: "File Saved", message: "File is in Documents folder")
  378. } else {
  379. self.popUpMessageInfo(value: 16, title: "Something went wrong", message: "File not saved")
  380. }
  381. }
  382. }
  383. extension UIImage {
  384. convenience init(view: UIView) {
  385. UIGraphicsBeginImageContextWithOptions(view.bounds.size, false, 0.0)
  386. view.layer.render(in:UIGraphicsGetCurrentContext()!)
  387. let image = UIGraphicsGetImageFromCurrentImageContext()
  388. UIGraphicsEndImageContext()
  389. self.init(cgImage: image!.cgImage!)
  390. }
  391. }