public async Task <IActionResult> Edit(string id, [Bind("IdCategoria,Nombre,Descripcion,Foto,Stock,CantidadMinima,PrecioCosto,PrecioVenta,FechaVencimiento,UnidadMedida,AlarmaActivada")] ProductoViewModelEdit producto) { if (id == null) { return(NotFound()); } if (!(await trabajadorRepository.EsJefe()).Item2) { return(Unauthorized("No tiene permisos para ver este contenido.")); } if (ModelState.IsValid) { Producto?p = await productoRepository.GetById(id); if (p == null) { return(NotFound()); } if (producto.Foto != null) { if (p.Foto != null) { await servicesAWSS3.EliminarFoto(p); } using (MemoryStream m = new()) { producto.Foto.CopyTo(m); await servicesAWSS3.SubirFotoProducto(m, p); producto.FotoUrl = "foto.png"; } } else if (producto.Foto == null && p.Foto != null) { producto.FotoUrl = "foto.png"; } await productoRepository.Update(id, producto); return(RedirectToAction(nameof(Index))); } ViewData["IdCategoria"] = new SelectList(await categoriaRepository.GetAll(), "IdCategoria", "Nombre", producto.IdCategoria); return(View(producto)); }
public async Task <int> Update(string id, ProductoViewModelEdit p) { Producto?producto = await GetById(id); if (producto == null) { throw new Exception("No existe el producto"); } var trabajador = await repTrabajador.GetCurrentTrabajador(); Producto productoEditado = new() { IdProducto = id, IdCategoria = p.IdCategoria, IdNegocio = producto.IdNegocio, Nombre = p.Nombre, Descripcion = p.Descripcion, Stock = p.Stock, PrecioCosto = p.PrecioCosto, PrecioVenta = p.PrecioVenta, FechaVencimiento = p.FechaVencimiento, UnidadMedida = p.UnidadMedida ?? "Unit", AlarmaActivada = p.AlarmaActivada, CantidadMinima = p.CantidadMinima }; NpgsqlParameter param1 = new("@p0", id); NpgsqlParameter param2 = new("@p1", productoEditado.IdCategoria); NpgsqlParameter param3 = new("@p2", productoEditado.IdNegocio); NpgsqlParameter param4 = new("@p3", productoEditado.Nombre); NpgsqlParameter param5 = new("@p4", productoEditado.Descripcion !as object ?? DBNull.Value); NpgsqlParameter param6 = new("@p5", (object)p.FotoUrl ! ?? DBNull.Value); NpgsqlParameter param7 = new("@p6", productoEditado.Stock); NpgsqlParameter param8 = new("@p7", (object)productoEditado.CantidadMinima ! ?? DBNull.Value); NpgsqlParameter param9 = new("@p8", productoEditado.PrecioCosto); NpgsqlParameter param10 = new("@p9", productoEditado.PrecioVenta); NpgsqlParameter param11 = new("@p10", (productoEditado.FechaVencimiento != null) ? productoEditado.FechaVencimiento.GetValueOrDefault().ToShortDateString().Replace("-", "") : DBNull.Value); NpgsqlParameter param12 = new("@p11", productoEditado.UnidadMedida); NpgsqlParameter param13 = new("@p12", productoEditado.AlarmaActivada); NpgsqlParameter param14 = new("@p13", productoEditado.AlarmaAccionada); NpgsqlParameter param15 = new("@p14", (object)productoEditado.FechaAlarma ! ?? DBNull.Value); NpgsqlParameter param16 = new("@p15", trabajador !.Rut); /* * CREATE OR REPLACE PROCEDURE public.actualizarproducto( * _idproducto character varying, * _idcategoria character varying, * _idnegocio character varying, * _nombre character varying, * _descripcion character varying, * _foto character varying, * _stock integer, * _cantidadminima integer, * _preciocosto integer, * _precioventa integer, * _fechavencimiento character varying, * _unidadmedida character varying, * _alarmaactivada boolean, * _alarmaaccionada boolean, * _fechaalarma timestamp without time zone, * _rut character varying) * LANGUAGE 'sql' * AS $BODY$ * UPDATE "Producto" SET * "IdCategoria" = _IdCategoria, * "Nombre" = _Nombre, * "Descripcion" = _Descripcion, * "Foto" = _Foto, * "CantidadMinima" = _CantidadMinima, * "PrecioCosto" = _PrecioCosto, * "PrecioVenta" = _PrecioVenta, * "Stock" = _Stock, * "FechaVencimiento" = to_date(_FechaVencimiento, 'DDMMYY'), * "UnidadMedida" = _UnidadMedida, * "AlarmaActivada" = _alarmaactivada, * "AlarmaAccionada" = _alarmaaccionada, * "FechaAlarma" = _fechaalarma * WHERE "IdProducto" = _IdProducto AND "IdNegocio" = _IdNegocio; * * SET TIMEZONE='America/Santiago'; * INSERT INTO "Historial"( * "IdTrabajador", * "IdProducto", * "IdAccion", * "FechaModificacion") * VALUES(_rut, * _IdProducto, * '2', * (select now()::timestamp(0))); * $BODY$; */ return(await context.Database.ExecuteSqlRawAsync("CALL actualizarproducto(@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15)", param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16)); } }