Manos Chorianopoulos

Add OffersViewController

...@@ -8,10 +8,47 @@ ...@@ -8,10 +8,47 @@
8 import UIKit 8 import UIKit
9 9
10 @objc public class OffersTableViewCell: UITableViewCell { 10 @objc public class OffersTableViewCell: UITableViewCell {
11 + @IBOutlet weak var cellView: UIView!
12 + @IBOutlet weak var campaignImage: UIImageView!
13 + @IBOutlet weak var titleLabel: UILabel!
14 + @IBOutlet weak var subtitleLabel: UILabel!
15 + @IBOutlet weak var discountBGImage: UIImageView!
16 + @IBOutlet weak var discountSmileImage: UIImageView!
17 + @IBOutlet weak var discountLabel: UILabel!
18 +
19 + var postImageURL: String? {
20 + didSet {
21 + if let url = postImageURL {
22 + self.campaignImage.image = UIImage() // UIImage(named: "loading")
11 23
24 + UIImage.loadImageUsingCacheWithUrlString(url) { image in
25 + // set the image only when we are still displaying the content for the image we finished downloading
26 + if url == self.postImageURL {
27 + self.campaignImage.image = image
28 + }
29 + }
30 + }
31 + else {
32 + self.campaignImage.image = nil
33 + }
34 + }
35 + }
36 +
12 public override func awakeFromNib() { 37 public override func awakeFromNib() {
13 super.awakeFromNib() 38 super.awakeFromNib()
14 - // Initialization code 39 +
40 + // Add shadow
41 + self.layer.shadowColor = UIColor(red: 0.00, green: 0.00, blue: 0.00, alpha: 0.16).cgColor
42 + self.layer.shadowOffset = CGSize(width: 0.0, height: 3.0)
43 + self.layer.shadowOpacity = 1.0
44 + self.layer.shadowRadius = 6.0
45 +
46 + cellView.layer.cornerRadius = 5.0
47 + cellView.clipsToBounds = true
48 +
49 + discountBGImage.image = UIImage(named: "offer_circle_orange", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
50 + discountSmileImage.image = UIImage(named: "logo_smile_white_new", in: MyEmptyClass.resourceBundle(), compatibleWith: nil)
51 +
15 } 52 }
16 53
17 public override func setSelected(_ selected: Bool, animated: Bool) { 54 public override func setSelected(_ selected: Bool, animated: Bool) {
...@@ -19,5 +56,22 @@ import UIKit ...@@ -19,5 +56,22 @@ import UIKit
19 56
20 // Configure the view for the selected state 57 // Configure the view for the selected state
21 } 58 }
59 +
60 + public override func layoutSubviews() {
61 + super.layoutSubviews()
62 + //set the values for top,left,bottom,right margins
63 + let margins = UIEdgeInsets(top: 0, left: 0, bottom: 20, right: 0)
64 + contentView.frame = contentView.frame.inset(by: margins)
65 + }
66 +
67 +
68 + func configureCell(campaign: swiftApi.CampaignItemModel) {
69 + // campaignImage.load(link: campaign.logo_url ?? "", placeholder: UIImage(), cache: URLCache())
70 + self.postImageURL = campaign.logo_url ?? ""
71 +
72 + titleLabel.text = campaign.title ?? ""
73 + subtitleLabel.text = campaign.subtitle ?? ""
74 + discountLabel.text = "10%"
75 + }
22 76
23 } 77 }
......
...@@ -8,22 +8,117 @@ ...@@ -8,22 +8,117 @@
8 import UIKit 8 import UIKit
9 9
10 @objc public class OffersViewController: UIViewController { 10 @objc public class OffersViewController: UIViewController {
11 - 11 + @IBOutlet weak var tableView: UITableView!
12 +
13 + public var campaigns:Array<swiftApi.CampaignItemModel> = [] {
14 + didSet {
15 + DispatchQueue.main.async {
16 + self.tableView.reloadData()
17 + }
18 + }
19 + }
20 +
12 public override func viewDidLoad() { 21 public override func viewDidLoad() {
13 super.viewDidLoad() 22 super.viewDidLoad()
14 23
15 - // Do any additional setup after loading the view. 24 + getCampaignsRequest()
25 +
26 + tableView.delegate = self
27 + tableView.dataSource = self
28 + tableView.contentInset.top = 25
29 + }
30 +
31 +
32 +// MARK: - Requests
33 + func getCampaignsRequest() {
34 + swiftApi().getCampaignsAsyncNew(language: "en", filters: [String : Any](), getCampaignsCallback, failureCallback: {errorCode in
35 + print("========= getCampaignsCallback ERROR =========",errorCode)
36 + })
37 + }
38 +
39 + func getCampaignsCallback (_ campaignsData: Array<swiftApi.CampaignItemModel>?) -> Void {
40 + if (campaignsData != nil) {
41 + DispatchQueue.main.async {
42 + self.campaigns = campaignsData ?? []
43 + self.tableView.reloadData()
44 + }
45 + } else {
46 + print("========= getCampaignsCallback ERROR =========")
47 + }
48 + }
49 +
50 +}
51 +
52 +// MARK: - TableView
53 +extension OffersViewController: UITableViewDelegate, UITableViewDataSource{
54 +
55 + public func numberOfSections(in tableView: UITableView) -> Int {
56 + return 1
16 } 57 }
17 58
59 + public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
60 + return self.campaigns.count
61 + }
62 +
63 + public func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
64 + return 288.0 + 20.0
65 +// return UITableViewAutomaticDimension
66 + }
67 +
68 + public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
69 + let cell = tableView.dequeueReusableCell(withIdentifier: "OffersTableViewCellId", for: indexPath) as! OffersTableViewCell
70 +
71 + cell.configureCell(campaign: campaigns[indexPath.row])
72 +
73 + return cell
74 + }
75 +
76 + public func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
77 + let status = swiftApi().getNetworkStatus()
78 + if (status == -1 || status == 0) {
79 + self.showDialog("Δεν υπάρχει σύνδεση","Αυτή τη στιγμή βρίσκεσαι εκτός σύνδεσης. Παρακαλούμε βεβαιώσου ότι είσαι συνδεδεμένος στο διαδίκτυο και προσπάθησε ξανά.")
80 + } else {
81 +
82 + let storyboard = UIStoryboard(name: "Main", bundle: Bundle(for: MyEmptyClass.self))
83 + let vc = storyboard.instantiateViewController(withIdentifier: "CampaignViewController") as! SwiftWarplyFramework.CampaignViewController
84 + var url = ""
85 + var params = ""
86 +
87 +// url = swiftApi().constructCampaignUrl(campaigns[indexPath.row])
88 +// params = swiftApi().constructCampaignParams(campaigns[indexPath.row])
89 + url = campaigns[indexPath.row].index_url ?? ""
18 90
19 - /* 91 + let encoder = JSONEncoder()
20 - // MARK: - Navigation 92 + encoder.outputFormatting = .prettyPrinted
93 + let data = try! encoder.encode(campaigns[indexPath.row])
21 94
22 - // In a storyboard-based application, you will often want to do a little preparation before navigation 95 + print("Campaign_CLICK " + String(data: data, encoding: .utf8)!)
23 - override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 96 +
24 - // Get the new view controller using segue.destination. 97 + print("CampaignUrl url onclick: " + url)
25 - // Pass the selected object to the new view controller. 98 + vc.campaignUrl = url
99 + vc.params = params
100 + self.navigationController?.pushViewController(vc, animated: true)
101 +
102 + }
26 } 103 }
27 - */
28 104
105 + func showDialog(_ alertTitle: String, _ alertSubTitle: String) -> Void {
106 +
107 + let alert = UIAlertController(title: alertTitle, message: alertSubTitle, preferredStyle: .alert)
108 + alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
109 + switch action.style{
110 + case .default:
111 + print("default")
112 +
113 + case .cancel:
114 + print("cancel")
115 +
116 + case .destructive:
117 + print("destructive")
118 +
119 + }
120 + }))
121 + self.present(alert, animated: true, completion: nil)
122 + }
123 +
29 } 124 }
......
...@@ -1456,16 +1456,10 @@ public class swiftApi { ...@@ -1456,16 +1456,10 @@ public class swiftApi {
1456 1456
1457 func campaignsCallback(_ campaignsData: [AnyHashable: Any]?) -> Void { 1457 func campaignsCallback(_ campaignsData: [AnyHashable: Any]?) -> Void {
1458 var campaignsArray:Array<CampaignItemModel> = [] 1458 var campaignsArray:Array<CampaignItemModel> = []
1459 - var carouselArray:Array<CampaignItemModel> = []
1460 1459
1461 if let responseDataDictionary = campaignsData as? [String: AnyObject] { 1460 if let responseDataDictionary = campaignsData as? [String: AnyObject] {
1462 1461
1463 if (responseDataDictionary["MAPP_CAMPAIGNING-status"] as? Int == 1) { 1462 if (responseDataDictionary["MAPP_CAMPAIGNING-status"] as? Int == 1) {
1464 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1465 - dynatraceEvent._eventName = "custom_success_campaigns_loyalty"
1466 - dynatraceEvent._parameters = nil
1467 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1468 -
1469 if let responseDataMapp = responseDataDictionary["MAPP_CAMPAIGNING"] as? [String: Any] { 1463 if let responseDataMapp = responseDataDictionary["MAPP_CAMPAIGNING"] as? [String: Any] {
1470 if let responseDataCampaigns = responseDataMapp["campaigns"] as? [[String : Any]?] { 1464 if let responseDataCampaigns = responseDataMapp["campaigns"] as? [[String : Any]?] {
1471 1465
...@@ -1475,64 +1469,24 @@ public class swiftApi { ...@@ -1475,64 +1469,24 @@ public class swiftApi {
1475 campaignsArray.append(tempCampaign) 1469 campaignsArray.append(tempCampaign)
1476 } 1470 }
1477 } 1471 }
1478 - }
1479 - } else {
1480 - getCampaignsCallback(nil)
1481 - }
1482 -
1483 - swiftApi().getCampaignsPersonalizedAsync(language: language, filters: filters, {campaignsPersonalizedData in
1484 -
1485 - campaignsArray = campaignsArray + (campaignsPersonalizedData ?? [])
1486 -
1487 - swiftApi().setUniqueCampaignList(campaignsArray)
1488 -
1489 - carouselArray = campaignsArray.filter {
1490 - let tempCampaign = $0
1491 - let isCarouselItem = (tempCampaign._carousel != nil) && (tempCampaign._carousel == "true")
1492 1472
1493 - return (isCarouselItem) 1473 + swiftApi().setUniqueCampaignList(campaignsArray)
1494 - }
1495 - swiftApi().setCarouselList(carouselArray)
1496 1474
1497 - var filteredCampaigns = campaignsArray.filter { 1475 + let sortedCampaigns = campaignsArray.sorted {
1498 - let tempCampaign = $0 1476 + ($0._sorting ?? 0) < ($1._sorting ?? 0)
1499 - let isCcmsOffer = (tempCampaign.ccms_offer != nil) && (tempCampaign.ccms_offer != "") && (tempCampaign.ccms_offer == "true") 1477 + }
1500 - let isTelco = (tempCampaign._type != nil && tempCampaign._type == "telco")
1501 -
1502 - return (!(isCcmsOffer || isTelco))
1503 - }
1504 -
1505 - // if (swiftApi().getConsumerInternal()?._answered == true) {
1506 - filteredCampaigns = filteredCampaigns.filter { $0.offer_category != "questionnaire" }
1507 - // }
1508 1478
1509 - let sortedCampaigns = filteredCampaigns.sorted { 1479 + getCampaignsCallback(sortedCampaigns)
1510 - ($0._sorting ?? 0) < ($1._sorting ?? 0)
1511 } 1480 }
1512 - 1481 + } else {
1513 - getCampaignsCallback(sortedCampaigns); 1482 + getCampaignsCallback(nil)
1514 - 1483 + }
1515 - // SwiftEventBus.post("campaigns_retrieved")
1516 - }, failureCallback: {errorCode in
1517 -
1518 - failureCallback(errorCode)
1519 - })
1520 1484
1521 } else { 1485 } else {
1522 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1523 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1524 - dynatraceEvent._parameters = nil
1525 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1526 -
1527 getCampaignsCallback(nil) 1486 getCampaignsCallback(nil)
1528 } 1487 }
1529 1488
1530 } else { 1489 } else {
1531 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1532 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1533 - dynatraceEvent._parameters = nil
1534 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1535 -
1536 getCampaignsCallback(nil) 1490 getCampaignsCallback(nil)
1537 } 1491 }
1538 } 1492 }
...@@ -1542,11 +1496,6 @@ public class swiftApi { ...@@ -1542,11 +1496,6 @@ public class swiftApi {
1542 print(error) 1496 print(error)
1543 print("====================") 1497 print("====================")
1544 1498
1545 - let dynatraceEvent = swiftApi.LoyaltySDKDynatraceEventModel()
1546 - dynatraceEvent._eventName = "custom_error_campaigns_loyalty"
1547 - dynatraceEvent._parameters = nil
1548 - // SwiftEventBus.post("dynatrace", sender: dynatraceEvent)
1549 -
1550 getCampaignsCallback(nil) 1499 getCampaignsCallback(nil)
1551 } 1500 }
1552 } 1501 }
......