示例#1
0
        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));
        }