コード例 #1
0
 public UnitOfWork(GrandeHotelCustomContext context)
 {
     _context = context;
     Rooms    = new RoomsRepository(context);
     Bookings = new BookingsRepository(context);
     Users    = new UserRepository(context);
 }
コード例 #2
0
        public ActionResult PostReview(int id, LocationReviewViewModel model)
        {
            try
            {
                DbLocation location = GetLocationIfExists(id);
                ViewBag.Location = location;
                if (location == null)
                {
                    return(RedirectToAction("Index", "Reviews"));
                }

                AuthenticatedUser user = (AuthenticatedUser)User;

                BookingsRepository bookingsRepository = _unitOfWork.BookingsRepository;
                IList <DbBooking>  booking            = bookingsRepository.GetAllByUserIdAndLocationId(user.Id, id);
                if (booking == null || !booking.Any())
                {
                    return(RedirectToAction("Index", "Reviews"));
                }

                if (!ModelState.IsValid)
                {
                    return(View(model));
                }

                LocationReviewsRepository locationReviewsRepository = _unitOfWork.LocationReviewsRepository;
                DbLocationReview          review = new DbLocationReview();
                review.DateTime   = DateTime.Now;
                review.LocationId = id;
                review.Review     = model.Review;
                review.UserId     = user.Id;
                review.Title      = model.Title;
                // We insert our review before storing the facility ratings so we have a review id
                locationReviewsRepository.Insert(review);

                review.FacilityRatings = model.FacilityRatings.Select(x =>
                {
                    return(new DbLocationFacilityRating
                    {
                        FacilityId = x.Id,
                        Rating = MathEx.Clamp(x.Rating, 0, 1),
                        ReviewId = review.Id
                    });
                }).ToList();
                locationReviewsRepository.Update(review);

                TempData["AlertType"]    = "success";
                TempData["AlertMessage"] = "De review is succesvol toegevoegd aan de locatie.";

                return(RedirectToAction("Index", "Reviews"));
            }
            catch
            {
                TempData["AlertType"]    = "danger";
                TempData["AlertMessage"] = "Er is iets fout gelopen tijdens het verwerken van de review!";

                return(View(model));
            }
        }
コード例 #3
0
        private bool IsUserAllowedToWriteReviewForLocation(int locationId)
        {
            BookingsRepository bookingsRepository = _unitOfWork.BookingsRepository;
            IList <DbBooking>  booking            = bookingsRepository.GetAllByUserIdAndLocationId(((AuthenticatedUser)User).Id, locationId);

            if (booking == null || !booking.Any())
            {
                return(false);
            }

            LocationReviewsRepository locationReviewsRepository = _unitOfWork.LocationReviewsRepository;
            DbLocationReview          review = locationReviewsRepository.GetByUserIdAndLocationId(((AuthenticatedUser)User).Id, locationId);

            if (review != null)
            {
                return(false);
            }

            return(true);
        }
