fixed survey issue in response level, and added logic for start and end date as optional date.

This commit is contained in:
uppuv 2023-11-01 14:29:47 -04:00
parent fc166e65c9
commit 8285588db9
8 changed files with 85 additions and 65 deletions

View File

@ -218,16 +218,16 @@ namespace DamageAssesment.Api.Responses.Controllers
return NoContent(); return NoContent();
} }
/// <summary> /// <summary>
/// Export surveys based on role . /// Export all survey response data based on survey id.
/// </summary> /// </summary>
[HttpGet] [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)
{
[Route("responses/surveys/export")]
public async Task<ActionResult> GetExcelSurveysAsync(string language,bool IsAdmin=false)
{
var result = await this.surveyResponseProvider.ExportSurveyResponsesAsync(language, IsAdmin);
if (result.IsSuccess)
{
byte[] fileContents = excelExportService.ExportToExcel<object>(result.surveyResponses); byte[] fileContents = excelExportService.ExportToExcel<object>(result.surveyResponses);
return File(fileContents, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "data.xlsx"); return File(fileContents, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "data.xlsx");
//return Ok(result.Surveys); //return Ok(result.Surveys);

View File

@ -9,7 +9,7 @@ namespace DamageAssesment.Api.Responses.Interfaces
Task<(bool IsSuccess, Models.SurveyResponse SurveyResponse, string ErrorMessage)> PostSurveyResponseAsync(Models.SurveyResponse surveyResponse); 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 surveyResponses, string ErrorMessage)> GetSurveyResponsesAsync(int employeeid);
Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(string language,bool IsAdmin); 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)> GetActiveSurveysAsync(int? employeeid, string language);
Task<(bool IsSuccess, dynamic Surveys, string ErrorMessage)> GetHistoricSurveysAsync(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)> PutSurveyResponseAsync(int Id, Models.SurveyResponse surveyResponse);

View File

@ -2,13 +2,20 @@
namespace DamageAssesment.Api.Responses.Models namespace DamageAssesment.Api.Responses.Models
{ {
public enum SurveyStatus
{
PENDING,
ACTIVE,
INACTIVE
}
public class Survey public class Survey
{ {
public int Id { get; set; } public int Id { get; set; }
public bool IsEnabled { get; set; } public bool IsEnabled { get; set; }
public DateTime StartDate { get; set; } public DateTime? StartDate { get; set; }
public DateTime EndDate { get; set; } public DateTime? EndDate { get; set; }
public DateTime CreatedDate { get; set; } public DateTime CreatedDate { get; set; }
public string Status { get; set; }
public Dictionary<string, string> Titles { get; set; } public Dictionary<string, string> Titles { get; set; }
} }
} }

View File

@ -38,17 +38,22 @@ namespace DamageAssesment.Api.Responses.Providers
{ {
for (int col = 1; col <= properties.Length; col++) for (int col = 1; col <= properties.Length; col++)
{ {
string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2])); string value = Convert.ToString(properties[col - 1].GetValue(data[row - 2]));
if (IsAttchments.Where(a => a == col).Count()>0&& !string.IsNullOrEmpty(value)) if (IsAttchments.Where(a => a == col).Count() > 0 && !string.IsNullOrEmpty(value))
{ {
List<string> attachments = value.Split("##").ToList(); List<string> attachments = value.Split("##").ToList();
try
{
Uri linkUri = new Uri(attachments[1]); Uri linkUri = new Uri(attachments[1]);
worksheet.Cells[row, col].Hyperlink = linkUri;
worksheet.Cells[row, col].Value = attachments[0]; worksheet.Cells[row, col].Value = attachments[0];
worksheet.Cells[row, col].Style.Font.UnderLine = true; worksheet.Cells[row, col].Style.Font.UnderLine = true;
} }
catch { worksheet.Cells[row, col].Value = attachments[1]; }
}
else else
worksheet.Cells[row, col].Value = value; worksheet.Cells[row, col].Value = value;
} }
} }
} }

View File

