Esempio n. 1
0
        public async Task <JsonResult> Create(List <DetalleAnalisis> listaDetalle, Analisis analisis, List <Material> listaMateriales)
        {
            using (var transaction = await db.Database.BeginTransactionAsync())
            {
                try
                {
                    var resultado = listaDetalle.Where(x => (x.Aprobado == false)).FirstOrDefault();

                    if (resultado != null)
                    {
                        analisis.Resultado = "NO CUMPLE";
                    }
                    else
                    {
                        analisis.Resultado = "CUMPLE";
                    }

                    if (string.IsNullOrEmpty(analisis.Observaciones))
                    {
                        analisis.Observaciones = string.Empty;
                    }

                    analisis.NombreUsuario = User.Identity.Name;

                    var analisisCreate = await db.AddAsync(analisis);

                    await db.SaveChangesAsync();

                    var idAnalisisCreado = analisisCreate.Entity.AnalisisId;



                    var listaDetalleInsertar = listaDetalle.Select(x => new DetalleAnalisis {
                        AnalisisId = idAnalisisCreado, Aprobado = x.Aprobado, EspecificacionId = x.EspecificacionId, RangoReferenciaActual = x.RangoReferenciaActual, Resultado = x.Resultado,
                    }).ToList();
                    await db.AddRangeAsync(listaDetalleInsertar);

                    var listaAnalisisMaterialInsertar = listaMateriales.Select(x => new AnalisisMaterial {
                        AnalisisId = idAnalisisCreado, MateriaId = x.MaterialId
                    });
                    await db.AddRangeAsync(listaAnalisisMaterialInsertar);


                    await db.SaveChangesAsync();

                    if (analisis.Resultado == "NO CUMPLE")
                    {
                        var listadoEmails        = new List <string>();
                        var listaAdministradores = await userManager.GetUsersInRoleAsync(Perfiles.Administracion);

                        foreach (var item in listaAdministradores)
                        {
                            listadoEmails.Add(item.Email);
                        }

                        var cuerpo = await emailSender.CuerpoAnalisisNoValido(analisisCreate.Entity);

                        emailSender.SendEmailAsync(listadoEmails, Mensaje.AsuntoCorreo, cuerpo);
                    }

                    transaction.Commit();

                    return(Json(1));
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    return(Json(-1));
                }
            }
        }