Files
Woka_Native_iOS/WOKA/Cart/ViewModel/CartPaymentOptionsVM.swift
BilalKhanWDI bb68fa1e3c - Completed Apply Coupon Functionality
- Made a selection for the coupon selected, also added no coupon found when coupon is not there
- Added Masila view in more section
- Added Play trailer from Manila in more section
- Gave other connectivity
2024-07-24 19:59:08 +05:30

195 lines
7.7 KiB
Swift

//
// CartPaymentOptionsVM.swift
// WOKA
//
// Created by MacBook Pro on 23/07/24.
//
import UIKit
import Alamofire
class CartPaymentOptionsVM{
weak var vc : CartPaymentOptionsVC!
var cartListData = [CartListingDM.ResultData]()
var couponData = [CouponListDM.ResultData]()
var isExpanded = false
var cartTotalPrice = 0.0
var couponCodeSelected = ""
func initView(){
vc.couponCodeTF.roundCorner()
addGradient()
vc.scrollView.indicatorStyle = .white
setupCell()
updateCart()
getCouponAndOffers()
self.vc.totalCartPrice.text = K.ConstantString.rupeeSign + " " + cartTotalPrice.toString()
}
func setupCell(){
vc.cartTableView.register(UINib(nibName: K.CellIdentifier.Cart.cartPaymentOptionsCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.Cart.cartPaymentOptionsCell)
vc.cartTableView.delegate = vc.self
vc.cartTableView.dataSource = vc.self
vc.couponTableView.register(UINib(nibName: K.CellIdentifier.Cart.couponCell, bundle: nil), forCellReuseIdentifier: K.CellIdentifier.Cart.couponCell)
vc.couponTableView.delegate = vc.self
vc.couponTableView.dataSource = vc.self
}
func addGradient(){
self.vc.title = "PAYMENT OPTIONS".localized(loc: AuthFunc.shareInstance.languageSelected.rawValue)
let color1 = #colorLiteral(red: 0.6745098039, green: 0.6235294118, blue: 0.1725490196, alpha: 1)
let color2 = #colorLiteral(red: 0.5450980392, green: 0.6745098039, blue: 0.1725490196, alpha: 1)
vc.view.applyGradient(colors: [color2, color1], startPoint: CGPoint(x: 0, y: 0), endPoint: CGPoint(x: 0.8, y: 0))
}
func updateCart(){
guard let self = self.vc else{return}
self.cartTableView.reloadData()
self.cartTableHeight.constant = self.cartTableView.contentSize.height + 1000
self.cartTableView.layoutIfNeeded()
self.cartTableHeight.constant = self.cartTableView.contentSize.height
}
// MARK: - Get SuperCategory
func getCouponAndOffers(){
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Cart.coupon_listing, method: .get,headers: headers) { [weak self](result : Result<BaseResponseModel<CouponListDM>, NetworkManager.APIError>) in
switch result{
case .success(let data):
guard let self else{
Utilities.dismissProgressHUD()
return
}
switch data.success{
case 0:
/*
Error
*/
Utilities.dismissProgressHUD()
self.vc.noCouponFound.isHidden = false
case 1:
Utilities.dismissProgressHUD()
guard let data = data.data?.result else{return}
self.couponData = data
self.vc.noCouponFound.isHidden = true
self.vc.couponTableView.reloadData()
self.vc.couponTableHeght.constant = self.vc.couponTableView.contentSize.height + 100
self.vc.couponTableView.layoutIfNeeded()
self.vc.couponTableHeght.constant = self.vc.couponTableView.contentSize.height
default:
Utilities.dismissProgressHUD()
break
}
case .failure(let error):
guard let self else{
Utilities.dismissProgressHUD()
return
}
Utilities.dismissProgressHUD()
Utilities.alertWithBtnCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in
if isDone{
self.getCouponAndOffers()
}
}
}
}
}
func applyCoupon(code : String){
Utilities.startProgressHUD()
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
let params : Parameters = ["coupon_code" : code,
"total_amount" : self.cartTotalPrice]
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Cart.applied_coupon_discount, method: .post,parameters: params,headers: headers) { [weak self](result : Result<BaseResponseModel<CouponApplyDM>, NetworkManager.APIError>) in
switch result{
case .success(let data):
guard let self else{
Utilities.dismissProgressHUD()
return
}
switch data.success{
case 0:
/*
Error
*/
Utilities.dismissProgressHUD()
case 1:
Utilities.dismissProgressHUD()
guard let data = data.data else{return}
self.vc.subtotalPrice.text = data.cartTotalAmount
self.vc.discountPrice.text = data.discountValue
self.vc.totalCartPrice.text = data.cartDiscountedAmount
self.vc.couponAplliedStack.isHidden = false
default:
Utilities.dismissProgressHUD()
break
}
case .failure(let error):
guard let self else{
Utilities.dismissProgressHUD()
return
}
Utilities.dismissProgressHUD()
Utilities.alertWithBtnCancelCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in
if isDone{
self.applyCoupon(code: self.vc.couponCodeTF.text ?? "")
}
}
}
}
}
func createOrder(){
Utilities.startProgressHUD()
let headers : HTTPHeaders = ["access-token" : AuthFunc.shareInstance.getAccessToken()]
let params : Parameters = ["product_ids" : [],
"addressID" : "String"]
struct URLResp : Codable {
var url : String?
}
NetworkManager.shareInstance.apiRequest(url: APIEndPoints.Cart.create_new_order, method: .post,headers: headers) { [weak self](result : Result<BaseResponseModel<URLResp>, NetworkManager.APIError>) in
switch result{
case .success(let data):
guard let self else{
Utilities.dismissProgressHUD()
return
}
switch data.success{
case 0:
/*
Error
*/
Utilities.dismissProgressHUD()
case 1:
Utilities.dismissProgressHUD()
guard let data = data.data else{return}
print(data.url)
default:
Utilities.dismissProgressHUD()
break
}
case .failure(let error):
guard let self else{
Utilities.dismissProgressHUD()
return
}
Utilities.dismissProgressHUD()
Utilities.alertWithBtnCancelCompletion(title: "Error", msgBody: error.localizedDescription, okBtnStr: "Retry?", vc: self.vc) { isDone in
if isDone{
self.createOrder()
}
}
}
}
}
}