469 lines
15 KiB
Dart
469 lines
15 KiB
Dart
/*
|
|
This is api provider
|
|
This page is used to get data from API
|
|
*/
|
|
|
|
import 'package:mobdr/config/constant.dart';
|
|
import 'package:mobdr/main.dart';
|
|
import 'package:mobdr/service/shared_prefs.dart';
|
|
import 'package:dio/dio.dart';
|
|
import 'dart:convert';
|
|
import 'package:crypto/crypto.dart';
|
|
|
|
class ApiProvider {
|
|
Dio dio = Dio();
|
|
late Response response;
|
|
late Response response2;
|
|
String connErr = 'Please check your internet connection and try again';
|
|
|
|
Future<Response> getCrud(url, body) async {
|
|
print('url : ' + url.toString());
|
|
try {
|
|
dio.options.headers['content-Type'] = 'application/json';
|
|
dio.options.headers['Accept'] = 'application/json';
|
|
dio.options.headers['Cookie'] = "pguid=${SharedPrefs().guid}";
|
|
|
|
dio.options.connectTimeout = Duration(seconds: 5);
|
|
dio.options.receiveTimeout = Duration(seconds: 4);
|
|
|
|
if (body != null) {
|
|
dio.options.queryParameters = body;
|
|
}
|
|
|
|
return await dio.get(url);
|
|
} on DioError catch (e) {
|
|
//print(e.toString()+' | '+url.toString());
|
|
if (e.type == DioErrorType.badResponse) {
|
|
int? statusCode = e.response!.statusCode;
|
|
if (statusCode == STATUS_NOT_FOUND) {
|
|
throw "Api not found";
|
|
} else if (statusCode == STATUS_INTERNAL_ERROR) {
|
|
throw "Internal Server Error";
|
|
} else {
|
|
throw e.error.toString();
|
|
}
|
|
} else if (e.type == DioErrorType.connectionTimeout) {
|
|
throw e.message.toString();
|
|
} else if (e.type == DioErrorType.cancel) {
|
|
throw 'cancel';
|
|
}
|
|
throw connErr;
|
|
} finally {
|
|
//dio.close(); // TODO: Attention pas close
|
|
}
|
|
}
|
|
|
|
Future<Response> getConnect(url, apiToken) async {
|
|
print('url : ' + url.toString());
|
|
try {
|
|
dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded';
|
|
dio.options.connectTimeout = Duration(seconds: 5);
|
|
dio.options.receiveTimeout = Duration(seconds: 4);
|
|
|
|
return await dio.post(url, cancelToken: apiToken);
|
|
} on DioError catch (e) {
|
|
//print(e.toString()+' | '+url.toString());
|
|
if (e.type == DioErrorType.badResponse) {
|
|
int? statusCode = e.response!.statusCode;
|
|
if (statusCode == STATUS_NOT_FOUND) {
|
|
throw "Api not found";
|
|
} else if (statusCode == STATUS_INTERNAL_ERROR) {
|
|
throw "Internal Server Error";
|
|
} else {
|
|
throw e.error.toString();
|
|
}
|
|
} else if (e.type == DioErrorType.connectionTimeout) {
|
|
throw e.message.toString();
|
|
} else if (e.type == DioErrorType.cancel) {
|
|
throw 'cancel';
|
|
}
|
|
throw connErr;
|
|
} finally {
|
|
//dio.close(); // TODO: Attention pas close
|
|
}
|
|
}
|
|
|
|
Future<Response> postConnect(url, data, apiToken) async {
|
|
print('url : ' + url.toString());
|
|
print('postData : ' + data.toString());
|
|
try {
|
|
dio.options.headers['content-Type'] = 'application/x-www-form-urlencoded';
|
|
dio.options.connectTimeout = Duration(seconds: 5);
|
|
dio.options.receiveTimeout = Duration(seconds: 4);
|
|
|
|
return await dio.post(url, data: data, cancelToken: apiToken);
|
|
} on DioError catch (e) {
|
|
//print(e.toString()+' | '+url.toString());
|
|
if (e.type == DioErrorType.badResponse) {
|
|
int? statusCode = e.response!.statusCode;
|
|
if (statusCode == STATUS_NOT_FOUND) {
|
|
throw "Api not found";
|
|
} else if (statusCode == STATUS_INTERNAL_ERROR) {
|
|
throw "Internal Server Error";
|
|
} else {
|
|
throw e.error.toString();
|
|
}
|
|
} else if (e.type == DioErrorType.connectionTimeout) {
|
|
throw e.message.toString();
|
|
} else if (e.type == DioErrorType.cancel) {
|
|
throw 'cancel';
|
|
}
|
|
throw connErr;
|
|
} finally {
|
|
//dio.close(); // TODO: Attention pas close
|
|
}
|
|
}
|
|
|
|
/// login function
|
|
Future<String> login(
|
|
String userName, String pinCode, String securityCode) async {
|
|
var body = {
|
|
"application": "MobDR ", //+ ExeInfo(exeVersion)
|
|
"pin_code": md5.convert(utf8.encode(pinCode)),
|
|
"security_code": securityCode, //sCodeSecurite
|
|
"langage": "fr",
|
|
"screenheight": "0", //SysYRes()
|
|
"screenwidth": "0", //SysXRes()
|
|
"browser_name": "Natif",
|
|
"browser_version": "Application",
|
|
"engine_name": "Android",
|
|
"device_model": "",
|
|
"device_type": "mobile", //SysInfoAppareil(sysModele) WDM 23
|
|
"device_vendor": "", //SysInfoAppareil(sysFabricant) WDM 23
|
|
"ismobile": 1,
|
|
"engine_version": "", // SysVersionAndroid(sysVersionApiLevel)
|
|
"os_name": "", // SysVersionAndroid(sysVersionPlateForme)
|
|
"os_version": "", //SysVersionAndroid(sysVersionNumÈro)
|
|
"fingerprint":
|
|
"aa" // TODO: on peut mettre un fingerprint sur la version ou sur l'heure
|
|
};
|
|
|
|
try {
|
|
response = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.mp4Endpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/login/' +
|
|
userName +
|
|
'/guid',
|
|
body);
|
|
|
|
print('res : ' + response.toString());
|
|
|
|
switch (response.data['autorisation']) {
|
|
case 1:
|
|
|
|
/// save user data
|
|
SharedPrefs().id_utilisateur = response.data['id_utilisateur'];
|
|
SharedPrefs().email = response.data['email'];
|
|
SharedPrefs().expire = response.data['expire'];
|
|
SharedPrefs().guid = response.data['guid'];
|
|
SharedPrefs().langage = response.data['langage'];
|
|
SharedPrefs().last_traduction = response.data['last_traduction'];
|
|
SharedPrefs().login = response.data['login'];
|
|
SharedPrefs().nom = response.data['nom'];
|
|
SharedPrefs().prenom = response.data['prenom'];
|
|
SharedPrefs().version = response.data['version'];
|
|
SharedPrefs().photo = response.data['photo'];
|
|
|
|
/// get image from url
|
|
Response ReponseImg =
|
|
await dio.get(ApiConstants.baseUrl + response.data['photo'],
|
|
options: Options(
|
|
responseType: ResponseType.bytes,
|
|
contentType: 'application/octet-stream',
|
|
));
|
|
|
|
/// convert bytes to base64 string
|
|
String base64Photo = base64.encode(ReponseImg.data);
|
|
|
|
/// create box user
|
|
objectbox.addUSer(
|
|
response.data['id_utilisateur'],
|
|
response.data['login'],
|
|
response.data['nom'],
|
|
response.data['prenom'],
|
|
base64Photo);
|
|
|
|
return 'OK';
|
|
case -1:
|
|
return 'Compte désactivé ...';
|
|
case -2:
|
|
return 'SECURITY_CODE';
|
|
case -3:
|
|
return 'Téléphone bloqué !';
|
|
case -4:
|
|
return 'Code PIN incorrect !';
|
|
default:
|
|
return "Une erreur inconnue s''est produite";
|
|
}
|
|
} catch (ex) {
|
|
return ex.toString(); // return ex.response!.data;
|
|
}
|
|
}
|
|
|
|
/// Synchronize "stores & competing stores"
|
|
Future<String> SyncEtablissements() async {
|
|
try {
|
|
/// get "Etablissement" list
|
|
response = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.externalEndpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/mobDR/etablissement',
|
|
null);
|
|
|
|
/// get "concurrent" list
|
|
response2 = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.externalEndpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/mobDR/etablissement/concurrent',
|
|
null);
|
|
|
|
//await new Future.delayed(const Duration(seconds: 5));
|
|
|
|
if (response.statusCode == STATUS_OK) {
|
|
/// fill box "etab"
|
|
objectbox.addEtabs(response.data['boutiques']);
|
|
}
|
|
|
|
if (response2.statusCode == STATUS_OK) {
|
|
/// fill box "concurrence"
|
|
objectbox.addConcurrents(response2.data['concurrents']);
|
|
}
|
|
|
|
/// all ok
|
|
if (response.statusCode == STATUS_OK &&
|
|
response2.statusCode == STATUS_OK) {
|
|
return 'OK';
|
|
} else {
|
|
return response.statusMessage ?? 'Unknow error ...';
|
|
}
|
|
} catch (ex) {
|
|
return ex.toString(); // return ex.response!.data;
|
|
}
|
|
}
|
|
|
|
/// Synchronize "visites"
|
|
Future<String> SyncVisites() async {
|
|
try {
|
|
var body = null;
|
|
|
|
/// get "Visite list"
|
|
response = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.externalEndpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/mobDR/visite/calendrier',
|
|
{"id_utilisateur": 6, "start": 20230101, "end": 20230131});
|
|
|
|
/// get "Visite tags" list
|
|
response2 = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.externalEndpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/mobDR/visite/tag',
|
|
body);
|
|
|
|
//await new Future.delayed(const Duration(seconds: 5));
|
|
|
|
if (response.statusCode == STATUS_OK) {
|
|
/// fill box "visite"
|
|
objectbox.addVisites(response.data['events']);
|
|
}
|
|
|
|
if (response2.statusCode == STATUS_OK) {
|
|
/// fill box "visiteTag"
|
|
objectbox.addVisiteTags(response2.data['tags']);
|
|
}
|
|
|
|
/// all ok
|
|
if (response.statusCode == STATUS_OK &&
|
|
response2.statusCode == STATUS_OK) {
|
|
return 'OK';
|
|
} else {
|
|
return response.statusMessage ?? 'Unknow error ...';
|
|
}
|
|
} catch (ex) {
|
|
return ex.toString(); // return ex.response!.data;
|
|
}
|
|
}
|
|
|
|
/// Synchronize "Photos"
|
|
Future<String> SyncPhotos() async {
|
|
try {
|
|
/// get "Photo typologies"
|
|
response = await getCrud(
|
|
ApiConstants.baseUrl +
|
|
ApiConstants.externalEndpoint +
|
|
ApiConstants.restEndpoint +
|
|
'/mobDR/visite/typologie',
|
|
null);
|
|
|
|
if (response.statusCode == STATUS_OK) {
|
|
/// fill box "Photo typologies"
|
|
objectbox.addPhotoTypologies(response.data['typologies']);
|
|
}
|
|
|
|
/// all ok
|
|
if (response.statusCode == STATUS_OK) {
|
|
return 'OK';
|
|
} else {
|
|
return response.statusMessage ?? 'Unknow error ...';
|
|
}
|
|
} catch (ex) {
|
|
return ex.toString(); // return ex.response!.data;
|
|
}
|
|
}
|
|
|
|
Future<String> getExample(apiToken) async {
|
|
response =
|
|
await getConnect(ApiConstants.baseUrl + '/example/getData', apiToken);
|
|
print('res : ' + response.toString());
|
|
return response.data.toString();
|
|
}
|
|
|
|
Future<String> postExample(String id, apiToken) async {
|
|
var postData = {'id': id};
|
|
response = await postConnect(
|
|
ApiConstants.baseUrl + '/example/postData', postData, apiToken);
|
|
print('res : ' + response.toString());
|
|
return response.data.toString();
|
|
}
|
|
/*
|
|
Future<List<StudentModel>> getStudent(String sessionId, apiToken) async {
|
|
var postData = {'session_id': sessionId};
|
|
response = await postConnect(
|
|
ApiConstants.baseUrl + '/student/getStudent', postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
List responseList = response.data['data'];
|
|
List<StudentModel> listData =
|
|
responseList.map((f) => StudentModel.fromJson(f)).toList();
|
|
return listData;
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
*/
|
|
|
|
Future<List<dynamic>> addStudent(
|
|
String sessionId,
|
|
String studentName,
|
|
String studentPhoneNumber,
|
|
String studentGender,
|
|
String studentAddress,
|
|
apiToken) async {
|
|
var postData = {
|
|
'session_id': sessionId,
|
|
'student_name': studentName,
|
|
'student_phone_number': studentPhoneNumber,
|
|
'student_gender': studentGender,
|
|
'student_address': studentAddress,
|
|
};
|
|
response = await postConnect(
|
|
ApiConstants.baseUrl + '/student/addStudent', postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
List<dynamic> respList = [];
|
|
respList.add(response.data['msg']);
|
|
respList.add(response.data['data']['id']);
|
|
return respList;
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
|
|
Future<String> editStudent(
|
|
String sessionId,
|
|
int studentId,
|
|
String studentName,
|
|
String studentPhoneNumber,
|
|
String studentGender,
|
|
String studentAddress,
|
|
apiToken) async {
|
|
var postData = {
|
|
'session_id': sessionId,
|
|
'student_id': studentId,
|
|
'student_name': studentName,
|
|
'student_phone_number': studentPhoneNumber,
|
|
'student_gender': studentGender,
|
|
'student_address': studentAddress,
|
|
};
|
|
response = await postConnect(
|
|
ApiConstants.baseUrl + '/student/editStudent', postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
return response.data['msg'];
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
|
|
Future<String> deleteStudent(
|
|
String sessionId, int studentId, apiToken) async {
|
|
var postData = {
|
|
'session_id': sessionId,
|
|
'student_id': studentId,
|
|
};
|
|
response = await postConnect(
|
|
ApiConstants.baseUrl + '/student/deleteStudent', postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
return response.data['msg'];
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
|
|
/*
|
|
Future<List<LoginModel>> login2(
|
|
String email, String password, apiToken) async {
|
|
var postData = {
|
|
'email': email,
|
|
'password': password,
|
|
};
|
|
response = await postConnect(LOGIN_API, postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
List responseList = response.data['data'];
|
|
List<LoginModel> listData =
|
|
responseList.map((f) => LoginModel.fromJson(f)).toList();
|
|
return listData;
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
*/
|
|
|
|
/*
|
|
Future<List<ProductGridModel>> getProductGrid(
|
|
String sessionId, String skip, String limit, apiToken) async {
|
|
var postData = {'session_id': sessionId, 'skip': skip, 'limit': limit};
|
|
response = await postConnect(PRODUCT_API, postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
List responseList = response.data['data'];
|
|
//print('data : '+responseList.toString());
|
|
List<ProductGridModel> listData =
|
|
responseList.map((f) => ProductGridModel.fromJson(f)).toList();
|
|
return listData;
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
*/
|
|
|
|
/*
|
|
Future<List<ProductListviewModel>> getProductListview(
|
|
String sessionId, String skip, String limit, apiToken) async {
|
|
var postData = {'session_id': sessionId, 'skip': skip, 'limit': limit};
|
|
response = await postConnect(PRODUCT_API, postData, apiToken);
|
|
if (response.data['status'] == STATUS_OK) {
|
|
List responseList = response.data['data'];
|
|
//print('data : '+responseList.toString());
|
|
List<ProductListviewModel> listData =
|
|
responseList.map((f) => ProductListviewModel.fromJson(f)).toList();
|
|
return listData;
|
|
} else {
|
|
throw response.data['msg'];
|
|
}
|
|
}
|
|
*/
|
|
}
|