-
Notifications
You must be signed in to change notification settings - Fork 1
/
Reserva.cs
114 lines (100 loc) · 3.43 KB
/
Reserva.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
using Entidades.Excepciones;
using System.Text;
namespace Entidades.Modelos
{
/// <summary>
/// Clase que representa una reserva de un cliente
/// </summary>
///
public class Reserva
{
/// <summary>
/// Enumerado de las formas de pago admitidas de la/s <see cref="Reserva"/>/s
/// </summary>
public enum EFormaDePago
{
Efectivo = 0,
Debito = 6,
Credito = 10
}
private DateTime _fechaEntrada;
private DateTime _fechaSalida;
private EFormaDePago _formaDePago;
public Reserva()
{
_fechaEntrada = DateTime.Now;
_fechaSalida = DateTime.Now.AddDays(1);
_formaDePago = EFormaDePago.Efectivo;
}
#region Propiedades
public int Id { get; set; }
public DateTime FechaEntrada
{
get => _fechaEntrada;
set => SetFechaEntrada(value);
}
public DateTime FechaSalida
{
get => _fechaSalida;
set => SetFechaSalida(value);
}
public string FormaDePago
{
get => _formaDePago.ToString();
set => _formaDePago = (EFormaDePago) Enum.Parse(typeof(EFormaDePago), value);
}
public int Valor { get; set; }
#endregion
#region Metodos
/// <summary>
/// Verifica que la <see cref="FechaEntrada"/> sea valida
/// </summary>
/// <exception cref="FechaInvalidaException"></exception>
private void SetFechaEntrada(DateTime fechaEntrada)
{
if (fechaEntrada > fechaEntrada.AddYears(1))
{
throw new FechaInvalidaException("La fecha de entrada no puede ser posterior a un año");
}
_fechaEntrada = fechaEntrada;
}
/// <summary>
/// Verifica que <see cref="FechaSalida"/> sea valida
/// </summary>
/// <exception cref="FechaInvalidaException"></exception>
private void SetFechaSalida(DateTime fechaSalida)
{
if (fechaSalida <= _fechaEntrada)
{
throw new FechaInvalidaException("La fecha de salida no puede ser anterior a la fecha de entrada");
}
_fechaSalida = fechaSalida;
}
#endregion
/// <summary>
/// Devuelve un <see cref="string"/> con los datos de la reserva
/// </summary>
public override string ToString()
{
StringBuilder sb = new();
sb.AppendLine($"Numero {Id}:");
sb.Append(_fechaEntrada.ToString("M"));
sb.Append(" - ");
sb.AppendLine(_fechaSalida.ToString("M"));
sb.Append($"Valor: $");
sb.Append(Valor);
sb.Append($" USD ({FormaDePago})");
return sb.ToString();
}
/// <summary>
/// Una <see cref="Reserva"/> sera igual a un <see cref="Huesped"/> si el Id de la reserva
/// coincide con el Id de la reserva del huesped
/// </summary>
public static bool operator ==(Reserva r, Huesped h) => r.Id == h.IdReserva;
/// <summary>
/// Una <see cref="Reserva"/> sera distinta a un <see cref="Huesped"/> si el Id de la reserva
/// no coincide con el Id de la reserva del huesped
/// </summary>
public static bool operator !=(Reserva r, Huesped h) => !(r == h);
}
}