private async Task CustomQueryCommandEvent() { tapCount++; if (tapCount <= 6) { return; } tapCount = 0; string query = await BaseContent.DisplayPromptAsync("Query Data", "Query Database for custom operation", "Apply", "Cancel", "Query"); if (!string.IsNullOrEmpty(query)) { try { bool resilt = await App.Database.CustomQueryAsync(query); UserDialogs.Instance.Toast("Query Successful"); } catch (Exception ex) { await BaseContent.DisplayAlert("Query Error", ex.Message, "Ok"); } } }
private async Task ExportDatabaseCommandEvent() { try { if (!Validate()) { return; } if (BaseContent.Title.ToLower() == "filter") { //FilteredRecords = await GetFilteredItems(); await BaseContent.Navigation.PopAsync(); } else { string filename = await BaseContent.DisplayPromptAsync("Report Name", "Enter Report name to save with", "Save", "Cancel", "Report Name"); if (string.IsNullOrEmpty(filename)) { if (filename != null) { UserDialogs.Instance.Toast("Please enter valid report name"); } return; } bool permissionGranted = await AskForPermission(new Permissions.StorageWrite()); if (permissionGranted) { string downloadPath = DependencyService.Get <IFileHelper>().GetLocalFilePath(filename.Trim() + ".csv"); if (!string.IsNullOrEmpty(downloadPath)) { IEnumerable <InterruptionDbModel> data = await GetFilteredItems(); double totalMinutes = 0; List <InterruptionReportModel> items = new List <InterruptionReportModel>(); foreach (var item in data) { double timeDifference = item.ReportTimeTo.TotalMinutes - item.ReportTimeFrom.TotalMinutes; if (timeDifference < 0) { timeDifference = (60 * 24) + timeDifference; } TimeSpan workMin = TimeSpan.FromMinutes(timeDifference); string workHours = workMin.ToString(@"hh\:mm"); InterruptionReportModel interruptionReport = new InterruptionReportModel() { Comment = item.Comment, Feeder = item.Feeder, InterruprionType = item.InterruprionType, ReportedDate = DateTime.Parse(item.ReportedDate).ToString("dd/MM/yyyy"), ReportTimeFrom = item.ReportTimeFrom.ToString(), ReportTimeTo = item.ReportTimeTo.ToString(), SubDivision = item.SubDivision, SubStation = item.SubStation, Hours = workHours, }; totalMinutes += timeDifference; items.Add(interruptionReport); } TimeSpan totalWorkMin = TimeSpan.FromMinutes(totalMinutes); string totalWorkHours = totalWorkMin.ToString(@"hh\:mm"); InterruptionReportModel totalHoursInterruption = new InterruptionReportModel() { Hours = totalWorkHours, }; items.Add(totalHoursInterruption); string jsonData = JsonConvert.SerializeObject(items); if (!string.IsNullOrEmpty(jsonData)) { XmlNode xml = JsonConvert.DeserializeXmlNode("{records:{record:" + jsonData + "}}"); XmlDocument xmldoc = new XmlDocument(); //Create XmlDoc Object xmldoc.LoadXml(xml.InnerXml); //Create XML Steam var xmlReader = new XmlNodeReader(xmldoc); DataSet dataSet = new DataSet(); //Load Dataset with Xml dataSet.ReadXml(xmlReader); //return single table inside of dataset string csv = ToCSV(dataSet.Tables[0]); if (!string.IsNullOrEmpty(csv)) { SaveDataToDownloadFolder(downloadPath, csv); UserDialogs.Instance.Toast("Database saved to your download folder."); } else { await BaseContent.DisplayAlert("Export Database", "Unable to save data to storage.", "Ok"); } } else { await BaseContent.DisplayAlert("Export Database", "Unable to prepare report.", "Ok"); } } else { await BaseContent.DisplayAlert("Export Database", "Download path is invalid.", "Ok"); } } else { await BaseContent.DisplayAlert("Export Database", "Allow permission to store data, you can chance permissions from settings anytime", "Ok"); } } } catch (Exception ex) { await BaseContent.DisplayAlert("Prepare Records", ex.Message, "Ok"); } }