Changed fetch service providers to include first and last name
This commit is contained in:
parent
44a2fe402e
commit
ee4bc0e409
2 changed files with 612 additions and 303 deletions
|
@ -675,7 +675,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
null, null, null,
|
||||
"1");
|
||||
//If cursor has 1+ elements in it, username/service combination already exists in table
|
||||
if (cursor != null && cursor.getCount() > 0){
|
||||
if (cursor.moveToFirst()){
|
||||
if (cursor.getString(0).equals("active")){
|
||||
cursor.close();
|
||||
return false;
|
||||
|
@ -711,11 +711,27 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
return deleteServiceProvidedByUser(serviceProvider.getUsername(), service.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes service from service provider. Provider no longer offers this service.
|
||||
*
|
||||
* @param serviceProvider service provider who once offered service
|
||||
* @param serviceName service to be removed
|
||||
*
|
||||
* @return true if service provider's status for this service is now inactive
|
||||
*/
|
||||
public boolean deleteServiceProvidedByUser(ServiceProvider serviceProvider, String serviceName){
|
||||
if (serviceProvider == null || serviceName == null) return false;
|
||||
return deleteServiceProvidedByUser(serviceProvider.getUsername(), serviceName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes service from service provider. Provider no longer offers this service.
|
||||
*
|
||||
* @param serviceProviderUsername service provider who once offered service
|
||||
* @param serviceName service to be removed
|
||||
*
|
||||
* @return true if service provider's status for this service is now inactive
|
||||
*/
|
||||
public boolean deleteServiceProvidedByUser(String serviceProviderUsername, String serviceName){
|
||||
if (serviceProviderUsername == null || serviceName == null) return false;
|
||||
serviceName = serviceName.toLowerCase().trim();
|
||||
|
@ -729,19 +745,30 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
new String[]{serviceProviderUsername, serviceName}) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches all services provided by a service provider
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @return a list of [service, rate]
|
||||
*/
|
||||
public List<String[]> getAllServicesProvidedByUser(ServiceProvider serviceProvider){
|
||||
if (serviceProvider == null) return new ArrayList<>();
|
||||
|
||||
return getAllServicesProvidedByUser(serviceProvider.getUsername());
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetches all services provided by a service provider
|
||||
*
|
||||
* @param serviceProviderName
|
||||
* @return a list of [service, rate]
|
||||
*/
|
||||
public List<String[]> getAllServicesProvidedByUser(String serviceProviderName){
|
||||
if (serviceProviderName == null) return new ArrayList<>();
|
||||
|
||||
return getAll("SELECT " + TABLE_SERVICES + "." + COLUMN_SERVICE + ", "
|
||||
+ TABLE_SERVICES + "." + COLUMN_RATE
|
||||
+ " FROM " + TABLE_SERVICES
|
||||
+ " JOIN " + TABLE_SERVICEPROVIDERS
|
||||
+ " FROM " + TABLE_SERVICES + " JOIN " + TABLE_SERVICEPROVIDERS
|
||||
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERSERVICE + " = "
|
||||
+ TABLE_SERVICES + "." + COLUMN_SERVICE
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME
|
||||
|
@ -749,29 +776,47 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'");
|
||||
}
|
||||
|
||||
public List<String> getAllProvidersByService(Service service){
|
||||
/**
|
||||
* Fetches all service providers who provide a specified service
|
||||
*
|
||||
* @param service name of service
|
||||
* @return a list of [username, first name, last name, average rating] sorted by rating
|
||||
*/
|
||||
public List<String[]> getAllProvidersByService(Service service){
|
||||
if (service == null) return new ArrayList<>();
|
||||
|
||||
return getAllProvidersByService(service.getName());
|
||||
}
|
||||
|
||||
public List<String> getAllProvidersByService(String serviceName){
|
||||
/**
|
||||
* Fetches all service providers who provide a specified service
|
||||
*
|
||||
* @param serviceName name of service
|
||||
* @return a list of [username, first name, last name, average rating] sorted by rating
|
||||
*/
|
||||
public List<String[]> getAllProvidersByService(String serviceName){
|
||||
if (serviceName == null) return new ArrayList<>();
|
||||
|
||||
serviceName = serviceName.toLowerCase().trim();
|
||||
List<String[]> providers = getAll("SELECT " + COLUMN_SERVICEPROVIDERNAME
|
||||
+ " FROM " + TABLE_SERVICEPROVIDERS
|
||||
+ " WHERE " + COLUMN_SERVICEPROVIDERSERVICE + " = '"
|
||||
+ serviceName + "'"
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'");
|
||||
|
||||
List<String> providerList = new ArrayList<>();
|
||||
for (String[] provider : providers){
|
||||
providerList.add(provider[0]);
|
||||
}
|
||||
return providerList;
|
||||
return getAll(
|
||||
"SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
|
||||
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING
|
||||
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
|
||||
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
|
||||
+ TABLE_LOGIN + "." + COLUMN_USERNAME
|
||||
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
|
||||
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates a service provider's availabilities based on ServiceProvider object provided
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @return true if availability was updated successfully
|
||||
*/
|
||||
public boolean updateAvailability(ServiceProvider serviceProvider){
|
||||
//availability is stored as number of minutes from 00:00
|
||||
if (serviceProvider == null) return false;
|
||||
|
@ -801,27 +846,6 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
return true;
|
||||
}
|
||||
|
||||
private void addAvailabilityToContentValues(ContentValues contentValues,
|
||||
String startColumn, String endColumn,
|
||||
int[] startAndEndTimes){
|
||||
if (startAndEndTimes == null){
|
||||
contentValues.put(startColumn, 0);
|
||||
contentValues.put(endColumn, 0);
|
||||
} else {
|
||||
int startTime = startAndEndTimes[0]*60+startAndEndTimes[1];
|
||||
int endTime = startAndEndTimes[2]*60+startAndEndTimes[3];
|
||||
if (endTime - startTime <=0 || startTime > 1439 || startTime < 0
|
||||
|| endTime > 1439 || endTime <= 0) {
|
||||
contentValues.put(startColumn, 0);
|
||||
contentValues.put(endColumn, 0);
|
||||
} else {
|
||||
contentValues.put(startColumn, startTime);
|
||||
contentValues.put(endColumn, endTime);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//note that this method overwrites serviceProvider's availability if it exists
|
||||
public int[][] getAvailabilities(ServiceProvider serviceProvider){
|
||||
|
@ -860,6 +884,53 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
}
|
||||
|
||||
|
||||
public List<int[]> getAvailabilityByDate(ServiceProvider serviceProvider, int year, int month, int day){
|
||||
return getAvailabilityByDate(serviceProvider.getUsername(), year, month, day);
|
||||
}
|
||||
|
||||
public List<int[]> getAvailabilityByDate(String serviceProvider, int year, int month, int day){
|
||||
|
||||
List<int[]> availabilities = new ArrayList<>();
|
||||
|
||||
Cursor bookings = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
|
||||
COLUMN_BOOKINGSERVICEPROVIDER+ " = ?"
|
||||
+ " AND " + COLUMN_BOOKINGYEAR + " = ?"
|
||||
+ " AND " + COLUMN_BOOKINGMONTH + " = ?"
|
||||
+ " AND " + COLUMN_BOOKINGDATE + " = ?",
|
||||
new String[]{serviceProvider, String.valueOf(year),
|
||||
String.valueOf(month),String.valueOf(day)},
|
||||
null, null, COLUMN_BOOKINGSTART, null);
|
||||
|
||||
Cursor availability = getAvailabilityByDayOfWeek(serviceProvider, year, month, day);
|
||||
if (availability.moveToFirst()) {
|
||||
int previousEnd = availability.getInt(0);
|
||||
int currentStart;
|
||||
int currentEnd;
|
||||
if (bookings.moveToFirst()) {
|
||||
for (int i = 0; i < bookings.getCount(); i++) {
|
||||
currentStart = bookings.getInt(0);
|
||||
if (currentStart - previousEnd >= 30){
|
||||
availabilities.add(new int[]{previousEnd/60, previousEnd%60,
|
||||
currentStart/60, currentStart%60});
|
||||
}
|
||||
previousEnd = bookings.getInt(1);
|
||||
bookings.moveToNext();
|
||||
}
|
||||
currentStart = availability.getInt(1);
|
||||
if (currentStart - previousEnd >= 30){
|
||||
availabilities.add(new int[]{previousEnd/60, previousEnd%60,
|
||||
currentStart/60, currentStart%60});
|
||||
}
|
||||
} else {
|
||||
currentStart = availability.getInt(0);
|
||||
currentEnd = availability.getInt(1);
|
||||
availabilities.add(new int[]{currentStart/60, currentStart%60,
|
||||
currentEnd/60, currentEnd%60});
|
||||
}
|
||||
}
|
||||
return availabilities;
|
||||
}
|
||||
|
||||
public boolean addBooking(Booking booking){
|
||||
if (booking == null) return false;
|
||||
|
||||
|
@ -879,17 +950,44 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
starth, startmin, endh, endmin);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @param homeOwner
|
||||
* @param service
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth
|
||||
* @param startmin
|
||||
* @param endh
|
||||
* @param endmin
|
||||
* @return true if booking was successfully added
|
||||
*/
|
||||
public boolean addBooking(String serviceProvider, String homeOwner, String service,
|
||||
int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
|
||||
GregorianCalendar current = new GregorianCalendar();
|
||||
current.setTimeInMillis(System.currentTimeMillis());
|
||||
GregorianCalendar bookDate = new GregorianCalendar(year, month, day, starth, startmin);
|
||||
GregorianCalendar bookDate = new GregorianCalendar(year, month-1, day, starth, startmin);
|
||||
|
||||
//check if time of booking is after this time
|
||||
if (current.compareTo(bookDate) > 0) return false;
|
||||
|
||||
service = service.trim().toLowerCase();
|
||||
|
||||
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_SERVICEPROVIDERNAME},
|
||||
COLUMN_SERVICEPROVIDERNAME + " = ? AND "
|
||||
+ COLUMN_SERVICEPROVIDERSERVICE + " = ?",
|
||||
new String[] {serviceProvider, service},
|
||||
null, null, null, "1");
|
||||
if (!cursor.moveToFirst()) {
|
||||
cursor.close();
|
||||
return false;
|
||||
}
|
||||
cursor.close();
|
||||
|
||||
if (isProviderAvailable(serviceProvider, year, month, day, starth, startmin,
|
||||
endh, endmin)){
|
||||
|
||||
|
@ -912,6 +1010,11 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param username
|
||||
* @return list of booking objects related to specified user
|
||||
*/
|
||||
public List<Booking> findBookings(String username){
|
||||
List<Booking> bookingList = new ArrayList<>();
|
||||
ServiceProvider serviceProvider = null;
|
||||
|
@ -924,13 +1027,13 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
if (cursor.getString(5).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()});
|
||||
+ COLUMN_BOOKINGSERVICEPROVIDER + " = ?",
|
||||
new String[]{username});
|
||||
} else {
|
||||
homeOwner = (HomeOwner)findUserByUsername(username);
|
||||
cursor = writeDB.rawQuery("SELECT * FROM " + TABLE_BOOKINGS + " WHERE "
|
||||
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTATUS + " != ?", new String[]{username, Status.CANCELLED.toString()});
|
||||
+ COLUMN_BOOKINGHOMEOWNER + " = ?",
|
||||
new String[]{username});
|
||||
}
|
||||
|
||||
if (cursor.moveToFirst()){
|
||||
|
@ -945,7 +1048,8 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
int month = cursor.getInt(4);
|
||||
int year = cursor.getInt(3);
|
||||
String stat = cursor.getString(8);
|
||||
Status status = (stat.equals("Pending")? Status.PENDING : Status.CONFIRMED);
|
||||
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?
|
||||
|
@ -963,185 +1067,44 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
}
|
||||
|
||||
|
||||
public boolean isProviderAvailable(String serviceProvider, String monthDayYear,
|
||||
int starth, int startmin, int endh, int endmin) {
|
||||
String[] date = monthDayYear.split("/");
|
||||
return isProviderAvailable(serviceProvider, Integer.parseInt(date[2]),
|
||||
Integer.parseInt(date[0]), Integer.parseInt(date[1]),
|
||||
starth, startmin, endh, endmin);
|
||||
/**
|
||||
* Sets status of specified booking to cancelled. Returns false if booking
|
||||
* does not exist in database, or date of booking has already passed.
|
||||
*
|
||||
* @param booking
|
||||
* @return true if booking was successfully cancelled
|
||||
*/
|
||||
public boolean confirmBooking(Booking booking){
|
||||
return modifyBookingStatus(booking, Status.CONFIRMED);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns false if end time before start time, or service provider not available on that day
|
||||
* Sets status of specified booking to cancelled. Returns false if booking was already cancelled,
|
||||
* booking does not exist in database, or date of booking has already passed.
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth
|
||||
* @param startmin
|
||||
* @param endh
|
||||
* @param endmin
|
||||
* @return
|
||||
* @param booking
|
||||
* @return true if booking was successfully cancelled
|
||||
*/
|
||||
public boolean isProviderAvailable(String serviceProvider, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
|
||||
int bookingStart = starth*60 + startmin;
|
||||
int bookingEnd = endh*60 + endmin;
|
||||
|
||||
if (bookingEnd < bookingStart) return false;
|
||||
|
||||
GregorianCalendar start = new GregorianCalendar(year, month-1, day);
|
||||
//Calendar.DAY_OF_WEEK starts with 1 for Sunday, and onwards
|
||||
int dayOfWeek = start.get(Calendar.DAY_OF_WEEK);
|
||||
Cursor cursor = null;
|
||||
int availabilityStart, availabilityEnd;
|
||||
|
||||
//Check availabilities on day of week
|
||||
switch (dayOfWeek){
|
||||
case 1: //Sunday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_SUNSTART, COLUMN_SUNEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 2: //Monday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_MONSTART, COLUMN_MONEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 3: //Tuesday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_TUESTART, COLUMN_TUEEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 4: //Wednesday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_WEDSTART, COLUMN_WEDEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 5: //Thursday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_THUSTART, COLUMN_THUEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 6: //Friday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_FRISTART, COLUMN_FRIEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 7: //Saturday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_SATSTART, COLUMN_SATEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
}
|
||||
|
||||
cursor.moveToFirst();
|
||||
availabilityStart = cursor.getInt(0);
|
||||
availabilityEnd = cursor.getInt(1);
|
||||
|
||||
//service provider not available if availability end is 0, if availability starts after booking start,
|
||||
// or if availability ends before booking end
|
||||
if (availabilityEnd == 0 || availabilityStart > bookingStart || availabilityEnd < bookingEnd) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//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
|
||||
cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
|
||||
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTATUS + " != ?",
|
||||
new String[] {serviceProvider, String.valueOf(year),
|
||||
String.valueOf(month), String.valueOf(day), Status.CANCELLED.toString()},
|
||||
null, null, COLUMN_BOOKINGSTART, null);
|
||||
if (cursor.moveToFirst()){
|
||||
for (int i = 0; i<cursor.getCount(); i++){
|
||||
availabilityStart = cursor.getInt(0);
|
||||
availabilityEnd = cursor.getInt(1);
|
||||
|
||||
if ((availabilityStart < bookingStart && availabilityEnd > bookingStart)||
|
||||
(availabilityStart < bookingEnd && availabilityEnd > bookingEnd) ||
|
||||
(availabilityStart > bookingStart && availabilityEnd < bookingEnd)) return false;
|
||||
|
||||
cursor.moveToNext();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public boolean confirmBooking(Booking booking){
|
||||
if (booking == null) return false;
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(COLUMN_BOOKINGSTATUS, Status.CONFIRMED.toString());
|
||||
|
||||
GregorianCalendar current = new GregorianCalendar();
|
||||
current.setTimeInMillis(System.currentTimeMillis());
|
||||
GregorianCalendar bookDate = new GregorianCalendar(booking.getYear(), booking.getMonth(),
|
||||
booking.getDay(), booking.getStarth(), booking.getStartmin());
|
||||
|
||||
//check if time of booking is before this time
|
||||
if (current.compareTo(bookDate) > 0) return false;
|
||||
|
||||
return writeDB.update(TABLE_BOOKINGS, contentValues,
|
||||
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
|
||||
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTART + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTATUS + " = ?)",
|
||||
new String[] {booking.getServiceprovider().getUsername(),
|
||||
booking.getHomeowner().getUsername(),
|
||||
String.valueOf(booking.getYear()),
|
||||
String.valueOf(booking.getMonth()),
|
||||
String.valueOf(booking.getDay()),
|
||||
String.valueOf(booking.getStarth()*60 + booking.getStartmin()),
|
||||
Status.PENDING.toString()}) > 0;
|
||||
}
|
||||
|
||||
public boolean cancelBooking(Booking booking){
|
||||
if (booking == null) return false;
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(COLUMN_BOOKINGSTATUS, Status.CANCELLED.toString());
|
||||
|
||||
GregorianCalendar current = new GregorianCalendar();
|
||||
current.setTimeInMillis(System.currentTimeMillis());
|
||||
GregorianCalendar bookDate = new GregorianCalendar(booking.getYear(), booking.getMonth(),
|
||||
booking.getDay(), booking.getStarth(), booking.getStartmin());
|
||||
|
||||
//check if time of booking has passed
|
||||
if (current.compareTo(bookDate) > 0) return false;
|
||||
|
||||
return writeDB.update(TABLE_BOOKINGS, contentValues,
|
||||
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
|
||||
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTART + " = ?)",
|
||||
new String[] {booking.getServiceprovider().getUsername(),
|
||||
booking.getHomeowner().getUsername(),
|
||||
String.valueOf(booking.getYear()),
|
||||
String.valueOf(booking.getMonth()),
|
||||
String.valueOf(booking.getDay()),
|
||||
String.valueOf(booking.getStarth()*60 + booking.getStartmin())}) > 0;
|
||||
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
|
||||
* @param rating
|
||||
* @return true if adding the rating was successful
|
||||
*/
|
||||
public boolean addRating(Booking booking, double rating){
|
||||
if (booking == null) return false;
|
||||
|
||||
GregorianCalendar current = new GregorianCalendar();
|
||||
current.setTimeInMillis(System.currentTimeMillis());
|
||||
GregorianCalendar bookDate = new GregorianCalendar(booking.getYear(), booking.getMonth(),
|
||||
GregorianCalendar bookDate = new GregorianCalendar(booking.getYear(), booking.getMonth()-1,
|
||||
booking.getDay(), booking.getEndh(), booking.getEndmin());
|
||||
|
||||
//check if time of booking is before this time
|
||||
|
@ -1191,11 +1154,26 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the average rating for a service provider's service
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @param service
|
||||
* @return average rating of specified service provider and service combination
|
||||
*/
|
||||
public double getRatings(ServiceProvider serviceProvider, Service service){
|
||||
return getRatings(serviceProvider.getUsername(), service.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the average rating for a service provider's service
|
||||
*
|
||||
* @param serviceProviderName name of service provider
|
||||
* @param serviceName name of service
|
||||
* @return average rating of specified service provider and service combination
|
||||
*/
|
||||
public double getRatings(String serviceProviderName, String serviceName){
|
||||
serviceName = serviceName.trim().toLowerCase();
|
||||
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_AVERAGERATING},
|
||||
COLUMN_SERVICEPROVIDERNAME + " = ? AND "
|
||||
+ COLUMN_SERVICEPROVIDERSERVICE + " = ?",
|
||||
|
@ -1208,12 +1186,27 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
return rating;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of people who rated a service provider's service
|
||||
*
|
||||
* @param serviceProvider name of service provider
|
||||
* @param service name of service
|
||||
* @return number of raters for specified service provider and service combination
|
||||
*/
|
||||
public int getRaters(ServiceProvider serviceProvider, Service service){
|
||||
return getRaters(serviceProvider.getUsername(), service.getName());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of people who rated a service provider's service
|
||||
*
|
||||
* @param serviceProviderName name of service provider
|
||||
* @param serviceName name of service
|
||||
* @return number of raters for specified service provider and service combination
|
||||
*/
|
||||
public int getRaters(String serviceProviderName, String serviceName){
|
||||
serviceName = serviceName.trim().toLowerCase();
|
||||
Cursor cursor = writeDB.query(TABLE_SERVICEPROVIDERS, new String[]{COLUMN_RATERS},
|
||||
COLUMN_SERVICEPROVIDERNAME + " = ? AND "
|
||||
+ COLUMN_SERVICEPROVIDERSERVICE + " = ?",
|
||||
|
@ -1225,54 +1218,150 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
return cursor.getInt(0);
|
||||
}
|
||||
|
||||
public List<String> getProvidersAboveRating(Service service, double rating){
|
||||
/**
|
||||
* Returns list of [username, first name, last name, rating] of service providers that
|
||||
* have a rating equal to or above the specified rating
|
||||
*
|
||||
* @param service
|
||||
* @param rating minimum rating
|
||||
* @return a List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersAboveRating(Service service, double rating){
|
||||
return getProvidersAboveRating(service.getName(), rating);
|
||||
}
|
||||
|
||||
public List<String> getProvidersAboveRating(String serviceName, double rating){
|
||||
List<String[]> providers = getAll("SELECT " + COLUMN_SERVICEPROVIDERNAME + " FROM " + TABLE_SERVICEPROVIDERS
|
||||
+ " WHERE " + COLUMN_SERVICE + " = " + serviceName + " AND "
|
||||
+ COLUMN_AVERAGERATING + " >= " + rating);
|
||||
List<String> providerList = new ArrayList<>();
|
||||
for (String[] provider : providers){
|
||||
providerList.add(provider[0]);
|
||||
}
|
||||
return providerList;
|
||||
/**
|
||||
* Returns list of [username, first name, last name, rating] of service providers that
|
||||
* have a rating equal to or above the specified rating
|
||||
*
|
||||
* @param serviceName name of service
|
||||
* @param rating minimum rating
|
||||
* @return a List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersAboveRating(String serviceName, double rating){
|
||||
serviceName = serviceName.trim().toLowerCase();
|
||||
return getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
|
||||
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING
|
||||
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
|
||||
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
|
||||
+ TABLE_LOGIN + "." + COLUMN_USERNAME
|
||||
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " >= " + rating
|
||||
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
|
||||
}
|
||||
|
||||
public List<String> getProvidersByTime(Service service, int year, int month, int day,
|
||||
/**
|
||||
* Returns list of [username, first name, last name, rating] of service providers
|
||||
* available at the specified time
|
||||
*
|
||||
* @param service
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth starting hour
|
||||
* @param startmin starting minute
|
||||
* @param endh ending hour
|
||||
* @param endmin ending minute
|
||||
* @return a List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersByTime(Service service, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
return getProvidersByTime(service.getName(), year, month, day, starth, startmin, endh, endmin);
|
||||
}
|
||||
|
||||
public List<String> getProvidersByTime(String serviceName, int year, int month, int day,
|
||||
/**
|
||||
* Returns list of [username, first name, last name, rating] of service providers
|
||||
* available at the specified time
|
||||
*
|
||||
* @param serviceName name of service
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth starting hour
|
||||
* @param startmin starting minute
|
||||
* @param endh ending hour
|
||||
* @param endmin ending minute
|
||||
* @return a List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersByTime(String serviceName, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
List<String> providers = getAllProvidersByService(serviceName);
|
||||
|
||||
serviceName = serviceName.trim().toLowerCase();
|
||||
List<String[]> providers = getAll("SELECT " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_FIRSTNAME + ", "
|
||||
+ TABLE_LOGIN + "." + COLUMN_LASTNAME + ", "
|
||||
+ TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + ", "
|
||||
+ " FROM " + TABLE_SERVICEPROVIDERS + " JOIN " + TABLE_LOGIN
|
||||
+ " ON " + TABLE_SERVICEPROVIDERS + "." + COLUMN_SERVICEPROVIDERNAME + " = "
|
||||
+ TABLE_LOGIN + "." + COLUMN_USERNAME
|
||||
+ " AND " + COLUMN_SERVICEPROVIDERSERVICE + " = '" + serviceName + "'"
|
||||
+ " AND " + TABLE_SERVICEPROVIDERS + "." + COLUMN_ACTIVE + " = 'active'"
|
||||
+ " ORDER BY " + TABLE_SERVICEPROVIDERS + "." + COLUMN_AVERAGERATING + " DESC");
|
||||
for (int i = 0; i < providers.size(); i++){
|
||||
String username = providers.get(i);
|
||||
if (!isProviderAvailable(username, year, month, day, starth, startmin, endh, endmin)){
|
||||
if (!isProviderAvailable(providers.get(i)[0], year, month, day,
|
||||
starth, startmin, endh, endmin)){
|
||||
providers.remove(i);
|
||||
}
|
||||
}
|
||||
return providers;
|
||||
}
|
||||
|
||||
public List<String> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day,
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @param service
|
||||
* @param rating minimum rating of filter
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth starting hour
|
||||
* @param startmin starting minute
|
||||
* @param endh ending hour
|
||||
* @param endmin ending minute
|
||||
* @return List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersByTimeAndRating(Service service, double rating, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
return getProvidersByTimeAndRating(service.getName(), rating, year, month, day,
|
||||
starth, startmin, endh, endmin);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
*
|
||||
* @param serviceName name of service
|
||||
* @param rating minimum rating of filter
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth starting hour
|
||||
* @param startmin starting minute
|
||||
* @param endh ending hour
|
||||
* @param endmin ending minute
|
||||
* @return List of [username, first name, last name, rating] of service providers
|
||||
*/
|
||||
public List<String[]> getProvidersByTimeAndRating(String serviceName, double rating, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
List<String> providers = getProvidersByTime(serviceName, year, month, day, starth, startmin, endh, endmin);
|
||||
for (int i = 0; i < providers.size(); i++){
|
||||
String provider = providers.get(i);
|
||||
if (getRatings(provider, serviceName)<rating){
|
||||
providers.remove(i);
|
||||
serviceName = serviceName.trim().toLowerCase();
|
||||
List<String[]> providers = getProvidersByTime(serviceName, year, month, day, starth, startmin, endh, endmin);
|
||||
|
||||
int i = providers.size()-1;
|
||||
boolean allLowRatingsRemoved = false;
|
||||
while (i>-1 && !allLowRatingsRemoved){
|
||||
if (getRatings(providers.get(i)[0], serviceName)>=rating){
|
||||
allLowRatingsRemoved = true;
|
||||
} else {
|
||||
providers.remove(i--);
|
||||
}
|
||||
}
|
||||
return providers;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Prints all entries of table. One row is printed per line. Columns are
|
||||
* separated by spaces.
|
||||
|
@ -1293,6 +1382,17 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
cursor.close();
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all data from database. It's used for testing when
|
||||
* DB needs to be cleared. Please don't call this anywhere else.
|
||||
*/
|
||||
void deleteAll(){
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_LOGIN);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_SERVICES);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_SERVICEPROVIDERS);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_AVAILABILITY);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_BOOKINGS);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets all items in a table
|
||||
|
@ -1319,15 +1419,187 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||
}
|
||||
|
||||
/**
|
||||
* Deletes all data from database. It's used for testing when
|
||||
* DB needs to be cleared. Please don't call this anywhere else.
|
||||
* Adds a service provider's availabilities for a specific day to content values
|
||||
* @param contentValues
|
||||
* @param startColumn
|
||||
* @param endColumn
|
||||
* @param startAndEndTimes
|
||||
*/
|
||||
void deleteAll(){
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_LOGIN);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_SERVICES);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_SERVICEPROVIDERS);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_AVAILABILITY);
|
||||
writeDB.execSQL("DELETE FROM " + TABLE_BOOKINGS);
|
||||
private void addAvailabilityToContentValues(ContentValues contentValues,
|
||||
String startColumn, String endColumn,
|
||||
int[] startAndEndTimes){
|
||||
if (startAndEndTimes == null){
|
||||
contentValues.put(startColumn, 0);
|
||||
contentValues.put(endColumn, 0);
|
||||
} else {
|
||||
int startTime = startAndEndTimes[0]*60+startAndEndTimes[1];
|
||||
int endTime = startAndEndTimes[2]*60+startAndEndTimes[3];
|
||||
if (endTime - startTime <=0 || startTime > 1439 || startTime < 0
|
||||
|| endTime > 1439 || endTime <= 0) {
|
||||
contentValues.put(startColumn, 0);
|
||||
contentValues.put(endColumn, 0);
|
||||
} else {
|
||||
contentValues.put(startColumn, startTime);
|
||||
contentValues.put(endColumn, endTime);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to get a service provider's availability by day of week
|
||||
*
|
||||
* @param serviceProvider username of service provider
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @return Cursor containing the start and end of the service provider's availabilities
|
||||
* on selected day of the week
|
||||
*/
|
||||
private Cursor getAvailabilityByDayOfWeek(String serviceProvider, int year, int month, int day){
|
||||
GregorianCalendar start = new GregorianCalendar(year, month-1, day);
|
||||
//Calendar.DAY_OF_WEEK starts with 1 for Sunday, and onwards
|
||||
int dayOfWeek = start.get(Calendar.DAY_OF_WEEK);
|
||||
Cursor cursor = null;
|
||||
|
||||
//Check availabilities on day of week
|
||||
switch (dayOfWeek){
|
||||
case 1: //Sunday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_SUNSTART, COLUMN_SUNEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 2: //Monday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_MONSTART, COLUMN_MONEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 3: //Tuesday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_TUESTART, COLUMN_TUEEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 4: //Wednesday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_WEDSTART, COLUMN_WEDEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 5: //Thursday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_THUSTART, COLUMN_THUEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 6: //Friday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_FRISTART, COLUMN_FRIEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
case 7: //Saturday
|
||||
cursor = writeDB.query(TABLE_AVAILABILITY, new String[] {COLUMN_SATSTART, COLUMN_SATEND},
|
||||
COLUMN_AVAILABILITYNAME + " = ?", new String[] {serviceProvider}, null,
|
||||
null, null, null);
|
||||
break;
|
||||
}
|
||||
|
||||
return cursor;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to change booking status
|
||||
* @param booking
|
||||
* @param status status to update
|
||||
* @return true if modification was successful
|
||||
*/
|
||||
private boolean modifyBookingStatus(Booking booking, Status status){
|
||||
if (booking == null) return false;
|
||||
|
||||
GregorianCalendar current = new GregorianCalendar();
|
||||
current.setTimeInMillis(System.currentTimeMillis());
|
||||
GregorianCalendar bookDate = new GregorianCalendar(booking.getYear(), booking.getMonth()-1,
|
||||
booking.getDay(), booking.getStarth(), booking.getStartmin());
|
||||
|
||||
//check if time of booking has passed
|
||||
if (current.compareTo(bookDate) > 0) return false;
|
||||
|
||||
ContentValues contentValues = new ContentValues();
|
||||
contentValues.put(COLUMN_BOOKINGSTATUS, status.toString());
|
||||
|
||||
return writeDB.update(TABLE_BOOKINGS, contentValues,
|
||||
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||
+ COLUMN_BOOKINGHOMEOWNER + " = ? AND "
|
||||
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTART + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTATUS + " != " + Status.CANCELLED.toString() + ")",
|
||||
new String[] {booking.getServiceprovider().getUsername(),
|
||||
booking.getHomeowner().getUsername(),
|
||||
String.valueOf(booking.getYear()),
|
||||
String.valueOf(booking.getMonth()),
|
||||
String.valueOf(booking.getDay()),
|
||||
String.valueOf(booking.getStarth()*60 + booking.getStartmin())}) > 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper method to determine whether service provider is available at specified date and time.
|
||||
* Returns false if end time before start time, or service provider not available
|
||||
*
|
||||
* @param serviceProvider
|
||||
* @param year
|
||||
* @param month
|
||||
* @param day
|
||||
* @param starth
|
||||
* @param startmin
|
||||
* @param endh
|
||||
* @param endmin
|
||||
* @return true if service provider is available for specified time slot
|
||||
*/
|
||||
private boolean isProviderAvailable(String serviceProvider, int year, int month, int day,
|
||||
int starth, int startmin, int endh, int endmin){
|
||||
|
||||
int bookingStart = starth*60 + startmin;
|
||||
int bookingEnd = endh*60 + endmin;
|
||||
int availabilityStart, availabilityEnd;
|
||||
|
||||
if (bookingEnd < bookingStart) return false;
|
||||
|
||||
Cursor cursor = getAvailabilityByDayOfWeek(serviceProvider, year, month, day);
|
||||
|
||||
cursor.moveToFirst();
|
||||
availabilityStart = cursor.getInt(0);
|
||||
availabilityEnd = cursor.getInt(1);
|
||||
|
||||
//service provider not available if availability end is 0, if availability starts after booking start,
|
||||
// or if availability ends before booking end
|
||||
if (availabilityEnd == 0 || availabilityStart > bookingStart || availabilityEnd < bookingEnd) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//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
|
||||
cursor = writeDB.query(TABLE_BOOKINGS, new String[] {COLUMN_BOOKINGSTART, COLUMN_BOOKINGEND},
|
||||
COLUMN_BOOKINGSERVICEPROVIDER + " = ? AND "
|
||||
+ COLUMN_BOOKINGYEAR + " = ? AND "
|
||||
+ COLUMN_BOOKINGMONTH + " = ? AND "
|
||||
+ COLUMN_BOOKINGDATE + " = ? AND "
|
||||
+ COLUMN_BOOKINGSTATUS + " != ?",
|
||||
new String[] {serviceProvider, String.valueOf(year),
|
||||
String.valueOf(month), String.valueOf(day), Status.CANCELLED.toString()},
|
||||
null, null, COLUMN_BOOKINGSTART, null);
|
||||
if (cursor.moveToFirst()){
|
||||
for (int i = 0; i<cursor.getCount(); i++){
|
||||
availabilityStart = cursor.getInt(0);
|
||||
availabilityEnd = cursor.getInt(1);
|
||||
|
||||
if ((availabilityStart < bookingStart && availabilityEnd > bookingStart)||
|
||||
(availabilityStart < bookingEnd && availabilityEnd > bookingEnd) ||
|
||||
(availabilityStart > bookingStart && availabilityEnd < bookingEnd)) return false;
|
||||
|
||||
cursor.moveToNext();
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -18,6 +18,15 @@ import static org.junit.Assert.*;
|
|||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(packageName = "com.uottawa.olympus.olympusservices")
|
||||
public class DBIntegrationTest {
|
||||
|
||||
/**
|
||||
* Enum for setting up before a test
|
||||
*/
|
||||
private enum TestAfter{
|
||||
USER, SERVICE, LINK, AVAILABILITY, BOOKING, RATING;
|
||||
}
|
||||
|
||||
|
||||
private DBHelper dbHelper = new DBHelper(RuntimeEnvironment.application);
|
||||
|
||||
//testing user login table
|
||||
|
@ -121,7 +130,7 @@ public class DBIntegrationTest {
|
|||
|
||||
dbHelper.deleteUser("jbO4aBF4dC");
|
||||
|
||||
List<String> providersList = dbHelper.getAllProvidersByService("hitman");
|
||||
List<String[]> providersList = dbHelper.getAllProvidersByService("hitman");
|
||||
assertEquals(0, providersList.size());
|
||||
providersList = dbHelper.getAllProvidersByService("hitman");
|
||||
assertEquals(0, providersList.size());
|
||||
|
@ -174,9 +183,10 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testGetAllUsers(){
|
||||
dbHelper.addUser(new HomeOwner("jbO4aBF4dC", "soccer", "Miguel", "Garzon"));
|
||||
setUp(TestAfter.USER);
|
||||
|
||||
List<String[]> allUsers = dbHelper.getAllUsers();
|
||||
assertEquals(allUsers.size(), 5);
|
||||
|
||||
for (String[] user : allUsers){
|
||||
/* for (String s : user){
|
||||
|
@ -260,15 +270,12 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testGetAllServices(){
|
||||
dbHelper.addService(new Service("Exterminating flatworms", 20.00));
|
||||
setUp(TestAfter.SERVICE);
|
||||
|
||||
List<String[]> allServices = dbHelper.getAllServices();
|
||||
assertTrue(allServices.size() == 3);
|
||||
|
||||
for (String[] service : allServices){
|
||||
/* for (String s : user){
|
||||
System.out.print(s + " ");
|
||||
}
|
||||
System.out.println();*/
|
||||
Service dbService = dbHelper.findService(service[0]);
|
||||
assertEquals(dbService.getRate(), Double.parseDouble(service[1]), 0.001);
|
||||
}
|
||||
|
@ -278,9 +285,8 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testAddAndDeleteServiceProvidedByUser(){
|
||||
dbHelper.addUser(new ServiceProvider("jbO4aBF4dC", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true));
|
||||
dbHelper.addService(new Service("Hitman", 12358));
|
||||
setUp(TestAfter.SERVICE);
|
||||
|
||||
boolean added = dbHelper.addServiceProvidedByUser("jbO4aBF4dC", "hitman");
|
||||
assertTrue(added);
|
||||
boolean deleted = dbHelper.deleteServiceProvidedByUser("jbO4aBF4dC", "Hitman");
|
||||
|
@ -291,19 +297,9 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testGetAllServicesProvidedByUserAndDeleteService(){
|
||||
ServiceProvider serviceProvider = new ServiceProvider("jbO4aBF4dC", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true);
|
||||
dbHelper.addUser(serviceProvider);
|
||||
setUp(TestAfter.LINK);
|
||||
|
||||
Service service1 = new Service("Hitman", 12358);
|
||||
Service service2 = new Service("Exterminating flatworms", 392.457);
|
||||
dbHelper.addService(service1);
|
||||
dbHelper.addService(service2);
|
||||
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider, service1);
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider, service2);
|
||||
|
||||
List<String[]> servicesProvidedByUser = dbHelper.getAllServicesProvidedByUser(serviceProvider);
|
||||
List<String[]> servicesProvidedByUser = dbHelper.getAllServicesProvidedByUser("jbO4aBF4dC");
|
||||
assertEquals(2, servicesProvidedByUser.size());
|
||||
assertEquals("hitman", servicesProvidedByUser.get(0)[0]);
|
||||
assertEquals(12358, Double.parseDouble(servicesProvidedByUser.get(0)[1]), 0.00001);
|
||||
|
@ -323,20 +319,13 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testGetAllProvidersByService(){
|
||||
dbHelper.addService(new Service("Exterminating flatworms", 392.457));
|
||||
dbHelper.addUser(new ServiceProvider("jbO4aBF4dC", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true));
|
||||
dbHelper.addUser(new ServiceProvider("7MuF1c59XP", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true));
|
||||
setUp(TestAfter.LINK);
|
||||
|
||||
dbHelper.addServiceProvidedByUser("jbO4aBF4dC", "exterminating flatworms");
|
||||
dbHelper.addServiceProvidedByUser("7MuF1c59XP", "exterminating flatworms");
|
||||
|
||||
List<String> providersByService = dbHelper.getAllProvidersByService("exterminating flatworms");
|
||||
List<String[]> providersByService = dbHelper.getAllProvidersByService("exterminating flatworms");
|
||||
|
||||
assertEquals(2, providersByService.size());
|
||||
assertEquals("jbO4aBF4dC", providersByService.get(0));
|
||||
assertEquals("7MuF1c59XP", providersByService.get(1));
|
||||
assertEquals("jbO4aBF4dC", providersByService.get(0)[0]);
|
||||
assertEquals("DW44FkUsX7", providersByService.get(1)[0]);
|
||||
|
||||
dbHelper.deleteAll();
|
||||
}
|
||||
|
@ -344,19 +333,9 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testDeleteServiceProvidedByUser(){
|
||||
ServiceProvider serviceProvider = new ServiceProvider("jbO4aBF4dC", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true);
|
||||
dbHelper.addUser(serviceProvider);
|
||||
setUp(TestAfter.LINK);
|
||||
|
||||
Service service1 = new Service("Hitman", 12358);
|
||||
Service service2 = new Service("Exterminating flatworms", 392.457);
|
||||
dbHelper.addService(service1);
|
||||
dbHelper.addService(service2);
|
||||
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider, service1);
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider, service2);
|
||||
|
||||
List<String[]> servicesProvidedByUser = dbHelper.getAllServicesProvidedByUser(serviceProvider);
|
||||
List<String[]> servicesProvidedByUser = dbHelper.getAllServicesProvidedByUser("jbO4aBF4dC");
|
||||
assertEquals(2, servicesProvidedByUser.size());
|
||||
|
||||
dbHelper.deleteServiceProvidedByUser("jbO4aBF4dC","hitman");
|
||||
|
@ -435,32 +414,90 @@ public class DBIntegrationTest {
|
|||
|
||||
@Test
|
||||
public void testAddBooking(){
|
||||
ServiceProvider serviceProvider = new ServiceProvider("jbO4aBF4dC", null, null, null,
|
||||
"testaddress", "8888888888", "companydotcom", true);
|
||||
serviceProvider.setAvailabilities(0, 4, 18, 19, 30);
|
||||
serviceProvider.setAvailabilities(1, 5, 20, 21, 11);
|
||||
serviceProvider.setAvailabilities(3, 7, 12, 15, 14);
|
||||
serviceProvider.setAvailabilities(4, 0, 0, 23, 29);
|
||||
|
||||
dbHelper.addUser(serviceProvider);
|
||||
dbHelper.updateAvailability(serviceProvider);
|
||||
|
||||
dbHelper.addUser(new HomeOwner("7MuF1c59XP", null, null, null));
|
||||
|
||||
dbHelper.addService(new Service("Hitman", 12358));
|
||||
dbHelper.addServiceProvidedByUser("jbO4aBF4dC", "Hitman");
|
||||
setUp(TestAfter.BOOKING);
|
||||
|
||||
//December 1, 2020 is a Tuesday. Provider is available from 5:20 to 21:11
|
||||
boolean added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||
2018, 11, 20, 8, 12, 10, 0);
|
||||
2020, 12, 1, 8, 12, 10, 0);
|
||||
assertTrue(added);
|
||||
//Provider is available from 5:20 to 21:11, but has a booking from 8:12 to 10:00
|
||||
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||
2018, 11, 20, 9, 12, 12, 0);
|
||||
2020, 12, 1, 9, 12, 12, 0);
|
||||
assertTrue(!added);
|
||||
|
||||
//December 3, 2020 is was a Thursday. Provider is available from 7:12 to 15:14
|
||||
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||
2018, 11, 22, 6, 12, 7, 30);
|
||||
2020, 12, 3, 6, 12, 7, 30);
|
||||
assertTrue(!added);
|
||||
|
||||
//November 20, 2018 is in the past. Should not be able to add booking
|
||||
added = dbHelper.addBooking("jbO4aBF4dC", "7MuF1c59XP", "Hitman",
|
||||
2018, 11, 20, 8, 12, 10, 0);
|
||||
assertTrue(!added);
|
||||
|
||||
dbHelper.deleteAll();
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testConfirmBooking(){
|
||||
// setUp(TestAfter.RATING);
|
||||
//
|
||||
// }
|
||||
|
||||
// Ever gotten tired of adding things at the start of a test just to delete it all again?
|
||||
// I have.
|
||||
// This is a work in progress
|
||||
private void setUp(TestAfter testAfter){
|
||||
dbHelper.deleteAll();
|
||||
|
||||
dbHelper.addUser(new Admin());
|
||||
|
||||
ServiceProvider serviceProvider1 = new ServiceProvider("jbO4aBF4dC", null, "Jack", "Black",
|
||||
"testaddress", "8888888888", "companydotcom", true);
|
||||
dbHelper.addUser(serviceProvider1);
|
||||
|
||||
ServiceProvider serviceProvider2 = new ServiceProvider("DW44FkUsX7", null, "Dwayne", "Johnson",
|
||||
"testaddress", "1248921742", "companydotcom", false);
|
||||
dbHelper.addUser(serviceProvider2);
|
||||
|
||||
HomeOwner homeOwner1 = new HomeOwner("7MuF1c59XP", null, "Mufasa", "Died");
|
||||
dbHelper.addUser(homeOwner1);
|
||||
|
||||
HomeOwner homeOwner2 = new HomeOwner("wRV3phzpl5", null, "Wren", "Phillips");
|
||||
dbHelper.addUser(homeOwner2);
|
||||
|
||||
Service service1 = new Service("Hitman", 12358);
|
||||
dbHelper.addService(service1);
|
||||
|
||||
Service service2 = new Service("Exterminating flatworms", 392.457);
|
||||
dbHelper.addService(service2);
|
||||
|
||||
Service service3 = new Service("Petting cats", 0);
|
||||
dbHelper.addService(service3);
|
||||
|
||||
if (!(testAfter.equals(TestAfter.USER) || testAfter.equals(TestAfter.SERVICE))){
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider1, service1);
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider1, service2);
|
||||
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider2, service3);
|
||||
dbHelper.addServiceProvidedByUser(serviceProvider2, service2);
|
||||
|
||||
if (!testAfter.equals(TestAfter.LINK)){
|
||||
serviceProvider1.setAvailabilities(0, 4, 18, 19, 30);
|
||||
serviceProvider1.setAvailabilities(1, 5, 20, 21, 11);
|
||||
serviceProvider1.setAvailabilities(3, 7, 12, 15, 14);
|
||||
serviceProvider1.setAvailabilities(4, 0, 0, 23, 29);
|
||||
|
||||
dbHelper.updateAvailability(serviceProvider1);
|
||||
|
||||
if (!testAfter.equals(TestAfter.AVAILABILITY)){
|
||||
Booking booking1 = new Booking(8, 12, 10, 0,1,
|
||||
12, 2020, serviceProvider1, homeOwner1, service1);
|
||||
dbHelper.addBooking(booking1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue