public GetCustomerOfferResponse GetCustomerOffer(GetCustomerOfferRequest request) { var customer = _customerManager.Get(request.IdentityTag); if (customer is null) { throw new AppException("Customer not found"); } var agregations = _agregationManager.GetAgregations(Entities.Enums.PeriodType.Daily, _timeManager.Now.AddYears(-1), Entities.Enums.AgregationBy.CustomerCatering); var customerAgregations = agregations.Where(x => _tagManager.UnTag(x.Tag)[AgregationConstants.CustomerId] == customer.Id.ToString()); var customerAgrrGrouped = customerAgregations.GroupBy(x => x.Tag); //If weekend we are calculating by sum else is count. Because most money usage for catering are on weekend if (_timeManager.CheckIfTodayWeekend()) { customerAgrrGrouped = customerAgrrGrouped.OrderBy(x => x.Sum(a => a.Sum)); } else { customerAgrrGrouped = customerAgrrGrouped.OrderBy(x => x.Sum(a => a.Count)); } var agregation = customerAgrrGrouped.FirstOrDefault().Key; int cateringId = _tagManager.UnTag <int>(agregation, AgregationConstants.CateringId); var catering = _cateringManager.Get(cateringId); return(new GetCustomerOfferResponse { CateringName = catering.Name, AddressText = catering.AddressText, Latitude = catering.Latitude.Value, Longitude = catering.Latitude.Value }); }