forked from MDCPS/DamageAssessment_Backend
		
	Compare commits
	
		
			7 Commits
		
	
	
		
			6fbe2197-r
			...
			local-dock
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 513049287c | |||
| fcc0205175 | |||
| 281a789deb | |||
| fc154274a0 | |||
| 19fac4d810 | |||
| 17cd993a56 | |||
| 8285588db9 | 
@ -136,6 +136,80 @@ namespace DamageAssesment.Api.Attachments.Controllers
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// download an existing attachment.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        [HttpGet("attachments/download/{id}")]
 | 
				
			||||||
 | 
					        public async Task<IActionResult> downloadfile(int id)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var result = await this.AttachmentProvider.GetDownloadAttachmentAsync(id);
 | 
				
			||||||
 | 
					                if (!result.IsSuccess)
 | 
				
			||||||
 | 
					                    return NotFound();
 | 
				
			||||||
 | 
					                string path = await UploadService.GetFile(result.Attachment.URI);
 | 
				
			||||||
 | 
					                if (path == null)
 | 
				
			||||||
 | 
					                    return NotFound();
 | 
				
			||||||
 | 
					                var contentType = GetContentType(result.Attachment.FileName);
 | 
				
			||||||
 | 
					                if (contentType == "application/octet-stream")
 | 
				
			||||||
 | 
					                    return PhysicalFile(path, contentType, result.Attachment.FileName);
 | 
				
			||||||
 | 
					                return PhysicalFile(path, contentType, enableRangeProcessing: true);// result.Attachment.FileName);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // Handle the exception here or log it
 | 
				
			||||||
 | 
					                return StatusCode(500, "An error occurred: " + ex.Message);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            //try
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    var result = await this.AttachmentProvider.GetDownloadAttachmentAsync(id);
 | 
				
			||||||
 | 
					            //    if(!result.IsSuccess) 
 | 
				
			||||||
 | 
					            //        return NotFound();
 | 
				
			||||||
 | 
					            //    byte[] fileContent = await UploadService.DownloadFile(result.Attachment.URI);
 | 
				
			||||||
 | 
					            //    if (fileContent == null || fileContent.Length == 0)
 | 
				
			||||||
 | 
					            //        return NotFound();
 | 
				
			||||||
 | 
					            //    var contentType = "application/octet-stream";
 | 
				
			||||||
 | 
					            //    return File(fileContent, contentType, result.Attachment.FileName);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					            //catch (Exception ex)
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    // Handle the exception here or log it
 | 
				
			||||||
 | 
					            //    return StatusCode(500, "An error occurred: " + ex.Message);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        private string GetContentType(string fileName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // You can add more content types based on the file extensions
 | 
				
			||||||
 | 
					            switch (Path.GetExtension(fileName).ToLower())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                //case ".txt":
 | 
				
			||||||
 | 
					                //    return "text/plain";
 | 
				
			||||||
 | 
					                case ".jpg":
 | 
				
			||||||
 | 
					                case ".jpeg":
 | 
				
			||||||
 | 
					                    return "image/jpeg";
 | 
				
			||||||
 | 
					                case ".png":
 | 
				
			||||||
 | 
					                    return "image/png";
 | 
				
			||||||
 | 
					                case ".gif":
 | 
				
			||||||
 | 
					                    return "image/gif";
 | 
				
			||||||
 | 
					                case ".bmp":
 | 
				
			||||||
 | 
					                    return "image/bmp";
 | 
				
			||||||
 | 
					                case ".webp":
 | 
				
			||||||
 | 
					                    return "image/webp";
 | 
				
			||||||
 | 
					                case ".csv":
 | 
				
			||||||
 | 
					                    return "text/csv";
 | 
				
			||||||
 | 
					                case ".pdf":
 | 
				
			||||||
 | 
					                    return "application/pdf";
 | 
				
			||||||
 | 
					                case ".docx":
 | 
				
			||||||
 | 
					                case ".doc":
 | 
				
			||||||
 | 
					                    return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
 | 
				
			||||||
 | 
					                case ".xlsx":
 | 
				
			||||||
 | 
					                case ".xls":
 | 
				
			||||||
 | 
					                    return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
 | 
				
			||||||
 | 
					                // Add more cases as needed
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return "application/octet-stream";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
        /// Delete an existing attachment.
 | 
					        /// Delete an existing attachment.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [HttpDelete("attachments/{id}")]
 | 
					        [HttpDelete("attachments/{id}")]
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,8 @@ namespace DamageAssesment.Api.Attachments.Interfaces
 | 
				
			|||||||
        List<Models.Attachment> UploadAttachment(int responseId,int answerId, int counter, List<IFormFile> postedFile);
 | 
					        List<Models.Attachment> UploadAttachment(int responseId,int answerId, int counter, List<IFormFile> postedFile);
 | 
				
			||||||
        List<Models.Attachment> UploadAttachment(int responseId, int counter, List<AnswerInfo> answers);
 | 
					        List<Models.Attachment> UploadAttachment(int responseId, int counter, List<AnswerInfo> answers);
 | 
				
			||||||
        public List<Models.Attachment> UpdateAttachments(int responseId, List<AnswerInfo> answers, IEnumerable<Models.Attachment> attachments);
 | 
					        public List<Models.Attachment> UpdateAttachments(int responseId, List<AnswerInfo> answers, IEnumerable<Models.Attachment> attachments);
 | 
				
			||||||
 | 
					        Task<byte[]> DownloadFile(string path);
 | 
				
			||||||
 | 
					        Task<string> GetFile(string path);
 | 
				
			||||||
        void Deletefile(string path);
 | 
					        void Deletefile(string path);
 | 
				
			||||||
        void Movefile(string path);
 | 
					        void Movefile(string path);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -24,6 +24,41 @@ namespace DamageAssesment.Api.Attachments.Providers
 | 
				
			|||||||
            uploadpath = configuration.GetValue<string>("Fileupload:folderpath");
 | 
					            uploadpath = configuration.GetValue<string>("Fileupload:folderpath");
 | 
				
			||||||
            Deletepath = configuration.GetValue<string>("Fileupload:Deletepath");
 | 
					            Deletepath = configuration.GetValue<string>("Fileupload:Deletepath");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<string> GetFile(string path)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (System.IO.File.Exists(path))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return path;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return null; // File not found
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // Handle or log the exception as needed
 | 
				
			||||||
 | 
					                throw;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<byte[]> DownloadFile(string path)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (System.IO.File.Exists(path))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return await System.IO.File.ReadAllBytesAsync(path);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return null; // File not found
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // Handle or log the exception as needed
 | 
				
			||||||
 | 
					                throw;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public List<Models.Attachment> UploadAttachment(int responseId,int answerId,int counter, List<IFormFile> postedFile)
 | 
					        public List<Models.Attachment> UploadAttachment(int responseId,int answerId,int counter, List<IFormFile> postedFile)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), uploadpath);
 | 
					            var pathToSave = Path.Combine(Directory.GetCurrentDirectory(), uploadpath);
 | 
				
			||||||
 | 
				
			|||||||
