fixed survey issue in response level, and added logic for start and end date as optional date.
This commit is contained in:
parent
fc166e65c9
commit
8285588db9
@ -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