Exemple #1
0
        public async Task <IActionResult> UpdateRouteAsync([FromBody] UpdateRouteManagementAc updateRoute)
        {
            var user = await _userManager.FindByNameAsync(User.Identity.Name);

            return(Ok(await _routeManagementRepository.UpdateRouteAsync(updateRoute, user)));
        }
        /// <summary>
        /// Method to update route - SS
        /// </summary>
        /// <param name="updateRoute">route detail</param>
        /// <param name="loggedInUser">logged in user</param>
        /// <returns>response</returns>
        public async Task <RouteManagementResponse> UpdateRouteAsync(UpdateRouteManagementAc updateRoute, ApplicationUser loggedInUser)
        {
            if (string.IsNullOrEmpty(updateRoute.Code.Trim()))
            {
                return new RouteManagementResponse()
                       {
                           HasError = true, Message = "Code can't be empty", ErrorType = RouteManagementResponseType.Code
                       }
            }
            ;
            else if (string.IsNullOrEmpty(updateRoute.Name.Trim()))
            {
                return new RouteManagementResponse()
                       {
                           HasError = true, Message = "Name can't be empty", ErrorType = RouteManagementResponseType.Name
                       }
            }
            ;
            else
            {
                var instituteId = await _instituteUserMappingHelperService.GetUserCurrentSelectedInstituteIdAsync(loggedInUser.Id, true);

                var placeIds = updateRoute.RouteStageMappings.Select(x => x.FromPlaceId).ToList();
                placeIds.AddRange(updateRoute.RouteStageMappings.Select(x => x.ToPlaceId).ToList());
                placeIds = placeIds.Distinct().ToList();
                var placeCount = await _iMSDbContext.TransportationStages.CountAsync(x => placeIds.Contains(x.Id) && x.InstituteId == instituteId);

                if (placeIds.Count != placeCount)
                {
                    return new RouteManagementResponse()
                           {
                               HasError = true, Message = "Place not found", ErrorType = RouteManagementResponseType.PlaceId
                           }
                }
                ;
                else
                {
                    var routes = await _iMSDbContext.Routes.Where(x => x.InstituteId == instituteId && x.Id != updateRoute.Id).ToListAsync();

                    if (routes.Any(x => x.Code.ToLowerInvariant() == updateRoute.Code.ToLowerInvariant()))
                    {
                        return new RouteManagementResponse()
                               {
                                   HasError = true, Message = "Code already exist. Please use unique one", ErrorType = RouteManagementResponseType.Code
                               }
                    }
                    ;
                    else
                    {
                        var route = await _iMSDbContext.Routes.FirstOrDefaultAsync(x => x.Id == updateRoute.Id && x.InstituteId == instituteId);

                        if (route == null)
                        {
                            return new RouteManagementResponse()
                                   {
                                       HasError = true, Message = "Route not found", ErrorType = RouteManagementResponseType.Id
                                   }
                        }
                        ;
                        else
                        {
                            route.Code = updateRoute.Code;

                            route.Name        = updateRoute.Name;
                            route.StartDate   = updateRoute.StartDate;
                            route.UpdatedById = loggedInUser.Id;
                            route.UpdatedOn   = DateTime.UtcNow;
                            _iMSDbContext.Routes.Update(route);
                            await _iMSDbContext.SaveChangesAsync();

                            var previous = await _iMSDbContext.RouteStageMappings.Where(x => x.RouteId == route.Id).ToListAsync();

                            _iMSDbContext.RouteStageMappings.RemoveRange(previous);
                            await _iMSDbContext.SaveChangesAsync();

                            List <RouteStageMapping> routeStages = new List <RouteStageMapping>();
                            for (int i = 0; i < updateRoute.RouteStageMappings.Count; i++)
                            {
                                routeStages.Add(new RouteStageMapping()
                                {
                                    CreatedOn   = DateTime.UtcNow,
                                    Distance    = updateRoute.RouteStageMappings[i].Distance,
                                    FromPlaceId = updateRoute.RouteStageMappings[i].FromPlaceId,
                                    OrderId     = i,
                                    RouteId     = route.Id,
                                    ToPlaceId   = updateRoute.RouteStageMappings[i].ToPlaceId
                                });
                            }
                            _iMSDbContext.RouteStageMappings.AddRange(routeStages);
                            await _iMSDbContext.SaveChangesAsync();

                            return(new RouteManagementResponse()
                            {
                                HasError = false, Message = "Route updated successfully"
                            });
                        }
                    }
                }
            }
        }