Merge branch 'next_order_service' of https://gitlab.com/Cloud_Solution/driver-app into merge_next_order_service_into_dev

 Conflicts:
	lib/pages/delivery/information_page.dart
logut
Elham Rababah 6 years ago
commit b5cd2bd791

@ -8,6 +8,7 @@ const GET_ALL_ORDERS = '/Patients.svc/REST/PatientER_Delivery_GetAllOrder';
const SCAN_QR = '/Patients.svc/REST/PatientER_Delivery_OrderInsert'; const SCAN_QR = '/Patients.svc/REST/PatientER_Delivery_OrderInsert';
const UPDATE_ORDER_STATUS = const UPDATE_ORDER_STATUS =
'/Patients.svc/REST/PatientER_Delivery_UpdateOrderStatus'; '/Patients.svc/REST/PatientER_Delivery_UpdateOrderStatus';
const NEXT_ORDER = "/Patients.svc/REST/PatientER_Delivery_NextOrder";
/// Body Constant /// Body Constant
const CHANNEL = 9; const CHANNEL = 9;
@ -18,5 +19,3 @@ const MAX_SMALL_SCREEN = 660;
class AppGlobal { class AppGlobal {
static BuildContext context; static BuildContext context;
} }

@ -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<String, dynamic> 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<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
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;
}
}

@ -24,7 +24,7 @@ class PendingOrdersRes {
String dischargeID; String dischargeID;
String patientID; String patientID;
bool patientOutSA; bool patientOutSA;
int distanceInKilometers; dynamic distanceInKilometers;
List<ItemsQuantitiesList> itemsQuantitiesList; List<ItemsQuantitiesList> itemsQuantitiesList;
PendingOrdersRes( PendingOrdersRes(

@ -1,4 +1,5 @@
import 'package:driverapp/config/config.dart'; 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_req_model.dart';
import 'package:driverapp/core/model/orders/pending_orders_res_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/orders/update_order_status_request_model.dart';
@ -7,8 +8,11 @@ import 'package:driverapp/core/service/base_service.dart';
class OrdersService extends BaseService { class OrdersService extends BaseService {
List<PendingOrdersRes> _orders = List(); List<PendingOrdersRes> _orders = List();
List<PendingOrdersRes> _nextOrdersList = List();
List<PendingOrdersRes> get orders => _orders; List<PendingOrdersRes> get orders => _orders;
List<PendingOrdersRes> get nextOrdersList => _nextOrdersList;
bool isOrderInserted; bool isOrderInserted;
bool isOrderStatusUpdated; bool isOrderStatusUpdated;
@ -73,4 +77,23 @@ class OrdersService extends BaseService {
throw e; throw e;
} }
} }
Future nextOrder(NextOrderRequestModel nextOrderRequestModel) async {
hasError = false;
try {
await baseAppClient.post(NEXT_ORDER,
onSuccess: (dynamic response, int statusCode) {
response["PatientER_Delivery_NextOrder"].forEach((order) {
_nextOrdersList.add(PendingOrdersRes.fromJson(order));
});
}, onFailure: (String error, int statusCode) {
hasError = true;
super.error = error;
}, body: nextOrderRequestModel.toJson());
} catch (e) {
hasError = true;
super.error = error;
throw e;
}
}
} }

