Skip to content

Commit 3103b2a

Browse files
author
Thiag
committed
Correcciones: relación Venta–Cotizacion, RegistroVenta, Fachada
1 parent 5da7045 commit 3103b2a

File tree

5 files changed

+136
-67
lines changed

5 files changed

+136
-67
lines changed

src/Library/Cotizacion.cs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
namespace Library
44
{
55
/// <summary>
6-
/// Representa una cotización asociada a un cliente o interacción.
7-
/// Hereda de Interaccion.
6+
/// Representa una cotización realizada en el sistema.
7+
/// Hereda de Interaccion porque comparte los datos básicos (fecha, descripcion, notas, etc.).
88
/// </summary>
99
public class Cotizacion : Interaccion
1010
{
@@ -24,16 +24,8 @@ public class Cotizacion : Interaccion
2424
public double ImporteTotal { get; private set; }
2525

2626
/// <summary>
27-
/// Constructor que inicializa todos los campos de la cotización.
27+
/// Constructor que permite crear una cotización con todos los datos necesarios.
2828
/// </summary>
29-
/// <param name="estado">Estado de la cotización.</param>
30-
/// <param name="fechaEnvio">Fecha de envío de la cotización.</param>
31-
/// <param name="importeTotal">Importe total de la cotización.</param>
32-
/// <param name="fecha">Fecha de la interacción.</param>
33-
/// <param name="descripcion">Descripción de la interacción.</param>
34-
/// <param name="notas">Notas adicionales de la interacción.</param>
35-
/// <param name="respondida">Indica si la interacción fue respondida.</param>
36-
/// <param name="direccion">Dirección asociada a la interacción.</param>
3729
public Cotizacion(
3830
string estado,
3931
DateTime fechaEnvio,
@@ -45,14 +37,17 @@ public Cotizacion(
4537
string direccion
4638
) : base(fecha, descripcion, notas, respondida, direccion)
4739
{
48-
Estado = estado;
49-
FechaEnvio = fechaEnvio;
50-
ImporteTotal = importeTotal;
40+
this.Estado = estado;
41+
this.FechaEnvio = fechaEnvio;
42+
this.ImporteTotal = importeTotal;
5143
}
5244

5345
/// <summary>
54-
/// Constructor vacío para crear una cotización sin inicializar valores.
46+
/// Constructor por defecto.
5547
/// </summary>
56-
public Cotizacion() : base() { }
48+
public Cotizacion() : base()
49+
{
50+
// Este constructor deja los valores por defecto.
51+
}
5752
}
58-
}
53+
}

src/Library/Fachada.cs

Lines changed: 62 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public class Fachada
1313
private GestorUsuarios gestorUsuarios;
1414
private RegistroVenta registroVenta;
1515
private List<Etiqueta> etiquetas;
16+
private List<Cliente> clientes;
1617

1718
/// <summary>
1819
/// Constructor: inicializa los gestores y listas internas.
@@ -23,6 +24,7 @@ public Fachada()
2324
gestorUsuarios = GestorUsuarios.Instancia;
2425
registroVenta = new RegistroVenta(new List<Venta>());
2526
etiquetas = new List<Etiqueta>();
27+
clientes = new List<Cliente>();
2628
}
2729

2830
// =============================
@@ -37,6 +39,7 @@ public Fachada()
3739
/// <returns>ID asignado al vendedor.</returns>
3840
public int RegistrarVendedor(bool activo, DateTime fechaCreacion)
3941
{
42+
// Más adelante podríamos diferenciar tipos de usuario (vendedor/administrador)
4043
return gestorUsuarios.AgregarUsuario(activo, fechaCreacion);
4144
}
4245

@@ -48,6 +51,7 @@ public int RegistrarVendedor(bool activo, DateTime fechaCreacion)
4851
/// <returns>ID asignado al administrador.</returns>
4952
public int RegistrarAdministrador(bool activo, DateTime fechaCreacion)
5053
{
54+
// Idem comentario en RegistrarVendedor
5155
return gestorUsuarios.AgregarUsuario(activo, fechaCreacion);
5256
}
5357

@@ -58,12 +62,15 @@ public int RegistrarAdministrador(bool activo, DateTime fechaCreacion)
5862
public List<Usuario> ObtenerUsuarios()
5963
{
6064
List<Usuario> lista = new List<Usuario>();
65+
66+
// Este esquema asume IDs consecutivos comenzando en 1
6167
for (int id = 1; ; id++)
6268
{
6369
Usuario u = gestorUsuarios.ObtenerUsuario(id);
6470
if (u == null) break;
6571
lista.Add(u);
6672
}
73+
6774
return lista;
6875
}
6976

@@ -95,7 +102,10 @@ public void RegistrarCliente(string nombre, string apellido, string telefono, st
95102
FechaNacimiento = nacimiento,
96103
FechaUltimaInteraccion = DateTime.Now
97104
};
98-
// Podés integrar GestorClientes si querés manejar almacenamiento persistente
105+
106+
// Por ahora lo almacenamos en la lista interna de la fachada.
107+
// Más adelante se puede delegar a un GestorClientes.
108+
clientes.Add(nuevo);
99109
}
100110

