public async Task <bool> SetAsync(List <TModel> items, Period period, SalesAreaHierarchy region)
        {
            if (items == null || items.Count == 0)
            {
                return(true);
            }

            List <TModel> forDeletion = await this.GetListByPeriodAndArea(period, region);

            await DataAccess.Instance.Connection.RunInTransactionAsync(
                async tran =>
            {
                DataAccess.Instance.StartTransaction(tran);
                foreach (TModel item in forDeletion)
                {
                    await DataAccess.Instance.DeleteAsync <TModel>(item.Id);
                }
                foreach (var item in items)
                {
                    await this.LocalController.SaveAsync(tran, item);
                }
            });

            DataAccess.Instance.CommitTransaction();
            return(true);
        }
Exemple #2
0
        public async Task <List <Row> > GetRankingRows(Period period, SalesAreaHierarchy region)
        {
            LocalRankingService <DsrRankInfo> localRanking = new LocalRankingService <DsrRankInfo>();
            List <DsrRankInfo> ranks = await localRanking.GetListByPeriodAndArea(period, region);

            List <Row> rows = new List <Row>();

            foreach (var rank in ranks)
            {
                var row = new Row
                {
                    IsSelected = rank.IsMe,
                    Items      = new List <string>()
                    {
                        rank.Rank.ToString(),
                         rank.Name,
                         rank.Sales.ToString()
                    }
                };

                rows.Add(row);
            }

            return(rows);
        }
        public async Task <DateTime> GetLastUpdateDateTimeAsync(Period period, SalesAreaHierarchy salesArea, CancellationToken cancellationToken)
        {
            if (period == default(Period) && salesArea == default(SalesAreaHierarchy))
            {
                this.Logger.Debug("Hmm... now ain't it strange both period and sales area aren't set?");
                return(default(DateTime));
            }

            string query = string.Format("Select * from DsrRankInfo where {0} {1} {2} order by strftime('%Y%m%d', datetime(\"{3}\",'localtime')) desc limit 0,1", period != default(Period) ? "period = '" + (int)period + "'" : string.Empty, (period != default(Period) || salesArea != default(SalesAreaHierarchy)) ? "and" : string.Empty, "Region = '" + (int)salesArea + "'", "DateUpdated");

            if (cancellationToken.IsCancellationRequested)
            {
                this.Logger.Debug("Cancelation was requested");
                return(default(DateTime).AddDays(1));
            }

            var latestStat = await this.RankingListController.SelectQueryAsync(query);

            this.Logger.Debug("Finished call to db to check latest record");
            if (latestStat == null || latestStat.Count == 0)
            {
                return(default(DateTime));
            }

            if (cancellationToken.IsCancellationRequested)
            {
                return(default(DateTime).AddDays(1));
            }

            return(latestStat.FirstOrDefault().Modified);
        }
        public async Task <List <TModel> > GetListByPeriodAndArea(Period period, SalesAreaHierarchy region)
        {
            CriteriaBuilder criteriaBuilder = new CriteriaBuilder();

            return(await LocalController.GetManyByCriteria(
                       criteriaBuilder
                       .Add("Period", (int)period)
                       .Add("Region", (int)region)));
        }
        public async Task <List <Row> > GetListAsync(Period period, SalesAreaHierarchy region)
        {
            string jsonString = string.Empty;

            try
            {
                string userId = Resolver.Instance.Get <ISalesAppSession>().UserId.ToString();

                string urlParams = string.Format("{0}?periodType={1}&region={2}", userId, (int)period, (int)region);

                ServerResponse <DsrRankingList> serverResponse = await this.RankingListApi.MakeGetCallAsync <DsrRankingList>(urlParams, filterFlags : ErrorFilterFlags.AllowEmptyResponses | ErrorFilterFlags.IgnoreNoInternetError);

                if (serverResponse == null)
                {
                    return(new List <Row>());
                }

                if (serverResponse.IsSuccessStatus)
                {
                    jsonString = serverResponse.RawResponse;
                    DsrRankingList rankingList = serverResponse.GetObject();
                    foreach (var rankInfo in rankingList.Dsrs)
                    {
                        rankInfo.TimeStamp = rankingList.TimeStamp;
                        rankInfo.Period    = period;
                        rankInfo.Region    = region;
                    }

                    await this.RankingService.SetAsync(rankingList.Dsrs, period, region);

                    return(await new RankingsRowService().GetRankingRows(period, region));
                }

                return(new List <Row>());
            }
            catch (JsonReaderException jsonReaderException)
            {
                this.HandleException(jsonReaderException, "Attempt to parse invalid JSON may have been made." + " JSON: " + jsonString);
            }
            catch (NotConnectedToInternetException notConnectedToInternetException)
            {
                this.HandleException(notConnectedToInternetException, "Unable to connect internet. Could connection have dropped?");
            }
            catch (TaskCanceledException taskCanceled)
            {
                this.HandleException(taskCanceled, "Timeout may have occured or task may have been explicitly canceled by user.");
            }
            catch (Exception exception)
            {
                this.HandleException(exception, string.Empty);
            }

            return(new List <Row>());
        }
Exemple #6
0
 public RankingsUpdateRequestEventArgs(Period period, SalesAreaHierarchy salesArea)
 {
     Period    = period;
     SalesArea = salesArea;
 }
Exemple #7
0
        public async Task <List <RankingSummarized> > GetSummarizedRankAsync(Period period, SalesAreaHierarchy region)
        {
            try
            {
                DateTime lastUpdate = await this.GetLastUpdateDateTimeAsync(new CancellationTokenSource().Token);

                int validityMinutes = Settings.Settings.Instance.RankingSummarizedValidityMinutes;
                if (lastUpdate > default(DateTime))
                {
                    if (lastUpdate.AddMinutes(validityMinutes) > DateTime.Now)
                    {
                        return(new List <RankingSummarized>());
                    }
                }

                string userId = Resolver.Instance.Get <ISalesAppSession>().UserId.ToString();

                string urlParams = string.Format("{0}?periodType={1}&region={2}", userId, (int)period, (int)region);

                ServerResponse <List <RankingSummarized> > serverResponse = await this.SummarizedRanksApi.MakeGetCallAsync <List <RankingSummarized> >(urlParams, filterFlags : ErrorFilterFlags.AllowEmptyResponses | ErrorFilterFlags.IgnoreNoInternetError);

                if (serverResponse == null)
                {
                    return(new List <RankingSummarized>());
                }

                if (serverResponse.IsSuccessStatus)
                {
                    var result = serverResponse.GetObject();
                    await this.LocalDsrRanking.SetAsync(result);

                    return(result);
                }

                return(new List <RankingSummarized>());
            }
            catch (JsonReaderException jsonReaderException)
            {
                this.Logger.Error(jsonReaderException);
            }
            catch (NotConnectedToInternetException nctiex)
            {
                this.Logger.Error(nctiex);
            }
            catch (TaskCanceledException taskCanceled)
            {
                this.Logger.Error(taskCanceled);
            }
            catch (Exception exception)
            {
                this.Logger.Error(exception);
            }

            return(new List <RankingSummarized>());
        }