Removed unused rate class and documented reservation class
This commit is contained in:
@@ -1,33 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Ophelias.Models;
|
|
||||||
|
|
||||||
namespace Ophelias.Models
|
|
||||||
{
|
|
||||||
internal class BaseRate
|
|
||||||
{
|
|
||||||
internal int Id;
|
|
||||||
internal double Rate;
|
|
||||||
internal DateTime DateSet;
|
|
||||||
|
|
||||||
internal BaseRate(int id, double rate)
|
|
||||||
{
|
|
||||||
Id = id;
|
|
||||||
Rate = rate;
|
|
||||||
DateSet = DateTime.Now;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal class Rates
|
|
||||||
{
|
|
||||||
internal List<BaseRate> BaseRates;
|
|
||||||
|
|
||||||
internal Rates()
|
|
||||||
{
|
|
||||||
BaseRates = new();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -5,6 +5,52 @@ namespace Ophelias.Models
|
|||||||
{
|
{
|
||||||
internal class Reservation
|
internal class Reservation
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* The reservation class is comprised of many pieces of information. For details on the
|
||||||
|
* Guest and Transaction components, see Guest and Transaction classes.
|
||||||
|
*
|
||||||
|
* Reservations are comprised of the following:
|
||||||
|
*
|
||||||
|
* ID
|
||||||
|
* Identifies the reservation
|
||||||
|
*
|
||||||
|
* RoomNum
|
||||||
|
* Indicates what room the guest is staying/ stayed in
|
||||||
|
*
|
||||||
|
* Guest
|
||||||
|
* See Guest.cs model class
|
||||||
|
*
|
||||||
|
* Transaction
|
||||||
|
* See Transaction.cs model class
|
||||||
|
*
|
||||||
|
* IsNoShow
|
||||||
|
* Boolean to indicate if someone is a no-show/ does not show up to their
|
||||||
|
* scheduled reservation
|
||||||
|
*
|
||||||
|
* Type
|
||||||
|
* The type of reservation made (Conventional, Prepaid, Incentive, 60-day/ Advance)
|
||||||
|
*
|
||||||
|
* Status
|
||||||
|
* Indicates if the reservation is active, changed, cancelled, or ended
|
||||||
|
*
|
||||||
|
* CreationDate
|
||||||
|
* The date the reservation was created
|
||||||
|
*
|
||||||
|
* StartDate
|
||||||
|
* The date the reservation is scheduled to being
|
||||||
|
*
|
||||||
|
* EndDate
|
||||||
|
* The date the reservation is scheduled to end
|
||||||
|
*
|
||||||
|
* CheckIn
|
||||||
|
* Reflects when the guest checked in, currently mirrors StartDate when set
|
||||||
|
*
|
||||||
|
* CheckOut
|
||||||
|
* Reflects when the guest checked out, currently mirrors EndDate when set
|
||||||
|
*
|
||||||
|
* DateChanged
|
||||||
|
* The date the reservation was updated/ changed
|
||||||
|
*/
|
||||||
internal int Id;
|
internal int Id;
|
||||||
internal int? RoomNum;
|
internal int? RoomNum;
|
||||||
internal Guest Guest;
|
internal Guest Guest;
|
||||||
@@ -27,8 +73,24 @@ namespace Ophelias.Models
|
|||||||
DateTime CreationDate, DateTime StartDate, DateTime EndDate, ReservationStatus Status = ReservationStatus.Active,
|
DateTime CreationDate, DateTime StartDate, DateTime EndDate, ReservationStatus Status = ReservationStatus.Active,
|
||||||
bool IsNoShow = false, DateTime? CheckIn = null, DateTime? CheckOut = null, DateTime? DateChanged = null, int? RoomNum = null)
|
bool IsNoShow = false, DateTime? CheckIn = null, DateTime? CheckOut = null, DateTime? DateChanged = null, int? RoomNum = null)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Creates a new reservation assuming it never existed in the first place.
|
||||||
|
*
|
||||||
|
* Upon creating a reservation, this function will set the appropriate fees
|
||||||
|
* based on the type of reservation. See TxFunctions in the transaction class
|
||||||
|
* for the specific fee multiplier values. The base rate is then retrieved for
|
||||||
|
* the current date if a new one was set for that date, otherwise the base rate
|
||||||
|
* used is whatever the default last was. We do not tether the rate to an ID
|
||||||
|
* since the rate only changes when the reservation is tweaked. This information
|
||||||
|
* is then passed off to create a new Transaction. See the Transaction class for
|
||||||
|
* more information.
|
||||||
|
*
|
||||||
|
* Once a new transaction has been created, a database connection is opened to create
|
||||||
|
* a new reservation and the ID generated is returned back. This value is then set
|
||||||
|
* to the reservation and a new instance is returned.
|
||||||
|
*/
|
||||||
int Id; double Multiplier;
|
int Id; double Multiplier;
|
||||||
switch (Type)
|
switch (Type) // Determines the appropriate fee multiplier to set
|
||||||
{
|
{
|
||||||
case ReservationType.Conventional: Multiplier = TxFunctions.ConventionalFee; break;
|
case ReservationType.Conventional: Multiplier = TxFunctions.ConventionalFee; break;
|
||||||
case ReservationType.Prepaid: Multiplier = TxFunctions.PrepaidFee; break;
|
case ReservationType.Prepaid: Multiplier = TxFunctions.PrepaidFee; break;
|
||||||
@@ -36,27 +98,31 @@ namespace Ophelias.Models
|
|||||||
case ReservationType.SixtyDayAdvance: Multiplier = TxFunctions.SixtyDayFee; break;
|
case ReservationType.SixtyDayAdvance: Multiplier = TxFunctions.SixtyDayFee; break;
|
||||||
default: throw new NotImplementedException();
|
default: throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
double? BaseRate = Hotel.GetBaseRate();
|
double? BaseRate = Hotel.GetBaseRate(); // Checks to see if there is a new base rate and uses the rate returned, old default or new default
|
||||||
if (BaseRate == null)
|
if (BaseRate == null) // Exists for the unlikely situation a reservation is made on a null rate
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
Transaction Transaction = new(
|
Transaction Transaction = new( // Creates a new transaction, see the Transaction class for more details on TxFunctions or trnsaction itself
|
||||||
Rate: (double)BaseRate,
|
Rate: (double)BaseRate,
|
||||||
Owed: TxFunctions.CalculateOwed((double)BaseRate, (int)(EndDate.Date - StartDate.Date).TotalDays, Multiplier),
|
Owed: TxFunctions.CalculateOwed((double)BaseRate, (int)(EndDate.Date - StartDate.Date).TotalDays, Multiplier),
|
||||||
Multiplier: Multiplier,
|
Multiplier: Multiplier,
|
||||||
PayBy: TxFunctions.GetPayByDate(Type, StartDate, EndDate)
|
PayBy: TxFunctions.GetPayByDate(Type, StartDate, EndDate)
|
||||||
);
|
);
|
||||||
using (Database Manager = new())
|
using (Database Manager = new()) // Creates a new database connection
|
||||||
{
|
{
|
||||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
using (SQLiteCommand cmd = Manager.con.CreateCommand()) // Creates a new command that will be executed in the database
|
||||||
{
|
{
|
||||||
if (RoomNum != null)
|
if (RoomNum != null)
|
||||||
{
|
{
|
||||||
this.RoomNum = RoomNum;
|
this.RoomNum = RoomNum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The folowing is a query with parameters that are set based off certain conditions,
|
||||||
|
* such as if the value exists.
|
||||||
|
*/
|
||||||
cmd.CommandText =
|
cmd.CommandText =
|
||||||
"INSERT INTO reservations (RoomNum, GuestID, TransactionID, IsNoShow, Type, Status, CreationDate, StartDate, EndDate, CheckIn, CheckOut, DateChanged) " +
|
"INSERT INTO reservations (RoomNum, GuestID, TransactionID, IsNoShow, Type, Status, CreationDate, StartDate, EndDate, CheckIn, CheckOut, DateChanged) " +
|
||||||
"VALUES (@RoomNum, @GuestID, @TransactionID, @IsNoShow, @Type, @Status, @CreationDate, @StartDate, @EndDate, @CheckIn, @CheckOut, @DateChanged);";
|
"VALUES (@RoomNum, @GuestID, @TransactionID, @IsNoShow, @Type, @Status, @CreationDate, @StartDate, @EndDate, @CheckIn, @CheckOut, @DateChanged);";
|
||||||
@@ -98,7 +164,7 @@ namespace Ophelias.Models
|
|||||||
|
|
||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
Id = (int)Manager.con.LastInsertRowId;
|
Id = (int)Manager.con.LastInsertRowId; // Sets the ID returned by the query
|
||||||
}
|
}
|
||||||
this.Id = Id;
|
this.Id = Id;
|
||||||
this.RoomNum = RoomNum;
|
this.RoomNum = RoomNum;
|
||||||
@@ -117,6 +183,10 @@ namespace Ophelias.Models
|
|||||||
internal Reservation(int Id, Guest Guest, Transaction Transaction, ReservationType Type, ReservationStatus Status,
|
internal Reservation(int Id, Guest Guest, Transaction Transaction, ReservationType Type, ReservationStatus Status,
|
||||||
DateTime CreationDate, DateTime StartDate, DateTime EndDate, bool IsNoShow = false, DateTime? CheckIn = null, DateTime? CheckOut = null, DateTime? DateChanged = null, int? RoomNum = null)
|
DateTime CreationDate, DateTime StartDate, DateTime EndDate, bool IsNoShow = false, DateTime? CheckIn = null, DateTime? CheckOut = null, DateTime? DateChanged = null, int? RoomNum = null)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* This creates and returns a reservation assuming it already existed
|
||||||
|
* as an ID is required if the reservation exists in the system.
|
||||||
|
*/
|
||||||
this.Id = Id;
|
this.Id = Id;
|
||||||
this.RoomNum = RoomNum;
|
this.RoomNum = RoomNum;
|
||||||
this.Guest = Guest;
|
this.Guest = Guest;
|
||||||
@@ -133,14 +203,21 @@ namespace Ophelias.Models
|
|||||||
}
|
}
|
||||||
internal void ChangeReservationDates(DateTime StartDate, DateTime EndDate)
|
internal void ChangeReservationDates(DateTime StartDate, DateTime EndDate)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Change Reservation Dates allows for the manipulation of start and end dates.
|
||||||
|
* These changes saved to the reservation and reflected in the database.
|
||||||
|
* It also makes a call to update the transaction fees. See Transaction class for
|
||||||
|
* details on this. A new rate and multiplier are set also since reservation changes
|
||||||
|
* come at the cost of paying based on the most recent base rate and 110% multipler.
|
||||||
|
*/
|
||||||
this.StartDate = StartDate;
|
this.StartDate = StartDate;
|
||||||
this.EndDate = EndDate;
|
this.EndDate = EndDate;
|
||||||
DateChanged = DateTime.Now.Date;
|
DateChanged = DateTime.Now.Date;
|
||||||
using (Database Manager = new())
|
using (Database Manager = new()) // Creates a new database connection
|
||||||
{
|
{
|
||||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
using (SQLiteCommand cmd = Manager.con.CreateCommand()) // Creates a new command that will be executed in the database
|
||||||
{
|
{
|
||||||
string? query = QueryBuilder.UpdateReservation(Id: Id, Status: ReservationStatus.Changed, StartDate: this.StartDate, EndDate: this.EndDate, DateChanged: DateChanged);
|
string? query = QueryBuilder.UpdateReservation(Id: Id, Status: ReservationStatus.Changed, StartDate: this.StartDate, EndDate: this.EndDate, DateChanged: DateChanged); // Builds a new query string with parameters
|
||||||
|
|
||||||
if (query == null)
|
if (query == null)
|
||||||
{
|
{
|
||||||
@@ -156,22 +233,29 @@ namespace Ophelias.Models
|
|||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
double? BaseRate = Hotel.GetBaseRate();
|
double? BaseRate = Hotel.GetBaseRate(); // Checks for the most recent rate to replace the old rate
|
||||||
if (BaseRate == null)
|
if (BaseRate == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(BaseRate));
|
throw new ArgumentNullException(nameof(BaseRate));
|
||||||
}
|
}
|
||||||
|
|
||||||
Transaction.UpdateTransactionFees((double)BaseRate, TxFunctions.Changed, TxFunctions.GetPayByDate(Type, this.StartDate, this.EndDate));
|
Transaction.UpdateTransactionFees((double)BaseRate, TxFunctions.Changed, TxFunctions.GetPayByDate(Type, this.StartDate, this.EndDate)); // Creates a new transaction
|
||||||
}
|
}
|
||||||
internal void CancelReservation()
|
internal void CancelReservation()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Cancel Reservation will cancel the existing reservation and issue penalties
|
||||||
|
* if they apply. Specifically if the reservation type is conventional, incentive,
|
||||||
|
* or the reservation is past due and the right criteria are met, the transaction
|
||||||
|
* class calls the pay function and the accounts are charged. See Transaction.Pay()
|
||||||
|
* for more details. The reservation is also set to cancelled in the database.
|
||||||
|
*/
|
||||||
DateTime _DateChanged = DateTime.Now.Date;
|
DateTime _DateChanged = DateTime.Now.Date;
|
||||||
using (Database Manager = new())
|
using (Database Manager = new()) // Creates a new database connection
|
||||||
{
|
{
|
||||||
using (SQLiteCommand cmd = Manager.con.CreateCommand())
|
using (SQLiteCommand cmd = Manager.con.CreateCommand()) // Creates a new command that will be executed in the database
|
||||||
{
|
{
|
||||||
string? query = QueryBuilder.UpdateReservation(Id: Id, Status: ReservationStatus.Cancelled, DateChanged: _DateChanged);
|
string? query = QueryBuilder.UpdateReservation(Id: Id, Status: ReservationStatus.Cancelled, DateChanged: _DateChanged); // Builds a new query string with parameters
|
||||||
|
|
||||||
if (query == null)
|
if (query == null)
|
||||||
{
|
{
|
||||||
@@ -188,26 +272,28 @@ namespace Ophelias.Models
|
|||||||
cmd.ExecuteNonQuery();
|
cmd.ExecuteNonQuery();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Type == ReservationType.Conventional && _DateChanged.Date >= StartDate.AddDays(-3).Date)
|
if (Type == ReservationType.Conventional && _DateChanged.Date >= StartDate.AddDays(-3).Date) // Charge conventional reservations cancelled three or less days of stay
|
||||||
{
|
{
|
||||||
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
||||||
} else if (Type == ReservationType.Incentive && _DateChanged.Date >= StartDate.AddDays(-3).Date)
|
}
|
||||||
|
else if (Type == ReservationType.Incentive && _DateChanged.Date >= StartDate.AddDays(-3).Date) // Charge incentive based on the same policy as conventional
|
||||||
{
|
{
|
||||||
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
||||||
} else if (_DateChanged.Date > StartDate.Date)
|
}
|
||||||
|
else if (_DateChanged.Date > StartDate.Date) // Charge based on no-show
|
||||||
{
|
{
|
||||||
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
Transaction.Pay(Transaction.Owed, Guest.CreditCard);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
internal enum ReservationStatus
|
internal enum ReservationStatus // Represets numerical values as words
|
||||||
{
|
{
|
||||||
Active,
|
Active,
|
||||||
Changed,
|
Changed,
|
||||||
Cancelled,
|
Cancelled,
|
||||||
Ended,
|
Ended,
|
||||||
}
|
}
|
||||||
internal enum ReservationType
|
internal enum ReservationType // Represents numerical values as words
|
||||||
{
|
{
|
||||||
Conventional,
|
Conventional,
|
||||||
Prepaid,
|
Prepaid,
|
||||||
|
|||||||
Reference in New Issue
Block a user