コード例 #1
0
        /// <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);
        }
コード例 #2
0
        public ColeccionDetalleArticulos Clone(Lbl.ElementoDeDatos elementoPadre)
        {
            ColeccionDetalleArticulos Res = new ColeccionDetalleArticulos(elementoPadre);

            foreach (DetalleArticulo Det in this)
            {
                Res.Add(Det.Clone());
            }
            return(Res);
        }
コード例 #3
0
        /// <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);
        }