public string Modificar(ProductoJoinProductoConDetallesJoinDetalleProductoViewModel productoConNuevosValores) { string res = "false"; using (var ctx = new palominoEntities()) { using (var dbContextTransaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable)) { try { //Verifico que el Producto este activo var listaIdsYEstado = (from s in ctx.Producto select new { s.Id, s.Activo }).ToList(); var listaIdsActivos = (from item in listaIdsYEstado where item.Activo == true select item.Id).ToList(); int idBuscado = listaIdsActivos.Find(id => id == productoConNuevosValores.Producto_Id); //Verifico que el DetalleProducto este activo var listaIdsDetalleProducto = (from x in ctx.DetalleProducto select new { x.Id, x.Activo }).ToList(); var listaIdsDetalleProductoActivos = (from x in listaIdsDetalleProducto where x.Activo == true select x.Id).ToList(); var otroIdBuscado = listaIdsDetalleProductoActivos.Find(item => item == productoConNuevosValores.DetalleProducto_Id); //Busco el Id de usuario que necesitare, y ver que este activo var resumenUsuarios = (from x in ctx.Usuario select new { x.Id, x.Usuario1, x.Activo }).ToList(); var usuarioActivoBuscado = resumenUsuarios.SingleOrDefault(item => (item.Id == productoConNuevosValores.DetalleProducto_IdUsuarioAlta) && (item.Activo == true)); if ((idBuscado > 0) && (otroIdBuscado > 0) && (usuarioActivoBuscado != null)) // Aqui se comprueba lo anterior { var resumenProductoConDetalles = (from s in ctx.ProductoConDetalles where s.IdProducto == productoConNuevosValores.Producto_Id select new { s.IdDetalleProducto }).ToList(); var resumenDetalleProducto = (from c in ctx.DetalleProducto select new { c.Id, c.Activo }).ToList(); var fila = (from a in resumenProductoConDetalles join b in resumenDetalleProducto on a.IdDetalleProducto equals b.Id where b.Activo == true select b.Id).ToList(); var elementoUnico = fila.Single(); DetalleProducto detalleProducto = ctx.DetalleProducto.Find(elementoUnico); detalleProducto.Activo = false; detalleProducto.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico; detalleProducto.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion; //crear nuevo var resumenIdsEnDetalleProducto = (from s in resumenDetalleProducto select s.Id).ToList(); int idNuevoParaDetalleProducto = resumenIdsEnDetalleProducto.Max() + 1; DetalleProducto nuevoDetalleProducto = new DetalleProducto(); nuevoDetalleProducto.Id = idNuevoParaDetalleProducto; nuevoDetalleProducto.Nombre = productoConNuevosValores.DetalleProducto_Nombre; nuevoDetalleProducto.Activo = true; nuevoDetalleProducto.IdUsuarioAlta = productoConNuevosValores.DetalleProducto_IdUsuarioAlta; nuevoDetalleProducto.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico; nuevoDetalleProducto.FechaAlta = productoConNuevosValores.DetalleProducto_FechaAlta; nuevoDetalleProducto.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion; ctx.DetalleProducto.Add(nuevoDetalleProducto); ProductoConDetalles productoConDetalles = new ProductoConDetalles(); productoConDetalles.IdProducto = productoConNuevosValores.Producto_Id; productoConDetalles.IdDetalleProducto = idNuevoParaDetalleProducto; productoConDetalles.Activo = true; productoConDetalles.IdUsuarioAlta = productoConNuevosValores.DetalleProducto_IdUsuarioAlta; productoConDetalles.IdUsuarioModifico = productoConNuevosValores.DetalleProducto_IdUsuarioModifico; productoConDetalles.FechaAlta = productoConNuevosValores.DetalleProducto_FechaAlta; productoConDetalles.FechaModificacion = productoConNuevosValores.DetalleProducto_FechaModificacion; ctx.ProductoConDetalles.Add(productoConDetalles); ctx.SaveChanges(); res = "ok"; } else { res = "No esta disponible el producto a modificar"; } dbContextTransaction.Commit(); } catch (Exception ex) { dbContextTransaction.Rollback(); throw new Exception("Excepcion cachada y lanzada en ProductoLN.Modificar", ex); } } } return(res); }
//---------------------------Methods public string Crear(ProductoViewModel productoViewModel) { string mensaje = ""; using (var ctx = new palominoEntities()) { using (var dbContextTransaction = ctx.Database.BeginTransaction(IsolationLevel.Serializable)) { try { //Buscar los codigosBarras del usuario operador var codigosBarrasExisten = (from s in ctx.Producto where s.IdUsuarioAlta == productoViewModel.IdUsuarioAlta select s.CodigoBarras ).ToList(); bool existeProductoEnActivosOInactivos = productoViewModel.ExisteEn(codigosBarrasExisten); //Busco el Id de usuario que necesitare, y ver que este activo var resumenUsuarios = (from x in ctx.Usuario select new { x.Id, x.Usuario1, x.Activo }).ToList(); var usuarioActivoBuscado = resumenUsuarios.SingleOrDefault(item => (item.Id == productoViewModel.IdUsuarioAlta) && (item.Activo == true)); if (!existeProductoEnActivosOInactivos && (usuarioActivoBuscado != null)) { var listaIdsProducto = (from s in ctx.Producto select s.Id).ToList(); int idUltimoEnProducto = listaIdsProducto.Count() == 0 ? 0 : listaIdsProducto.Max(); Producto p = new Producto(); //Producto es una clase del edmx p.Id = idUltimoEnProducto + 1; p.CodigoBarras = productoViewModel.CodigoBarras; p.IdUsuarioAlta = productoViewModel.IdUsuarioAlta; p.FechaAlta = productoViewModel.FechaAlta; p.IdUsuarioModifico = productoViewModel.IdUsuarioModifico; p.FechaModificacion = productoViewModel.FechaModificacion; p.Activo = true; ctx.Producto.Add(p); var idsDetalleProducto = (from s in ctx.DetalleProducto select s.Id).ToList(); int idUltimoEnDetalleProduto = idsDetalleProducto.Count() == 0 ? 0 : idsDetalleProducto.Max(); DetalleProducto detalleProducto = new DetalleProducto(); detalleProducto.Id = idUltimoEnDetalleProduto + 1; detalleProducto.Nombre = productoViewModel.Nombre; detalleProducto.IdUsuarioAlta = productoViewModel.IdUsuarioAlta; detalleProducto.IdUsuarioModifico = productoViewModel.IdUsuarioModifico; detalleProducto.FechaAlta = productoViewModel.FechaAlta; detalleProducto.FechaModificacion = productoViewModel.FechaModificacion; detalleProducto.Activo = true; ctx.DetalleProducto.Add(detalleProducto); ProductoConDetalles productoConDetalles = new ProductoConDetalles(); productoConDetalles.IdProducto = p.Id; productoConDetalles.IdDetalleProducto = detalleProducto.Id; productoConDetalles.IdUsuarioAlta = productoViewModel.IdUsuarioAlta; productoConDetalles.FechaAlta = productoViewModel.FechaAlta; productoConDetalles.IdUsuarioModifico = productoViewModel.IdUsuarioModifico; productoConDetalles.FechaModificacion = productoViewModel.FechaModificacion; productoConDetalles.Activo = true; ctx.ProductoConDetalles.Add(productoConDetalles); ctx.SaveChanges(); mensaje = "ok"; } else { mensaje = existeProductoEnActivosOInactivos == true ? "Ya existe este código de barras en la BD" : "El usuario esta inactivo"; } dbContextTransaction.Commit(); } catch (Exception ex) { dbContextTransaction.Rollback(); throw new Exception("Excepcion cachada y lanzada en ProductoLN.Crear", ex); } } } return(mensaje); }