· 6 years ago · Feb 27, 2020, 06:40 AM
1//
2// KnowYourPlanVC.swift
3// mpiosapp3.0
4//
5// Created by Matchpoint on 09/03/19.
6// Copyright © 2019 admin. All rights reserved.
7// Created by Hussain Agharia
8
9import UIKit
10import SwiftyJSON
11import WebKit
12import FirebaseAnalytics
13
14class KnowYourPlanVC: BaseViewController {
15
16
17 var arrPlans : [(planID:String,price:Int,duration:String,isSelected: Bool )] = []
18 @IBOutlet weak var tableViewPlans: UITableView!
19 @IBOutlet weak var constraintHeightTableView: NSLayoutConstraint!
20
21 @IBOutlet weak var webview: UIWebView!
22 @IBOutlet weak var webKitPaymentView: WKWebView!
23 //
24 @IBOutlet weak var lblPlan: UILabel!
25 @IBOutlet weak var lblDuration: UILabel!
26 @IBOutlet weak var lblPricing: UILabel!
27 @IBOutlet weak var btnPayNow: UIButton!
28
29 var vehicleSerialNumber = ""
30 var strRedirectedUrl = ""
31 var amountToBePayed = ""
32 var yearRenewed = ""
33 var alertID : Int?
34 @IBAction func btnCloseWebkitView_TouchUpInside(_ sender: UIButton) {
35 webview.isHidden = true
36 }
37 // var arrPlans = ["a","b","c","d","e"]
38 var cellHeight = 52
39
40 override func viewDidLoad() {
41 super.viewDidLoad()
42 titleName(title: NavigationTitle.KNOW_YOUR_PLAN)
43 setLiveNavigationBar()
44
45 Analytics.logEvent(ViewControllers.KNOW_YOUR_PLAN_VC, parameters: nil)
46
47 webview.isHidden = true
48 webview.delegate = self
49// webKitPaymentView.navigationDelegate = self
50// webKitPaymentView.allowsBackForwardNavigationGestures = true
51
52 //language
53 lblPlan.text = lang.plan
54 lblPricing.text = lang.pricing
55 lblDuration.text = lang.duration
56 btnPayNow.setTitle(lang.pay_now, for: .normal)
57 btnPayNow.isHidden = true
58 getPlanData()
59
60
61 tableViewPlans.delegate = self
62 tableViewPlans.dataSource = self
63
64 constraintHeightTableView.constant = CGFloat(arrPlans.count * cellHeight)
65 }
66
67 func handleNotification() {
68 getPlanData()
69 }
70
71 override func viewWillAppear(_ animated: Bool) {
72 setFeatureEvent(eventId: FeatureEventId.DUMMY_EVENT)
73 }
74
75// override func onBackButtonPressed(_ sender: UIButton) {
76// self.navigationController?.popViewController(animated: true)
77// }
78//
79// override func onLiveButtonPressed(_ sender: UIButton) {
80// _ = setInitialRootViewContoller(storyboardName: Storyboard.HOME_STORYBOARD)
81// }
82
83 @IBAction func btnPayNowTouchUp(_ sender: Any) {
84// let storyBoard = UIStoryboard(name: Storyboard.MY_ACCOUNT_STORYBOARD, bundle: nil)
85// let destVC = storyBoard.instantiateViewController(withIdentifier: ViewControllers.PAYMENT_DETAILS_VC) as! PaymentDetailsVC
86// self.navigationController?.pushViewController(destVC, animated: true)
87
88 self.payNow(amount: Int(amountToBePayed)!)
89 }
90}
91
92extension KnowYourPlanVC : UIWebViewDelegate {
93 func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
94 print("shouldStartLoadWith \(request.url?.absoluteString)")
95 var strUrl = request.url?.absoluteString
96 if (strUrl?.contains(strRedirectedUrl))! {
97 strUrl = strUrl?.replacingOccurrences(of: strRedirectedUrl, with: "")
98 if (strUrl?.contains("order"))! {
99 strUrl = strUrl?.replacingOccurrences(of: "?", with: "")
100 let arrOrderDetail = strUrl?.components(separatedBy: "&")
101 var dicOrderDetail : [String : String] = [:]
102 var strMessage = "Your payment done successfull.\n Your "
103 for orderSubDetail in arrOrderDetail! {
104 let arrOrder = orderSubDetail.components(separatedBy: "=")
105 let key = arrOrder[0]
106 let value = arrOrder[1]
107 dicOrderDetail[key] = value
108 strMessage += key + " is " + value + ","
109 }
110 var chars = Array(strMessage)
111 chars[strMessage.count - 1] = "."
112 let modifiedString = String(chars)
113 strMessage = modifiedString
114 //apppresentWindow?.makeToast(message: strMessage)
115
116 let storyBoard = UIStoryboard(name: Storyboard.MY_ACCOUNT_STORYBOARD, bundle: nil)
117 let destVC = storyBoard.instantiateViewController(withIdentifier: ViewControllers.PAYMENT_STATUS_VC) as! PaymentStatusVC
118 destVC.image = #imageLiteral(resourceName: "icon-payment-success")
119 destVC.paymentStatus = "SUCCESS!"
120 destVC.paymentDetailMessage = "Your payment of Rs.\(amountToBePayed) for the \(yearRenewed) matchpointGPS plan has been successful!"
121 self.navigationController?.pushViewController(destVC, animated: true)
122 webview.isHidden = true
123 } else {
124 //apppresentWindow?.makeToast(message: "Oops.. Payment failed.")
125 webview.isHidden = true
126 let storyBoard = UIStoryboard(name: Storyboard.MY_ACCOUNT_STORYBOARD, bundle: nil)
127 let destVC = storyBoard.instantiateViewController(withIdentifier: ViewControllers.PAYMENT_STATUS_VC) as! PaymentStatusVC
128 destVC.image = #imageLiteral(resourceName: "icon-payment-failed")
129 destVC.paymentStatus = "UH OH! YOUR PAYMENT HAS FAILED"
130 destVC.paymentDetailMessage = "Your payment was not successfull."
131 self.navigationController?.pushViewController(destVC, animated: true)
132 }
133 }
134
135 return true
136 }
137}
138
139extension KnowYourPlanVC : UITableViewDelegate, UITableViewDataSource{
140
141 func numberOfSections(in tableView: UITableView) -> Int {
142 return 1
143 }
144
145 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
146 return arrPlans.count
147 }
148
149 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
150 btnPayNow.isHidden = false
151 let tupple = arrPlans[indexPath.row]
152 amountToBePayed = String(tupple.price)
153 yearRenewed = tupple.duration
154
155 let previousSelectedIndex = arrPlans.firstIndex { (tupple) -> Bool in
156 tupple.isSelected == true
157 }
158
159 if previousSelectedIndex != nil {
160 arrPlans[previousSelectedIndex!].isSelected = false
161 arrPlans[indexPath.row].isSelected = true
162 self.tableViewPlans.beginUpdates()
163 self.tableViewPlans.reloadRows(at: [IndexPath(row: previousSelectedIndex!, section: 0),IndexPath(row: indexPath.row, section: 0)], with: .automatic)
164 self.tableViewPlans.endUpdates()
165 } else {
166 arrPlans[indexPath.row].isSelected = true
167 self.tableViewPlans.beginUpdates()
168 self.tableViewPlans.reloadRows(at: [IndexPath(row: indexPath.row, section: 0)], with: .automatic)
169 self.tableViewPlans.endUpdates()
170 }
171 }
172
173 func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
174 let cell = tableView.dequeueReusableCell(withIdentifier: "plan-cell", for: indexPath) as! KnowYourPlanCell
175 let tupple = arrPlans[indexPath.row]
176 cell.lblPrice.text = String(format: "%d", tupple.price)
177 cell.lblDuration.text = tupple.duration
178
179 if tupple.isSelected{
180 cell.iconCheck.image = #imageLiteral(resourceName: "icon-check-gradient")
181 }
182 else{
183 cell.iconCheck.image = #imageLiteral(resourceName: "icon-check-gray")
184 }
185
186 return cell
187 }
188
189 func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
190
191 return CGFloat(cellHeight)
192 }
193}
194
195extension KnowYourPlanVC {
196// API Calling
197
198 func getPlanData() {
199
200 let parameters = [
201 "serial_number": vehicleSerialNumber
202 ] as [String : Any]
203
204 let network = NetworkCall()
205
206 network.apicall(api: API.KNOW_YOUR_PLAN_API, parameters: parameters, completion: { response in
207
208 self.showLoader()
209 if network.is_success {
210 let dataDict = JSON(network.data)
211 // apppresentWindow?.makeToast(message: "Tracker Enabled.")
212 let planList = dataDict["plan_list"]
213 self.arrPlans = []
214 for(_,subjson):(String,JSON) in planList{
215 let price = subjson["price"].intValue
216 let strPlanID = subjson["id"].stringValue
217 let duration = subjson["duration"].stringValue
218
219 let tupple : (planID:String,price:Int,duration:String,isSelected: Bool) = (strPlanID,price,duration, false)
220 self.arrPlans.append(tupple)
221 }
222 self.constraintHeightTableView.constant = CGFloat(self.arrPlans.count * self.cellHeight)
223 self.tableViewPlans.reloadData()
224
225 self.stopLoader()
226 print(dataDict)
227 }
228 else {
229 apppresentWindow!.makeToast(message: network.response_message)
230 self.stopLoader()
231 }
232 })
233 }
234
235 func payNow(amount : Int) {
236
237 let parameters = [
238 "serial_number": vehicleSerialNumber,
239 "amount" : amount
240 ] as [String : Any]
241
242 let network = NetworkCall()
243
244 network.apicall(api: API.PAY_NOW , parameters: parameters, completion: { response in
245
246 // self.showLoader()
247 if network.is_success {
248 let dataDict = JSON(network.data)
249
250 // apppresentWindow?.makeToast(message: "Tracker Enabled.")
251 var dicData : [String : Any] = [:]
252// for(_,subjson):(String,JSON) in dataDict {
253 dicData["transaction_id"] = dataDict["transaction_id"].stringValue
254 dicData["name"] = dataDict["name"].stringValue
255 dicData["amount"] = dataDict["amount"].intValue
256 dicData["mobile_number"] = dataDict["mobile_number"].stringValue
257 dicData["email"] = dataDict["email"].stringValue
258 dicData["redirect_url"] = dataDict["redirect_url"].stringValue //"mpgps://success"
259 self.strRedirectedUrl = dataDict["redirect_url"].stringValue
260 dicData["post_api"] = dataDict["post_api"].stringValue
261 dicData["request_source"] = dataDict["request_source"].stringValue
262 dicData["type"] = dataDict["type"].stringValue
263 dicData["client_url"] = dataDict["client_url"].stringValue
264 dicData["env"] = dataDict["env"].stringValue
265 dicData["address"] = dataDict["address"].stringValue
266 dicData["city"] = dataDict["city"].stringValue
267 dicData["state"] = dataDict["state"].stringValue
268 dicData["zipcode"] = dataDict["zipcode"].stringValue
269// }
270
271 self.httpPost(jsonDic: dicData)
272
273 print(dataDict)
274 }
275 else {
276 apppresentWindow!.makeToast(message: network.response_message)
277 self.stopLoader()
278 }
279 })
280 }
281
282
283 func httpPost(jsonDic: [String:Any]) {
284 print(jsonDic)
285 let url = URL(string: jsonDic["post_api"] as! String)!
286// let url = URL(string: "https://payments.do-blr.mpgpsdc.com/")
287
288 if let jsonData = (try? JSONSerialization.data(withJSONObject: jsonDic, options: [])) {
289 //let tmpJson = (try? JSONSerialization.data(withJSONObject: tmpDict, options: []))
290// var request = NSMutableURLRequest(url: URL(string: "YOUR_URL_HERE")!,
291// cachePolicy: .useProtocolCachePolicy,
292// timeoutInterval: 10.0)
293
294
295 var request = URLRequest(url: url)
296
297 request.cachePolicy = .useProtocolCachePolicy
298 request.timeoutInterval = 10.0
299 request.httpMethod = "POST"
300 request.httpBody = jsonData
301 request.addValue("application/json", forHTTPHeaderField: "Content-Type")
302 request.addValue("application/json", forHTTPHeaderField: "Accept")
303 webview.isHidden = false
304 webview.loadRequest(request)
305
306// let task = URLSession.shared.dataTask(with: request, completionHandler: { (responseData: Data?, response: URLResponse?, error: Error?) in
307// print("\(response)")
308// })
309// task.resume()
310 }
311 }
312}
313
314
315
316class KnowYourPlanCell : UITableViewCell{
317
318
319 @IBOutlet weak var iconCheck: UIImageView!
320 @IBOutlet weak var lblDuration: UILabel!
321 @IBOutlet weak var lblPrice: UILabel!
322}