@ -197,7 +197,29 @@ namespace DamageAssesment.Api.DocuLinks.Test
 | 
				
			|||||||
            var result = (NotFoundResult)await DocumentProvider.DeleteDocument(1);
 | 
					            var result = (NotFoundResult)await DocumentProvider.DeleteDocument(1);
 | 
				
			||||||
            Assert.Equal(404, result.StatusCode);
 | 
					            Assert.Equal(404, result.StatusCode);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact(DisplayName = "Update Document IsActive- Ok case")]
 | 
				
			||||||
 | 
					        public async Task UpdateDocumentAsync_ShouldReturnStatusCode200()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var mockDocumentService = new Mock<IDoculinkProvider>();
 | 
				
			||||||
 | 
					            var mockUploadService = new Mock<IUploadService>();
 | 
				
			||||||
 | 
					            var mockResponse = await MockData.getOkResponse(1);
 | 
				
			||||||
 | 
					            mockDocumentService.Setup(service => service.UpdateDocumentAsync(1,true)).ReturnsAsync(mockResponse);
 | 
				
			||||||
 | 
					            var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object);
 | 
				
			||||||
 | 
					            var result = (OkObjectResult)await DocumentProvider.UpdateIsActiveDocument(1,true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(200, result.StatusCode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact(DisplayName = "Update Document IsActive - NotFound case")]
 | 
				
			||||||
 | 
					        public async Task UpdateDocumentAsync_ShouldReturnStatusCode404()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var mockDocumentService = new Mock<IDoculinkProvider>();
 | 
				
			||||||
 | 
					            var mockUploadService = new Mock<IUploadService>();
 | 
				
			||||||
 | 
					            var mockResponse = await MockData.getNotFoundResponse();
 | 
				
			||||||
 | 
					            mockDocumentService.Setup(service => service.UpdateDocumentAsync(1,true)).ReturnsAsync(mockResponse);
 | 
				
			||||||
 | 
					            var DocumentProvider = new DoculinkController(mockDocumentService.Object, mockUploadService.Object);
 | 
				
			||||||
 | 
					            var result = (NotFoundResult)await DocumentProvider.UpdateIsActiveDocument(1,true);
 | 
				
			||||||
 | 
					            Assert.Equal(404, result.StatusCode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Link Type Test cases
 | 
					        // Link Type Test cases
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -13,11 +13,11 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        private readonly IDoculinkProvider documentsProvider;
 | 
					        private readonly IDoculinkProvider documentsProvider;
 | 
				
			||||||
        private readonly IUploadService uploadService;
 | 
					        private readonly IUploadService uploadService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public DoculinkController(IDoculinkProvider documentsProvider,IUploadService uploadService)
 | 
					        public DoculinkController(IDoculinkProvider documentsProvider, IUploadService uploadService)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            this.documentsProvider = documentsProvider;
 | 
					            this.documentsProvider = documentsProvider;
 | 
				
			||||||
            this.uploadService = uploadService; 
 | 
					            this.uploadService = uploadService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
@ -41,7 +41,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        [HttpGet]
 | 
					        [HttpGet]
 | 
				
			||||||
        [Route("doculinks/types/{id}")]
 | 
					        [Route("doculinks/types/{id}")]
 | 
				
			||||||
        [Route("doculinks/types/{id}/{language:alpha}")]
 | 
					        [Route("doculinks/types/{id}/{language:alpha}")]
 | 
				
			||||||
        public async Task<IActionResult> GetLinkTypeAsync(int id,string? language)
 | 
					        public async Task<IActionResult> GetLinkTypeAsync(int id, string? language)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = await this.documentsProvider.GetLinkTypeAsync(id, language);
 | 
					            var result = await this.documentsProvider.GetLinkTypeAsync(id, language);
 | 
				
			||||||
            if (result.IsSuccess)
 | 
					            if (result.IsSuccess)
 | 
				
			||||||
@ -55,11 +55,11 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [HttpPut]
 | 
					        [HttpPut]
 | 
				
			||||||
        [Route("doculinks/types/{id}")]
 | 
					        [Route("doculinks/types/{id}")]
 | 
				
			||||||
        public async Task<IActionResult> UpdateLinkType(int id,Models.LinkType linkType)
 | 
					        public async Task<IActionResult> UpdateLinkType(int id, Models.LinkType linkType)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (linkType != null)
 | 
					            if (linkType != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                var result = await this.documentsProvider.UpdateLinkTypeAsync(id,linkType);
 | 
					                var result = await this.documentsProvider.UpdateLinkTypeAsync(id, linkType);
 | 
				
			||||||
                if (result.IsSuccess)
 | 
					                if (result.IsSuccess)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return Ok(result.LinkType);
 | 
					                    return Ok(result.LinkType);
 | 
				
			||||||
@ -104,6 +104,80 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
            return NotFound();
 | 
					            return NotFound();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// download an existing attachment.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        [HttpGet("doculinks/download/{id}")]
 | 
				
			||||||
 | 
					        public async Task<IActionResult> downloadfile(int id)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var result = await this.documentsProvider.GetDownloadAttachmentAsync(id);
 | 
				
			||||||
 | 
					                if (!result.IsSuccess)
 | 
				
			||||||
 | 
					                    return NotFound();
 | 
				
			||||||
 | 
					                string path = await uploadService.GetFile(result.DoculinkAttachments.Path);
 | 
				
			||||||
 | 
					                if (path == null)
 | 
				
			||||||
 | 
					                    return NotFound();
 | 
				
			||||||
 | 
					                var contentType = GetContentType(result.DoculinkAttachments.docName);
 | 
				
			||||||
 | 
					                if (contentType == "application/octet-stream")
 | 
				
			||||||
 | 
					                    return PhysicalFile(path, contentType, result.DoculinkAttachments.docName);
 | 
				
			||||||
 | 
					                return PhysicalFile(path, contentType, enableRangeProcessing: true);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // Handle the exception here or log it
 | 
				
			||||||
 | 
					                return StatusCode(500, "An error occurred: " + ex.Message);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            //try
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    var result = await this.documentsProvider.GetDownloadAttachmentAsync(id);
 | 
				
			||||||
 | 
					            //    if (!result.IsSuccess)
 | 
				
			||||||
 | 
					            //        return NotFound();
 | 
				
			||||||
 | 
					            //    byte[] fileContent = await uploadService.DownloadFile(result.DoculinkAttachments.Path);
 | 
				
			||||||
 | 
					            //    if (fileContent == null || fileContent.Length == 0)
 | 
				
			||||||
 | 
					            //        return NotFound();
 | 
				
			||||||
 | 
					            //    var contentType = "application/octet-stream";
 | 
				
			||||||
 | 
					            //    return File(fileContent, contentType, result.DoculinkAttachments.docName);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					            //catch (Exception ex)
 | 
				
			||||||
 | 
					            //{
 | 
				
			||||||
 | 
					            //    // Handle the exception here or log it
 | 
				
			||||||
 | 
					            //    return StatusCode(500, "An error occurred: " + ex.Message);
 | 
				
			||||||
 | 
					            //}
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        private string GetContentType(string fileName)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            // You can add more content types based on the file extensions
 | 
				
			||||||
 | 
					            switch (Path.GetExtension(fileName).ToLower())
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                //case ".txt":
 | 
				
			||||||
 | 
					                //    return "text/plain";
 | 
				
			||||||
 | 
					                case ".jpg":
 | 
				
			||||||
 | 
					                case ".jpeg":
 | 
				
			||||||
 | 
					                    return "image/jpeg";
 | 
				
			||||||
 | 
					                case ".png":
 | 
				
			||||||
 | 
					                    return "image/png";
 | 
				
			||||||
 | 
					                case ".gif":
 | 
				
			||||||
 | 
					                    return "image/gif";
 | 
				
			||||||
 | 
					                case ".bmp":
 | 
				
			||||||
 | 
					                    return "image/bmp";
 | 
				
			||||||
 | 
					                case ".webp":
 | 
				
			||||||
 | 
					                    return "image/webp";
 | 
				
			||||||
 | 
					                case ".csv":
 | 
				
			||||||
 | 
					                    return "text/csv";
 | 
				
			||||||
 | 
					                case ".pdf":
 | 
				
			||||||
 | 
					                    return "application/pdf";
 | 
				
			||||||
 | 
					                case ".docx":
 | 
				
			||||||
 | 
					                case ".doc":
 | 
				
			||||||
 | 
					                    return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
 | 
				
			||||||
 | 
					                case ".xlsx":
 | 
				
			||||||
 | 
					                case ".xls":
 | 
				
			||||||
 | 
					                    return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
 | 
				
			||||||
 | 
					                // Add more cases as needed
 | 
				
			||||||
 | 
					                default:
 | 
				
			||||||
 | 
					                    return "application/octet-stream";
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
        /// Get all Doculink.
 | 
					        /// Get all Doculink.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        /// 
 | 
					        /// 
 | 
				
			||||||
@ -111,7 +185,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        [Route("doculinks/{linktype:alpha}")]
 | 
					        [Route("doculinks/{linktype:alpha}")]
 | 
				
			||||||
        [Route("doculinks/{linktype:alpha}/{language:alpha}")]
 | 
					        [Route("doculinks/{linktype:alpha}/{language:alpha}")]
 | 
				
			||||||
        [HttpGet]
 | 
					        [HttpGet]
 | 
				
			||||||
        public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language,bool? isactive)
 | 
					        public async Task<IActionResult> GetDocumentsAsync(string? linktype, string? language, bool? isactive)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, isactive);
 | 
					            var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, isactive);
 | 
				
			||||||
            if (result.IsSuccess)
 | 
					            if (result.IsSuccess)
 | 
				
			||||||
