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.
273 lines
8.6 KiB
Dart
273 lines
8.6 KiB
Dart
import 'dart:io';
|
|
|
|
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/requests/request_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 '../repositories/request_repo.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<FilterListModel> 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<File> 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<File> Images = await commonServices.pickMultipleImages();
|
|
pickedVehicleImages.addAll(Images);
|
|
if (pickedVehicleImages.isNotEmpty) vehicleImageError = "";
|
|
notifyListeners();
|
|
}
|
|
|
|
bool isFetchingRequestType = false;
|
|
bool isFetchingVehicleType = true;
|
|
bool isFetchingVehicleDetail = false;
|
|
List<Enums> requestTypes = [];
|
|
List<VehicleTypeModel> vehicleTypes = [];
|
|
VehicleDetailsModel? vehicleDetails;
|
|
List<VehicleBrandsModel> vehicleBrands = [];
|
|
List<VehicleModel> vehicleModels = [];
|
|
List<VehicleYearModel> vehicleModelYears = [];
|
|
List<VehicleCountryModel> vehicleCountries = [];
|
|
List<VehicleCityModel> 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<void> 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<void> 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<GenericRespModel?> createRequest() async {
|
|
if (validate()) {
|
|
Map<String, dynamic> 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<RequestModel> 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();
|
|
}
|
|
}
|