forked from MDCPS/DamageAssessment_Backend
		
	fixed survey issue in response level, and added logic for start and end date as optional date
This commit is contained in:
		| @ -8,10 +8,12 @@ namespace DamageAssesment.Api.Responses.Controllers | ||||
|     public class SurveyResponsesController : ControllerBase | ||||
|     { | ||||
|         private readonly ISurveysResponse surveyResponseProvider; | ||||
|         private readonly IExcelExportService excelExportService; | ||||
|  | ||||
|         public SurveyResponsesController(ISurveysResponse surveyResponseProvider) | ||||
|         public SurveyResponsesController(ISurveysResponse surveyResponseProvider, IExcelExportService excelExportService) | ||||
|         { | ||||
|             this.surveyResponseProvider = surveyResponseProvider; | ||||
|             this.excelExportService = excelExportService; | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// GET request for retrieving survey responses. | ||||
| @ -57,9 +59,9 @@ namespace DamageAssesment.Api.Responses.Controllers | ||||
|         [Route("responses/{surveyid:int}/{locationid:int}/{employeeid:int}")] | ||||
|         [Route("responses/{surveyid:int}/{locationid:int}")] | ||||
|         [HttpGet] | ||||
|         public async Task<ActionResult> GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid,int? employeeid) | ||||
|         public async Task<ActionResult> GetSurveyResponsesBySurveyAndLocationAsync(int surveyid, int locationid, int? employeeid) | ||||
|         { | ||||
|             var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid,employeeid ?? 0); | ||||
|             var result = await this.surveyResponseProvider.GetSurveyResponsesBySurveyAndLocationAsync(surveyid, locationid, employeeid ?? 0); | ||||
|             if (result.IsSuccess) | ||||
|             { | ||||
|                 return Ok(result.SurveyResponses); | ||||
| @ -198,11 +200,15 @@ namespace DamageAssesment.Api.Responses.Controllers | ||||
|             else | ||||
|                 return BadRequest(result.ErrorMessage); | ||||
|         } | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Get All active surveys . | ||||
|         /// </summary> | ||||
|         [Route("responses/surveys/active")] | ||||
|         [Route("responses/surveys/active/{language:alpha}")] | ||||
|         [Route("responses/surveys/active/{employeeid:int}")] | ||||
|         [Route("responses/surveys/active/{employeeid:int}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<ActionResult> GetActiveSurveysAsync(int employeeid, string? language) | ||||
|         public async Task<ActionResult> GetActiveSurveysAsync(int? employeeid, string? language) | ||||
|         { | ||||
|             var result = await this.surveyResponseProvider.GetActiveSurveysAsync(employeeid, language); | ||||
|             if (result.IsSuccess) | ||||
| @ -211,11 +217,45 @@ namespace DamageAssesment.Api.Responses.Controllers | ||||
|             } | ||||
|             return NoContent(); | ||||
|         } | ||||
|         /// <summary> | ||||
|         /// Export all survey response data based on survey id. | ||||
|         /// </summary> | ||||
|         [HttpGet] | ||||
|         [Route("responses/surveys/export/{surveyid}")] | ||||
|         public async Task<ActionResult> GetExcelSurveysAsync(int surveyid, string language, bool IsAdmin = false) | ||||
|         { | ||||
|             var result = await this.surveyResponseProvider.ExportSurveyResponsesAsync(surveyid, language, IsAdmin); | ||||
|             if (result.IsSuccess && result.surveyResponses.Count > 0) | ||||
|             { | ||||
|  | ||||
|                 byte[] fileContents = excelExportService.ExportToExcel<object>(result.surveyResponses); | ||||
|                 return File(fileContents, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "data.xlsx"); | ||||
|                 //return Ok(result.Surveys); | ||||
|             } | ||||
|             return NoContent(); | ||||
|         } | ||||
|         //[Route("responses/surveys/active")] | ||||
|         //[Route("responses/surveys/active/{language:alpha}")] | ||||
|         //[HttpGet] | ||||
|         //public async Task<ActionResult> GetActiveSurveysAsync( string? language) | ||||
|         //{ | ||||
|         //    var result = await this.surveyResponseProvider.GetActiveSurveysAsync(null, language); | ||||
|         //    if (result.IsSuccess) | ||||
|         //    { | ||||
|         //        return Ok(result.Surveys); | ||||
|         //    } | ||||
|         //    return NoContent(); | ||||
|         //} | ||||
|  | ||||
|         /// <summary> | ||||
|         /// Get all historical surveys . | ||||
|         /// </summary> | ||||
|         [Route("responses/surveys/historic")] | ||||
|         [Route("responses/surveys/historic/{language:alpha}")] | ||||
|         [Route("responses/surveys/historic/{employeeid:int}")] | ||||
|         [Route("responses/surveys/historic/{employeeid:int}/{language:alpha}")] | ||||
|         [HttpGet] | ||||
|         public async Task<ActionResult> GetHistoricSurveysAsync(int employeeid, string? language) | ||||
|         public async Task<ActionResult> GetHistoricSurveysAsync(int? employeeid, string? language) | ||||
|         { | ||||
|             var result = await this.surveyResponseProvider.GetHistoricSurveysAsync(employeeid, language); | ||||
|             if (result.IsSuccess) | ||||
|  | ||||
| @ -9,6 +9,7 @@ | ||||
|  | ||||
|   <ItemGroup> | ||||
|     <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" /> | ||||
|     <PackageReference Include="EPPlus" Version="7.0.0" /> | ||||
|     <PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="6.0.21" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.5" /> | ||||
|     <PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="7.0.5" /> | ||||
|  | ||||
| @ -0,0 +1,7 @@ | ||||
| namespace DamageAssesment.Api.Responses.Interfaces | ||||
| { | ||||
|     public interface IExcelExportService | ||||
|     { | ||||
|         public byte[] ExportToExcel<T1>(List<object> responses); | ||||
|     } | ||||
| } | ||||
| @ -4,8 +4,9 @@ namespace DamageAssesment.Api.Responses.Interfaces | ||||
| { | ||||
|     public interface IQuestionServiceProvider | ||||
|     { | ||||
|         Task<List<Question>> getQuestionsAsync(); | ||||
|         Task<List<Question>> getQuestionsAsync(string language); | ||||
|         Task<List<SurveyQuestions>> getSurveyQuestionsAsync(int surveyId); | ||||
|         Task<Question> getQuestionsAsync(int questionId); | ||||
|         Task<List<QuestionCategory>> GetQuestionCategoriesAsync(string? language); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -7,10 +7,11 @@ namespace DamageAssesment.Api.Responses.Interfaces | ||||
|     { | ||||
|         Task<(bool IsSuccess, dynamic Answers, string ErrorMessage)> GetAnswersByRegionAsync(int surveyId, int employeeid); | ||||
|         Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyResponseAsync(Models.SurveyResponse surveyResponse); | ||||
|        // Task<(bool IsSuccess,dynamic surveyResponses, string ErrorMessage)> GetSurveyResponseAsync(int responseId); | ||||
|         // Task<(bool IsSuccess,dynamic surveyResponses, string ErrorMessage)> GetSurveyResponseAsync(int responseId); | ||||
|         Task<(bool IsSuccess, dynamic surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(int employeeid); | ||||
|         Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int employeeid, string language); | ||||
|         Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int employeeid, string language); | ||||
|         Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(int surveyId, string language, bool IsAdmin); | ||||
|         Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int? employeeid, string language); | ||||
|         Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int? employeeid, string language); | ||||
|         Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse); | ||||
|         Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> DeleteSurveyResponseAsync(int Id); | ||||
|         Task<(bool IsSuccess, dynamic SurveyResponse, string ErrorMessage)> GetSurveyResponseByIdAsync(int responseId); | ||||
|  | ||||
| @ -11,6 +11,7 @@ namespace DamageAssesment.Api.Responses.Models | ||||
|  | ||||
|         public int? AnswerId { get; set; } | ||||
|         public bool IsDeleted { get; set; } | ||||
|         public string FileName { get; set; } | ||||
|  | ||||
|         public Attachment(int answerId, string uri) | ||||
|         { | ||||
|  | ||||
| @ -4,6 +4,7 @@ | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public int RegionId { get; set; } | ||||
|         public string LocationCode { get; set; } | ||||
|         public string Name { get; set; } | ||||
|         public string MaintenanceCenter { get; set; } | ||||
|         public string SchoolType { get; set; } | ||||
|  | ||||
| @ -0,0 +1,10 @@ | ||||
| namespace DamageAssesment.Api.Responses.Models | ||||
| { | ||||
|     public class QuestionCategory | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public string IconName { get; set; } | ||||
|         public string IconLibrary { get; set; } | ||||
|         public object Titles { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -2,13 +2,20 @@ | ||||
|  | ||||
| namespace DamageAssesment.Api.Responses.Models | ||||
| { | ||||
|     public enum SurveyStatus | ||||
|     { | ||||
|         PENDING, | ||||
|         ACTIVE, | ||||
|         INACTIVE | ||||
|     } | ||||
|     public class Survey | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public bool IsEnabled { get; set; } | ||||
|         public DateTime StartDate { get; set; } | ||||
|         public DateTime EndDate { get; set; } | ||||
|         public DateTime? StartDate { get; set; } | ||||
|         public DateTime? EndDate { get; set; } | ||||
|         public DateTime CreatedDate { get; set; } | ||||
|         public string Status { get; set; } | ||||
|         public Dictionary<string, string> Titles { get; set; } | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -0,0 +1,24 @@ | ||||
| namespace DamageAssesment.Api.Responses.Models | ||||
| { | ||||
|     public class SurveyExport | ||||
|     { | ||||
|         public int Id { get; set; } | ||||
|         public string SurveyQuestion { get; set; } | ||||
|         public string Answer { get; set; } | ||||
|         public string Category { get; set; } | ||||
|  | ||||
|         public string School { get; set; } | ||||
|         public string Location { get; set; } | ||||
|         public string Region { get; set; } | ||||
|  | ||||
|         public string MC { get; set; } | ||||
|         public string ResponseDate { get; set; } | ||||
|         public string Notes { get; set; } | ||||
|  | ||||
|         public string Attachment1 { get; set; } | ||||
|         public string Attachment2 { get; set; } | ||||
|         public string Attachment3 { get; set; } | ||||
|         public string Attachment4 { get; set; } | ||||
|         public string Attachment5 { get; set; } | ||||
|     } | ||||
| } | ||||
| @ -26,6 +26,7 @@ builder.Services.AddScoped<IQuestionServiceProvider, QuestionServiceProvider>(); | ||||
| builder.Services.AddScoped<IEmployeeServiceProvider, EmployeeServiceProvider>(); | ||||
| builder.Services.AddScoped<IAttachmentServiceProvider, AttachmentServiceProvider>(); | ||||
| builder.Services.AddScoped<ISurveyServiceProvider, SurveyServiceProvider>(); | ||||
| builder.Services.AddScoped<IExcelExportService, ExcelExportService>(); | ||||
|  | ||||
| builder.Services.AddHttpClient<IHttpUtil, HttpUtil>(). | ||||
|     AddTransientHttpErrorPolicy(policy => policy.WaitAndRetryAsync(maxApiCallRetries, _ => TimeSpan.FromSeconds(intervalToRetry))). | ||||
|  | ||||
| @ -0,0 +1,62 @@ | ||||
| using DamageAssesment.Api.Responses.Interfaces; | ||||
| using DamageAssesment.Api.Responses.Models; | ||||
| using OfficeOpenXml; | ||||
| using System.Collections.Generic; | ||||
| using System.ComponentModel; | ||||
|  | ||||
| namespace DamageAssesment.Api.Responses.Providers | ||||
| { | ||||
|     public class ExcelExportService : IExcelExportService | ||||
|     { | ||||
|         public byte[] ExportToExcel<T1>(List<object> responses) | ||||
|         { | ||||
|             ExcelPackage.LicenseContext = OfficeOpenXml.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(); | ||||
|                             try | ||||
|                             { | ||||
|                                 Uri linkUri = new Uri(attachments[1]); | ||||
|                                 worksheet.Cells[row, col].Value = attachments[0]; | ||||
|                                 worksheet.Cells[row, col].Style.Font.UnderLine = true; | ||||
|                             } | ||||
|                             catch { worksheet.Cells[row, col].Value = attachments[1]; } | ||||
|                         } | ||||
|                         else | ||||
|                             worksheet.Cells[row, col].Value = value; | ||||
|  | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @ -3,6 +3,9 @@ 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 | ||||
| { | ||||
| @ -43,7 +46,6 @@ 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(); | ||||
|             } | ||||
|         } | ||||
| @ -111,25 +113,19 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|          | ||||
|         public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int employeeid, string language) | ||||
|  | ||||
|         public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetActiveSurveysAsync(int? employeeid, string language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Querying to get SurveyResponse object from DB"); | ||||
|                 //get all the survey that already taken by the employee | ||||
|                 var listOfsurveysId = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).Select(y => y.SurveyId).ToListAsync(); | ||||
|                 var surveys = await surveyServiceProvider.getSurveysAsync(language); | ||||
|  | ||||
|                 if (surveys != null) | ||||
|                 { | ||||
|                     surveys = surveys.Where(s => s.IsEnabled == true && s.StartDate <= DateTime.Now && s.EndDate >= DateTime.Now).ToList(); | ||||
|                 } | ||||
|  | ||||
|                 if (listOfsurveysId==null || listOfsurveysId.Count == 0) | ||||
|                 surveys = surveys.Where(s => s.IsEnabled == true && s.Status == SurveyStatus.ACTIVE.ToString()).ToList(); | ||||
|                 if (employeeid == null || employeeid == 0) | ||||
|                     return (true, surveys, null); | ||||
|  | ||||
|                 var activeSurveys = surveys.Where(s => s.IsEnabled == true && s.StartDate <= DateTime.Now && s.EndDate >= DateTime.Now && !listOfsurveysId.Contains(s.Id)); | ||||
|                 List<int> listOfsurveysId = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid.Value).Select(y => y.SurveyId).ToListAsync(); | ||||
|                 var activeSurveys = surveys.Where(s => !listOfsurveysId.Contains(s.Id)); | ||||
|                 return (true, activeSurveys, null); | ||||
|             } | ||||
|             catch (Exception ex) | ||||
| @ -139,21 +135,24 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int employeeid, string language) | ||||
|         public async Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(int? employeeid, string language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 logger?.LogInformation("Querying to get SurveyResponse object from DB"); | ||||
|                 //get all the survey that already taken by the employee | ||||
|                 var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync(); | ||||
|                 var surveys = await surveyServiceProvider.getSurveysAsync(language); | ||||
|  | ||||
|                 var surveys = await surveyServiceProvider.getSurveysAsync(language); | ||||
|                 // returning only historic data: end date is less than current date. | ||||
|                 surveys = surveys.Where(s => s.Status == SurveyStatus.INACTIVE.ToString()).ToList(); | ||||
|                 if (employeeid == null || employeeid == 0) | ||||
|                     return (true, surveys, null); | ||||
|                 var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync(); | ||||
|                 var historicSurveys = from s in surveys | ||||
|                                       from r in surveyResponses | ||||
|                                       where s.Id == r.SurveyId | ||||
|                                       select s; | ||||
|  | ||||
|                 return (true, historicSurveys, null); | ||||
|  | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
| @ -310,6 +309,26 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 return (false, null, ex.Message); | ||||
|             } | ||||
|         } | ||||
|         public async Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(int surveyId, string language, bool isadmin) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 var responses = await getAllSurveyResponsesExcelAsync(surveyId, 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) | ||||
|         { | ||||
| @ -490,7 +509,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(); | ||||
|                 var allQuestions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId); | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
| @ -546,7 +565,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 } | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; | ||||
|  | ||||
|                 //var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId); | ||||
| @ -652,7 +671,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|  | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
|                 var result = from r in surveyResonses | ||||
| @ -689,7 +708,136 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 return null; | ||||
|             } | ||||
|         } | ||||
|         //Method to get All Survey Responses for excel export | ||||
|         private async Task<List<object>> getAllSurveyResponsesExcelAsync(int surveyId, string language, bool isadmin) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (string.IsNullOrEmpty(language)) language = "en"; | ||||
|                 List<Db.SurveyResponse> surveyResonses; | ||||
|                 surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(a => a.SurveyId == surveyId).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) | ||||
| @ -786,7 +934,7 @@ namespace DamageAssesment.Api.Responses.Providers | ||||
|                 } | ||||
|  | ||||
|                 var answers = await answerServiceProvider.getAnswersAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(); | ||||
|                 var questions = await questionServiceProvider.getQuestionsAsync(null); | ||||
|                 var surveyQuestions = from q in questions where q.SurveyId == surveyId select q; | ||||
|                 var attachments = await attachmentServiceProvider.getAttachmentsAsync(); | ||||
|  | ||||
|  | ||||
| @ -10,10 +10,12 @@ namespace DamageAssesment.Api.Responses.Services | ||||
|         { | ||||
|         } | ||||
|  | ||||
|         public async Task<List<Question>> getQuestionsAsync() | ||||
|         public async Task<List<Question>> getQuestionsAsync(string language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 if (!string.IsNullOrEmpty(language)) | ||||
|                     url = url + "/" + language; | ||||
|                 var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); | ||||
|                 var questions = JsonConvert.DeserializeObject<List<Question>>(responseJsonString); | ||||
|  | ||||
| @ -27,6 +29,27 @@ namespace DamageAssesment.Api.Responses.Services | ||||
|                 return new List<Question>(); | ||||
|             } | ||||
|         } | ||||
|         public async Task<List<QuestionCategory>> GetQuestionCategoriesAsync(string? language) | ||||
|         { | ||||
|             try | ||||
|             { | ||||
|                 url = urlBase + configuration.GetValue<string>("RessourceSettings:QuestionCategory"); | ||||
|  | ||||
|                 if (!string.IsNullOrEmpty(language)) | ||||
|                     url = url + "/" + language; | ||||
|                 var responseJsonString = await httpUtil.SendAsync(HttpMethod.Get, url, null); | ||||
|                 var questions = JsonConvert.DeserializeObject<List<QuestionCategory>>(responseJsonString); | ||||
|  | ||||
|                 if (questions == null || !questions.Any()) | ||||
|                     return new List<QuestionCategory>(); | ||||
|                 else return questions; | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|             { | ||||
|                 logger?.LogError($"Exception Found : {ex.Message} - Ref: QuestionServiceProvider.GetQuestionCategoriesAsync()"); | ||||
|                 return new List<QuestionCategory>(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         public async Task<List<SurveyQuestions>> getSurveyQuestionsAsync(int surveyId) | ||||
|         { | ||||
| @ -37,7 +60,7 @@ namespace DamageAssesment.Api.Responses.Services | ||||
|                 var questions = JsonConvert.DeserializeObject<List<SurveyQuestions>>(responseJsonString); | ||||
|  | ||||
|                 if (questions == null || !questions.Any()) | ||||
|                     return new List<SurveyQuestions>() ; | ||||
|                     return new List<SurveyQuestions>(); | ||||
|                 else return questions; | ||||
|             } | ||||
|             catch (Exception ex) | ||||
|  | ||||
| @ -15,12 +15,12 @@ | ||||
|     "AttachmentUrlBase": "http://localhost:5243", | ||||
|     "SurveyUrlBase": "http://localhost:5009" | ||||
|   }, | ||||
|  | ||||
|   "RessourceSettings": { | ||||
|     "Employee": "/employees", | ||||
|     "EmployeeById": "/employees/{0}", | ||||
|     "Question": "/questions", | ||||
|     "QuestionById": "/questions/{0}", | ||||
|     "QuestionCategory": "/questions/categories", | ||||
|     "SurveyQuestion": "/questions/bysurvey/{0}", | ||||
|     "Survey": "/surveys", | ||||
|     "SurveyById": "/surveys/{0}", | ||||
|  | ||||
		Reference in New Issue
	
	Block a user