コード例 #4
0
            private async Task <IEnumerable <PostingAccountBalance> > GetPostingAccountBalances(
                IList <Olma.PostingAccount> postingAccounts = null, bool useCalculatedBalance = true)
            {
                var queryCacheOptions = CacheOptions.Value.QueryCache;
                IQueryable <Bookings> ltmsBookingsQuery = null;

                if (postingAccounts != null)
                {
                    if (postingAccounts.Count == 0)
                    {
                        return(new List <PostingAccountBalance>());
                    }

                    // build a union clause with all posting accounts and potential date limiters
                    foreach (var postingAccount in postingAccounts)
                    {
                        IQueryable <Bookings> subQuery;
                        if (useCalculatedBalance && postingAccount.CalculatedBalance == null)
                        {
                            subQuery = BookingsRepository.FindAll()
                                       .AsNoTracking()
                                       .Where(i => i.Quantity.HasValue)
                                       .Where(i => i.AccountId == postingAccount.RefLtmsAccountId);
                        }
                        else
                        {
                            subQuery = BookingsRepository.FindAll()
                                       .AsNoTracking()
                                       .Where(i => i.Quantity.HasValue)
                                       // TODO discuss if created field is the correct field to filter on
                                       .Where(i => i.AccountId == postingAccount.RefLtmsAccountId &&
                                              i.CreateTime > postingAccount.CalculatedBalance.LastBookingDateTime);
                        }

                        // TODO discuss if we need to filter on bookings type
                        //subQuery = subQuery.Where(i => i.BookingTypeId == 0)

                        ltmsBookingsQuery =
                            ltmsBookingsQuery == null ? subQuery : ltmsBookingsQuery.Union(subQuery);
                    }
                }
                else
                {
                    ltmsBookingsQuery = BookingsRepository.FindAll()
                                        .AsNoTracking()
                                        .IgnoreQueryFilters()
                                        .Where(i => i.OlmaPostingAccount != null && i.DeleteTime == null);
                }

                var inCoordinationQuery = ltmsBookingsQuery
                                          .Where(i => i.IncludeInBalance && !i.Matched && i.ReportBookings.Any(rb =>
                                                                                                               rb.Report.DeleteTime == null && rb.Report.ReportStateId == "U"));


                // perfrom left outer join to add uncordinated info to data before grouping as other ef core will fail
                var joined = from balance in ltmsBookingsQuery
                             join inCoordination in inCoordinationQuery on balance.Id equals inCoordination.Id into
                             inCoordinationMatch
                             from u in inCoordinationMatch.DefaultIfEmpty()
                             select new { balance, isInCoordination = u != null };

                // now we need to group by
                var dbResult = joined
                               .GroupBy(i => new
                {
                    i.balance.AccountId,
                    i.balance.ArticleId,
                    i.balance.QualityId
                })
                               .Select(g => new
                {
                    g.Key,
                    Balances = new
                    {
                        LastBookingDateTime = g.Max(i => i.balance.BookingDate),
                        CoordinatedBalance  =
                            g.Sum(i => i.balance.Matched
                                    ? i.balance.Quantity.Value * -1
                                    : 0), //TODO: Workaround to fix the Balances, but with the wrong viewpoint
                        ProvisionalCharge = g.Sum(i =>
                                                  !i.balance.Matched && !i.isInCoordination && !i.balance.IncludeInBalance &&
                                                  i.balance.Quantity > 0
                                    ? i.balance.Quantity.Value
                                    : 0),
                        ProvisionalCredit = g.Sum(i =>
                                                  !i.balance.Matched && !i.isInCoordination && !i.balance.IncludeInBalance &&
                                                  i.balance.Quantity < 0
                                    ? i.balance.Quantity.Value * -1
                                    : 0),
                        InCoordinationCharge = g.Sum(i =>
                                                     !i.balance.Matched && i.isInCoordination && i.balance.IncludeInBalance &&
                                                     i.balance.Quantity > 0
                                    ? i.balance.Quantity.Value
                                    : 0),
                        InCoordinationCredit = g.Sum(i =>
                                                     !i.balance.Matched && i.isInCoordination && i.balance.IncludeInBalance &&
                                                     i.balance.Quantity < 0
                                    ? i.balance.Quantity.Value * -1
                                    : 0),
                        UncoordinatedCharge = g.Sum(i =>
                                                    !i.balance.Matched && !i.isInCoordination && i.balance.IncludeInBalance &&
                                                    i.balance.Quantity > 0
                                    ? i.balance.Quantity.Value
                                    : 0),
                        UncoordinatedCredit = g.Sum(i =>
                                                    !i.balance.Matched && !i.isInCoordination && i.balance.IncludeInBalance &&
                                                    i.balance.Quantity < 0
                                    ? i.balance.Quantity.Value * -1
                                    : 0)
                    }
                })
                               .FromCache(new MemoryCacheEntryOptions
                {
                    AbsoluteExpiration =
                        DateTimeOffset.UtcNow.AddMinutes(queryCacheOptions.AbsoluteExpirationInMinutes),
                    SlidingExpiration = TimeSpan.FromMinutes(queryCacheOptions.SlidingExpirationInMinutes)
                })
                               .ToList();

                var ltmsAccountIds = dbResult.Select(i => i.Key.AccountId).Distinct().ToArray();
                var accountMap     = LtmsReferenceLookupService.GetOlmaPostingAccountIds(ltmsAccountIds);

                var ltmsArticleQualityIds = dbResult.Select(i => Tuple.Create(i.Key.ArticleId, i.Key.QualityId))
                                            .Distinct().ToArray();
                var loadCarrierMap = LtmsReferenceLookupService.GetOlmaLoadCarrierIds(ltmsArticleQualityIds);


                // convert db result to dictionary
                var postingAccountBalances = dbResult
                                             // HACK Fix mappings Tuple(6,12)
                                             .Where(i => loadCarrierMap.ContainsKey(Tuple.Create(i.Key.ArticleId, i.Key.QualityId)))
                                             .Select(i => new PostingAccountBalance
                {
                    PostingAccountId     = accountMap[i.Key.AccountId],
                    LoadCarrierId        = loadCarrierMap[Tuple.Create(i.Key.ArticleId, i.Key.QualityId)],
                    LastBookingDateTime  = i.Balances.LastBookingDateTime,
                    CoordinatedBalance   = i.Balances.CoordinatedBalance,
                    ProvisionalCharge    = i.Balances.ProvisionalCharge,
                    ProvisionalCredit    = i.Balances.ProvisionalCredit,
                    InCoordinationCharge = i.Balances.InCoordinationCharge,
                    InCoordinationCredit = i.Balances.InCoordinationCredit,
                    UncoordinatedCharge  = i.Balances.UncoordinatedCharge,
                    UncoordinatedCredit  = i.Balances.UncoordinatedCredit
                });

                return(postingAccountBalances);
            }
コード例 #5
0
 public BookingServices()
 {
     bookingsRepository = new BookingsRepository();
 }