示例#1
0
        public async Task <bool> EditarAsync(int id, ProductoDetalle producto)
        {
            var productoAEditar = await db.Productos.Include(x => x.Caracteristicas).Include(x => x.Marcas).Include(x => x.UnidadesDeMedida).SingleOrDefaultAsync(x => x.Id == id);

            if (productoAEditar == null)
            {
                throw new RegistroNoEncontradoException($"No existe el producto {id}");
            }

            var nombre = producto.Nombre.Trim();

            if (await ExisteNombreEnOtroProducto(id, nombre))
            {
                throw new InvalidOperationException($"Ya existe otro producto con el nombre '{nombre}'.");
            }

            productoAEditar.Nombre      = nombre;
            productoAEditar.Descripcion = producto.Descripcion.Trim();

            ActualizarMarcas(producto, productoAEditar);
            ActualizarUnidades(producto, productoAEditar);
            ActualizarCaracteristicas(producto, productoAEditar);

            var filasAfectadas = await db.SaveChangesAsync();

            return(filasAfectadas > 0);
        }
示例#2
0
        public async Task <int> CrearAsync(ProductoDetalle producto)
        {
            var nombre      = producto.Nombre.Trim();
            var descripcion = producto.Descripcion.Trim();

            if (await ExisteNombre(nombre))
            {
                throw new InvalidOperationException($"Ya existe un producto con el nombre '{nombre}'.");
            }

            var nuevoProducto = new Producto {
                Nombre      = nombre,
                Descripcion = descripcion
            };

            if (producto.Marcas != null && producto.Marcas.Length > 0)
            {
                nuevoProducto.Marcas = producto.Marcas.Select(marcaId => new ProductoMarca {
                    Producto = nuevoProducto,
                    MarcaId  = marcaId
                }).ToList();
            }

            if (producto.Unidades != null && producto.Unidades.Length > 0)
            {
                nuevoProducto.UnidadesDeMedida = producto.Unidades.Select(unidadId => new ProductoUnidadDeMedida {
                    Producto         = nuevoProducto,
                    UnidadDeMedidaId = unidadId
                }).ToList();
            }

            if (producto.Caracteristicas != null && producto.Caracteristicas.Length > 0)
            {
                nuevoProducto.Caracteristicas = producto.Caracteristicas.Select(c => new ProductoCaracteristica {
                    Producto              = nuevoProducto,
                    TipoCaracteristica    = (ProductoTipoCaracteristica)c.Tipo,
                    Nombre                = c.Nombre,
                    ListaId               = c.ListaId,
                    Minimo                = c.Minimo,
                    Maximo                = c.Maximo,
                    Requerido             = c.Requerido,
                    ExpresionDeValidacion = null
                }).ToList();
            }

            db.Productos.Add(nuevoProducto);

            var filasAfectadas = await db.SaveChangesAsync();

            if (filasAfectadas > 0)
            {
                return(nuevoProducto.Id);
            }
            else
            {
                return(-1);
            }
        }
示例#3
0
        private static void ActualizarMarcas(ProductoDetalle producto, Producto productoAEditar)
        {
            producto.Marcas = producto.Marcas ?? new int[] { };
            var marcasNuevas     = producto.Marcas;
            var marcasOriginales = productoAEditar.Marcas.Select(x => x.MarcaId).ToArray();

            EliminarMarcasInexistentes(productoAEditar, marcasNuevas);
            AgregarMarcasNuevas(productoAEditar, marcasNuevas, marcasOriginales);
        }
示例#4
0
        private static void ActualizarUnidades(ProductoDetalle producto, Producto productoAEditar)
        {
            producto.Unidades = producto.Unidades ?? new int[] { };
            var unidadesNuevas     = producto.Unidades;
            var unidadesOriginales = productoAEditar.UnidadesDeMedida.Select(x => x.UnidadDeMedidaId).ToArray();

            EliminarUnidadesInexistentes(productoAEditar, unidadesNuevas);
            AgregarUnidadesNuevas(productoAEditar, unidadesNuevas, unidadesOriginales);
        }
示例#5
0
        private static void ActualizarCaracteristicas(ProductoDetalle producto, Producto productoAEditar)
        {
            producto.Caracteristicas = producto.Caracteristicas ?? new CaracteristicaDetalle[] { };
            var caracteristicasNuevasIds = producto.Caracteristicas.Select(x => x.Id).ToArray();
            var caracteristicasViejasIds = productoAEditar.Caracteristicas.Select(x => x.Id).ToArray();

            EliminarCaracteristicasInexistentes(productoAEditar, caracteristicasNuevasIds);
            AgregarCaracteristicasNuevas(producto, productoAEditar);
            ModificarCaracteristicasExistentes(producto, productoAEditar, caracteristicasNuevasIds);
        }
