/// <summary> /// Unifica la lista de articulos. Cuando un artículo aparece 2 o más veces, que una sola instancia /// con la sumatoria de las cantidades (Si la lista consta de "2 manzanas, 3 naranjas y 1 manzana", /// esta función devuelve "3 manzanas y 3 naranjas"). /// </summary> public ColeccionDetalleArticulos Unificar() { ColeccionDetalleArticulos Res = new ColeccionDetalleArticulos(this.ElementoPadre); foreach (DetalleArticulo Det in this) { bool Encontre = false; foreach (DetalleArticulo Det2 in Res) { if (Det2.IdArticulo == Det.IdArticulo && Det2.Unitario == Det.Unitario && Det2.Obs == Det.Obs && Det2.Nombre == Det.Nombre) { //Si ya existe, sumo la cantidad Encontre = true; Det2.Cantidad += Det.Cantidad; } } //Si no existe, lo agrego if (Encontre == false) { Res.Add(Det); } } return(Res); }
public ColeccionDetalleArticulos Clone(Lbl.ElementoDeDatos elementoPadre) { ColeccionDetalleArticulos Res = new ColeccionDetalleArticulos(elementoPadre); foreach (DetalleArticulo Det in this) { Res.Add(Det.Clone()); } return(Res); }
/// <summary> /// Hace una lista de movimientos necesarios para convertir "original" en "this". /// </summary> public ColeccionDetalleArticulos Diferencia(ColeccionDetalleArticulos original) { ColeccionDetalleArticulos Desde; if (original == null) { Desde = new ColeccionDetalleArticulos(this.ElementoPadre); } else { Desde = original.Unificar(); } ColeccionDetalleArticulos Hacia = this.Unificar(); ColeccionDetalleArticulos Res = new ColeccionDetalleArticulos(this.ElementoPadre); foreach (DetalleArticulo DetHacia in Hacia) { bool Encontre = false; if (DetHacia.IdArticulo > 0) { foreach (DetalleArticulo DetDesde in Desde) { if (DetDesde.IdArticulo == DetHacia.IdArticulo) { //Si existe lo modifico DetalleArticulo Nuevo = DetDesde.Clone(); Nuevo.Cantidad = DetHacia.Cantidad - DetDesde.Cantidad; if (Nuevo.Cantidad != 0) { Res.Add(Nuevo); } Encontre = true; break; } } } //Si no existe (o no tiene código de artículo) lo agrego if (Encontre == false) { Res.Add(DetHacia.Clone()); } } //Ahora quito los que ya no están foreach (DetalleArticulo DetDesde in Desde) { bool Encontre = false; foreach (DetalleArticulo DetHacia in Hacia) { if (DetHacia.IdArticulo == DetDesde.IdArticulo) { Encontre = true; break; } } if (Encontre == false) { //La cantidad negativa para quitar DetalleArticulo Nuevo = DetDesde.Clone(); Nuevo.Cantidad = -DetDesde.Cantidad; Res.Add(Nuevo); } } return(Res); }