From c1526a123f8d460fa7740aad4add26f8f4412070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B2=E8=8F=AF?= <42814579+yunwah@users.noreply.github.com> Date: Fri, 8 Apr 2022 15:23:48 -0400 Subject: [PATCH] Updated and added various models This commit includes functionality for many of the models that the program will use. The transaction model, rate, and room model have been implemented, but still need further review to determine if they are finished. The same applies to guest and reservation. Currently all models include a simple list class, the decision to use a database or a serialized object (JSON, array, list, etc). These lists are currently a placeholder and are not guaranteed to land in main. --- OpheliasOasis/Models/Guest.cs | 11 ++- OpheliasOasis/Models/Rate.cs | 33 +++++++ OpheliasOasis/Models/Reservation.cs | 23 ++++- OpheliasOasis/Models/Room.cs | 20 +++- OpheliasOasis/Models/Transaction.cs | 137 +++++++++++++++++++++++++++- 5 files changed, 218 insertions(+), 6 deletions(-) create mode 100644 OpheliasOasis/Models/Rate.cs diff --git a/OpheliasOasis/Models/Guest.cs b/OpheliasOasis/Models/Guest.cs index d0e91f9..2bdc344 100644 --- a/OpheliasOasis/Models/Guest.cs +++ b/OpheliasOasis/Models/Guest.cs @@ -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 Guests; + + internal GuestList() + { + Guests = new List(); + } + } } diff --git a/OpheliasOasis/Models/Rate.cs b/OpheliasOasis/Models/Rate.cs new file mode 100644 index 0000000..40253e6 --- /dev/null +++ b/OpheliasOasis/Models/Rate.cs @@ -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 BaseRates; + + internal Rates() + { + BaseRates = new List(); + } + } +} diff --git a/OpheliasOasis/Models/Reservation.cs b/OpheliasOasis/Models/Reservation.cs index 28d0ace..0e628d6 100644 --- a/OpheliasOasis/Models/Reservation.cs +++ b/OpheliasOasis/Models/Reservation.cs @@ -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 Reservations; + + internal ReservationList() + { + Reservations = new List(); + } + } } diff --git a/OpheliasOasis/Models/Room.cs b/OpheliasOasis/Models/Room.cs index 505d30e..d1bbe2e 100644 --- a/OpheliasOasis/Models/Room.cs +++ b/OpheliasOasis/Models/Room.cs @@ -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 Rooms; + + internal RoomList() + { + Rooms = new List(); + } } } diff --git a/OpheliasOasis/Models/Transaction.cs b/OpheliasOasis/Models/Transaction.cs index d2b458d..887f4ee 100644 --- a/OpheliasOasis/Models/Transaction.cs +++ b/OpheliasOasis/Models/Transaction.cs @@ -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 Transactions; + + internal TransactionList() + { + Transactions = new List(); + } } }