public async Task AddOrUpdateItem (ChartCacheItem item)
		{
			var db = GetAsyncConnection ();

			var existItem =await db.FindAsync<ChartCacheItem> (m => item.QueryString== m.QueryString).ConfigureAwait (false);

			if (existItem == null) {
				await db.InsertAsync (item).ConfigureAwait (false);
			} else {
				existItem.Created = DateTime.UtcNow;
				existItem.JsonData = item.JsonData;
				existItem.QueryString = item.QueryString;
				await db.UpdateAsync (existItem).ConfigureAwait (false);
			}
		}
		public async Task LoadData (string itemCode, DateTime date, string itemName)
		{
			_firstSeries.ItemsSource = null;
			_secondSeries.ItemsSource = null;
			_thirdSeries.ItemsSource = null;
			_maxSeries.ItemsSource = null;

			_lastItemCode = itemCode;
			_lastDate = date;
			_lastItemName = itemName;

			_chart.Title.Text = itemName;

			var queryString = WebAccessTestDataHelper.GetChartParameterString (date, itemCode);
			var shortQueryString = WebAccessTestDataHelper.GetChartShortParameterString (date, itemCode);

			string jsonString = "";
			ChartCacheItem cacheItem = null;

			if (CrossConnectivity.Current.IsConnected) {
				jsonString = await WebAccessTestDataHelper.GetChartData (queryString);
				if (!string.IsNullOrEmpty (jsonString)) {
					cacheItem = new ChartCacheItem () {
						Created = DateTime.UtcNow,
						JsonData = jsonString,
						QueryString = shortQueryString
					};
					await _repository.AddOrUpdateItem (cacheItem);
				}
			} else {
				cacheItem = await _repository.GetChartCacheItemByQueryString (shortQueryString);
				if (cacheItem != null) {
					jsonString = cacheItem.JsonData;
					await App.ShowNotification ("Отсутствует интернет соединение", "Данные получены из кеша");
				}
			}


			if (jsonString != null) {
				var data = JsonConvert.DeserializeObject<ChartSeriesModel[]> (jsonString);

				if (data != null && data.Any ()) {

					var daysCount = data.First ().data.Count;

					var minimumValues = new List<double> (daysCount);
					var maximumValues = new List<double> (daysCount);
					var itemsForFakeSeries = new List<ChartDataPoint> (daysCount);

					for (int i = 0; i < data.Count (); i++) {
						var dataSeries = data.ElementAt (i);

						var tempItems = new List<ChartDataPoint> ();

						if (dataSeries.data.Any ()) {
							foreach (var d in dataSeries.data) {
								var dataPoint = new ChartDataPoint () {
									Category = ((DateTime)d [0]).Day.ToString (),
									Value = double.Parse (d [1].ToString ())
								};

								tempItems.Add (dataPoint);

								var existPoint = itemsForFakeSeries.FirstOrDefault (x => x.Category == dataPoint.Category);
								if (existPoint == null) {
									itemsForFakeSeries.Add (new ChartDataPoint () {
										Category = dataPoint.Category
									});
								}
							}

							minimumValues.Add (tempItems.Min (x => x.Value));
							maximumValues.Add (tempItems.Max (x => x.Value));
						}

						var dataSeriesColor = Color.FromHex (dataSeries.color);

						switch (i) {
						case 0:
							MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () {
								SeriesNumber = 0,
								Color = dataSeriesColor
							});
							_firstSeries.Color = dataSeriesColor;
							_firstSeries.ItemsSource = tempItems;
							break;
						case 1:
							MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () {
								SeriesNumber = 1,
								Color = dataSeriesColor
							});
							_secondSeries.Color = dataSeriesColor;
							_secondSeries.ItemsSource = tempItems;
							break;
						case 2:
							MessagingCenter.Send (this, MessagingCenterKeys.UpdateSeriesColorKey, new ChartSeriesColorEventArgs () {
								SeriesNumber = 2,
								Color = dataSeriesColor
							});
							_thirdSeries.Color = dataSeriesColor;
							_thirdSeries.ItemsSource = tempItems;
							break;
						}
					}


					if (minimumValues.Any ()) {
						var minValue = minimumValues.Min () - 5;

						_secondaryAxis.Minimum = Math.Min (0, minValue);
					}

					if (maximumValues.Any ()) {
						var maxValue = maximumValues.Max () + 5;

						_secondaryAxis.Maximum = maxValue;

						foreach (var item in itemsForFakeSeries) {
							item.Value = maxValue;
						}

						_maxSeries.ItemsSource = itemsForFakeSeries;
					}
				}
			}
		}