From bd2254491c6051cf377823209971348acea7176b Mon Sep 17 00:00:00 2001 From: jammal Date: Mon, 19 Oct 2020 14:35:20 +0300 Subject: [PATCH] done ER service --- android/app/build.gradle | 30 ++++++-- android/app/src/main/AndroidManifest.xml | 2 +- ios/Runner/AppDelegate.swift | 2 + lib/config/config.dart | 3 +- lib/core/model/er/PatientER.dart | 2 +- lib/core/model/er/PickUpRequestPresOrder.dart | 2 +- lib/core/service/er/am_service.dart | 24 ++++++- .../viewModels/er/am_request_view_model.dart | 14 ++++ lib/core/viewModels/qr_view_model.dart | 41 +++++------ lib/pages/ErService/AmbulanceReq.dart | 9 +-- .../AmbulanceRequestIndex.dart | 71 ++++++++++++++++++- .../PickupLocation.dart | 27 ++++++- .../SelectTransportationMethod.dart | 1 - lib/pages/ErService/OrderLogPage.dart | 24 +++++++ pubspec.yaml | 6 +- 15 files changed, 213 insertions(+), 45 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index 9640ea61..5d196986 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -27,7 +27,7 @@ apply plugin: 'com.google.gms.google-services' apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { - compileSdkVersion 28 + compileSdkVersion 30 sourceSets { main.java.srcDirs += 'src/main/kotlin' @@ -41,19 +41,28 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.cloud.diplomaticquarterapp" minSdkVersion 21 - targetSdkVersion 28 + targetSdkVersion 30 versionCode flutterVersionCode.toInteger() versionName flutterVersionName multiDexEnabled true - + } buildTypes { + debug {} release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig signingConfigs.debug } + staging { + // Specifies a sorted list of fallback build types that the + // plugin should try to use when a dependency does not include a + // "staging" build type. You may specify as many fallbacks as you + // like, and the plugin selects the first build type that's + // available in the dependency. + matchingFallbacks = ['debug', 'qa', 'release'] + } } } @@ -63,8 +72,15 @@ flutter { dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation "com.google.firebase:firebase-messaging:20.1.0" - implementation 'pub.devrel:easypermissions:0.4.0' - - + implementation "com.google.firebase:firebase-messaging:20.3.0" + implementation 'pub.devrel:easypermissions:0.4.0' + implementation 'com.google.firebase:firebase-inappmessaging-display:17.2.0' + implementation 'com.google.guava:guava:27.0.1-android' + // Dependency on local binaries + implementation fileTree(dir: 'libs', include: ['*.jar']) + + // Dependency on a remote binary +// implementation 'com.example.android:app-magic:12.3' + + } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 8c32edfd..749928d0 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -73,7 +73,7 @@ android:value="2" /> + android:value="AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA"/> diff --git a/ios/Runner/AppDelegate.swift b/ios/Runner/AppDelegate.swift index 70693e4a..23dd69b8 100644 --- a/ios/Runner/AppDelegate.swift +++ b/ios/Runner/AppDelegate.swift @@ -1,5 +1,6 @@ import UIKit import Flutter +import GoogleMaps @UIApplicationMain @objc class AppDelegate: FlutterAppDelegate { @@ -7,6 +8,7 @@ import Flutter _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { + GMSServices.provideAPIKey("AIzaSyCiiJiHkocPbcziHt9O8rGWavDrxHRQys8") GeneratedPluginRegistrant.register(with: self) return super.application(application, didFinishLaunchingWithOptions: launchOptions) } diff --git a/lib/config/config.dart b/lib/config/config.dart index a3ce19e9..6513f03b 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -6,7 +6,7 @@ import 'package:diplomaticquarterapp/widgets/mobile-no/mobile_no.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://hmgwebservices.com/'; +const BASE_URL = 'https://uat.hmgwebservices.com/'; const GET_PROJECT = 'Services/Lists.svc/REST/GetProject'; @@ -60,6 +60,7 @@ const GET_NEAREST_HOSPITAL = const GET_AMBULANCE_REQUEST = 'Services/Patients.svc/REST/PatientER_RRT_GetAllTransportationMethod'; const GET_PATIENT_ALL_PRES_ORDERS= 'Services/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; const GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID= 'Services/Patients.svc/REST/PatientER_RRT_GetPickUpRequestByPresOrderID'; +const UPDATE_PRESS_ORDER= 'Services/Patients.svc/REST/PatientER_UpdatePresOrder'; ///FindUs const GET_FINDUS_REQUEST = 'Services/Lists.svc/REST/Get_HMG_Locations'; diff --git a/lib/core/model/er/PatientER.dart b/lib/core/model/er/PatientER.dart index d0827311..f1694f9e 100644 --- a/lib/core/model/er/PatientER.dart +++ b/lib/core/model/er/PatientER.dart @@ -36,7 +36,7 @@ class PatientER { int projectID; int createdBy; int lineItemNo; - int cost; + double cost; double vAT; double totalPrice; String pickupLocationLattitude; diff --git a/lib/core/model/er/PickUpRequestPresOrder.dart b/lib/core/model/er/PickUpRequestPresOrder.dart index 9ce3e678..376e30ae 100644 --- a/lib/core/model/er/PickUpRequestPresOrder.dart +++ b/lib/core/model/er/PickUpRequestPresOrder.dart @@ -18,7 +18,7 @@ class PickUpRequestPresOrder { int pickupSpot; dynamic dropoffLocationId; int transportationMethodId; - int cost; + double cost; double vAT; double totalPrice; int amountCollected; diff --git a/lib/core/service/er/am_service.dart b/lib/core/service/er/am_service.dart index b654e0eb..1e8480d4 100644 --- a/lib/core/service/er/am_service.dart +++ b/lib/core/service/er/am_service.dart @@ -4,6 +4,7 @@ import 'package:diplomaticquarterapp/core/enum/OrderService.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; +import 'package:flutter/cupertino.dart'; import '../base_service.dart'; class AmService extends BaseService { @@ -35,6 +36,7 @@ class AmService extends BaseService { Future getPatientAllPresOrdersList() async { hasError = false; hasPendingOrder = false; + pickUpRequestPresOrder = null; await baseAppClient.post(GET_PATIENT_ALL_PRES_ORDERS, onSuccess: (dynamic response, int statusCode) { patientAllPresOrdersList.clear(); @@ -58,12 +60,11 @@ class AmService extends BaseService { Future getOrderDetails() async { hasError = false; - hasPendingOrder = false; Map body = Map(); body['PresOrderID'] = pendingOrderID; + body['isDentalAllowedBackend'] = false; await baseAppClient.post(GET_PICK_UP_REQUEST_BY_PRES_ORDER_ID, onSuccess: (dynamic response, int statusCode) { - patientAllPresOrdersList.clear(); response['PatientER_RRT_GetPickUpRequestByPresOrderIDList'] .forEach((item) { pickUpRequestPresOrder = PickUpRequestPresOrder.fromJson(item); @@ -71,6 +72,23 @@ class AmService extends BaseService { }, onFailure: (String error, int statusCode) { hasError = true; super.error = error; - }, body: Map()); + }, body: body); + } + + Future updatePressOrder({@required int presOrderID}) async { + hasError = false; + Map body = Map(); + body['PresOrderID'] = presOrderID; + body['EditedBy'] = 3; + body['RejectionReason'] = ''; + body['PresOrderStatus'] = OrderService.AMBULANCE.getIdOrderService(); + body['isDentalAllowedBackend'] = false; + await baseAppClient.post(UPDATE_PRESS_ORDER, + onSuccess: (dynamic response, int statusCode) { + + }, onFailure: (String error, int statusCode) { + hasError = true; + super.error = error; + }, body: body); } } diff --git a/lib/core/viewModels/er/am_request_view_model.dart b/lib/core/viewModels/er/am_request_view_model.dart index fbd3d95d..222a3f8c 100644 --- a/lib/core/viewModels/er/am_request_view_model.dart +++ b/lib/core/viewModels/er/am_request_view_model.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; +import 'package:diplomaticquarterapp/core/model/er/PickUpRequestPresOrder.dart'; import 'package:diplomaticquarterapp/core/model/er/get_all_transportation_method_list_model.dart'; import 'package:diplomaticquarterapp/core/model/hospitals/hospitals_model.dart'; import 'package:diplomaticquarterapp/core/service/er/am_service.dart'; @@ -7,6 +8,7 @@ import 'package:diplomaticquarterapp/core/service/hospital_service.dart'; import 'package:diplomaticquarterapp/core/service/medical/medical_service.dart'; import 'package:diplomaticquarterapp/core/viewModels/base_view_model.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:flutter/cupertino.dart'; import '../base_view_model.dart'; import '../../../locator.dart'; @@ -28,6 +30,8 @@ class AmRequestViewModel extends BaseViewModel { bool get hasPendingOrder =>_amService.hasPendingOrder; + PickUpRequestPresOrder get pickUpRequestPresOrder =>_amService.pickUpRequestPresOrder; + Future getAppointmentHistory() async { setState(ViewState.BusyLocal); await _medicalService.getAppointmentHistory(isActiveAppointment: true); @@ -79,4 +83,14 @@ class AmRequestViewModel extends BaseViewModel { } else setState(ViewState.Idle); } + + Future updatePressOrder({@required int presOrderID}) async { + setState(ViewState.Busy); + await _amService.updatePressOrder(presOrderID: presOrderID); + if (_hospitalService.hasError) { + error = _hospitalService.error; + setState(ViewState.Error); + } else + getPatientAllPresOrdersList(); + } } diff --git a/lib/core/viewModels/qr_view_model.dart b/lib/core/viewModels/qr_view_model.dart index cc03d9ab..03c88462 100644 --- a/lib/core/viewModels/qr_view_model.dart +++ b/lib/core/viewModels/qr_view_model.dart @@ -1,6 +1,6 @@ import 'dart:convert'; -import 'package:barcode_scan/platform_wrapper.dart'; +// import 'package:barcode_scan/platform_wrapper.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/enum/viewstate.dart'; import 'package:diplomaticquarterapp/core/model/qr/qr_parking_model.dart'; @@ -14,25 +14,26 @@ class QrViewModel extends BaseViewModel { QRParkingModel qrParkingModel; readQr() async { - var result = await BarcodeScanner.scan(); - var data = json.decode(result.rawContent); - var qRParkingID = data['QRParkingID']; - setState(ViewState.BusyLocal); - await _qrService.getQRParkingByID(qRParkingID); - if (_qrService.hasError) { - error = _qrService.error; - setState(ViewState.ErrorLocal); - } else { - if (_qrService.qRParkingList.length > 0) { - qrParkingModel = _qrService.qRParkingList[0]; - await sharedPref.setObject(IS_GO_TO_PARKING, qrParkingModel); - isSavePark = true; - setState(ViewState.Idle); - } else { - error = "Invalid Qr Code"; - setState(ViewState.ErrorLocal); - } - } + //TODO fix the barcode scan + // var result = await BarcodeScanner.scan(); + // var data = json.decode(result.rawContent); + // var qRParkingID = data['QRParkingID']; + // setState(ViewState.BusyLocal); + // await _qrService.getQRParkingByID(qRParkingID); + // if (_qrService.hasError) { + // error = _qrService.error; + // setState(ViewState.ErrorLocal); + // } else { + // if (_qrService.qRParkingList.length > 0) { + // qrParkingModel = _qrService.qRParkingList[0]; + // await sharedPref.setObject(IS_GO_TO_PARKING, qrParkingModel); + // isSavePark = true; + // setState(ViewState.Idle); + // } else { + // error = "Invalid Qr Code"; + // setState(ViewState.ErrorLocal); + // } + // } } getIsSaveParking() async { diff --git a/lib/pages/ErService/AmbulanceReq.dart b/lib/pages/ErService/AmbulanceReq.dart index ec96f482..413d80e6 100644 --- a/lib/pages/ErService/AmbulanceReq.dart +++ b/lib/pages/ErService/AmbulanceReq.dart @@ -3,6 +3,9 @@ import 'package:diplomaticquarterapp/core/viewModels/medical/prescriptions_view_ import 'package:diplomaticquarterapp/pages/base/base_view.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_history_page.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_page.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'dart:ui'; @@ -66,7 +69,7 @@ class _AmbulanceReqState extends State child: Container( height: 60.0, margin: EdgeInsets.only(top: 10.0), - width: MediaQuery.of(context).size.width * 0.9, + width: MediaQuery.of(context).size.width * 0.93, decoration: BoxDecoration( border: Border( bottom: BorderSide( @@ -114,9 +117,7 @@ class _AmbulanceReqState extends State physics: BouncingScrollPhysics(), controller: _tabController, children: [ - model.hasPendingOrder - ? Container() - : AmbulanceRequestIndexPage( + AmbulanceRequestIndexPage( amRequestViewModel: model, ), OrderLogPage( diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart index 55e75e22..e4b923b2 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/AmbulanceRequestIndex.dart @@ -1,8 +1,13 @@ import 'package:diplomaticquarterapp/core/model/er/PatientER.dart'; import 'package:diplomaticquarterapp/core/viewModels/er/am_request_view_model.dart'; import 'package:diplomaticquarterapp/pages/ErService/widgets/StepsWidget.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; +import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; import 'BillAmount.dart'; import 'PickupLocation.dart'; @@ -40,7 +45,71 @@ class _AmbulanceRequestIndexPageState extends State { @override Widget build(BuildContext context) { return AppScaffold( - body: Column( + body: widget.amRequestViewModel.pickUpRequestPresOrder!=null + ? Column( + children: [ + SizedBox( + height: 80, + ), + Container( + margin: EdgeInsets.only(left: 18, right: 18), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(2), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + OrderLogItem( + title: 'Request ID', + value: widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID.toString(), + ), + OrderLogItem( + title: 'Status', + value: widget.amRequestViewModel.pickUpRequestPresOrder.ambulateDescription, + ), + OrderLogItem( + title: 'Last edit time', + value: DateUtil.getDayMonthYearDateFormatted( + DateUtil.convertStringToDate(widget.amRequestViewModel.pickUpRequestPresOrder.lastEditDate)), + ), + OrderLogItem( + title: 'Pickup Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder.pickupLocationName, + ), + OrderLogItem( + title: 'Drop off Location', + value: widget.amRequestViewModel.pickUpRequestPresOrder.dropoffLocationName, + ), + OrderLogItem( + title: 'Trasfaer way', + value: widget.amRequestViewModel.pickUpRequestPresOrder.title, + ), + Container( + padding: EdgeInsets.all(10), + width: double.maxFinite, + margin: EdgeInsets.only(bottom: 4,left: 4,right: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + color: Colors.white + ), + child: SecondaryButton( + color: Colors.red[900], + textColor: Colors.white, + label: TranslationBase.of(context).cancel, + onTap: () { + widget.amRequestViewModel.updatePressOrder(presOrderID:widget.amRequestViewModel.pickUpRequestPresOrder.presOrderID ); + }, + ), + ) + ], + ), + ), + ], + ):Column( children: [ SizedBox( height: 80, diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart index 795f4dcc..bb6db7c0 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/PickupLocation.dart @@ -73,7 +73,7 @@ class _PickupLocationState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - if (widget.patientER.direction == 1) + if (widget.patientER.direction == 0) Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -310,7 +310,7 @@ class _PickupLocationState extends State { context, MaterialPageRoute( builder: (context) => PlacePicker( - apiKey: 'AIzaSyCiD4YqVqLNYbt8-htvFy4Wp8XSph9E3wM​', + apiKey: 'AIzaSyDiXnCO00li4V7Ioa2YZ_M4ECxRsu_P9tA', // Put YOUR OWN KEY here. onPlacePicked: (PickResult result) { print(result.adrAddress); @@ -319,6 +319,29 @@ class _PickupLocationState extends State { }); Navigator.of(context).pop(); }, + selectedPlaceWidgetBuilder: (_, selectedPlace, state, isSearchBarFocused) { + print("state: $state, isSearchBarFocused: $isSearchBarFocused"); + return isSearchBarFocused + ? Container() + : FloatingCard( + bottomPosition: 0.0, // MediaQuery.of(context) will cause rebuild. See MediaQuery document for the information. + leftPosition: 0.0, + rightPosition: 0.0, + width: 500, + borderRadius: BorderRadius.circular(12.0), + child: state == SearchingState.Searching + ? Center(child: CircularProgressIndicator()) + : RaisedButton( + child: Text("Pick Here"), + onPressed: () { + // IMPORTANT: You MUST manage selectedPlace data yourself as using this build will not invoke onPlacePicker as + // this will override default 'Select here' Button. + print("do something with [selectedPlace] data"); + Navigator.of(context).pop(); + }, + ), + ); + }, initialPosition: LatLng(_latitude, _longitude), useCurrentLocation: true, ), diff --git a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart index 59c3b85c..563e388a 100644 --- a/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart +++ b/lib/pages/ErService/AmbulanceRequestIndexPages/SelectTransportationMethod.dart @@ -294,7 +294,6 @@ class _SelectTransportationMethodState widget.patientER.cost = _erTransportationMethod.price; widget.patientER.vAT = _erTransportationMethod.vAT ?? 0; widget.patientER.totalPrice = _erTransportationMethod.totalPrice; - widget.changeCurrentTab(1); }); }, diff --git a/lib/pages/ErService/OrderLogPage.dart b/lib/pages/ErService/OrderLogPage.dart index cbb508e5..6929cd0b 100644 --- a/lib/pages/ErService/OrderLogPage.dart +++ b/lib/pages/ErService/OrderLogPage.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/core/model/er/PatientAllPresOrders.dart'; import 'package:diplomaticquarterapp/core/viewModels/er/am_request_view_model.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/buttons/secondary_button.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; import 'package:diplomaticquarterapp/widgets/others/OrderLogItem.dart'; import 'package:flutter/cupertino.dart'; @@ -53,6 +55,28 @@ class OrderLogPage extends StatelessWidget { value: amRequestViewModel .patientAllPresOrdersList[index].dropoffLocationName, ), + if(amRequestViewModel.patientAllPresOrdersList[index].status==1) + Container( + padding: EdgeInsets.all(10), + width: double.maxFinite, + margin: EdgeInsets.only(bottom: 4,left: 4,right: 4), + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + bottomRight: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + color: Colors.white + ), + child: SecondaryButton( + color: Colors.red[900], + textColor: Colors.white, + label: TranslationBase.of(context).cancel, + onTap: () { + amRequestViewModel.updatePressOrder(presOrderID:amRequestViewModel.pickUpRequestPresOrder.presOrderID ); + + }, + ), + ) ], ), ), diff --git a/pubspec.yaml b/pubspec.yaml index f7e1e67a..fc385b85 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -75,8 +75,8 @@ dependencies: # charts charts_flutter: ^0.9.0 - # Qr code Scanner - barcode_scan: ^3.0.1 + # Qr code Scanner TODO fix it + #barcode_scan: ^3.0.1 # Rating Stars rating_bar: ^0.2.0 @@ -136,7 +136,7 @@ dependencies: #google maps places - google_maps_place_picker: ^0.10.0 + google_maps_place_picker: ^1.0.0 #Dependencies for video call implementation native_device_orientation: ^0.3.0