import 'dart:io'; import 'package:car_customer_app/repositories/request_repo.dart'; import 'package:mc_common_app/classes/app_state.dart'; import 'package:mc_common_app/models/advertisment_models/vehicle_details_models.dart'; import 'package:mc_common_app/models/enums.dart'; import 'package:mc_common_app/models/generic_resp_model.dart'; import 'package:mc_common_app/models/widgets_models.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/utils.dart'; import 'package:mc_common_app/view_models/base_view_model.dart'; import '../model/request.dart'; class RequestsVM extends BaseVM { final CommonAppServices commonServices; final CommonRepo commonRepo; final RequestRepo requestRepo; RequestsVM({required this.commonServices, required this.commonRepo, required this.requestRepo}); List requestsFilterOptions = []; populateRequestsFilterList() { requestsFilterOptions.clear(); requestsFilterOptions = [ FilterListModel(title: "Cars", isSelected: true, id: 1), FilterListModel(title: "Spare Parts", isSelected: false, id: 2), ]; notifyListeners(); } applyFilterOnRequestsVM({required int index}) { if (requestsFilterOptions.isEmpty) return; for (var value in requestsFilterOptions) { value.isSelected = false; } requestsFilterOptions[index].isSelected = true; notifyListeners(); } List pickedVehicleImages = []; String vehicleImageError = ""; void removeImageFromList(String filePath) { int index = pickedVehicleImages.indexWhere((element) => element.path == filePath); if (index == -1) { return; } pickedVehicleImages.removeAt(index); notifyListeners(); } void pickMultipleImages() async { List Images = await commonServices.pickMultipleImages(); pickedVehicleImages.addAll(Images); if (pickedVehicleImages.isNotEmpty) vehicleImageError = ""; notifyListeners(); } bool isFetchingRequestType = false; bool isFetchingVehicleType = true; bool isFetchingVehicleDetail = false; List requestTypes = []; List vehicleTypes = []; VehicleDetailsModel? vehicleDetails; List vehicleBrands = []; List vehicleModels = []; List vehicleModelYears = []; List vehicleCountries = []; List vehicleCities = []; SelectionModel requestTypeId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); getRequestTypes() async { requestTypeId.selectedId = -1; isFetchingRequestType = true; requestTypes = await commonRepo.getEnumTypeValues(enumTypeID: 16); //TODO: 16 is to get Request types isFetchingRequestType = false; notifyListeners(); } void updateSelectionRequestTypeId(SelectionModel id) async { requestTypeId = id; getVehicleTypes(); notifyListeners(); } SelectionModel vehicleTypeId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); Future getVehicleTypes() async { reset(); isFetchingVehicleType = true; vehicleTypes = await commonRepo.getVehicleTypes(); isFetchingVehicleType = false; notifyListeners(); } reset() { vehicleTypeId.selectedId = -1; vehicleBrandId.selectedId = -1; vehicleModelId.selectedId = -1; vehicleModelYearId.selectedId = -1; vehicleCountryId.selectedId = -1; vehicleCityId.selectedId = -1; } void updateSelectionVehicleTypeId(SelectionModel id) async { vehicleTypeId = id; getVehicleBrandsByVehicleTypeId(); notifyListeners(); } Future getVehicleBrandsByVehicleTypeId() async { // if (vehicleBrandId.selectedId == -1) { // return; // } isFetchingVehicleDetail = true; notifyListeners(); vehicleDetails = await commonRepo.getVehicleDetails(vehicleTypeId: vehicleTypeId.selectedId); if (vehicleDetails != null) { vehicleBrands = vehicleDetails!.vehicleBrands!; vehicleModels = vehicleDetails!.vehicleModels!; vehicleModelYears = vehicleDetails!.vehicleModelYears!; vehicleCountries = vehicleDetails!.vehicleCountries!; } isFetchingVehicleDetail = false; notifyListeners(); } SelectionModel vehicleBrandId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); void updateSelectionVehicleBrandId(SelectionModel id) { vehicleBrandId = id; vehicleModelId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); vehicleModelYearId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); notifyListeners(); } SelectionModel vehicleModelId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); void updateSelectionVehicleModelId(SelectionModel id) { vehicleModelId = id; vehicleModelYearId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); notifyListeners(); } SelectionModel vehicleModelYearId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); void updateSelectionVehicleModelYearId(SelectionModel id) { vehicleModelYearId = id; notifyListeners(); } bool isShippingDeliveryEnabled = false; void updateShippingDeliverEnabled(bool v) { isShippingDeliveryEnabled = v; notifyListeners(); } bool isCountryFetching = false; SelectionModel vehicleCountryId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); void updateSelectionVehicleCountryId(SelectionModel id) async { vehicleCountryId = id; isCountryFetching = true; notifyListeners(); vehicleCities = await commonRepo.getVehicleCities(countryId: vehicleCountryId.selectedId); isCountryFetching = false; notifyListeners(); } SelectionModel vehicleCityId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: ""); void updateSelectionVehicleCityId(SelectionModel id) { vehicleCityId = id; notifyListeners(); } //Request Management String price = "", description = ""; updatePrice(String v) { price = v; } updateDescription(String v) { description = v; } Future createRequest() async { if (validate()) { Map m = { "customerID": AppState().getUser.data!.userInfo!.customerId ?? 0, "requestType": requestTypeId.selectedId, "vehicleTypeID": vehicleTypeId.selectedId, "brand": vehicleBrandId.selectedOption, "model": vehicleModelId.selectedOption, "year": vehicleModelYearId.selectedOption, "isNew": true, "countryID": vehicleCountryId.selectedId, "cityID": vehicleCityId.selectedId, "price": price, "description": description, "isSpecialServiceNeeded": false, "requestImages": [] }; GenericRespModel respModel = await requestRepo.createRequest(m); return respModel; } else { return null; } } bool validate() { bool isValid = true; if (requestTypeId.selectedId == -1) { Utils.showToast("Please select valid Request Type"); isValid = false; } else if (vehicleTypeId.selectedId == -1) { Utils.showToast("Please select valid Vehicle Type"); isValid = false; } else if (vehicleBrandId.selectedId == -1) { Utils.showToast("Please select valid Brand"); isValid = false; } else if (vehicleModelId.selectedId == -1) { Utils.showToast("Please select valid Model"); isValid = false; } else if (vehicleModelYearId.selectedId == -1) { Utils.showToast("Please select valid Year"); isValid = false; } else if (vehicleCountryId.selectedId == -1) { Utils.showToast("Please select valid Country"); isValid = false; } else if (vehicleCityId.selectedId == -1) { Utils.showToast("Please select valid City"); isValid = false; } else if (price.isEmpty) { Utils.showToast("Please add valid Price"); isValid = false; } else if (description.isEmpty) { Utils.showToast("Please add valid Description"); isValid = false; } return isValid; } bool isRequestLoading = true; List requests = []; getRequests() async { isRequestLoading = true; notifyListeners(); int selectedRequestType; // Find the FilterListModel with isSelected equal to true requests = await requestRepo.getRequests( { "customerID": AppState().getUser.data!.userInfo!.customerId, "pageSize": 100, "pageIndex": 0, "requestType": requestsFilterOptions.firstWhere((element) => element.isSelected).id, }, ); isRequestLoading = false; notifyListeners(); } }