@ -129,7 +203,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        [HttpGet]
 | 
					        [HttpGet]
 | 
				
			||||||
        public async Task<IActionResult> GetDocumentsByActiveAsync(string? linktype, string? language)
 | 
					        public async Task<IActionResult> GetDocumentsByActiveAsync(string? linktype, string? language)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language,true);
 | 
					            var result = await this.documentsProvider.GetdocumentsByLinkAsync(linktype, language, true);
 | 
				
			||||||
            if (result.IsSuccess)
 | 
					            if (result.IsSuccess)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                return Ok(result.documents);
 | 
					                return Ok(result.documents);
 | 
				
			||||||
@ -158,7 +232,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        [Route("doculinks/{id}")]
 | 
					        [Route("doculinks/{id}")]
 | 
				
			||||||
        [Route("doculinks/{id}/{linktype:alpha}")]
 | 
					        [Route("doculinks/{id}/{linktype:alpha}")]
 | 
				
			||||||
        [Route("doculinks/{id}/{linktype:alpha}/{language:alpha}")]
 | 
					        [Route("doculinks/{id}/{linktype:alpha}/{language:alpha}")]
 | 
				
			||||||
        public async Task<IActionResult> GetDocumentAsync(int id,string? linktype, string? language)
 | 
					        public async Task<IActionResult> GetDocumentAsync(int id, string? linktype, string? language)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            var result = await this.documentsProvider.GetDocumentAsync(id, linktype, language);
 | 
					            var result = await this.documentsProvider.GetDocumentAsync(id, linktype, language);
 | 
				
			||||||
            if (result.IsSuccess)
 | 
					            if (result.IsSuccess)
 | 
				
			||||||
