Example #1
0
        public GrupoDetailsViewModel(INavigationService navigationService, IGruposRegionRepository gruposRegionRepository,
                                     IGrupoPokemonsRepository grupoPokemonsRepository)
            : base(navigationService)
        {
            _navigationService       = navigationService;
            _gruposRegionRepository  = gruposRegionRepository;
            _grupoPokemonsRepository = grupoPokemonsRepository;

            #region Commands Logic


            DeleteGroup = new Command(async(obj) =>
            {
                var action = await App.Current.MainPage.DisplayAlert("Warning", "Do you want to delete this group?", "Yes", "No");
                if (action)
                {
                    UserDialogs.Instance.ShowLoading(null, MaskType.Clear);

                    //delete pokemons that belong to this group
                    await _grupoPokemonsRepository.DeteleDataByGrupoId(GroupId);

                    //then, delete group
                    await _gruposRegionRepository.DeleteData(GroupId, await SecureStorage.GetAsync("UserId"), string.Empty);

                    UserDialogs.Instance.HideLoading();

                    await App.Current.MainPage.DisplayAlert("Success",
                                                            "Your group was deleted successfully", "ok");

                    var navigationParams = new NavigationParameters();
                    navigationParams.Add("DeletedGrupoId", GroupId);
                    await _navigationService.GoBackAsync(navigationParams);
                }
            });

            ModifyGroup = new Command(async(obj) =>
            {
                var navigationParams = new NavigationParameters();
                navigationParams.Add("GruposRegion", GruposRegion);
                navigationParams.Add("IsCreate", false);
                navigationParams.Add("PokemonsAdded", PokemonsAdded);
                await _navigationService.NavigateAsync("PokemonRegionView", navigationParams);
            });


            #endregion
        }
Example #2
0
        public MainPageViewModel(INavigationService navigationService, IAPIService apiService, IGruposRegionRepository gruposRegionRepository)
            : base(navigationService)
        {
            Title                   = "Regions";
            _apiService             = apiService;
            _navigationService      = navigationService;
            _gruposRegionRepository = gruposRegionRepository;
            GetRegions();


            Logout = new Command(async() =>
            {
                SecureStorage.RemoveAll();
                App.IsMainView = false;
                await NavigationService.NavigateAsync("/LoginView");
            });
        }
Example #3
0
        public RegionGruposViewModel(INavigationService navigationService, IGruposRegionRepository gruposRegionRepository,
                                     IGrupoPokemonsRepository grupoPokemonsRepository)
            : base(navigationService)
        {
            _navigationService       = navigationService;
            _gruposRegionRepository  = gruposRegionRepository;
            _grupoPokemonsRepository = grupoPokemonsRepository;

            #region Commands Logic

            CreateGroup = new Command(async(obj) =>
            {
                var navigationParams = new NavigationParameters();
                navigationParams.Add("pokedexes", PokedexInfo);
                navigationParams.Add("IsCreate", true);
                await _navigationService.NavigateAsync("PokemonRegionView", navigationParams);
            });

            PasteToken = new Command(async(obj) =>
            {
                var navigationParams = new NavigationParameters();
                navigationParams.Add("regionName", Title);
                await _navigationService.NavigateAsync("AddGroupCopiedView", navigationParams);
            });

            CopyGroup = new Command(async(obj) =>
            {
                if (obj != null)
                {
                    var token = (string)obj;
                    await Clipboard.SetTextAsync(token);
                    Vibration.Vibrate(10);
                    UserDialogs.Instance.Toast("Group's token copied to clipboard.", new TimeSpan(0, 0, 6));
                }
                else
                {
                    UserDialogs.Instance.Toast("There is a problem to get group's token.", new TimeSpan(0, 0, 6));
                }
            });

            #endregion
        }
        public AddGroupCopiedViewModel(INavigationService navigationService, IGruposRegionRepository gruposRegionRepository)
            : base(navigationService)
        {
            _navigationService      = navigationService;
            _gruposRegionRepository = gruposRegionRepository;

            #region MyRegion

            SendToken = new Command(async() =>
            {
                UserDialogs.Instance.ShowLoading(null, MaskType.Clear);

                if (string.IsNullOrEmpty(Token))
                {
                    UserDialogs.Instance.HideLoading();
                    await App.Current.MainPage.DisplayAlert("Error",
                                                            "You must add a group's token", "ok");
                    return;
                }


                if (!(await _gruposRegionRepository.ItExist(Token, await SecureStorage.GetAsync("UserId"), Region)))
                {
                    UserDialogs.Instance.HideLoading();
                    await App.Current.MainPage.DisplayAlert("Error",
                                                            "You can't add this group. The Group's owner could have removed it", "ok");
                    return;
                }

                if (await _gruposRegionRepository.IsMyGroup(Token, await SecureStorage.GetAsync("UserId"), Region))
                {
                    UserDialogs.Instance.HideLoading();
                    await App.Current.MainPage.DisplayAlert("Error",
                                                            "You can't add a group that belongs you", "ok");
                    return;
                }

                if (!(await _gruposRegionRepository.IsSameRegion(Token, await SecureStorage.GetAsync("UserId"), Region)))
                {
                    UserDialogs.Instance.HideLoading();
                    await App.Current.MainPage.DisplayAlert("Error",
                                                            "You can't add a group that belongs to another region", "ok");
                    return;
                }



                var result = await _gruposRegionRepository.SaveGroupByToken(Token, await SecureStorage.GetAsync("UserId"), Region);

                if (result)
                {
                    UserDialogs.Instance.HideLoading();
                    await App.Current.MainPage.DisplayAlert("Success",
                                                            "This group was created successfully", "ok");

                    var navigationParams = new NavigationParameters();
                    navigationParams.Add("regionName", Region);
                    await _navigationService.GoBackAsync(navigationParams);
                }
                else
                {
                    UserDialogs.Instance.HideLoading();
                    return;
                }
            });
            #endregion
        }
