forked from MDCPS/DamageAssessment_Backend
		
	Revert "Merged PR 53: fixed survey put issue, and added export excel in responses
fixed survey put issue, amd added export excel in responses"
This commit is contained in:
		| @ -1,57 +0,0 @@ | ||||
| using ClosedXML.Excel; | ||||
| using DamageAssesment.Api.Responses.Interfaces; | ||||
| using DamageAssesment.Api.Responses.Models; | ||||
| using OfficeOpenXml; | ||||
| using System.Collections.Generic; | ||||
|  | ||||
| namespace DamageAssesment.Api.Responses.Providers | ||||
| { | ||||
|     public class ExcelExportService: IExcelExportService | ||||
|     { | ||||
|         public byte[] ExportToExcel<T1>(List<object> responses) | ||||
|         {  | ||||
|             ExcelPackage.LicenseContext = LicenseContext.NonCommercial; | ||||
|             using (var package = new ExcelPackage()) | ||||
|             { | ||||
|                 // Create the first worksheet and populate it with responses | ||||
|                 var workSheet1 = package.Workbook.Worksheets.Add("responses"); | ||||
|                 PopulateWorksheet(workSheet1, responses); | ||||
|                 return package.GetAsByteArray(); | ||||
|             } | ||||
|         } | ||||
|         private void PopulateWorksheet(ExcelWorksheet worksheet, List<object> data) | ||||
|         { | ||||
|             if (data.Count > 0) | ||||
|             { | ||||
|                 var properties = data[0].GetType().GetProperties(); | ||||
|                 List<int> IsAttchments = new List<int>(); | ||||
|                 // Add column headers | ||||
|                 for (int col = 1; col <= properties.Length; col++) | ||||
|                 { | ||||
|                     worksheet.Cells[1, col].Value = properties[col - 1].Name; | ||||
|                     if(properties[col - 1].Name.ToLower().Contains("attachment")) | ||||
|                         IsAttchments.Add(col); | ||||
|                 } | ||||
|  | ||||
|                 // Add data | ||||
|                 for (int row = 2; row <= data.Count + 1; row++) | ||||
|                 { | ||||
|                     for (int col = 1; col <= properties.Length; col++) | ||||
|                     { | ||||
|                         string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2])); | ||||
|                         if (IsAttchments.Where(a => a == col).Count()>0&& !string.IsNullOrEmpty(value)) | ||||
|                         { | ||||
|                             List<string> attachments = value.Split("##").ToList(); | ||||
|                             Uri linkUri = new Uri(attachments[1]); | ||||
|                             worksheet.Cells[row, col].Hyperlink = linkUri; | ||||
|                             worksheet.Cells[row, col].Value = attachments[0]; | ||||
|                             worksheet.Cells[row, col].Style.Font.UnderLine = true; | ||||
|                         } | ||||
|                         else | ||||
|                             worksheet.Cells[row, col].Value = value; | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -3,9 +3,6 @@ using DamageAssesment.Api.Responses.Db; | ||||
| using DamageAssesment.Api.Responses.Interfaces; | ||||
| using DamageAssesment.Api.Responses.Models; | ||||
| using Microsoft.EntityFrameworkCore; | ||||
| using Microsoft.EntityFrameworkCore.Metadata.Internal; | ||||
| using System.Reflection; | ||||
| using System.Text.Json; | ||||
|  | ||||
| namespace DamageAssesment.Api.Responses.Providers | ||||
| { | ||||
| @ -46,6 +43,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 // Create and save SurveyResponse records with references to existing Employee and Location records | ||||
|                 surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { SurveyId = 1, EmployeeId = 1, LocationId = 1, ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); | ||||
|                 surveyResponseDbContext.SurveyResponses.Add(new Db.SurveyResponse { SurveyId = 1, EmployeeId = 2, LocationId = 2, ClientDevice = "Mobile", Latitude = 98.8767, Longitute = -129.9897, KeyAnswerResult = "true", CreatedDate = DateTime.Now }); | ||||
|  | ||||
|                 surveyResponseDbContext.SaveChanges(); | ||||
|             } | ||||
|         } | ||||
| @ -309,26 +307,6 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(string language,bool isadmin) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 var responses = await getAllSurveyResponsesExcelAsync(language, isadmin); | ||||
|  | ||||
|                 if (responses != null) | ||||
|                     return (true, responses, "Request Successful."); | ||||
|                 else | ||||
|                 { | ||||
|                     responses = null; | ||||
|                     return (true, responses, "Empty object returned"); | ||||
|                 } | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError(ex.ToString()); | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyResponseAsync(Models.SurveyResponse surveyResponse) | ||||
|         { | ||||
| @ -509,7 +487,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|             { | ||||
|                 var employee = await employeeServiceProvider.getEmployeeAsync(surveyResponse.EmployeeId); | ||||
|                 var answers = await answerServiceProvider.GetAnswersByResponseIdAsync(surveyResponse.Id); | ||||
|                 var allQuestions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var allQuestions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId); | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
| @ -565,7 +543,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 } | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; | ||||
|  | ||||
|                 //var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId); | ||||
| @ -671,7 +649,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|  | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
|                 var result = from r in surveyResonses | ||||
| @ -708,136 +686,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|         //Method to get All Survey Responses for excel export | ||||
|         private async Task<List<object>> getAllSurveyResponsesExcelAsync(string language,bool isadmin) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (string.IsNullOrEmpty(language)) language = "en"; | ||||
|                 List<Db.SurveyResponse> surveyResonses; | ||||
|                 surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync(); | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var Locations = await locationServiceProvider.getLocationsAsync(); | ||||
|                 var regions = await regionServiceProvider.getRegionsAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(language); | ||||
|                 var categories = await questionServiceProvider.GetQuestionCategoriesAsync(language); | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|                 List<object> questionLists = new List<object>(); | ||||
|                 var allques = from res in surveyResonses | ||||
|                               join loc in Locations on res.LocationId equals loc.Id | ||||
|                               join reg in regions on loc.RegionId equals reg.Id | ||||
|                               join ans in answers  on res.Id equals ans.SurveyResponseId | ||||
|                               join q in questions on ans.QuestionId equals q.Id | ||||
|                               join qc in categories on q.CategoryId equals qc.Id | ||||
|                            select new | ||||
|                            { | ||||
|                                responseId = res.Id, | ||||
|                                questionId = q.Id, | ||||
|                                QuestionNumber = q.QuestionNumber, | ||||
|                                Category = JsonSerializer.Deserialize<Dictionary<string, string>>(qc.Titles.ToString())[language], | ||||
|                                question = q.Text[language], | ||||
|                                answerId = ans.Id, | ||||
|                                AnswerText = ans.AnswerText, | ||||
|                                Comment = ans.Comment, | ||||
|                                Location=loc.LocationCode, | ||||
|                                school=loc.Name, | ||||
|                                Region=reg.Name, | ||||
|                                MC=loc.MaintenanceCenter, | ||||
|                                ResponseDate=res.CreatedDate, | ||||
|                                EmployeeId=res.EmployeeId,  | ||||
|                                ClientDevice=res.ClientDevice, | ||||
|                                Attachments = attachments.Where(a=>a.AnswerId==ans.Id).Select(a=>a.FileName+"##"+a.URI).ToList() | ||||
|                            }; | ||||
|                 List<object> allresoponses = new List<object>(); | ||||
|                 foreach (var item in allques) | ||||
|                 { | ||||
|                      | ||||
|                     List<string> ansattachments=item.Attachments.ToList(); | ||||
|  | ||||
|                     //// Initialize the attachment dictionary | ||||
|                     //var attachmentsobject = new Dictionary<string, string>(); | ||||
|                     //for (int i = 0; i < ansattachments.Count; i++) | ||||
|                     //{ | ||||
|                     //    attachmentsobject["Attachment"+(i+1).ToString()] = ansattachments[i]; | ||||
|                     //} | ||||
|  | ||||
|  | ||||
|                     string[] variables = new string[5]; | ||||
|                     for (int i = 0; i < 5; i++) // Assuming you want to assign 5 values | ||||
|                     { | ||||
|                         if (i < ansattachments.Count()) | ||||
|                         { | ||||
|                             variables[i] = ansattachments[i]; | ||||
|                         } | ||||
|                         else | ||||
|                         { | ||||
|                             variables[i] = string.Empty; // or null, or any other default value | ||||
|                         } | ||||
|                     } | ||||
|  | ||||
|                     // Now, you can access the values using the variables | ||||
|                     string att1 = variables[0],att2 = variables[1],att3 = variables[2],att4 = variables[3],att5 = variables[4]; | ||||
|                     object response; | ||||
|                     if (isadmin) | ||||
|                     { | ||||
|                          response = new | ||||
|                         { | ||||
|                             SurveyQuestion = item.question, | ||||
|                             Answer = item.AnswerText, | ||||
|                             Category = item.Category, | ||||
|                             School = item.school, | ||||
|                             Location = item.Location, | ||||
|                             Region = item.Region, | ||||
|                             MC = item.MC, | ||||
|                             ResponseDate = item.ResponseDate.ToString(), | ||||
|                             Notes = item.Comment, | ||||
|                              Attachment1 = att1, | ||||
|                              Attachment2 = att2, | ||||
|                              Attachment3 = att3, | ||||
|                              Attachment4 = att4, | ||||
|                              Attachment5 = att5, | ||||
|                              User = item.EmployeeId, | ||||
|                             DeviceType = item.ClientDevice, | ||||
|                             Reference = item.responseId | ||||
|                         }; | ||||
|                         // Add the attachment dictionary to the response object | ||||
|                         // response = new { response, Attachments = attachments }; | ||||
|                     } | ||||
|                     else | ||||
|                     { | ||||
|                         response = new | ||||
|                         { | ||||
|                             SurveyQuestion = item.question, | ||||
|                             Answer = item.AnswerText, | ||||
|                             Category = item.Category, | ||||
|                             School = item.school, | ||||
|                             Location=item.Location, | ||||
|                             Region = item.Region, | ||||
|                             MC = item.MC, | ||||
|                             ResponseDate = item.ResponseDate.ToString(), | ||||
|                             Notes = item.Comment, | ||||
|                             Attachment1 = att1, | ||||
|                             Attachment2 = att2, | ||||
|                             Attachment3 = att3, | ||||
|                             Attachment4 = att4, | ||||
|                             Attachment5 = att5 | ||||
|                         }; | ||||
|  | ||||
|                         // Add the attachment dictionary to the response object | ||||
|                       //  response = new { response, Attachments = attachments }; | ||||
|                     } | ||||
|                     allresoponses.Add(response); | ||||
|                 } | ||||
|                 return allresoponses; | ||||
|  | ||||
|  | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError($"Exception Found : {ex.Message} - Ref: SurveyResponsesProvider.getSurveyResponseBySurveyIdAsync()"); | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         //Method to get Answers By Maintenance Center by surveyId | ||||
|         private async Task<dynamic> getResultsByMaintenanceCenterAsync(int surveyId, int employeeid) | ||||
| @ -934,7 +783,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 } | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
|  | ||||
		Reference in New Issue
	
	Block a user