private void AddMessageCommandExecute() { List <MessageDevice> lMessagesTemp = new List <MessageDevice>(lMessages); if (Size != null && Size.Equals("0")) { Application.Current.MainPage.DisplayAlert("Atención", "El tamaño debe ser mayor que 0", "Aceptar"); } else if (String.IsNullOrEmpty(Name) || String.IsNullOrEmpty(Size)) { Application.Current.MainPage.DisplayAlert("Atención", "Debe rellenar los campos obligatorios", "Aceptar"); } else if (!Modify && lMessagesTemp.Find(m => m.Name.Equals(Name)) != null) { Application.Current.MainPage.DisplayAlert("Atención", "Ya existe un mensaje con el mismo nombre", "Aceptar"); } else { if (message == null) { FieldsTemp.RemoveAll(f => f.Bytes == 0); message = new MessageDevice(); message.Name = Name; message.Fields = FieldsTemp; FieldsTemp = new List <FieldMessage>(); lMessages.Add(message); } else { foreach (MessageDevice m in lMessages) { if (m.Name.Equals(message.Name)) { message.Fields.RemoveAll(f => f.Bytes == 0); m.Name = message.Name; m.Fields = message.Fields; } } } Name = ""; Size = ""; message = null; } }
private void DeleteCommandExecute(MessageDevice message) { lMessages.Remove(message); }
private async void ExportCommandExecute(SessionModel session) { using (ExcelEngine excelEngine = new ExcelEngine()) { Loading = true; //await Task.Delay(200); await Task.Run(() => { List <SessionInit> lSessionInit = App.Database.GetSessionInit(session.ID); if (lSessionInit == null || lSessionInit.Count == 0) { Loading = false; Device.BeginInvokeOnMainThread(async() => { Application.Current.MainPage.DisplayAlert("No hay datos", "La sesión no se puede exportar, aún no contiene datos", "Aceptar"); }); } else { //Set the default application version as Excel 2013. excelEngine.Excel.DefaultVersion = ExcelVersion.Excel2013; //Create a workbook with a worksheet IWorkbook workbook = excelEngine.Excel.Workbooks.Create(lSessionInit.Count); IStyle headerStyle = workbook.Styles.Add("HeaderStyle"); headerStyle.BeginUpdate(); headerStyle.Color = Syncfusion.Drawing.Color.FromArgb(29, 161, 242); headerStyle.Font.Color = Syncfusion.XlsIO.ExcelKnownColors.White; headerStyle.Font.Bold = true; headerStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; headerStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; headerStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; headerStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; headerStyle.EndUpdate(); IStyle bodyStyle = workbook.Styles.Add("BodyStyle"); bodyStyle.BeginUpdate(); bodyStyle.Color = Syncfusion.Drawing.Color.White; bodyStyle.Borders[ExcelBordersIndex.EdgeLeft].LineStyle = ExcelLineStyle.Thin; bodyStyle.Borders[ExcelBordersIndex.EdgeRight].LineStyle = ExcelLineStyle.Thin; bodyStyle.Borders[ExcelBordersIndex.EdgeTop].LineStyle = ExcelLineStyle.Thin; bodyStyle.Borders[ExcelBordersIndex.EdgeBottom].LineStyle = ExcelLineStyle.Thin; bodyStyle.EndUpdate(); //Access first worksheet from the workbook instance. ActivityModel activity = Json.GetActivityByName(session.ActivityName); int cont = 0; foreach (SessionInit sessionInit in lSessionInit) { IWorksheet worksheet = workbook.Worksheets[cont]; //Adding text to a cell worksheet[1, 1].Value = "Sesión"; worksheet[2, 1].Value = "Actividad"; worksheet[3, 1].Value = "Fecha"; worksheet[4, 1].Value = "Duración"; worksheet[5, 1].Value = "Profesional"; worksheet[6, 1].Value = "Alumno"; UserModel user = App.Database.GetUser(App.Database.GetSession(sessionInit.SessionId).UserID); worksheet[1, 2].Value = session.Name; worksheet[2, 2].Value = session.ActivityName; worksheet[3, 2].Text = sessionInit.Date.ToString("dd/MM/yyyy HH:mm:ss"); worksheet[4, 2].Text = sessionInit.Time; worksheet[5, 2].Value = user.UserName; worksheet[6, 2].Value = sessionInit.StudentCode; worksheet.Name = cont.ToString() + " - " + sessionInit.StudentCode; worksheet[1, 1].CellStyle = headerStyle; worksheet[2, 1].CellStyle = headerStyle; worksheet[3, 1].CellStyle = headerStyle; worksheet[4, 1].CellStyle = headerStyle; worksheet[5, 1].CellStyle = headerStyle; worksheet[6, 1].CellStyle = headerStyle; int column = 1; foreach (MessageDevice message in activity.Messages) { foreach (FieldMessage field in message.Fields) { worksheet[9, column].Value = field.Description; worksheet[9, column].CellStyle = headerStyle; column++; } } Dictionary <MessageDevice, int> messagesColumns = new Dictionary <MessageDevice, int>(); int calculateColumn = 1; foreach (MessageDevice message in activity.Messages) { messagesColumns.Add(message, calculateColumn); calculateColumn += message.Fields.Count(); } List <SessionData> sessionsData = App.Database.GetSessionData(sessionInit.ID); int row = 10; column = 1; int numByte = 0; for (int j = 0; j < sessionsData.Count; j++) { MessageDevice messageType1 = activity.Messages.Find(m => m.Fields.Sum(f => f.Bytes) == sessionsData[j].Data.Length); if (messageType1 == null) { int size = Convert.ToInt32(string.Concat(sessionsData[j].Data[3].ToString("X2")), 16) + 4; SessionData sessionDataComplementary = sessionsData.Find(s => s.Data.Length + sessionsData[j].Data.Length == size && s.DeviceName.Equals(sessionsData[j].DeviceName)); byte[] messageTemp = null; if (sessionDataComplementary != null) { messageTemp = new byte[sessionsData[j].Data.Length + sessionDataComplementary.Data.Length]; Array.Copy(sessionsData[j].Data, 0, messageTemp, 0, sessionsData[j].Data.Length); Array.Copy(sessionDataComplementary.Data, 0, messageTemp, sessionsData[j].Data.Length, sessionDataComplementary.Data.Length); messageType1 = activity.Messages.Find(m => m.Fields.Sum(f => f.Bytes) == messageTemp.Length); } if (messageType1 != null) { column = messagesColumns[messageType1]; numByte = 0; foreach (FieldMessage field in messageType1.Fields) { string m = Convert.ToInt32(string.Concat(messageTemp.Skip(numByte).Take(field.Bytes).ToArray().Select(b => b.ToString("X2"))), 16).ToString(); if (field.Format != null && field.Format.Equals("ms")) { double millis = Convert.ToDouble(m); worksheet[row, column].NumberFormat = "###,###,##0.0#########"; worksheet[row, column].Number = millis / 1000.0;; } else { worksheet[row, column].Text = m; } worksheet[row, column].CellStyle.HorizontalAlignment = ExcelHAlign.HAlignRight; column++; numByte += field.Bytes; } row++; } } else { column = messagesColumns[messageType1]; numByte = 0; foreach (FieldMessage field in messageType1.Fields) { string m = Convert.ToInt32(string.Concat(sessionsData[j].Data.Skip(numByte).Take(field.Bytes).ToArray().Select(b => b.ToString("X2"))), 16).ToString(); worksheet[row, column].Value = m; column++; numByte += field.Bytes; } row++; } } worksheet.UsedRange.AutofitColumns(); cont++; } MemoryStream stream = new MemoryStream(); workbook.SaveAs(stream); workbook.Close(); string filepath = DependencyService.Get <ISave>().Save("SmartGames_" + session.Name.Replace(" ", "") + ".xlsx", "application/msexcel", stream); Mail mail = new Mail(filepath, User); } }); Loading = false; } }