101111
/// <summary>
@@ -104,7 +114,8 @@ public void RegistrarCliente(string nombre, string apellido, string telefono, st
104114
/// <returns>Lista de clientes.</returns>
105115
public List<Cliente> ObtenerClientes()
106116
{
107-
return new List<Cliente>();
117+
// Devolvemos una copia para no exponer la lista interna.
118+
return new List<Cliente>(clientes);
108119
}
109120

110121
// =============================
@@ -118,11 +129,42 @@ public List<Cliente> ObtenerClientes()
118129
public void RegistrarVenta(Venta venta)
119130
{
120131
if (venta == null)
132+
{
121133
throw new ArgumentNullException(nameof(venta));
134+
}
135+
136+
// La responsabilidad de almacenar la venta es de RegistroVenta.
137+
registroVenta.AgregarVenta(venta);
138+
}
139+
140+
/// <summary>
141+
/// Registra una nueva venta a partir de una cotización.
142+
/// De esta forma se mantiene la relación entre Venta y Cotizacion.
143+
/// </summary>
144+
/// <param name="cotizacion">Cotización desde la cual se genera la venta.</param>
145+
/// <param name="total">Total de la venta.</param>
146+
public void RegistrarVentaDesdeCotizacion(Cotizacion cotizacion, double total)
147+
{
148+
if (cotizacion == null)
149+
{
150+
throw new ArgumentNullException(nameof(cotizacion));
151+
}
122152

123-
// Agregamos la venta simbólicamente
124-
registroVenta.getVentasEntre(venta.Fecha, venta.Fecha);
125-
// Se puede agregar método AddVenta en RegistroVenta si se desea almacenamiento real
153+
// Creamos la venta a partir de la cotización
154+
Venta venta = new Venta(
155+
total,
156+
DateTime.Now,
157+
"Venta desde cotización",
158+
"",
159+
false,
160+
""
161+
);
162+
163+
// Relacionamos la venta con la cotización de origen
164+
venta.AsignarCotizacion(cotizacion);
165+
166+
// Registramos la venta en el registro de ventas
167+
registroVenta.AgregarVenta(venta);
126168
}
127169

128170
/// <summary>
@@ -133,6 +175,7 @@ public void RegistrarVenta(Venta venta)
133175
/// <returns>Lista de ventas filtradas por fecha.</returns>
134176
public List<Venta> ObtenerVentasEntre(DateTime desde, DateTime hasta)
135177
{
178+
// Este método delega en RegistroVenta.
136179
return registroVenta.getVentasEntre(desde, hasta);
137180
}
138181

@@ -166,20 +209,24 @@ public List<Etiqueta> ObtenerEtiquetas()
166209
// =============================
167210

168211
/// <summary>
169-
/// Registra una interacción de un cliente.
212+
/// Registra una interacción asociada a un cliente.
213+
/// La interacción concreta (llamada, mensaje, reunión, etc.) se construye fuera de la fachada.
170214
/// </summary>
171215
/// <param name="cliente">Cliente al que se le asocia la interacción.</param>
172-
/// <param name="descripcion">Descripción de la interacción.</param>
173-
public void RegistrarInteraccion(Cliente cliente, string descripcion)
216+
/// <param name="interaccion">Interacción ya construida.</param>
217+
public void RegistrarInteraccion(Cliente cliente, Interaccion interaccion)
174218
{
175219
if (cliente == null)
220+
{
176221
throw new ArgumentNullException(nameof(cliente));
177-
if (string.IsNullOrWhiteSpace(descripcion))
178-
throw new Exception("La descripción no puede estar vacía.");
222+
}
179223

180-
// Ejemplo: usamos Venta como tipo concreto de interacción
181-
Interaccion nueva = new Venta(0, DateTime.Now, descripcion, "", false, "");
182-
cliente.AgregarInteraccion(nueva);
224+
if (interaccion == null)
225+
{
226+
throw new ArgumentNullException(nameof(interaccion));
227+
}
228+
229+
cliente.AgregarInteraccion(interaccion);
183230
}
184231

185232
/// <summary>
@@ -190,7 +237,9 @@ public void RegistrarInteraccion(Cliente cliente, string descripcion)
190237
public List<Interaccion> ObtenerInteraccionesDeCliente(Cliente cliente)
191238
{
192239
if (cliente == null)
240+
{
193241
throw new ArgumentNullException(nameof(cliente));
242+
}
194243

195244
return cliente.GetInteracciones();
196245
}

src/Library/GestorUsuario.cs

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,20 @@ public static GestorUsuarios Instancia
2222
{
2323
get
2424
{
25-
// Crea la instancia si no existe
26-
return instancia ?? (instancia = new GestorUsuarios());
25+
if (instancia == null)
26+
{
27+
instancia = new GestorUsuarios();
28+
}
29+
return instancia;
2730
}
2831
}
2932

3033
/// <summary>
3134
/// Constructor privado para evitar la creación de instancias fuera de la clase.
3235
/// </summary>
33-
private GestorUsuarios() { }
36+
private GestorUsuarios()
37+
{
38+
}
3439

3540
/// <summary>
3641
/// Lista interna que actúa como base de datos de usuarios.
@@ -52,37 +57,42 @@ public int AgregarUsuario(bool activo, DateTime fechaCreacion)
5257
{
5358
Usuario nuevo = new Usuario(activo, fechaCreacion)
5459
{
55-
Id = proximoId
60+
Id = this.proximoId
5661
};
5762

58-
usuarios.Add(nuevo);
59-
proximoId++;
63+
this.usuarios.Add(nuevo);
64+
this.proximoId++;
6065
return nuevo.Id;
6166
}
6267

6368
/// <summary>
6469
/// Obtiene un usuario a partir de su ID.
6570
/// </summary>
6671
/// <param name="id">Identificador único del usuario.</param>
67-
/// <returns>El objeto <see cref="Usuario"/> si se encuentra; de lo contrario, null.</returns>
72+
/// <returns>El objeto Usuario si se encuentra; de lo contrario, null.</returns>
6873
public Usuario ObtenerUsuario(int id)
6974
{
70-
foreach (var usuario in usuarios)
75+
foreach (Usuario usuario in this.usuarios)
7176
{
7277
if (usuario.Id == id)
78+
{
7379
return usuario;
80+
}
7481
}
7582
return null;
7683
}
7784

7885
/// <summary>
7986
/// Muestra todos los usuarios registrados en la consola.
87+
/// Este método se puede usar para pruebas simples en la capa de presentación.
8088
/// </summary>
8189
public void MostrarTodosUsuarios()
8290
{
83-
foreach (var usuario in usuarios)
91+
foreach (Usuario usuario in this.usuarios)
8492
{
85-
Console.WriteLine($"ID: {usuario.Id}, Activo: {(usuario.Activo ? "Sí" : "No")}, FechaCreacion: {usuario.FechaCreacion.ToShortDateString()}");
93+
Console.WriteLine(
94+
$"ID: {usuario.Id}, Activo: {(usuario.Activo ? "Sí" : "No")}, FechaCreacion: {usuario.FechaCreacion.ToShortDateString()}"
95+
);
8696
}
8797
}
8898

@@ -94,7 +104,7 @@ public void MostrarTodosUsuarios()
94104
/// <returns>True si se actualizó correctamente; false si no se encontró el usuario.</returns>
95105
public bool ActualizarActivo(int id, bool nuevoActivo)
96106
{
97-
Usuario usuario = ObtenerUsuario(id);
107+
Usuario usuario = this.ObtenerUsuario(id);
98108
if (usuario != null)
99109
{
100110
usuario.Activo = nuevoActivo;
@@ -110,10 +120,10 @@ public bool ActualizarActivo(int id, bool nuevoActivo)
110120
/// <returns>True si se eliminó correctamente; false si no se encontró el usuario.</returns>
111121
public bool EliminarUsuario(int id)
112122
{
113-
Usuario usuario = ObtenerUsuario(id);
123+
Usuario usuario = this.ObtenerUsuario(id);
114124
if (usuario != null)
115125
{
116-
usuarios.Remove(usuario);
126+
this.usuarios.Remove(usuario);
117127
return true;
118128
}
119129
return false;

src/Library/RegistroVenta.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ public RegistroVenta(List<Venta> ventas)
2323
this.ventas = ventas ?? new List<Venta>();
2424
}
2525

26+
/// <summary>
27+
/// Agrega una venta al registro.
28+
/// </summary>
29+
/// <param name="venta">Venta a registrar.</param>
30+
public void AgregarVenta(Venta venta)
31+
{
32+
if (venta != null)
33+
{
34+
this.ventas.Add(venta);
35+
}
36+
}
37+
2638
/// <summary>
2739
/// Obtiene todas las ventas registradas dentro de un rango de fechas.
2840
/// </summary>
@@ -33,17 +45,14 @@ public List<Venta> getVentasEntre(DateTime desde, DateTime hasta)
3345
{
3446
List<Venta> resultado = new List<Venta>();
3547

36-
// Recorre todas las ventas registradas
37-
foreach (var v in ventas)
48+
foreach (Venta v in this.ventas)
3849
{
39-
// Agrega la venta si su fecha está dentro del rango indicado
4050
if (v.Fecha >= desde && v.Fecha <= hasta)
4151
{
4252
resultado.Add(v);
4353
}
4454
}
4555

46-
// Devuelve la lista de ventas filtradas
4756
return resultado;
4857
}
4958
}

0 commit comments

Comments
 (0)