Added reporting classes and implemented/ updated terminal commands
This commit versions the inital classes used for reporting. Some of the manager classes have been adjusted so that they can also be used in the reporting system since the queries are very similar. The terminal commands and flow have been improved to further close in on the design spec. Guests who make reservations now abide by the fixed rules determined by the doc. For example Prepaid and 60 day reservations have requirements on how far away a reservation needs to be at minimum. The reservation creation process now takes this into account. The base rate functionality has been hooked up and the queries have been verified to work at least once. The same applies for CheckIn() and CheckOut() functions.
This commit is contained in:
@@ -48,9 +48,10 @@ namespace Ophelias.Managers
|
||||
}
|
||||
return Occupancies;
|
||||
}
|
||||
internal static int AvgOccupancySpan(DateTime Start, DateTime End)
|
||||
internal static (int, bool) AvgOccupancySpan(DateTime Start, DateTime End)
|
||||
{
|
||||
int thirtyDayOcc = 0;
|
||||
bool maxCapacityInRange = false;
|
||||
int days = (int)(End.Date - Start.Date).TotalDays;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
@@ -61,19 +62,26 @@ namespace Ophelias.Managers
|
||||
cmd.CommandText = $@"SELECT COUNT(*)
|
||||
FROM reservations
|
||||
WHERE DATE(@Date)
|
||||
BETWEEN StartDate AND EndDate;";
|
||||
cmd.ExecuteNonQuery();
|
||||
BETWEEN @Start AND @End;";
|
||||
cmd.Parameters.AddWithValue("@Date", Start.AddDays(i).Date.ToString("yyyy-MM-dd"));
|
||||
cmd.Parameters.AddWithValue("@Start", Start);
|
||||
cmd.Parameters.AddWithValue("@End", End);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
reader.Read();
|
||||
if(reader.HasRows)
|
||||
if (reader.HasRows)
|
||||
{
|
||||
thirtyDayOcc += reader.GetInt32(0);
|
||||
if (reader.GetInt32(0) == 45)
|
||||
maxCapacityInRange = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return thirtyDayOcc / days;
|
||||
return (thirtyDayOcc / days, maxCapacityInRange);
|
||||
}
|
||||
internal static Guest? GetGuestByEmail(string Email)
|
||||
{
|
||||
@@ -104,7 +112,7 @@ namespace Ophelias.Managers
|
||||
}
|
||||
return g;
|
||||
}
|
||||
internal static Reservation? GetResByGuestAndDate(Guest g)
|
||||
internal static Reservation? GetResByGuest(Guest g)
|
||||
{
|
||||
Reservation? r = null;
|
||||
Transaction? t;
|
||||
@@ -152,6 +160,35 @@ namespace Ophelias.Managers
|
||||
}
|
||||
return r;
|
||||
}
|
||||
internal static TimeRefs? CanBeCheckedIn(string Email)
|
||||
{
|
||||
TimeRefs? status = null;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = $"SELECT * FROM reservation WHERE Email = @Email AND Status IN (0,1)";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.ExecuteNonQuery();
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
reader.Read();
|
||||
if (reader.HasRows)
|
||||
{
|
||||
DateTime dt = reader.GetDateTime(8);
|
||||
if (dt.Date == DateTime.Now.Date)
|
||||
status = TimeRefs.OnTime;
|
||||
else if (dt.Date > DateTime.Now.Date)
|
||||
status = TimeRefs.Late;
|
||||
else if (dt.Date < DateTime.Now.Date)
|
||||
status = TimeRefs.Early;
|
||||
} else
|
||||
status = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
internal static double? GetBaseRate()
|
||||
{
|
||||
double? rate;
|
||||
@@ -174,6 +211,29 @@ namespace Ophelias.Managers
|
||||
}
|
||||
return rate;
|
||||
}
|
||||
internal static bool GetBaseRateByDate(DateTime dt)
|
||||
{
|
||||
bool configured;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
string query = "SELECT Rate FROM rates WHERE DateSet = @Date;";
|
||||
cmd.CommandText = query;
|
||||
cmd.Parameters.AddWithValue("@Date", dt.ToString("yyyy-MM-dd"));
|
||||
cmd.ExecuteNonQuery();
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
reader.Read();
|
||||
if (reader.HasRows)
|
||||
configured = true;
|
||||
else
|
||||
configured = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return configured;
|
||||
}
|
||||
internal static void SetBaseRate(double Rate, DateTime DateSet)
|
||||
{
|
||||
double rate;
|
||||
@@ -184,7 +244,22 @@ namespace Ophelias.Managers
|
||||
string query = $"INSERT INTO rates (Rate, DateSet) VALUES (@Rate, @DateSet);";
|
||||
cmd.CommandText = query;
|
||||
cmd.Parameters.AddWithValue("@Rate", Rate);
|
||||
cmd.Parameters.AddWithValue("@DateSet", DateSet);
|
||||
cmd.Parameters.AddWithValue("@DateSet", DateSet.ToString("yyyy-MM-dd"));
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
}
|
||||
internal static void UpdateBaseRate(double Rate, DateTime DateSet)
|
||||
{
|
||||
double rate;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
string query = $"UPDATE rates SET rate = @Rate WHERE DateSet = @Date;";
|
||||
cmd.CommandText = query;
|
||||
cmd.Parameters.AddWithValue("@Rate", Rate);
|
||||
cmd.Parameters.AddWithValue("@Date", DateSet.ToString("yyyy-MM-dd"));
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
@@ -231,13 +306,119 @@ namespace Ophelias.Managers
|
||||
}
|
||||
}
|
||||
}
|
||||
internal static int CheckInGuest(DateTime CheckIn)
|
||||
internal static int? CheckInGuest(string Email, DateTime CheckIn)
|
||||
{
|
||||
return 1;
|
||||
int? RoomID = null;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteTransaction Transaction = Manager.con.BeginTransaction())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "UPDATE reservations SET RoomNum = (SELECT ID FROM rooms WHERE Occupied = 0 LIMIT 1), CheckIn = @Date " +
|
||||
"WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email) AND RoomNum IS NULL AND Status in (@SActive,@SChanged);";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Changed);
|
||||
cmd.Parameters.AddWithValue("@Date", CheckIn.ToString("yyyy-MM-dd"));
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "UPDATE rooms SET Occupied = 1 " +
|
||||
"WHERE ID = (SELECT RoomNum FROM reservations WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email AND Status in (@SActive,@SChanged))));";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Changed);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "SELECT RoomNum FROM reservations WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email AND Status in (@SActive,@SChanged))";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Changed);
|
||||
cmd.ExecuteNonQuery();
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
reader.Read();
|
||||
if (reader.HasRows)
|
||||
{
|
||||
RoomID = (int)reader.GetValue(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
Transaction.Commit();
|
||||
}
|
||||
}
|
||||
return RoomID;
|
||||
}
|
||||
internal static int CheckOutGuest(DateTime CheckOut)
|
||||
internal static bool GuestCurrentlyCheckedIn(string Email)
|
||||
{
|
||||
return 1;
|
||||
bool EntryFound;
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "SELECT * FROM reservations " +
|
||||
"WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email AND Status in (@SActive,@SChanged)) AND CheckIn IS NOT NULL";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Changed);
|
||||
cmd.ExecuteNonQuery();
|
||||
using (SQLiteDataReader reader = cmd.ExecuteReader())
|
||||
{
|
||||
reader.Read();
|
||||
if (reader.HasRows)
|
||||
EntryFound = true;
|
||||
else
|
||||
EntryFound = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return EntryFound;
|
||||
}
|
||||
internal static void CheckOutGuest(string Email, DateTime CheckOut)
|
||||
{
|
||||
using (DatabaseManager Manager = new DatabaseManager())
|
||||
{
|
||||
using (SQLiteTransaction Transaction = Manager.con.BeginTransaction())
|
||||
{
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "UPDATE rooms SET Occupied = 0 " +
|
||||
"WHERE ID = (SELECT RoomNum FROM reservations WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email AND Status in (@SActive,@SChanged)));";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Ended);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
||||
{
|
||||
cmd.CommandText = "UPDATE reservations SET RoomNum = NULL, CheckOut = @Date, Status = @Status " +
|
||||
"WHERE GuestID = (SELECT ID FROM guests WHERE Email = @Email) AND RoomNum IS NOT NULL AND Status in (@SActive,@SChanged);";
|
||||
cmd.Parameters.AddWithValue("@Email", Email);
|
||||
cmd.Parameters.AddWithValue("@Status", (int)ReservationStatus.Ended);
|
||||
cmd.Parameters.AddWithValue("@SActive", (int)ReservationStatus.Active);
|
||||
cmd.Parameters.AddWithValue("@SChanged", (int)ReservationStatus.Changed);
|
||||
cmd.Parameters.AddWithValue("@Date", CheckOut.ToString("yyyy-MM-dd"));
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
Transaction.Commit();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
internal static List<Reservation> GetActiveSixtyDayRes()
|
||||
{
|
||||
List<Reservation> list = new List<Reservation>();
|
||||
return list;
|
||||
}
|
||||
}
|
||||
internal enum TimeRefs
|
||||
{
|
||||
OnTime,
|
||||
Early,
|
||||
Late
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user