@ -172,7 +246,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [HttpPut]
 | 
					        [HttpPut]
 | 
				
			||||||
        [Route("doculinks/{id}")]
 | 
					        [Route("doculinks/{id}")]
 | 
				
			||||||
        public async Task<IActionResult> UpdateDocument(int id,ReqDoculink documentInfo)
 | 
					        public async Task<IActionResult> UpdateDocument(int id, ReqDoculink documentInfo)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            if (documentInfo != null)
 | 
					            if (documentInfo != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
@ -180,7 +254,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
                if (dbdoc.IsSuccess)
 | 
					                if (dbdoc.IsSuccess)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var documents = await this.documentsProvider.GetDocumentCounter();
 | 
					                    var documents = await this.documentsProvider.GetDocumentCounter();
 | 
				
			||||||
                    Models.Doculink DocuLink= uploadService.UpdateDocuments(documents.counter,dbdoc.Document, documentInfo);
 | 
					                    Models.Doculink DocuLink = uploadService.UpdateDocuments(documents.counter, dbdoc.Document, documentInfo);
 | 
				
			||||||
                    var result = await this.documentsProvider.UpdateDocumentAsync(id, DocuLink);
 | 
					                    var result = await this.documentsProvider.UpdateDocumentAsync(id, DocuLink);
 | 
				
			||||||
                    if (result.IsSuccess)
 | 
					                    if (result.IsSuccess)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -193,6 +267,20 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
            return BadRequest(documentInfo);
 | 
					            return BadRequest(documentInfo);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// update existing doclink isactive field.
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        [HttpPut]
 | 
				
			||||||
 | 
					        [Route("doculinks/{id}/{isactive}")]
 | 
				
			||||||
 | 
					        public async Task<IActionResult> UpdateIsActiveDocument(int id, bool isactive)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var result = await this.documentsProvider.UpdateDocumentAsync(id, isactive);
 | 
				
			||||||
 | 
					            if (result.IsSuccess)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                return Ok(result.Document);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return NotFound();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
        /// Create new doclink.
 | 
					        /// Create new doclink.
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
        [HttpPost]
 | 
					        [HttpPost]
 | 
				
			||||||
@ -204,7 +292,7 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
                if (documentInfo != null)
 | 
					                if (documentInfo != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var documents = await this.documentsProvider.GetDocumentCounter();
 | 
					                    var documents = await this.documentsProvider.GetDocumentCounter();
 | 
				
			||||||
                    Models.Doculink DocuLink= uploadService.UploadDocument(documents.counter, documentInfo);
 | 
					                    Models.Doculink DocuLink = uploadService.UploadDocument(documents.counter, documentInfo);
 | 
				
			||||||
                    var result = await this.documentsProvider.PostDocumentAsync(DocuLink);
 | 
					                    var result = await this.documentsProvider.PostDocumentAsync(DocuLink);
 | 
				
			||||||
                    if (result.IsSuccess)
 | 
					                    if (result.IsSuccess)
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
@ -239,6 +327,6 @@ namespace DamageAssesment.Api.DocuLinks.Controllers
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            return NotFound();
 | 
					            return NotFound();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ namespace DamageAssesment.Api.DocuLinks.Interfaces
 | 
				
			|||||||
        Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetdocumentsByLinkTypeIdAsync(int? linkTypeId, string? language, bool? isactive);
 | 
					        Task<(bool IsSuccess, IEnumerable<Models.ResDoculink> documents, string ErrorMessage)> GetdocumentsByLinkTypeIdAsync(int? linkTypeId, string? language, bool? isactive);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document);
 | 
					        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> PostDocumentAsync(Models.Doculink Document);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, Models.Doculink Document);
 | 
					        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, Models.Doculink Document);
 | 
				
			||||||
 | 
					        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id, bool isactive);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id);
 | 
					        Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id);
 | 
				
			||||||
        Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter();
 | 
					        Task<(bool IsSuccess, int counter, string message)> GetDocumentCounter();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,8 @@ namespace DamageAssesment.Api.DocuLinks.Interfaces
 | 
				
			|||||||
        Models.Doculink UploadDocument( int counter, ReqDoculink documentInfo);
 | 
					        Models.Doculink UploadDocument( int counter, ReqDoculink documentInfo);
 | 
				
			||||||
        public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo);
 | 
					        public Models.Doculink UpdateDocuments(int counter, Models.Doculink document, ReqDoculink documentInfo);
 | 
				
			||||||
        void Deletefile(string path);
 | 
					        void Deletefile(string path);
 | 
				
			||||||
 | 
					        Task<byte[]> DownloadFile(string path);
 | 
				
			||||||
 | 
					        Task<string> GetFile(string path);
 | 
				
			||||||
        void Movefile(string path);
 | 
					        void Movefile(string path);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -7,6 +7,7 @@ namespace DamageAssesment.Api.DocuLinks.Models
 | 
				
			|||||||
        public int Id { get; set; }
 | 
					        public int Id { get; set; }
 | 
				
			||||||
        public int linkTypeId { get; set; }
 | 
					        public int linkTypeId { get; set; }
 | 
				
			||||||
        public List<DoculinkTranslation> documentsTranslations { get; set; }
 | 
					        public List<DoculinkTranslation> documentsTranslations { get; set; }
 | 
				
			||||||
 | 
					        public bool IsActive { get; set; }
 | 
				
			||||||
        public int CustomOrder { get; set; }
 | 
					        public int CustomOrder { get; set; }
 | 
				
			||||||
        public List<FileModel>? Files { get; set; }
 | 
					        public List<FileModel>? Files { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -414,6 +414,35 @@ namespace DamageAssesment.Api.DocuLinks.Providers
 | 
				
			|||||||
                return (false, null, ex.Message);
 | 
					                return (false, null, ex.Message);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> UpdateDocumentAsync(int id,bool isactive)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Db.Doculink Document = DocumentDbContext.Documents.AsNoTracking().Where(a => a.Id == id).FirstOrDefault();
 | 
				
			||||||
 | 
					                if (Document == null)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return (false, null, "Not Found");
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                Document.IsActive = isactive;
 | 
				
			||||||
 | 
					                DocumentDbContext.Documents.Update(Document);
 | 
				
			||||||
 | 
					                DocumentDbContext.SaveChanges();
 | 
				
			||||||
 | 
					                var result = mapper.Map<Db.Doculink, Models.ResDoculink>(Document);
 | 
				
			||||||
 | 
					                var multilan = CreateMultiLanguageObject(GetDocumentTranslations(Document.Id, ""));
 | 
				
			||||||
 | 
					                result.titles = multilan.titles;
 | 
				
			||||||
 | 
					                result.description = multilan.description;
 | 
				
			||||||
 | 
					                result.linktypes = CreateMultiLanguageLinkTypeObject(GetLinkTypeTranslations(result.linkTypeId, ""));
 | 
				
			||||||
 | 
					                result.doclinksAttachments = mapper.Map<List<Db.DoculinkAttachments>, List<Models.DoculinkAttachments>>(
 | 
				
			||||||
 | 
					                    DocumentDbContext.DoclinksAttachments.AsNoTracking().Where(a => a.DocumentId == id).ToList());
 | 
				
			||||||
 | 
					                return (true, result, $"DocumentId {id} deleted Successfuly");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                logger?.LogError(ex.ToString());
 | 
				
			||||||
 | 
					                return (false, null, ex.Message);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id)
 | 
					        public async Task<(bool IsSuccess, Models.ResDoculink Document, string ErrorMessage)> DeleteDocumentAsync(int id)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -25,6 +25,32 @@ namespace DamageAssesment.Api.DocuLinks.Providers
 | 
				
			|||||||
            uploadpath = configuration.GetValue<string>("Fileupload:folderpath");
 | 
					            uploadpath = configuration.GetValue<string>("Fileupload:folderpath");
 | 
				
			||||||
            Deletepath = configuration.GetValue<string>("Fileupload:Deletepath");
 | 
					            Deletepath = configuration.GetValue<string>("Fileupload:Deletepath");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<string> GetFile(string path)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (System.IO.File.Exists(path))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return path;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return null; // File not found
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                // Handle or log the exception as needed
 | 
				
			||||||
 | 
					                throw;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<byte[]> DownloadFile(string path)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                if (System.IO.File.Exists(path))
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return await System.IO.File.ReadAllBytesAsync(path);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public Models.Doculink UploadDocument(int counter, ReqDoculink documentInfo)
 | 
					        public Models.Doculink UploadDocument(int counter, ReqDoculink documentInfo)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
@ -56,7 +82,8 @@ namespace DamageAssesment.Api.DocuLinks.Providers
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                Documents=new Models.Doculink (){ linkTypeId = documentInfo.linkTypeId,
 | 
					                Documents=new Models.Doculink (){ linkTypeId = documentInfo.linkTypeId,
 | 
				
			||||||
                    documentsTranslations = documentInfo.documentsTranslations,doclinksAttachments=attachments,
 | 
					                    documentsTranslations = documentInfo.documentsTranslations,doclinksAttachments=attachments,
 | 
				
			||||||
                    IsDeleted=false,CustomOrder=documentInfo.CustomOrder, IsActive =true};
 | 
					                    IsDeleted=false,CustomOrder=documentInfo.CustomOrder, IsActive =documentInfo.IsActive
 | 
				
			||||||
 | 
					                };
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
                return Documents;
 | 
					                return Documents;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -99,7 +126,7 @@ namespace DamageAssesment.Api.DocuLinks.Providers
 | 
				
			|||||||
                    Id = documentInfo.Id,
 | 
					                    Id = documentInfo.Id,
 | 
				
			||||||
                    linkTypeId = documentInfo.linkTypeId,
 | 
					                    linkTypeId = documentInfo.linkTypeId,
 | 
				
			||||||
                    documentsTranslations=documentInfo.documentsTranslations,
 | 
					                    documentsTranslations=documentInfo.documentsTranslations,
 | 
				
			||||||
                    IsActive = true,
 | 
					                    IsActive = documentInfo.IsActive,
 | 
				
			||||||
                    IsDeleted=false,
 | 
					                    IsDeleted=false,
 | 
				
			||||||
                    CustomOrder = documentInfo.CustomOrder,
 | 
					                    CustomOrder = documentInfo.CustomOrder,
 | 
				
			||||||
                    doclinksAttachments = attachments
 | 
					                    doclinksAttachments = attachments
 | 
				
			||||||
 | 
				
			|||||||
