Merged PR 56: fixed survey issue in response level, and added logic for start and end date...
fixed survey issue in response level, and added logic for start and end date as optional date.
This commit is contained in:
commit
17cd993a56
@ -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}")]
|
||||||
[Route("responses/surveys/export")]
|
public async Task<ActionResult> GetExcelSurveysAsync(int surveyid, string language, bool IsAdmin = false)
|
||||||
public async Task<ActionResult> GetExcelSurveysAsync(string language,bool IsAdmin=false)
|
|
||||||
{
|
{
|
||||||
var result = await this.surveyResponseProvider.ExportSurveyResponsesAsync(language, IsAdmin);
|
var result = await this.surveyResponseProvider.ExportSurveyResponsesAsync(surveyid, language, IsAdmin);
|
||||||
if (result.IsSuccess)
|
if (result.IsSuccess && result.surveyResponses.Count > 0)
|
||||||
{
|
{
|
||||||
|
|
||||||
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);
|
||||||
|
@ -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);
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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]));
|
|
||||||
if (IsAttchments.Where(a => a == col).Count()>0&& !string.IsNullOrEmpty(value))
|
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();
|
List<string> attachments = value.Split("##").ToList();
|
||||||
Uri linkUri = new Uri(attachments[1]);
|
try
|
||||||
worksheet.Cells[row, col].Hyperlink = linkUri;
|
{
|
||||||
worksheet.Cells[row, col].Value = attachments[0];
|
Uri linkUri = new Uri(attachments[1]);
|
||||||
worksheet.Cells[row, col].Style.Font.UnderLine = true;
|
worksheet.Cells[row, col].Value = attachments[0];
|
||||||
|
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;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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();
|
||||||
@ -726,33 +726,33 @@ namespace DamageAssesment.Api.Responses.Providers
|
|||||||
var allques = from res in surveyResonses
|
var allques = from res in surveyResonses
|
||||||
join loc in Locations on res.LocationId equals loc.Id
|
join loc in Locations on res.LocationId equals loc.Id
|
||||||
join reg in regions on loc.RegionId equals reg.Id
|
join reg in regions on loc.RegionId equals reg.Id
|
||||||
join ans in answers on res.Id equals ans.SurveyResponseId
|
join ans in answers on res.Id equals ans.SurveyResponseId
|
||||||
join q in questions on ans.QuestionId equals q.Id
|
join q in questions on ans.QuestionId equals q.Id
|
||||||
join qc in categories on q.CategoryId equals qc.Id
|
join qc in categories on q.CategoryId equals qc.Id
|
||||||
select new
|
select new
|
||||||
{
|
{
|
||||||
responseId = res.Id,
|
responseId = res.Id,
|
||||||
questionId = q.Id,
|
questionId = q.Id,
|
||||||
QuestionNumber = q.QuestionNumber,
|
QuestionNumber = q.QuestionNumber,
|
||||||
Category = JsonSerializer.Deserialize<Dictionary<string, string>>(qc.Titles.ToString())[language],
|
Category = JsonSerializer.Deserialize<Dictionary<string, string>>(qc.Titles.ToString())[language],
|
||||||
question = q.Text[language],
|
question = q.Text[language],
|
||||||
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,11 +776,11 @@ 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)
|
||||||
{
|
{
|
||||||
response = new
|
response = new
|
||||||
{
|
{
|
||||||
SurveyQuestion = item.question,
|
SurveyQuestion = item.question,
|
||||||
Answer = item.AnswerText,
|
Answer = item.AnswerText,
|
||||||
@ -791,12 +791,12 @@ namespace DamageAssesment.Api.Responses.Providers
|
|||||||
MC = item.MC,
|
MC = item.MC,
|
||||||
ResponseDate = item.ResponseDate.ToString(),
|
ResponseDate = item.ResponseDate.ToString(),
|
||||||
Notes = item.Comment,
|
Notes = item.Comment,
|
||||||
Attachment1 = att1,
|
Attachment1 = att1,
|
||||||
Attachment2 = att2,
|
Attachment2 = att2,
|
||||||
Attachment3 = att3,
|
Attachment3 = att3,
|
||||||
Attachment4 = att4,
|
Attachment4 = att4,
|
||||||
Attachment5 = att5,
|
Attachment5 = att5,
|
||||||
User = item.EmployeeId,
|
User = item.EmployeeId,
|
||||||
DeviceType = item.ClientDevice,
|
DeviceType = item.ClientDevice,
|
||||||
Reference = item.responseId
|
Reference = item.responseId
|
||||||
};
|
};
|
||||||
@ -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(),
|
||||||
@ -824,7 +824,7 @@ namespace DamageAssesment.Api.Responses.Providers
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Add the attachment dictionary to the response object
|
// Add the attachment dictionary to the response object
|
||||||
// response = new { response, Attachments = attachments };
|
// response = new { response, Attachments = attachments };
|
||||||
}
|
}
|
||||||
allresoponses.Add(response);
|
allresoponses.Add(response);
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
/*
|
/*
|
||||||
|
@ -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; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -85,14 +85,21 @@ 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)
|
||||||
{
|
{
|
||||||
if (StartDate > DateTime.Now)
|
try
|
||||||
return SurveyStatus.PENDING.ToString();
|
{
|
||||||
else if (StartDate <= DateTime.Now && EndDate > DateTime.Now)
|
if (StartDate > DateTime.Now)
|
||||||
return SurveyStatus.ACTIVE.ToString();
|
return SurveyStatus.PENDING.ToString();
|
||||||
else
|
else if (StartDate <= DateTime.Now && EndDate > DateTime.Now)
|
||||||
|
return SurveyStatus.ACTIVE.ToString();
|
||||||
|
else
|
||||||
|
return SurveyStatus.INACTIVE.ToString();
|
||||||
|
}
|
||||||
|
catch
|
||||||
|
{
|
||||||
return SurveyStatus.INACTIVE.ToString();
|
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)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user