@ -121,7 +121,7 @@ namespace DamageAssesment.Api.Responses.Providers
logger?.LogInformation("Querying to get SurveyResponse object from DB"); logger?.LogInformation("Querying to get SurveyResponse object from DB");
//get all the survey that already taken by the employee //get all the survey that already taken by the employee
var surveys = await surveyServiceProvider.getSurveysAsync(language); var surveys = await surveyServiceProvider.getSurveysAsync(language);
surveys = surveys.Where(s => s.IsEnabled == true && s.StartDate <= DateTime.Now && s.EndDate >= DateTime.Now).ToList(); surveys = surveys.Where(s => s.IsEnabled == true && s.Status == SurveyStatus.ACTIVE.ToString()).ToList();
if (employeeid == null || employeeid == 0) if (employeeid == null || employeeid == 0)
return (true, surveys, null); return (true, surveys, null);
List<int> listOfsurveysId = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid.Value).Select(y => y.SurveyId).ToListAsync(); List<int> listOfsurveysId = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid.Value).Select(y => y.SurveyId).ToListAsync();
@ -143,7 +143,7 @@ namespace DamageAssesment.Api.Responses.Providers
var surveys = await surveyServiceProvider.getSurveysAsync(language); var surveys = await surveyServiceProvider.getSurveysAsync(language);
// returning only historic data: end date is less than current date. // returning only historic data: end date is less than current date.
surveys = surveys.Where(s => s.EndDate < DateTime.Now).ToList(); surveys = surveys.Where(s => s.Status == SurveyStatus.INACTIVE.ToString()).ToList();
if (employeeid == null || employeeid == 0) if (employeeid == null || employeeid == 0)
return (true, surveys, null); return (true, surveys, null);
var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync(); var surveyResponses = await surveyResponseDbContext.SurveyResponses.Where(x => x.EmployeeId == employeeid).ToListAsync();
@ -309,11 +309,11 @@ namespace DamageAssesment.Api.Responses.Providers
return (false, null, ex.Message); return (false, null, ex.Message);
} }
} }
public async Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(string language,bool isadmin) public async Task<(bool IsSuccess, List<object> surveyResponses, string ErrorMessage)> ExportSurveyResponsesAsync(int surveyId, string language, bool isadmin)
{ {
try try
{ {
var responses = await getAllSurveyResponsesExcelAsync(language, isadmin); var responses = await getAllSurveyResponsesExcelAsync(surveyId, language, isadmin);
if (responses != null) if (responses != null)
return (true, responses, "Request Successful."); return (true, responses, "Request Successful.");
@ -709,13 +709,13 @@ namespace DamageAssesment.Api.Responses.Providers
} }
} }
//Method to get All Survey Responses for excel export //Method to get All Survey Responses for excel export
private async Task<List<object>> getAllSurveyResponsesExcelAsync(string language,bool isadmin) private async Task<List<object>> getAllSurveyResponsesExcelAsync(int surveyId, string language, bool isadmin)
{ {
try try
{ {
if (string.IsNullOrEmpty(language)) language = "en"; if (string.IsNullOrEmpty(language)) language = "en";
List<Db.SurveyResponse> surveyResonses; List<Db.SurveyResponse> surveyResonses;
surveyResonses = await surveyResponseDbContext.SurveyResponses.ToListAsync(); surveyResonses = await surveyResponseDbContext.SurveyResponses.Where(a => a.SurveyId == surveyId).ToListAsync();
var answers = await answerServiceProvider.getAnswersAsync(); var answers = await answerServiceProvider.getAnswersAsync();
var Locations = await locationServiceProvider.getLocationsAsync(); var Locations = await locationServiceProvider.getLocationsAsync();
var regions = await regionServiceProvider.getRegionsAsync(); var regions = await regionServiceProvider.getRegionsAsync();
@ -739,20 +739,20 @@ namespace DamageAssesment.Api.Responses.Providers
answerId = ans.Id, answerId = ans.Id,
AnswerText = ans.AnswerText, AnswerText = ans.AnswerText,
Comment = ans.Comment, Comment = ans.Comment,
Location=loc.LocationCode, Location = loc.LocationCode,
school=loc.Name, school = loc.Name,
Region=reg.Name, Region = reg.Name,
MC=loc.MaintenanceCenter, MC = loc.MaintenanceCenter,
ResponseDate=res.CreatedDate, ResponseDate = res.CreatedDate,
EmployeeId=res.EmployeeId, EmployeeId = res.EmployeeId,
ClientDevice=res.ClientDevice, ClientDevice = res.ClientDevice,
Attachments = attachments.Where(a=>a.AnswerId==ans.Id).Select(a=>a.FileName+"##"+a.URI).ToList() Attachments = attachments.Where(a => a.AnswerId == ans.Id).Select(a => a.FileName + "##" + a.URI).ToList()
}; };
List<object> allresoponses = new List<object>(); List<object> allresoponses = new List<object>();
foreach (var item in allques) foreach (var item in allques)
{ {
List<string> ansattachments=item.Attachments.ToList(); List<string> ansattachments = item.Attachments.ToList();
//// Initialize the attachment dictionary //// Initialize the attachment dictionary
//var attachmentsobject = new Dictionary<string, string>(); //var attachmentsobject = new Dictionary<string, string>();
@ -776,7 +776,7 @@ namespace DamageAssesment.Api.Responses.Providers
} }
// Now, you can access the values using the variables // 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]; string att1 = variables[0], att2 = variables[1], att3 = variables[2], att4 = variables[3], att5 = variables[4];
object response; object response;
if (isadmin) if (isadmin)
{ {
@ -811,7 +811,7 @@ namespace DamageAssesment.Api.Responses.Providers
Answer = item.AnswerText, Answer = item.AnswerText,
Category = item.Category, Category = item.Category,
School = item.school, School = item.school,
Location=item.Location, Location = item.Location,
Region = item.Region, Region = item.Region,
MC = item.MC, MC = item.MC,
ResponseDate = item.ResponseDate.ToString(), ResponseDate = item.ResponseDate.ToString(),

View File

@ -13,9 +13,9 @@ namespace DamageAssesment.Api.Surveys.Db
public bool IsEnabled { get; set; } public bool IsEnabled { get; set; }
public DateTime StartDate { get; set; } public DateTime? StartDate { get; set; }
public DateTime EndDate { get; set; } public DateTime? EndDate { get; set; }
public DateTime CreatedDate { get; set; } = DateTime.Now; public DateTime CreatedDate { get; set; } = DateTime.Now;
/* /*

View File

@ -21,8 +21,8 @@ namespace DamageAssesment.Api.Surveys.Models
{ {
public int Id { get; set; } public int Id { get; set; }
public bool IsEnabled { get; set; } public bool IsEnabled { get; set; }
public DateTime StartDate { get; set; } public DateTime? StartDate { get; set; }
public DateTime EndDate { get; set; } public DateTime? EndDate { get; set; }
public DateTime CreatedDate { get; set; } public DateTime? CreatedDate { get; set; }
} }
} }

View File

@ -85,7 +85,9 @@ namespace DamageAssesment.Api.Surveys.Providers
MultiLanguage = dict; MultiLanguage = dict;
return MultiLanguage; return MultiLanguage;
} }
public string GetStatus(DateTime StartDate,DateTime EndDate) public string GetStatus(DateTime? StartDate,DateTime? EndDate)
{
try
{ {
if (StartDate > DateTime.Now) if (StartDate > DateTime.Now)
return SurveyStatus.PENDING.ToString(); return SurveyStatus.PENDING.ToString();
@ -94,6 +96,11 @@ namespace DamageAssesment.Api.Surveys.Providers
else else
return SurveyStatus.INACTIVE.ToString(); return SurveyStatus.INACTIVE.ToString();
} }
catch
{
return SurveyStatus.INACTIVE.ToString();
}
}
// Method to get surveys asynchronously with multi-language support // Method to get surveys asynchronously with multi-language support
public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanSurvey> Surveys, string ErrorMessage)> GetSurveysAsync(string language) public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanSurvey> Surveys, string ErrorMessage)> GetSurveysAsync(string language)
{ {
@ -136,7 +143,8 @@ namespace DamageAssesment.Api.Surveys.Providers
try try
{ {
logger?.LogInformation("Query Survey"); logger?.LogInformation("Query Survey");
var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == id && s.IsEnabled == true); // removed is enabled becuase we are using it in responses to get response
var survey = await surveyDbContext.Surveys.SingleOrDefaultAsync(s => s.Id == id);
if (survey != null) if (survey != null)
{ {