// // SertifikatBelumUploadPresenter.swift // Sirani // // Created by Anhar Solehudin on 16/04/19. // Copyright © 2019 Anhar Solehudin. All rights reserved. // import Foundation import SwiftyJSON class SertifikatBelumUploadPresenter { private let siraniApiServices: SiraniApiServices weak private var view: SertifikatBelumUploadViewDelegate? init(siraniApiServices: SiraniApiServices) { self.siraniApiServices = siraniApiServices } func attachView(view: SertifikatBelumUploadViewDelegate?) { self.view = view } func detachView() { self.view = nil } func loadData(cursor: Int, prev: Int, jenis: String, columns: String, search: String) { self.view?.hideNoDataLayout() self.view?.showLoading() // TODO : Get Id from User Sessions var custId = 0 let savedCustId = UserState.instance.getCustId() if savedCustId > 0 { custId = savedCustId } var dataList = [SertifikatBelumUpload]() siraniApiServices.postToGetSurtifikatBelumUpload(cursor: cursor, prev: prev, jenis: jenis, columns: columns, search: search, cust_id: custId).responseJSON { response in if response.error == nil { guard let data = response.data else { return } if let json = try? JSON(data: data) { if let data = json["data"].array { if data.count > 0 { for item in data { let sertBlmUpload = SertifikatBelumUpload ( apl_id: item["apl_id"].intValue, nomor: item["nomor"].stringValue, tgl: item["tgl"].stringValue, exp: item["exp"].stringValue, plg_id: item["plg_id"].intValue, nib: item["nib"].stringValue, cust_name: item["cust_name"].stringValue, eqp_name: item["eqp_name"].stringValue, merk: item["merk"].stringValue, model: item["model"].stringValue, brand: item["brand"].stringValue, peringatan_pertama: item["peringatan_pertama"].string, peringatan_kedua: item["peringatan_kedua"].string, peringatan_ketiga: item["peringatan_ketiga"].string, cetak_st1: item["cetak_st1"].stringValue, cetak_st2: item["cetak_st2"].stringValue, cetak_spt: item["cetak_spt"].stringValue ) dataList.append(sertBlmUpload) } self.setDataList(dataList: dataList) } else { if cursor > 0 { self.setDataList(dataList: dataList) } else { self.showNoData() } } } else { self.showNoData() } } else { self.showNoData() } } else { self.showNoData() } } } func downloadFile(urlWeb: String, filename: String) { self.view?.showLoading() siraniApiServices.downloadFile(urlWeb: urlWeb, filename: filename).responseData { response in debugPrint(response) if let urlFile = response.fileURL { self.onDownloadSuccess(urlFile: urlFile) } else { self.onDownloadFailed() } } } func loadUploadDetail(aplikasiId: Int) { self.view?.hideNoDataLayout() self.view?.showLoading() siraniApiServices.postToGetSurtifikatBelumUploadDetail(apl_id: aplikasiId).responseJSON { response in if response.error == nil { guard let data = response.data else { return } if let json = try? JSON(data: data) { let detail = SertifikatBelumUploadDetail( apl_id: json["apl_id"].intValue, nomor: json["nomor"].stringValue, tgl: json["tgl"].stringValue, exp: json["exp"].stringValue, plg_id: json["plg_id"].intValue, nib: json["nib"].stringValue, cust_name: json["cust_name"].stringValue, eqp_name: json["eqp_name"].stringValue, merk: json["merk"].stringValue, model: json["model"].stringValue, brand: json["brand"].stringValue ) self.setModalUploadDetail(sertifikatBelumUploadDetail: detail) } } } } func uploadSertifikasi(plgId: Int, aplId: Int, qrCodeFileURL: URL, keteranganFileURL: URL, peringatanFileURL: URL, qrCodeFilename: String, keteranganFilename: String, peringatanFilename: String) { self.view?.showLoading() let qrCodeStrings = qrCodeFilename.split(separator: ".") let keteranganStrings = keteranganFilename.split(separator: ".") let peringatanStrings = peringatanFilename.split(separator: ".") let qrCodeFileType = qrCodeStrings[1] let keteranganFileType = keteranganStrings[1] let peringatanFileType = peringatanStrings[1] let qrCodeExt = String(qrCodeFileType).lowercased() let keteranganExt = String(keteranganFileType).lowercased() let peringatanExt = String(peringatanFileType).lowercased() siraniApiServices.uploadSertifikasi(plgId: String(plgId), aplId: String(aplId), qrCodeFileURL: qrCodeFileURL, keteranganFileURL: keteranganFileURL, peringatanFileURL: peringatanFileURL, qrCodeExt: qrCodeExt, keteranganExt: keteranganExt, peringatanExt: peringatanExt) .responseJSON { response in if response.error == nil { guard let data = response.data else { return } if let json = try? JSON(data: data) { debugPrint(json) let success = json["success"].stringValue if success == "true" { self.onUploadSuccess() } else { self.onUploadFailed() } } else { self.onUploadFailed() } } else { self.onUploadFailed() } } } // other functions private func setDataList(dataList: [SertifikatBelumUpload]) { self.view?.setDataList(dataList: dataList) DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { self.view?.hideLoading() } } private func showNoData() { DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.view?.showNoDataLayout() self.view?.hideLoading() } } private func onDownloadSuccess(urlFile: URL) { DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.view?.onDownloadSuccess(urlFile: urlFile) self.view?.hideLoading() } } private func onDownloadFailed() { DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.view?.onDownloadFailed() self.view?.hideLoading() } } private func setModalUploadDetail(sertifikatBelumUploadDetail: SertifikatBelumUploadDetail) { self.view?.setModalUploadDetail(sertifikatBelumUploadDetail: sertifikatBelumUploadDetail) DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { self.view?.hideLoading() } } private func onUploadSuccess() { self.view?.hideLoading() DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { self.view?.onUploadSuccess() } } private func onUploadFailed() { self.view?.hideLoading() DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { self.view?.onUploadFailed() } } }