Exemplo n.º 1
0
        // GET: Residences/Edit/5
        public async Task <IActionResult> Edit(Guid?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var request = await _context.SearchRequests
                          .Include(r => r.User)
                          .Include(r => r.FeatureRequests)
                          .ThenInclude(f => f.FeatureType)
                          .Include(r => r.Results)
                          .ThenInclude(r => r.Residence)
                          .ThenInclude(r => r.Type)
                          .Include(r => r.Results)
                          .ThenInclude(r => r.Residence)
                          .ThenInclude(r => r.ResidencePhotos)
                          .FirstOrDefaultAsync(m => m.Id == id);

            if (request == null || !_userPermissions.IsOwnerOfRequest(request))
            {
                return(NotFound());
            }

            var model = new RequestEditModel
            {
                Address  = request.Address,
                Area     = request.Area,
                Cost     = request.Cost,
                Features = new Dictionary <Guid, string>(),
                Results  = request.Results
            };

            foreach (var feature in request.FeatureRequests)
            {
                model.Features[feature.FeatureType.Id] = feature.Value;
            }

            return(View(model));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> Edit(Guid?id, RequestEditModel model)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var request = await _context.SearchRequests
                          .Include(r => r.Results)
                          .SingleOrDefaultAsync(m => m.Id == id);

            if (request == null || !_userPermissions.IsOwnerOfRequest(request))
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                request.Address = model.Address;
                request.Cost    = model.Cost;
                request.Area    = model.Area;

                foreach (KeyValuePair <Guid, String> kvp in model.Features)
                {
                    var feature = await _context.FeatureRequests
                                  .SingleOrDefaultAsync(m => m.SearchRequestId == id && m.FeatureTypeId == kvp.Key);

                    feature.Value = kvp.Value;
                }

                await _context.SaveChangesAsync();

                await _updateRequestsService.UpdateRequest(null, request.Id);

                return(RedirectToAction(nameof(Index)));
            }

            return(View(model));
        }
Exemplo n.º 3
0
        public IActionResult Create()
        {
            var model = new RequestEditModel();

            model.Results = new List <RequestResult>();

            var residences = _context.Residences
                             .Include(r => r.Features)
                             .Include(r => r.ResidencePhotos)
                             .Include(r => r.Type)
                             .Take(5);

            foreach (var residence in residences)
            {
                model.Results.Add(new RequestResult
                {
                    Relevance   = (new Random()).NextDouble(),
                    ResidenceId = residence.Id,
                    Residence   = residence
                });
            }

            return(View(model));
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Create(RequestEditModel model)
        {
            var user = await _userManager.GetUserAsync(HttpContext.User);

            model.Results = new List <RequestResult>();

            if (ModelState.IsValid)
            {
                var request = new SearchRequest
                {
                    Address = model.Address,
                    Area    = model.Area,
                    Cost    = model.Cost
                };

                if (user != null)
                {
                    request.UserId = user.Id;
                    _context.SearchRequests.Add(request);

                    foreach (KeyValuePair <Guid, String> kvp in model.Features)
                    {
                        var feature = new FeatureRequest
                        {
                            SearchRequestId = request.Id,
                            FeatureTypeId   = kvp.Key,
                            Value           = kvp.Value
                        };

                        _context.FeatureRequests.Add(feature);
                    }
                }

                var residences = await _context.Residences
                                 .Where(r => r.Cost <1.25 * model.Cost && r.Area> 0.75 *model.Area)
                                 .Include(r => r.Features)
                                 .ThenInclude(f => f.FeatureType)
                                 .ToListAsync();

                foreach (var residence in residences)
                {
                    double criterias = 0, goodCriterias = 0;

                    goodCriterias += Math.Min(model.Area / residence.Area, residence.Area / model.Area);
                    criterias++;

                    goodCriterias += Math.Min(model.Cost / residence.Cost, residence.Cost / model.Cost);
                    criterias++;

                    foreach (var criteria in model.Features)
                    {
                        var residenceValue = residence.Features.Where(f => f.FeatureTypeId == criteria.Key).First().Value;
                        if (criteria.Value == "Not Specified" || criteria.Value == residenceValue)
                        {
                            goodCriterias++;
                        }
                        criterias++;
                    }

                    if (goodCriterias / criterias > 0.75)
                    {
                        var requestResult = new RequestResult
                        {
                            Relevance       = goodCriterias / criterias,
                            SearchRequestId = request.Id,
                            ResidenceId     = residence.Id
                        };

                        if (user != null)
                        {
                            _context.RequestResults.Add(requestResult);
                        }

                        model.Results.Add(new RequestResult
                        {
                            Relevance   = goodCriterias / criterias,
                            ResidenceId = residence.Id,
                            Residence   = await _context.Residences
                                          .Where(r => r.Id == residence.Id)
                                          .Include(r => r.Type)
                                          .Include(r => r.Features)
                                          .Include(r => r.ResidencePhotos)
                                          .SingleOrDefaultAsync()
                        });
                    }
                }

                await _context.SaveChangesAsync();

                if (user != null)
                {
                    return(Redirect("/Requests/Edit/" + request.Id.ToString()));
                }
            }

            return(View(model));
        }