public async Task <IActionResult> Welcome() { AdminService _adminService = new AdminService(_context, _userManager, _getterUtils); WorkflowServices _workflowServices = new WorkflowServices(_context, _userManager, _getterUtils, _signInManager); WelcomeViewModel vm = new WelcomeViewModel(); var t = await _adminService.FillNotificationsAsync(); vm.UserPendings = t.UserPendings; vm.ViajesUpdated = t.ViajesUpdated; var notificationsList = new List <string>(); var InvitadosPropios = new List <string>(); var InvitadosAjenos = new List <string>(); if (vm.ViajesUpdated.Any()) { if (User.Claims.Where(c => c.Type == "Visa").Any()) { var data = vm.ViajesUpdated.Where(v => v.Estado == Estado.PendienteVisas && v.Usuario.Email != User.Identity.Name && !(v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); for (int i = 0; i < data.Count(); i++) { data[i].Update = 0; _workflowServices.UpdateItinerario(data[i], data[i]); notificationsList.Add($"Viaje del {data[i].FechaInicio} --> {data[i].FechaFin} tiene ahora estado {data[i].Estado}"); } } if (User.Claims.Where(c => c.Type == "Passport").Any()) { var data = vm.ViajesUpdated.Where(v => v.Estado == Estado.PendientePasaporte && v.Usuario.Email != User.Identity.Name && !(v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); for (int i = 0; i < data.Count(); i++) { data[i].Update = 0; _workflowServices.UpdateItinerario(data[i], data[i]); notificationsList.Add($"Viaje del {data[i].FechaInicio} --> {data[i].FechaFin} tiene ahora estado {data[i].Estado}"); } } if (User.HasClaim("Institucion", "JefeArea")) { var data = vm.ViajesUpdated.Where(v => v.Estado == Estado.PendienteAprobacionJefeArea && v.Usuario.Email != User.Identity.Name && !(v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); for (int i = 0; i < data.Count(); i++) { data[i].Update = 0; _workflowServices.UpdateItinerario(data[i], data[i]); notificationsList.Add($"Viaje del {data[i].FechaInicio} --> {data[i].FechaFin} tiene ahora estado {data[i].Estado}"); } } if (User.HasClaim("Institucion", "Decano")) { var data = vm.ViajesUpdated.Where(v => v.Estado == Estado.PendienteAprobacionDecano && v.Usuario.Email != User.Identity.Name && !(v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); for (int i = 0; i < data.Count(); i++) { data[i].Update = 0; _workflowServices.UpdateItinerario(data[i], data[i]); notificationsList.Add($"Viaje del {data[i].FechaInicio} --> {data[i].FechaFin} tiene ahora estado {data[i].Estado}"); } } if (User.HasClaim("Institucion", "Rector")) { var data = vm.ViajesUpdated.Where(v => v.Estado == Estado.PendienteAprobacionRector && v.Usuario.Email != User.Identity.Name && !(v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); for (int i = 0; i < data.Count(); i++) { data[i].Update = 0; _workflowServices.UpdateItinerario(data[i], data[i]); notificationsList.Add($"Viaje del {data[i].FechaInicio} --> {data[i].FechaFin} tiene ahora estado {data[i].Estado}"); } } var misViajes = vm.ViajesUpdated.Where(v => v.Usuario.Email == User.Identity.Name && (v.Estado == Estado.Pendiente || v.Estado == Estado.Cancelado || v.Estado == Estado.PendienteRealizacion)) .ToList(); if (misViajes.Count() != 0) { for (int i = 0; i < misViajes.Count(); i++) { misViajes[i].Update = 0; _workflowServices.UpdateItinerario(misViajes[i], misViajes[i]); } } } if (t.InvitadosUpdated.Any()) { var misInvitados = t.InvitadosUpdated.Where(vi => vi.Usuario.Email == User.Identity.Name && (vi.Estado == Estado.Pendiente || vi.Estado == Estado.Cancelado || vi.Estado == Estado.PendienteRealizacion)) .ToList(); if (misInvitados.Count != 0) { for (int i = 0; i < misInvitados.Count(); i++) { misInvitados[i].Update = 0; _workflowServices.UpdateViajeInvitado(misInvitados[i], misInvitados[i]); InvitadosPropios.Add($"Viaje del invitado {misInvitados[i].Nombre} con fecha {misInvitados[i].FechaLLegada} tiene ahora estado {misInvitados[i].Estado}"); } } var invitados = t.InvitadosUpdated.Where(vi => vi.Usuario.Email != User.Identity.Name).ToList(); if (invitados.Count != 0) { for (int i = 0; i < invitados.Count(); i++) { invitados[i].Update = 0; _workflowServices.UpdateViajeInvitado(invitados[i], invitados[i]); InvitadosAjenos.Add($"Viaje del invitado {invitados[i].Nombre} con fecha {invitados[i].FechaLLegada} tiene ahora estado {invitados[i].Estado}"); } } } vm.NotificationsList = notificationsList; vm.InvitadosPropios = InvitadosPropios; vm.InvitadosAjenos = InvitadosAjenos; return(View(vm)); }