diff --git a/lib/config/config.dart b/lib/config/config.dart index b86765f..e53ecab 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -8,6 +8,7 @@ const GET_ALL_ORDERS = '/Patients.svc/REST/PatientER_Delivery_GetAllOrder'; const SCAN_QR = '/Patients.svc/REST/PatientER_Delivery_OrderInsert'; const UPDATE_ORDER_STATUS = '/Patients.svc/REST/PatientER_Delivery_UpdateOrderStatus'; +const NEXT_ORDER = "/Patients.svc/REST/PatientER_Delivery_NextOrder"; /// Body Constant const CHANNEL = 9; @@ -18,5 +19,3 @@ const MAX_SMALL_SCREEN = 660; class AppGlobal { static BuildContext context; } - - diff --git a/lib/core/model/orders/next_order_request_model.dart b/lib/core/model/orders/next_order_request_model.dart new file mode 100644 index 0000000..fdc5f90 --- /dev/null +++ b/lib/core/model/orders/next_order_request_model.dart @@ -0,0 +1,48 @@ +class NextOrderRequestModel { + int driverID; + String searchKey; + int pageSize; + int pageIndex; + String tokenID; + int userID; + String mobileNo; + String longitude; + String latitude; + + NextOrderRequestModel( + {this.driverID, + this.searchKey, + this.pageSize, + this.pageIndex, + this.tokenID, + this.userID, + this.mobileNo, + this.longitude, + this.latitude}); + + NextOrderRequestModel.fromJson(Map json) { + driverID = json['DriverID']; + searchKey = json['SearchKey']; + pageSize = json['PageSize']; + pageIndex = json['PageIndex']; + tokenID = json['TokenID']; + userID = json['UserID']; + mobileNo = json['MobileNo']; + longitude = json['Longitude']; + latitude = json['Latitude']; + } + + Map toJson() { + final Map data = new Map(); + data['DriverID'] = this.driverID; + data['SearchKey'] = this.searchKey; + data['PageSize'] = this.pageSize; + data['PageIndex'] = this.pageIndex; + data['TokenID'] = this.tokenID; + data['UserID'] = this.userID; + data['MobileNo'] = this.mobileNo; + data['Longitude'] = this.longitude; + data['Latitude'] = this.latitude; + return data; + } +} diff --git a/lib/core/service/orders_service.dart b/lib/core/service/orders_service.dart index 8b9ebee..0da0150 100644 --- a/lib/core/service/orders_service.dart +++ b/lib/core/service/orders_service.dart @@ -1,4 +1,5 @@ import 'package:driverapp/config/config.dart'; +import 'package:driverapp/core/model/orders/next_order_request_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_req_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; @@ -73,4 +74,21 @@ class OrdersService extends BaseService { throw e; } } + + Future nextOrder(NextOrderRequestModel nextOrderRequestModel) async { + hasError = false; + try { + await baseAppClient.post(UPDATE_ORDER_STATUS, + onSuccess: (dynamic response, int statusCode) { +// isOrderStatusUpdated = response["PatientER_Delivery_IsOrderUpdated"]; + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: nextOrderRequestModel.toJson()); + } catch (e) { + hasError = true; + super.error = error; + throw e; + } + } } diff --git a/lib/core/viewModels/orders_view_model.dart b/lib/core/viewModels/orders_view_model.dart index 9a367ad..93f31e2 100644 --- a/lib/core/viewModels/orders_view_model.dart +++ b/lib/core/viewModels/orders_view_model.dart @@ -1,4 +1,5 @@ import 'package:driverapp/core/enum/viewstate.dart'; +import 'package:driverapp/core/model/orders/next_order_request_model.dart'; import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; import 'package:driverapp/core/model/orders/update_order_status_request_model.dart'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart'; @@ -8,16 +9,16 @@ import '../../locator.dart'; import 'base_view_model.dart'; class OrdersViewModel extends BaseViewModel { - OrdersService _OrdersService = locator(); + OrdersService _ordersService = locator(); - List get orders => _OrdersService.orders; + List get orders => _ordersService.orders; bool isBottomSheetAppear = false; Future getPendingOrders() async { setState(ViewState.Busy); - await _OrdersService.getPendingOrders(); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.getPendingOrders(); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.Error); } else setState(ViewState.Idle); @@ -25,9 +26,9 @@ class OrdersViewModel extends BaseViewModel { Future insertOrder(ScanQrRequestModel _scanQrRequestModel) async { setState(ViewState.ErrorLocal); - await _OrdersService.insertOrder(_scanQrRequestModel); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.insertOrder(_scanQrRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); @@ -36,9 +37,19 @@ class OrdersViewModel extends BaseViewModel { Future updateOrderStatus( UpdateOrderStatusRequestModel updateOrderStatusRequestModel) async { setState(ViewState.BusyLocal); - await _OrdersService.updateOrderStatus(updateOrderStatusRequestModel); - if (_OrdersService.hasError) { - error = _OrdersService.error; + await _ordersService.updateOrderStatus(updateOrderStatusRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; + setState(ViewState.ErrorLocal); + } else + setState(ViewState.Idle); + } + + Future nextOrder(NextOrderRequestModel nextOrderRequestModel) async { + setState(ViewState.BusyLocal); + await _ordersService.nextOrder(nextOrderRequestModel); + if (_ordersService.hasError) { + error = _ordersService.error; setState(ViewState.ErrorLocal); } else setState(ViewState.Idle); diff --git a/lib/pages/delivery/delivery_confirmed_page.dart b/lib/pages/delivery/delivery_confirmed_page.dart index e56656c..61735cf 100644 --- a/lib/pages/delivery/delivery_confirmed_page.dart +++ b/lib/pages/delivery/delivery_confirmed_page.dart @@ -1,3 +1,10 @@ +import 'package:driverapp/core/enum/viewstate.dart'; +import 'package:driverapp/core/model/orders/next_order_request_model.dart'; +import 'package:driverapp/core/model/orders/pending_orders_res_model.dart'; +import 'package:driverapp/core/viewModels/orders_view_model.dart'; +import 'package:driverapp/pages/base/base_view.dart'; +import 'package:driverapp/pages/delivery/information_page.dart'; +import 'package:driverapp/uitl/utils.dart'; import 'package:driverapp/widgets/buttons/secondary_button.dart'; import 'package:driverapp/widgets/delivery/customer_brief_card.dart'; import 'package:flutter/cupertino.dart'; @@ -7,157 +14,179 @@ import '../../uitl/translations_delegate_base.dart'; import '../../widgets/others/app_scaffold_widget.dart'; class DeliveryConfirmedPage extends StatelessWidget { - final dynamic item; + final PendingOrdersRes item; DeliveryConfirmedPage(this.item); @override Widget build(BuildContext context) { - return AppScaffold( - body: SafeArea( - child: Container( - color: Theme.of(context).primaryColor, - child: ListView( - children: [ - Column( - children: [ - Column( - children: [ - Container( - child: Container( - alignment: Alignment.topLeft, - child: IconButton( - color: Colors.white, - iconSize: 40, - icon: Icon(Icons.arrow_back), - onPressed: () { - Navigator.pop(context); - }, + return BaseView( + builder: (_, model, w) => AppScaffold( + body: SafeArea( + child: Container( + color: Theme.of(context).primaryColor, + child: ListView( + children: [ + Column( + children: [ + Column( + children: [ + Container( + child: Container( + alignment: Alignment.topLeft, + child: IconButton( + color: Colors.white, + iconSize: 40, + icon: Icon(Icons.arrow_back), + onPressed: () { + Navigator.pop(context); + }, + ), ), ), - ), - Container( - child: Column( - children: [ - Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.width * 0.7, - padding: EdgeInsets.only( - top: MediaQuery.of(context).size.width * - 0.2, - ), - decoration: BoxDecoration( - color: Colors.white10, - shape: BoxShape.circle), - child: Column( - children: [ - Icon( - Icons.check_circle, - color: Colors.white, - size: 60, - ), - Text( - TranslationBase.of(context).deliveryInfo, - style: TextStyle( - color: Colors.white, - fontSize: 20, - fontWeight: FontWeight.bold), - ), - Text( - TranslationBase.of(context) - .confirmationSent, - style: TextStyle( + Container( + child: Column( + children: [ + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.width * 0.7, + padding: EdgeInsets.only( + top: MediaQuery.of(context).size.width * 0.2, + ), + decoration: BoxDecoration( + color: Colors.white10, + shape: BoxShape.circle), + child: Column( + children: [ + Icon( + Icons.check_circle, color: Colors.white, - fontSize: 13, + size: 60, + ), + Text( + TranslationBase.of(context).deliveryInfo, + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold), ), - ), - ], + Text( + TranslationBase.of(context) + .confirmationSent, + style: TextStyle( + color: Colors.white, + fontSize: 13, + ), + ), + ], + ), ), - ), - ], + ], + ), ), - ), - ], - ), - Stack( - children: [ - Container( - width: MediaQuery.of(context).size.width, - height: MediaQuery.of(context).size.width, - ), - Container( - width: MediaQuery.of(context).size.width, - //800, - height: MediaQuery.of(context).size.width * 1.2, - //440, - margin: EdgeInsets.only(top: 60), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( - topLeft: Radius.circular(80), - topRight: Radius.circular(80)), + ], + ), + Stack( + children: [ + Container( + width: MediaQuery.of(context).size.width, + height: MediaQuery.of(context).size.width, ), - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - margin: EdgeInsets.only( - bottom: MediaQuery.of(context).size.width * - 0.15, //50 - ), - child: Column( - children: [ - FlatButton.icon( - padding: EdgeInsets.all(8), - color: Colors.orangeAccent, - shape: RoundedRectangleBorder( - borderRadius: - new BorderRadius.circular(10.0), - ), - label: Text( - TranslationBase.of(context).addNoteBtn, - style: TextStyle(color: Colors.white), + Container( + width: MediaQuery.of(context).size.width, + //800, + height: MediaQuery.of(context).size.width * 1.2, + //440, + margin: EdgeInsets.only(top: 60), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(80), + topRight: Radius.circular(80)), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.only( + bottom: MediaQuery.of(context).size.width * + 0.15, //50 + ), + child: Column( + children: [ + FlatButton.icon( + padding: EdgeInsets.all(8), + color: Colors.orangeAccent, + shape: RoundedRectangleBorder( + borderRadius: + new BorderRadius.circular(10.0), + ), + label: Text( + TranslationBase.of(context).addNoteBtn, + style: TextStyle(color: Colors.white), + ), + icon: Icon( + Icons.mode_edit, + color: Colors.white, + ), + onPressed: () {}, ), - icon: Icon( - Icons.mode_edit, - color: Colors.white, + SizedBox( + height: + MediaQuery.of(context).size.width * + 0.1, //20, ), - onPressed: () {}, - ), - SizedBox( - height: MediaQuery.of(context).size.width * - 0.1, //20, - ), - Container( - margin: EdgeInsets.all(10), - child: SecondaryButton( - label: TranslationBase.of(context) - .nextDelivery, - onTap: () {}, + Container( + margin: EdgeInsets.all(10), + child: SecondaryButton( + label: TranslationBase.of(context) + .nextDelivery, + onTap: () {}, + ), ), - ), - ], + ], + ), ), - ), - ], + ], + ), ), - ), - CustomerBriefCard( - itemId: item.patientID, - customerFirstName: item.firstName, - customerLastName: item.lastName, - mobileNo: item.mobileNumber, - totalPayment: item.amount, - deliveryTime: item.orderCreatedOn), - ], - ), - ], - ), - ], + CustomerBriefCard( + itemId: item.patientID, + customerFirstName: item.firstName, + customerLastName: item.lastName, + mobileNo: item.mobileNumber, + totalPayment: item.amount, + deliveryTime: item.orderCreatedOn), + ], + ), + ], + ), + ], + ), ), ), ), ); } + + getNextOrder(BuildContext context, OrdersViewModel model) async { + NextOrderRequestModel nextOrderRequestModel = NextOrderRequestModel( + pageIndex: 0, pageSize: 0, latitude: "", longitude: "", searchKey: ""); + await model.nextOrder(nextOrderRequestModel); + if (model.state == ViewState.ErrorLocal) { + Utils.showErrorToast(model.error); + Navigator.of(context).pop(); + model.hideBottomSheet(); + } else { + Navigator.of(context).pop(); + model.hideBottomSheet(); + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => InformationPage(item), + ), + ); + } + } }