WIP: Adds several core models needed for functionality #24

Merged
yan-wah merged 10 commits from models into main 2022-04-16 04:48:19 -04:00
5 changed files with 218 additions and 6 deletions
Showing only changes of commit c1526a123f - Show all commits

View File

@@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ophelias.Guest.Models
namespace Ophelias.Models
{
internal class Guest
{
@@ -31,4 +31,13 @@ namespace Ophelias.Guest.Models
}
}
internal class GuestList
{
internal List<Guest> Guests;
internal GuestList()
{
Guests = new List<Guest>();
}
}
}

View File

@@ -0,0 +1,33 @@
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 List<BaseRate>();
}
}
}

View File

@@ -3,8 +3,9 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ophelias.Models;
namespace Oasis.Reservation.Models
namespace Ophelias.Models
{
internal class Reservation
{
@@ -47,13 +48,22 @@ namespace Oasis.Reservation.Models
CheckOut = null;
DateChanged = null;
}
internal void ChangeReservation(ReservationType type)
{
Status = ReservationStatus.Changed;
Type = type;
}
internal void CancelReservation()
{
Status = ReservationStatus.Cancelled;
}
}
internal enum ReservationStatus
{
Active,
Changed,
Cancelled,
Ended,
}
internal enum ReservationType
{
@@ -62,4 +72,13 @@ namespace Oasis.Reservation.Models
Incentive,
SixtyDayAdvance,
}
internal class ReservationList
{
internal List<Reservation> Reservations;
internal ReservationList()
{
Reservations = new List<Reservation>();
}
}
}

View File

@@ -6,7 +6,25 @@ using System.Threading.Tasks;
namespace OpheliasOasis.Models
{
internal class Class1
internal class Room
{
internal int Id;
internal bool Occupied;
internal Room(int id)
{
Id = id;
Occupied = false;
}
}
internal class RoomList
{
internal List<Room> Rooms;
internal RoomList()
{
Rooms = new List<Room>();
}
}
}

View File

@@ -3,10 +3,143 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ophelias.Models;
namespace OpheliasOasis
namespace Ophelias.Models
{
internal class Class1
internal class Transaction
{
private double PenaltyMultipler = 1.1;
internal int Id;
internal double Rate;
internal double Paid;
internal double Owed;
internal double? Penalty;
internal double? Multiplier;
internal double RefundAmount;
internal bool? Late;
internal bool PaidOff;
internal DateTime PayBy;
internal DateTime PaidOn;
internal Transaction(int id, ReservationType type, DateTime payby)
{
Id = id;
Paid = 0;
Owed = 0;
RefundAmount = 0;
PaidOff = false;
PayBy = payby;
Multiplier = Fee(type);
}
private bool IsOverdue()
{
if (DateTime.Now > PayBy)
{
return true;
}
return false;
}
private void SetChangeFees(ReservationType type, double rate)
{
switch (type)
{
case ReservationType.Conventional: return;
case ReservationType.Prepaid: SetFee(PenaltyMultipler); SetRate(rate); return;
case ReservationType.Incentive: return;
case ReservationType.SixtyDayAdvance: SetFee(PenaltyMultipler); SetRate(rate); return;
default: throw new NotImplementedException();
}
}
private void CancellationHandler(ReservationType type)
{
void SetRefund()
{
if (DateTime.Now.AddDays(+3).Day <= PayBy.Day)
{
RefundAmount = Paid;
Paid = 0;
Owed = 0;
PaidOff = false;
}
}
switch (type)
{
case ReservationType.Conventional: SetRefund(); return;
case ReservationType.Prepaid: return;
case ReservationType.Incentive: SetRefund(); return;
case ReservationType.SixtyDayAdvance: return;
default: throw new NotImplementedException();
}
}
internal void Penalize(ReservationStatus status, ReservationType type, double rate)
{
switch(status)
{
case ReservationStatus.Active: IsOverdue(); return;
case ReservationStatus.Cancelled: CancellationHandler(type); return;
case ReservationStatus.Changed: SetChangeFees(type, rate); return;
}
}
internal double Fee(ReservationType type)
{
switch (type)
{
case ReservationType.Conventional: return 1.0;
case ReservationType.Prepaid: return 0.75;
case ReservationType.Incentive: return 1.0;
case ReservationType.SixtyDayAdvance: return 0.85;
default: throw new NotImplementedException();
}
}
internal void SetFee(double mult)
{
Multiplier = mult;
}
internal void SetRate(double rate)
{
Rate = rate;
}
internal void Pay(double amount)
{
if (RefundAmount > -1)
{
return;
}
Paid += amount;
if (Paid == Owed)
{
Owed -= Paid;
PaidOn = DateTime.Now;
PaidOff = true;
} else if (Paid > Owed)
{
RefundAmount = Paid - Owed;
Owed = Owed - Paid + RefundAmount;
PaidOn = DateTime.Now;
PaidOff = true;
} else
{
Owed -= Paid;
PaidOn = DateTime.Now;
}
}
}
internal class TransactionList
{
internal List<Transaction> Transactions;
internal TransactionList()
{
Transactions = new List<Transaction>();
}
}
}