@ -21,6 +21,10 @@ namespace DamageAssesment.Api.Locations.Db
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        [StringLength(2)]
 | 
					        [StringLength(2)]
 | 
				
			||||||
        public string SchoolType { get; set; }
 | 
					        public string SchoolType { get; set; }
 | 
				
			||||||
 | 
					        public int? DataValue { get; set; }
 | 
				
			||||||
 | 
					        public int? Enrollment { get; set; }
 | 
				
			||||||
 | 
					        public double? Longitute { get; set; }
 | 
				
			||||||
 | 
					        public double? Latitude { get; set; }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,5 +11,9 @@ namespace DamageAssesment.Api.Locations.Models
 | 
				
			|||||||
        public string Name { get; set; }
 | 
					        public string Name { get; set; }
 | 
				
			||||||
        public string MaintenanceCenter { get; set; }
 | 
					        public string MaintenanceCenter { get; set; }
 | 
				
			||||||
        public string SchoolType { get; set; }
 | 
					        public string SchoolType { get; set; }
 | 
				
			||||||
 | 
					        public int? DataValue { get; set; }
 | 
				
			||||||
 | 
					        public int? Enrollment { get; set; }
 | 
				
			||||||
 | 
					        public double? Longitute { get; set; }
 | 
				
			||||||
 | 
					        public double? Latitude { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -17,7 +17,7 @@ namespace DamageAssesment.Api.Locations.Providers
 | 
				
			|||||||
            this.locationDbContext = locationDbContext;
 | 
					            this.locationDbContext = locationDbContext;
 | 
				
			||||||
            this.logger = logger;
 | 
					            this.logger = logger;
 | 
				
			||||||
            this.mapper = mapper;
 | 
					            this.mapper = mapper;
 | 
				
			||||||
          //  SeedData();
 | 
					            //  SeedData();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        public async Task<(bool IsSuccess, IEnumerable<Models.Location> Locations, string ErrorMessage)> GetLocationsAsync()
 | 
					        public async Task<(bool IsSuccess, IEnumerable<Models.Location> Locations, string ErrorMessage)> GetLocationsAsync()
 | 
				
			||||||
@ -28,6 +28,8 @@ namespace DamageAssesment.Api.Locations.Providers
 | 
				
			|||||||
                var locations = await locationDbContext.Locations.AsNoTracking().ToListAsync();
 | 
					                var locations = await locationDbContext.Locations.AsNoTracking().ToListAsync();
 | 
				
			||||||
                if (locations != null)
 | 
					                if (locations != null)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
					                    int maxenrollment = (int)locations.Max(a => a.Enrollment);
 | 
				
			||||||
 | 
					                    foreach (Db.Location item in locations) { item.DataValue = GetHeatmapdata(item.Enrollment, maxenrollment); }
 | 
				
			||||||
                    logger?.LogInformation($"{locations.Count} Locations(s) found");
 | 
					                    logger?.LogInformation($"{locations.Count} Locations(s) found");
 | 
				
			||||||
                    var result = mapper.Map<IEnumerable<Db.Location>, IEnumerable<Models.Location>>(locations);
 | 
					                    var result = mapper.Map<IEnumerable<Db.Location>, IEnumerable<Models.Location>>(locations);
 | 
				
			||||||
                    return (true, result, null);
 | 
					                    return (true, result, null);
 | 
				
			||||||
@ -46,9 +48,12 @@ namespace DamageAssesment.Api.Locations.Providers
 | 
				
			|||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                logger?.LogInformation("Query Location");
 | 
					                logger?.LogInformation("Query Location");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                int maxenrollment = (int)await locationDbContext.Locations.AsNoTracking().MaxAsync(a => a.Enrollment);
 | 
				
			||||||
                var location = await locationDbContext.Locations.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id);
 | 
					                var location = await locationDbContext.Locations.AsNoTracking().FirstOrDefaultAsync(q => q.Id == Id);
 | 
				
			||||||
                if (location != null)
 | 
					                if (location != null)
 | 
				
			||||||
                {
 | 
					                {if(maxenrollment>0)
 | 
				
			||||||
 | 
					                        location.DataValue = GetHeatmapdata(location.Enrollment, maxenrollment);
 | 
				
			||||||
                    logger?.LogInformation($"{location}  found");
 | 
					                    logger?.LogInformation($"{location}  found");
 | 
				
			||||||
                    var result = mapper.Map<Db.Location, Models.Location>(location);
 | 
					                    var result = mapper.Map<Db.Location, Models.Location>(location);
 | 
				
			||||||
                    return (true, result, null);
 | 
					                    return (true, result, null);
 | 
				
			||||||
@ -61,6 +66,10 @@ namespace DamageAssesment.Api.Locations.Providers
 | 
				
			|||||||
                return (false, null, ex.Message);
 | 
					                return (false, null, ex.Message);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        private int GetHeatmapdata(int? enrollment,int maxenrollment)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            return (enrollment != null ? enrollment.Value : 0) * 100 / maxenrollment;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> PostLocationAsync(Models.Location location)
 | 
					        public async Task<(bool IsSuccess, Models.Location Location, string ErrorMessage)> PostLocationAsync(Models.Location location)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
@ -139,9 +148,9 @@ namespace DamageAssesment.Api.Locations.Providers
 | 
				
			|||||||
        {
 | 
					        {
 | 
				
			||||||
            if (!locationDbContext.Locations.Any())
 | 
					            if (!locationDbContext.Locations.Any())
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "0091", RegionId = 5, Name = "BOB GRAHAM EDUCATION CENTER", MaintenanceCenter = "1", SchoolType = "K8" });
 | 
					                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "0091", RegionId = 5, Name = "BOB GRAHAM EDUCATION CENTER", MaintenanceCenter = "1", SchoolType = "K8", DataValue = 25,Enrollment=780,Latitude= 25.83604,Longitute= -80.21618 });
 | 
				
			||||||
                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "0092", RegionId = 1, Name = "NORMAN S. EDELCUP/SUNNY ISLES BEACH K-8", MaintenanceCenter = "1", SchoolType = "K8" });
 | 
					                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "0092", RegionId = 1, Name = "NORMAN S. EDELCUP/SUNNY ISLES BEACH K-8", MaintenanceCenter = "1", SchoolType = "K8", DataValue = 46, Enrollment = 650, Latitude = 20.83604, Longitute = -40.21618 });
 | 
				
			||||||
                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "7511", RegionId = 4, Name = "MIAMI SPRINGS SHS", MaintenanceCenter = "2", SchoolType = "S" });
 | 
					                locationDbContext.Locations.Add(new Db.Location() { LocationCode = "7511", RegionId = 4, Name = "MIAMI SPRINGS SHS", MaintenanceCenter = "2", SchoolType = "S", DataValue = 12, Enrollment = 500, Latitude = 53.83604, Longitute = -60.21618 });
 | 
				
			||||||
                //locationDbContext.Locations.Add(new Db.Location() { Id = 3, LocationCode = "Loc3", RegionId = 3, Name = "BOB GRAHAM EDUCATION CENTER 3", MaintenanceCenter = "1", SchoolType = "US" });
 | 
					                //locationDbContext.Locations.Add(new Db.Location() { Id = 3, LocationCode = "Loc3", RegionId = 3, Name = "BOB GRAHAM EDUCATION CENTER 3", MaintenanceCenter = "1", SchoolType = "US" });
 | 
				
			||||||
                //locationDbContext.Locations.Add(new Db.Location() { Id = 4, LocationCode = "Loc4", RegionId = 1, Name = "BOB GRAHAM EDUCATION CENTER 4", MaintenanceCenter = "1", SchoolType = "US" });
 | 
					                //locationDbContext.Locations.Add(new Db.Location() { Id = 4, LocationCode = "Loc4", RegionId = 1, Name = "BOB GRAHAM EDUCATION CENTER 4", MaintenanceCenter = "1", SchoolType = "US" });
 | 
				
			||||||
                //locationDbContext.Locations.Add(new Db.Location() { Id = 5, LocationCode = "Loc5", RegionId = 2, Name = "BOB GRAHAM EDUCATION CENTER 5", MaintenanceCenter = "1", SchoolType = "US" });
 | 
					                //locationDbContext.Locations.Add(new Db.Location() { Id = 5, LocationCode = "Loc5", RegionId = 2, Name = "BOB GRAHAM EDUCATION CENTER 5", MaintenanceCenter = "1", SchoolType = "US" });
 | 
				
			||||||
 | 
				
			|||||||
