private async Task <MaterialEspecificacionViewModel> ObtenerMaterialeEspecificacion(int id, MaterialEspecificacionViewModel materialEspecificacionView = null)
        {
            if (materialEspecificacionView == null)
            {
                var producto = new MaterialEspecificacionViewModel
                {
                    MaterialId = 0,
                    Material   = await db.Material.Where(x => x.MaterialId == id).Select(x => new Material
                    {
                        TipoMaterial = new TipoMaterial {
                            TipoMaterialId = x.TipoMaterial.TipoMaterialId, DescripcionTipoMaterial = x.TipoMaterial.DescripcionTipoMaterial
                        },
                        Pais = new Pais {
                            DescripcionPais = x.Pais.DescripcionPais
                        },
                        Proveedor = new Proveedor {
                            CodigoProveedor = x.Proveedor.CodigoProveedor, NombreProveedor = x.Proveedor.NombreProveedor
                        },
                        StockDisponible = x.StockDisponible,
                        UnidadMedida    = x.UnidadMedida,
                        CodigoIngreso   = x.CodigoIngreso,
                        Identificador   = x.Identificador,
                        TipoNorma       = new TipoNorma {
                            Sae = x.TipoNorma.Sae, TipoNormaId = x.TipoNorma.TipoNormaId, DescripcionNorma = x.TipoNorma.DescripcionNorma
                        }
                    }).FirstOrDefaultAsync(),
                    MaterialEspecificacion = await ListaMaterialEspecificacion(id)
                };
                return(producto);
            }

            var productoEspecificacionResult = new MaterialEspecificacionViewModel
            {
                MaterialId             = materialEspecificacionView.MaterialId,
                EspecificacionId       = materialEspecificacionView.EspecificacionId,
                ValorEspecificacion    = materialEspecificacionView.ValorEspecificacion,
                MaterialEspecificacion = await ListaMaterialEspecificacion(id),
                Material = await db.Material.Where(x => x.MaterialId == id).Select(x => new Material
                {
                    TipoMaterial = new TipoMaterial {
                        TipoMaterialId = x.TipoMaterial.TipoMaterialId, DescripcionTipoMaterial = x.TipoMaterial.DescripcionTipoMaterial
                    },
                    Pais = new Pais {
                        DescripcionPais = x.Pais.DescripcionPais
                    },
                    Proveedor = new Proveedor {
                        CodigoProveedor = x.Proveedor.CodigoProveedor, NombreProveedor = x.Proveedor.NombreProveedor
                    },
                    StockDisponible = x.StockDisponible,
                    UnidadMedida    = x.UnidadMedida,
                    CodigoIngreso   = x.CodigoIngreso,
                    Identificador   = x.Identificador,
                    TipoNorma       = new TipoNorma {
                        Sae = x.TipoNorma.Sae, TipoNormaId = x.TipoNorma.TipoNormaId, DescripcionNorma = x.TipoNorma.DescripcionNorma
                    }
                }).FirstOrDefaultAsync(),
            };

            return(productoEspecificacionResult);
        }
        public async Task <IActionResult> Especificaciones(MaterialEspecificacionViewModel materialEspecificacion)
        {
            try
            {
                await cargarListaEspecificacionesViewData();

                var especificacionId = materialEspecificacion.EspecificacionId;
                var Material         = await db.Material.Where(x => x.MaterialId == materialEspecificacion.MaterialId).FirstOrDefaultAsync();

                // var materialEspecificacionA = db.Material.Where(x => x.MaterialId == materialEspecificacion.MaterialId).FirstOrDefaultAsync();

                var Norma = await db.Norma.Where(c => c.EspecificacionId == especificacionId &&
                                                 c.TipoNorma.TipoNormaId == Material.TipoNormaId)
                            .FirstOrDefaultAsync();

                var cumpleNorma = true;

                if (Norma.ValorMinimo >= Convert.ToDecimal(materialEspecificacion.ValorEspecificacion) || Norma.ValorMinimo <= Convert.ToDecimal(materialEspecificacion.ValorEspecificacion))
                {
                    cumpleNorma = false;
                }


                var existeRegistro = false;

                if (!await db.MaterialEspecificacion.AnyAsync(c => c.EspecificacionId == materialEspecificacion.EspecificacionId && c.MaterialId == materialEspecificacion.MaterialId))
                {
                    var p = new MaterialEspecificacion
                    {
                        MaterialId          = materialEspecificacion.MaterialId,
                        EspecificacionId    = materialEspecificacion.EspecificacionId,
                        ValorEspecificacion = materialEspecificacion.ValorEspecificacion,
                    };
                    await db.AddAsync(p);
                }
                else
                {
                    existeRegistro = true;
                }

                if (!existeRegistro)
                {
                    await db.SaveChangesAsync();

                    if (cumpleNorma)
                    {
                        TempData["Mensaje"] = $"{Mensaje.Informacion}|{Mensaje.Satisfactorio}";
                        return(View(await ObtenerMaterialeEspecificacion(materialEspecificacion.MaterialId, null)));
                    }

                    TempData["Mensaje"] = $"{Mensaje.Error}|{Mensaje.NoCumpleNorma}";
                    return(View(await ObtenerMaterialeEspecificacion(materialEspecificacion.MaterialId, null)));
                }
                else
                {
                    TempData["Mensaje"] = $"{Mensaje.Error}|{Mensaje.ExisteRegistro}";
                }

                return(View(await ObtenerMaterialeEspecificacion(materialEspecificacion.MaterialId, materialEspecificacion)));
            }
            catch (Exception)
            {
                return(this.Redireccionar($"{Mensaje.Error}|{Mensaje.Excepcion}"));
            }
        }