Inheritance: BaseDataObject
        public async Task CheckInBeer(Beer beer, int score)
        {
            try
            {
                Acr.UserDialogs.UserDialogs.Instance.ShowLoading("Saving checkin");
                var location = await CrossGeolocator.Current.GetPositionAsync();
                var checkIn = new CheckIn
                {
                    Beer = beer,
                    User = await userStore.GetCurrentUser(),
                    Longitude = location.Longitude,
                    Latitude = location.Latitude
                };

                var rating = new Rating
                {
                    User = await userStore.GetCurrentUser(),
                    Score = score,
                    CheckIn = checkIn
                };

                checkIn.Rating = rating;

                await checkInStore.InsertAsync(checkIn);
                await ratingStore.InsertAsync(rating);

                Acr.UserDialogs.UserDialogs.Instance.HideLoading();
            }
            catch (Exception ex)
            {
                log.Report(ex);
            }
        }
        public void AddBeerToIndex(Beer beer)
        {
            var activity = new NSUserActivity("com.micjames.beerdrinkin.beerdetails");

            if (!string.IsNullOrEmpty(beer.Description))
            {
                var info = new NSMutableDictionary();
                info.Add(new NSString("name"), new NSString(beer.Name));
                info.Add(new NSString("description"), new NSString(beer.Description));

                if (beer?.Image?.MediumUrl != null)
                {
                    info.Add(new NSString("imageUrl"), new NSString(beer.Image.LargeUrl));
                }

                var attributes = new CSSearchableItemAttributeSet();
                attributes.DisplayName = beer.Name;
                attributes.ContentDescription = beer.Description;

                var keywords = new NSString[] { new NSString(beer.Name), new NSString("beerName") };
                activity.Keywords = new NSSet<NSString>(keywords);
                activity.ContentAttributeSet = attributes;

                activity.Title = beer.Name;
                activity.UserInfo = info;

                activity.EligibleForSearch = true;
                activity.EligibleForPublicIndexing = true;
                activity.BecomeCurrent();
            }

        }
 public BeerDescriptionViewModel(Beer beer)
 {
     BreweryStore = ServiceLocator.Instance.Resolve<IBreweryStore>();
     RatingStore = ServiceLocator.Instance.Resolve<IRatingStore>();
     SearchProvider = ServiceLocator.Instance.Resolve<IDeviceSearchProvider>();
     
     Beer = beer;
     SearchProvider.AddBeerToIndex(beer); 
 }
 public IActionResult Edit(Beer beerItem)
 {
     if (ModelState.IsValid)
     {
         _context.Update(beerItem);
         _context.SaveChanges();
         return RedirectToAction("Index");
     }
     return View(beerItem);
 }
        public void SetBeer(Beer beer)
        {
            this.beer = beer;  

            AddSourceTypeCell();
            if(UIImagePickerController.IsSourceTypeAvailable(UIImagePickerControllerSourceType.Camera) == true)
            {
                AddBarcodeCell();
                AddPhotosCell();
            }
            AddRatingCell();
            AddNotesCell();
        }
        public void SetBeer(Beer beer)
        {
            this.beer = beer;

            statsView.Name = beer.Name;
            statsView.Country = beer.OriginCountry;
            statsView.ABV = beer.Abv.ToString();

            if (beer.HasImages)
            {
                image.SetImage(new NSUrl(beer.Image.LargeUrl));
            }
        }
        public override void PrepareForSegue(UIStoryboardSegue segue, NSObject sender)
        {
            if (segue.Identifier != segueIdentifier || SelectedBeer == null)
                return;

            var beerDescriptoinViewController = segue.DestinationViewController as BeerDescriptionTableView;
            if (beerDescriptoinViewController == null)
                return;

            beerDescriptoinViewController.EnableCheckIn = true;

            beerDescriptoinViewController.SetBeer(SelectedBeer);
            SelectedBeer = null;
        }
        //Beer Converter 
        Beer ToBeerDrinkin(BreweryDB.Interfaces.IBeer dbBeer)
        {
            try
            {
                var beer = new Beer()
                {
                    Id = dbBeer.Id,
                    Name = dbBeer.Name,
                    BreweryDbId = dbBeer.Id,
                    Description = dbBeer.Description,
                    Abv = dbBeer.Abv
                };

                if (dbBeer.Labels != null)
                {
                    var image = new Image
                    {
                        SmallUrl = dbBeer?.Labels?.Icon,
                        MediumUrl = dbBeer?.Labels?.Medium,
                        LargeUrl = dbBeer?.Labels?.Large
                    };
                    beer.Image = image;
                }

                if (dbBeer.Breweries.Count != 0)
                {
                    var dbBrewery = dbBeer.Breweries.FirstOrDefault();
                    beer.Brewery = ToBeerDrinkin(dbBrewery);
                }

                return beer;
            }
            catch (Exception ex)
            {
                telemetryClient.TrackException(ex);
                return null;
            }
        }
 public void SetBeer (Beer beer)
 {
     viewModel = new BeerDescriptionViewModel(beer);
     viewModel.SearchProvider.AddBeerToIndex(beer);
 }
 void BeerSelected(Beer beer)
 {
     SelectedBeer = beer;
     PerformSegue(segueIdentifier, this);
 }
        public async Task<List<Beer>> Get(string searchTerm)
        {
            try
            {
                //Setup tracking how long the HTTP request takes.
                telemtryClient.Context.Operation.Id = Guid.NewGuid().ToString();
                telemtryClient.Context.Operation.Name = "Search";
                var stopwatch = System.Diagnostics.Stopwatch.StartNew();

                //Log the fact we've search some beers
                telemtryClient.TrackEvent("SearchedBeers");
                indexClient = serviceClient.Indexes.GetClient("beers");

                //Setup suggestionParmeters for AzureSearch
                var suggestParameters = new SuggestParameters();
                suggestParameters.UseFuzzyMatching = true;
                suggestParameters.Top = 25;
                suggestParameters.HighlightPreTag = "[";
                suggestParameters.HighlightPostTag = "]";
                suggestParameters.MinimumCoverage = 100;

                var suggestions = await indexClient.Documents.SuggestAsync<AzureSearchBeerResponse>(searchTerm, "nameSuggester", suggestParameters);

                //Convert to Beer Drinkin Beer Type & save to our DB.
                var results = new List<Beer>();
                foreach (var result in suggestions.Results)
                {
                    var indexedBeer = result.Document;
                    var beer = new Beer
                    {
                        Id = indexedBeer.Id,
                        Abv = indexedBeer.Abv,
                        Description = indexedBeer.Description,
                        BreweryDbId = indexedBeer.Id,
                        Name = indexedBeer.Name
                    };

                    beer.Image = new Image();
                    //Fetch Brewery information 

                    if(indexedBeer.Images.Count() > 0)
                    {
                        beer.HasImages = true;
                        beer.Image.SmallUrl = indexedBeer?.Images[0];
                        beer.Image.MediumUrl = indexedBeer?.Images[1];
                        beer.Image.LargeUrl = indexedBeer?.Images[2];
                    }
                    results.Add(beer);
                }

                stopwatch.Stop();
                telemtryClient.TrackRequest("BeerSearch", DateTime.Now, stopwatch.Elapsed, "200", true);

                return results;
            }
            catch(Exception ex)
            {
                telemtryClient.TrackException(ex);
                return new List<DataObjects.Beer>();
            }
        }
        public override bool ContinueUserActivity (UIApplication application, NSUserActivity userActivity, UIApplicationRestorationHandler completionHandler)
        {
            switch (userActivity.ActivityType) 
            {
				case "com.micjames.beerdrinkin.mybeers":
                    break;
				case "com.micjames.beerdrinkin.wishlist":
                    break;
				case "com.micjames.beerdrinkin.search":
                    break;
				case "com.micjames.beerdrinkin.profile":
                    break;
				case "com.micjames.beerdrinkin.beerdetails":
                    var info = userActivity.UserInfo;
                if (this.Window.RootViewController.ChildViewControllers[0] is UITabBarController) 
                {
					var tabController = this.Window.RootViewController.ChildViewControllers[0] as UITabBarController;
					tabController.SelectedIndex = 2;

						var beerItem = new Beer();

						var id = new NSObject();
						info.TryGetValue(new NSString("id"), out id);

						var name = new NSObject();
						info.TryGetValue(new NSString("name"), out name);

						var description = new NSObject();
						info.TryGetValue(new NSString("description"), out description);

						var imageUrl = new NSObject();
						info.TryGetValue(new NSString("imageUrl"), out imageUrl);

						var breweryDbId = new NSObject();
						info.TryGetValue(new NSString("breweryDbId"), out breweryDbId);

						beerItem.Name = name.ToString();
						beerItem.Description = description.ToString();
						beerItem.Image.MediumUrl = imageUrl.ToString();
						beerItem.BreweryDbId = breweryDbId.ToString();

						if (!string.IsNullOrEmpty(beerItem.BreweryDbId))
						{
							var storyboard = UIStoryboard.FromName("Main", null);
							var vc = storyboard.InstantiateViewController ("BEER_DESCRIPTION") as BeerDescriptionTableView;
							vc.SetBeer (beerItem);
							var navigationControler = tabController.SelectedViewController as UINavigationController;
							navigationControler.PushViewController (vc, true);
						}
                }
                break;
            }

            return true;
        }