Untitled
unknown
dart
a year ago
10 kB
4
Indexable
import 'package:flutter/services.dart'; import 'package:get/get.dart'; import 'package:takamol_user/app/modules/home/controllers/home_controller.dart'; import 'package:takamol_user/app/modules/hospitality/current_order/bindings/hospitality_current_order_binding.dart'; import 'package:takamol_user/app/modules/hospitality/current_order/views/hospitality_current_order_view.dart'; import 'package:takamol_user/app/modules/hospitality/model/location_model.dart'; import 'package:takamol_user/app/server/models/buildings.dart'; import 'package:takamol_user/app/server/models/floors.dart'; import 'package:takamol_user/app/server/models/restaurants_orders.dart'; import 'package:takamol_user/app/server/models/rooms.dart'; import 'package:takamol_user/app/server/models/users.dart'; import 'package:takamol_user/app/server/server_handlers.dart'; import 'package:takamol_user/app/utils/functions/log.dart'; import 'package:takamol_user/app/widgets/alert_widget.dart'; import 'package:takamol_user/app/widgets/custom_input.dart'; import 'package:takamol_user/app/widgets/toast_widget.dart'; import 'package:takamol_user/main.dart'; import 'package:takamol_user/resources/strings_generated.dart'; import '../../../server/models/request_for_guest_model.dart'; class RequestForGuestController extends GetxController { final requestType = [ RequestTypeModel( requestTypeId: 1, requestTypeData: 'Food', ), RequestTypeModel( requestTypeId: 2, requestTypeData: 'Drinks', ), ]; RequestTypeModel? selectedRequestModel; Rx<LocationModel>? selectedLocation; List<CustomDropDownItem<Room>> roomsMeetingRoom = []; // List<CustomDropDownItem<Room>> roomsOffice = []; RxBool isFood = false.obs; RxBool isDrink = false.obs; RxBool isMeetingRoom = false.obs; RxBool isOffice = false.obs; Building? building; Floor? floor; String? direction; Room? room; bool _isLoading = false; User? get user => currentUser; List<CustomDropDownItem<Building>> buildings = []; List<CustomDropDownItem<Floor>> floors = []; List<CustomDropDownItem<String>> directions = []; List<CustomDropDownItem<Room>> rooms = []; List<LocationModel> locationList = []; bool gettingBuildings = false, gettingFloors = false, gettingRooms = false, submitting = false; Rx<String> selectedRoomId = ''.obs; set isLoading(bool value) { _isLoading = value; update(); } void initLocationList() { locationList = [ LocationModel( locationId: 1, locationTitle: 'مكتبي', locationIcon: 'assets/svgs/icons/office_chair.svg', isOffice: true, popupTitle: AppStrings.addOfficeData, ), LocationModel( locationId: 2, locationTitle: 'غرفة الاجتماعات', locationIcon: 'assets/svgs/icons/meeting.svg', popupTitle: 'اضافة قاعة الاجتماعات', ), ]; } @override void onReady() { initializeBuilding(); initLocationList(); super.onReady(); } initializeBuilding() async { buildings = []; gettingBuildings = true; update(); var response = await server.buildings.get( query: UrlQuery(isActive: true, isGetAll: true), ); response.quickPrint(); if (response.dataErrorsOnlyCheck) { for (var building in response.data!) { buildings.add(CustomDropDownItem( title: building.name, value: building, )); } } // gettingBuildings = false; update(); } buildingSetter(Building? value) { building = value; if (value != null) { initializeFloors(buildingId: value.id); } } floorSetter(Floor? value) { floor = value; directions.addAll([ CustomDropDownItem(title: 'R', value: 'R'), CustomDropDownItem(title: 'L', value: 'L'), ]); if (value != null) { initializeRooms(floorId: value.id ?? ''); } } directionSetter(String? value) => direction = value; roomNumberSetter(Room? value) => room = value; initializeFloors({required String buildingId}) async { //... call after getting the buildings floors = []; gettingFloors = true; floor = null; update(); var response = await server.floors.get( query: UrlQuery( isActive: true, buildingId: buildingId, ), ); response.quickPrint(); if (response.dataErrorsOnlyCheck) { for (var floor in response.data!) { floors.add(CustomDropDownItem(title: floor.name ?? '', value: floor)); } } // gettingRooms = false; update(); } initializeRooms({required String floorId}) async { //... call after getting the buildings rooms = []; gettingRooms = true; room = null; update(); var response = await server.rooms.get( query: UrlQuery( isActive: true, floorId: floorId, ), ); response.quickPrint(); if (response.dataErrorsOnlyCheck) { for (var room in response.data!) { rooms.add(CustomDropDownItem(title: room.name, value: room)); } } // gettingRooms = false; update(); } void initializeRoomsMeeting({required String floorId}) async { //... call after getting the buildings roomsMeetingRoom = []; gettingRooms = true; room = null; update(); var response = await server.rooms.get( query: UrlQuery( isActive: true, floorId: floorId, roomTypeId: 2, ), ); response.quickPrint(); if (response.dataErrorsOnlyCheck) { for (var room in response.data!) { roomsMeetingRoom.add(CustomDropDownItem(title: room.name, value: room)); } } // gettingRooms = false; update(); } void submit({ Building? selectedBuild, Room? selectedRoom, Floor? selectedFloor, String? selectedDirection, }) async { final locationSelected = locationList.firstWhereOrNull((location) => location.locationId == selectedLocation?.value.locationId); locationSelected?.selectedBuild = selectedBuild; locationSelected?.selectedRoom = selectedRoom; locationSelected?.selectedFloor = selectedFloor; locationSelected?.direction = selectedDirection; locationSelected?.locationSubTitle = '${selectedBuild?.name ?? ''} , ${selectedFloor?.name ?? ''} , ${selectedDirection ?? ''} , ${selectedRoom?.name ?? ''}'; submitting = true; var response = await server.users.updateMe(roomId: room?.id); if (response.dataErrorsOnlyCheck) { response.quickPrint(); Get.back(); } else { String e = "${AppStrings.somethingWentWrong}\n\n${response.errors.join("\n\n")}"; CustomAlert.instance.error(Get.context!, subtitleText: e); response.quickPrint(); output(response.errors); output(response.dioError); output(response.dioError?.response); } submitting = false; update(); } // Future<void> requestForVisitor({int? selectedRequestType}) async { // var response = await server.restaurantsOrders.updateStatus( // status: 1, // id: '2', // ); // } void onUpdateLocation({required LocationModel location}) { selectedLocation = location.obs; update(); } onChangeFloor({required Floor floor}) { directions.clear(); directions.addAll([ CustomDropDownItem(title: 'R', value: 'R'), CustomDropDownItem(title: 'L', value: 'L'), ]); initializeRooms(floorId: floor.id ?? ''); initializeRoomsMeeting(floorId: floor.id ?? ''); } Future requestForVisitor() async { if (selectedLocation == null || selectedLocation?.value.selectedRoom == null) { ToastWidget().showToast( Get.context!, message: 'الرجاء اختيار الموقع بلتفصيل', type: ToastTypes.error, ); return; } HapticFeedback.mediumImpact(); if (_isLoading) return; isLoading = true; try { RestaurantOrder restaurantOrder = RestaurantOrder( requesterId: currentUser?.id ?? '', requester: currentUser, restaurantId: '', restaurant: null, guestId: '', roomId: selectedLocation?.value.selectedRoom?.id, buildingId: '', floorId: selectedLocation?.value.selectedFloor?.id, room: null, items: [], id: '', ); var response = await RestaurantsOrdersHandler.instance.add( restaurantOrder: restaurantOrder, onReceiveProgress: (int count, int total) {}, ); if (response.dataErrorsOnlyCheck) { Get.back(); if (response.data != null) { Get.to( () => HospitalityCurrentOrder(), binding: HospitalityCurrentOrderBinding(), arguments: { 'restaurantOrder': response.data, }, ); //Get.find<HomeController>().getLatestOrder(); } // CustomAlert.instance.success( // Get.context!, // subtitleText: AppStrings.yourOrderHasBeenSent, // onWillPop: () async { // Get.back(); // // return true; // }, // ); // reheatOrderSuccessfulBottomSheet( // // reheatItem: ReheatOrderItem(name: AppStrings.food), // ); } else { String errorMessage = "${AppStrings.checkYourConnection}\n\n${response.errors.join("\n\n")}"; CustomAlert.instance.error(Get.context!, subtitleText: errorMessage); } } catch (e) { CustomAlert.instance.error( Get.context!, subtitleText: AppStrings.somethingWentWrong, ); } isLoading = false; } }
Editor is loading...
Leave a Comment