|
|
|
|
@ -21,6 +21,7 @@ import 'package:mc_common_app/models/general_models/widgets_models.dart';
|
|
|
|
|
import 'package:mc_common_app/repositories/ads_repo.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/date_helper.dart';
|
|
|
|
|
import 'package:mc_common_app/utils/enums.dart';
|
|
|
|
|
import 'package:mc_common_app/utils/navigator.dart';
|
|
|
|
|
import 'package:mc_common_app/utils/utils.dart';
|
|
|
|
|
@ -71,7 +72,8 @@ class AdVM extends BaseVM {
|
|
|
|
|
String adPhoneNumberError = "";
|
|
|
|
|
|
|
|
|
|
// Edit Variables Amir
|
|
|
|
|
bool isAdEdit = false;
|
|
|
|
|
bool isAdEditEnabled = false;
|
|
|
|
|
AdDetailsModel? previousAdDetails;
|
|
|
|
|
|
|
|
|
|
List<AdDetailsModel> exploreAds = [];
|
|
|
|
|
List<AdDetailsModel> exploreAdsFilteredList = [];
|
|
|
|
|
@ -385,18 +387,22 @@ class AdVM extends BaseVM {
|
|
|
|
|
// notifyListeners();
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
getVehicleBrandsByVehicleTypeId() async {
|
|
|
|
|
if (vehicleTypeId.selectedId == -1 || vehicleBrands.isNotEmpty) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
vehicleBrands = await commonRepo.getVehicleBrands(vehicleTypeId: vehicleTypeId.selectedId);
|
|
|
|
|
Future<void> getVehicleBrandsByVehicleTypeId({int vehicleIdForEditAd = -1}) async {
|
|
|
|
|
// if (vehicleTypeId.selectedId == -1 || vehicleBrands.isNotEmpty) {
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
isFetchingLists = true;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
|
|
|
|
|
vehicleBrands = await commonRepo.getVehicleBrands(vehicleTypeId: vehicleIdForEditAd != -1 ? vehicleIdForEditAd : vehicleTypeId.selectedId);
|
|
|
|
|
isFetchingLists = false;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> getVehicleDetailsByVehicleBrandId() async {
|
|
|
|
|
if (vehicleBrandId.selectedId == -1 || vehicleTypeId.selectedId == -1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
// if (vehicleBrandId.selectedId == -1 || vehicleTypeId.selectedId == -1) {
|
|
|
|
|
// return;
|
|
|
|
|
// }
|
|
|
|
|
isFetchingLists = true;
|
|
|
|
|
notifyListeners();
|
|
|
|
|
vehicleDetails = await commonRepo.getVehicleDetails(vehicleTypeId: vehicleTypeId.selectedId, vehicleBrandId: vehicleBrandId.selectedId);
|
|
|
|
|
@ -461,13 +467,13 @@ class AdVM extends BaseVM {
|
|
|
|
|
|
|
|
|
|
void updateSelectionVehicleTypeId(SelectionModel id) async {
|
|
|
|
|
vehicleTypeId = id;
|
|
|
|
|
getVehicleBrandsByVehicleTypeId();
|
|
|
|
|
await getVehicleBrandsByVehicleTypeId();
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
SelectionModel vehicleBrandId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
|
|
|
|
|
void updateSelectionVehicleBrandId(SelectionModel id, {bool isForSearch = false}) {
|
|
|
|
|
Future<void> updateSelectionVehicleBrandId(SelectionModel id, {bool isForSearch = false}) async {
|
|
|
|
|
if (isForSearch) {
|
|
|
|
|
VehicleBrandsModel brand = vehicleBrands.firstWhere((element) => element.id == id.selectedId);
|
|
|
|
|
DropValue brandValue = DropValue(brand.id ?? 0, brand.vehicleBrandDescription ?? "", "");
|
|
|
|
|
@ -478,7 +484,8 @@ class AdVM extends BaseVM {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
vehicleBrandId = id;
|
|
|
|
|
getVehicleDetailsByVehicleBrandId();
|
|
|
|
|
logger.i("message: ${vehicleBrandId.selectedOption}");
|
|
|
|
|
await getVehicleDetailsByVehicleBrandId();
|
|
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
@ -881,7 +888,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
} else {
|
|
|
|
|
vehicleDescError = "";
|
|
|
|
|
}
|
|
|
|
|
if (pickedVehicleImages.isEmpty || pickedVehicleImages.length < 3) {
|
|
|
|
|
if ((pickedPostingImages.isEmpty || pickedPostingImages.length < 3) && !isAdEditEnabled) {
|
|
|
|
|
vehicleImageError = GlobalConsts.attachImageError;
|
|
|
|
|
isValidated = false;
|
|
|
|
|
} else {
|
|
|
|
|
@ -1010,8 +1017,14 @@ class AdVM extends BaseVM {
|
|
|
|
|
case AdCreationSteps.damageParts:
|
|
|
|
|
if (isDamagePartsValidated()) {
|
|
|
|
|
currentProgressStep = AdCreationSteps.adDuration;
|
|
|
|
|
getVehicleAdsDuration();
|
|
|
|
|
getVehicleAdsSpecialServices();
|
|
|
|
|
if (vehicleAdsDurations.isEmpty) {
|
|
|
|
|
getVehicleAdsDuration();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (vehicleAdsSpecialServices.isEmpty) {
|
|
|
|
|
getVehicleAdsSpecialServices();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
@ -1029,6 +1042,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
isAdEditEnabled = false;
|
|
|
|
|
Utils.hideLoading(context);
|
|
|
|
|
currentProgressStep = AdCreationSteps.vehicleDetails;
|
|
|
|
|
resetValues();
|
|
|
|
|
@ -1065,30 +1079,35 @@ class AdVM extends BaseVM {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<File> pickedVehicleImages = [];
|
|
|
|
|
List<ImageModel> pickedPostingImages = [];
|
|
|
|
|
|
|
|
|
|
void removeImageFromList(String filePath) {
|
|
|
|
|
int index = pickedVehicleImages.indexWhere((element) => element.path == filePath);
|
|
|
|
|
int index = pickedPostingImages.indexWhere((element) => element.filePath == filePath);
|
|
|
|
|
if (index == -1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
pickedVehicleImages.removeAt(index);
|
|
|
|
|
pickedPostingImages.removeAt(index);
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pickMultipleImages() async {
|
|
|
|
|
List<ImageModel> imageModels = [];
|
|
|
|
|
List<File> images = await commonServices.pickMultipleImages();
|
|
|
|
|
pickedVehicleImages.addAll(images);
|
|
|
|
|
if (pickedVehicleImages.isNotEmpty) vehicleImageError = "";
|
|
|
|
|
|
|
|
|
|
for (var element in images) {
|
|
|
|
|
imageModels.add(ImageModel(filePath: element.path, isFromNetwork: false));
|
|
|
|
|
}
|
|
|
|
|
pickedPostingImages.addAll(imageModels);
|
|
|
|
|
if (pickedPostingImages.isNotEmpty) vehicleImageError = "";
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<File> pickedReceiptPdfFiles = [];
|
|
|
|
|
List<ImageModel> pickedReceiptPdfFiles = [];
|
|
|
|
|
|
|
|
|
|
String receiptPdfFileError = "";
|
|
|
|
|
|
|
|
|
|
void removePdfFileFromList(String filePath) {
|
|
|
|
|
int index = pickedReceiptPdfFiles.indexWhere((element) => element.path == filePath);
|
|
|
|
|
int index = pickedReceiptPdfFiles.indexWhere((element) => element.filePath == filePath);
|
|
|
|
|
if (index == -1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -1097,8 +1116,13 @@ class AdVM extends BaseVM {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void pickPdfReceiptFile(BuildContext context) async {
|
|
|
|
|
List<ImageModel> imageModels = [];
|
|
|
|
|
List<File>? files = await commonServices.pickMultipleFiles(context);
|
|
|
|
|
pickedReceiptPdfFiles.addAll(files!);
|
|
|
|
|
if (files == null) return;
|
|
|
|
|
for (var element in files) {
|
|
|
|
|
imageModels.add(ImageModel(filePath: element.path, isFromNetwork: false));
|
|
|
|
|
}
|
|
|
|
|
pickedReceiptPdfFiles.addAll(imageModels);
|
|
|
|
|
if (pickedReceiptPdfFiles.isNotEmpty) receiptPdfFileError = "";
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
@ -1106,13 +1130,16 @@ class AdVM extends BaseVM {
|
|
|
|
|
// sourceFlag for Camera = 0
|
|
|
|
|
// sourceFlag for Gallery = 1
|
|
|
|
|
void pickDamagePartImage(int index) async {
|
|
|
|
|
List<ImageModel> imageModels = [];
|
|
|
|
|
List<File> images = await commonServices.pickMultipleImages();
|
|
|
|
|
|
|
|
|
|
for (var element in images) {
|
|
|
|
|
imageModels.add(ImageModel(filePath: element.path, isFromNetwork: false));
|
|
|
|
|
}
|
|
|
|
|
if (images.isNotEmpty) {
|
|
|
|
|
if (vehicleDamageCards[index].partImages == null) {
|
|
|
|
|
vehicleDamageCards[index].partImages = images;
|
|
|
|
|
vehicleDamageCards[index].partImages = imageModels;
|
|
|
|
|
} else {
|
|
|
|
|
vehicleDamageCards[index].partImages!.addAll(images);
|
|
|
|
|
vehicleDamageCards[index].partImages!.addAll(imageModels);
|
|
|
|
|
}
|
|
|
|
|
vehicleDamageCards[index].partImageErrorValue = "";
|
|
|
|
|
notifyListeners();
|
|
|
|
|
@ -1147,7 +1174,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
void removeDamageImageFromCard(int imageIndex, String filePath, int cardIndex) {
|
|
|
|
|
VehicleDamageCard card = vehicleDamageCards.elementAt(cardIndex);
|
|
|
|
|
if (card.partImages == null) return;
|
|
|
|
|
int index = card.partImages!.indexWhere((element) => element.path == filePath);
|
|
|
|
|
int index = card.partImages!.indexWhere((element) => element.filePath == filePath);
|
|
|
|
|
if (index == -1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
@ -1164,9 +1191,10 @@ class AdVM extends BaseVM {
|
|
|
|
|
|
|
|
|
|
void resetValues() {
|
|
|
|
|
pickedDamageImages.clear();
|
|
|
|
|
pickedVehicleImages.clear();
|
|
|
|
|
pickedPostingImages.clear();
|
|
|
|
|
vehicleDamageCards.clear();
|
|
|
|
|
specialServiceCards.clear();
|
|
|
|
|
vehicleAdsSpecialServices.clear();
|
|
|
|
|
currentProgressStep = AdCreationSteps.vehicleDetails;
|
|
|
|
|
vehicleTypeId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
vehicleTypeId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
@ -1181,14 +1209,13 @@ class AdVM extends BaseVM {
|
|
|
|
|
vehicleCountryId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
vehicleCityId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
vehicleAdDurationId = SelectionModel(selectedOption: "", selectedId: -1, errorValue: "");
|
|
|
|
|
|
|
|
|
|
vehicleDemandAmount = "";
|
|
|
|
|
vehicleVin = "";
|
|
|
|
|
vehicleTitle = "";
|
|
|
|
|
warrantyDuration = "";
|
|
|
|
|
vehicleDescription = "";
|
|
|
|
|
selectionDurationStartDate = "";
|
|
|
|
|
|
|
|
|
|
clearSpecialServiceCard();
|
|
|
|
|
updateFinanceAvailableStatus(false);
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
@ -1327,6 +1354,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
adsSelectedServices.add(value.serviceSelectedId!.selectedId);
|
|
|
|
|
}
|
|
|
|
|
Ads ads = Ads(
|
|
|
|
|
id: isAdEditEnabled ? previousAdDetails!.id : null,
|
|
|
|
|
adsDurationID: vehicleAdDurationId.selectedId,
|
|
|
|
|
startDate: selectionDurationStartDate,
|
|
|
|
|
countryId: vehicleCountryId.selectedId,
|
|
|
|
|
@ -1334,8 +1362,8 @@ class AdVM extends BaseVM {
|
|
|
|
|
);
|
|
|
|
|
List<VehiclePostingImages> vehicleImages = [];
|
|
|
|
|
|
|
|
|
|
for (var element in pickedVehicleImages) {
|
|
|
|
|
vehicleImages.add(await convertFileToVehiclePostingImages(file: element));
|
|
|
|
|
for (var image in pickedPostingImages) {
|
|
|
|
|
vehicleImages.add(await convertFileToVehiclePostingImages(imageModel: image));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<VehiclePostingDamageParts> vehicleDamageImages = [];
|
|
|
|
|
@ -1344,7 +1372,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
if (card.partImages != null && card.partImages!.isNotEmpty) {
|
|
|
|
|
for (var image in card.partImages!) {
|
|
|
|
|
VehiclePostingDamageParts stringImage = await convertFileToVehiclePostingDamageParts(
|
|
|
|
|
file: image,
|
|
|
|
|
imageModel: image,
|
|
|
|
|
damagePartId: card.partSelectedId!.selectedId,
|
|
|
|
|
);
|
|
|
|
|
vehicleDamageImages.add(stringImage);
|
|
|
|
|
@ -1353,6 +1381,7 @@ class AdVM extends BaseVM {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
VehiclePosting vehiclePosting = VehiclePosting(
|
|
|
|
|
id: isAdEditEnabled ? previousAdDetails!.vehiclePostingID : null,
|
|
|
|
|
userID: appState.getUser.data!.userInfo!.userId,
|
|
|
|
|
vehicleType: vehicleTypeId.selectedId,
|
|
|
|
|
vehicleModelID: vehicleModelId.selectedId,
|
|
|
|
|
@ -1379,32 +1408,57 @@ class AdVM extends BaseVM {
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
AdsCreationPayloadModel adsCreationPayloadModel = AdsCreationPayloadModel(ads: ads, vehiclePosting: vehiclePosting);
|
|
|
|
|
GenericRespModel respModel = await adsRepo.createNewAd(adsCreationPayloadModel: adsCreationPayloadModel);
|
|
|
|
|
GenericRespModel respModel = await adsRepo.createOrUpdateAd(adsCreationPayloadModel: adsCreationPayloadModel, isCreateNew: !isAdEditEnabled);
|
|
|
|
|
|
|
|
|
|
Utils.showToast(respModel.message.toString());
|
|
|
|
|
|
|
|
|
|
return Future.value(respModel.messageStatus);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<VehiclePostingImages> convertFileToVehiclePostingImages({required File file}) async {
|
|
|
|
|
List<int> imageBytes = await file.readAsBytes();
|
|
|
|
|
String image = base64Encode(imageBytes);
|
|
|
|
|
String fileName = file.path.split('/').last;
|
|
|
|
|
VehiclePostingImages vehiclePostingImages = VehiclePostingImages(
|
|
|
|
|
imageName: fileName,
|
|
|
|
|
imageStr: image,
|
|
|
|
|
imageUrl: file.path,
|
|
|
|
|
);
|
|
|
|
|
Future<VehiclePostingImages> convertFileToVehiclePostingImages({required ImageModel imageModel}) async {
|
|
|
|
|
VehiclePostingImages vehiclePostingImages;
|
|
|
|
|
if (imageModel.isFromNetwork ?? false) {
|
|
|
|
|
vehiclePostingImages = VehiclePostingImages(
|
|
|
|
|
id: imageModel.id,
|
|
|
|
|
imageUrl: imageModel.filePath,
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
File file = File(imageModel.filePath!);
|
|
|
|
|
List<int> imageBytes = await file.readAsBytes();
|
|
|
|
|
String image = base64Encode(imageBytes);
|
|
|
|
|
String fileName = file.path.split('/').last;
|
|
|
|
|
vehiclePostingImages = VehiclePostingImages(
|
|
|
|
|
imageName: fileName,
|
|
|
|
|
imageStr: image,
|
|
|
|
|
imageUrl: file.path,
|
|
|
|
|
vehiclePostingID: isAdEditEnabled ? previousAdDetails!.vehiclePostingID : null,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return vehiclePostingImages;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<VehiclePostingDamageParts> convertFileToVehiclePostingDamageParts({required File file, required int damagePartId}) async {
|
|
|
|
|
List<int> imageBytes = await file.readAsBytes();
|
|
|
|
|
String image = base64Encode(imageBytes);
|
|
|
|
|
VehiclePostingDamageParts vehiclePostingDamageParts = VehiclePostingDamageParts(
|
|
|
|
|
vehicleImageBase64: image,
|
|
|
|
|
vehicleDamagePartID: damagePartId,
|
|
|
|
|
);
|
|
|
|
|
Future<VehiclePostingDamageParts> convertFileToVehiclePostingDamageParts({required ImageModel imageModel, required int damagePartId}) async {
|
|
|
|
|
VehiclePostingDamageParts vehiclePostingDamageParts;
|
|
|
|
|
|
|
|
|
|
if (imageModel.isFromNetwork ?? false) {
|
|
|
|
|
vehiclePostingDamageParts = VehiclePostingDamageParts(
|
|
|
|
|
id: imageModel.id,
|
|
|
|
|
vehicleDamagePartID: damagePartId,
|
|
|
|
|
imageUrl: imageModel.filePath,
|
|
|
|
|
vehiclePostingID: isAdEditEnabled ? previousAdDetails!.vehiclePostingID : null,
|
|
|
|
|
);
|
|
|
|
|
} else {
|
|
|
|
|
File file = File(imageModel.filePath!);
|
|
|
|
|
List<int> imageBytes = await file.readAsBytes();
|
|
|
|
|
String image = base64Encode(imageBytes);
|
|
|
|
|
vehiclePostingDamageParts = VehiclePostingDamageParts(
|
|
|
|
|
vehicleImageBase64: image,
|
|
|
|
|
vehicleDamagePartID: damagePartId,
|
|
|
|
|
imageUrl: file.path,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return vehiclePostingDamageParts;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -1600,25 +1654,21 @@ class AdVM extends BaseVM {
|
|
|
|
|
|
|
|
|
|
///// Edit Work Amir
|
|
|
|
|
|
|
|
|
|
void editUpdateAd(BuildContext context, AdDetailsModel previousDetails) {
|
|
|
|
|
isAdEdit = true;
|
|
|
|
|
void onEditUpdateAdPressed(BuildContext context, AdDetailsModel previousDetails) {
|
|
|
|
|
isAdEditEnabled = true;
|
|
|
|
|
previousAdDetails = previousDetails;
|
|
|
|
|
autoFillSelectedVehicleType();
|
|
|
|
|
navigateWithName(context, AppRoutes.selectAdTypeView, arguments: AppState().currentAppType == AppType.provider ? true : false);
|
|
|
|
|
checkVehicleStep1(previousDetails);
|
|
|
|
|
checkVehicleStep2(previousDetails);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void clearEditValues() {
|
|
|
|
|
isAdEdit = false;
|
|
|
|
|
if (vehicleTypes.isNotEmpty) vehicleTypes.unselectAll();
|
|
|
|
|
if (vehicleAdsDurations.isNotEmpty) vehicleAdsDurations.unselectAll();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
checkVehicleStep1(AdDetailsModel previousDetails) {
|
|
|
|
|
logger.d("Step 1");
|
|
|
|
|
autoFillSelectedVehicleType() async {
|
|
|
|
|
if (vehicleTypes.isEmpty) {
|
|
|
|
|
await getVehicleTypes();
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (vehicleTypes.isNotEmpty) {
|
|
|
|
|
for (var vehicle in vehicleTypes) {
|
|
|
|
|
if (vehicle.id == previousDetails.vehicle?.vehicleType) {
|
|
|
|
|
if (vehicle.id == previousAdDetails!.vehicle?.vehicleType) {
|
|
|
|
|
vehicle.isSelected = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
@ -1627,55 +1677,137 @@ class AdVM extends BaseVM {
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
checkVehicleStep2(AdDetailsModel previousDetails) {
|
|
|
|
|
logger.d("Step 2");
|
|
|
|
|
autoFillSelectedVehicleAdsDuration() async {
|
|
|
|
|
if (vehicleAdsDurations.isEmpty) {
|
|
|
|
|
await getVehicleAdsDuration();
|
|
|
|
|
}
|
|
|
|
|
if (vehicleAdsDurations.isNotEmpty) {
|
|
|
|
|
for (var adsDuration in vehicleAdsDurations) {
|
|
|
|
|
if (adsDuration.price == previousDetails.adsDurationPrice) {
|
|
|
|
|
adsDuration.isSelected = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
int index = vehicleAdsDurations.indexWhere((element) => element.price == previousAdDetails!.adsDurationPrice!);
|
|
|
|
|
if (index != -1) {
|
|
|
|
|
updateVehicleAdDurationId(
|
|
|
|
|
SelectionModel(
|
|
|
|
|
selectedId: vehicleAdsDurations[index].id ?? 0,
|
|
|
|
|
selectedOption: "${vehicleAdsDurations[index].days} Days",
|
|
|
|
|
itemPrice: vehicleAdsDurations[index].price!.toInt().toString(),
|
|
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
checkVehicleStep3(AdDetailsModel previousDetails) {
|
|
|
|
|
logger.d("Step 3");
|
|
|
|
|
if (vehicleBrands.isNotEmpty) {
|
|
|
|
|
for (var vBrands in vehicleBrands) {
|
|
|
|
|
if (vBrands.id == previousDetails.vehicle.) {
|
|
|
|
|
// BrandsId need to be matched here.
|
|
|
|
|
vBrands.isSelected = true;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
List<VehiclePostingDamageParts> vehicleOldDamageImagesList = [];
|
|
|
|
|
|
|
|
|
|
void removeVehicleOldDamageImagesList(String imageUrl) {
|
|
|
|
|
int index = vehicleOldDamageImagesList.indexWhere((element) => element.imageUrl == imageUrl);
|
|
|
|
|
if (index == -1) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
vehicleOldDamageImagesList.removeAt(index);
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateValues() {
|
|
|
|
|
if (isAdEdit) {
|
|
|
|
|
if (vehicleTypes.isNotEmpty) vehicleTypes.unselectAll();
|
|
|
|
|
if (vehicleAdsDurations.isNotEmpty) vehicleAdsDurations.unselectAll();
|
|
|
|
|
notifyListeners();
|
|
|
|
|
autoFillSelectedVehicleAdsDetails() async {
|
|
|
|
|
int index = vehicleBrands.indexWhere((element) => element.id == previousAdDetails!.vehicle!.model!.vehicleBrandID);
|
|
|
|
|
if (index != -1) {
|
|
|
|
|
await updateSelectionVehicleBrandId(SelectionModel(selectedId: vehicleBrands[index].id!, selectedOption: vehicleBrands[index].vehicleBrandDescription ?? ""));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateSelectionVehicleModelId(SelectionModel(selectedId: previousAdDetails!.vehicle!.model!.id!, selectedOption: previousAdDetails!.vehicle!.model!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleModelYearId(SelectionModel(selectedId: previousAdDetails!.vehicle!.modelyear!.id!, selectedOption: previousAdDetails!.vehicle!.modelyear!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleColorId(SelectionModel(selectedId: previousAdDetails!.vehicle!.color!.id!, selectedOption: previousAdDetails!.vehicle!.color!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleConditionId(SelectionModel(selectedId: previousAdDetails!.vehicle!.condition!.id!, selectedOption: previousAdDetails!.vehicle!.condition!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleCategoryId(SelectionModel(selectedId: previousAdDetails!.vehicle!.category!.id!, selectedOption: previousAdDetails!.vehicle!.category!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleMileageId(SelectionModel(
|
|
|
|
|
selectedId: previousAdDetails!.vehicle!.mileage!.id!, selectedOption: "${previousAdDetails!.vehicle!.mileage!.mileageStart} - ${previousAdDetails!.vehicle!.mileage!.mileageEnd}"));
|
|
|
|
|
updateSelectionVehicleTransmissionId(SelectionModel(selectedId: previousAdDetails!.vehicle!.transmission!.id!, selectedOption: previousAdDetails!.vehicle!.transmission!.label ?? ""));
|
|
|
|
|
updateSelectionVehicleSellerTypeId(SelectionModel(selectedId: previousAdDetails!.vehicle!.sellertype!.id!, selectedOption: previousAdDetails!.vehicle!.sellertype!.label ?? ""));
|
|
|
|
|
int indexCountry = vehicleCountries.indexWhere((element) => element.id == previousAdDetails!.vehicle!.countryID);
|
|
|
|
|
if (indexCountry != -1) {
|
|
|
|
|
updateSelectionVehicleCountryId(SelectionModel(selectedId: vehicleCountries[index].id!, selectedOption: vehicleCountries[index].countryName ?? ""));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
updateSelectionVehicleCityId(SelectionModel(selectedId: previousAdDetails!.vehicle!.cityID!, selectedOption: previousAdDetails!.vehicle!.cityName ?? ""));
|
|
|
|
|
vehicleDemandAmount = previousAdDetails!.vehicle!.demandAmount!.toInt().toString();
|
|
|
|
|
vehicleVin = previousAdDetails!.vehicle!.vehicleVIN.toString();
|
|
|
|
|
vehicleTitle = previousAdDetails!.vehicle!.vehicleTitle.toString();
|
|
|
|
|
vehicleDescription = previousAdDetails!.vehicle!.vehicleDescription.toString();
|
|
|
|
|
financeAvailableStatus = previousAdDetails!.vehicle!.isFinanceAvailable ?? false;
|
|
|
|
|
|
|
|
|
|
if (previousAdDetails!.vehicle!.image != null && previousAdDetails!.vehicle!.image!.isNotEmpty) {
|
|
|
|
|
for (var element in previousAdDetails!.vehicle!.image!) {
|
|
|
|
|
if (element.imageUrl != null) {
|
|
|
|
|
ImageModel imageModel = ImageModel(id: element.id, filePath: element.imageUrl, isFromNetwork: true);
|
|
|
|
|
pickedPostingImages.add(imageModel);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extension ToggleSelected on List {
|
|
|
|
|
void unselectAll() {
|
|
|
|
|
for (var element in this) {
|
|
|
|
|
if (element.isSelected!) {
|
|
|
|
|
element.isSelected = false;
|
|
|
|
|
if (previousAdDetails!.vehicle!.damagereport != null && previousAdDetails!.vehicle!.damagereport!.isNotEmpty) {
|
|
|
|
|
for (var element in previousAdDetails!.vehicle!.damagereport!) {
|
|
|
|
|
int index = -1;
|
|
|
|
|
if (vehicleDamageCards.isNotEmpty) {
|
|
|
|
|
index = ifDamagePartAlreadyThere(element.vehicleDamagePartID!);
|
|
|
|
|
ImageModel imageModel = ImageModel(id: element.id!, filePath: element.imageUrl!, isFromNetwork: true);
|
|
|
|
|
vehicleDamageCards[index].partImages!.add(imageModel);
|
|
|
|
|
} else {
|
|
|
|
|
ImageModel imageModel = ImageModel(id: element.id!, filePath: element.imageUrl!, isFromNetwork: true);
|
|
|
|
|
|
|
|
|
|
VehicleDamageCard vehicleDamageCard = VehicleDamageCard(
|
|
|
|
|
partSelectedId: SelectionModel(
|
|
|
|
|
selectedId: element.vehicleDamagePartID!,
|
|
|
|
|
selectedOption: element.partName ?? "",
|
|
|
|
|
),
|
|
|
|
|
partImages: [imageModel],
|
|
|
|
|
);
|
|
|
|
|
addNewDamagePartCard(damageCard: vehicleDamageCard);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (previousAdDetails!.specialservice != null && previousAdDetails!.specialservice!.isNotEmpty) {
|
|
|
|
|
for (var element in previousAdDetails!.specialservice!) {
|
|
|
|
|
SelectionModel vehicleAdsSpecialServicesId = SelectionModel(selectedId: element.specialServiceID!, selectedOption: element.name ?? "", itemPrice: element.price.toString());
|
|
|
|
|
SpecialServiceCard specialServiceCard = SpecialServiceCard(
|
|
|
|
|
serviceSelectedId: vehicleAdsSpecialServicesId,
|
|
|
|
|
description: element.description ?? "",
|
|
|
|
|
duration: "",
|
|
|
|
|
serviceDate: "",
|
|
|
|
|
serviceDateError: "",
|
|
|
|
|
serviceTimeError: "",
|
|
|
|
|
address: "",
|
|
|
|
|
serviceTime: "",
|
|
|
|
|
);
|
|
|
|
|
addNewSpecialServiceCard(specialServiceCard: specialServiceCard);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
selectionDurationStartDate = DateHelper.formatDateT(previousAdDetails!.startdate ?? "");
|
|
|
|
|
isPhoneNumberShown = previousAdDetails!.phoneNo != null;
|
|
|
|
|
if (isPhoneNumberShown) {
|
|
|
|
|
adPhoneNumber = previousAdDetails!.phoneNo ?? "";
|
|
|
|
|
adPhoneNumberDialCode = "+966";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
isNumberOnWhatsApp = previousAdDetails!.whatsAppNo != null;
|
|
|
|
|
logger.i("previousAdDetails!: $previousAdDetails");
|
|
|
|
|
|
|
|
|
|
notifyListeners();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ifDamagePartAlreadyThere(int partId) {
|
|
|
|
|
return vehicleDamageCards.indexWhere((element) => element.partSelectedId!.selectedId == partId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int ifSpecialServiceAlreadyThere(int id) {
|
|
|
|
|
return specialServiceCards.indexWhere((element) => element.serviceSelectedId!.selectedId == id);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Edit Work End Amir
|
|
|
|
|
|
|
|
|
|
class VehicleDamageCard {
|
|
|
|
|
List<File>? partImages;
|
|
|
|
|
List<ImageModel>? partImages;
|
|
|
|
|
SelectionModel? partSelectedId;
|
|
|
|
|
String partImageErrorValue;
|
|
|
|
|
|
|
|
|
|
@ -1684,6 +1816,24 @@ class VehicleDamageCard {
|
|
|
|
|
this.partSelectedId,
|
|
|
|
|
this.partImageErrorValue = "",
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
String toString() {
|
|
|
|
|
return 'VehicleDamageCard{partImages: $partImages, partSelectedId: $partSelectedId, partImageErrorValue: $partImageErrorValue}';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class ImageModel {
|
|
|
|
|
int? id;
|
|
|
|
|
bool? isFromNetwork;
|
|
|
|
|
String? filePath;
|
|
|
|
|
|
|
|
|
|
ImageModel({this.id, this.filePath, this.isFromNetwork});
|
|
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
String toString() {
|
|
|
|
|
return 'ImageModel{id: $id, isFromNetwork: $isFromNetwork, filePath: $filePath}';
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class SpecialServiceCard {
|
|
|
|
|
|