示例#6
0
        public async Task <IActionResult> Post([FromBody] ProductoDetalle producto)
        {
            if (!ModelState.IsValid)
            {
                return(HttpBadRequest(ModelState));
            }

            var productoId = await productos.CrearAsync(producto);

            var result = await productos.ObtenerUnicoAsync(productoId);

            return(CreatedAtRoute("GetProducto", new { id = productoId }, result));
        }
示例#7
0
 public void EditarproductoDetalle(ProductoDetalle productoDetalle)
 {
     try
     {
         using (TransactionScope scope = new TransactionScope())
         {
             DAL.Modapie.Mantenimiento.Instancia.EditarproductoDetalle(productoDetalle);
             scope.Complete();
         }
     }
     catch (Exception ee)
     {
         throw;
     }
 }
示例#8
0
        private static void ModificarCaracteristicasExistentes(ProductoDetalle producto, Producto productoAEditar, int[] caracteristicasNuevasIds)
        {
            var caracteristicasParaModificar = productoAEditar.Caracteristicas.Where(x => caracteristicasNuevasIds.Contains(x.Id)).ToArray();

            foreach (var c in caracteristicasParaModificar)
            {
                var nc = producto.Caracteristicas.First(x => x.Id == c.Id);

                c.Nombre                = nc.Nombre;
                c.TipoCaracteristica    = (ProductoTipoCaracteristica)nc.Tipo;
                c.ListaId               = nc.ListaId;
                c.Minimo                = nc.Minimo;
                c.Maximo                = nc.Maximo;
                c.Requerido             = nc.Requerido;
                c.ExpresionDeValidacion = null;
            }
        }
示例#9
0
        public void listar_detalle_factura(ProductoBusqueda prodct, int cantidad)
        {
            ProductoDetalle item = new ProductoDetalle();

            item.codigo      = prodct.codigo;
            item.cantidad    = cantidad;
            item.categoria   = prodct.categoria;
            item.nombre      = prodct.nombre;
            item.precio      = prodct.precio;
            item.descripcion = prodct.descripcion;

            resultado.Add(item);

            BindingList <ProductoDetalle> data_binding = new BindingList <ProductoDetalle>(resultado);
            BindingSource data_source = new BindingSource(data_binding, null);

            gridDetalle.DataSource = data_source;
            calcular_total();
        }
示例#10
0
        private static void AgregarCaracteristicasNuevas(ProductoDetalle producto, Producto productoAEditar)
        {
            var caracteristicasParaInsertar = producto.Caracteristicas.Where(x => x.Id == 0).ToArray();

            foreach (var c in caracteristicasParaInsertar)
            {
                productoAEditar.Caracteristicas.Add(new ProductoCaracteristica
                {
                    Producto              = productoAEditar,
                    TipoCaracteristica    = (ProductoTipoCaracteristica)c.Tipo,
                    Nombre                = c.Nombre,
                    ListaId               = c.ListaId,
                    Minimo                = c.Minimo,
                    Maximo                = c.Maximo,
                    Requerido             = c.Requerido,
                    ExpresionDeValidacion = null
                });
            }
        }
示例#11
0
        public ProductoDetalle MostrarUnproductoDetalle(int idProducto)
        {
            ProductoDetalle pd = new ProductoDetalle();

            try
            {
                using (TransactionScope scope = new TransactionScope())
                {
                    pd = DAL.Modapie.Mantenimiento.Instancia.MostrarUnproductoDetalle(idProducto);
                    scope.Complete();
                    return(pd);
                }
            }
            catch (Exception ee)
            {
                DialogResult d = MessageBox.Show(ee.Message.ToString());
                return(null);
            }
        }
示例#12
0
        public async Task <IActionResult> Put(int id, [FromBody] ProductoDetalle producto)
        {
            if (!ModelState.IsValid)
            {
                return(HttpBadRequest(ModelState));
            }

            var modificado = await productos.EditarAsync(id, producto);

            if (modificado)
            {
                var result = await productos.ObtenerUnicoAsync(id);

                return(Ok(result));
            }
            else
            {
                return(new HttpStatusCodeResult((int)HttpStatusCode.NotModified));
            }
        }