From 4792acea764a8dba20c2c7827def101e68fa6302 Mon Sep 17 00:00:00 2001 From: Kham Date: Mon, 23 Aug 2021 17:08:27 +1000 Subject: [PATCH] add for allow header for dowload file on client Content-Disposition --- .../ConcessionValidationController.cs | 14 ++- .../Properties/launchSettings.json | 2 +- .../ConcessionValidationReportRepository.cs | 103 ++++++++++++++++++ .../ConcessionValidationRepository.cs | 4 +- .../Repository/UserRepository.cs | 4 +- CarParkValidationAPI/Startup.cs | 3 + 6 files changed, 123 insertions(+), 7 deletions(-) create mode 100644 CarParkValidationAPI/Repository/ConcessionValidationReportRepository.cs diff --git a/CarParkValidationAPI/Controllers/ConcessionValidationController.cs b/CarParkValidationAPI/Controllers/ConcessionValidationController.cs index e3751c9..c1e2fb9 100644 --- a/CarParkValidationAPI/Controllers/ConcessionValidationController.cs +++ b/CarParkValidationAPI/Controllers/ConcessionValidationController.cs @@ -6,6 +6,7 @@ using CarParkValidationAPI.Interface; using System.Threading.Tasks; using System; using Microsoft.AspNetCore.StaticFiles; +using CarParkValidationAPI.Repository; namespace CarParkValidationAPI.Controllers { @@ -14,10 +15,15 @@ namespace CarParkValidationAPI.Controllers [Route("api/v1/[controller]")] public class ConcessionValidationController : ControllerBase { + private ConcessionValidationReportRepository _concessionValidationReport; + private IConcessionValidation _concessionValidation; private readonly FileExtensionContentTypeProvider _contentTypeProvider; - public ConcessionValidationController(IConcessionValidation concessionValidation) + + public ConcessionValidationController(IConcessionValidation concessionValidation, + ConcessionValidationReportRepository concesionReportReport) { + _concessionValidationReport = concesionReportReport; _concessionValidation = concessionValidation; } @@ -33,6 +39,7 @@ namespace CarParkValidationAPI.Controllers [HttpGet] public async Task ConcessionValidation(bool onlyActive=true) { + var retval = await _concessionValidation.LoadConcessionValidationAsync(onlyActive); return Ok(retval); } @@ -73,8 +80,9 @@ namespace CarParkValidationAPI.Controllers public async Task GetReportFile(DateTime fromDate , DateTime toDate) { - var result = await _concessionValidation.GetReport(fromDate, toDate); - string fileContentType = Map(result.Data.FileName); + // this.Response.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition"); + var result = await _concessionValidationReport.GetConcessionValidationReport(fromDate, toDate); // _concessionValidation.GetReport(fromDate, toDate); + string fileContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; //Map(result.Data.FileName); return File(result.Data.Content, fileContentType, result.Data.FileName); } diff --git a/CarParkValidationAPI/Properties/launchSettings.json b/CarParkValidationAPI/Properties/launchSettings.json index 4afabc6..e94cf0a 100644 --- a/CarParkValidationAPI/Properties/launchSettings.json +++ b/CarParkValidationAPI/Properties/launchSettings.json @@ -16,7 +16,7 @@ "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, - "launchUrl": "api/v1/LookupCode/ConcessionTypes", + "launchUrl": "swagger", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/CarParkValidationAPI/Repository/ConcessionValidationReportRepository.cs b/CarParkValidationAPI/Repository/ConcessionValidationReportRepository.cs new file mode 100644 index 0000000..0c8bf91 --- /dev/null +++ b/CarParkValidationAPI/Repository/ConcessionValidationReportRepository.cs @@ -0,0 +1,103 @@ +using CarParkValidationAPI.Datas; +using CarParkValidationAPI.Models; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using SpreadsheetLight; +using CarParkValidationAPI.Entities; +using System.IO; + +namespace CarParkValidationAPI.Repository +{ + public class ConcessionValidationReportRepository + { + private readonly DataContext _context; + private readonly IOptions _appSettings; + const string DateFormat = "dd-MM-yyyy"; + public ConcessionValidationReportRepository( + DataContext context, IOptions appSettings) + { + _context = context; + _appSettings = appSettings; + } + + public async Task> GetConcessionValidationReport(DateTime fromDate, DateTime toDate) + { + //excel SLDocument sl = new SLDocument(); + int statusCode = 1; + ConcessionValidationExtDto item; + int col = 1; + int row = 1; + SLDocument sl = new SLDocument(); + + + // add the title first + sl.SetCellValue(row, col++, "Date"); + sl.SetCellValue(row, col++, "Concession Card"); + sl.SetCellValue(row, col++, "Concession Holder"); + sl.SetCellValue(row, col++, "ConcessionExpiry"); + sl.SetCellValue(row, col++, "ConcessionType"); + sl.SetCellValue(row, col++, "ValidationPiont"); + sl.SetCellValue(row, col++, "StaffLink No"); + + //format date + + SLStyle style = sl.CreateStyle(); + style.FormatCode = "dd/mm/yyyy hh:mm:ss"; + sl.SetColumnStyle(1, style); + style = sl.CreateStyle(); + style.Font.Bold = true; + sl.SetRowStyle(1, style); + + var list = await _context.SelectConcessionValidationByDate(true, fromDate.ToLocalTime(), toDate.ToLocalTime()); + for (int i = 0; i < list.Count; i++) + { + col = 1; + item = list[i]; + row = i + 2; + sl.SetCellValue(row, col++, item.ValidateDate); + sl.SetCellValue(row, col++, item.ConcessionCard); + sl.SetCellValue(row, col++, item.ConcessionHolder); + sl.SetCellValue(row, col++, item.ConcessionExpiry); + sl.SetCellValue(row, col++, item.ConcessionType); + sl.SetCellValue(row, col++, item.ValidationPiont); + sl.SetCellValue(row, col++, item.StafflinkNo); + } + byte[] array; + // sl.SaveAs("C:\\Temp\\Report\\ConcessionValidationDate" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx"); + using (MemoryStream ws = new MemoryStream()) + { + sl.SaveAs(ws); + array = ws.ToArray(); + /* + using (FileStream fs = new FileStream("c:\\temp\\Report\\conReport.xlsx",FileMode.Create,FileAccess.Write)) + { + ws.WriteTo(fs); + fs.Close(); + } + */ + ws.Close(); + + } + + + var result = new FileContent + { + Content = array, + FileName = "Report" +DateTime.Now.ToString("yyyy_MM_dd_HH_mm")+ ".xlsx", + + }; + + + + return new ResultModel + { + Data = result, + StatusCode = statusCode + }; + + } + } +} diff --git a/CarParkValidationAPI/Repository/ConcessionValidationRepository.cs b/CarParkValidationAPI/Repository/ConcessionValidationRepository.cs index 4cf3372..d37398d 100644 --- a/CarParkValidationAPI/Repository/ConcessionValidationRepository.cs +++ b/CarParkValidationAPI/Repository/ConcessionValidationRepository.cs @@ -23,7 +23,6 @@ namespace CarParkValidationAPI.Repository public ConcessionValidationRepository( DataContext context, - IOptions appSettings) { _context = context; @@ -70,7 +69,7 @@ namespace CarParkValidationAPI.Repository model.ConcessionTypeID = dto.ConcessionTypeId; model.ValidationID = dto.Id; model.StafflinkNo = dto.StafflinkNo; - model.ValidateDate = dto.ValidateDate; + model.ValidateDate = dto.ValidateDate.ToLocalTime(); model.ValidationPointID = dto.ValidationPointId; return model; } @@ -255,6 +254,7 @@ namespace CarParkValidationAPI.Repository { int statusCode = 1; string fileContext = "filecontain as string this is file contain in string format"; + //await this._concessionValidationReport.GetConcessionValidationReport(DateTime.Today.AddDays(-30), DateTime.Today.AddDays(30)); var result = new FileContent { Content = Convert.FromBase64String(fileContext), diff --git a/CarParkValidationAPI/Repository/UserRepository.cs b/CarParkValidationAPI/Repository/UserRepository.cs index 5f6e210..ad3559b 100644 --- a/CarParkValidationAPI/Repository/UserRepository.cs +++ b/CarParkValidationAPI/Repository/UserRepository.cs @@ -64,7 +64,9 @@ namespace CarParkValidationAPI.Repository myUser.LastName = loginInfo.LastName; myUser.Username = loginInfo.StafflinkNo; //now check the adminuser table - var user = _context.AdminUsers.SingleOrDefault(x => x.StafflinkNo == model.Username); + var user = _context.AdminUsers. + SingleOrDefault(x => x.StafflinkNo == model.Username + && x.Active == true); if (user != null) { myUser.Role = user.RoleType; diff --git a/CarParkValidationAPI/Startup.cs b/CarParkValidationAPI/Startup.cs index 37b0950..06957d1 100644 --- a/CarParkValidationAPI/Startup.cs +++ b/CarParkValidationAPI/Startup.cs @@ -90,6 +90,7 @@ namespace CarParkValidationAPI services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(typeof(ConcessionValidationReportRepository)); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. @@ -117,6 +118,8 @@ namespace CarParkValidationAPI .SetIsOriginAllowed(origin => true) .AllowAnyMethod() .AllowAnyHeader() + .WithExposedHeaders("Content-Disposition") + .AllowCredentials()); // global error handler