public FileResult CsvExport(string asset = "", int dateKey = 20130228)
        {
            MemoryStream memStream = new MemoryStream();
            StreamWriter writer    = new StreamWriter(memStream);

            if (!String.IsNullOrEmpty(asset))
            {
                DeviceModel device = RepositoryFactory.Instance.DeviceDb.GetDevice(asset);
                if (device != null)
                {
                    List <string> keys = device.GetOrderFieldName();
                    WriteCsvCell(writer, "Date");
                    WriteCsvCell(writer, "Recorded_at");
                    WriteCsvCell(writer, "Longitude");
                    WriteCsvCell(writer, "Latitude");
                    foreach (string key in keys)
                    {
                        WriteCsvCell(writer, key);
                    }
                    DateTime             date   = DateTime.ParseExact(dateKey.ToString(), "yyyyMMdd", null);
                    List <TrackingModel> tracks = RepositoryFactory.Instance.DataTrackingDB.GetData(device, date).OrderByDescending(x => x.Data.Recorded_at).ToList();
                    writer.WriteLine();
                    for (int i = 0; i < tracks.Count; i++)
                    {
                        TrackingModel t = tracks[i];
                        WriteCsvCell(writer, t.Data.Recorded_at.ToString("yyyy/MM/dd"));
                        WriteCsvCell(writer, t.Data.Recorded_at.ToString("HH:mm:ss"));
                        WriteCsvCell(writer, t.Data.Longitude.ToString(System.Globalization.CultureInfo.InvariantCulture));
                        WriteCsvCell(writer, t.Data.Latitude.ToString(System.Globalization.CultureInfo.InvariantCulture));
                        foreach (string key in keys)
                        {
                            WriteCsvCell(writer, t.GetDisplayDataFor(key, (i < tracks.Count - 1 ? tracks[i + 1].Data.fields : null)));
                        }
                        writer.WriteLine();
                    }
                }
            }
            writer.Flush();
            memStream.Seek(0, SeekOrigin.Begin);
            FileStreamResult file = new FileStreamResult(memStream, "text/csv");

            file.FileDownloadName = String.Format("export_tracking_{0}_{1}.csv", asset, dateKey);
            return(file);
        }
        //
        // GET: /Tracking/

        public ActionResult Index(string asset = "", int year = 2013, int month = 2, int day = 28)
        {
            List <TrackingModel> tracks = new List <TrackingModel>();

            ViewBag.Imei   = "";
            ViewBag.Fields = new Dictionary <string, MD.CloudConnect.Data.Field>();
            ViewBag.Date   = DateTime.MinValue;

            if (!String.IsNullOrEmpty(asset))
            {
                DateTime    date   = new DateTime(year, month, day);
                DeviceModel device = RepositoryFactory.Instance.DeviceDb.GetDevice(asset);
                if (device != null)
                {
                    ViewBag.Imei    = device.Imei;
                    tracks          = RepositoryFactory.Instance.DataTrackingDB.GetData(device, date).OrderByDescending(x => x.Data.Recorded_at).ToList();
                    ViewBag.DateKey = date.GenerateKey();
                    ViewBag.Date    = date;
                    ViewBag.Fields  = device.GetOrderFieldName();
                }
            }

            return(View(tracks));
        }
        public ContentResult LoadData(string asset, int year, int month, int day)
        {
            List <JsonTrackingModel> result = new List <JsonTrackingModel>();

            if (!String.IsNullOrEmpty(asset))
            {
                DateTime    date   = new DateTime(year, month, day);
                DeviceModel device = RepositoryFactory.Instance.DeviceDb.GetDevice(asset);
                if (device != null)
                {
                    ViewBag.Imei = device.Imei;
                    List <TrackingModel> tracks = RepositoryFactory.Instance.DataTrackingDB.GetData(device, date).OrderBy(x => x.Data.Recorded_at).ToList();
                    List <string>        keys   = device.GetOrderFieldName();

                    JsonTrackingModel jtrack = null;

                    //for (int i = 0; i < tracks.Count; i++)
                    //{
                    //    TrackingModel t = tracks[i];
                    //    WriteCsvCell(writer, t.Data.Recorded_at.ToString("HH:mm:ss"));
                    //    WriteCsvCell(writer, t.Data.Longitude.ToString(System.Globalization.CultureInfo.InvariantCulture));
                    //    WriteCsvCell(writer, t.Data.Latitude.ToString(System.Globalization.CultureInfo.InvariantCulture));
                    //    foreach (string key in keys)
                    //    {
                    //        WriteCsvCell(writer, t.GetDisplayDataFor(key, (i < tracks.Count - 1 ? tracks[i + 1].Data.fields : null)));
                    //    }
                    //    writer.WriteLine();
                    //}

                    for (int i = 0; i < tracks.Count; i++)
                    {
                        TrackingModel t = tracks[i];
                        jtrack = new JsonTrackingModel()
                        {
                            Id          = i,
                            Latitude    = t.Data.Latitude,
                            Longitude   = t.Data.Longitude,
                            Recorded_at = t.Data.Recorded_at.ToString("HH:mm:ss.fff"),
                            Received_at = t.Data.Received_at.ToString("dd/MM/yyyy HH:mm:ss"),
                            Fields      = new List <JsonFieldModel>()
                        };

                        foreach (string key in keys)
                        {
                            jtrack.Fields.Add(new JsonFieldModel()
                            {
                                Key         = key,
                                DisplayName = t.GetDisplayNameField(key),
                                Value       = t.GetDisplayDataFor(key, (i > 0 ? tracks[i - 1].Data.fields : null))
                            });
                        }

                        result.Add(jtrack);
                    }
                }
            }

            return(new ContentResult()
            {
                Content = JsonConvert.SerializeObject(result, Formatting.None),
                ContentType = "application/json"
            });
        }