Ejemplo n.º 1
0
        private async void SaveSale()
        {
            TimeSpan duration = new TimeSpan(0, 0, 3);

            if (IsSaleValid())
            {
                await NavigationHelper.ShowLoading();

                if (!_isEditSale)
                {
                    CanExecuteInitial();
                    try
                    {
                        var user = await CacheAccess.GetSecure <User>(CacheKeys.USER_KEY);

                        var userGuid = user.UsuarioId;

                        Analytics.TrackEvent(InsightsTypeEvents.ActionView, new Dictionary <string, string>
                        {
                            { InsightsPagesNames.RegisterSalePage, InsightsActionNames.SaveSale }
                        });

                        await _salesAppService.InsertNewSale(new InsertNewSaleRequest
                        {
                            UsuarioId        = userGuid,
                            UserName         = user.Name,
                            ClienteId        = SaleRegistered.ClienteId,
                            ClientName       = SaleRegistered.ClientName,
                            NumberSoldPieces = SaleRegistered.NumberSoldPieces,
                            SaleDate         = DateTime.Now,
                            SalePaidValue    = SaleRegistered.SalePaidValue,
                            SaleValue        = SaleRegistered.SaleValue,
                            Description      = SaleRegistered.Description
                        });

                        var userSales = await SaveNewSaleInCache();

                        float salesValue        = 0;
                        int   salesCount        = 0;
                        int   salesNumberPieces = 0;
                        foreach (var sale in userSales.Sales)
                        {
                            salesValue        += sale.SaleValue;
                            salesNumberPieces += sale.NumberSoldPieces;
                            salesCount++;
                        }
                        int AverageTicketPoints = (int)salesValue / salesCount;
                        int AverageItensPerSale = salesNumberPieces / salesCount;

                        GetGamificationPointsResponse currentPoints = new GetGamificationPointsResponse();
                        try
                        {
                            currentPoints.Entity = await CacheAccess.GetSecure <Points>(CacheKeys.POINTS);
                        }
                        catch
                        {
                            currentPoints = await _gamificationPointsAppService.GetCurrentGamificationPoints();

                            await CacheAccess.InsertSecure <Points>(CacheKeys.POINTS, currentPoints.Entity);
                        }
                        user.AverageItensPerSalePoints = AverageItensPerSale;
                        user.AverageTicketPoints      += AverageTicketPoints;
                        user.SalesNumberPoints        += (int)currentPoints.Entity.SalesNumber;

                        await _userAppService.UpdateUserPoints(new UpdateUserPointsRequest()
                        {
                            UsuarioId = userGuid,
                            AverageItensPerSalePoints = user.AverageItensPerSalePoints,
                            AverageTicketPoints       = user.AverageTicketPoints,
                            RegisterClientsPoints     = user.RegisterClientsPoints,
                            InviteAllyFlowersPoints   = user.InviteAllyFlowersPoints,
                            SalesNumberPoints         = user.SalesNumberPoints
                        });

                        await CacheAccess.InsertSecure <User>(CacheKeys.USER_KEY, user);
                        await GetParametersForChallenge();

                        if (!_hasWonTrophy)
                        {
                            UserDialogs.Instance.Toast("Parabéns! Você ganhou " + currentPoints.Entity.SalesNumber + " Sementes com essa Venda!", duration);
                        }
                        await _navigationService.NavigateAsync(NavigationSettings.MenuPrincipal);
                    }
                    catch
                    {
                        _userDialogs.Toast("Não foi possível registrar sua venda");
                    }
                    finally
                    {
                        CanExecuteEnd();
                        await NavigationHelper.PopLoading();
                    }
                }
                else
                {
                    try
                    {
                        await _salesAppService.UpdateSale(SaleRegistered.VendaId.ToString(), SaleRegistered.SaleValue, SaleRegistered.SalePaidValue, SaleRegistered.NumberSoldPieces, SaleRegistered.Description);

                        var userSales = await SaveNewSaleInCache();

                        _userDialogs.Toast("Venda Editada com sucesso!");
                    }
                    catch
                    {
                        _userDialogs.Toast("Não foi possível editar sua venda!");
                    }
                    finally
                    {
                        await NavigationHelper.PopLoading();

                        await _navigationService.GoBackAsync();
                    }
                }
            }
            else
            {
                _userDialogs.Toast("Faltam Dados para preencher!", duration);
            }
        }