@ -89,6 +89,26 @@ namespace DamageAssesment.Api.Questions.Controllers
 | 
				
			|||||||
            return CreatedAtRoute("DefaultApi", new { id = question.Id }, question);
 | 
					            return CreatedAtRoute("DefaultApi", new { id = question.Id }, question);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        /// <summary>
 | 
					        /// <summary>
 | 
				
			||||||
 | 
					        /// POST request for creating a multiple question (multilingual).
 | 
				
			||||||
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					        [HttpPost("questions/multiple")]
 | 
				
			||||||
 | 
					        public async Task<IActionResult> CreateQuestions(List<Models.Question> questions)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            if (questions != null)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                var result = await this.questionsProvider.PostQuestionsAsync(questions);
 | 
				
			||||||
 | 
					                if (result.IsSuccess)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    return Ok(result.Question);
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                if (result.ErrorMessage == "Not Found")
 | 
				
			||||||
 | 
					                    return NotFound(result.ErrorMessage);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                return BadRequest(result.ErrorMessage);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return CreatedAtRoute("DefaultApi",questions);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        /// <summary>
 | 
				
			||||||
        /// POST request for creating a new question (multilingual).
 | 
					        /// POST request for creating a new question (multilingual).
 | 
				
			||||||
        /// </summary>
 | 
					        /// </summary>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,7 @@ namespace DamageAssesment.Api.Questions.Interfaces
 | 
				
			|||||||
        Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language);
 | 
					        Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Questions, string ErrorMessage)> GetQuestionsAsync(string language);
 | 
				
			||||||
        Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language);
 | 
					        Task<(bool IsSuccess, List<SurveyQuestions> SurveyQuestions, string ErrorMessage)> GetSurveyQuestionAsync(int surveyId,string language);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
 | 
					        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> PostQuestionAsync(Models.Question Question);
 | 
				
			||||||
 | 
					        Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Question, string ErrorMessage)> PostQuestionsAsync(List<Models.Question> Questions);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
 | 
					        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question);
 | 
				
			||||||
        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id);
 | 
					        Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> DeleteQuestionAsync(int id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -334,16 +334,7 @@ namespace DamageAssesment.Api.Questions.Providers
 | 
				
			|||||||
            try
 | 
					            try
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                logger?.LogInformation("Query Question");
 | 
					                logger?.LogInformation("Query Question");
 | 
				
			||||||
                var dbquestion = mapper.Map<Models.Question, Db.Question>(Question);
 | 
					                var result = InsertQuestion(Question);
 | 
				
			||||||
                var dbquestiontranslation = mapper.Map<List<Models.QuestionsTranslation>, List<Db.QuestionsTranslation>>(Question.Questions);
 | 
					 | 
				
			||||||
                dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault();
 | 
					 | 
				
			||||||
                questionDbContext.Questions.Add(dbquestion);
 | 
					 | 
				
			||||||
                dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
 | 
					 | 
				
			||||||
                questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
 | 
					 | 
				
			||||||
                questionDbContext.SaveChanges();
 | 
					 | 
				
			||||||
                Question.Id = dbquestion.Id;
 | 
					 | 
				
			||||||
                var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion);
 | 
					 | 
				
			||||||
                result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id,""));
 | 
					 | 
				
			||||||
                return (true, result, null);
 | 
					                return (true, result, null);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            catch (Exception ex)
 | 
					            catch (Exception ex)
 | 
				
			||||||
