Exemple #1
0
        public async Task <ActionResult <IEnumerable <IVMSBackUser> > > GetAsync(int page, int start, int limit)
        {
            ResponseDefaultDataList response = new ResponseDefaultDataList();

            try
            {
                var userId = User.FindFirst(ClaimTypes.NameIdentifier).Value;
                CurrentUser = await _userManager.FindByIdAsync(userId);

                var CurrentUserRole = await _userManager.GetRolesAsync(CurrentUser);

                List <Filter> filtros;
                var           filters = HttpContext.Request.Query["filter"].ToString();

                response.success = true;
                response.data    = new List <IVMSBackUser>();
                List <IVMSBackUser> records = new List <IVMSBackUser>();

                foreach (var role in await _roleManager.Roles.Where(x => x.Name == "Conductor" && x.DateEnd == null).ToListAsync())
                {
                    List <IVMSBackUser> users = new List <IVMSBackUser>();

                    if (CurrentUserRole[0] == "Super Administrador")
                    {
                        users = ((List <IVMSBackUser>) await _userManager.GetUsersInRoleAsync(role.Name)).Where(x => x.DateEnd == null).ToList();
                    }
                    else
                    {
                        var lines = await _context.IVMSBackUserLines
                                    .Include(x => x.Line)
                                    .Where(x => x.IVMSBackUserID.Contains(userId) && x.DateEnd == null && x.Line.DateEnd == null)
                                    .Select(x => x.Line).ToListAsync();

                        var usersFilter = await _context.IVMSBackUserLines
                                          .Include(x => x.IVMSBackUser)
                                          .Include(x => x.Line)
                                          .Where(x => x.DateEnd == null && lines.Contains(x.Line) && x.IVMSBackUser.DateEnd == null)
                                          .Select(x => x.IVMSBackUser).ToListAsync();

                        if (lines.Count > 0)
                        {
                            users = ((List <IVMSBackUser>) await _userManager.GetUsersInRoleAsync(role.Name))
                                    .Where(x => x.DateEnd == null && usersFilter.Contains(x))
                                    .ToList();
                        }
                    }
                }

                if (!string.IsNullOrEmpty(filters))
                {
                    filtros = JsonConvert.DeserializeObject <List <Filter> >(filters);

                    foreach (var filtro in filtros)
                    {
                        if (!string.IsNullOrEmpty(filtro.valor))
                        {
                            if (filtro.propiedad == "name")
                            {
                                records = records.Where(x => x.Name.ToUpper().Contains(filtro.valor.ToUpper())).ToList();
                            }
                        }
                    }
                }

                response.total = records.Count();
                response.data.AddRange(records.Skip((page - 1) * limit).Take(limit));
                return(Ok(response));
            }
            catch (Exception ex)
            {
                response.success = false;
                response.message = ex.Message;
                return(BadRequest(response));
            }
        }
        public async Task <ActionResult <IEnumerable <Vehicle> > > GetVehicle(int page, int start, int limit)
        {
            ResponseDefaultDataList response = new ResponseDefaultDataList();

            try
            {
                CurrentUserId = User.FindFirst(ClaimTypes.NameIdentifier).Value;

                CurrentUser = await _userManager.FindByIdAsync(CurrentUserId);

                var CurrentUserRole = await _userManager.GetRolesAsync(CurrentUser);

                List <Filter> filtros;
                var           filters = HttpContext.Request.Query["filter"].ToString();

                response.success = true;
                response.data    = new List <Vehicle>();

                List <Vehicle> records = new List <Vehicle>();

                if (CurrentUserRole[0] == "Super Administrador")
                {
                    records = await _context.Vehicle.Where(x => x.DateEnd == null).ToListAsync();
                }
                else
                {
                    var lines = await _context.IVMSBackUserLines
                                .Include(x => x.Line)
                                .Where(x => x.IVMSBackUserID.Contains(CurrentUserId) && x.DateEnd == null && x.Line.DateEnd == null)
                                .Select(x => x.Line).ToListAsync();

                    var vehicles = await _context.VehicleLines
                                   .Include(x => x.Vehicle)
                                   .Include(x => x.Line)
                                   .Where(x => x.DateEnd == null && lines.Contains(x.Line) && x.Vehicle.DateEnd == null && x.Line.DateEnd == null)
                                   .Select(x => x.Vehicle).ToListAsync();

                    if (lines.Count > 0)
                    {
                        records = await _context.Vehicle.Where(x => x.DateEnd == null && vehicles.Contains(x)).ToListAsync();
                    }
                }

                foreach (var vehicle in records)
                {
                    var line = await _context.VehicleLines
                               .Include(x => x.Line)
                               .Where(x => x.DateEnd == null && x.VehicleID.Equals(vehicle.Id) && x.Line.DateEnd == null)
                               .FirstOrDefaultAsync();

                    if (line != null)
                    {
                        vehicle.Line = line.Line.Name;
                    }

                    var status = await _context.VehicleStatusStore
                                 .Include(x => x.VehicleStatus)
                                 .Where(x => x.DateEnd == null && x.VehicleID.Equals(vehicle.Id) && x.VehicleStatus.DateEnd == null)
                                 .FirstOrDefaultAsync();

                    if (status != null)
                    {
                        vehicle.VehicleStatus = status.VehicleStatus.Name;
                    }

                    var user = await _context.IVMSBackUserVehicles
                               .Include(x => x.IVMSBackUser)
                               .Where(x => x.DateEnd == null && x.VehicleID.Equals(vehicle.Id))
                               .FirstOrDefaultAsync();

                    if (user != null)
                    {
                        vehicle.User = user.IVMSBackUser.Name + " - " + user.IVMSBackUser.Email;
                    }
                }

                if (!string.IsNullOrEmpty(filters))
                {
                    filtros = JsonConvert.DeserializeObject <List <Filter> >(filters);

                    foreach (var filtro in filtros)
                    {
                        if (!string.IsNullOrEmpty(filtro.valor))
                        {
                            /*if (filtro.propiedad == "name")
                             * {
                             *  records = records.Where(x => x.Name.ToUpper().Contains(filtro.valor.ToUpper())).ToList();
                             * }
                             *
                             * if (filtro.propiedad == "address")
                             * {
                             *  records = records.Where(x => x.Address.ToUpper().Contains(filtro.valor.ToUpper())).ToList();
                             * } */
                        }
                    }
                }

                response.total = records.Count();
                response.data.AddRange(records.Skip((page - 1) * limit).Take(limit));
                return(Ok(response));
            }
            catch (Exception ex) {
                response.success = false;
                response.message = ex.Message;
                return(BadRequest(response));
            }
        }