@@ -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 }
0 commit comments