@ -1,4 +1,5 @@
import 'package:driverapp/core/enum/viewstate.dart'; 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/pending_orders_res_model.dart';
import 'package:driverapp/core/model/orders/update_order_status_request_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'; import 'package:driverapp/core/model/scan_qr/scan_qr_request_model.dart';
@ -8,16 +9,18 @@ import '../../locator.dart';
import 'base_view_model.dart'; import 'base_view_model.dart';
class OrdersViewModel extends BaseViewModel { class OrdersViewModel extends BaseViewModel {
OrdersService _OrdersService = locator<OrdersService>(); OrdersService _ordersService = locator<OrdersService>();
List<PendingOrdersRes> get orders => _OrdersService.orders; List<PendingOrdersRes> get orders => _ordersService.orders;
List<PendingOrdersRes> get nextOrdersList => _ordersService.nextOrdersList;
bool isBottomSheetAppear = false; bool isBottomSheetAppear = false;
Future getPendingOrders() async { Future getPendingOrders() async {
setState(ViewState.Busy); setState(ViewState.Busy);
await _OrdersService.getPendingOrders(); await _ordersService.getPendingOrders();
if (_OrdersService.hasError) { if (_ordersService.hasError) {
error = _OrdersService.error; error = _ordersService.error;
setState(ViewState.Error); setState(ViewState.Error);
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
@ -25,9 +28,9 @@ class OrdersViewModel extends BaseViewModel {
Future insertOrder(ScanQrRequestModel _scanQrRequestModel) async { Future insertOrder(ScanQrRequestModel _scanQrRequestModel) async {
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
await _OrdersService.insertOrder(_scanQrRequestModel); await _ordersService.insertOrder(_scanQrRequestModel);
if (_OrdersService.hasError) { if (_ordersService.hasError) {
error = _OrdersService.error; error = _ordersService.error;
setState(ViewState.ErrorLocal); setState(ViewState.ErrorLocal);
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);
@ -36,9 +39,19 @@ class OrdersViewModel extends BaseViewModel {
Future updateOrderStatus( Future updateOrderStatus(
UpdateOrderStatusRequestModel updateOrderStatusRequestModel) async { UpdateOrderStatusRequestModel updateOrderStatusRequestModel) async {
setState(ViewState.BusyLocal); setState(ViewState.BusyLocal);
await _OrdersService.updateOrderStatus(updateOrderStatusRequestModel); await _ordersService.updateOrderStatus(updateOrderStatusRequestModel);
if (_OrdersService.hasError) { if (_ordersService.hasError) {
error = _OrdersService.error; 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); setState(ViewState.ErrorLocal);
} else } else
setState(ViewState.Idle); setState(ViewState.Idle);

@ -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/buttons/secondary_button.dart';
import 'package:driverapp/widgets/delivery/customer_brief_card.dart'; import 'package:driverapp/widgets/delivery/customer_brief_card.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -7,157 +14,185 @@ import '../../uitl/translations_delegate_base.dart';
import '../../widgets/others/app_scaffold_widget.dart'; import '../../widgets/others/app_scaffold_widget.dart';
class DeliveryConfirmedPage extends StatelessWidget { class DeliveryConfirmedPage extends StatelessWidget {
final dynamic item; final PendingOrdersRes item;
DeliveryConfirmedPage(this.item); DeliveryConfirmedPage(this.item);
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return AppScaffold( return BaseView<OrdersViewModel>(
body: SafeArea( builder: (_, model, w) => AppScaffold(
child: Container( body: SafeArea(
color: Theme.of(context).primaryColor, child: Container(
child: ListView( color: Theme.of(context).primaryColor,
children: <Widget>[ child: ListView(
Column( children: <Widget>[
children: <Widget>[ Column(
Column( children: <Widget>[
children: <Widget>[ Column(
Container( children: <Widget>[
child: Container( Container(
alignment: Alignment.topLeft, child: Container(
child: IconButton( alignment: Alignment.topLeft,
color: Colors.white, child: IconButton(
iconSize: 40, color: Colors.white,
icon: Icon(Icons.arrow_back), iconSize: 40,
onPressed: () { icon: Icon(Icons.arrow_back),
Navigator.pop(context); onPressed: () {
}, Navigator.pop(context);
},
),
), ),
), ),
), Container(
Container( child: Column(
child: Column( children: <Widget>[
children: <Widget>[ Container(
Container( width: MediaQuery.of(context).size.width,
width: MediaQuery.of(context).size.width, height: MediaQuery.of(context).size.width * 0.7,
height: MediaQuery.of(context).size.width * 0.7, padding: EdgeInsets.only(
padding: EdgeInsets.only( top: MediaQuery.of(context).size.width * 0.2,
top: MediaQuery.of(context).size.width * ),
0.2, decoration: BoxDecoration(
), color: Colors.white10,
decoration: BoxDecoration( shape: BoxShape.circle),
color: Colors.white10, child: Column(
shape: BoxShape.circle), children: <Widget>[
child: Column( Icon(
children: <Widget>[ Icons.check_circle,
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(
color: Colors.white, 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(
Stack( children: <Widget>[
children: <Widget>[ Container(
Container( width: MediaQuery.of(context).size.width,
width: MediaQuery.of(context).size.width, height: 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)),
), ),
child: Column( Container(
mainAxisAlignment: MainAxisAlignment.end, width: MediaQuery.of(context).size.width,
crossAxisAlignment: CrossAxisAlignment.center, //800,
children: <Widget>[ height: MediaQuery.of(context).size.width * 1.2,
Container( //440,
margin: EdgeInsets.only( margin: EdgeInsets.only(top: 60),
bottom: MediaQuery.of(context).size.width * decoration: BoxDecoration(
0.15, //50 color: Colors.white,
), borderRadius: BorderRadius.only(
child: Column( topLeft: Radius.circular(80),
children: <Widget>[ topRight: Radius.circular(80)),
FlatButton.icon( ),
padding: EdgeInsets.all(8), child: Column(
color: Colors.orangeAccent, mainAxisAlignment: MainAxisAlignment.end,
shape: RoundedRectangleBorder( crossAxisAlignment: CrossAxisAlignment.center,
borderRadius: children: <Widget>[
new BorderRadius.circular(10.0), Container(
), margin: EdgeInsets.only(
label: Text( bottom: MediaQuery.of(context).size.width *
TranslationBase.of(context).addNoteBtn, 0.15, //50
style: TextStyle(color: Colors.white), ),
child: Column(
children: <Widget>[
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( SizedBox(
Icons.mode_edit, height:
color: Colors.white, MediaQuery.of(context).size.width *
0.1, //20,
), ),
onPressed: () {}, Container(
), margin: EdgeInsets.all(10),
SizedBox( child: SecondaryButton(
height: MediaQuery.of(context).size.width * label: TranslationBase.of(context)
0.1, //20, .nextDelivery,
), onTap: () {
Container( getNextOrder(context, model);
margin: EdgeInsets.all(10), },
child: SecondaryButton( ),
label: TranslationBase.of(context)
.nextDelivery,
onTap: () {},
), ),
), ],
], ),
), ),
), ],
], ),
), ),
), CustomerBriefCard(
CustomerBriefCard( itemId: item.orderID,
itemId: item.patientID, customerFirstName: item.firstName,
customerFirstName: item.firstName, customerLastName: item.lastName,
customerLastName: item.lastName, mobileNo: item.mobileNumber,
mobileNo: item.mobileNumber, totalPayment: item.amount,
totalPayment: item.amount, deliveryTime: item.orderCreatedOn),
deliveryTime: item.orderCreatedOn), ],
], ),
), ],
], ),
), ],
], ),
), ),
), ),
), ),
); );
} }
getNextOrder(BuildContext context, OrdersViewModel model) async {
NextOrderRequestModel nextOrderRequestModel = NextOrderRequestModel(
pageIndex: 0,
pageSize: 0,
latitude: "46.621730",
longitude: "24.797682",
searchKey: "");
await model.nextOrder(nextOrderRequestModel);
if (model.state == ViewState.ErrorLocal) {
Utils.showErrorToast(model.error);
} else {
if (model.nextOrdersList != null && model.nextOrdersList.length == 0) {
Utils.showErrorToast("No Items in the list");
} else {
Navigator.pushReplacement(
context,
MaterialPageRoute(
builder: (context) => InformationPage(model.nextOrdersList[0]),
),
);
}
}
}
} }

File diff suppressed because one or more lines are too long

@ -4,7 +4,7 @@ import '../../uitl/date_uitl.dart';
import '../../uitl/translations_delegate_base.dart'; import '../../uitl/translations_delegate_base.dart';
class CustomerBriefCard extends StatelessWidget { class CustomerBriefCard extends StatelessWidget {
final String itemId; final int itemId;
final String time; final String time;
final String customerFirstName; final String customerFirstName;
final String customerLastName; final String customerLastName;

Loading…
Cancel
Save