changed to new apis

merge-requests/18/head
nextwo 3 years ago
parent 42028f14fd
commit 5201f5789e

@ -0,0 +1,27 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/api/api_client.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/department.dart';
class DepartmentsApiClient{
static final DepartmentsApiClient _instance = DepartmentsApiClient._internal();
DepartmentsApiClient._internal();
factory DepartmentsApiClient() => _instance;
Future getDepartment() async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getDepartments,
{},
isFormData: false
);
Map listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
return listJson['data'].map<Department>((department) => Department.fromJson(department)).toList();
}
}

@ -16,9 +16,7 @@ class DeviceTransferApiClient {
Future<List<DeviceTransfer>> getRequests({required List items, required int pageItemNumber}) async { Future<List<DeviceTransfer>> getRequests({required List items, required int pageItemNumber}) async {
Map<String, dynamic> body= { Map<String, dynamic> body= {
"uid": "${UserApiClient().user?.id}", "pageSize": "${(items.length) ~/ pageItemNumber}",
"token": "${UserApiClient().user?.token}",
"page": "${(items.length) ~/ pageItemNumber}",
}; };
final response = await ApiClient().postJsonForResponse( final response = await ApiClient().postJsonForResponse(

@ -16,22 +16,31 @@ class DevicesApiClient {
/// Fetch devices by [hospitalId] and insert the result into [devices] list /// Fetch devices by [hospitalId] and insert the result into [devices] list
Future getEquipment(String hospitalId) async { Future getEquipment(String hospitalId) async {
final response = await ApiClient().getJsonForResponse(URLs.host1 + URLs.getEquipment, queryParameters: {'client': hospitalId});
List equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment,
{'client': hospitalId},
isFormData: false
);
Map equipmentListJson = json.decode(utf8.decode(response.bodyBytes));
print(equipmentListJson);
devices.clear(); devices.clear();
devices.addAll(equipmentListJson.map((device) => Device.fromJson(device)).toList()); devices.addAll(equipmentListJson['data'] != null ? equipmentListJson['data'].map<Device>((device) => Device.fromJson(device)).toList(): []);
debugPrint("devices : ${devices.length}"); debugPrint("devices : ${devices.length}");
} }
/// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number] /// Returns a list of devices by [hospitalId] and [serialNumber] (or | and) [number]
Future<List<Device>> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async { Future<List<Device>> getDevicesList({required String hospitalId, String? serialNumber, String? number}) async {
final response = await ApiClient().getJsonForResponse( final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment, URLs.host1 + URLs.getEquipment,
queryParameters: { {
'client': hospitalId, 'client': hospitalId,
if (serialNumber?.isEmpty == false) 'name': serialNumber, if (serialNumber?.isEmpty == false) 'name': serialNumber,
if (number?.isEmpty == false) 'number': number, if (number?.isEmpty == false) 'number': number,
}, },
isFormData: false
); );
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList(); return categoriesListJson.map((device) => Device.fromJson(device)).toList();
@ -39,12 +48,13 @@ class DevicesApiClient {
/// Returns a list of devices by [hospitalId] (and optionally) [serialNumber] /// Returns a list of devices by [hospitalId] (and optionally) [serialNumber]
Future<List<Device>> getDevicesListBySN({required String hospitalId, required String serialNumber}) async { Future<List<Device>> getDevicesListBySN({required String hospitalId, required String serialNumber}) async {
final response = await ApiClient().getJsonForResponse( final response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getEquipment, URLs.host1 + URLs.getEquipment,
queryParameters: { {
'client': hospitalId, 'client': hospitalId,
if (serialNumber.isNotEmpty) 'serial_qr': serialNumber, if (serialNumber.isNotEmpty) 'serial_qr': serialNumber,
}, },
isFormData: false
); );
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes)); List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
return categoriesListJson.map((device) => Device.fromJson(device)).toList(); return categoriesListJson.map((device) => Device.fromJson(device)).toList();

@ -0,0 +1,53 @@
import 'dart:convert';
import 'package:http/http.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import '../models/hospital.dart';
import 'api_client.dart';
class HospitalsApiClient{
static final HospitalsApiClient _instance = HospitalsApiClient._internal();
HospitalsApiClient._internal();
factory HospitalsApiClient() => _instance;
Future getHospitals({
required String title,
required int pageSize
}) async {
Response response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{
"pageSize": pageSize.toString(),
"name": title,
},
isFormData: false
);
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
print(categoriesListJson);
return categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
}
Future<List<Hospital>> getHospitalsList({
required String title,
}) async {
Response response;
response = await ApiClient().postJsonForResponse(
URLs.host1 + URLs.getHospitals,
{"name" : title},
isFormData: false
);
List<Hospital> page = [];
Map categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson['data'].map<Hospital>((category) => Hospital.fromJson(category)).toList();
return page;
}
}

@ -7,9 +7,9 @@ class URLs {
static const login = "/mobile/MobileAuth/Login"; // post static const login = "/mobile/MobileAuth/Login"; // post
static const register = "/handle/create/user"; // post static const register = "/handle/create/user"; // post
static const updateProfile = "/update/user/profile"; // post static const updateProfile = "/update/user/profile"; // post
static const getHospitals = "/handle/return/all/clients"; // get static const getHospitals = "/mobile/Customer/GetCustomers"; // get
static const getDepartments = "/handle/return/all/departments"; // get static const getDepartments = "/mobile/Department/search"; // get
static const getEquipment = "/handle/return/all/client/equipments"; // get ?client=208051 static const getEquipment = "/mobile/Asset/GetAssets"; // get ?client=208051
static const getServiceRequests = "/return/user/calls"; // get static const getServiceRequests = "/return/user/calls"; // get
static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get static const getPreventiveMaintenanceVisits = "/return/user/calibrations"; // get

@ -2,14 +2,16 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/api/departments_api_client.dart';
import '../../../models/department.dart'; import '../../../models/department.dart';
import '../../api_routes/urls.dart'; import '../../api_routes/urls.dart';
import '../loading_notifier.dart';
class DepartmentsProvider extends ChangeNotifier { class DepartmentsProvider extends LoadingNotifier {
//reset provider data //reset provider data
void reset() { void reset() {
departments = null; departments.clear();
stateCode = null; stateCode = null;
} }
@ -20,44 +22,17 @@ class DepartmentsProvider extends ChangeNotifier {
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Department>? departments; List<Department> departments=[];
// when categories in-process _loading = true Future getDepartment() async {
// done _loading = true
// failed _loading = false
bool? isLoading;
/// return -2 if request in progress waitApiRequest(() async {
/// return -1 if error happen when sending request departments.addAll(await DepartmentsApiClient().getDepartment());
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getDepartment(String host) async {
if (isLoading == true) {
return -2;
}
isLoading = true;
notifyListeners();
Response response;
try {
response = await get(
Uri.parse(host + URLs.getDepartments),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
} catch (error) {
isLoading = false;
stateCode = -1;
notifyListeners(); notifyListeners();
return -1; },
onSuccess: (){
stateCode=200;
} }
stateCode = response.statusCode; );
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List listJson = json.decode(utf8.decode(response.bodyBytes).replaceAll("\\", ""));
departments = listJson.map((department) => Department.fromJson(department)).toList();
}
isLoading = false;
notifyListeners();
return response.statusCode;
} }
} }

@ -35,6 +35,7 @@ class DeviceTransferProvider extends LoadingNotifier {
waitApiRequest(() async { waitApiRequest(() async {
items.clear(); items.clear();
items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber)); items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber));
print(items);
notifyListeners(); notifyListeners();
if (items.length == pageItemNumber) { if (items.length == pageItemNumber) {
nextPage = true; nextPage = true;

@ -3,126 +3,59 @@ import 'dart:convert';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:http/http.dart'; import 'package:http/http.dart';
import 'package:test_sa/api/hospitals_api_client.dart';
import 'package:test_sa/controllers/providers/loading_notifier.dart';
import '../../../models/hospital.dart'; import '../../../models/hospital.dart';
import '../../../models/user.dart'; import '../../../models/user.dart';
import '../../api_routes/urls.dart'; import '../../api_routes/urls.dart';
class HospitalsProvider extends ChangeNotifier { class HospitalsProvider extends LoadingNotifier {
// number of items call in each request // number of items call in each request
final pageItemNumber = 50; final pageItemNumber = 50;
//reset provider data //reset provider data
void reset() { void reset() {
_hospitals = null; _hospitals.clear();
_stateCode = null; _stateCode = null;
} }
// state code of current request to defied error message
// like 400 customer request failed
// 500 service not available
int? _stateCode; int? _stateCode;
int? get stateCode => _stateCode; int? get stateCode => _stateCode;
// true if there is next page in product list and false if not
bool _nextPage = true;
bool get nextPage => _nextPage;
// contain user data // contain user data
// when user not login or register _user = null // when user not login or register _user = null
List<Hospital>? _hospitals; List<Hospital> _hospitals=[];
List<Hospital>? get hospitals => _hospitals;
// when categories in-process _loading = true
// done _loading = true
// failed _loading = false
bool? _loading;
bool? get isLoading => _loading; List<Hospital> get hospitals => _hospitals;
set isLoading(bool? isLoading) {
_loading = isLoading;
notifyListeners();
}
/// return -2 if request in progress Future getHospitals({
/// return -1 if error happen when sending request
/// return state code if request complete may be 200, 404 or 403
/// for more details check http state manager
/// lib\controllers\http_status_manger\http_status_manger.dart
Future<int> getHospitals({
required String host,
required User user,
required String? title, required String? title,
}) async { }) async {
if (_loading == true) { waitApiRequest(() async {
return -2; _hospitals = [];
} _hospitals.addAll(await HospitalsApiClient().getHospitals(title: title ?? "", pageSize: _hospitals.length ~/ pageItemNumber));
_loading = true;
notifyListeners();
Response response;
try {
response = await get(
Uri.parse(
"${host + URLs.getHospitals}?page=${(_hospitals?.length ?? 0) ~/ pageItemNumber}${title == null || title.isEmpty ? "" : "&name=$title"}",
),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
_stateCode = response.statusCode;
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
List<Hospital> page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
if (hospitals == null) _hospitals = [];
_hospitals?.addAll(page);
if (page.length >= pageItemNumber) {
_nextPage = true;
} else {
_nextPage = false;
}
}
_loading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners(); notifyListeners();
return -1; },
onSuccess: (){
_stateCode = 200;
} }
);
} }
Future<List<Hospital>> getHospitalsList({ Future<List<Hospital>> getHospitalsList({
required String host,
required User user,
required String title, required String title,
}) async { }) async {
Response response; waitApiRequest((){
try { return HospitalsApiClient().getHospitalsList(title: title);
response = await get( },
Uri.parse( onSuccess: (){
host + URLs.getHospitals + (title.isEmpty ? "" : "?name=$title"), _stateCode=200;
),
headers: {"Content-Type": "application/json; charset=utf-8"},
);
_stateCode = response.statusCode;
List<Hospital> page = [];
if (response.statusCode >= 200 && response.statusCode < 300) {
// client's request was successfully received
List categoriesListJson = json.decode(utf8.decode(response.bodyBytes));
page = categoriesListJson.map((category) => Hospital.fromJson(category)).toList();
} }
return page; );
} catch (error) {
_loading = false;
_stateCode = -1;
notifyListeners();
return []; return [];
} }
} }
}

@ -1,5 +1,5 @@
class Hospital { class Hospital {
String? id; int? id;
String? name; String? name;
Hospital({ Hospital({

@ -35,14 +35,12 @@ class _SingleDepartmentPickerState extends State<SingleDepartmentPicker> {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
body: LoadingManager( body: LoadingManager(
isLoading: _departmentsProvider?.isLoading, isLoading: _departmentsProvider?.loading,
stateCode: _departmentsProvider?.stateCode, stateCode: _departmentsProvider?.stateCode,
isFailedLoading: _departmentsProvider?.departments == null, isFailedLoading: _departmentsProvider?.departments == null,
onRefresh: () async { onRefresh: () async {
_departmentsProvider?.reset(); _departmentsProvider?.reset();
await _departmentsProvider?.getDepartment( await _departmentsProvider?.getDepartment();
_settingProvider?.host ?? "",
);
}, },
child: Column( child: Column(
children: [ children: [

@ -73,7 +73,7 @@ class _HospitalAutoCompleteFieldState extends State<HospitalAutoCompleteField> {
widget.onSearch!(_controller.text); widget.onSearch!(_controller.text);
}), }),
suggestionsCallback: (vale) async { suggestionsCallback: (vale) async {
return await HospitalsProvider().getHospitalsList(host: _settingProvider?.host ?? "", title: vale, user: User()); return await HospitalsProvider().getHospitalsList(title: vale);
}, },
itemBuilder: (context, hospital) { itemBuilder: (context, hospital) {
return HospitalItem( return HospitalItem(

@ -36,12 +36,12 @@ class _SingleHospitalPickerState extends State<SingleHospitalPicker> {
return Scaffold( return Scaffold(
resizeToAvoidBottomInset: false, resizeToAvoidBottomInset: false,
body: LoadingManager( body: LoadingManager(
isLoading: _hospitalsProvider?.isLoading, isLoading: _hospitalsProvider?.loading,
stateCode: _hospitalsProvider?.stateCode, stateCode: _hospitalsProvider?.stateCode,
isFailedLoading: _hospitalsProvider?.hospitals == null, isFailedLoading: _hospitalsProvider?.hospitals == null,
onRefresh: () async { onRefresh: () async {
_hospitalsProvider?.reset(); _hospitalsProvider?.reset();
await _hospitalsProvider?.getHospitals(host: _settingProvider?.host ?? "", user: User(), title: ''); await _hospitalsProvider?.getHospitals(title: '');
}, },
child: Column( child: Column(
children: [ children: [

Loading…
Cancel
Save