From 3774d3cf3101a56d62c6d33ec7ee32a1a5609398 Mon Sep 17 00:00:00 2001 From: Josh Patra Date: Sat, 25 Feb 2023 22:37:56 -0500 Subject: [PATCH 1/3] sell fixes --- lib/sell.dart | 66 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 46 insertions(+), 20 deletions(-) diff --git a/lib/sell.dart b/lib/sell.dart index f28b608..3734616 100644 --- a/lib/sell.dart +++ b/lib/sell.dart @@ -8,9 +8,25 @@ class SellScreen extends StatefulWidget { } class _SellScreenState extends State { + Map values = { + 'Busch Dining Hall': false, + 'Livingston Dining Hall': false, + 'Brower Dining Hall': false, + 'Neilson Dining Hall': false, + 'Cafe West': false, + 'Cook Cafe': false, + 'Douglass Cafe': false, + 'Harvest INFH': false, + 'Kilmer\'s Market': false, + 'College Ave Dining Hall': false, + 'Red Pine Pizza': false, + 'Rock Cafe': false, + 'Sbarro': false, + 'Woody\'s Cafe': false, + }; @override Widget build(BuildContext context) { - TimeOfDay _time = TimeOfDay.now(); + TimeOfDay time = TimeOfDay.now(); return Scaffold( appBar: AppBar( title: const Text('Sell'), @@ -21,24 +37,40 @@ class _SellScreenState extends State { children: [ Icon(Icons.store_mall_directory, color: Colors.red), const Text('Place'), - ListTile( - title: Text(_time.format(context)), - onTap: () { - Future selectedTime = showTimePicker( - context: context, - initialTime: _time, - ); - setState(() { - selectedTime.then((value) => _time = value!); - _time = TimeOfDay(hour: 10, minute: 00); - }); - }, + ConstrainedBox( + constraints: BoxConstraints.expand(height: 100), + child: ListView( + children: values.keys.map((String key) { + return CheckboxListTile( + title: Text(key), + value: values[key], + onChanged: (bool? value) { + setState(() { + values[key] = value!; + }); + }, + ); + }).toList(), + ), ), LocationDropdown(), Icon(Icons.access_time, color: Colors.red), Expanded( child: const Text('Time'), ), + ListTile( + title: Text(time.format(context)), + onTap: () { + Future selectedTime = showTimePicker( + context: context, + initialTime: time, + ); + setState(() { + selectedTime.then((value) => time = value!); + time = TimeOfDay(hour: 10, minute: 00); + }); + }, + ), Icon(Icons.attach_money, color: Colors.red), Expanded( child: const Text('Cost'), @@ -49,13 +81,7 @@ class _SellScreenState extends State { } } -const List list = [ - 'Brower', - 'BDH', - 'LDH', - 'Neilson', - 'Woody\'s' -]; +const List list = ['Brower', 'BDH', 'LDH', 'Neilson', 'Woody\'s']; class LocationDropdown extends StatefulWidget { const LocationDropdown({super.key}); From 4424932fed7110505ab23535529a80a332ccbf73 Mon Sep 17 00:00:00 2001 From: Ashish Bailkeri Date: Sat, 25 Feb 2023 22:38:44 -0500 Subject: [PATCH 2/3] Seller Filtering --- lib/meetings.dart | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/meetings.dart b/lib/meetings.dart index f09c4e6..1b094cb 100644 --- a/lib/meetings.dart +++ b/lib/meetings.dart @@ -9,22 +9,29 @@ class TimeRange { TimeRange(this.startTime, this.endTime); } +class PriceRange { + int low = 0; + int high = 0; + + PriceRange(this.low, this.high); +} + class Seller { String name = ""; String uid = ""; - String location = ""; + List location; TimeRange availableTime; - Int64 price; + int price; Seller(this.name, this.uid, this.location, this.availableTime, this.price); } class Filter { - String? location; - Int64? price; + List? locations; + PriceRange? price; TimeRange? meetingTime; - Filter(this.location, this.price, this.meetingTime); + Filter(this.locations, this.price, this.meetingTime); } Future> getSellers(Filter filter) async { @@ -32,8 +39,10 @@ Future> getSellers(Filter filter) async { List sellers = List.empty(); final Query query = users - .where('location', isEqualTo: filter.location) - .where('price', isEqualTo: filter.price) + .where('location', arrayContainsAny: filter.locations) + .where('price', + isGreaterThanOrEqualTo: filter.price?.low, + isLessThanOrEqualTo: filter.price?.high) .where('start-time', isGreaterThanOrEqualTo: filter.meetingTime?.startTime) .where('end-time', isLessThanOrEqualTo: filter.meetingTime?.endTime); From 11d716cf0584d7239e898f52ce9d86866a2ffa34 Mon Sep 17 00:00:00 2001 From: Ashish Bailkeri Date: Sat, 25 Feb 2023 23:52:18 -0500 Subject: [PATCH 3/3] Updated Filtering --- lib/main_screen.dart | 9 +++++++++ lib/meetings.dart | 48 +++++++++++++++++++++++++++++++++----------- 2 files changed, 45 insertions(+), 12 deletions(-) diff --git a/lib/main_screen.dart b/lib/main_screen.dart index 8dac8fb..593c7a0 100644 --- a/lib/main_screen.dart +++ b/lib/main_screen.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; import 'meetings.dart'; +import 'package:cloud_firestore/cloud_firestore.dart'; + class MainScreen extends StatefulWidget { const MainScreen({Key? key}) : super(key: key); @@ -11,6 +13,13 @@ class MainScreen extends StatefulWidget { class _MainScreenState extends State { @override Widget build(BuildContext context) { + print("OOOGABOOGA"); + getSellers(Filter( + ["Sbarro"], + PriceRange(8, 10), + TimeRange(Timestamp.fromDate(DateTime(2023, 2, 26, 12, 50)), + Timestamp.fromDate(DateTime(2023, 2, 26, 11, 50))))) + .then((value) => {print(value)}); return Scaffold( appBar: AppBar( title: const Text("Main Beens"), diff --git a/lib/meetings.dart b/lib/meetings.dart index 1b094cb..824a799 100644 --- a/lib/meetings.dart +++ b/lib/meetings.dart @@ -3,8 +3,8 @@ import 'dart:ffi'; import 'package:cloud_firestore/cloud_firestore.dart'; class TimeRange { - late DateTime startTime; - late DateTime endTime; + late Timestamp startTime; + late Timestamp endTime; TimeRange(this.startTime, this.endTime); } @@ -16,14 +16,24 @@ class PriceRange { PriceRange(this.low, this.high); } -class Seller { +class Seller implements Comparable { String name = ""; String uid = ""; - List location; + List location; TimeRange availableTime; int price; Seller(this.name, this.uid, this.location, this.availableTime, this.price); + + @override + String toString() { + return "Name: $name, Price: $price"; + } + + @override + int compareTo(Seller other) { + return this.name.compareTo(other.name); + } } class Filter { @@ -36,21 +46,35 @@ class Filter { Future> getSellers(Filter filter) async { CollectionReference users = FirebaseFirestore.instance.collection('sellers'); - List sellers = List.empty(); + List sellers = List.empty(growable: true); final Query query = users .where('location', arrayContainsAny: filter.locations) .where('price', isGreaterThanOrEqualTo: filter.price?.low, - isLessThanOrEqualTo: filter.price?.high) - .where('start-time', - isGreaterThanOrEqualTo: filter.meetingTime?.startTime) - .where('end-time', isLessThanOrEqualTo: filter.meetingTime?.endTime); + isLessThanOrEqualTo: filter.price?.high); final QuerySnapshot snapshot = await query.get(); - for (var doc in snapshot.docs) { - sellers.add(Seller(doc["name"], doc["uid"], doc["location"], - TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + final startTime = filter.meetingTime?.endTime; + final endTime = filter.meetingTime?.startTime; + + if (startTime != null && endTime != null) { + var docs = snapshot.docs + .where((element) => + startTime.compareTo(element["start-time"]) > 0 || + element["start-time"] == (startTime)) + .where((element) => + endTime.compareTo(element["end-time"]) < 0 || + element["end-time"] == (endTime)); + for (var doc in docs) { + sellers.add(Seller(doc["name"], doc["uid"], doc["location"], + TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + } + } else { + for (var doc in snapshot.docs) { + sellers.add(Seller(doc["name"], doc["uid"], doc["location"], + TimeRange(doc["start-time"], doc["end-time"]), doc["price"])); + } } return sellers; }