Merge branch 'DBBranch'
This commit is contained in:
commit
e50c681d54
3 changed files with 283 additions and 55 deletions
|
@ -33,7 +33,8 @@ public class Booking {
|
||||||
}
|
}
|
||||||
private Status status;
|
private Status status;
|
||||||
|
|
||||||
int rating; //out of 5
|
private int rating; //out of 5
|
||||||
|
private String comment;
|
||||||
|
|
||||||
public Booking(int starth, int startmin, int endh, int endmin, int day, int month, int year,
|
public Booking(int starth, int startmin, int endh, int endmin, int day, int month, int year,
|
||||||
ServiceProvider serviceprovider, HomeOwner homeowner, Service service){
|
ServiceProvider serviceprovider, HomeOwner homeowner, Service service){
|
||||||
|
@ -143,5 +144,11 @@ public class Booking {
|
||||||
this.rating = rating;
|
this.rating = rating;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setComment(String comment) {
|
||||||
|
this.comment = comment;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ import com.uottawa.olympus.olympusservices.Booking.Status;
|
||||||
public class DBHelper extends SQLiteOpenHelper {
|
public class DBHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
//version of db used for update method
|
//version of db used for update method
|
||||||
private static final int DB_VERSION = 5;
|
private static final int DB_VERSION = 6;
|
||||||
//name of db in app data
|
//name of db in app data
|
||||||
private static final String DB_NAME = "UsersDB.db";
|
private static final String DB_NAME = "UsersDB.db";
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
private static final String COLUMN_BOOKINGEND = "endtime";
|
private static final String COLUMN_BOOKINGEND = "endtime";
|
||||||
private static final String COLUMN_BOOKINGSTATUS = "status";
|
private static final String COLUMN_BOOKINGSTATUS = "status";
|
||||||
private static final String COLUMN_RATING = "rating";
|
private static final String COLUMN_RATING = "rating";
|
||||||
|
private static final String COLUMN_COMMENT = "comment";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates an instance of DBHelper to allow activities to access and
|
* Creates an instance of DBHelper to allow activities to access and
|
||||||
|
@ -191,7 +192,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
+ COLUMN_BOOKINGSTART + " REAL, "
|
+ COLUMN_BOOKINGSTART + " REAL, "
|
||||||
+ COLUMN_BOOKINGEND + " REAL, "
|
+ COLUMN_BOOKINGEND + " REAL, "
|
||||||
+ COLUMN_BOOKINGSTATUS + " TEXT, "
|
+ COLUMN_BOOKINGSTATUS + " TEXT, "
|
||||||
+ COLUMN_RATING + " REAL DEFAULT 0 "
|
+ COLUMN_RATING + " REAL DEFAULT 0, "
|
||||||
|
+ COLUMN_COMMENT + " TEXT DEFAULT ''"
|
||||||
+ ")";
|
+ ")";
|
||||||
db.execSQL(CREATE_BOOKING_TABLE);
|
db.execSQL(CREATE_BOOKING_TABLE);
|
||||||
}
|
}
|
||||||
|
@ -261,6 +263,9 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
+ COLUMN_BOOKINGSTATUS + " TEXT, "
|
+ COLUMN_BOOKINGSTATUS + " TEXT, "
|
||||||
+ COLUMN_RATING + " REAL DEFAULT 0 "
|
+ COLUMN_RATING + " REAL DEFAULT 0 "
|
||||||
+ ")");
|
+ ")");
|
||||||
|
case 5:
|
||||||
|
db.execSQL("ALTER TABLE " + TABLE_BOOKINGS + " ADD COLUMN " + COLUMN_COMMENT + " TEXT DEFAULT ''");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -331,6 +336,19 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
values.put(COLUMN_DESCRIPTION, description);
|
values.put(COLUMN_DESCRIPTION, description);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ContentValues contentValues = new ContentValues();
|
||||||
|
int[] setToZero = new int[]{0,0,0,0};
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_MONSTART, COLUMN_MONEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_TUESTART, COLUMN_TUEEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_WEDSTART, COLUMN_WEDEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_THUSTART, COLUMN_THUEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_FRISTART, COLUMN_FRIEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_SATSTART, COLUMN_SATEND, setToZero);
|
||||||
|
addAvailabilityToContentValues(contentValues, COLUMN_SUNSTART, COLUMN_SUNEND, setToZero);
|
||||||
|
contentValues.put(COLUMN_AVAILABILITYNAME, serviceProvider.getUsername());
|
||||||
|
|
||||||
|
writeDB.insert(TABLE_AVAILABILITY, null, contentValues);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writeDB.insert(TABLE_LOGIN, null, values);
|
writeDB.insert(TABLE_LOGIN, null, values);
|
||||||
|
@ -1029,18 +1047,18 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @param username
|
* @param username
|
||||||
* @return list of booking objects related to specified user
|
* @return list of booking objects related to specified user.
|
||||||
|
* Returns an empty list if no bookings found
|
||||||
*/
|
*/
|
||||||
public List<Booking> findBookings(String username){
|
public List<Booking> findBookings(String username){
|
||||||
List<Booking> bookingList = new ArrayList<>();
|
|
||||||
ServiceProvider serviceProvider = null;
|
ServiceProvider serviceProvider = null;
|
||||||
HomeOwner homeOwner = null;
|
HomeOwner homeOwner = null;
|
||||||
Cursor cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_LOGIN + " WHERE "
|
Cursor cursor = writeDB.rawQuery("SELECT " + COLUMN_USERTYPE + " FROM " + TABLE_LOGIN + " WHERE "
|
||||||
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?",
|
+ COLUMN_USERNAME + " = ?",
|
||||||
new String[] {username});
|
new String[] {username});
|
||||||
if (!cursor.moveToFirst() || cursor.getString(5).equals("Admin")) return bookingList;
|
if (!cursor.moveToFirst() || cursor.getString(0).equals("Admin")) return new ArrayList<>();
|
||||||
|
|
||||||
if (cursor.getString(5).equals("ServiceProvider")) {
|
if (cursor.getString(0).equals("ServiceProvider")) {
|
||||||
serviceProvider = (ServiceProvider)findUserByUsername(username);
|
serviceProvider = (ServiceProvider)findUserByUsername(username);
|
||||||
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
|
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
|
||||||
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?",
|
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?",
|
||||||
|
@ -1052,36 +1070,40 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
new String[]{username});
|
new String[]{username});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cursor.moveToFirst()){
|
return getBookings(cursor, serviceProvider, homeOwner);
|
||||||
for (int i=0; i<cursor.getCount(); i++){
|
|
||||||
int startTime = cursor.getInt(6);
|
|
||||||
int endTime = cursor.getInt(7);
|
|
||||||
int starth = startTime / 60;
|
|
||||||
int startmin = startTime % 60;
|
|
||||||
int endh = endTime / 60;
|
|
||||||
int endmin = endTime % 60;
|
|
||||||
int day = cursor.getInt(5);
|
|
||||||
int month = cursor.getInt(4);
|
|
||||||
int year = cursor.getInt(3);
|
|
||||||
String stat = cursor.getString(8);
|
|
||||||
Status status = (stat.equals("Pending")? Status.PENDING :
|
|
||||||
stat.equals("Confirmed")? Status.CONFIRMED : Status.CANCELLED);
|
|
||||||
ServiceProvider serviceprovider = (serviceProvider == null?
|
|
||||||
(ServiceProvider)findUserByUsername(cursor.getString(0)):serviceProvider);
|
|
||||||
HomeOwner homeowner = (homeOwner == null?
|
|
||||||
(HomeOwner) findUserByUsername(cursor.getString(1)):homeOwner);
|
|
||||||
Service service = findService(cursor.getString(3));
|
|
||||||
Booking booking = new Booking(starth, startmin, endh, endmin, day, month, year,
|
|
||||||
serviceprovider, homeowner, service);
|
|
||||||
booking.setStatus(status);
|
|
||||||
bookingList.add(booking);
|
|
||||||
|
|
||||||
cursor.moveToNext();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return bookingList;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param username
|
||||||
|
* @return list of booking objects related to specified user.
|
||||||
|
* Returns an empty list if no bookings found
|
||||||
|
*/
|
||||||
|
public List<Booking> findNonCancelledBookings(String username) {
|
||||||
|
List<Booking> bookingList = new ArrayList<>();
|
||||||
|
ServiceProvider serviceProvider = null;
|
||||||
|
HomeOwner homeOwner = null;
|
||||||
|
Cursor cursor = writeDB.rawQuery("SELECT " + COLUMN_USERTYPE + " FROM " + TABLE_LOGIN + " WHERE "
|
||||||
|
+ COLUMN_USERNAME + " = ?",
|
||||||
|
new String[]{username});
|
||||||
|
if (!cursor.moveToFirst() || cursor.getString(0).equals("Admin")) return bookingList;
|
||||||
|
|
||||||
|
if (cursor.getString(0).equals("ServiceProvider")) {
|
||||||
|
serviceProvider = (ServiceProvider) findUserByUsername(username);
|
||||||
|
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
|
||||||
|
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGSTATUS + " != ?",
|
||||||
|
new String[]{username, Status.CANCELLED.toString()});
|
||||||
|
} else {
|
||||||
|
homeOwner = (HomeOwner) findUserByUsername(username);
|
||||||
|
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
|
||||||
|
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGSTATUS + " != ?",
|
||||||
|
new String[]{username, Status.CANCELLED.toString()});
|
||||||
|
}
|
||||||
|
|
||||||
|
return getBookings(cursor, serviceProvider, homeOwner);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets status of specified booking to cancelled. Returns false if booking
|
* Sets status of specified booking to cancelled. Returns false if booking
|
||||||
|
@ -1105,6 +1127,17 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
return modifyBookingStatus(booking, Status.CANCELLED);
|
return modifyBookingStatus(booking, Status.CANCELLED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a rating for a specific booking, and updates the average rating for the service provider
|
||||||
|
* and service combination. The booking must have passed before a rating can be added.
|
||||||
|
* Note that the rating is final.
|
||||||
|
*
|
||||||
|
* @param booking Booking with rating and comment already included
|
||||||
|
* @return true if adding the rating was successful
|
||||||
|
*/
|
||||||
|
public boolean addRating(Booking booking){
|
||||||
|
return addRating(booking, booking.getRating(), booking.getComment());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a rating for a specific booking, and updates the average rating for the service provider
|
* Add a rating for a specific booking, and updates the average rating for the service provider
|
||||||
|
@ -1113,9 +1146,24 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
*
|
*
|
||||||
* @param booking
|
* @param booking
|
||||||
* @param rating
|
* @param rating
|
||||||
|
*
|
||||||
* @return true if adding the rating was successful
|
* @return true if adding the rating was successful
|
||||||
*/
|
*/
|
||||||
public boolean addRating(Booking booking, double rating){
|
public boolean addRating(Booking booking, double rating){
|
||||||
|
return addRating(booking, rating, "");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a rating for a specific booking, and updates the average rating for the service provider
|
||||||
|
* and service combination. The booking must have passed before a rating can be added.
|
||||||
|
* Note that the rating is final.
|
||||||
|
*
|
||||||
|
* @param booking
|
||||||
|
* @param rating
|
||||||
|
* @param comment
|
||||||
|
* @return true if adding the rating was successful
|
||||||
|
*/
|
||||||
|
public boolean addRating(Booking booking, double rating, String comment){
|
||||||
if (booking == null) return false;
|
if (booking == null) return false;
|
||||||
|
|
||||||
GregorianCalendar current = new GregorianCalendar();
|
GregorianCalendar current = new GregorianCalendar();
|
||||||
|
@ -1128,6 +1176,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
contentValues.put(COLUMN_RATING, rating);
|
contentValues.put(COLUMN_RATING, rating);
|
||||||
|
contentValues.put(COLUMN_COMMENT, comment);
|
||||||
|
|
||||||
|
|
||||||
boolean updated = writeDB.update(TABLE_BOOKINGS, contentValues,
|
boolean updated = writeDB.update(TABLE_BOOKINGS, contentValues,
|
||||||
|
@ -1177,8 +1226,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
* @param service
|
* @param service
|
||||||
* @return average rating of specified service provider and service combination
|
* @return average rating of specified service provider and service combination
|
||||||
*/
|
*/
|
||||||
public double getRatings(ServiceProvider serviceProvider, Service service){
|
public double getAverageRating(ServiceProvider serviceProvider, Service service){
|
||||||
return getRatings(serviceProvider.getUsername(), service.getName());
|
return getAverageRating(serviceProvider.getUsername(), service.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1188,7 +1237,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
* @param serviceName name of service
|
* @param serviceName name of service
|
||||||
* @return average rating of specified service provider and service combination
|
* @return average rating of specified service provider and service combination
|
||||||
*/
|
*/
|
||||||
public double getRatings(String serviceProviderName, String serviceName){
|
public double getAverageRating(String serviceProviderName, String serviceName){
|
||||||
serviceName = serviceName.trim().toLowerCase();
|
serviceName = serviceName.trim().toLowerCase();
|
||||||
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_AVERAGERATING},
|
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_AVERAGERATING},
|
||||||
COLUMN_SERVICEPROVIDERNAME + " = ? AND "
|
COLUMN_SERVICEPROVIDERNAME + " = ? AND "
|
||||||
|
@ -1202,6 +1251,56 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
return rating;
|
return rating;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of Strings in form [Homeowner username, rating, comment] for a specific
|
||||||
|
* service provider and service combination. Only includes bookings that have been rated.
|
||||||
|
*
|
||||||
|
* @param serviceProvider
|
||||||
|
* @param service
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<String[]> getAllRatingsAndComments(ServiceProvider serviceProvider, Service service){
|
||||||
|
return getAllRatingsAndComments(serviceProvider.getUsername(), service.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a list of Strings in form [Homeowner username, rating, comment] for a specific
|
||||||
|
* service provider and service combination. Only includes bookings that have been rated.
|
||||||
|
*
|
||||||
|
* @param serviceProviderName
|
||||||
|
* @param serviceName
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public List<String[]> getAllRatingsAndComments(String serviceProviderName, String serviceName){
|
||||||
|
return getAll("SELECT " + COLUMN_BOOKINGHOMEOWNER +", "
|
||||||
|
+ COLUMN_RATING + ", " + COLUMN_COMMENT + " FROM " + TABLE_BOOKINGS
|
||||||
|
+ " WHERE " + COLUMN_BOOKINGSERVICEPROVIDER + " = " + serviceProviderName
|
||||||
|
+ " AND " + COLUMN_BOOKINGSERVICE + " = " + serviceName
|
||||||
|
+ " AND " + COLUMN_RATING + " > 0");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String[] getSpecificRatingAndComment(String serviceProviderName, String serviceName,
|
||||||
|
int year, int month, int day, int starth, int startmin){
|
||||||
|
Cursor cursor = writeDB.query(TABLE_BOOKINGS,
|
||||||
|
new String[]{COLUMN_BOOKINGHOMEOWNER, COLUMN_RATING, COLUMN_COMMENT},
|
||||||
|
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGSERVICE + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||||
|
+ COLUMN_BOOKINGSTART + " = ? AND "
|
||||||
|
+ COLUMN_RATING + " > 0",
|
||||||
|
new String[]{serviceProviderName, serviceName, String.valueOf(year),
|
||||||
|
String.valueOf(month), String.valueOf(day), String.valueOf(starth*60+startmin)},
|
||||||
|
null, null, null, null);
|
||||||
|
if (cursor.moveToFirst()){
|
||||||
|
return new String[]{cursor.getString(0),
|
||||||
|
cursor.getString(1),cursor.getString(2)};
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the number of people who rated a service provider's service
|
* Returns the number of people who rated a service provider's service
|
||||||
*
|
*
|
||||||
|
@ -1308,14 +1407,15 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
List<String[]> providers = getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
|
List<String[]> providers = getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
|
||||||
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
|
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
|
||||||
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
|
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
|
||||||
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " "
|
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING
|
||||||
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
|
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
|
||||||
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
|
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
|
||||||
+ TABLE_LOGIN + "." + COLUMN_USERNAME
|
+ TABLE_LOGIN + "." + COLUMN_USERNAME
|
||||||
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
|
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
|
||||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
|
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
|
||||||
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
|
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
|
||||||
for (int i = 0; i < providers.size(); i++){
|
|
||||||
|
for (int i = providers.size()-1; i >= 0; i--){
|
||||||
if (!isProviderAvailable(providers.get(i)[0], year, month, day,
|
if (!isProviderAvailable(providers.get(i)[0], year, month, day,
|
||||||
starth, startmin, endh, endmin)){
|
starth, startmin, endh, endmin)){
|
||||||
providers.remove(i);
|
providers.remove(i);
|
||||||
|
@ -1347,7 +1447,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns list of [username, first name, last name, rating] of service providers
|
* Returns list of [username, first name, last name, rating] of service providers
|
||||||
* available at the specified time and have a rating equal to or above the specified rating
|
* available at the specified time and have a rating equal to or above the specified rating.
|
||||||
*
|
*
|
||||||
* @param serviceName name of service
|
* @param serviceName name of service
|
||||||
* @param rating minimum rating of filter
|
* @param rating minimum rating of filter
|
||||||
|
@ -1358,7 +1458,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
* @param startmin starting minute
|
* @param startmin starting minute
|
||||||
* @param endh ending hour
|
* @param endh ending hour
|
||||||
* @param endmin ending minute
|
* @param endmin ending minute
|
||||||
* @return List of [username, first name, last name, rating] of service providers
|
* @return List of Strings of [username, first name, last name, rating] of service providers
|
||||||
*/
|
*/
|
||||||
public List<String[]> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day,
|
public List<String[]> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day,
|
||||||
int starth, int startmin, int endh, int endmin){
|
int starth, int startmin, int endh, int endmin){
|
||||||
|
@ -1368,7 +1468,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
int i = providers.size()-1;
|
int i = providers.size()-1;
|
||||||
boolean allLowRatingsRemoved = false;
|
boolean allLowRatingsRemoved = false;
|
||||||
while (i>-1 && !allLowRatingsRemoved){
|
while (i>-1 && !allLowRatingsRemoved){
|
||||||
if (getRatings(providers.get(i)[0], serviceName)>=rating){
|
if (getAverageRating(providers.get(i)[0], serviceName)>=rating){
|
||||||
allLowRatingsRemoved = true;
|
allLowRatingsRemoved = true;
|
||||||
} else {
|
} else {
|
||||||
providers.remove(i--);
|
providers.remove(i--);
|
||||||
|
@ -1547,13 +1647,14 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||||
+ COLUMN_BOOKINGSTART + " = ? AND "
|
+ COLUMN_BOOKINGSTART + " = ? AND "
|
||||||
+ COLUMN_BOOKINGSTATUS + " != " + Status.CANCELLED.toString() + ")",
|
+ COLUMN_BOOKINGSTATUS + " != ?",
|
||||||
new String[] {booking.getServiceprovider().getUsername(),
|
new String[] {booking.getServiceprovider().getUsername(),
|
||||||
booking.getHomeowner().getUsername(),
|
booking.getHomeowner().getUsername(),
|
||||||
String.valueOf(booking.getYear()),
|
String.valueOf(booking.getYear()),
|
||||||
String.valueOf(booking.getMonth()),
|
String.valueOf(booking.getMonth()),
|
||||||
String.valueOf(booking.getDay()),
|
String.valueOf(booking.getDay()),
|
||||||
String.valueOf(booking.getStarth()*60 + booking.getStartmin())}) > 0;
|
String.valueOf(booking.getStarth()*60 + booking.getStartmin()),
|
||||||
|
Status.CANCELLED.toString()}) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1570,7 +1671,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
* @param endmin
|
* @param endmin
|
||||||
* @return true if service provider is available for specified time slot
|
* @return true if service provider is available for specified time slot
|
||||||
*/
|
*/
|
||||||
private boolean isProviderAvailable(String serviceProvider, int year, int month, int day,
|
private boolean isProviderAvailable(String serviceProvider, int year, int month, int day,
|
||||||
int starth, int startmin, int endh, int endmin){
|
int starth, int startmin, int endh, int endmin){
|
||||||
|
|
||||||
int bookingStart = starth*60 + startmin;
|
int bookingStart = starth*60 + startmin;
|
||||||
|
@ -1585,13 +1686,12 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
availabilityStart = cursor.getInt(0);
|
availabilityStart = cursor.getInt(0);
|
||||||
availabilityEnd = cursor.getInt(1);
|
availabilityEnd = cursor.getInt(1);
|
||||||
|
|
||||||
//service provider not available if availability end is 0, if availability starts after booking start,
|
//service provider not available if availability end is 0, if availability starts after booking start,
|
||||||
// or if availability ends before booking end
|
// or if availability ends before booking end
|
||||||
if (availabilityEnd == 0 || availabilityStart > bookingStart || availabilityEnd < bookingEnd) {
|
if (availabilityEnd == 0 || availabilityStart > bookingStart || availabilityEnd < bookingEnd) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//now we know for sure that the service provider is available on said day of the week
|
//now we know for sure that the service provider is available on said day of the week
|
||||||
//we check to see if any of the bookings overlap on this time slot
|
//we check to see if any of the bookings overlap on this time slot
|
||||||
cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
|
cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
|
||||||
|
@ -1618,5 +1718,38 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private List<Booking> getBookings(Cursor cursor, ServiceProvider serviceProvider, HomeOwner homeOwner){
|
||||||
|
List<Booking> bookingList = new ArrayList<>();
|
||||||
|
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
for (int i = 0; i < cursor.getCount(); i++) {
|
||||||
|
int startTime = cursor.getInt(6);
|
||||||
|
int endTime = cursor.getInt(7);
|
||||||
|
int starth = startTime / 60;
|
||||||
|
int startmin = startTime % 60;
|
||||||
|
int endh = endTime / 60;
|
||||||
|
int endmin = endTime % 60;
|
||||||
|
int day = cursor.getInt(5);
|
||||||
|
int month = cursor.getInt(4);
|
||||||
|
int year = cursor.getInt(3);
|
||||||
|
String stat = cursor.getString(8);
|
||||||
|
Status status = (stat.equals("Pending") ? Status.PENDING :
|
||||||
|
stat.equals("Confirmed") ? Status.CONFIRMED : Status.CANCELLED);
|
||||||
|
ServiceProvider serviceprovider = (serviceProvider == null ?
|
||||||
|
(ServiceProvider) findUserByUsername(cursor.getString(0)) : serviceProvider);
|
||||||
|
HomeOwner homeowner = (homeOwner == null ?
|
||||||
|
(HomeOwner) findUserByUsername(cursor.getString(1)) : homeOwner);
|
||||||
|
Service service = findService(cursor.getString(3));
|
||||||
|
Booking booking = new Booking(starth, startmin, endh, endmin, day, month, year,
|
||||||
|
serviceprovider, homeowner, service);
|
||||||
|
booking.setStatus(status);
|
||||||
|
bookingList.add(booking);
|
||||||
|
|
||||||
|
cursor.moveToNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return bookingList;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import com.uottawa.olympus.olympusservices.Booking.Status;
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
@ -412,9 +413,35 @@ public class DBIntegrationTest {
|
||||||
dbHelper.deleteAll();
|
dbHelper.deleteAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testGetByTime(){
|
||||||
|
setUp(TestAfter.AVAILABILITY);
|
||||||
|
|
||||||
|
//December 3 2020 is a Thursday
|
||||||
|
List<String[]> providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
|
||||||
|
12, 3, 6, 12, 10, 0);
|
||||||
|
assertEquals(0, providers.size());
|
||||||
|
|
||||||
|
providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
|
||||||
|
12, 3, 7, 12, 10, 0);
|
||||||
|
assertEquals(1, providers.size());
|
||||||
|
String[] firstProvider = providers.get(0);
|
||||||
|
assertEquals("jbO4aBF4dC", firstProvider[0]);
|
||||||
|
assertEquals("Jack", firstProvider[1]);
|
||||||
|
assertEquals("Black", firstProvider[2]);
|
||||||
|
assertEquals(0, Double.parseDouble(firstProvider[3]), 0.0001);
|
||||||
|
|
||||||
|
//December 4 2020 is a Friday
|
||||||
|
providers = dbHelper.getProvidersByTime("Exterminating flatworms", 2020,
|
||||||
|
12, 4, 10, 0, 13, 0);
|
||||||
|
assertEquals(2, providers.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAddBooking(){
|
public void testAddBooking(){
|
||||||
setUp(TestAfter.BOOKING);
|
setUp(TestAfter.AVAILABILITY);
|
||||||
|
|
||||||
//December 1, 2020 is a Tuesday. Provider is available from 5:20 to 21:11
|
//December 1, 2020 is a Tuesday. Provider is available from 5:20 to 21:11
|
||||||
boolean added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
boolean added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||||
|
@ -425,7 +452,7 @@ public class DBIntegrationTest {
|
||||||
2020, 12, 1, 9, 12, 12, 0);
|
2020, 12, 1, 9, 12, 12, 0);
|
||||||
assertTrue(!added);
|
assertTrue(!added);
|
||||||
|
|
||||||
//December 3, 2020 is was a Thursday. Provider is available from 7:12 to 15:14
|
//December 3, 2020 is a Thursday. Provider is available from 7:12 to 15:14
|
||||||
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||||
2020, 12, 3, 6, 12, 7, 30);
|
2020, 12, 3, 6, 12, 7, 30);
|
||||||
assertTrue(!added);
|
assertTrue(!added);
|
||||||
|
@ -438,9 +465,65 @@ public class DBIntegrationTest {
|
||||||
dbHelper.deleteAll();
|
dbHelper.deleteAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testViewListOfBookings(){
|
||||||
|
setUp(TestAfter.AVAILABILITY);
|
||||||
|
|
||||||
|
List<Booking> bookings = dbHelper.findBookings("jbO4aBF4dC");
|
||||||
|
assertEquals(0, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("7MuF1c59XP");
|
||||||
|
assertEquals(0, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("DW44FkUsX7");
|
||||||
|
assertEquals(0, bookings.size());
|
||||||
|
|
||||||
|
dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||||
|
2020, 12, 1, 8, 12, 10, 0);
|
||||||
|
bookings = dbHelper.findBookings("jbO4aBF4dC");
|
||||||
|
assertEquals(1, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("7MuF1c59XP");
|
||||||
|
assertEquals(1, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("DW44FkUsX7");
|
||||||
|
assertEquals(0, bookings.size());
|
||||||
|
|
||||||
|
dbHelper.addBooking("DW44FkUsX7", "7MuF1c59XP", "petting cats",
|
||||||
|
2020, 12, 4, 10, 0, 10, 30);
|
||||||
|
bookings = dbHelper.findBookings("jbO4aBF4dC");
|
||||||
|
assertEquals(1, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("7MuF1c59XP");
|
||||||
|
assertEquals(2, bookings.size());
|
||||||
|
bookings = dbHelper.findBookings("DW44FkUsX7");
|
||||||
|
assertEquals(1, bookings.size());
|
||||||
|
|
||||||
|
dbHelper.deleteAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testConfirmAndCancelBooking(){
|
||||||
|
setUp(TestAfter.AVAILABILITY);
|
||||||
|
|
||||||
|
Booking booking = new Booking(8, 12, 10, 0,1,
|
||||||
|
12, 2020, (ServiceProvider)dbHelper.findUserByUsername("jbO4aBF4dC"),
|
||||||
|
(HomeOwner)dbHelper.findUserByUsername("7MuF1c59XP"), dbHelper.findService("Hitman"));
|
||||||
|
dbHelper.addBooking(booking);
|
||||||
|
|
||||||
|
assertTrue(dbHelper.confirmBooking(booking));
|
||||||
|
List<Booking> bookings = dbHelper.findBookings("jbO4aBF4dC");
|
||||||
|
Booking dbBooking = bookings.get(0);
|
||||||
|
assertEquals(Status.CONFIRMED, dbBooking.getStatus());
|
||||||
|
|
||||||
|
assertTrue(dbHelper.cancelBooking(booking));
|
||||||
|
bookings = dbHelper.findBookings("jbO4aBF4dC");
|
||||||
|
dbBooking = bookings.get(0);
|
||||||
|
assertEquals(Status.CANCELLED, dbBooking.getStatus());
|
||||||
|
|
||||||
|
bookings = dbHelper.findNonCancelledBookings("jbO4aBF4dC");
|
||||||
|
assertEquals(0, bookings.size());
|
||||||
|
|
||||||
|
dbHelper.deleteAll();
|
||||||
|
}
|
||||||
|
|
||||||
// @Test
|
// @Test
|
||||||
// public void testConfirmBooking(){
|
// public void testRating(){
|
||||||
// setUp(TestAfter.RATING);
|
|
||||||
//
|
//
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
@ -483,6 +566,7 @@ public class DBIntegrationTest {
|
||||||
dbHelper.addServiceProvidedByUser(serviceProvider2, service2);
|
dbHelper.addServiceProvidedByUser(serviceProvider2, service2);
|
||||||
|
|
||||||
if (!testAfter.equals(TestAfter.LINK)){
|
if (!testAfter.equals(TestAfter.LINK)){
|
||||||
|
//serviceProvider1 is available on Monday, Tuesday, Thursday, and Friday
|
||||||
serviceProvider1.setAvailabilities(0, 4, 18, 19, 30);
|
serviceProvider1.setAvailabilities(0, 4, 18, 19, 30);
|
||||||
serviceProvider1.setAvailabilities(1, 5, 20, 21, 11);
|
serviceProvider1.setAvailabilities(1, 5, 20, 21, 11);
|
||||||
serviceProvider1.setAvailabilities(3, 7, 12, 15, 14);
|
serviceProvider1.setAvailabilities(3, 7, 12, 15, 14);
|
||||||
|
@ -490,6 +574,11 @@ public class DBIntegrationTest {
|
||||||
|
|
||||||
dbHelper.updateAvailability(serviceProvider1);
|
dbHelper.updateAvailability(serviceProvider1);
|
||||||
|
|
||||||
|
//serviceProvider2 is only available on Friday
|
||||||
|
serviceProvider2.setAvailabilities(4, 10, 0, 23, 29);
|
||||||
|
|
||||||
|
dbHelper.updateAvailability(serviceProvider2);
|
||||||
|
|
||||||
if (!testAfter.equals(TestAfter.AVAILABILITY)){
|
if (!testAfter.equals(TestAfter.AVAILABILITY)){
|
||||||
Booking booking1 = new Booking(8, 12, 10, 0,1,
|
Booking booking1 = new Booking(8, 12, 10, 0,1,
|
||||||
12, 2020, serviceProvider1, homeOwner1, service1);
|
12, 2020, serviceProvider1, homeOwner1, service1);
|
||||||
|
@ -498,6 +587,5 @@ public class DBIntegrationTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue