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); }
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}®ion={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>()); }
public RankingsUpdateRequestEventArgs(Period period, SalesAreaHierarchy salesArea) { Period = period; SalesArea = salesArea; }
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}®ion={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>()); }