import 'dart:developer'; import 'package:flutter/material.dart'; import 'package:mc_common_app/extensions/string_extensions.dart'; import 'package:mc_common_app/main.dart'; import 'package:mc_common_app/models/general_models/enums_model.dart'; import 'package:mc_common_app/models/general_models/generic_resp_model.dart'; import 'package:mc_common_app/models/general_models/widgets_models.dart'; import 'package:mc_common_app/models/shipping_models/shipping_status_model.dart'; import 'package:mc_common_app/repositories/common_repo.dart'; import 'package:mc_common_app/repositories/shipping_repo.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'; class ShippingManagementVM extends BaseVM { final ShippingRepo shippingRepo; final CommonRepo commonRepo; ShippingManagementVM({required this.shippingRepo, required this.commonRepo}); List shippingRequestsList = []; List shippingStatusEnums = []; List shippingRequestFilterOptions = []; List shippingRequestStatusesList = []; String requestStatusComments = ""; void updateRequestStatusComments(var value) { requestStatusComments = value; } resetFilters() { if (shippingRequestFilterOptions.isEmpty) return; for (var value in shippingRequestFilterOptions) { value.isSelected = false; } shippingRequestFilterOptions[0].isSelected = true; requestStatusComments = ""; } Future populateShippingRequestFilterList() async { // if (shippingRequestFilterOptions.isNotEmpty && shippingRequestStatusesList.isNotEmpty) return; shippingStatusEnums = await commonRepo.getEnumTypeValues(enumTypeID: AppEnums.shippingStatusEnumId); shippingRequestFilterOptions.clear(); shippingRequestStatusesList.clear(); for (int i = 0; i < shippingStatusEnums.length; i++) { shippingRequestFilterOptions.add(FilterListModel(title: shippingStatusEnums[i].enumValueStrDes, isSelected: false, id: shippingStatusEnums[i].enumValue)); shippingRequestStatusesList.add(FilterListModel(title: shippingStatusEnums[i].enumValueStrDes, isSelected: false, id: shippingStatusEnums[i].enumValue)); } int index = shippingRequestFilterOptions.indexWhere((element) => element.id == 0); if (index == -1) { log("index: $index"); shippingRequestFilterOptions.insert(0, FilterListModel(title: Utils.getNameByShippingRequestStatusEnum(0.toShippingStatusEnum()), isSelected: false, id: 0)); } shippingRequestFilterOptions.insert(0, FilterListModel(title: Utils.getNameByShippingRequestStatusEnum(ShippingRequestStatusEnum.allRequests), isSelected: true, id: -1)); notifyListeners(); } Future applyFiltersOnShippingRequests({required ShippingRequestStatusEnum shippingRequestStatusEnum}) async { log("ship: $shippingRequestStatusEnum"); for (var value in shippingRequestFilterOptions) { value.isSelected = false; } if (shippingRequestStatusEnum == ShippingRequestStatusEnum.allRequests) { shippingRequestFilterOptions[0].isSelected = true; await getShippingRequestsListByFilters(); notifyListeners(); return; } int index = shippingRequestFilterOptions.indexWhere((element) => element.id == shippingRequestStatusEnum.getIdFromShippingStatusEnum()); shippingRequestFilterOptions[index].isSelected = true; // +1 to match with the index 0 index has all requests await getShippingRequestsListByFilters(shippingStatusEnum: shippingRequestStatusEnum); notifyListeners(); } void updateSelectionInShippingRequestStatuses(int index) { for (var value in shippingRequestStatusesList) { value.isSelected = false; } shippingRequestStatusesList[index].isSelected = true; notifyListeners(); } Future getShippingRequestsListByFilters({ShippingRequestStatusEnum? shippingStatusEnum}) async { setState(ViewState.busy); try { shippingRequestsList = await shippingRepo.getShippingRequestListByStatus(shippingStatusEnum: shippingStatusEnum); setState(ViewState.idle); notifyListeners(); } catch (e) { logger.i(e.toString()); Utils.showToast(e.toString()); setState(ViewState.idle); } } Future onUpdateShippingStatusTapped({required BuildContext context, required ShippingRequestStatusEnum shippingStatusEnum, required int shippingRequestId}) async { Utils.showLoading(context); try { GenericRespModel? genericRespModel = await shippingRepo.updateShippingRequestStatus(shippingStatusEnum: shippingStatusEnum, shippingRequestId: shippingRequestId, comment: requestStatusComments); Utils.showToast(genericRespModel.message.toString()); Utils.hideLoading(context); requestStatusComments = ""; return genericRespModel.messageStatus == 1; } catch (e) { logger.i(e.toString()); Utils.showToast(e.toString()); Utils.hideLoading(context); return false; } } }