diff --git a/lib/api/map_api.dart b/lib/api/map_api.dart index bf38431..44327a5 100644 --- a/lib/api/map_api.dart +++ b/lib/api/map_api.dart @@ -3,7 +3,9 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; +import 'package:mera_aadhar/firebase/booking_db.dart'; import 'package:mera_aadhar/fixtures/nearby_center_fixture.dart'; +import 'package:mera_aadhar/models/booking_model.dart'; import 'package:mera_aadhar/models/operator_model.dart'; import 'package:mera_aadhar/models/operator_data_model.dart'; import 'package:mera_aadhar/models/nearby_api_model.dart'; @@ -61,7 +63,23 @@ Future getAddressByLatLon(double lat, double lng) async{ return "${address.streetAddress}, ${address.region}, ${address.postal},"; } -Future, StreamGroup>> getAllOperatorsByMyLatLong(String lat, String lon) async{ +Future isOperatorBookingAvaliable(Operator operator, DateTime date, String time) async { + BookingDB bdb = BookingDB(); + List opBooking = await bdb.getOperatorIdBooking(operator.operatorId!); + for(int i=0; i, StreamGroup>> getAllOperatorsByMyLatLong(String lat, String lon, DateTime date, String time) async{ int rad = 5; NearbyApiResponse nearby = await fetchMapdataFixture(lat, lon, rad); while(nearby.len == null || nearby.len! == 0){ @@ -80,6 +98,12 @@ Future, StreamGroup>> getAllOperators List operators = await odb.getOperatorsByLatLong(latlon); for(final oper in operators){ print("found operator in vicinity with id! ${oper.operatorId!} with ${latlon}"); + + if(!(await isOperatorBookingAvaliable(oper, date, time))){ + print("unavaliable operator, skipping!"); + continue; + } + operatorIdMapOp[oper.operatorId!] = oper; // Maybe cache to special provider map Stream? opdata = await odb.getOperatorLiveLocationById(oper.operatorId!); diff --git a/lib/firebase/booking_db.dart b/lib/firebase/booking_db.dart index d3dd252..a76c17b 100644 --- a/lib/firebase/booking_db.dart +++ b/lib/firebase/booking_db.dart @@ -33,4 +33,22 @@ CollectionReference _collectionRef = else return null; } + Future> getOperatorIdBooking(String oId) async { + FirebaseAuth auth = FirebaseAuth.instance; + QuerySnapshot snap = await _collectionRef + .where('operatorId', isEqualTo: oId) + .orderBy('timestamp', descending: true) + .get(); + + List bookins = []; + for(int i=0; i); + if(b.bookingStatus! == "Completed") continue; + bookins.add(b); + } + + return bookins; + } + + } \ No newline at end of file diff --git a/lib/fixtures/booking_fixture.dart b/lib/fixtures/booking_fixture.dart index 3de49d1..9c9557a 100644 --- a/lib/fixtures/booking_fixture.dart +++ b/lib/fixtures/booking_fixture.dart @@ -3,7 +3,7 @@ import 'dart:convert'; class BookingFixture { static Booking dummyBooking(){ - Map data = jsonDecode('{"bookingId":1,"operatorId":"abcdefgh","bookingType":0,"phoneNo":"+918872276957","bookingLocation":{"lat":23.25564,"lon":21.22134},"userdata":{"phoneNo":"nil","type":0,"locationText":"Hostel O, Tiet"},"confirmOtp":"1234","paydata":{"type":"CASH","receipt":null,"status":"Success"},"bookingStatus":"Inprogress","slotTime":"01:00 AM","slotDate":"01 Jan 1998","timestamp":1660465314}'); + Map data = jsonDecode('{"bookingId":1,"operatorId":"abcdefgh","bookingType":0,"phoneNo":"+918872276957","bookingLocation":{"lat":23.25564,"lon":21.22134},"userdata":{"phoneNo":"nil","type":0,"locationText":"Hostel O, Tiet"},"confirmOtp":"+8++8","paydata":{"type":"CASH","receipt":null,"status":"Success"},"bookingStatus":"Inprogress","slotTime":"01:00 AM","slotDate":"01 Jan 1998","timestamp":1660465314}'); final Booking bookin = Booking.fromJson(data); return bookin; } diff --git a/lib/models/booking_model.dart b/lib/models/booking_model.dart index 4d18b88..e21ead1 100644 --- a/lib/models/booking_model.dart +++ b/lib/models/booking_model.dart @@ -49,7 +49,7 @@ class Booking { slotDate = json['slotDate']; timestamp = json['timestamp']; - date = json['date']; + date = json['date'] != null ? json['date'].toDate() : null; } Map toJson() { diff --git a/lib/screens/book_operator.dart b/lib/screens/book_operator.dart index 1d64b9b..c54b5cb 100644 --- a/lib/screens/book_operator.dart +++ b/lib/screens/book_operator.dart @@ -84,8 +84,8 @@ class _BookOperatorScreenScreenState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ), diff --git a/lib/screens/date_page.dart b/lib/screens/date_page.dart index cdc29a1..e5ae6a1 100644 --- a/lib/screens/date_page.dart +++ b/lib/screens/date_page.dart @@ -86,8 +86,8 @@ class _DatePageState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ), diff --git a/lib/screens/documentCheckPage.dart b/lib/screens/documentCheckPage.dart index 75d473b..8a0761f 100644 --- a/lib/screens/documentCheckPage.dart +++ b/lib/screens/documentCheckPage.dart @@ -43,8 +43,8 @@ class _DocumentCheckPageState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ), diff --git a/lib/screens/editAddressPage.dart b/lib/screens/editAddressPage.dart index 457f15e..6c92722 100644 --- a/lib/screens/editAddressPage.dart +++ b/lib/screens/editAddressPage.dart @@ -25,8 +25,8 @@ class _EditAddressPageState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ), diff --git a/lib/screens/modeSelectionPage.dart b/lib/screens/modeSelectionPage.dart index 23205ce..d73cff7 100644 --- a/lib/screens/modeSelectionPage.dart +++ b/lib/screens/modeSelectionPage.dart @@ -36,8 +36,8 @@ class _ModeSelectPageState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ), diff --git a/lib/screens/onBoardingPage.dart b/lib/screens/onBoardingPage.dart index f572663..8eaf116 100644 --- a/lib/screens/onBoardingPage.dart +++ b/lib/screens/onBoardingPage.dart @@ -79,11 +79,11 @@ class _OnBoardingScreenState extends State { Center( child: CircleAvatar( backgroundColor: Colors.white, - radius: 50, + radius: 40, child: Image.asset( - 'assets/logooo.png', - width: 100, - height: 100, + 'assets/aadharlogo.png', + width: 55, + height: 55, ), ), ), @@ -103,13 +103,15 @@ class _OnBoardingScreenState extends State { // textelement: translatedStrings["aadharUpdationOrEnrollmentAtYourHome"], ), WelcomeScreen( + vectorLink: "assets/time.png", - textelement: "Select your own Time Slot", + textelement: "Select your own Time Slot & operator", ), WelcomeScreen( vectorLink: "assets/review.png", - textelement: "Review your appointments", - ) + textelement: "Review your on-going appointments", + + ) ], ), ), diff --git a/lib/screens/operator_selection.dart b/lib/screens/operator_selection.dart index ca06eb6..87465e3 100644 --- a/lib/screens/operator_selection.dart +++ b/lib/screens/operator_selection.dart @@ -112,11 +112,11 @@ class _OperatorSelectionScreenState extends State { } } - void registerDeregisterOperators() async { + void registerDeregisterOperators(DateTime date, String time) async { String lat = pinLocation.latitude.toString(); String lon = pinLocation.longitude.toString(); Tuple2, StreamGroup> rdata = - await getAllOperatorsByMyLatLong(lat, lon); + await getAllOperatorsByMyLatLong(lat, lon, date, time); StreamGroup streamgroup = rdata.item2; idToOperator = rdata.item1; @@ -132,7 +132,7 @@ class _OperatorSelectionScreenState extends State { }); } - openMapmyIndiaPlacePickerWidget() async { + openMapmyIndiaPlacePickerWidget(BuildContext context) async { ReverseGeocodePlace place; // Platform messages may fail, so we use a try/catch PlatformException. try { @@ -158,16 +158,30 @@ class _OperatorSelectionScreenState extends State { pinLocation = LatLng(double.parse(place.lat!), double.parse(place.lng!)); } - setState(() { + // setState(() { // _locationText = match.group(0)!; _mapController.easeCamera(CameraUpdate.newLatLngZoom(pinLocation, 14)); addOrUpdateLocationMarker(pinLocation); - registerDeregisterOperators(); - }); + + // }); // Change to time and slot - Navigator.push( + await Navigator.push( context, MaterialPageRoute(builder: (context) => DatePage())); + + + + DateTime? date = Provider.of(context, listen: false).booking.date; + String? time = Provider.of(context, listen: false).booking.slotTime; + + while(date == null || time == null){ + showSnackBar("Please select a valid date and time!!", context); + await Navigator.push( + context, MaterialPageRoute(builder: (context) => DatePage())); + date = Provider.of(context, listen: false).booking.date; + time = Provider.of(context, listen: false).booking.slotTime; + } + registerDeregisterOperators(date, time); } void utilHighlightOperator(Symbol symbol, bool highlight) async { @@ -291,7 +305,7 @@ class _OperatorSelectionScreenState extends State { icon: new Icon(Icons.edit), highlightColor: Colors.pink, onPressed: () { - openMapmyIndiaPlacePickerWidget(); + openMapmyIndiaPlacePickerWidget(context); }, ), ), @@ -315,8 +329,13 @@ class _OperatorSelectionScreenState extends State { ), ), ), - ], - ) + + + ], + + ) + + : Column( children: [ const Icon( @@ -368,9 +387,10 @@ class _OperatorSelectionScreenState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), + ), ), const SizedBox( @@ -403,14 +423,14 @@ class _OperatorSelectionScreenState extends State { "icon", "assets/operator_pin_icon.png"); addImageFromAsset( "iconhigh", "assets/icon_op_yellow.png"); - openMapmyIndiaPlacePickerWidget(); + openMapmyIndiaPlacePickerWidget(context); }, ), ), )), GestureDetector( onTap: () { - openMapmyIndiaPlacePickerWidget(); + openMapmyIndiaPlacePickerWidget(context); }, child: Padding( padding: EdgeInsets.all(25), diff --git a/lib/screens/serviceSelectionPage.dart b/lib/screens/serviceSelectionPage.dart index 1b86c57..aed2864 100644 --- a/lib/screens/serviceSelectionPage.dart +++ b/lib/screens/serviceSelectionPage.dart @@ -240,11 +240,11 @@ print(Provider.of(context, listen: false) Padding( padding: const EdgeInsets.all(8.0), child: Text( - 'Choose if you are a senior citizen or differently abled, otherwise go ahead.', + 'Choose if you are a senior citizen (age>60) or differently abled, otherwise go ahead.', style: GoogleFonts.poppins( textStyle: const TextStyle( fontWeight: FontWeight.w500, - fontSize: 15, + fontSize: 13, color: Colors.black, ), ), diff --git a/lib/screens/slot_page.dart b/lib/screens/slot_page.dart index 48ad99a..19d6b89 100644 --- a/lib/screens/slot_page.dart +++ b/lib/screens/slot_page.dart @@ -73,8 +73,8 @@ class _SlotPageState extends State { radius: 40, child: Image.asset( 'assets/aadharlogo.png', - width: 35, - height: 35, + width: 55, + height: 55, ), ), ),