Untitled
unknown
dart
a year ago
17 kB
6
Indexable
import 'dart:async'; import 'dart:developer'; import 'package:dio/dio.dart'; import 'package:get/utils.dart'; import 'package:takamol_user/app/enums/enums.dart'; import 'package:takamol_user/app/server/models/floors.dart'; import 'package:takamol_user/app/server/models/restaurants_orders_items.dart'; import 'package:takamol_user/app/server/server_handlers.dart'; import 'package:takamol_user/app/utils/extensions/duration_parsing.dart'; import '../../../main.dart'; import '../../utils/functions/log.dart'; import '../server_points.dart'; import '../server_response.dart'; import 'guests.dart'; import 'restaurants.dart'; import 'rooms.dart'; import 'users.dart'; class RestaurantOrder { /// Important! /// * pass an empty string for the [id] if you want to create a new record. String id = ""; String? requesterId = ""; User? requester; // int? orderNumber; String? waiterId; User? waiter; // String? restaurantId; Restaurant? restaurant; // String? guestId; Guest? guest; // String? floorId; Floor? floor; String? roomNumber; String? roomId; String? buildingId; Room? room; // String? instructions; OrderStatus status = OrderStatus.none; String? statusReason; int? canceledBy; int? orderType; int? reheatingType; int? rate; int? waiterRate; bool? isSkipRate; String? rejectedReasonId; RejectedReason? rejectedReason; String? rejectedOthrReason; Duration? estimatedTime; String? rateComment; DateTime? createdAt; DateTime? updatedAt; // List<RestaurantOrderItem> items = []; RestaurantOrder({ required this.id, this.requesterId, this.requester, this.orderNumber, this.waiterId, this.waiter, this.restaurantId, this.restaurant, this.guestId, this.guest, this.floorId, this.floor, this.roomNumber, this.roomId, this.buildingId, this.room, this.instructions, this.status = OrderStatus.none, this.statusReason, this.canceledBy, this.orderType, this.reheatingType, this.rate, this.waiterRate, this.isSkipRate, this.rejectedReasonId, this.rejectedReason, this.rejectedOthrReason, this.estimatedTime, this.createdAt, this.updatedAt, this.rateComment, required this.items, }); RestaurantOrder.server({ this.id = "", this.roomId, this.buildingId, this.floorId, this.items = const [], }); factory RestaurantOrder.fromMap(Map<String, dynamic> map) { return RestaurantOrder( id: returnNullable(map["id"], ""), requesterId: returnNullable(map["requesterId"], ""), requester: User.tryParse(map["requester"], withUserKey: false), orderNumber: returnNullable<int>(map["orderNumber"], 0), waiterId: returnNullable<String?>(map["waiterId"], null), waiter: User.tryParse(map["waiter"], withUserKey: false), restaurantId: returnNullable<String?>(map["restaurantId"], null), restaurant: Restaurant.tryParse(map["restaurant"]), guestId: returnNullable<String?>(map["guestId"], null), guest: Guest.tryParse(map["guest"]), floorId: returnNullable<String?>(map["floorId"], null), floor: Floor.tryParse(map["floor"]), roomNumber: returnNullable<String?>(map["roomNumber"], null), roomId: returnNullable<String?>(map["roomId"], null), buildingId: returnNullable<String?>(map["buildingId"], null), room: Room.tryParse(map["room"]), instructions: returnNullable<String?>(map["instructions"], null), status: returnNullable<int>(map["status"], 0).toOrderStatus, statusReason: returnNullable<String?>(map["statusReason"], null), canceledBy: returnNullable<int>(map["canceledBy"], 0), orderType: returnNullable<int>(map["orderType"], 0), reheatingType: returnNullable<int?>(map["reheatingType"], null), rate: returnNullable<int?>(map["rate"], null), waiterRate: returnNullable<int?>(map["waiterRate"], null), isSkipRate: returnNullable<bool?>(map["isSkipRate"], null), rejectedReasonId: returnNullable<String?>(map["rejectedReasonId"], null), rejectedReason: RejectedReason.tryParse(map["rejectedReason"]), rejectedOthrReason: returnNullable<String?>(map["rejectedOthrReason"], null), estimatedTime: returnNullable<Duration?>( (map["estimatedTime"]?.toString().toDuration()), null), rateComment: returnNullable<String?>(map["rateComment"], null), createdAt: DateTime.tryParse(returnNullable(map["createdAt"], ""))?.toLocal(), updatedAt: DateTime.tryParse(returnNullable(map["updatedAt"], "")), items: RestaurantOrderItem.tryParseList(map["items"]) ?? [], ); } /// for [`POST`] and [`PUT`] Map<String, dynamic> toServerMap() { var itemsToMap = items.map((e) => e.toServerMap()).toList(); return { if (id.isNotEmpty) "id": id, if (roomId != null) "roomId": roomId, if (buildingId != null) "buildingId": buildingId, if (floorId != null) "floorId": floorId, if (reheatingType != null) "reheatingType": reheatingType, if (roomNumber != null) "roomNumber": roomNumber, if (instructions != null) "instructions": instructions, // "status": status, "items": itemsToMap, }; } Map<String, dynamic> toMap() { var itemsToMap = items.map((e) => e.toMap()).toList(); return { if (id.isNotEmpty) "id": id, if (requesterId != null) "requesterId": requesterId, if (requester != null) "requester": requester!.toMap(withUserKey: false), if (orderNumber != null) "orderNumber": orderNumber, if (waiterId != null) "waiterId": waiterId, if (waiter != null) "waiter": waiter, if (restaurantId != null) "restaurantId": restaurantId, if (restaurant != null) "restaurant": restaurant!.toMap(), if (guestId != null) "guestId": guestId, if (guest != null) "guest": guest!.toMap(), if (floorId != null) "floorId": floorId, if (floor != null) "floor": floor, if (roomNumber != null) "roomNumber": roomNumber, if (roomId != null) "roomId": roomId, if (buildingId != null) "buildingId": buildingId, if (room != null) "room": room!.toMap(), if (instructions != null) "instructions": instructions, "status": status, if (statusReason != null) "statusReason": statusReason, if (canceledBy != null) "canceledBy": canceledBy, if (orderType != null) "orderType": orderType, if (reheatingType != null) "reheatingType": reheatingType, if (rate != null) "rate": rate, if (waiterRate != null) "waiterRate": waiterRate, if (isSkipRate != null) "isSkipRate": isSkipRate, if (rejectedReasonId != null) "rejectedReasonId": rejectedReasonId, if (rejectedReason != null) "rejectedReason": rejectedReason, if (rejectedOthrReason != null) "rejectedOthrReason": rejectedOthrReason, if (estimatedTime != null) "estimatedTime": estimatedTime, if (rateComment != null) "rateComment": rateComment, if (itemsToMap.isNotEmpty) "items": itemsToMap, }; } Map<String, dynamic> toRatingMap() { return { if (id.isNotEmpty) "id": id, if (rate != null) "rate": rate, if (waiterRate != null) "waiterRate": waiterRate, if (rateComment != null) "rateComment": rateComment, }; } /* Parsers */ static RestaurantOrder? tryParse(Object? data) { return data is Map<String, dynamic> ? RestaurantOrder.fromMap(data) : null; } static List<RestaurantOrder>? tryParseList(Object? data) { List<RestaurantOrder>? fList; output( name: "List<RestaurantOrder>", "tryParseList data type is: ${data.runtimeType}", ); if (data is List/*<Map<String, dynamic>>*/) { fList = []; for (var listToParse in data) { if (listToParse is Map<String, dynamic>) { fList.add(RestaurantOrder.fromMap(listToParse)); } } return fList; } return null; } /* /Parsers */ } class RejectedReason { String? id; String? reasonEn; String? reasonAr; String? reason; String? createdAt; String? updatedAt; bool? isDeleted; RejectedReason( {this.id, this.reasonEn, this.reasonAr, this.reason, this.createdAt, this.updatedAt, this.isDeleted}); RejectedReason.fromJson(Map<String, dynamic> json) { id = json['id']; reasonEn = json['reasonEn']; reasonAr = json['reasonAr']; reason = json['reason']; createdAt = json['createdAt']; updatedAt = json['updatedAt']; isDeleted = json['isDeleted']; } Map<String, dynamic> toJson() { final Map<String, dynamic> data = <String, dynamic>{}; data['id'] = id; data['reasonEn'] = reasonEn; data['reasonAr'] = reasonAr; data['reason'] = reason; data['createdAt'] = createdAt; data['updatedAt'] = updatedAt; data['isDeleted'] = isDeleted; return data; } static RejectedReason? tryParse(Object? data) { return data is Map<String, dynamic> ? RejectedReason.fromJson(data) : null; } } class RestaurantsOrdersHandler { RestaurantsOrdersHandler._(); static final instance = RestaurantsOrdersHandler._(); // Restaurants Methods Future<ServerResponse<List<RestaurantOrder>?>> get({ Function(int, int)? onReceiveProgress, bool? isMyOrdersOnly, bool? isReheating, String? status, UrlQuery? query, }) async { try { // requesting the data. Response<Map<String, dynamic>> dioResponse = await dio.get( serverPoints.myRestaurantsOrders + (query?.toUrlQuery ?? ""), onReceiveProgress: onReceiveProgress, queryParameters: { // "isReheating": isReheating, // "isMyOrdersOnly": isMyOrdersOnly, "status": status, }, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. print('flf ${dioResponse.realUri}'); log('flf ${currentUser?.token}'); return ServerResponse( data: RestaurantOrder.tryParseList(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } // Future<ServerResponse<RestaurantOrder?>> getById({ required String id, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. Response<Map<String, dynamic>> dioResponse = await dio.get( serverPoints.restaurantsOrders + id, onReceiveProgress: onReceiveProgress, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } // Future<ServerResponse<RestaurantOrder?>> reOrder({ required String id, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. Response<Map<String, dynamic>> dioResponse = await dio.post( '${serverPoints.restaurantsOrders}$id/reorder', onReceiveProgress: onReceiveProgress, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } // // /// Adds a new record Future<ServerResponse<RestaurantOrder?>> add({ required RestaurantOrder restaurantOrder, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. output(restaurantOrder.toServerMap(), name: "restaurant order"); Response<Map<String, dynamic>> dioResponse = await dio.post( serverPoints.restaurantsOrders, onReceiveProgress: onReceiveProgress, data: restaurantOrder.toServerMap(), options: Options( headers: { "Accept": "application/json", "Content-type": "application/json", "Authorization": "Bearer ${currentUser?.token}" }, ), ); // handling the data. var data = dioResponse.data?["data"]; return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } // /// Cancel a record Future<ServerResponse<RestaurantOrder?>> submitRating({ required RestaurantOrder restaurantOrder, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. output(restaurantOrder.toRatingMap(), name: "restaurant order rating"); Response<Map<String, dynamic>> dioResponse = await dio.put( serverPoints.restaurantsOrders, onReceiveProgress: onReceiveProgress, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), data: restaurantOrder.toRatingMap(), ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } // /// Cancel a record Future<ServerResponse<RestaurantOrder?>> cancel({ required String id, String? reasonId, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. Response<Map<String, dynamic>> dioResponse = await dio.put( "${serverPoints.restaurantsOrders}cancel", onReceiveProgress: onReceiveProgress, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), data: { "orderId": id, "reasonId": reasonId, }, ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { return ServerResponse.dioError(dioError: e); } } /// change record status Future<ServerResponse<RestaurantOrder?>> updateStatus({ required String id, required int? status, String? statusReason, Function(int, int)? onReceiveProgress, }) async { try { // requesting the data. Response<Map<String, dynamic>> dioResponse = await dio.put( serverPoints.restaurantsOrders, onReceiveProgress: onReceiveProgress, data: { "id": id, "status": status, // "statusReason": statusReason, }, options: Options( headers: { "Authorization": "Bearer ${currentUser?.token}", "Accept-Language": Get.locale?.languageCode, }, ), ); // handling the data. var data = dioResponse.data?["data"]; // returning the response. return ServerResponse( data: RestaurantOrder.tryParse(data), response: dioResponse, ); } on DioException catch (e) { print(e.error); return ServerResponse.dioError(dioError: e); } } // }
Editor is loading...
Leave a Comment