// import 'dart:convert'; // 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/provider_model.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/services/branch_model.dart'; // import 'package:mc_common_app/models/services/item_model.dart'; // import 'package:mc_common_app/models/services/service_model.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 // int selectedBranchStatus = 3; // Document? document; // ProviderModel? 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(BranchModel? 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(BranchModel? 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); // } // // updateSelectedBranchType(int status) { // selectedBranchStatus = status; // notifyListeners(); // } // // List? matchedServices; // bool isAllSelected = false; // // getAllMatchedServices(int oldBranchId, int newBranchId, int categoryId) async { // matchedServices = null; // MResponse response = await branchRepo.getMatchedServices(oldBranchId, newBranchId, categoryId); // matchedServices = []; // if (response.messageStatus == 1) { // matchedServices = List.from(response.data.map((x) => ServiceModel.fromJson(x))); // } // notifyListeners(); // } // // selectAllServices(bool value) { // for (var element in matchedServices!) { // element.isExpandedOrSelected = value; // for (var item in element.serviceItems!) { // item.isUpdateOrSelected = value; // } // } // isAllSelected = value; // notifyListeners(); // } // // updateServiceItem(int serviceIndex, bool value) { // for (var element in matchedServices![serviceIndex].serviceItems!) { // element.isUpdateOrSelected = value; // } // notifyListeners(); // } // // copyItems(int index, List copiedItems) { // matchedServices![index].serviceItems = copiedItems; // notifyListeners(); // } // // Future duplicateItems(Map map) async { // return await branchRepo.duplicateItems(map); // } // } import 'dart:io'; import 'package:mc_common_app/repositories/branch_repo.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:mc_common_app/models/general_models/m_response.dart'; import 'package:mc_common_app/models/provider_branches_models/branch_detail_model.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/categroy.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/document.dart'; import 'package:mc_common_app/models/provider_branches_models/profile/services.dart'; import 'package:mc_common_app/models/provider_branches_models/provider_model.dart'; import 'package:mc_common_app/models/services_models/item_model.dart'; import 'package:mc_common_app/models/services_models/service_model.dart'; import 'package:mc_common_app/models/user_models/branch_user.dart'; import 'package:mc_common_app/models/user_models/cities.dart'; import 'package:mc_common_app/models/user_models/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/app_permission_handler.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'; 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 int selectedBranchStatus = 3; Document? document; ProviderModel? branches; Country? country; Cities? cities; DropValue? countryValue; DropValue? cityValue; List countryDropList = []; List citiesDropList = []; double latitude = 0; double longitude = 0; int role = -1; int countryId = -1; int cityId = -1; String countryCode = ""; String address = ""; String branchName = ""; String branchDescription = ""; Future getServiceProviderDocument(int providerId) async { setState(ViewState.busy); document = await branchRepo.getServiceProviderDocument(providerId); setState(ViewState.idle); } Future selectFile(BuildContext context, int index) async { final status = await AppPermissions.checkStoragePermissions(context); if (status) { final File? file = await commonServices.pickFile( context, fileType: FileType.custom, allowedExtensions: ['png', 'pdf', 'jpeg'], ); // if (result != null) { // final File file = File(result.files.single.path!); // final int sizeInBytes = file.lengthSync(); // // if (sizeInBytes > 1000) { // Utils.showToast("File is larger than 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 // } if (file != null) { int sizeInBytes = file.lengthSync(); // double sizeInMb = sizeInBytes / (1024 * 1024); if (sizeInBytes > 1000000) { 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 Future getBranchAndServices() async { setState(ViewState.busy); branches = await branchRepo.getBranchAndServices(); setState(ViewState.idle); } Future getAllCountriesList(BranchDetailModel? branchData, String countryCode) async { cities = null; country = null; setState(ViewState.busy); resetValues(); country = await commonRepo.getAllCountries(); country!.data?.forEach((element) { if (branchData != null && branchData.id != null) { if (element.id == branchData.countryID) { countryId = element.id ?? -1; 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 && branchData.id != null) { await getAllCities(branchData, countryCode); } setState(ViewState.idle); } Future getAllCities(BranchDetailModel? branchData, String countryCode) async { setState(ViewState.busy); citiesDropList = []; cities = null; cityId = -1; cityValue = null; 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(), ); } void 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 = []; Future fetchBranchCategory(String countryCode) async { categoryDropList.clear(); servicesDropList = []; services = null; setOnlyState(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); } Future fetchServicesByCategoryId(int categoryId) async { servicesDropList = []; setState(ViewState.busy); services = await branchRepo.fetchServicesByCategoryId(serviceCategoryId: categoryId); // to get all the services for (var element in services!.data!) { servicesDropList.add( DropValue( element.id ?? 0, element.description ?? "N/A", "", ), ); } setState(ViewState.idle); } Future fetchProviderServices(String branchID, String categoryId) async { servicesDropList = []; services = null; setState(ViewState.busy); services = await branchRepo.fetchProviderServices(branchID, categoryId); for (var element in services!.data!) { servicesDropList.add( DropValue( element.id ?? 0, element.description ?? "N/A", "", ), ); } setState(ViewState.idle); } Future createService(List> map) async { return await branchRepo.createService(map); } Future updateServices(List> map) async { return await branchRepo.updateService(map); } void updateSelectedBranchType(int status) { selectedBranchStatus = status; notifyListeners(); } List? matchedServices; bool isAllSelected = false; Future getAllMatchedServices(int oldBranchId, int newBranchId, int categoryId) async { matchedServices = null; final MResponse response = await branchRepo.getMatchedServices(oldBranchId, newBranchId, categoryId); matchedServices = []; if (response.messageStatus == 1) { matchedServices = List.from(response.data.map((x) => ServiceModel.fromJson(x))); } notifyListeners(); } void selectAllServices(bool value) { for (var element in matchedServices!) { element.isExpandedOrSelected = value; for (var item in element.serviceItems!) { item.isUpdateOrSelected = value; } } isAllSelected = value; notifyListeners(); } void updateServiceItem(int serviceIndex, bool value) { for (var element in matchedServices![serviceIndex].serviceItems!) { element.isUpdateOrSelected = value; } notifyListeners(); } void copyItems(int index, List copiedItems) { matchedServices![index].serviceItems = copiedItems; notifyListeners(); } Future duplicateItems(Map map) async { return await branchRepo.duplicateItems(map); } // Branch Users List allProviderDealersList = []; List branchUserList = []; getAllProviderDealers(Map map) async { setState(ViewState.busy); MResponse response = await branchRepo.getAllProviderDealers(map); if (response.messageStatus == 1) { allProviderDealersList = []; allProviderDealersList = List.from(response.data.map((x) => BranchUser.fromJson(x))); } setState(ViewState.idle); } Future getBranchUsers(Map map) async { setState(ViewState.busy); MResponse response = await branchRepo.getBranchUsers(map); if (response.messageStatus == 1) { branchUserList = []; branchUserList = List.from(response.data.map((x) => BranchUser.fromJson(x))); } setState(ViewState.idle); } Future assignDealerToBranch(Map map) async { MResponse response = await branchRepo.assignDealerToBranch(map); return response; } Future removeDealerFromBranch(Map map) async { MResponse response = await branchRepo.removeDealerFromBranch(map); return response; } Future addNewServiceInAppointment(Map map) async { MResponse response = await branchRepo.addNewServicesInAppointment(map); return response; } }