Example #5
0
        public PokemonRegionViewModel(INavigationService navigationService, IAPIService apiService, IGruposRegionRepository gruposRegionRepository,
                                      IGrupoPokemonsRepository grupoPokemonsRepository)
            : base(navigationService)
        {
            _apiService              = apiService;
            _navigationService       = navigationService;
            _gruposRegionRepository  = gruposRegionRepository;
            _grupoPokemonsRepository = grupoPokemonsRepository;

            #region Commands Logic

            CancelCreation = new Command(async() =>
            {
                await _navigationService.GoBackAsync();
            });

            SaveGroup = new Command(async() =>
            {
                try
                {
                    UserDialogs.Instance.ShowLoading(null, MaskType.None);


                    //validate pokemons number
                    if (PokemonsCounter < 3 || PokemonsCounter > 6)
                    {
                        UserDialogs.Instance.HideLoading();

                        await App.Current.MainPage.DisplayAlert("Error",
                                                                "You must add at min. 3 pokemons or max. 6 pokemons", "ok");
                        return;
                    }

                    var result1 = false;
                    var result2 = false;
                    if (CrossConnectivity.Current.IsConnected)
                    {
                        if (IsCreate)
                        {
                            //Create Group group first
                            var group = new GruposRegion
                            {
                                GrupoId            = await _gruposRegionRepository.GetLastID() + 1,
                                GrupoName          = GroupName,
                                GrupoTipo          = GroupType,
                                PokedexDescription = PokedexDescription,
                                Image         = "",
                                Region        = PokedexInfo.FirstOrDefault().name,
                                UserId        = await SecureStorage.GetAsync("UserId"),
                                Token         = Convert.ToBase64String(Guid.NewGuid().ToByteArray()),
                                GrupoIdFather = null
                            };

                            result1 = await _gruposRegionRepository.SaveData(group);

                            if (result1)
                            {
                                //then we add pokemons related
                                var data = PokemonList.Where(x => x.IsSelected).Select(x =>
                                                                                       new GrupoPokemons
                                {
                                    GroupId = group.GrupoId,
                                    Pokemon = x.name
                                });

                                result2 = await _grupoPokemonsRepository.SaveDataRange(data);
                            }

                            if (result1 && result2)
                            {
                                await App.Current.MainPage.DisplayAlert("Success",
                                                                        "Your group was created successfully", "ok");

                                var navigationParams = new NavigationParameters();
                                navigationParams.Add("RegionName", group.Region);
                                await navigationService.GoBackAsync(navigationParams);
                            }
                            else
                            {
                                UserDialogs.Instance.HideLoading();

                                ErrorAlert();
                                await navigationService.GoBackAsync();
                            }
                        }
                        else
                        {
                            GruposRegion.GrupoName          = GroupName;
                            GruposRegion.GrupoTipo          = GroupType;
                            GruposRegion.PokedexDescription = PokedexDescription;

                            result1 = await _gruposRegionRepository.UpdateData(GruposRegion);

                            if (result1)
                            {
                                //then we add pokemons related and delete pokemons non related

                                var oldValues = (await _grupoPokemonsRepository.GetDataByGrupoId(GruposRegion.GrupoId)).ToList();

                                var data = PokemonList.Where(x => x.IsSelected).Select(x =>
                                                                                       new GrupoPokemons
                                {
                                    GroupId = GruposRegion.GrupoId,
                                    Pokemon = x.name
                                });

                                //if old data does not appear, it means it was no unselected
                                foreach (var item in oldValues)
                                {
                                    if (!data.Select(x => x.Pokemon).Contains(item.Pokemon))
                                    {
                                        await _grupoPokemonsRepository.DeleteData(item.Id, string.Empty, string.Empty);
                                    }
                                }

                                //if new data does not appear, it means it must be added

                                foreach (var item in data)
                                {
                                    if (!oldValues.Select(x => x.Pokemon).Contains(item.Pokemon))
                                    {
                                        item.Id = await _gruposRegionRepository.GetLastID() + 1;
                                        await _grupoPokemonsRepository.SaveData(item);
                                    }
                                }

                                result2 = true;
                            }

                            if (result1 && result2)
                            {
                                UserDialogs.Instance.HideLoading();

                                await App.Current.MainPage.DisplayAlert("Success",
                                                                        "Your group was modified successfully", "ok");

                                var navigationParams = new NavigationParameters();
                                navigationParams.Add("GrupoId", GruposRegion.GrupoId);
                                await navigationService.GoBackAsync(navigationParams);
                            }
                            else
                            {
                                UserDialogs.Instance.HideLoading();

                                ErrorAlert();
                                await navigationService.GoBackAsync();
                            }
                        }
                    }
                    else
                    {
                        NoInternetAlert();
                    }
                }
                catch (Exception ex)
                {
                    ErrorAlert();
                    await navigationService.GoBackAsync();
                }
            });
            #endregion
        }