Untitled
unknown
dart
a year ago
10 kB
7
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