@ -352,6 +343,39 @@ namespace DamageAssesment.Api.Questions.Providers
 | 
				
			|||||||
                return (false, null, ex.Message);
 | 
					                return (false, null, ex.Message);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        private Models.MultiLanguage InsertQuestion(Models.Question Question)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var dbquestion = mapper.Map<Models.Question, Db.Question>(Question);
 | 
				
			||||||
 | 
					            var dbquestiontranslation = mapper.Map<List<Models.QuestionsTranslation>, List<Db.QuestionsTranslation>>(Question.Questions);
 | 
				
			||||||
 | 
					            dbquestion.QuestionTypeId = questionDbContext.QuestionTypes.Where(a => a.TypeText == Question.TypeText).Select(a => a.Id).FirstOrDefault();
 | 
				
			||||||
 | 
					            questionDbContext.Questions.Add(dbquestion);
 | 
				
			||||||
 | 
					            questionDbContext.SaveChanges();
 | 
				
			||||||
 | 
					            dbquestiontranslation.ForEach(i => i.QuestionId = dbquestion.Id);
 | 
				
			||||||
 | 
					            questionDbContext.QuestionsTranslations.AddRange(dbquestiontranslation);
 | 
				
			||||||
 | 
					            questionDbContext.SaveChanges();
 | 
				
			||||||
 | 
					            Question.Id = dbquestion.Id;
 | 
				
			||||||
 | 
					            var result = mapper.Map<Db.Question, Models.MultiLanguage>(dbquestion);
 | 
				
			||||||
 | 
					            result.Text = CreateMultiLanguageObject(GetQuestionsTranslations(result.Id, ""));
 | 
				
			||||||
 | 
					            return result;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        public async Task<(bool IsSuccess, IEnumerable<Models.MultiLanguage> Question, string ErrorMessage)> PostQuestionsAsync(List<Models.Question> Questions)
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            try
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                List<Models.MultiLanguage> results = new List<MultiLanguage>();
 | 
				
			||||||
 | 
					               logger?.LogInformation("Query Question");
 | 
				
			||||||
 | 
					                foreach (Models.Question Question in Questions)
 | 
				
			||||||
 | 
					                {
 | 
				
			||||||
 | 
					                    results.Add(InsertQuestion(Question));
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                return (true, results, null);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            catch (Exception ex)
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                logger?.LogError(ex.ToString());
 | 
				
			||||||
 | 
					                return (false, null, ex.Message);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
 | 
					        public async Task<(bool IsSuccess, Models.MultiLanguage Question, string ErrorMessage)> UpdateQuestionAsync(Models.Question Question)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            try
 | 
					            try
 | 
				
			||||||
 | 
				
			|||||||
@ -75,8 +75,19 @@ namespace DamageAssesment.Api.Questions.Test
 | 
				
			|||||||
            return new Questions.Models.Question { Id = 1, Questions=QuestionsTranslations, TypeText = "Text 1", SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId=1};
 | 
					            return new Questions.Models.Question { Id = 1, Questions=QuestionsTranslations, TypeText = "Text 1", SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId=1};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        public static async Task<List<Questions.Models.Question>> getInputQuestionsData()
 | 
				
			||||||
   
 | 
					        {
 | 
				
			||||||
 | 
					            Models.QuestionsTranslation QuestionsTranslation = new Models.QuestionsTranslation()
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                Language = "en",
 | 
				
			||||||
 | 
					                QuestionText = "Sample question"
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
 | 
					            List<Models.QuestionsTranslation> QuestionsTranslations = new List<Models.QuestionsTranslation>();
 | 
				
			||||||
 | 
					            List<Models.Question> Questions = new List<Models.Question>();
 | 
				
			||||||
 | 
					            QuestionsTranslations.Add(QuestionsTranslation);
 | 
				
			||||||
 | 
					            Questions.Models.Question question = new Questions.Models.Question() { Id = 1, Questions = QuestionsTranslations, TypeText = "Text 1", SurveyId = 1, QuestionNumber = 1, IsRequired = true, Comment = false, Key = true, CategoryId = 1 };
 | 
				
			||||||
 | 
					              Questions.Add(question);
 | 
				
			||||||
 | 
					            return Questions;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -110,6 +110,33 @@ namespace DamageAssesment.Api.Questions.Test
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            Assert.Equal(400, result.StatusCode);
 | 
					            Assert.Equal(400, result.StatusCode);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        [Fact(DisplayName = "Post Questions - Ok case")]
 | 
				
			||||||
 | 
					        public async Task PostQuestionsAsync_ShouldReturnStatusCode200()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var mockQuestionService = new Mock<IQuestionsProvider>();
 | 
				
			||||||
 | 
					            var mockResponse = await MockData.getOkResponse();
 | 
				
			||||||
 | 
					            var mockInputQuestion = await MockData.getInputQuestionsData();
 | 
				
			||||||
 | 
					            mockQuestionService.Setup(service => service.PostQuestionsAsync(mockInputQuestion)).ReturnsAsync(mockResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var QuestionProvider = new QuestionsController(mockQuestionService.Object);
 | 
				
			||||||
 | 
					            var result = (OkObjectResult)await QuestionProvider.CreateQuestions(mockInputQuestion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(200, result.StatusCode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        [Fact(DisplayName = "Post Questions - BadRequest case")]
 | 
				
			||||||
 | 
					        public async Task PostQuestionsAsync_ShouldReturnStatusCode400()
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            var mockQuestionService = new Mock<IQuestionsProvider>();
 | 
				
			||||||
 | 
					            var mockInputQuestion = await MockData.getInputQuestionData();
 | 
				
			||||||
 | 
					            var mockResponse = await MockData.getBadRequestResponse();
 | 
				
			||||||
 | 
					            mockQuestionService.Setup(service => service.UpdateQuestionAsync(mockInputQuestion)).ReturnsAsync(mockResponse);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            var QuestionProvider = new QuestionsController(mockQuestionService.Object);
 | 
				
			||||||
 | 
					            var result = (BadRequestObjectResult)await QuestionProvider.UpdateQuestion(mockInputQuestion);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            Assert.Equal(400, result.StatusCode);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        [Fact(DisplayName = "Put Question - Ok case")]
 | 
					        [Fact(DisplayName = "Put Question - Ok case")]
 | 
				
			||||||
        public async Task PutQuestionAsync_ShouldReturnStatusCode200()
 | 
					        public async Task PutQuestionAsync_ShouldReturnStatusCode200()
 | 
				
			||||||
 | 
				
			|||||||
@ -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);
 | 
				
			||||||
 | 
				
			|||||||
@ -8,5 +8,9 @@
 | 
				
			|||||||
        public string Name { get; set; }
 | 
					        public string Name { get; set; }
 | 
				
			||||||
        public string MaintenanceCenter { get; set; }
 | 
					        public string MaintenanceCenter { get; set; }
 | 
				
			||||||
        public string SchoolType { get; set; }
 | 
					        public string SchoolType { get; set; }
 | 
				
			||||||
 | 
					        public int? DataValue { get; set; }
 | 
				
			||||||
 | 
					        public int? Enrollment { get; set; }
 | 
				
			||||||
 | 
					        public double? Longitute { get; set; }
 | 
				
			||||||
 | 
					        public double? Latitude { get; set; }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -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.");
 | 
				
			||||||
@ -512,17 +512,19 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                var allQuestions = await questionServiceProvider.getQuestionsAsync(null);
 | 
					                var allQuestions = await questionServiceProvider.getQuestionsAsync(null);
 | 
				
			||||||
                var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId);
 | 
					                var questions = allQuestions.Where(s => s.SurveyId == surveyResponse.SurveyId);
 | 
				
			||||||
                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
					                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
				
			||||||
 | 
					                var Locations = await locationServiceProvider.getLocationsAsync();
 | 
				
			||||||
                var result = new
 | 
					                var location = Locations.Where(a => a.Id == surveyResponse.LocationId).FirstOrDefault();
 | 
				
			||||||
                {
 | 
					                var result = new{
 | 
				
			||||||
                    surveyResponse.Id,
 | 
					                    surveyResponse.Id,
 | 
				
			||||||
                    surveyResponse.SurveyId,
 | 
					                    surveyResponse.SurveyId,
 | 
				
			||||||
                    surveyResponse.LocationId,
 | 
					                    surveyResponse.LocationId,
 | 
				
			||||||
                    surveyResponse.EmployeeId,
 | 
					                    surveyResponse.EmployeeId,
 | 
				
			||||||
                    surveyResponse.ClientDevice,
 | 
					                    surveyResponse.ClientDevice,
 | 
				
			||||||
                    surveyResponse.KeyAnswerResult,
 | 
					                    surveyResponse.KeyAnswerResult,
 | 
				
			||||||
                    surveyResponse.Longitute,
 | 
					                    DataValue=(location!=null?location.DataValue:0),
 | 
				
			||||||
                    surveyResponse.Latitude,
 | 
					                    Enrollment= (location != null ? location.Enrollment : 0),
 | 
				
			||||||
 | 
					                    Longitute = (location != null ? location.Longitute : surveyResponse.Longitute),
 | 
				
			||||||
 | 
					                    Latitude=(location != null ? location.Latitude : surveyResponse.Latitude),
 | 
				
			||||||
                    Employee = employee,
 | 
					                    Employee = employee,
 | 
				
			||||||
                    answers = from ans in answers
 | 
					                    answers = from ans in answers
 | 
				
			||||||
                              select new
 | 
					                              select new
 | 
				
			||||||
@ -566,6 +568,7 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
                var answers = await answerServiceProvider.getAnswersAsync();
 | 
					                var answers = await answerServiceProvider.getAnswersAsync();
 | 
				
			||||||
                var questions = await questionServiceProvider.getQuestionsAsync(null);
 | 
					                var questions = await questionServiceProvider.getQuestionsAsync(null);
 | 
				
			||||||
 | 
					                var Locations = await locationServiceProvider.getLocationsAsync();
 | 
				
			||||||
                var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
 | 
					                var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                //var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId);
 | 
					                //var surveyQuestions = await questionServiceProvider.getSurveyQuestionsAsync(surveyId);
 | 
				
			||||||
@ -575,6 +578,7 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                if (employeeid == 0)
 | 
					                if (employeeid == 0)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    var result = from r in surveyResonses
 | 
					                    var result = from r in surveyResonses
 | 
				
			||||||
 | 
					                                 join loc in Locations on r.LocationId equals loc.Id
 | 
				
			||||||
                                 select new
 | 
					                                 select new
 | 
				
			||||||
                                 {
 | 
					                                 {
 | 
				
			||||||
                                     r.Id,
 | 
					                                     r.Id,
 | 
				
			||||||
@ -583,8 +587,10 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                                     r.EmployeeId,
 | 
					                                     r.EmployeeId,
 | 
				
			||||||
                                     r.ClientDevice,
 | 
					                                     r.ClientDevice,
 | 
				
			||||||
                                     r.KeyAnswerResult,
 | 
					                                     r.KeyAnswerResult,
 | 
				
			||||||
                                     r.Longitute,
 | 
					                                     loc.DataValue,
 | 
				
			||||||
                                     r.Latitude,
 | 
					                                     loc.Enrollment,
 | 
				
			||||||
 | 
					                                     loc.Longitute,
 | 
				
			||||||
 | 
					                                     loc.Latitude,
 | 
				
			||||||
                                     Employee = (from e in employees where e.Id == r.EmployeeId select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
					                                     Employee = (from e in employees where e.Id == r.EmployeeId select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
				
			||||||
                                     answers = from ans in answers
 | 
					                                     answers = from ans in answers
 | 
				
			||||||
                                               where ans.SurveyResponseId == r.Id
 | 
					                                               where ans.SurveyResponseId == r.Id
 | 
				
			||||||
@ -609,6 +615,7 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                        _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber };
 | 
					                        _employee = new { employee.Id, employee.Name, employee.BirthDate, employee.Email, employee.OfficePhoneNumber };
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    var result = from r in surveyResonses
 | 
					                    var result = from r in surveyResonses
 | 
				
			||||||
 | 
					                                 join loc in Locations on r.LocationId equals loc.Id
 | 
				
			||||||
                                 select new
 | 
					                                 select new
 | 
				
			||||||
                                 {
 | 
					                                 {
 | 
				
			||||||
                                     r.Id,
 | 
					                                     r.Id,
 | 
				
			||||||
@ -617,8 +624,10 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                                     r.EmployeeId,
 | 
					                                     r.EmployeeId,
 | 
				
			||||||
                                     r.ClientDevice,
 | 
					                                     r.ClientDevice,
 | 
				
			||||||
                                     r.KeyAnswerResult,
 | 
					                                     r.KeyAnswerResult,
 | 
				
			||||||
                                     r.Longitute,
 | 
					                                     loc.DataValue,
 | 
				
			||||||
                                     r.Latitude,
 | 
					                                     loc.Enrollment,
 | 
				
			||||||
 | 
					                                     loc.Longitute,
 | 
				
			||||||
 | 
					                                     loc.Latitude,
 | 
				
			||||||
                                     Employee = _employee,
 | 
					                                     Employee = _employee,
 | 
				
			||||||
                                     answers = from ans in answers
 | 
					                                     answers = from ans in answers
 | 
				
			||||||
                                               where ans.SurveyResponseId == r.Id
 | 
					                                               where ans.SurveyResponseId == r.Id
 | 
				
			||||||
@ -674,7 +683,9 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                var questions = await questionServiceProvider.getQuestionsAsync(null);
 | 
					                var questions = await questionServiceProvider.getQuestionsAsync(null);
 | 
				
			||||||
                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
					                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                var Locations = await locationServiceProvider.getLocationsAsync();
 | 
				
			||||||
                var result = from r in surveyResonses
 | 
					                var result = from r in surveyResonses
 | 
				
			||||||
 | 
					                             join loc in Locations on r.LocationId equals loc.Id
 | 
				
			||||||
                             select new
 | 
					                             select new
 | 
				
			||||||
                             {
 | 
					                             {
 | 
				
			||||||
                                 r.Id,
 | 
					                                 r.Id,
 | 
				
			||||||
@ -683,8 +694,10 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                                 r.EmployeeId,
 | 
					                                 r.EmployeeId,
 | 
				
			||||||
                                 r.ClientDevice,
 | 
					                                 r.ClientDevice,
 | 
				
			||||||
                                 r.KeyAnswerResult,
 | 
					                                 r.KeyAnswerResult,
 | 
				
			||||||
                                 r.Longitute,
 | 
					                                 loc.DataValue,
 | 
				
			||||||
                                 r.Latitude,
 | 
					                                 loc.Enrollment,
 | 
				
			||||||
 | 
					                                 loc.Longitute,
 | 
				
			||||||
 | 
					                                 loc.Latitude,
 | 
				
			||||||
                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
					                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
				
			||||||
                                 answers = from ans in answers
 | 
					                                 answers = from ans in answers
 | 
				
			||||||
                                           where ans.SurveyResponseId == r.Id
 | 
					                                           where ans.SurveyResponseId == r.Id
 | 
				
			||||||
@ -709,13 +722,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 +739,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 +789,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 +804,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 +824,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 +837,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);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
@ -938,7 +951,9 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
 | 
					                var surveyQuestions = from q in questions where q.SurveyId == surveyId select q;
 | 
				
			||||||
                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
					                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                var Locations = await locationServiceProvider.getLocationsAsync();
 | 
				
			||||||
                var result = from r in surveyResonses
 | 
					                var result = from r in surveyResonses
 | 
				
			||||||
 | 
					                             join loc in Locations on r.LocationId equals loc.Id
 | 
				
			||||||
                             select new
 | 
					                             select new
 | 
				
			||||||
                             {
 | 
					                             {
 | 
				
			||||||
                                 r.Id,
 | 
					                                 r.Id,
 | 
				
			||||||
@ -947,8 +962,10 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                                 r.EmployeeId,
 | 
					                                 r.EmployeeId,
 | 
				
			||||||
                                 r.ClientDevice,
 | 
					                                 r.ClientDevice,
 | 
				
			||||||
                                 r.KeyAnswerResult,
 | 
					                                 r.KeyAnswerResult,
 | 
				
			||||||
                                 r.Longitute,
 | 
					                                 loc.DataValue,
 | 
				
			||||||
                                 r.Latitude,
 | 
					                                 loc.Enrollment,
 | 
				
			||||||
 | 
					                                 loc.Longitute,
 | 
				
			||||||
 | 
					                                 loc.Latitude,
 | 
				
			||||||
                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
					                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
				
			||||||
                                 answers = from ans in answers
 | 
					                                 answers = from ans in answers
 | 
				
			||||||
                                           where ans.SurveyResponseId == r.Id
 | 
					                                           where ans.SurveyResponseId == r.Id
 | 
				
			||||||
@ -1004,8 +1021,9 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                // var employees = await employeeServiceProvider.getEmployeesAsync();
 | 
					                // var employees = await employeeServiceProvider.getEmployeesAsync();
 | 
				
			||||||
                var answers = await answerServiceProvider.getAnswersAsync();
 | 
					                var answers = await answerServiceProvider.getAnswersAsync();
 | 
				
			||||||
                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
					                var attachments = await attachmentServiceProvider.getAttachmentsAsync();
 | 
				
			||||||
 | 
					                var Locations = await locationServiceProvider.getLocationsAsync();
 | 
				
			||||||
                var result = from r in surveyResponses
 | 
					                var result = from r in surveyResponses
 | 
				
			||||||
 | 
					                             join loc in Locations on r.LocationId equals loc.Id
 | 
				
			||||||
                             select new
 | 
					                             select new
 | 
				
			||||||
                             {
 | 
					                             {
 | 
				
			||||||
                                 r.Id,
 | 
					                                 r.Id,
 | 
				
			||||||
@ -1014,8 +1032,10 @@ namespace DamageAssesment.Api.Responses.Providers
 | 
				
			|||||||
                                 r.EmployeeId,
 | 
					                                 r.EmployeeId,
 | 
				
			||||||
                                 r.ClientDevice,
 | 
					                                 r.ClientDevice,
 | 
				
			||||||
                                 r.KeyAnswerResult,
 | 
					                                 r.KeyAnswerResult,
 | 
				
			||||||
                                 r.Longitute,
 | 
					                                 loc.DataValue,
 | 
				
			||||||
                                 r.Latitude,
 | 
					                                 loc.Enrollment,
 | 
				
			||||||
 | 
					                                 loc.Longitute,
 | 
				
			||||||
 | 
					                                 loc.Latitude,
 | 
				
			||||||
                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
					                                 Employee = employeeid != 0 ? _employee : (from e in employees where r.EmployeeId == e.Id select new { e.Id, e.Name, e.BirthDate, e.Email, e.OfficePhoneNumber }).SingleOrDefault(),
 | 
				
			||||||
                                 answers = from ans in answers
 | 
					                                 answers = from ans in answers
 | 
				
			||||||
                                           where ans.SurveyResponseId == r.Id
 | 
					                                           where ans.SurveyResponseId == r.Id
 | 
				
			||||||
 | 
				
			|||||||
@ -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)
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user