Ci dessous le le manager de mes objets Realm :
class ProdListManager {
private static var s_instance: ProdListManager? = nil
public static var shared: ProdListManager? {
if s_instance == nil {
s_instance = ProdListManager()
}
return s_instance!
}
private let _realmProd: Realm
public var _FAM: String = ""
public var _SOUSFAM: String = ""
public let _famProdList: Results<FamProdData>
public var _sousFamProdList: Results<FamProdData>
public var _prodList: Results<ProdData>
private init() {
_realmProd = try! Realm()
_famProdList = _realmProd.objects(FamProdData.self).filter("SousFamille == null AND Tfamille == 2") // Affichage des familles des PRODUITS
_sousFamProdList = _realmPrestaProd.objects(FamPrestaProdData.self).filter("Tfamille == 2 AND Famille == '\(_FAM)' AND SousFamille != null") // Results = tri de la famille sélectionnée pour affichage des sous-familles des PRODUITS
_prodList = _realmProd.objects(ProdData.self).filter("Tfamille == 2 AND Famille == '\(_FAM)' AND SousFamille == '\(_SOUSFAM)'") // Results = tri de la famille et de la sous-famille sélectionnée pour affichage des PRODUITS
}
// -------- Retourne l'information PRODUITS en fonction de l'index --------
public func getProdData(atIndex index: Int) -> ProdData? {
guard index >= 0 && index < getProdCount() else {
return nil
}
return _prodList[index]
}
Fonction de la TableView qui déclenche la requête :
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath as IndexPath, animated: true)
if let selectedProd = _prodManager?.getProdData(atIndex: indexPath.row), let userParams = _userParameters?.CodeU {
let dateDay = Func().getDateDayForPost()
let setParameters = PostTicket()
setParameters.NEXT_NTIC_Parameters["DateD"] = dateDay // Chargement des paramètres NEXT_NTIC pour obtenir le numéro du prochain ticket dans la DB distante
setParameters.ADDLIG_Parameters["Nart"] = "\(selectedArticle.Nart)"
setParameters.ADDLIG_Parameters["Nfamille"] = "\(selectedArticle.Nfamille)"
setParameters.ADDLIG_Parameters["Famille"] = "\(selectedArticle.Famille!)"
setParameters.ADDLIG_Parameters["SousFamille"] = "\(selectedArticle.SousFamille!)"
setParameters.ADDLIG_Parameters["Tfamille"] = "\(selectedArticle.Tfamille)"
setParameters.ADDLIG_Parameters["EAN13"] = "\(selectedArticle.EAN13)"
setParameters.ADDLIG_Parameters["EAN13FOU"] = "\(selectedArticle.EAN13FOU)"
setParameters.ADDLIG_Parameters["MtE"] = "\(selectedArticle.MtuE!)"
setParameters.ADDLIG_Parameters["Tva"] = "\(selectedArticle.Tva)"
setParameters.ADDLIG_Parameters["CodeU"] = "\(userParams)"
setParameters.postNewTicket()
}
}
Classe de la requête Alamofire utilisant le pod ‘CodableAlamofire’:
class PostTicket {
private struct NEXT_NTIC_JSON: Decodable {
var success: Bool
var Ntic: Int
private enum CodingKeys: String, CodingKey {
case success
case Ntic
}
}
private struct ADDLIG_JSON: Decodable {
var success: Bool
var Ntic: String
private enum CodingKeys: String, CodingKey {
case success
case Ntic
}
}
var NEXT_NTIC_Parameters: Parameters = [
"Mode" : "NEXT_NTIC_RESA",
"Ntic" : " ",
"IndividuId" : "1", // valeur = 1 quand création ticket
"DateD" : " "
]
var ADDLIG_Parameters: Parameters = [
"Mode" : "ADDLIG",
"Ntic" : " ",
"Nart" : " ",
"Nfamille" : " ",
"Famille" : " ",
"SousFamille" : " ",
"Tfamille" : " ",
"EAN13" : " ",
"EAN13FOU" : " ",
"Qte" : "1",
"MtrE" : " ",
"MtE" : " ",
"Tva" : " ",
"CodeU" : " "
]*/
func postNewTicket() {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .secondsSince1970
// 1ère requête pour récupéré le numéro du prochain ticket créé dans la base de donnée distante
Alamofire.request(https://www.xxx.xxx/xxx.php?, method: .post, parameters: NEXT_NTIC_Parameters).responseDecodableObject(decoder: decoder)
{ (response: DataResponse<NEXT_NTIC_JSON>) in
if let NEXT_NTIC_response = response.result.value {
if NEXT_NTIC_response.success == true {
print("NEXT NTIC success = true")
self.ADDLIG_Parameters["Ntic"] = NEXT_NTIC_response.Ntic
// 2ème requête pour ajouté la ligne au ticket créé dans la base de donnée distante
Alamofire.request(https://www.xxx.xxx/xxx.php?, method: .post, parameters: ADDLIG_Parameters).responseDecodableObject(decoder: decoder)
{ (response: DataResponse<AJOLIG_JSON>) in
if let ADDLIG_response = response.result.value {
if ADDLIG_response.success == true {
print("ADDLIG success = true")
let _proxyTicket = ProxyTicket()
_proxyTickets.parametersSelectedTicket["Ntic"] = ADDLIG_response.Ntic
_proxyTickets.getSelectedTicket()
}
}
}
}
}
}
}
}
Désolé @mbritto ça fait beaucoup de code et encore j’en est vidangé …