You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/modules/asset_tracking/asset_tracking_provider.dart

252 lines
8.4 KiB
Dart

import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:test_sa/controllers/api_routes/api_manager.dart';
import 'package:test_sa/controllers/api_routes/urls.dart';
import 'package:test_sa/modules/asset_tracking/models/coordinates_model.dart';
import 'models/asset_tracking_model.dart';
import 'models/floor_map_model.dart';
import 'models/penguin_site_model.dart';
import 'models/zone_data_model.dart';
class AssetTrackingProvider extends ChangeNotifier {
bool isLoading = false;
bool isNextPageLoading = false;
final pageItemNumber = 12;
int pageNo = 1;
List<AssetTrackingModel> assetsList = [];
List<AssetTrackingModel> assetsOnTheFloorList = [];
List<ZoneModel> zonesList = [];
ZoneModel? selectedZone;
List<PenguinSiteModel> sitesList = [];
PenguinSiteModel? selectedSite;
List<PenguinSiteModel> buildList = [];
PenguinSiteModel? selectedBuilding;
List<PenguinSiteModel> floorList = [];
PenguinSiteModel? selectedFloor;
List<Coordinates> coordinates = [];
void calculateCoordinates() {
coordinates.clear();
coordinates.addAll(selectedBuilding!.coordinates!.map((e) => Coordinates(latitude: e.latitude, longitude: e.longitude)).toList());
notify();
}
// List<ZoneModel> getFilteredZones() {
// if (zonesList.isEmpty || selectedSite == null || selectedBuilding == null) {
// return [];
// } else {
// return zonesList.where((zone) => zone.siteId == selectedSite!.id).toList();
// }
// }
String get getExpansionHeader =>
(selectedBuilding == null || selectedBuilding == null) ? "Search Floor Map" : "${selectedSite!.label} > ${selectedBuilding!.label} > ${selectedFloor?.label ?? "Select Floor"}";
reset() {
isLoading = false;
selectedFloor = null;
selectedBuilding = null;
selectedSite = null;
assetsList = [];
assetsOnTheFloorList = [];
notify();
}
notify() {
notifyListeners();
}
Future<int> getAssetsFromPenguin({bool loadMore = false}) async {
if (isLoading || isNextPageLoading) return -2;
if (loadMore) {
isNextPageLoading = true;
pageNo += 1;
} else {
isLoading = true;
pageNo = 1; // reset pagination
}
notifyListeners();
try {
final payload = {"pageSize": pageItemNumber, "pageNumber": pageNo};
final response = await ApiManager.instance.post(URLs.getAssetsFromPenguin, body: payload);
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
assetsList.addAll(list.map((item) => AssetTrackingModel.fromJson(item)).toList());
if (jsonData["totalRows"] <= assetsList.length) {
// nextPage = true;
}
// if (loadMore) {
// assetInventoryResponse?.assetList?.addAll(newResponse.assetList ?? []);
// assetInventoryResponse?.totalRows = newResponse.totalRows;
// } else {
// assetInventoryResponse = newResponse;
// }
// nextPage = (assetInventoryResponse?.assetList?.length ?? 0) < (assetInventoryResponse?.totalRows ?? 0);
} else {
// nextPage = false;
}
isLoading = false;
isNextPageLoading = false;
notifyListeners();
return response.statusCode;
} catch (error) {
isLoading = false;
isNextPageLoading = false;
// stateCode = -1;
// nextPage = false;
notifyListeners();
return -1;
}
}
Future getBuildingMapFromPenguin() async {
if (zonesList.isNotEmpty) {
await Future.delayed(const Duration(milliseconds: 250));
// return;
}
try {
final response = await ApiManager.instance.get(URLs.getPenguinBuildings + "");
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
zonesList.addAll(list.map((item) => ZoneModel.fromJson(item)).toList());
notify();
}
} catch (error) {
print("getZoneFromPenguin:Error:$error");
}
}
Future getZoneFromPenguin() async {
if (zonesList.isNotEmpty) {
await Future.delayed(const Duration(milliseconds: 250));
return;
}
try {
final response = await ApiManager.instance.get(URLs.getPenguinZones);
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
zonesList.addAll(list.map((item) => ZoneModel.fromJson(item)).toList());
notify();
}
} catch (error) {
print("getZoneFromPenguin:Error:$error");
}
}
Future getAssetsFromPenguinByFloor() async {
try {
assetsOnTheFloorList.clear();
Map<String, dynamic> body = {
"campusId": selectedSite!.id,
"venueIds": [selectedBuilding!.id]
};
if (selectedFloor != null) {
body["floorIds"] = [selectedFloor!.id];
}
final response = await ApiManager.instance.post(URLs.getAssetsFromPenguin, body: body);
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
assetsOnTheFloorList.addAll(list.map((item) => AssetTrackingModel.fromJson(item)).toList());
}
notifyListeners();
} catch (error) {
notifyListeners();
}
}
Future<FloorMapModel?> getFloorMap(int floorId) async {
FloorMapModel? floorMapModel;
try {
final response = await ApiManager.instance.get(URLs.getPenguinFloors + "/$floorId/maps");
if (response.statusCode >= 200 && response.statusCode < 300) {
floorMapModel = FloorMapModel.fromJson(json.decode(response.body)["data"]);
final geoJsonResponse = await ApiManager.instance.get(floorMapModel.geojsonUrl!);
floorMapModel.geojsonData = json.decode(geoJsonResponse.body);
}
return floorMapModel;
} catch (error) {
return floorMapModel;
}
}
Future getPenguinSites() async {
try {
sitesList.clear();
buildList.clear();
floorList.clear();
selectedSite = null;
selectedBuilding = null;
selectedFloor = null;
final response = await ApiManager.instance.get(URLs.getPenguinSites);
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
sitesList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList());
}
notifyListeners();
} catch (error) {
notifyListeners();
}
}
Future<List<PenguinSiteModel>> getPenguinDepartments(int id) async {
List<PenguinSiteModel> sitesList = [];
try {
final response = await ApiManager.instance.get(URLs.getPenguinDepartments + "?siteId=$id");
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
sitesList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList());
}
return sitesList;
} catch (error) {
return sitesList;
}
}
Future getPenguinBuildings(int id) async {
try {
buildList.clear();
floorList.clear();
selectedBuilding = null;
selectedFloor = null;
final response = await ApiManager.instance.get(URLs.getPenguinBuildings + "?siteId=$id");
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
buildList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList());
}
notifyListeners();
} catch (error) {
notifyListeners();
}
}
Future getPenguinFloors(int id) async {
try {
floorList.clear();
selectedFloor = null;
final response = await ApiManager.instance.get(URLs.getPenguinFloors + "?buildingId=$id");
if (response.statusCode >= 200 && response.statusCode < 300) {
final Map<String, dynamic> jsonData = json.decode(response.body);
List list = jsonData["data"];
floorList.addAll(list.map((item) => PenguinSiteModel.fromJson(item)).toList());
}
notifyListeners();
} catch (error) {
notifyListeners();
}
}
}