import 'dart:io'; import 'package:car_provider_app/repositories/branch_repo.dart'; import 'package:mc_common_app/models/m_response.dart'; import 'package:mc_common_app/models/model/branch2.dart'; import 'package:mc_common_app/models/profile/categroy.dart'; import 'package:mc_common_app/models/profile/document.dart'; import 'package:mc_common_app/models/profile/services.dart'; import 'package:mc_common_app/models/user/cities.dart'; import 'package:mc_common_app/models/user/country.dart'; import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/services/common_services.dart'; import 'package:mc_common_app/utils/enums.dart'; import 'package:mc_common_app/utils/utils.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import 'package:mc_common_app/widgets/dropdown/dropdow_field.dart'; import 'package:file_picker/file_picker.dart'; class ServiceVM extends BaseVM { final BranchRepo branchRepo; final CommonAppServices commonServices; final CommonRepo commonRepo; ServiceVM({required this.branchRepo, required this.commonServices, required this.commonRepo}); //Documents & Branches Document? document; Branch2? branchs; Country? country; Cities? cities; DropValue? countryValue; DropValue? cityValue; List countryDropList = []; List citiesDropList = []; double latitude = 0, longitude = 0; int role = -1, countryId = -1, cityId = -1; String countryCode = "", address = "", branchName = "", branchDescription = ""; getServiceProviderDocument(int providerId) async { setState(ViewState.busy); document = await branchRepo.getServiceProviderDocument(providerId); setState(ViewState.idle); } selectFile(int index) async { File? file = await commonServices.pickFile(fileType: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg']); if (file != null) { int sizeInBytes = file.lengthSync(); // double sizeInMb = sizeInBytes / (1024 * 1024); if (sizeInBytes > 1000) { Utils.showToast("File is larger then 1KB"); } else { document!.data![index].document = Utils.convertFileToBase64(file); document!.data![index].fileExt = Utils.checkFileExt(file.path); document!.data![index].documentUrl = file.path; setState(ViewState.idle); } } else { // User canceled the picker } } Future updateDocument(List? data) async { return await branchRepo.serviceProviderDocumentsUpdate(data); } //Create new branch getBranchAndServices() async { setState(ViewState.busy); branchs = await branchRepo.getBranchAndServices(); setState(ViewState.idle); } getAllCountriesList(ServiceProviderBranch? branchData, String countryCode) async { setState(ViewState.busy); resetValues(); country = await commonRepo.getAllCountries(); country!.data?.forEach((element) { if (branchData != null) if (branchData.id != null) { if (element.id == branchData.countryID) { countryValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? ""); } } countryDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.countryNameN ?? "") : (element.countryName ?? ""), element.countryCode ?? "")); }); if (branchData != null) if (branchData.id != null) getAllCities(branchData, countryCode); setState(ViewState.idle); } getAllCities(ServiceProviderBranch? branchData, String countryCode) async { setState(ViewState.busy); citiesDropList.clear(); cities = null; cityId = -1; cities = await commonRepo.getAllCites(countryId.toString()); cities!.data?.forEach((element) { if (branchData != null && branchData.id != null) { if (element.id == branchData.cityId) { address = branchData.address!; branchName = branchData.branchName!; branchDescription = branchData.branchDescription!; latitude = double.parse(branchData.latitude ?? ""); longitude = double.parse(branchData.longitude ?? ""); countryId = branchData.countryID!; cityId = branchData.cityId!; cityValue = DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? ""); } } citiesDropList.add(DropValue(element.id ?? 0, countryCode == "SA" ? (element.cityNameN ?? "") : (element.cityName ?? ""), element.id.toString() ?? "")); }); setState(ViewState.idle); } Future createBranch(String branchName, String branchDescription, String cityId, String address, String latitude, String longitude) async { return await branchRepo.createBranch(branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); } Future updateBranch(int id, String branchName, String branchDescription, String cityId, String address, String latitude, String longitude, {bool isNeedToDelete = true}) async { return await branchRepo.updateBranch(id ?? 0, branchName, branchDescription, cityId.toString(), address, latitude.toString(), longitude.toString()); } resetValues() { countryCode = ""; address = ""; branchName = ""; branchDescription = ""; latitude = 0; longitude = 0; role = -1; countryId = -1; cityId = -1; countryDropList.clear(); countryId = -1; cityId = -1; cities = null; categoryDropList = []; servicesDropList = []; services = null; } //Create Services Services? services; List categoryDropList = []; List servicesDropList = []; fetchBranchCategory(String countryCode) async { categoryDropList.clear(); servicesDropList = []; services = null; setState(ViewState.busy); Category? category = await branchRepo.fetchBranchCategory(); category.data?.forEach((element) { categoryDropList.add(DropValue( element.id ?? 0, ((element.categoryName!.isEmpty ? "N/A" : countryCode == "SA" ? element.categoryNameN : element.categoryName) ?? "N/A"), "")); }); setState(ViewState.idle); } fetchServicesByCategoryId(String categoryId) async { servicesDropList = []; setState(ViewState.busy); services = await branchRepo.fetchServicesByCategoryId(categoryId); for (var element in services!.data!) { servicesDropList.add(DropValue(element.id ?? 0, element.description ?? "N/aA", "")); } setState(ViewState.idle); } Future createService(List> map) async { return await branchRepo.createService(map); } Future updateServices(List> map) async { return await branchRepo.updateService(map); } }